From 2ab1a2ab8a9e8ba3238f7c7735f509f7f5117c98 Mon Sep 17 00:00:00 2001 From: Wynd Date: Sun, 7 Jan 2024 13:29:03 +0200 Subject: [PATCH] Updated play time overlay so it uses world time and real days are tracked independently from the world time --- .../xyz/pixelatedw/finalbeta/WyHelper.java | 63 ++++++++++--------- .../finalbeta/mixin/ClientPlayerMixin.java | 4 +- .../finalbeta/mixin/LevelMixin.java | 19 ++++++ .../finalbeta/mixin/LevelPropertiesMixin.java | 32 ++++++++++ src/main/resources/finalbeta.mixins.json | 4 +- 5 files changed, 88 insertions(+), 34 deletions(-) create mode 100644 src/main/java/xyz/pixelatedw/finalbeta/mixin/LevelMixin.java create mode 100644 src/main/java/xyz/pixelatedw/finalbeta/mixin/LevelPropertiesMixin.java diff --git a/src/main/java/xyz/pixelatedw/finalbeta/WyHelper.java b/src/main/java/xyz/pixelatedw/finalbeta/WyHelper.java index ff81906..c03807d 100644 --- a/src/main/java/xyz/pixelatedw/finalbeta/WyHelper.java +++ b/src/main/java/xyz/pixelatedw/finalbeta/WyHelper.java @@ -6,39 +6,40 @@ import java.time.Duration; import net.minecraft.client.Minecraft; import net.minecraft.entity.player.Player; -import net.minecraft.item.ItemInstance; -import net.minecraft.item.ItemType; -import net.minecraft.stat.Stats; public class WyHelper { - public static Minecraft getInstance() { - try { - Field f = Minecraft.class.getDeclaredField("instance"); - f.setAccessible(true); - return (Minecraft) f.get(null); - } catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) { - e.printStackTrace(); + private static final Minecraft INSTANCE; + public static final String SPAWN_TIME_TAG = "SpawnTime"; + public static final String PLAY_TIME_TAG = "PlayTime"; + public static long playTime; + + static { + INSTANCE = getInstance(); + } + + public static Minecraft getInstance() { + if (INSTANCE != null) { + return INSTANCE; + } else { + try { + Field f = Minecraft.class.getDeclaredField("instance"); + f.setAccessible(true); + return (Minecraft) f.get(null); + } catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) { + e.printStackTrace(); + } + return null; } - return null; } - - public static boolean isTimeBehind() { - // int currentPlayTime = WyHelper.getInstance().statManager.getStatAmount(Stats.playOneMinute) - return false; - } - - public static long getTicksPlayed() { - return WyHelper.getInstance().statManager.getStatAmount(Stats.playOneMinute); - } - + public static long getRealDaysPlayed() { - int seconds = WyHelper.getInstance().statManager.getStatAmount(Stats.playOneMinute) / 20; + long seconds = WyHelper.playTime / 20; return Duration.ofSeconds(seconds).toDays(); } - + public static long getGameDaysPlayed() { - int seconds = WyHelper.getInstance().statManager.getStatAmount(Stats.playOneMinute) / 20; + long seconds = WyHelper.getInstance().level.getLevelTime() / 20; return Duration.ofSeconds(seconds).toMinutes() / 20; } @@ -56,7 +57,7 @@ public class WyHelper { public static void cheatCommand(Player player) { - player.dropItem(new ItemInstance(ItemType.boat, 1)); +// player.dropItem(new ItemInstance(ItemType.boat, 1)); // int x = MathsHelper.floor(player.x); // int y = MathsHelper.floor(player.boundingBox.minY); @@ -97,11 +98,11 @@ public class WyHelper { // Pig animal = new Pig(player.level); // animal.setPositionAndAngles(player.x + 2, player.y, player.z, 0.0f, 0.0f); // player.level.spawnEntity(animal); - - player.level.setLevelTime(0); - player.level.getProperties().setRaining(false); - player.level.getProperties().setRainTime(0); - player.level.getProperties().setThundering(false); - player.level.getProperties().setThunderTime(0); + +// player.level.setLevelTime(0); +// player.level.getProperties().setRaining(false); +// player.level.getProperties().setRainTime(0); +// player.level.getProperties().setThundering(false); +// player.level.getProperties().setThunderTime(0); } } diff --git a/src/main/java/xyz/pixelatedw/finalbeta/mixin/ClientPlayerMixin.java b/src/main/java/xyz/pixelatedw/finalbeta/mixin/ClientPlayerMixin.java index bf14f46..6567681 100644 --- a/src/main/java/xyz/pixelatedw/finalbeta/mixin/ClientPlayerMixin.java +++ b/src/main/java/xyz/pixelatedw/finalbeta/mixin/ClientPlayerMixin.java @@ -27,12 +27,12 @@ public class ClientPlayerMixin { Minecraft mc = WyHelper.getInstance(); Player player = (Player) (Object) this; - if (player.vehicle != null && key == Keyboard.KEY_LSHIFT) { + if (player.vehicle != null && key == Keyboard.KEY_LSHIFT && state) { player.startRiding(null); return; } - if (ModConfig.STACK_DROP.get() && key == mc.options.dropKey.key && Keyboard.isKeyDown(Keyboard.KEY_LSHIFT)) { + if (ModConfig.STACK_DROP.get() && key == mc.options.dropKey.key && state && Keyboard.isKeyDown(Keyboard.KEY_LSHIFT)) { ItemInstance heldItem = player.inventory.getHeldItem(); if (heldItem != null && heldItem.count > 0) { player.dropItem(player.inventory.takeInvItem(player.inventory.selectedHotbarSlot, heldItem.count), false); diff --git a/src/main/java/xyz/pixelatedw/finalbeta/mixin/LevelMixin.java b/src/main/java/xyz/pixelatedw/finalbeta/mixin/LevelMixin.java new file mode 100644 index 0000000..5b68dc6 --- /dev/null +++ b/src/main/java/xyz/pixelatedw/finalbeta/mixin/LevelMixin.java @@ -0,0 +1,19 @@ +package xyz.pixelatedw.finalbeta.mixin; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import net.minecraft.level.Level; +import xyz.pixelatedw.finalbeta.WyHelper; + +@Mixin(Level.class) +public class LevelMixin { + + @Inject(method = "method_242", at = @At(value = "INVOKE", target = "Lnet/minecraft/level/LevelMonsterSpawner;method_1870")) + public void tick(CallbackInfo ci) { + WyHelper.playTime++; + } + +} diff --git a/src/main/java/xyz/pixelatedw/finalbeta/mixin/LevelPropertiesMixin.java b/src/main/java/xyz/pixelatedw/finalbeta/mixin/LevelPropertiesMixin.java new file mode 100644 index 0000000..db29ff6 --- /dev/null +++ b/src/main/java/xyz/pixelatedw/finalbeta/mixin/LevelPropertiesMixin.java @@ -0,0 +1,32 @@ +package xyz.pixelatedw.finalbeta.mixin; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import net.minecraft.level.LevelProperties; +import net.minecraft.util.io.CompoundTag; +import xyz.pixelatedw.finalbeta.WyHelper; + +@Mixin(LevelProperties.class) +public class LevelPropertiesMixin { + + private long spawnTime; + + @Inject(method = "", at = @At("TAIL")) + public void settingSpawnTime(CompoundTag nbt, CallbackInfo ci) { + if (!nbt.containsKey(WyHelper.SPAWN_TIME_TAG)) { + this.spawnTime = System.currentTimeMillis(); + } else { + this.spawnTime = nbt.getLong(WyHelper.SPAWN_TIME_TAG); + } + WyHelper.playTime = nbt.getLong(WyHelper.PLAY_TIME_TAG); + } + + @Inject(method = "updateProperties", at = @At("TAIL")) + public void updateSpawnTime(CompoundTag worldNbt, CompoundTag playerNbt, CallbackInfo ci) { + worldNbt.put(WyHelper.SPAWN_TIME_TAG, this.spawnTime); + worldNbt.put(WyHelper.PLAY_TIME_TAG, WyHelper.playTime); + } +} diff --git a/src/main/resources/finalbeta.mixins.json b/src/main/resources/finalbeta.mixins.json index 4ed389c..bf4a738 100644 --- a/src/main/resources/finalbeta.mixins.json +++ b/src/main/resources/finalbeta.mixins.json @@ -33,7 +33,9 @@ "FenceTileMixin", "LevelMonsterSpawnerMixin", "BedTileMixin", - "BoatMixin" + "BoatMixin", + "LevelPropertiesMixin", + "LevelMixin" ], "injectors": { "defaultRequire": -1