Skip to content

Commit 2232293

Browse files
committed
Add automatic version publishing for Modrinth and CurseForge and other fixes (#10)
- Fix project not installing due to accesswidener not existing in subprojects - Fix config being stored in the wrong directory - Fixed keybinds not working in GUI screens - Fixed savestate not saving entities correctly - Changed savestate screen to close on error - Fixed savestate data failing to save when directory doesn't exist - Fixed tickrate not being correctly applied after loading a savestate - Fixed a softlock when loading a savestate in tr0 - Fixed increase and decrease tickrate not going to the nearest value after setting a custom tickrate - Add github publish action
2 parents fb2220b + c57ff4c commit 2232293

24 files changed

+412
-109
lines changed

.github/workflows/release.yml

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
name: Create Release
2+
on:
3+
release:
4+
types: [published]
5+
jobs:
6+
build:
7+
runs-on: ubuntu-latest
8+
steps:
9+
- uses: actions/checkout@v4
10+
- name: Setup Java
11+
uses: actions/setup-java@v4
12+
with:
13+
java-version: '22'
14+
distribution: 'temurin'
15+
architecture: x64
16+
- name: Setup Gradle
17+
uses: gradle/actions/setup-gradle@v4
18+
with:
19+
gradle-version: 8.10.2
20+
- name: Setup workspace
21+
run: gradle preprocessBase
22+
- name: Build
23+
run: gradle collectBuilds
24+
- name: Upload assets
25+
uses: softprops/action-gh-release@v2
26+
with:
27+
files: 'build/!(-@(dev|sources|javadoc|all)).jar'
28+
- name: Publish 1.21.1
29+
uses: Kir-Antipov/[email protected]
30+
with:
31+
files: 'build/*-1.21.1-*!(*-@(dev|sources|javadoc|all)).jar'
32+
modrinth-token: ${{ secrets.MODRINTH_TOKEN }}
33+
curseforge-token: ${{ secrets.CURSEFORGE_TOKEN }}
34+
- name: Publish 1.21.3
35+
uses: Kir-Antipov/[email protected]
36+
with:
37+
files: 'build/*-1.21.3-*!(*-@(dev|sources|javadoc|all)).jar'
38+
modrinth-token: ${{ secrets.MODRINTH_TOKEN }}
39+
curseforge-token: ${{ secrets.CURSEFORGE_TOKEN }}

1.21.1/gradle.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
org.gradle.jvmargs=-Xmx3G
22

33
minecraft_version=1.21.1
4+
allowed_mc_version=>=1.21 <=1.21.1
45
fabric_version=0.107.0+1.21.1

1.21.3/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@ plugins {
22
id 'fabric-loom' version "${loom_version}"
33
}
44

5-
apply from: "../common.gradle"
5+
apply from: "../common.gradle"

1.21.3/gradle.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
org.gradle.jvmargs=-Xmx3G
22

33
minecraft_version=1.21.3
4+
allowed_mc_version=>=1.21.2 <=1.21.3
45
fabric_version=0.107.0+1.21.3

common.gradle

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,6 @@ base {
1010
archivesName = "${mod_name}-${minecraft_version}"
1111
}
1212

13-
loom {
14-
// set access widener
15-
accessWidenerPath = file('src/main/resources/lotaslight.accesswidener')
16-
// set custom log4jconfig
17-
log4jConfigs.from(file('src/main/resources/log4j.xml'))
18-
}
19-
20-
2113
tasks.withType(JavaCompile).configureEach {
2214
it.options.release = 21
2315
}
@@ -32,10 +24,28 @@ dependencies {
3224
modImplementation "net.fabricmc.fabric-api:fabric-api:${fabric_version}"
3325
}
3426

27+
loom {
28+
// set access widener
29+
def accessWidenerFile = file('src/main/resources/lotaslight.accesswidener')
30+
if(accessWidenerFile.exists()) {
31+
accessWidenerPath = accessWidenerFile
32+
}
33+
34+
// set custom log4jconfig
35+
def log4jFile = file('src/main/resources/log4j.xml')
36+
if(log4jFile.exists()) {
37+
log4jConfigs.from(log4jFile)
38+
}
39+
}
40+
3541
processResources {
3642
inputs.property "version", project.version
43+
inputs.property "allowedMcVersion", project.allowed_mc_version
3744

38-
filesMatching("fabric.mod.json") {
45+
filesMatching("fabric.mod.json") { file ->
3946
expand "version": project.version
47+
filter { String line ->
48+
line.replace('"minecraft": "*",', '"minecraft": "' + project.allowed_mc_version + '",')
49+
};
4050
}
41-
}
51+
}

src/main/java/com/minecrafttas/lotas_light/LoTASLight.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,5 @@ public void onInitialize() {
3737
}
3838
}
3939
});
40-
41-
ServerLifecycleEvents.SERVER_STOPPED.register(server -> {
42-
// savestateHandler = null
43-
});
4440
}
4541
}

src/main/java/com/minecrafttas/lotas_light/LoTASLightClient.java

Lines changed: 70 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,15 @@
1010
import com.minecrafttas.lotas_light.event.EventClientGameLoop;
1111
import com.minecrafttas.lotas_light.event.EventOnClientJoinServer;
1212
import com.minecrafttas.lotas_light.event.HudRenderExperienceCallback;
13+
import com.minecrafttas.lotas_light.keybind.KeybindManager;
14+
import com.minecrafttas.lotas_light.keybind.KeybindManager.Keybind;
1315
import com.minecrafttas.lotas_light.savestates.SavestateHandler.SavestateCallback;
1416
import com.minecrafttas.lotas_light.savestates.gui.SavestateDoneGui;
1517
import com.minecrafttas.lotas_light.savestates.gui.SavestateGui;
1618
import com.minecrafttas.lotas_light.savestates.gui.SavestateRenameGui;
17-
import com.mojang.blaze3d.platform.InputConstants;
1819
import net.fabricmc.api.ClientModInitializer;
19-
import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper;
2020
import net.minecraft.ChatFormatting;
2121
import net.minecraft.client.DeltaTracker;
22-
import net.minecraft.client.KeyMapping;
2322
import net.minecraft.client.Minecraft;
2423
import net.minecraft.client.gui.GuiGraphics;
2524
import net.minecraft.client.resources.language.I18n;
@@ -39,12 +38,7 @@
3938

4039
public class LoTASLightClient implements ClientModInitializer {
4140

42-
private KeyMapping increaseTickrate = new KeyMapping("key.lotaslight.increaseTickrate", InputConstants.Type.KEYSYM, GLFW.GLFW_KEY_PERIOD, "keycategory.lotaslight.lotaslight");
43-
private KeyMapping decreaseTickrate = new KeyMapping("key.lotaslight.decreaseTickrate", InputConstants.Type.KEYSYM, GLFW.GLFW_KEY_COMMA, "keycategory.lotaslight.lotaslight");
44-
private KeyMapping freezeTickrate = new KeyMapping("key.lotaslight.freezeTickrate", InputConstants.Type.KEYSYM, GLFW.GLFW_KEY_F8, "keycategory.lotaslight.lotaslight");
45-
private KeyMapping advanceTickrate = new KeyMapping("key.lotaslight.advanceTickrate", InputConstants.Type.KEYSYM, GLFW.GLFW_KEY_F9, "keycategory.lotaslight.lotaslight");
46-
private KeyMapping savestate = new KeyMapping("key.lotaslight.savestate", InputConstants.Type.KEYSYM, GLFW.GLFW_KEY_J, "keycategory.lotaslight.lotaslight");
47-
private KeyMapping loadstate = new KeyMapping("key.lotaslight.loadstate", InputConstants.Type.KEYSYM, GLFW.GLFW_KEY_K, "keycategory.lotaslight.lotaslight");
41+
private KeybindManager keybindManager = new KeybindManager(KeybindManager::isKeyDownExceptTextField);
4842

4943
private float[] rates = new float[] { .1f, .2f, .5f, 1f, 2f, 5f, 10f, 20f, 40f, 100f };
5044
private short rateIndex = 7;
@@ -56,41 +50,24 @@ public class LoTASLightClient implements ClientModInitializer {
5650
@Override
5751
public void onInitializeClient() {
5852
Minecraft mc = Minecraft.getInstance();
59-
configpath = mc.gameDirectory.toPath().resolve("configs/lotas-light.cfg");
53+
configpath = mc.gameDirectory.toPath().resolve("config/lotas-light.cfg");
6054
config = new Configuration("LoTAS-Light config", configpath);
6155
config.loadFromXML();
56+
LoTASLight.startTickrate = Float.parseFloat(LoTASLightClient.config.get(ConfigOptions.DEFAULT_TICKRATE));
57+
rateIndex = (short) findClosestRateIndex(LoTASLight.startTickrate);
6258
registerKeybindings();
6359
HudRenderExperienceCallback.EVENT.register(this::drawHud);
6460
}
6561

6662
private void registerKeybindings() {
67-
KeyBindingHelper.registerKeyBinding(increaseTickrate);
68-
KeyBindingHelper.registerKeyBinding(decreaseTickrate);
69-
KeyBindingHelper.registerKeyBinding(freezeTickrate);
70-
KeyBindingHelper.registerKeyBinding(advanceTickrate);
71-
KeyBindingHelper.registerKeyBinding(savestate);
72-
KeyBindingHelper.registerKeyBinding(loadstate);
73-
74-
EventClientGameLoop.EVENT.register(client -> {
75-
while (increaseTickrate.consumeClick()) {
76-
increaseTickrate(client);
77-
}
78-
while (decreaseTickrate.consumeClick()) {
79-
decreaseTickrate(client);
80-
}
81-
while (freezeTickrate.consumeClick()) {
82-
freezeTickrate(client);
83-
}
84-
while (advanceTickrate.consumeClick()) {
85-
advanceTickrate(client);
86-
}
87-
while (savestate.consumeClick()) {
88-
savestate();
89-
}
90-
while (loadstate.consumeClick()) {
91-
loadstate();
92-
}
93-
});
63+
keybindManager.registerKeybind(new Keybind("key.lotaslight.increaseTickrate", "keycategory.lotaslight.lotaslight", GLFW.GLFW_KEY_PERIOD, this::increaseTickrate));
64+
keybindManager.registerKeybind(new Keybind("key.lotaslight.decreaseTickrate", "keycategory.lotaslight.lotaslight", GLFW.GLFW_KEY_COMMA, this::decreaseTickrate));
65+
keybindManager.registerKeybind(new Keybind("key.lotaslight.freezeTickrate", "keycategory.lotaslight.lotaslight", GLFW.GLFW_KEY_F8, this::freezeTickrate, KeybindManager::isKeyDown));
66+
keybindManager.registerKeybind(new Keybind("key.lotaslight.advanceTickrate", "keycategory.lotaslight.lotaslight", GLFW.GLFW_KEY_F9, this::advanceTickrate, KeybindManager::isKeyDown));
67+
keybindManager.registerKeybind(new Keybind("key.lotaslight.savestate", "keycategory.lotaslight.lotaslight", GLFW.GLFW_KEY_J, this::savestate));
68+
keybindManager.registerKeybind(new Keybind("key.lotaslight.loadstate", "keycategory.lotaslight.lotaslight", GLFW.GLFW_KEY_K, this::loadstate));
69+
70+
EventClientGameLoop.EVENT.register(keybindManager::onRunClientGameLoop);
9471

9572
EventOnClientJoinServer.EVENT.register(player -> {
9673
if (LoTASLight.savestateHandler.loadStateComplete != null) {
@@ -102,12 +79,16 @@ private void registerKeybindings() {
10279
}
10380

10481
private void increaseTickrate(Minecraft client) {
82+
if (client.level == null) {
83+
return;
84+
}
10585
TickRateManager clientTickrateChanger = client.level.tickRateManager();
10686
IntegratedServer server = client.getSingleplayerServer();
10787
if (server == null) {
10888
return;
10989
}
11090
ServerTickRateManager serverTickrateChanger = server.tickRateManager();
91+
rateIndex = findClosestRateIndex(clientTickrateChanger.tickrate());
11192

11293
rateIndex++;
11394
rateIndex = (short) Math.clamp(rateIndex, 0, rates.length - 1);
@@ -124,12 +105,16 @@ private void increaseTickrate(Minecraft client) {
124105
}
125106

126107
private void decreaseTickrate(Minecraft client) {
108+
if (client.level == null) {
109+
return;
110+
}
127111
TickRateManager clientTickrateChanger = client.level.tickRateManager();
128112
IntegratedServer server = client.getSingleplayerServer();
129113
if (server == null) {
130114
return;
131115
}
132116
ServerTickRateManager serverTickrateChanger = server.tickRateManager();
117+
rateIndex = findClosestRateIndex(clientTickrateChanger.tickrate());
133118

134119
rateIndex--;
135120
rateIndex = (short) Math.clamp(rateIndex, 0, rates.length - 1);
@@ -146,6 +131,9 @@ private void decreaseTickrate(Minecraft client) {
146131
}
147132

148133
private void freezeTickrate(Minecraft client) {
134+
if (client.level == null) {
135+
return;
136+
}
149137
TickRateManager clientTickrateManager = client.level.tickRateManager();
150138
IntegratedServer server = client.getSingleplayerServer();
151139
if (server == null) {
@@ -161,6 +149,9 @@ private void freezeTickrate(Minecraft client) {
161149
}
162150

163151
private void advanceTickrate(Minecraft client) {
152+
if (client.level == null) {
153+
return;
154+
}
164155
TickRateManager clientTickrateManager = client.level.tickRateManager();
165156
IntegratedServer server = client.getSingleplayerServer();
166157
if (server == null) {
@@ -191,9 +182,11 @@ private void drawHud(GuiGraphics context, DeltaTracker deltaTicks) {
191182
//# end
192183
}
193184

194-
private void savestate() {
195-
Minecraft mc = Minecraft.getInstance();
185+
private void savestate(Minecraft mc) {
196186
MinecraftServer server = mc.getSingleplayerServer();
187+
if (server == null) {
188+
return;
189+
}
197190
for (ServerLevel level : server.getAllLevels()) {
198191
level.noSave = true;
199192
}
@@ -224,12 +217,15 @@ private void savestate() {
224217
}
225218
mc.gui.getChat().addMessage(Component.literal(message).withStyle(ChatFormatting.RED));
226219
LoTASLight.savestateHandler.resetState();
220+
Minecraft.getInstance().setScreen(null);
227221
}
228222
}
229223

230-
private void loadstate() {
231-
Minecraft mc = Minecraft.getInstance();
232-
224+
private void loadstate(Minecraft mc) {
225+
MinecraftServer server = mc.getSingleplayerServer();
226+
if (server == null) {
227+
return;
228+
}
233229
SavestateCallback doneLoadingCallback = (paths -> {
234230
//@formatter:off
235231
mc.setScreen(
@@ -245,7 +241,7 @@ private void loadstate() {
245241
});
246242

247243
try {
248-
MinecraftServer server = mc.getSingleplayerServer();
244+
249245
for (ServerLevel level : server.getAllLevels()) {
250246
level.noSave = true;
251247
}
@@ -259,6 +255,37 @@ private void loadstate() {
259255
}
260256
mc.gui.getChat().addMessage(Component.literal(message).withStyle(ChatFormatting.RED));
261257
LoTASLight.savestateHandler.resetState();
258+
Minecraft.getInstance().setScreen(null);
259+
}
260+
}
261+
262+
private short findClosestRateIndex(float tickrate) {
263+
for (int i = 0; i < rates.length; i++) {
264+
int iMinus1 = i - 1;
265+
266+
float min = 0f;
267+
if (iMinus1 >= 0) {
268+
min = rates[iMinus1];
269+
}
270+
float max = rates[i];
271+
272+
if (tickrate >= min && tickrate < max) {
273+
if (min == 0f) {
274+
return (short) i;
275+
}
276+
277+
float distanceToMin = tickrate - min;
278+
float distanceToMax = max - tickrate;
279+
280+
if (distanceToMin < distanceToMax) {
281+
return (short) iMinus1;
282+
} else if (distanceToMax < distanceToMin) {
283+
return (short) i;
284+
} else {
285+
return (short) iMinus1;
286+
}
287+
}
262288
}
289+
return (short) (rates.length - 1);
263290
}
264291
}

0 commit comments

Comments
 (0)