Activity

orangishcat

This week is LockIn week 3, and I’m going to be submitting this project for it. Here’s what I’ve done so far:

  • Get rid of lunar client sucks message: Qendolin (the original author) added the message; he had a hard time debugging with lunar client when it caused a crash with the mod. I’ve gotten rid of it for now because Lunar seems to work fine right now.
  • Use world time for cloud gen: Added a “Time Source” option to the options menu, with the default being World time. As shown in the attached video, this makes the clouds follow the world time and be affected by /time set commands.
  • Use world seed for cloud gen: The client doesn’t directly receive the world seed, but an obfuscated version of it is sent upon client login for use within the biome manager. I’m using the same seed to produce deterministic cloud patterns based on world seed (previously was hardcoded with seed 1337).

To do list for this week:
[x] get rid of lunar client sucks message

[x] use world time for cloud gen

  • options: clock time, game time, renderer time

[x] use world seed to salt cloud gen

[] sodium extra integration

[] no clouds in desert

[] backport to older version

[] fill cloud void?

[] work with world height datapacks

Attachment
0
orangishcat

Shipped this project!

LockIn Week 2

I had released v0.3.9, but found like 10 more bugs after releasing and decided to take it down.

Unfortunately due to the LockIn sidequest I basically have to ship right now.

So use v0.3.8, it’s been pretty stable so far. If you really want to try out v0.3.9, you can still get it from the latest commit on Github Actions.

If you want to see what I did for the upcoming v0.3.9 release, you can still do so here.

orangishcat

Did a huge storage refactor.

The main problem with the current code is that upon any action that changes options, a callback must be called to update the field in storage. A similar callback must be implemented for each option upon load. This process is quite tedious, and it also makes the codebase littered with storage calls.

I fixed this by using one central appState variable that defines a schema for the save format, and used a $effect to sync the storage whenever certain variables in appState changed.

But this kinda broke everything, so I had to go around fixing bugs for multiple hours.

Anyway, if you’re reading this, here’s a short userscript to add spacing between the paragraphs of a devlog:

import { pa, pn, pq, ps, pt, pv } from "@page-proxy/pp";

// ==Page Proxy==
// @title Add space after paragraph
// @website https://*.hackclub.com/projects/*
// @description Add space after paragraph to devlogs and ship messages
// @author orangishcat
// @grant run-on-page-load
// ==/Page Proxy==

// ==Selectors==
ps.injectCSS(`
div.post__body p
{
margin: 0.85rem 0;
}
div.post__body li
{
  margin: 0.5rem 0;
}
`);
 
// ==/Selectors==

And here it is in Tampermonkey format:

// ==UserScript==
// @name Add space after paragraph
// @match https://*.hackclub.com/projects/*
// @description Add space after paragraph to devlogs and ship messages
// @version 0.1.0
// @author orangishcat
// @run-at document-start
// @require https://orangishcat.github.io/page-proxy/pp/pp.min.js
// ==/UserScript==

// ==Selectors==
ps.injectCSS(`
div.post__body p
{
margin: 0.85rem 0;
}
div.post__body li
{
  margin: 0.5rem 0;
}
`);
// ==/Selectors==

I’ve attached a side-by-side comparison.(left = before, right = after).

Attachment
Attachment
0
orangishcat

The cursed Neoforge build script makes me lose two hours of my life again. Turns out Neoforge doesn’t use include, it uses jarJar instead. Without it, the dependencies are correctly loaded in the development environment, but bundled incorrectly when building the JAR.

-implementation("com.github.bawnorton.mixinsquared:mixinsquared-neoforge:0.3.7-beta.1")
+implementation(jarJar("com.github.bawnorton.mixinsquared:mixinsquared-neoforge:0.3.7-beta.1"))

Error screen looks something like this:

At least it told me it had something to do with MixinSquared. Better than other mixin-related issues I’ve had in the past that just gave me an arbitrary mixin number like mixin_1793.

Attachment
0
orangishcat

Added a settings tool panel.

This controls settings for scripts running on the current tab (top) and also extension settings (bottom). Currently the only extension setting is showing the help tool. Since I’m running out of space and the help tool isn’t all that useful once you’ve used the extension for more than like 5 minutes, it’s the first one to be able to be turned off.

The keybinds are now a bit weird though. Originally it was Shift+1 to Shift+5 from left to right, and now it still is, but the help tool has no keybind since it can’t be turned off, and shifting the keybinds based on whether the help tool appears or not would be a bad idea.

I also want to add some labels differentiating tab settings vs extension settings, but right now I still haven’t figured out how to make them look good.

I also added a @version metadata field that is preserved upon Tampermonkey export. Defaults to 0.1.0 if not present.

Attachment
Attachment
Attachment
0
orangishcat

Shipped this project!

Hours: 20.07
Cookies: 🍪 359
Multiplier: 17.89 cookies/hr

LockIn Week 1

LockIn was definitely huge motivation for me to work on my projects. I probably wouldn’t have spent a single hour on this project if it wasn’t for the sidequest.

Since the last ship, I released versions v0.3.5 to v0.3.8, bringing some MUCH needed QOL changes. Mainly providing support for something that I should have provided a long time ago: multiple scripts running on the same page.

Previously, two scripts matching the same webpage would clash as although the extension would run both scripts, but it would only load one of the scripts in the sidepanel, meaning you’d have to switch to a different tab to edit the other one. Now there is just a nice dropdown for easy switching.

So this is the sort of feature I should have implemented ages ago. Lesson is basically that I need to think through my features more thoroughly and get my priorities straight.

Also, you can export scripts into Tampermonkey format and CSS stylesheet format now! So there is partial support for both Tampermonkey and Stylus now.

I’m also messing around with posting stuff to websites like dev.to to share the project. The extension should be polished enough by now, so hopefully I will have the courage to post on Reddit soon :)

orangishcat

Released v0.3.8 today. Just some polish and QOL features.

  • Script minification (using terser and css-tree) to minify exported scripts
  • Disable all grants button: prevents all scripts from using grants temporarily (basically preventing any scripts from running on page load, as that’s the only grant)
  • Export tool UI polish. There’s only a small difference but I think it makes the UI clearer.
  • More internal refactors, again. I have to do this often as AI writes code pretty quickly, but I think that’s just a byproduct of faster development. If I wrote everything by hand, I would still have to do refactors anyway, but instead I would just put them off for eternity.
Attachment
Attachment
0
orangishcat

I released v0.3.7, making some convenient API changes, bug fixes, and most importantly, finally getting export to Tampermonkey to work. The current setup is to get Tampermonkey to load the pp library from a url hosted on the demo page for my extension.

The pp library is built into JS via a script which I run manually every time I release a version, and it literally just injects globals into the script. The setup is mildly cursed but I can’t think of anything better right now. Surely this won’t just remain in the codebase forever, just like all my other temporary fixes…

Look! I’m running a Page Proxy script in Tampermonkey!

Attachment
0
orangishcat

Painfully updated documentation 😭

This involved manually screenshotting each component and cropping them and filling the unwanted edges in with transparency.

And no, “Capture node screenshot” in DevTools does not set the contents behind the node to transparent, so the background is captured inside of the screenshot. And it doesn’t work in an extension’s sidepanel either.

Attachment
Attachment
0
orangishcat

Did a lot of polish to the website. Also added a nice undo button that pops from the recording stack and selects the element that was selected in the previous stack.

0
orangishcat

Finally added support for multiple scripts running on the same tab! Previously, the editor would just load the script that was created earlier, which was really annoying as you would have to navigate to a different tab to edit another script. Now there is just a nice dropdown.

Of course, I also updated the documentation and fixed bugs, as usual.

Attachment
0
orangishcat

It’s been 5 days since Minecraft 26.1 released. Here’s what I’ve done so far.

  • Cloud pointiness option
  • Fixed Iris compatibility and shader support
  • Fixed shader preset dropdown rendering behind text, mutating option text, etc.
  • Fixed clouds not being affected by view bobbing and nausea effects
  • Clean up build.gradle
  • Lots of code quality improvements under the hood.

Here’s some screenshots with the fixed shader support.

Attachment
Attachment
0
orangishcat

Added a feature list to the demo! (which took forever, as usual.) Also made a lot of fixes to the website UI, enforcing consistent margins and padding and whatnot, also cleaning up some of the website code.

0
orangishcat

Time really flies when Minecraft modding; digging through source code is not fun! I felt like I barely did anything and I was already way past 10 hours.

After previously helping port the mod to Minecraft 1.21.11, I now have to port it to 26.1.

Now starting from 26.2 Minecraft will be moving to Vulkan, so I wouuld have to rewrite the mostly-OpenGL renderer in Blaze3D (Mojang’s rendering abstraction), and later port the shaders to be Vulkan-compatible.

Fortunately 26.1 is still OpenGL only and I still can procrastinate a little bit before having to do all that.

There are a lot of files changed…

Here’s a screenshot of the mod in action.

Attachment
0
orangishcat

Shipped this project!

Hours: 64.17
Cookies: 🍪 811
Multiplier: 27.94 cookies/hr

The main feature of this ship is the most important tool of the extension, the record tool! It records your actions done with the select tool so you can easily convert your actions to code, speeding up the userscript creation process by a lot.

I made a demo for the landing page. It took forever, but hopefully it looks cool?

I updated the documentation, it should be much more polished now.

I also fixed a ton of bugs. The browser-specific ones were really annoying. Guess that’s why I have to test every browser.

orangishcat

I finally have a landing page demo now. It took forever but hopefully it was worth it?

0
orangishcat

Recording tool, probably the most important of them all. Allows you to convert actions you would normally do in DevTools into code.

Also reorganized the entire project, splitting many files.

Attachment
Attachment
0
orangishcat

Lots and lots of polishing and fixes. There’s much more documentation and help links now, so hopefully the product will be a lot easier to use.

Attachment
0
orangishcat

Made a few tweaks to documentation and UI.

Attachment
0
orangishcat

Shipped this project!

Hours: 40.53
Cookies: 🍪 982
Multiplier: 24.24 cookies/hr

First ship! This “simple” project ended up taking 40 hours.

Features are limited and the landing page is kinda empty, but I needed to get an initial ship out.

I built a Tampermonkey alternative that can proxy and inject JS and CSS into any website.

The main difference is that there’s a TON of GUI tools plus a nice API to make your life easier. No more copying selectors and managing them; the API can handle all that already.

This is my second attempt at making a website/web-based product. I actually knew what I was doing this time, which is nice.

This project is far from complete, so don’t hesitate to report issues or make suggestions!

orangishcat

I worked on documentation, export tool, demo website, and lots more; mostly polishing and stuff for the past few days.

This was supposed to be an easy project, and now I have 40 hours on it…

Just a few more final tests, and I’ll get a first ship out to get some payout. Features are limited but I don’t have time for everything.

Attachment
Attachment
Attachment
Attachment
0
orangishcat

The extension is mostly ready for a first ship. Also Monaco editor yay!

The website still has a long way to go, though…

Attachment
0
orangishcat

Added this panel that allows you to match elements in many ways

Attachment
1

Comments

Eucatastrophe
Eucatastrophe 2 months ago

yippee

orangishcat

UI implementation is finally done, I can finally begin implementing functionality

Only took nearly 20 hours

Attachment
0
orangishcat

I wanted most of the functionality to be in the website, but CORS just doesn’t work like that. Oh well, I guess I’m developing a Chrome/Firefox extension now (using WXT).

Here’s the design.

Attachment
0
orangishcat

Main app layout implemented and finalized, would look something like this

Attachment
0
orangishcat

Designed the main app in Figma. Progress is slow, but I hope I’ll get better at it.

Designing is actually kinda fun. Previously I made websites by jumping straight into the coding without planning, and the end result was not what I had imagined at all. Using Figma though, this design already looks way better than what I had originally planned, and unlike before, I am actually excited this time to implement this design in code.

Attachment
0
orangishcat

Haven’t written much code yet, but I have created some basic wireframes and components

Attachment
0