Skip to content

Commit 906555b

Browse files
authored
Trying to fix tickadvance... again (#21)
Maybe this time...
2 parents 8502400 + 3f7f293 commit 906555b

File tree

5 files changed

+40
-36
lines changed

5 files changed

+40
-36
lines changed

settings.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
pluginManagement {
22
repositories {
3-
//mavenLocal() // For development purposes
3+
// mavenLocal() // For development purposes
44
mavenCentral()
55
maven {
66
url = "https://maven.mgnet.work/main"

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

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -91,13 +91,12 @@ private void increaseTickrate(Minecraft client) {
9191
if (client.level == null) {
9292
return;
9393
}
94-
TickRateManager clientTickrateChanger = client.level.tickRateManager();
9594
IntegratedServer server = client.getSingleplayerServer();
9695
if (server == null) {
9796
return;
9897
}
9998
ServerTickRateManager serverTickrateChanger = server.tickRateManager();
100-
rateIndex = findClosestRateIndex(clientTickrateChanger.tickrate());
99+
rateIndex = findClosestRateIndex(serverTickrateChanger.tickrate());
101100

102101
rateIndex++;
103102
//# 1.20.6
@@ -114,20 +113,18 @@ private void increaseTickrate(Minecraft client) {
114113
client.gui.getChat().addMessage(Component.translatable("msg.lotaslight.setTickrate", tickrate));
115114
}
116115
serverTickrateChanger.setTickRate(tickrate);
117-
clientTickrateChanger.setTickRate(tickrate);
118116
}
119117

120118
private void decreaseTickrate(Minecraft client) {
121119
if (client.level == null) {
122120
return;
123121
}
124-
TickRateManager clientTickrateChanger = client.level.tickRateManager();
125122
IntegratedServer server = client.getSingleplayerServer();
126123
if (server == null) {
127124
return;
128125
}
129126
ServerTickRateManager serverTickrateChanger = server.tickRateManager();
130-
rateIndex = findClosestRateIndex(clientTickrateChanger.tickrate());
127+
rateIndex = findClosestRateIndex(serverTickrateChanger.tickrate());
131128

132129
rateIndex--;
133130
//# 1.20.6
@@ -145,25 +142,21 @@ private void decreaseTickrate(Minecraft client) {
145142
client.gui.getChat().addMessage(Component.translatable("msg.lotaslight.setTickrate", tickrate));
146143
}
147144
serverTickrateChanger.setTickRate(tickrate);
148-
clientTickrateChanger.setTickRate(tickrate);
149145
}
150146

151147
private void freezeTickrate(Minecraft client) {
152148
if (client.level == null) {
153149
return;
154150
}
155-
TickRateManager clientTickrateManager = client.level.tickRateManager();
156151
IntegratedServer server = client.getSingleplayerServer();
157152
if (server == null) {
158153
return;
159154
}
160155
ServerTickRateManager serverTickrateManager = server.tickRateManager();
161156

162-
Tickratechanger clientTickrateChanger = (Tickratechanger) clientTickrateManager;
163157
Tickratechanger serverTickrateChanger = (Tickratechanger) serverTickrateManager;
164158

165-
boolean enable = clientTickrateManager.tickrate() != 0;
166-
clientTickrateChanger.enableTickrate0(enable);
159+
boolean enable = serverTickrateManager.tickrate() != 0;
167160
serverTickrateChanger.enableTickrate0(enable);
168161
}
169162

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package com.minecrafttas.lotas_light.mixin;
2+
3+
import org.spongepowered.asm.mixin.Mixin;
4+
import org.spongepowered.asm.mixin.Shadow;
5+
import org.spongepowered.asm.mixin.injection.At;
6+
import org.spongepowered.asm.mixin.injection.Redirect;
7+
8+
import com.minecrafttas.lotas_light.duck.Tickratechanger;
9+
10+
import net.minecraft.server.ServerTickRateManager;
11+
12+
@Mixin(ServerTickRateManager.class)
13+
public abstract class MixinServerTickRateManager {
14+
15+
@Redirect(method = "setTickRate", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/ServerTickRateManager;updateStateToClients()V"))
16+
public void redirect_setTickRate(ServerTickRateManager manager) {
17+
Tickratechanger tickratechanger = (Tickratechanger) (Object) this;
18+
if (!tickratechanger.isAdvanceTick()) {
19+
this.updateStateToClients();
20+
}
21+
}
22+
23+
@Shadow
24+
protected abstract void updateStateToClients();
25+
}

src/main/java/com/minecrafttas/lotas_light/mixin/MixinTickRateManager.java

Lines changed: 9 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,12 @@
1515
import com.minecrafttas.lotas_light.duck.Tickratechanger;
1616

1717
import net.minecraft.client.Minecraft;
18-
import net.minecraft.server.ServerTickRateManager;
1918
import net.minecraft.util.TimeUtil;
2019
import net.minecraft.world.TickRateManager;
2120

2221
/**
23-
* Changes the vanilla tickrate manager to allow for lower tickrates,
24-
* better freeze and stepping functionality.
22+
* Changes the vanilla tickrate manager to allow for lower tickrates, better
23+
* freeze and stepping functionality.
2524
*
2625
* @author Scribble
2726
*/
@@ -30,9 +29,7 @@ public abstract class MixinTickRateManager implements Tickratechanger {
3029
@Unique
3130
private static float tickrateSaved = 20;
3231
@Unique
33-
private boolean advanceTickrateServer;
34-
@Unique
35-
private boolean advanceTickrateClient;
32+
private boolean advanceTickrate;
3633
@Unique
3734
private boolean isDisconnecting;
3835

@@ -82,8 +79,7 @@ public float getTickrateSaved() {
8279

8380
@Override
8481
public void toggleTickrate0() {
85-
advanceTickrateServer = false;
86-
advanceTickrateClient = false;
82+
advanceTickrate = false;
8783
if (tickrate == 0) {
8884
setTickRate(tickrateSaved);
8985
} else {
@@ -93,8 +89,7 @@ public void toggleTickrate0() {
9389

9490
@Override
9591
public void enableTickrate0(boolean enable) {
96-
advanceTickrateServer = false;
97-
advanceTickrateClient = false;
92+
advanceTickrate = false;
9893
if (enable) {
9994
if (tickrate != 0)
10095
setTickRate(0f);
@@ -107,17 +102,14 @@ public void enableTickrate0(boolean enable) {
107102
@Override
108103
public void advanceTick() {
109104
if (tickrate == 0) {
105+
this.advanceTickrate = true;
110106
setTickRate(tickrateSaved);
111-
if (isServer())
112-
this.advanceTickrateServer = true;
113-
else
114-
this.advanceTickrateClient = true;
115107
}
116108
}
117109

118110
@Override
119111
public boolean isAdvanceTick() {
120-
return advanceTickrateServer || advanceTickrateClient;
112+
return advanceTickrate;
121113
}
122114

123115
@Override
@@ -131,12 +123,9 @@ public void disconnect() {
131123

132124
@Inject(method = "tick", at = @At("RETURN"))
133125
public void inject_Tick(CallbackInfo ci) {
134-
if (advanceTickrateServer || advanceTickrateClient) {
135-
if (isServer())
136-
this.advanceTickrateServer = false;
137-
else
138-
this.advanceTickrateClient = false;
126+
if (advanceTickrate) {
139127
setTickRate(0);
128+
this.advanceTickrate = false;
140129
}
141130
}
142131

@@ -161,10 +150,6 @@ public long getAdjustedMilliseconds() {
161150
return (long) (fakeTimeSinceTC + time);
162151
}
163152

164-
private boolean isServer() {
165-
return ((TickRateManager) (Object) this) instanceof ServerTickRateManager;
166-
}
167-
168153
@Shadow
169154
protected abstract void setTickRate(float f);
170155

src/main/resources/lotaslight.mixins.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@
88
"MixinMinecraftServer",
99
"AccessorLevelStorage",
1010
"AccessorServerPlayer",
11-
"MixinLevelStorageAccess"
11+
"MixinLevelStorageAccess",
12+
"MixinServerTickRateManager"
1213
],
1314
"client":[
1415
"MixinMinecraft",

0 commit comments

Comments
 (0)