Use setters and getters for frozen state, separate superHot and

don't tick regular tick events
This commit is contained in:
altrisi committed 2020-12-29 16:00:07 +01:00
1 parent 33347baaf7
commit 6d3ac93e4c
9 files changed
+71 -25

No files matched your search

@@ -96,19 +96,15 @@ public class TickCommand
private static int toggleFreeze(ServerCommandSource source, boolean isDeep) private static int toggleFreeze(ServerCommandSource source, boolean isDeep)
{ {
TickSpeed.is_paused = !TickSpeed.is_paused; TickSpeed.setFrozenState(!TickSpeed.isPaused(), isDeep);
if (TickSpeed.is_paused) if (TickSpeed.isPaused())
{ {
TickSpeed.deepFreeze = isDeep;
Messenger.m(source, "gi Game is "+(isDeep?"deeply ":"")+"frozen"); Messenger.m(source, "gi Game is "+(isDeep?"deeply ":"")+"frozen");
} }
else else
{ {
TickSpeed.deepFreeze = false;
Messenger.m(source, "gi Game runs normally"); Messenger.m(source, "gi Game runs normally");
} }
ServerNetworkHandler.updateTickingStateToConnectedPlayers();
return 1; return 1;
} }
@@ -121,10 +117,10 @@ public class TickCommand
private static int toggleSuperHot(ServerCommandSource source) private static int toggleSuperHot(ServerCommandSource source)
{ {
TickSpeed.is_superHot = !TickSpeed.is_superHot; TickSpeed.is_superHot = !TickSpeed.is_superHot;
ServerNetworkHandler.updateTickingStateToConnectedPlayers(); ServerNetworkHandler.updateSuperHotStateToConnectedPlayers();
if (TickSpeed.is_superHot) if (TickSpeed.is_superHot)
{ {
Messenger.m(source,"gi Superhot enabled"); Messenger.m(source, "gi Superhot enabled");
} }
else else
{ {
+34 -2
View File
@@ -25,10 +25,42 @@ public class TickSpeed
public static ServerCommandSource tick_warp_sender = null; public static ServerCommandSource tick_warp_sender = null;
public static int player_active_timeout = 0; public static int player_active_timeout = 0;
public static boolean process_entities = true; public static boolean process_entities = true;
public static boolean deepFreeze = false; private static boolean deepFreeze = false;
public static boolean is_paused = false; private static boolean is_paused = false;
public static boolean is_superHot = false; public static boolean is_superHot = false;
/**
* @return Whether or not the game is in a frozen state.
* You should normally use {@link #process_entities} instead,
* since that one accounts for tick steps and superhot
*/
public static boolean isPaused() {
return is_paused;
}
/**
* This can be used for things that you may not normally want
* to freeze, but may need to in some situations.
* This should be used with {@link #process_entities} to make sure the
* current tick is actually frozen
* @return Whether or not the game is deeply frozen.
*/
public static boolean deeplyFrozen() {
return deepFreeze;
}
/**
* Used to update the frozen state of the game.
* Handles connected clients as well.
* @param isPaused Whether or not the game is paused
* @param isDeepFreeze Whether or not the game is deeply frozen
*/
public static void setFrozenState(boolean isPaused, boolean isDeepFreeze) {
is_paused = isPaused;
deepFreeze = isPaused ? isDeepFreeze : false;
ServerNetworkHandler.updateFrozenStateToConnectedPlayers();
}
/** /**
* Functional interface that listens for tickrate changes. This is * Functional interface that listens for tickrate changes. This is
* implemented to allow tickrate compatibility with other mods etc. * implemented to allow tickrate compatibility with other mods etc.
@@ -18,6 +18,6 @@ public class ChunkTicketManager_tickMixin
{ {
// pausing expiry of tickets // pausing expiry of tickets
// that will prevent also chunks from unloading, so require a deep frozen state // that will prevent also chunks from unloading, so require a deep frozen state
if (!TickSpeed.process_entities && TickSpeed.deepFreeze) age--; if (!TickSpeed.process_entities && TickSpeed.deeplyFrozen()) age--;
} }
} }
@@ -16,7 +16,7 @@ public class CommandFunctionManager_tickMixin
@Inject(method = "tick", at = @At("HEAD"), cancellable = true) @Inject(method = "tick", at = @At("HEAD"), cancellable = true)
private void beforeDatapacks(CallbackInfo ci) private void beforeDatapacks(CallbackInfo ci)
{ {
if (!TickSpeed.process_entities && TickSpeed.deepFreeze) ci.cancel(); if (!TickSpeed.process_entities) ci.cancel();
else else
currentSection = CarpetProfiler.start_section(null, "Datapacks", CarpetProfiler.TYPE.GENERAL); currentSection = CarpetProfiler.start_section(null, "Datapacks", CarpetProfiler.TYPE.GENERAL);
} }
@@ -28,7 +28,7 @@ public class MinecraftClientMixin
if (this.world != null) { if (this.world != null) {
if (CarpetServer.minecraft_server == null) if (CarpetServer.minecraft_server == null)
TickSpeed.tick(); TickSpeed.tick();
if (!TickSpeed.process_entities && TickSpeed.deepFreeze) if (!TickSpeed.process_entities && TickSpeed.deeplyFrozen())
CarpetClient.shapes.renewShapes(); CarpetClient.shapes.renewShapes();
} }
} }
@@ -70,7 +70,7 @@ public abstract class MinecraftServer_scarpetMixin extends ReentrantThreadExecut
)) ))
public void tickTasks(BooleanSupplier booleanSupplier_1, CallbackInfo ci) public void tickTasks(BooleanSupplier booleanSupplier_1, CallbackInfo ci)
{ {
if (!TickSpeed.process_entities && TickSpeed.deepFreeze) if (!TickSpeed.process_entities)
return; return;
TICK.onTick(); TICK.onTick();
NETHER_TICK.onTick(); NETHER_TICK.onTick();
@@ -9,6 +9,7 @@ import carpet.settings.SettingsManager;
import io.netty.buffer.Unpooled; import io.netty.buffer.Unpooled;
import net.minecraft.client.network.ClientPlayerEntity; import net.minecraft.client.network.ClientPlayerEntity;
import net.minecraft.nbt.AbstractNumberTag; import net.minecraft.nbt.AbstractNumberTag;
import net.minecraft.nbt.ByteTag;
import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.ListTag; import net.minecraft.nbt.ListTag;
import net.minecraft.nbt.Tag; import net.minecraft.nbt.Tag;
@@ -67,9 +68,10 @@ public class ClientNetworkHandler
dataHandlers.put("TickRate", (p, t) -> TickSpeed.tickrate(((AbstractNumberTag)t).getFloat(), false)); dataHandlers.put("TickRate", (p, t) -> TickSpeed.tickrate(((AbstractNumberTag)t).getFloat(), false));
dataHandlers.put("TickingState", (p, t) -> { dataHandlers.put("TickingState", (p, t) -> {
CompoundTag tickingState = (CompoundTag)t; CompoundTag tickingState = (CompoundTag)t;
TickSpeed.is_paused = tickingState.getBoolean("is_paused"); TickSpeed.setFrozenState(tickingState.getBoolean("is_paused"), tickingState.getBoolean("deepFreeze"));
TickSpeed.deepFreeze = tickingState.getBoolean("deepFreeze"); });
TickSpeed.is_superHot = tickingState.getBoolean("is_superHot"); dataHandlers.put("SuperHotState", (p, t) -> {
TickSpeed.is_superHot = ((ByteTag) t).equals(ByteTag.ONE);
}); });
dataHandlers.put("TickPlayerActiveTimeout", (p, t) -> TickSpeed.player_active_timeout = ((AbstractNumberTag)t).getInt()); dataHandlers.put("TickPlayerActiveTimeout", (p, t) -> TickSpeed.player_active_timeout = ((AbstractNumberTag)t).getInt());
dataHandlers.put("scShape", (p, t) -> { // deprecated dataHandlers.put("scShape", (p, t) -> { // deprecated
@@ -77,7 +77,7 @@ public class ServerNetworkHandler
CarpetSettings.LOG.info("Player "+playerEntity.getName().getString()+" joined with a matching carpet client"); CarpetSettings.LOG.info("Player "+playerEntity.getName().getString()+" joined with a matching carpet client");
else else
CarpetSettings.LOG.warn("Player "+playerEntity.getName().getString()+" joined with another carpet version: "+clientVersion); CarpetSettings.LOG.warn("Player "+playerEntity.getName().getString()+" joined with another carpet version: "+clientVersion);
DataBuilder data = DataBuilder.create().withTickRate().withTickingState().withTickPlayerActiveTimeout(); DataBuilder data = DataBuilder.create().withTickRate().withFrozenState().withTickPlayerActiveTimeout(); // .withSuperHotState()
CarpetServer.settingsManager.getRules().forEach(data::withRule); CarpetServer.settingsManager.getRules().forEach(data::withRule);
CarpetServer.extensions.forEach(e -> { CarpetServer.extensions.forEach(e -> {
SettingsManager eManager = e.customSettingsManager(); SettingsManager eManager = e.customSettingsManager();
@@ -173,14 +173,26 @@ public class ServerNetworkHandler
} }
} }
public static void updateTickingStateToConnectedPlayers() public static void updateFrozenStateToConnectedPlayers()
{ {
if (CarpetSettings.superSecretSetting) return; if (CarpetSettings.superSecretSetting) return;
for (ServerPlayerEntity player : remoteCarpetPlayers.keySet()) for (ServerPlayerEntity player : remoteCarpetPlayers.keySet())
{ {
player.networkHandler.sendPacket(new CustomPayloadS2CPacket( player.networkHandler.sendPacket(new CustomPayloadS2CPacket(
CarpetClient.CARPET_CHANNEL, CarpetClient.CARPET_CHANNEL,
DataBuilder.create().withTickingState().build() DataBuilder.create().withFrozenState().build()
));
}
}
public static void updateSuperHotStateToConnectedPlayers()
{
if(CarpetSettings.superSecretSetting) return;
for (ServerPlayerEntity player : remoteCarpetPlayers.keySet())
{
player.networkHandler.sendPacket(new CustomPayloadS2CPacket(
CarpetClient.CARPET_CHANNEL,
DataBuilder.create().withSuperHotState().build()
)); ));
} }
} }
@@ -264,15 +276,19 @@ public class ServerNetworkHandler
tag.putFloat("TickRate", TickSpeed.tickrate); tag.putFloat("TickRate", TickSpeed.tickrate);
return this; return this;
} }
private DataBuilder withTickingState() private DataBuilder withFrozenState()
{ {
CompoundTag tickingState = new CompoundTag(); CompoundTag tickingState = new CompoundTag();
tickingState.putBoolean("is_paused", TickSpeed.is_paused); tickingState.putBoolean("is_paused", TickSpeed.isPaused());
tickingState.putBoolean("deepFreeze", TickSpeed.deepFreeze); tickingState.putBoolean("deepFreeze", TickSpeed.deeplyFrozen());
tickingState.putBoolean("is_superhot", TickSpeed.is_superHot);
tag.put("TickingState", tickingState); tag.put("TickingState", tickingState);
return this; return this;
} }
private DataBuilder withSuperHotState()
{
tag.putBoolean("SuperHotState", TickSpeed.is_superHot);
return this;
}
private DataBuilder withTickPlayerActiveTimeout() private DataBuilder withTickPlayerActiveTimeout()
{ {
tag.putInt("TickPlayerActiveTimeout", TickSpeed.player_active_timeout); tag.putInt("TickPlayerActiveTimeout", TickSpeed.player_active_timeout);
@@ -961,7 +961,7 @@ public class CarpetEventServer
public void tick() public void tick()
{ {
if (!TickSpeed.process_entities && TickSpeed.deepFreeze) if (!TickSpeed.process_entities && TickSpeed.deeplyFrozen())
return; return;
Iterator<ScheduledCall> eventIterator = scheduledCalls.iterator(); Iterator<ScheduledCall> eventIterator = scheduledCalls.iterator();
List<ScheduledCall> currentCalls = new ArrayList<>(); List<ScheduledCall> currentCalls = new ArrayList<>();