diff --git a/src/main/java/dev/cammiescorner/arcanuscontinuum/mixin/client/AbstractClientPlayerMixin.java b/src/main/java/dev/cammiescorner/arcanuscontinuum/mixin/client/AbstractClientPlayerMixin.java new file mode 100644 index 00000000..7a9b9ed5 --- /dev/null +++ b/src/main/java/dev/cammiescorner/arcanuscontinuum/mixin/client/AbstractClientPlayerMixin.java @@ -0,0 +1,31 @@ +package dev.cammiescorner.arcanuscontinuum.mixin.client; + +import com.mojang.authlib.GameProfile; +import net.minecraft.client.player.AbstractClientPlayer; +import net.minecraft.core.BlockPos; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.Vec3; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(AbstractClientPlayer.class) +public abstract class AbstractClientPlayerMixin extends Player { + @Shadow protected Vec3 deltaMovementOnPreviousTick; + + public AbstractClientPlayerMixin(Level level, BlockPos pos, float yRot, GameProfile gameProfile) { super(level, pos, yRot, gameProfile); } + + @Inject(method = "tick", at = @At("HEAD"), cancellable = true) + private void timeSlow(CallbackInfo info) { + // TODO figure out how to smooth this + if(level().getGameTime() % 2 == 0) { + deltaMovementOnPreviousTick = getDeltaMovement(); + setOldPosAndRot(); + tickCount++; + info.cancel(); + } + } +} diff --git a/src/main/java/dev/cammiescorner/arcanuscontinuum/mixin/client/ClientWorldMixin.java b/src/main/java/dev/cammiescorner/arcanuscontinuum/mixin/client/ClientLevelMixin.java similarity index 93% rename from src/main/java/dev/cammiescorner/arcanuscontinuum/mixin/client/ClientWorldMixin.java rename to src/main/java/dev/cammiescorner/arcanuscontinuum/mixin/client/ClientLevelMixin.java index fee272c7..6636519e 100644 --- a/src/main/java/dev/cammiescorner/arcanuscontinuum/mixin/client/ClientWorldMixin.java +++ b/src/main/java/dev/cammiescorner/arcanuscontinuum/mixin/client/ClientLevelMixin.java @@ -19,8 +19,8 @@ import java.util.function.Supplier; @Mixin(ClientLevel.class) -public abstract class ClientWorldMixin extends Level { - protected ClientWorldMixin(WritableLevelData worldProperties, ResourceKey registryKey, RegistryAccess registryManager, Holder dimension, Supplier profiler, boolean client, boolean debug, long seed, int maxChainedNeighborUpdates) { +public abstract class ClientLevelMixin extends Level { + protected ClientLevelMixin(WritableLevelData worldProperties, ResourceKey registryKey, RegistryAccess registryManager, Holder dimension, Supplier profiler, boolean client, boolean debug, long seed, int maxChainedNeighborUpdates) { super(worldProperties, registryKey, registryManager, dimension, profiler, client, debug, seed, maxChainedNeighborUpdates); } diff --git a/src/main/java/dev/cammiescorner/arcanuscontinuum/mixin/client/InGameHudMixin.java b/src/main/java/dev/cammiescorner/arcanuscontinuum/mixin/client/GuiMixin.java similarity index 97% rename from src/main/java/dev/cammiescorner/arcanuscontinuum/mixin/client/InGameHudMixin.java rename to src/main/java/dev/cammiescorner/arcanuscontinuum/mixin/client/GuiMixin.java index 8b71c5e2..1fce2cb9 100644 --- a/src/main/java/dev/cammiescorner/arcanuscontinuum/mixin/client/InGameHudMixin.java +++ b/src/main/java/dev/cammiescorner/arcanuscontinuum/mixin/client/GuiMixin.java @@ -11,7 +11,7 @@ import org.spongepowered.asm.mixin.injection.At; @Mixin(Gui.class) -public class InGameHudMixin { +public class GuiMixin { @Shadow private int screenWidth; @Shadow private int screenHeight; diff --git a/src/main/java/dev/cammiescorner/arcanuscontinuum/mixin/client/BipedEntityModelMixin.java b/src/main/java/dev/cammiescorner/arcanuscontinuum/mixin/client/HumanoidModelMixin.java similarity index 97% rename from src/main/java/dev/cammiescorner/arcanuscontinuum/mixin/client/BipedEntityModelMixin.java rename to src/main/java/dev/cammiescorner/arcanuscontinuum/mixin/client/HumanoidModelMixin.java index da1facb8..e84fd7fe 100644 --- a/src/main/java/dev/cammiescorner/arcanuscontinuum/mixin/client/BipedEntityModelMixin.java +++ b/src/main/java/dev/cammiescorner/arcanuscontinuum/mixin/client/HumanoidModelMixin.java @@ -20,7 +20,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(HumanoidModel.class) -public abstract class BipedEntityModelMixin extends AgeableListModel implements ArmedModel, HeadedModel { +public abstract class HumanoidModelMixin extends AgeableListModel implements ArmedModel, HeadedModel { @Shadow @Final public ModelPart rightArm; @Shadow @Final public ModelPart leftArm; @Shadow @Final public ModelPart head; diff --git a/src/main/java/dev/cammiescorner/arcanuscontinuum/mixin/client/HeldItemFeatureRendererMixin.java b/src/main/java/dev/cammiescorner/arcanuscontinuum/mixin/client/ItemInHandLayerMixin.java similarity index 97% rename from src/main/java/dev/cammiescorner/arcanuscontinuum/mixin/client/HeldItemFeatureRendererMixin.java rename to src/main/java/dev/cammiescorner/arcanuscontinuum/mixin/client/ItemInHandLayerMixin.java index b19c7927..0bde0c7e 100644 --- a/src/main/java/dev/cammiescorner/arcanuscontinuum/mixin/client/HeldItemFeatureRendererMixin.java +++ b/src/main/java/dev/cammiescorner/arcanuscontinuum/mixin/client/ItemInHandLayerMixin.java @@ -17,7 +17,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(ItemInHandLayer.class) -public class HeldItemFeatureRendererMixin { +public class ItemInHandLayerMixin { @Inject(method = "renderArmWithItem", at = @At( value = "INVOKE", target = "Lnet/minecraft/client/renderer/ItemInHandRenderer;renderItem(Lnet/minecraft/world/entity/LivingEntity;Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/item/ItemDisplayContext;ZLcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource;I)V" diff --git a/src/main/java/dev/cammiescorner/arcanuscontinuum/mixin/client/HeldItemRendererMixin.java b/src/main/java/dev/cammiescorner/arcanuscontinuum/mixin/client/ItemInHandRendererMixin.java similarity index 98% rename from src/main/java/dev/cammiescorner/arcanuscontinuum/mixin/client/HeldItemRendererMixin.java rename to src/main/java/dev/cammiescorner/arcanuscontinuum/mixin/client/ItemInHandRendererMixin.java index f68ace43..1c21fd4f 100644 --- a/src/main/java/dev/cammiescorner/arcanuscontinuum/mixin/client/HeldItemRendererMixin.java +++ b/src/main/java/dev/cammiescorner/arcanuscontinuum/mixin/client/ItemInHandRendererMixin.java @@ -21,7 +21,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(ItemInHandRenderer.class) -public abstract class HeldItemRendererMixin { +public abstract class ItemInHandRendererMixin { @Shadow @Final private Minecraft minecraft; @Shadow private ItemStack mainHandItem; @Shadow private float oMainHandHeight; diff --git a/src/main/java/dev/cammiescorner/arcanuscontinuum/mixin/client/WorldRendererMixin.java b/src/main/java/dev/cammiescorner/arcanuscontinuum/mixin/client/LevelRendererMixin.java similarity index 95% rename from src/main/java/dev/cammiescorner/arcanuscontinuum/mixin/client/WorldRendererMixin.java rename to src/main/java/dev/cammiescorner/arcanuscontinuum/mixin/client/LevelRendererMixin.java index b7c0bd12..96e8c27f 100644 --- a/src/main/java/dev/cammiescorner/arcanuscontinuum/mixin/client/WorldRendererMixin.java +++ b/src/main/java/dev/cammiescorner/arcanuscontinuum/mixin/client/LevelRendererMixin.java @@ -8,7 +8,7 @@ import org.spongepowered.asm.mixin.injection.At; @Mixin(LevelRenderer.class) -public class WorldRendererMixin { +public class LevelRendererMixin { @ModifyExpressionValue(method = "renderLevel", at = @At( value = "INVOKE", target = "Lnet/minecraft/client/multiplayer/ClientLevel;entitiesForRendering()Ljava/lang/Iterable;" diff --git a/src/main/java/dev/cammiescorner/arcanuscontinuum/mixin/client/MinecraftClientMixin.java b/src/main/java/dev/cammiescorner/arcanuscontinuum/mixin/client/MinecraftMixin.java similarity index 99% rename from src/main/java/dev/cammiescorner/arcanuscontinuum/mixin/client/MinecraftClientMixin.java rename to src/main/java/dev/cammiescorner/arcanuscontinuum/mixin/client/MinecraftMixin.java index 6c87310e..e80d6d9f 100644 --- a/src/main/java/dev/cammiescorner/arcanuscontinuum/mixin/client/MinecraftClientMixin.java +++ b/src/main/java/dev/cammiescorner/arcanuscontinuum/mixin/client/MinecraftMixin.java @@ -36,7 +36,7 @@ import java.util.UUID; @Mixin(Minecraft.class) -public abstract class MinecraftClientMixin implements ClientUtils { +public abstract class MinecraftMixin implements ClientUtils { @Unique private boolean isCasting = false; @Unique private int timer = 0; @Unique private int mouseDownTimer = 0; diff --git a/src/main/java/dev/cammiescorner/arcanuscontinuum/mixin/client/MouseMixin.java b/src/main/java/dev/cammiescorner/arcanuscontinuum/mixin/client/MouseHandlerMixin.java similarity index 55% rename from src/main/java/dev/cammiescorner/arcanuscontinuum/mixin/client/MouseMixin.java rename to src/main/java/dev/cammiescorner/arcanuscontinuum/mixin/client/MouseHandlerMixin.java index 3c6c4a7b..fade8091 100644 --- a/src/main/java/dev/cammiescorner/arcanuscontinuum/mixin/client/MouseMixin.java +++ b/src/main/java/dev/cammiescorner/arcanuscontinuum/mixin/client/MouseHandlerMixin.java @@ -10,29 +10,40 @@ import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.ModifyArg; +import org.spongepowered.asm.mixin.injection.ModifyArgs; +import org.spongepowered.asm.mixin.injection.invoke.arg.Args; @Mixin(MouseHandler.class) -public class MouseMixin { +public class MouseHandlerMixin { @Shadow @Final private Minecraft minecraft; - @ModifyArg(method = "turnPlayer", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/player/LocalPlayer;turn(DD)V"), index = 0) - public double arcanuscontinuum$invertMouseX(double x) { - if(minecraft.player != null && minecraft.player.hasEffect(ArcanusMobEffects.DISCOMBOBULATE.get())) - return -x; - - return x; + @ModifyArgs(method = "turnPlayer", at = @At( + value = "INVOKE", + target = "Lnet/minecraft/client/player/LocalPlayer;turn(DD)V" + )) + private void slowMouse(Args args) { + double x = args.get(0); + double y = args.get(1); + args.setAll(x * 0.5, y * 0.5); } - @ModifyArg(method = "turnPlayer", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/player/LocalPlayer;turn(DD)V"), index = 1) - public double arcanuscontinuum$invertMouseY(double y) { - if(minecraft.player != null && minecraft.player.hasEffect(ArcanusMobEffects.DISCOMBOBULATE.get())) - return -y; - - return y; + @ModifyArgs(method = "turnPlayer", at = @At( + value = "INVOKE", + target = "Lnet/minecraft/client/player/LocalPlayer;turn(DD)V" + )) + public void invertMouseMovements(Args args) { + if(minecraft.player != null && minecraft.player.hasEffect(ArcanusMobEffects.DISCOMBOBULATE.get())) { + double x = args.get(0); + double y = args.get(1); + args.setAll(-x, -y); + } } - @ModifyArg(method = "onPress", at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/platform/InputConstants$Type;getOrCreate(I)Lcom/mojang/blaze3d/platform/InputConstants$Key;"), index = 0) - public int arcanuscontinuum$invertMouseButtons(int i) { + @ModifyArg(method = "onPress", at = @At( + value = "INVOKE", + target = "Lcom/mojang/blaze3d/platform/InputConstants$Type;getOrCreate(I)Lcom/mojang/blaze3d/platform/InputConstants$Key;" + ), index = 0) + public int invertMouseButtons(int i) { if(minecraft.player != null && minecraft.player.hasEffect(ArcanusMobEffects.DISCOMBOBULATE.get())) { return switch(i) { case 0 -> { diff --git a/src/main/java/dev/cammiescorner/arcanuscontinuum/mixin/client/PlayerEntityRendererMixin.java b/src/main/java/dev/cammiescorner/arcanuscontinuum/mixin/client/PlayerRendererMixin.java similarity index 86% rename from src/main/java/dev/cammiescorner/arcanuscontinuum/mixin/client/PlayerEntityRendererMixin.java rename to src/main/java/dev/cammiescorner/arcanuscontinuum/mixin/client/PlayerRendererMixin.java index 9e2a089d..d445ebc1 100644 --- a/src/main/java/dev/cammiescorner/arcanuscontinuum/mixin/client/PlayerEntityRendererMixin.java +++ b/src/main/java/dev/cammiescorner/arcanuscontinuum/mixin/client/PlayerRendererMixin.java @@ -17,8 +17,8 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @Mixin(PlayerRenderer.class) -public abstract class PlayerEntityRendererMixin extends LivingEntityRenderer> { - public PlayerEntityRendererMixin(EntityRendererProvider.Context ctx, PlayerModel model, float shadowRadius) { +public abstract class PlayerRendererMixin extends LivingEntityRenderer> { + public PlayerRendererMixin(EntityRendererProvider.Context ctx, PlayerModel model, float shadowRadius) { super(ctx, model, shadowRadius); } diff --git a/src/main/java/dev/cammiescorner/arcanuscontinuum/mixin/client/FramebufferMixin.java b/src/main/java/dev/cammiescorner/arcanuscontinuum/mixin/client/RenderTargetMixin.java similarity index 97% rename from src/main/java/dev/cammiescorner/arcanuscontinuum/mixin/client/FramebufferMixin.java rename to src/main/java/dev/cammiescorner/arcanuscontinuum/mixin/client/RenderTargetMixin.java index 7ec661cb..734ad4e3 100644 --- a/src/main/java/dev/cammiescorner/arcanuscontinuum/mixin/client/FramebufferMixin.java +++ b/src/main/java/dev/cammiescorner/arcanuscontinuum/mixin/client/RenderTargetMixin.java @@ -19,7 +19,7 @@ import java.util.Objects; @Mixin(RenderTarget.class) -public abstract class FramebufferMixin implements StencilBuffer { +public abstract class RenderTargetMixin implements StencilBuffer { @Unique private boolean isStencilBufferEnabled; @Shadow public int width; diff --git a/src/main/java/dev/cammiescorner/arcanuscontinuum/mixin/common/ServerLevelMixin.java b/src/main/java/dev/cammiescorner/arcanuscontinuum/mixin/common/ServerLevelMixin.java index e82a37a1..4c321876 100644 --- a/src/main/java/dev/cammiescorner/arcanuscontinuum/mixin/common/ServerLevelMixin.java +++ b/src/main/java/dev/cammiescorner/arcanuscontinuum/mixin/common/ServerLevelMixin.java @@ -28,6 +28,7 @@ private boolean slowTime(ServerLevel instance, Consumer consumer, Entity enti // TODO tie to being in a time dilation entity if(getGameTime() % 2 == 0) { entity.setOldPosAndRot(); + entity.tickCount++; return false; } diff --git a/src/main/resources/arcanuscontinuum.mixins.json b/src/main/resources/arcanuscontinuum.mixins.json index 793cc91c..12d06e83 100644 --- a/src/main/resources/arcanuscontinuum.mixins.json +++ b/src/main/resources/arcanuscontinuum.mixins.json @@ -33,19 +33,20 @@ "datagen.RegistrySetBuilderMixin" ], "client": [ - "client.BipedEntityModelMixin", - "client.ClientWorldMixin", + "client.AbstractClientPlayerMixin", + "client.ClientLevelMixin", "client.CraftingScreenMixin", - "client.FramebufferMixin", - "client.HeldItemFeatureRendererMixin", - "client.HeldItemRendererMixin", - "client.InGameHudMixin", + "client.GuiMixin", + "client.HumanoidModelMixin", + "client.ItemInHandLayerMixin", + "client.ItemInHandRendererMixin", "client.ItemRendererMixin", + "client.LevelRendererMixin", "client.LivingEntityRendererMixin", - "client.MinecraftClientMixin", - "client.MouseMixin", - "client.PlayerEntityRendererMixin", - "client.WorldRendererMixin" + "client.MinecraftMixin", + "client.MouseHandlerMixin", + "client.PlayerRendererMixin", + "client.RenderTargetMixin" ], "injectors": { "defaultRequire": 1