diff --git a/jGui b/jGui index 717ac581..e0af8663 160000 --- a/jGui +++ b/jGui @@ -1 +1 @@ -Subproject commit 717ac581783a1cc7ca802561ce0de48dc09f25b8 +Subproject commit e0af866315fa9b25b822497c8b045c5782b87949 diff --git a/src/main/java/com/replaymod/compat/ReplayModCompat.java b/src/main/java/com/replaymod/compat/ReplayModCompat.java index 2e952481..6ce45bb7 100644 --- a/src/main/java/com/replaymod/compat/ReplayModCompat.java +++ b/src/main/java/com/replaymod/compat/ReplayModCompat.java @@ -6,7 +6,7 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; //#if MC<11400 -import com.replaymod.compat.oranges17animations.HideInvisibleEntities; +//$$ import com.replaymod.compat.oranges17animations.HideInvisibleEntities; //#endif //#if MC<11300 @@ -27,7 +27,7 @@ public class ReplayModCompat implements Module { //#endif new DisableFastRender().register(); //#if MC<11400 - new HideInvisibleEntities().register(); + //$$ new HideInvisibleEntities().register(); //#endif //#if MC<11300 //$$ DisableBetterSprinting.register(); diff --git a/src/main/java/com/replaymod/compat/optifine/DisableFastRender.java b/src/main/java/com/replaymod/compat/optifine/DisableFastRender.java index 86be2bb0..137fb760 100644 --- a/src/main/java/com/replaymod/compat/optifine/DisableFastRender.java +++ b/src/main/java/com/replaymod/compat/optifine/DisableFastRender.java @@ -3,11 +3,11 @@ package com.replaymod.compat.optifine; import de.johni0702.minecraft.gui.utils.EventRegistrations; import com.replaymod.core.versions.MCVer; import com.replaymod.render.events.ReplayRenderCallback; -import net.minecraft.client.Minecraft; +import net.minecraft.client.MinecraftClient; public class DisableFastRender extends EventRegistrations { - private final Minecraft mc = Minecraft.getInstance(); + private final MinecraftClient mc = MinecraftClient.getInstance(); private boolean wasFastRender = false; @@ -16,8 +16,8 @@ public class DisableFastRender extends EventRegistrations { if (!MCVer.hasOptifine()) return; try { - wasFastRender = (boolean) OptifineReflection.gameSettings_ofFastRender.get(mc.gameSettings); - OptifineReflection.gameSettings_ofFastRender.set(mc.gameSettings, false); + wasFastRender = (boolean) OptifineReflection.gameSettings_ofFastRender.get(mc.options); + OptifineReflection.gameSettings_ofFastRender.set(mc.options, false); } catch (IllegalAccessException e) { e.printStackTrace(); } @@ -28,7 +28,7 @@ public class DisableFastRender extends EventRegistrations { if (!MCVer.hasOptifine()) return; try { - OptifineReflection.gameSettings_ofFastRender.set(mc.gameSettings, wasFastRender); + OptifineReflection.gameSettings_ofFastRender.set(mc.options, wasFastRender); } catch (IllegalAccessException e) { e.printStackTrace(); } diff --git a/src/main/java/com/replaymod/compat/optifine/OptifineReflection.java b/src/main/java/com/replaymod/compat/optifine/OptifineReflection.java index 58abfc7b..d93419d5 100644 --- a/src/main/java/com/replaymod/compat/optifine/OptifineReflection.java +++ b/src/main/java/com/replaymod/compat/optifine/OptifineReflection.java @@ -1,6 +1,6 @@ package com.replaymod.compat.optifine; -import net.minecraft.client.GameSettings; +import net.minecraft.client.options.GameOptions; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; @@ -15,7 +15,7 @@ public class OptifineReflection { // this throws an ignored ClassNotFoundException if Optifine isn't installed Class.forName("Config"); - gameSettings_ofFastRender = GameSettings.class.getDeclaredField("ofFastRender"); + gameSettings_ofFastRender = GameOptions.class.getDeclaredField("ofFastRender"); gameSettings_ofFastRender.setAccessible(true); } catch (ClassNotFoundException ignore) { // no optifine installed diff --git a/src/main/java/com/replaymod/compat/oranges17animations/HideInvisibleEntities.java b/src/main/java/com/replaymod/compat/oranges17animations/HideInvisibleEntities.java index bafc23f2..0258f1e6 100644 --- a/src/main/java/com/replaymod/compat/oranges17animations/HideInvisibleEntities.java +++ b/src/main/java/com/replaymod/compat/oranges17animations/HideInvisibleEntities.java @@ -1,32 +1,32 @@ //#if MC<11400 -package com.replaymod.compat.oranges17animations; - -import com.replaymod.replay.camera.CameraEntity; -import de.johni0702.minecraft.gui.utils.EventRegistrations; -import net.minecraft.client.Minecraft; -import net.minecraftforge.client.event.RenderLivingEvent; -import net.minecraftforge.eventbus.api.EventPriority; -import net.minecraftforge.eventbus.api.SubscribeEvent; - -import static com.replaymod.core.versions.MCVer.*; - -/** - * Orange seems to have copied vast parts of the RendererLivingEntity into their ArmorAnimation class which cancels the RenderLivingEvent.Pre and calls its own code instead. - * This breaks our mixin which assures that, even though the camera is in spectator mode, it cannot see invisible entities. - * - * To fix this issue, we simply cancel the RenderLivingEvent.Pre before it gets to ArmorAnimation if the entity is invisible. - */ -public class HideInvisibleEntities extends EventRegistrations { - private final Minecraft mc = Minecraft.getInstance(); - private final boolean modLoaded = isModLoaded("animations"); - - @SubscribeEvent(priority = EventPriority.HIGH) - public void preRenderLiving(RenderLivingEvent.Pre event) { - if (modLoaded) { - if (mc.player instanceof CameraEntity && getEntity(event).isInvisible()) { - event.setCanceled(true); - } - } - } -} +//$$ package com.replaymod.compat.oranges17animations; +//$$ +//$$ import com.replaymod.replay.camera.CameraEntity; +//$$ import de.johni0702.minecraft.gui.utils.EventRegistrations; +//$$ import net.minecraft.client.Minecraft; +//$$ import net.minecraftforge.client.event.RenderLivingEvent; +//$$ import net.minecraftforge.eventbus.api.EventPriority; +//$$ import net.minecraftforge.eventbus.api.SubscribeEvent; +//$$ +//$$ import static com.replaymod.core.versions.MCVer.*; +//$$ +//$$ /** +//$$ * Orange seems to have copied vast parts of the RendererLivingEntity into their ArmorAnimation class which cancels the RenderLivingEvent.Pre and calls its own code instead. +//$$ * This breaks our mixin which assures that, even though the camera is in spectator mode, it cannot see invisible entities. +//$$ * +//$$ * To fix this issue, we simply cancel the RenderLivingEvent.Pre before it gets to ArmorAnimation if the entity is invisible. +//$$ */ +//$$ public class HideInvisibleEntities extends EventRegistrations { +//$$ private final Minecraft mc = Minecraft.getInstance(); +//$$ private final boolean modLoaded = isModLoaded("animations"); +//$$ +//$$ @SubscribeEvent(priority = EventPriority.HIGH) +//$$ public void preRenderLiving(RenderLivingEvent.Pre event) { +//$$ if (modLoaded) { +//$$ if (mc.player instanceof CameraEntity && getEntity(event).isInvisible()) { +//$$ event.setCanceled(true); +//$$ } +//$$ } +//$$ } +//$$ } //#endif diff --git a/src/main/java/com/replaymod/compat/shaders/ShaderBeginRender.java b/src/main/java/com/replaymod/compat/shaders/ShaderBeginRender.java index 16cad146..f21bfb05 100644 --- a/src/main/java/com/replaymod/compat/shaders/ShaderBeginRender.java +++ b/src/main/java/com/replaymod/compat/shaders/ShaderBeginRender.java @@ -3,22 +3,22 @@ package com.replaymod.compat.shaders; import com.replaymod.render.hooks.EntityRendererHandler; import de.johni0702.minecraft.gui.utils.EventRegistrations; -import net.minecraft.client.Minecraft; +import net.minecraft.client.MinecraftClient; import java.lang.reflect.InvocationTargetException; import static com.replaymod.core.versions.MCVer.getRenderPartialTicks; //#if MC>=11400 -//$$ import com.replaymod.core.events.PreRenderCallback; +import com.replaymod.core.events.PreRenderCallback; //#else -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.common.gameevent.TickEvent; +//$$ import net.minecraftforge.eventbus.api.SubscribeEvent; +//$$ import net.minecraftforge.fml.common.gameevent.TickEvent; //#endif public class ShaderBeginRender extends EventRegistrations { - private final Minecraft mc = Minecraft.getInstance(); + private final MinecraftClient mc = MinecraftClient.getInstance(); /** * Invokes Shaders#beginRender when rendering a video, @@ -26,19 +26,19 @@ public class ShaderBeginRender extends EventRegistrations { * which we're not calling during rendering. */ //#if MC>=11400 - //$$ { on(PreRenderCallback.EVENT, this::onRenderTickStart); } - //$$ private void onRenderTickStart() { + { on(PreRenderCallback.EVENT, this::onRenderTickStart); } + private void onRenderTickStart() { //#else - @SubscribeEvent - public void onRenderTickStart(TickEvent.RenderTickEvent event) { - if (event.phase != TickEvent.Phase.START) return; + //$$ @SubscribeEvent + //$$ public void onRenderTickStart(TickEvent.RenderTickEvent event) { + //$$ if (event.phase != TickEvent.Phase.START) return; //#endif if (ShaderReflection.shaders_beginRender == null) return; if (ShaderReflection.config_isShaders == null) return; try { // check if video is being rendered - if (((EntityRendererHandler.IEntityRenderer) mc.entityRenderer).replayModRender_getHandler() == null) + if (((EntityRendererHandler.IEntityRenderer) mc.gameRenderer).replayModRender_getHandler() == null) return; // check if Shaders are enabled diff --git a/src/main/java/com/replaymod/compat/shaders/ShaderReflection.java b/src/main/java/com/replaymod/compat/shaders/ShaderReflection.java index 5daac450..59012fd4 100644 --- a/src/main/java/com/replaymod/compat/shaders/ShaderReflection.java +++ b/src/main/java/com/replaymod/compat/shaders/ShaderReflection.java @@ -1,7 +1,7 @@ //#if MC>=10800 package com.replaymod.compat.shaders; -import net.minecraft.client.Minecraft; +import net.minecraft.client.MinecraftClient; import java.lang.reflect.Field; import java.lang.reflect.Method; @@ -37,7 +37,7 @@ public class ShaderReflection { shaders_isShadowPass = shadersClass.getDeclaredField("isShadowPass"); shaders_isShadowPass.setAccessible(true); - shaders_beginRender = shadersClass.getDeclaredMethod("beginRender", Minecraft.class, float.class, long.class); + shaders_beginRender = shadersClass.getDeclaredMethod("beginRender", MinecraftClient.class, float.class, long.class); shaders_beginRender.setAccessible(true); renderGlobal_chunksToUpdateForced = Class.forName("net.minecraft.client.renderer.RenderGlobal") diff --git a/src/main/java/com/replaymod/compat/shaders/mixin/MixinShaderEntityRenderer.java b/src/main/java/com/replaymod/compat/shaders/mixin/MixinShaderEntityRenderer.java index 8491acc4..3af21eb9 100644 --- a/src/main/java/com/replaymod/compat/shaders/mixin/MixinShaderEntityRenderer.java +++ b/src/main/java/com/replaymod/compat/shaders/mixin/MixinShaderEntityRenderer.java @@ -4,7 +4,7 @@ package com.replaymod.compat.shaders.mixin; import com.replaymod.compat.shaders.ShaderReflection; import com.replaymod.replay.ReplayHandler; import com.replaymod.replay.ReplayModReplay; -import net.minecraft.client.renderer.GameRenderer; +import net.minecraft.client.render.GameRenderer; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -14,10 +14,10 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; public abstract class MixinShaderEntityRenderer { //#if MC>=11400 - //$$ @Inject(method = "renderCenter", at = @At("HEAD")) + @Inject(method = "renderCenter", at = @At("HEAD")) //#else //#if MC>=11300 - @Inject(method = "updateCameraAndRender(FJ)V", at = @At("HEAD")) + //$$ @Inject(method = "updateCameraAndRender(FJ)V", at = @At("HEAD")) //#else //$$ @Inject(method = "renderWorldPass", at = @At("HEAD")) //#endif diff --git a/src/main/java/com/replaymod/compat/shaders/mixin/MixinShaderRenderChunk.java b/src/main/java/com/replaymod/compat/shaders/mixin/MixinShaderRenderChunk.java index 45b59d39..e97613bc 100644 --- a/src/main/java/com/replaymod/compat/shaders/mixin/MixinShaderRenderChunk.java +++ b/src/main/java/com/replaymod/compat/shaders/mixin/MixinShaderRenderChunk.java @@ -2,17 +2,17 @@ package com.replaymod.compat.shaders.mixin; import com.replaymod.render.hooks.EntityRendererHandler; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.chunk.RenderChunk; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.render.chunk.ChunkRenderer; 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.CallbackInfoReturnable; -@Mixin(RenderChunk.class) +@Mixin(ChunkRenderer.class) public abstract class MixinShaderRenderChunk { - private final Minecraft mc = Minecraft.getInstance(); + private final MinecraftClient mc = MinecraftClient.getInstance(); /** * Changes the RenderChunk#isPlayerUpdate method that Optifine adds @@ -23,7 +23,7 @@ public abstract class MixinShaderRenderChunk { private void replayModCompat_disableIsPlayerUpdate(CallbackInfoReturnable ci) { // TODO: Update to 1.12 once optifine is available // TODO: We're on 1.13 now and haven't gotten any 1.12 complaints, so 1.12 is probably working but 1.13? - if (((EntityRendererHandler.IEntityRenderer) mc.entityRenderer).replayModRender_getHandler() == null) return; + if (((EntityRendererHandler.IEntityRenderer) mc.gameRenderer).replayModRender_getHandler() == null) return; ci.setReturnValue(true); } diff --git a/src/main/java/com/replaymod/compat/shaders/mixin/MixinShaderRenderGlobal.java b/src/main/java/com/replaymod/compat/shaders/mixin/MixinShaderRenderGlobal.java index 9cb30ac4..6b1b5560 100644 --- a/src/main/java/com/replaymod/compat/shaders/mixin/MixinShaderRenderGlobal.java +++ b/src/main/java/com/replaymod/compat/shaders/mixin/MixinShaderRenderGlobal.java @@ -3,9 +3,9 @@ package com.replaymod.compat.shaders.mixin; import com.replaymod.compat.shaders.ShaderReflection; import com.replaymod.render.hooks.EntityRendererHandler; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.WorldRenderer; -import net.minecraft.client.renderer.culling.ICamera; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.render.WorldRenderer; +import net.minecraft.client.render.VisibleRegion; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; @@ -13,37 +13,37 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; //#if MC>=11400 -//$$ import net.minecraft.client.render.Camera; +import net.minecraft.client.render.Camera; //#else -import net.minecraft.entity.Entity; +//$$ import net.minecraft.entity.Entity; //#endif @Mixin(WorldRenderer.class) public abstract class MixinShaderRenderGlobal { - private final Minecraft mc = Minecraft.getInstance(); + private final MinecraftClient mc = MinecraftClient.getInstance(); @Shadow - public boolean displayListEntitiesDirty; + public boolean terrainUpdateNecessary; - @Inject(method = "setupTerrain", at = @At("HEAD"), cancellable = true) + @Inject(method = "setUpTerrain", at = @At("HEAD"), cancellable = true) public void replayModCompat_setupTerrain( //#if MC>=11400 - //$$ Camera viewEntity, + Camera viewEntity, //#else - Entity viewEntity, + //$$ Entity viewEntity, //#if MC>=11300 - float partialTicks, + //$$ float partialTicks, //#else //$$ double partialTicks, //#endif //#endif - ICamera camera, + VisibleRegion camera, int frameCount, boolean playerSpectator, CallbackInfo ci ) { - if (((EntityRendererHandler.IEntityRenderer) mc.entityRenderer).replayModRender_getHandler() == null) return; + if (((EntityRendererHandler.IEntityRenderer) mc.gameRenderer).replayModRender_getHandler() == null) return; if (ShaderReflection.shaders_isShadowPass == null) return; // when called by the shadow pass, displayListEntitiesDirty can't be set to false, as no chunk updates @@ -51,7 +51,7 @@ public abstract class MixinShaderRenderGlobal { // set it to false manually to exit the loop imposed by MixinRenderGlobal#replayModRender_setupTerrain. try { if ((boolean) ShaderReflection.shaders_isShadowPass.get(null) == true) { - this.displayListEntitiesDirty = false; + this.terrainUpdateNecessary = false; } } catch (IllegalAccessException ignore) {} diff --git a/src/main/java/com/replaymod/compat/shaders/mixin/MixinShadersRender.java b/src/main/java/com/replaymod/compat/shaders/mixin/MixinShadersRender.java index 50059474..a764907f 100644 --- a/src/main/java/com/replaymod/compat/shaders/mixin/MixinShadersRender.java +++ b/src/main/java/com/replaymod/compat/shaders/mixin/MixinShadersRender.java @@ -1,6 +1,6 @@ package com.replaymod.compat.shaders.mixin; -import net.minecraft.client.renderer.GameRenderer; +import net.minecraft.client.render.GameRenderer; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Pseudo; import org.spongepowered.asm.mixin.injection.At; @@ -8,10 +8,10 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; //#if MC>=11400 -//$$ import com.replaymod.core.events.PreRenderHandCallback; +import com.replaymod.core.events.PreRenderHandCallback; //#else -import com.replaymod.core.versions.MCVer; -import net.minecraftforge.client.ForgeHooksClient; +//$$ import com.replaymod.core.versions.MCVer; +//$$ import net.minecraftforge.client.ForgeHooksClient; //#endif @Pseudo @@ -24,10 +24,10 @@ public abstract class MixinShadersRender { @Inject(method = "renderHand0", at = @At("HEAD"), cancellable = true, remap = false) private static void replayModCompat_disableRenderHand0(GameRenderer er, float partialTicks, int renderPass, CallbackInfo ci) { //#if MC>=11400 - //$$ if (PreRenderHandCallback.EVENT.invoker().preRenderHand()) { + if (PreRenderHandCallback.EVENT.invoker().preRenderHand()) { //#else //#if MC>=11300 - if (ForgeHooksClient.renderFirstPersonHand(MCVer.getMinecraft().renderGlobal, partialTicks)) { + //$$ if (ForgeHooksClient.renderFirstPersonHand(MCVer.getMinecraft().renderGlobal, partialTicks)) { //#else //$$ if (ForgeHooksClient.renderFirstPersonHand(MCVer.getMinecraft().renderGlobal, partialTicks, renderPass)) { //#endif diff --git a/src/main/java/com/replaymod/core/KeyBindingRegistry.java b/src/main/java/com/replaymod/core/KeyBindingRegistry.java index efa2ae76..eb80a8ee 100644 --- a/src/main/java/com/replaymod/core/KeyBindingRegistry.java +++ b/src/main/java/com/replaymod/core/KeyBindingRegistry.java @@ -4,19 +4,19 @@ import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.Multimap; import de.johni0702.minecraft.gui.utils.EventRegistrations; import com.replaymod.core.versions.MCVer; -import net.minecraft.client.settings.KeyBinding; -import net.minecraft.crash.CrashReport; -import net.minecraft.crash.CrashReportCategory; -import net.minecraft.crash.ReportedException; +import net.minecraft.client.options.KeyBinding; +import net.minecraft.util.crash.CrashReport; +import net.minecraft.util.crash.CrashReportSection; +import net.minecraft.util.crash.CrashException; //#if MC>=11400 -//$$ import com.replaymod.core.versions.LangResourcePack; -//$$ import net.fabricmc.fabric.api.client.keybinding.FabricKeyBinding; -//$$ import net.minecraft.client.util.InputUtil; -//$$ import net.minecraft.util.Identifier; -//$$ import static com.replaymod.core.ReplayMod.MOD_ID; +import com.replaymod.core.versions.LangResourcePack; +import net.fabricmc.fabric.api.client.keybinding.FabricKeyBinding; +import net.minecraft.client.util.InputUtil; +import net.minecraft.util.Identifier; +import static com.replaymod.core.ReplayMod.MOD_ID; //#else -import net.minecraftforge.fml.client.registry.ClientRegistry; +//$$ import net.minecraftforge.fml.client.registry.ClientRegistry; //#endif //#if MC>=11300 @@ -39,7 +39,7 @@ import java.util.Map; public class KeyBindingRegistry extends EventRegistrations { private static final String CATEGORY = "replaymod.title"; //#if MC>=11400 - //$$ static { net.fabricmc.fabric.api.client.keybinding.KeyBindingRegistry.INSTANCE.addCategory(CATEGORY); } + static { net.fabricmc.fabric.api.client.keybinding.KeyBindingRegistry.INSTANCE.addCategory(CATEGORY); } //#endif private Map keyBindings = new HashMap(); @@ -59,16 +59,16 @@ public class KeyBindingRegistry extends EventRegistrations { KeyBinding keyBinding = keyBindings.get(name); if (keyBinding == null) { //#if MC>=11400 - //$$ if (keyCode == 0) { - //$$ keyCode = -1; - //$$ } - //$$ Identifier id = new Identifier(MOD_ID, name.substring(LangResourcePack.LEGACY_KEY_PREFIX.length())); - //$$ FabricKeyBinding fabricKeyBinding = FabricKeyBinding.Builder.create(id, InputUtil.Type.KEYSYM, keyCode, CATEGORY).build(); - //$$ net.fabricmc.fabric.api.client.keybinding.KeyBindingRegistry.INSTANCE.register(fabricKeyBinding); - //$$ keyBinding = fabricKeyBinding; + if (keyCode == 0) { + keyCode = -1; + } + Identifier id = new Identifier(MOD_ID, name.substring(LangResourcePack.LEGACY_KEY_PREFIX.length())); + FabricKeyBinding fabricKeyBinding = FabricKeyBinding.Builder.create(id, InputUtil.Type.KEYSYM, keyCode, CATEGORY).build(); + net.fabricmc.fabric.api.client.keybinding.KeyBindingRegistry.INSTANCE.register(fabricKeyBinding); + keyBinding = fabricKeyBinding; //#else - keyBinding = new KeyBinding(name, keyCode, CATEGORY); - ClientRegistry.registerKeyBinding(keyBinding); + //$$ keyBinding = new KeyBinding(name, keyCode, CATEGORY); + //$$ ClientRegistry.registerKeyBinding(keyBinding); //#endif keyBindings.put(name, keyBinding); } @@ -103,7 +103,7 @@ public class KeyBindingRegistry extends EventRegistrations { public void handleRepeatedKeyBindings() { for (Map.Entry> entry : repeatedKeyBindingHandlers.asMap().entrySet()) { - if (entry.getKey().isKeyDown()) { + if (entry.getKey().isPressed()) { invokeKeyBindingHandlers(entry.getKey(), entry.getValue()); } } @@ -111,7 +111,7 @@ public class KeyBindingRegistry extends EventRegistrations { public void handleKeyBindings() { for (Map.Entry> entry : keyBindingHandlers.asMap().entrySet()) { - while (entry.getKey().isPressed()) { + while (entry.getKey().wasPressed()) { invokeKeyBindingHandlers(entry.getKey(), entry.getValue()); } } @@ -122,11 +122,11 @@ public class KeyBindingRegistry extends EventRegistrations { try { runnable.run(); } catch (Throwable cause) { - CrashReport crashReport = CrashReport.makeCrashReport(cause, "Handling Key Binding"); - CrashReportCategory category = crashReport.makeCategory("Key Binding"); + CrashReport crashReport = CrashReport.create(cause, "Handling Key Binding"); + CrashReportSection category = crashReport.addElement("Key Binding"); MCVer.addDetail(category, "Key Binding", keyBinding::toString); MCVer.addDetail(category, "Handler", runnable::toString); - throw new ReportedException(crashReport); + throw new CrashException(crashReport); } } } @@ -142,11 +142,11 @@ public class KeyBindingRegistry extends EventRegistrations { try { runnable.run(); } catch (Throwable cause) { - CrashReport crashReport = CrashReport.makeCrashReport(cause, "Handling Raw Key Binding"); - CrashReportCategory category = crashReport.makeCategory("Key Binding"); + CrashReport crashReport = CrashReport.create(cause, "Handling Raw Key Binding"); + CrashReportSection category = crashReport.addElement("Key Binding"); MCVer.addDetail(category, "Key Code", () -> "" + keyCode); MCVer.addDetail(category, "Handler", runnable::toString); - throw new ReportedException(crashReport); + throw new CrashException(crashReport); } } } diff --git a/src/main/java/com/replaymod/core/ReplayMod.java b/src/main/java/com/replaymod/core/ReplayMod.java index 784f0d05..68aac5fb 100755 --- a/src/main/java/com/replaymod/core/ReplayMod.java +++ b/src/main/java/com/replaymod/core/ReplayMod.java @@ -19,50 +19,50 @@ import com.replaymod.replaystudio.util.I18n; import com.replaymod.simplepathing.ReplayModSimplePathing; import de.johni0702.minecraft.gui.container.GuiScreen; import lombok.Getter; -import net.minecraft.client.Minecraft; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.text.ITextComponent; -import net.minecraft.util.text.Style; -import net.minecraft.util.text.TextComponentString; -import net.minecraft.util.text.TextComponentTranslation; -import net.minecraft.util.text.TextFormatting; +import net.minecraft.client.MinecraftClient; +import net.minecraft.util.Identifier; +import net.minecraft.text.TextComponent; +import net.minecraft.text.Style; +import net.minecraft.text.StringTextComponent; +import net.minecraft.text.TranslatableTextComponent; +import net.minecraft.text.TextFormat; import org.apache.commons.io.FileUtils; //#if MC>=11400 -//$$ import com.github.steveice10.mc.protocol.MinecraftConstants; -//$$ import com.replaymod.core.versions.LangResourcePack; -//$$ import net.fabricmc.api.ClientModInitializer; -//$$ import net.fabricmc.loader.api.FabricLoader; -//$$ import net.minecraft.SharedConstants; -//$$ import net.minecraft.client.options.GameOption; -//$$ import net.minecraft.resource.DirectoryResourcePack; -//$$ import net.minecraft.resource.ResourcePackCreator; -//$$ import net.minecraft.resource.ResourcePackContainer; -//#else -import net.minecraftforge.eventbus.api.SubscribeEvent; - -//#if MC>=11300 +import com.github.steveice10.mc.protocol.MinecraftConstants; import com.replaymod.core.versions.LangResourcePack; -import net.minecraft.resources.FolderPack; -import net.minecraft.resources.IPackFinder; -import net.minecraft.resources.ResourcePackInfo; -import net.minecraftforge.fml.DeferredWorkQueue; -import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; -import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; -import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; -import net.minecraftforge.versions.mcp.MCPVersion; +import net.fabricmc.api.ClientModInitializer; +import net.fabricmc.loader.api.FabricLoader; +import net.minecraft.SharedConstants; +import net.minecraft.client.options.GameOption; +import net.minecraft.resource.DirectoryResourcePack; +import net.minecraft.resource.ResourcePackCreator; +import net.minecraft.resource.ResourcePackContainer; +//#else +//$$ import net.minecraftforge.eventbus.api.SubscribeEvent; +//$$ +//#if MC>=11300 +//$$ import com.replaymod.core.versions.LangResourcePack; +//$$ import net.minecraft.resources.FolderPack; +//$$ import net.minecraft.resources.IPackFinder; +//$$ import net.minecraft.resources.ResourcePackInfo; +//$$ import net.minecraftforge.fml.DeferredWorkQueue; +//$$ import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; +//$$ import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; +//$$ import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; +//$$ import net.minecraftforge.versions.mcp.MCPVersion; //#else //$$ import net.minecraft.client.resources.FolderResourcePack; //$$ import net.minecraft.client.resources.IResourcePack; //$$ import net.minecraftforge.common.config.Configuration; //#endif - +//$$ //#if MC>=10800 -import net.minecraft.client.GameSettings; +//$$ import net.minecraft.client.GameSettings; //#endif - +//$$ //#if MC>=11300 -import net.minecraftforge.fml.ModList; +//$$ import net.minecraftforge.fml.ModList; //#else //$$ import net.minecraftforge.fml.common.Loader; //$$ import net.minecraftforge.fml.common.Mod.EventHandler; @@ -77,8 +77,8 @@ import net.minecraftforge.fml.ModList; //$$ import java.util.ArrayDeque; //#endif //#endif -import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.fml.common.gameevent.TickEvent; +//$$ import net.minecraftforge.fml.common.Mod; +//$$ import net.minecraftforge.fml.common.gameevent.TickEvent; //#endif import java.io.ByteArrayInputStream; @@ -96,7 +96,7 @@ import static com.replaymod.core.versions.MCVer.*; //#if MC<11400 //#if MC>=11300 -@Mod(ReplayMod.MOD_ID) +//$$ @Mod(ReplayMod.MOD_ID) //#else //$$ @Mod(modid = ReplayMod.MOD_ID, //$$ useMetadata = true, @@ -112,17 +112,17 @@ import static com.replaymod.core.versions.MCVer.*; //#endif public class ReplayMod implements //#if MC>=11400 - //$$ ClientModInitializer, + ClientModInitializer, //#endif Module { @Getter(lazy = true) //#if MC>=11400 - //$$ private static final String minecraftVersion = MinecraftClient.getInstance().getGame().getVersion().getName(); + private static final String minecraftVersion = MinecraftClient.getInstance().getGame().getVersion().getName(); //#else //#if MC>=11300 - private static final String minecraftVersion = MCPVersion.getMCVersion(); + //$$ private static final String minecraftVersion = MCPVersion.getMCVersion(); //#else //$$ private static final String minecraftVersion = Loader.MC_VERSION; //#endif @@ -130,10 +130,10 @@ public class ReplayMod implements public static final String MOD_ID = "replaymod"; - public static final ResourceLocation TEXTURE = new ResourceLocation("replaymod", "replay_gui.png"); + public static final Identifier TEXTURE = new Identifier("replaymod", "replay_gui.png"); public static final int TEXTURE_SIZE = 256; - private static final Minecraft mc = MCVer.getMinecraft(); + private static final MinecraftClient mc = MCVer.getMinecraft(); //#if MC<11300 //$$ @Deprecated @@ -159,26 +159,26 @@ public class ReplayMod implements private final GuiBackgroundProcesses backgroundProcesses = new GuiBackgroundProcesses(); public ReplayMod() { - I18n.setI18n(net.minecraft.client.resources.I18n::format); + I18n.setI18n(net.minecraft.client.resource.language.I18n::translate); //#if MC>=11400 - //$$ // Check Minecraft protocol version for compatibility - //$$ int supportedProtocol = MinecraftConstants.PROTOCOL_VERSION; - //$$ int actualProtocol = SharedConstants.getGameVersion().getProtocolVersion(); - //$$ if (supportedProtocol != actualProtocol) { - //$$ throw new UnsupportedOperationException(String.format( - //$$ "Unsupported Minecraft version, supporting protocol version %s (%s) but actual version is %s (%s).", - //$$ supportedProtocol, MinecraftConstants.GAME_VERSION, - //$$ actualProtocol, SharedConstants.getGameVersion().getName() - //$$ )); - //$$ } + // Check Minecraft protocol version for compatibility + int supportedProtocol = MinecraftConstants.PROTOCOL_VERSION; + int actualProtocol = SharedConstants.getGameVersion().getProtocolVersion(); + if (supportedProtocol != actualProtocol) { + throw new UnsupportedOperationException(String.format( + "Unsupported Minecraft version, supporting protocol version %s (%s) but actual version is %s (%s).", + supportedProtocol, MinecraftConstants.GAME_VERSION, + actualProtocol, SharedConstants.getGameVersion().getName() + )); + } //#endif //#if MC>=11400 - //$$ // Not needed on fabric, using MixinModResourcePackUtil instead. Could in theory also use it on 1.13 but it already works as is. + // Not needed on fabric, using MixinModResourcePackUtil instead. Could in theory also use it on 1.13 but it already works as is. //#else //#if MC>=11300 - DeferredWorkQueue.runLater(() -> MCVer.getMinecraft().getResourcePackList().addPackFinder(new LangResourcePack.Finder())); + //$$ DeferredWorkQueue.runLater(() -> MCVer.getMinecraft().getResourcePackList().addPackFinder(new LangResourcePack.Finder())); //#endif //#endif @@ -219,7 +219,7 @@ public class ReplayMod implements public File getReplayFolder() throws IOException { String path = getSettingsRegistry().get(Setting.RECORDING_PATH); - File folder = new File(path.startsWith("./") ? getMinecraft().gameDir : null, path); + File folder = new File(path.startsWith("./") ? getMinecraft().runDirectory : null, path); FileUtils.forceMkdir(folder); return folder; } @@ -234,11 +234,11 @@ public class ReplayMod implements //#endif @SuppressWarnings("unchecked") //#if MC>=11300 - FolderPack jGuiResourcePack = new FolderPack(new File("../jGui/src/main/resources")) { + DirectoryResourcePack jGuiResourcePack = new DirectoryResourcePack(new File("../jGui/src/main/resources")) { @Override - protected InputStream getInputStream(String resourceName) throws IOException { + protected InputStream openFilename(String resourceName) throws IOException { try { - return super.getInputStream(resourceName); + return super.openFilename(resourceName); //#else //$$ List defaultResourcePacks = ((MinecraftAccessor) mc).getDefaultResourcePacks(); //$$ FolderResourcePack jGuiResourcePack = new FolderResourcePack(new File("../jGui/src/main/resources")) { @@ -250,9 +250,9 @@ public class ReplayMod implements } catch (IOException e) { if ("pack.mcmeta".equals(resourceName)) { //#if MC>=11400 - //$$ int version = 4; + int version = 4; //#else - int version = 1; + //$$ int version = 1; //#endif return new ByteArrayInputStream(("{\"pack\": {\"description\": \"dummy pack for jGui resources in dev-env\", \"pack_format\": " + version + "}}").getBytes(StandardCharsets.UTF_8)); @@ -262,10 +262,10 @@ public class ReplayMod implements } }; //#if MC>=11300 - mc.getResourcePackList().addPackFinder(new IPackFinder() { + mc.method_1520().addCreator(new ResourcePackCreator() { @Override - public void addPackInfosToMap(Map map, ResourcePackInfo.IFactory factory) { - map.put("jgui", ResourcePackInfo.func_195793_a("jgui", true, () -> jGuiResourcePack, factory, ResourcePackInfo.Priority.BOTTOM)); + public void registerContainer(Map map, ResourcePackContainer.Factory factory) { + map.put("jgui", ResourcePackContainer.of("jgui", true, () -> jGuiResourcePack, factory, ResourcePackContainer.SortingDirection.BOTTOM)); } }); //#else @@ -290,19 +290,19 @@ public class ReplayMod implements }} //#if MC>=11400 - //$$ @Override - //$$ public void onInitializeClient() { - //$$ modules.forEach(Module::initCommon); - //$$ modules.forEach(Module::initClient); - //$$ modules.forEach(m -> m.registerKeyBindings(keyBindingRegistry)); - //$$ } + @Override + public void onInitializeClient() { + modules.forEach(Module::initCommon); + modules.forEach(Module::initClient); + modules.forEach(m -> m.registerKeyBindings(keyBindingRegistry)); + } //#else //#if MC>=11300 - { - FMLJavaModLoadingContext.get().getModEventBus().addListener((FMLCommonSetupEvent event) -> modules.forEach(Module::initCommon)); - FMLJavaModLoadingContext.get().getModEventBus().addListener((FMLClientSetupEvent event) -> modules.forEach(Module::initClient)); - FMLJavaModLoadingContext.get().getModEventBus().addListener((FMLClientSetupEvent event) -> modules.forEach(m -> m.registerKeyBindings(keyBindingRegistry))); - } + //$$ { + //$$ FMLJavaModLoadingContext.get().getModEventBus().addListener((FMLCommonSetupEvent event) -> modules.forEach(Module::initCommon)); + //$$ FMLJavaModLoadingContext.get().getModEventBus().addListener((FMLClientSetupEvent event) -> modules.forEach(Module::initClient)); + //$$ FMLJavaModLoadingContext.get().getModEventBus().addListener((FMLClientSetupEvent event) -> modules.forEach(m -> m.registerKeyBindings(keyBindingRegistry))); + //$$ } //#else //$$ @EventHandler //$$ public void init(FMLInitializationEvent event) { @@ -335,9 +335,9 @@ public class ReplayMod implements //#if MC>=10800 if (!MCVer.hasOptifine()) { //#if MC>=11400 - //$$ GameOption.RENDER_DISTANCE.setMax(64f); + GameOption.RENDER_DISTANCE.setMax(64f); //#else - GameSettings.Options.RENDER_DISTANCE.setValueMax(64f); + //$$ GameSettings.Options.RENDER_DISTANCE.setValueMax(64f); //#endif } //#endif @@ -385,64 +385,64 @@ public class ReplayMod implements */ private boolean inRunLater = false; //#if MC>=11400 - //$$ private boolean inRenderTaskQueue = false; + private boolean inRenderTaskQueue = false; //#endif public void runLater(Runnable runnable) { //#if MC>=11400 - //$$ if (mc.isOnThread() && inRunLater && !inRenderTaskQueue) { - //$$ ((MinecraftAccessor) mc).getRenderTaskQueue().offer(() -> { - //$$ inRenderTaskQueue = true; - //$$ try { - //$$ runLater(runnable); - //$$ } finally { - //$$ inRenderTaskQueue = false; - //$$ } - //$$ }); - //$$ } else { - //$$ mc.method_18858(() -> { - //$$ inRunLater = true; - //$$ try { - //$$ runnable.run(); - //$$ } finally { - //$$ inRunLater = false; - //$$ } - //$$ }); - //$$ } - //#else - if (mc.isCallingFromMinecraftThread() && inRunLater) { - //#if MC>=10800 - FORGE_BUS.register(new Object() { - @SubscribeEvent - public void onRenderTick(TickEvent.RenderTickEvent event) { - if (event.phase == TickEvent.Phase.START) { - runLater(runnable); - FORGE_BUS.unregister(this); - } + if (mc.isOnThread() && inRunLater && !inRenderTaskQueue) { + ((MinecraftAccessor) mc).getRenderTaskQueue().offer(() -> { + inRenderTaskQueue = true; + try { + runLater(runnable); + } finally { + inRenderTaskQueue = false; } }); - //#else - //$$ FORGE_BUS.register(new RunLaterHelper(runnable)); - //#endif - return; - } - //#if MC>=10800 - Queue> tasks = ((MinecraftAccessor) mc).getScheduledTasks(); - //noinspection SynchronizationOnLocalVariableOrMethodParameter - synchronized (tasks) { - //#else - //$$ Queue> tasks = scheduledTasks; - //$$ synchronized (scheduledTasks) { - //#endif - tasks.add(ListenableFutureTask.create(() -> { + } else { + mc.method_18858(() -> { inRunLater = true; try { runnable.run(); } finally { inRunLater = false; } - }, null)); + }); } + //#else + //$$ if (mc.isCallingFromMinecraftThread() && inRunLater) { + //#if MC>=10800 + //$$ FORGE_BUS.register(new Object() { + //$$ @SubscribeEvent + //$$ public void onRenderTick(TickEvent.RenderTickEvent event) { + //$$ if (event.phase == TickEvent.Phase.START) { + //$$ runLater(runnable); + //$$ FORGE_BUS.unregister(this); + //$$ } + //$$ } + //$$ }); + //#else + //$$ FORGE_BUS.register(new RunLaterHelper(runnable)); + //#endif + //$$ return; + //$$ } + //#if MC>=10800 + //$$ Queue> tasks = ((MinecraftAccessor) mc).getScheduledTasks(); + //$$ //noinspection SynchronizationOnLocalVariableOrMethodParameter + //$$ synchronized (tasks) { + //#else + //$$ Queue> tasks = scheduledTasks; + //$$ synchronized (scheduledTasks) { + //#endif + //$$ tasks.add(ListenableFutureTask.create(() -> { + //$$ inRunLater = true; + //$$ try { + //$$ runnable.run(); + //$$ } finally { + //$$ inRunLater = false; + //$$ } + //$$ }, null)); + //$$ } //#endif } @@ -479,12 +479,12 @@ public class ReplayMod implements public String getVersion() { //#if MC>=11400 - //$$ return FabricLoader.getInstance().getModContainer(MOD_ID) - //$$ .orElseThrow(IllegalStateException::new) - //$$ .getMetadata().getVersion().toString(); + return FabricLoader.getInstance().getModContainer(MOD_ID) + .orElseThrow(IllegalStateException::new) + .getMetadata().getVersion().toString(); //#else //#if MC>=11300 - return ModList.get().getModContainerById(MOD_ID).get().getModInfo().getVersion().toString(); + //$$ return ModList.get().getModContainerById(MOD_ID).get().getModInfo().getVersion().toString(); //#else //$$ return Loader.instance().getIndexedModList().get(MOD_ID).getVersion(); //#endif @@ -497,7 +497,7 @@ public class ReplayMod implements } } - public Minecraft getMinecraft() { + public MinecraftClient getMinecraft() { return mc; } @@ -513,13 +513,13 @@ public class ReplayMod implements if (getSettingsRegistry().get(Setting.NOTIFICATIONS)) { // Some nostalgia: "§8[§6Replay Mod§8]§r Your message goes here" //#if MC>=10904 - Style coloredDarkGray = new Style().setColor(TextFormatting.DARK_GRAY); - Style coloredGold = new Style().setColor(TextFormatting.GOLD); - ITextComponent text = new TextComponentString("[").setStyle(coloredDarkGray) - .appendSibling(new TextComponentTranslation("replaymod.title").setStyle(coloredGold)) - .appendSibling(new TextComponentString("] ")) - .appendSibling(new TextComponentTranslation(message, args).setStyle(new Style() - .setColor(warning ? TextFormatting.RED : TextFormatting.DARK_GREEN))); + Style coloredDarkGray = new Style().setColor(TextFormat.DARK_GRAY); + Style coloredGold = new Style().setColor(TextFormat.GOLD); + TextComponent text = new StringTextComponent("[").setStyle(coloredDarkGray) + .append(new TranslatableTextComponent("replaymod.title").setStyle(coloredGold)) + .append(new StringTextComponent("] ")) + .append(new TranslatableTextComponent(message, args).setStyle(new Style() + .setColor(warning ? TextFormat.RED : TextFormat.DARK_GREEN))); //#else //$$ ChatStyle coloredDarkGray = new ChatStyle().setColor(EnumChatFormatting.DARK_GRAY); //$$ ChatStyle coloredGold = new ChatStyle().setColor(EnumChatFormatting.GOLD); @@ -531,7 +531,7 @@ public class ReplayMod implements //#endif // Send message to chat GUI // The ingame GUI is initialized at startup, therefore this is possible before the client is connected - mc.ingameGUI.getChatGUI().printChatMessage(text); + mc.inGameHud.getChatHud().addMessage(text); } } diff --git a/src/main/java/com/replaymod/core/SettingsRegistry.java b/src/main/java/com/replaymod/core/SettingsRegistry.java index 4f06eb7c..1defef6d 100644 --- a/src/main/java/com/replaymod/core/SettingsRegistry.java +++ b/src/main/java/com/replaymod/core/SettingsRegistry.java @@ -8,21 +8,21 @@ import java.util.*; import java.util.concurrent.ConcurrentHashMap; //#if MC>=11400 -//$$ import com.google.gson.Gson; -//$$ import com.google.gson.GsonBuilder; -//$$ import com.google.gson.JsonElement; -//$$ import com.google.gson.JsonObject; -//$$ import com.google.gson.JsonPrimitive; -//$$ import java.io.IOException; -//$$ import java.nio.charset.StandardCharsets; -//$$ import java.nio.file.Files; -//$$ import java.nio.file.Path; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonPrimitive; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; //#else //#if MC>=11300 -import net.minecraftforge.common.ForgeConfigSpec; -import net.minecraftforge.fml.ModLoadingContext; -import net.minecraftforge.fml.config.ModConfig; -import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; +//$$ import net.minecraftforge.common.ForgeConfigSpec; +//$$ import net.minecraftforge.fml.ModLoadingContext; +//$$ import net.minecraftforge.fml.config.ModConfig; +//$$ import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; //#else //$$ import net.minecraftforge.common.config.Configuration; //#endif @@ -33,80 +33,80 @@ import static com.replaymod.core.versions.MCVer.*; public class SettingsRegistry { private Map, Object> settings = new ConcurrentHashMap<>(); //#if MC>=11400 - //$$ private final Path configFile = getMinecraft().runDirectory.toPath().resolve("configs/replaymod.json"); + private final Path configFile = getMinecraft().runDirectory.toPath().resolve("configs/replaymod.json"); //#else - private static final Object NULL_OBJECT = new Object(); + //$$ private static final Object NULL_OBJECT = new Object(); //#if MC>=11300 - private ForgeConfigSpec spec; - private ModConfig config; + //$$ private ForgeConfigSpec spec; + //$$ private ModConfig config; //#else //$$ private Configuration configuration; //#endif //#endif //#if MC>=11400 - //$$ public void register() { - //$$ String config; - //$$ if (Files.exists(configFile)) { - //$$ try { - //$$ config = new String(Files.readAllBytes(configFile), StandardCharsets.UTF_8); - //$$ } catch (IOException e) { - //$$ e.printStackTrace(); - //$$ return; - //$$ } - //$$ } else { - //$$ save(); - //$$ return; - //$$ } - //$$ Gson gson = new Gson(); - //$$ JsonObject root = gson.fromJson(config, JsonObject.class); - //$$ for (Map.Entry, Object> entry : settings.entrySet()) { - //$$ SettingKey key = entry.getKey(); - //$$ JsonElement category = root.get(key.getCategory()); - //$$ if (category != null && category.isJsonObject()) { - //$$ JsonElement valueElem = category.getAsJsonObject().get(key.getKey()); - //$$ if (!valueElem.isJsonPrimitive()) continue; - //$$ JsonPrimitive value = valueElem.getAsJsonPrimitive(); - //$$ if (key.getDefault() instanceof Boolean && value.isBoolean()) { - //$$ entry.setValue(value.getAsBoolean()); - //$$ } - //$$ if (key.getDefault() instanceof Integer && value.isNumber()) { - //$$ entry.setValue(value.getAsNumber().intValue()); - //$$ } - //$$ if (key.getDefault() instanceof Double && value.isNumber()) { - //$$ entry.setValue(value.getAsNumber().doubleValue()); - //$$ } - //$$ if (key.getDefault() instanceof String && value.isString()) { - //$$ entry.setValue(value.getAsString()); - //$$ } - //$$ } - //$$ } - //$$ } - //#else - //#if MC>=11300 public void register() { - if (spec == null) { - ForgeConfigSpec.Builder builder = new ForgeConfigSpec.Builder(); - for (SettingKey key : settings.keySet()) { - builder - .translation(key.getDisplayString()) - .define(key.getCategory() + "." + key.getKey(), key.getDefault()); + String config; + if (Files.exists(configFile)) { + try { + config = new String(Files.readAllBytes(configFile), StandardCharsets.UTF_8); + } catch (IOException e) { + e.printStackTrace(); + return; } - spec = builder.build(); + } else { + save(); + return; } - FMLJavaModLoadingContext.get().getModEventBus().addListener(this::load); - ModLoadingContext.get().registerConfig(ModConfig.Type.CLIENT, spec); - } - - private void load(ModConfig.Loading event) { - config = event.getConfig(); + Gson gson = new Gson(); + JsonObject root = gson.fromJson(config, JsonObject.class); for (Map.Entry, Object> entry : settings.entrySet()) { SettingKey key = entry.getKey(); - Object value = config.getConfigData().get(key.getCategory() + "." + key.getKey()); - entry.setValue(value == null ? key.getDefault() : value); + JsonElement category = root.get(key.getCategory()); + if (category != null && category.isJsonObject()) { + JsonElement valueElem = category.getAsJsonObject().get(key.getKey()); + if (!valueElem.isJsonPrimitive()) continue; + JsonPrimitive value = valueElem.getAsJsonPrimitive(); + if (key.getDefault() instanceof Boolean && value.isBoolean()) { + entry.setValue(value.getAsBoolean()); + } + if (key.getDefault() instanceof Integer && value.isNumber()) { + entry.setValue(value.getAsNumber().intValue()); + } + if (key.getDefault() instanceof Double && value.isNumber()) { + entry.setValue(value.getAsNumber().doubleValue()); + } + if (key.getDefault() instanceof String && value.isString()) { + entry.setValue(value.getAsString()); + } + } } } //#else + //#if MC>=11300 + //$$ public void register() { + //$$ if (spec == null) { + //$$ ForgeConfigSpec.Builder builder = new ForgeConfigSpec.Builder(); + //$$ for (SettingKey key : settings.keySet()) { + //$$ builder + //$$ .translation(key.getDisplayString()) + //$$ .define(key.getCategory() + "." + key.getKey(), key.getDefault()); + //$$ } + //$$ spec = builder.build(); + //$$ } + //$$ FMLJavaModLoadingContext.get().getModEventBus().addListener(this::load); + //$$ ModLoadingContext.get().registerConfig(ModConfig.Type.CLIENT, spec); + //$$ } + //$$ + //$$ private void load(ModConfig.Loading event) { + //$$ config = event.getConfig(); + //$$ for (Map.Entry, Object> entry : settings.entrySet()) { + //$$ SettingKey key = entry.getKey(); + //$$ Object value = config.getConfigData().get(key.getCategory() + "." + key.getKey()); + //$$ entry.setValue(value == null ? key.getDefault() : value); + //$$ } + //$$ } + //#else //$$ public void setConfiguration(Configuration configuration) { //$$ this.configuration = configuration; //$$ @@ -134,13 +134,13 @@ public class SettingsRegistry { public void register(SettingKey key) { //#if MC>=11400 - //$$ settings.put(key, key.getDefault()); + settings.put(key, key.getDefault()); //#else //#if MC>=11300 - if (spec != null) { - throw new IllegalStateException("Cannot register more settings are spec has been built."); - } - settings.put(key, NULL_OBJECT); + //$$ if (spec != null) { + //$$ throw new IllegalStateException("Cannot register more settings are spec has been built."); + //$$ } + //$$ settings.put(key, NULL_OBJECT); //#else //$$ Object value; //$$ if (configuration != null) { @@ -178,9 +178,9 @@ public class SettingsRegistry { public void set(SettingKey key, T value) { //#if MC<11400 //#if MC>=11300 - if (config != null) { - config.getConfigData().set(key.getCategory() + "." + key.getKey(), value); - } + //$$ if (config != null) { + //$$ config.getConfigData().set(key.getCategory() + "." + key.getKey(), value); + //$$ } //#else //$$ if (key.getDefault() instanceof Boolean) { //$$ configuration.get(key.getCategory(), key.getKey(), (Boolean) key.getDefault()).set((Boolean) value); @@ -201,39 +201,39 @@ public class SettingsRegistry { public void save() { //#if MC>=11400 - //$$ JsonObject root = new JsonObject(); - //$$ for (Map.Entry, Object> entry : settings.entrySet()) { - //$$ SettingKey key = entry.getKey(); - //$$ JsonObject category = root.getAsJsonObject(key.getCategory()); - //$$ if (category == null) { - //$$ category = new JsonObject(); - //$$ root.add(key.getCategory(), category); - //$$ } - //$$ - //$$ Object value = entry.getValue(); - //$$ if (value instanceof Boolean) { - //$$ category.addProperty(key.getKey(), (Boolean) value); - //$$ } - //$$ if (value instanceof Number) { - //$$ category.addProperty(key.getKey(), (Number) value); - //$$ } - //$$ if (value instanceof String) { - //$$ category.addProperty(key.getKey(), (String) value); - //$$ } - //$$ } - //$$ Gson gson = new GsonBuilder().setPrettyPrinting().create(); - //$$ String config = gson.toJson(gson); - //$$ try { - //$$ Files.createDirectories(configFile.getParent()); - //$$ Files.write(configFile, config.getBytes(StandardCharsets.UTF_8)); - //$$ } catch (IOException e) { - //$$ e.printStackTrace(); - //$$ } + JsonObject root = new JsonObject(); + for (Map.Entry, Object> entry : settings.entrySet()) { + SettingKey key = entry.getKey(); + JsonObject category = root.getAsJsonObject(key.getCategory()); + if (category == null) { + category = new JsonObject(); + root.add(key.getCategory(), category); + } + + Object value = entry.getValue(); + if (value instanceof Boolean) { + category.addProperty(key.getKey(), (Boolean) value); + } + if (value instanceof Number) { + category.addProperty(key.getKey(), (Number) value); + } + if (value instanceof String) { + category.addProperty(key.getKey(), (String) value); + } + } + Gson gson = new GsonBuilder().setPrettyPrinting().create(); + String config = gson.toJson(gson); + try { + Files.createDirectories(configFile.getParent()); + Files.write(configFile, config.getBytes(StandardCharsets.UTF_8)); + } catch (IOException e) { + e.printStackTrace(); + } //#else //#if MC>=11300 - if (config != null) { - config.save(); - } + //$$ if (config != null) { + //$$ config.save(); + //$$ } //#else //$$ configuration.save(); //#endif diff --git a/src/main/java/com/replaymod/core/events/PostRenderWorldCallback.java b/src/main/java/com/replaymod/core/events/PostRenderWorldCallback.java index f67d21c1..efca6c98 100644 --- a/src/main/java/com/replaymod/core/events/PostRenderWorldCallback.java +++ b/src/main/java/com/replaymod/core/events/PostRenderWorldCallback.java @@ -1,19 +1,19 @@ //#if MC>=11400 -//$$ package com.replaymod.core.events; -//$$ -//$$ import net.fabricmc.fabric.api.event.Event; -//$$ import net.fabricmc.fabric.api.event.EventFactory; -//$$ -//$$ public interface PostRenderWorldCallback { -//$$ Event EVENT = EventFactory.createArrayBacked( -//$$ PostRenderWorldCallback.class, -//$$ (listeners) -> () -> { -//$$ for (PostRenderWorldCallback listener : listeners) { -//$$ listener.postRenderWorld(); -//$$ } -//$$ } -//$$ ); -//$$ -//$$ void postRenderWorld(); -//$$ } +package com.replaymod.core.events; + +import net.fabricmc.fabric.api.event.Event; +import net.fabricmc.fabric.api.event.EventFactory; + +public interface PostRenderWorldCallback { + Event EVENT = EventFactory.createArrayBacked( + PostRenderWorldCallback.class, + (listeners) -> () -> { + for (PostRenderWorldCallback listener : listeners) { + listener.postRenderWorld(); + } + } + ); + + void postRenderWorld(); +} //#endif diff --git a/src/main/java/com/replaymod/core/gui/GuiBackgroundProcesses.java b/src/main/java/com/replaymod/core/gui/GuiBackgroundProcesses.java index 09ba3e5e..38ebed9f 100644 --- a/src/main/java/com/replaymod/core/gui/GuiBackgroundProcesses.java +++ b/src/main/java/com/replaymod/core/gui/GuiBackgroundProcesses.java @@ -14,13 +14,13 @@ import de.johni0702.minecraft.gui.utils.lwjgl.Dimension; import de.johni0702.minecraft.gui.utils.lwjgl.ReadableDimension; //#if MC>=11400 -//$$ import de.johni0702.minecraft.gui.versions.callbacks.InitScreenCallback; -//$$ import net.minecraft.client.gui.Screen; +import de.johni0702.minecraft.gui.versions.callbacks.InitScreenCallback; +import net.minecraft.client.gui.Screen; //#else -import net.minecraftforge.client.event.GuiScreenEvent; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import static com.replaymod.core.versions.MCVer.getGui; +//$$ import net.minecraftforge.client.event.GuiScreenEvent; +//$$ import net.minecraftforge.common.MinecraftForge; +//$$ import net.minecraftforge.eventbus.api.SubscribeEvent; +//$$ import static com.replaymod.core.versions.MCVer.getGui; //#endif import static com.replaymod.core.versions.MCVer.getMinecraft; @@ -29,12 +29,12 @@ public class GuiBackgroundProcesses extends EventRegistrations { private GuiPanel panel = new GuiPanel().setLayout(new VerticalLayout().setSpacing(10)); //#if MC>=11400 - //$$ { on(InitScreenCallback.EVENT, (screen, buttons) -> onGuiInit(screen)); } - //$$ private void onGuiInit(Screen guiScreen) { + { on(InitScreenCallback.EVENT, (screen, buttons) -> onGuiInit(screen)); } + private void onGuiInit(Screen guiScreen) { //#else - @SubscribeEvent - public void onGuiInit(GuiScreenEvent.InitGuiEvent.Post event) { - net.minecraft.client.gui.GuiScreen guiScreen = getGui(event); + //$$ @SubscribeEvent + //$$ public void onGuiInit(GuiScreenEvent.InitGuiEvent.Post event) { + //$$ net.minecraft.client.gui.GuiScreen guiScreen = getGui(event); //#endif if (guiScreen != getMinecraft().currentScreen) return; // people tend to construct GuiScreens without opening them diff --git a/src/main/java/com/replaymod/core/gui/GuiFactory.java b/src/main/java/com/replaymod/core/gui/GuiFactory.java index bb6b88e8..31ff16a9 100644 --- a/src/main/java/com/replaymod/core/gui/GuiFactory.java +++ b/src/main/java/com/replaymod/core/gui/GuiFactory.java @@ -1,35 +1,35 @@ //#if MC<11400 -package com.replaymod.core.gui; - -import com.replaymod.core.ReplayMod; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiScreen; - +//$$ package com.replaymod.core.gui; +//$$ +//$$ import com.replaymod.core.ReplayMod; +//$$ import net.minecraft.client.Minecraft; +//$$ import net.minecraft.client.gui.GuiScreen; +//$$ //#if MC>=10800 -import net.minecraftforge.fml.client.IModGuiFactory; +//$$ import net.minecraftforge.fml.client.IModGuiFactory; //#else //$$ import cpw.mods.fml.client.IModGuiFactory; //#endif - -import java.util.Set; - -@SuppressWarnings("unused") -public class GuiFactory implements IModGuiFactory { - @Override - public void initialize(Minecraft minecraftInstance) { - - } - +//$$ +//$$ import java.util.Set; +//$$ +//$$ @SuppressWarnings("unused") +//$$ public class GuiFactory implements IModGuiFactory { +//$$ @Override +//$$ public void initialize(Minecraft minecraftInstance) { +//$$ +//$$ } +//$$ //#if MC>=11200 - @Override - public boolean hasConfigGui() { - return true; - } - - @Override - public GuiScreen createConfigGui(GuiScreen parentScreen) { - return new GuiReplaySettings(parentScreen, ReplayMod.instance.getSettingsRegistry()).toMinecraft(); - } + //$$ @Override + //$$ public boolean hasConfigGui() { + //$$ return true; + //$$ } + //$$ + //$$ @Override + //$$ public GuiScreen createConfigGui(GuiScreen parentScreen) { + //$$ return new GuiReplaySettings(parentScreen, ReplayMod.instance.getSettingsRegistry()).toMinecraft(); + //$$ } //#else //$$ @Override //$$ public Class mainConfigGuiClass() { @@ -54,10 +54,10 @@ public class GuiFactory implements IModGuiFactory { //$$ } //$$ } //#endif - - @Override - public Set runtimeGuiCategories() { - return null; - } -} +//$$ +//$$ @Override +//$$ public Set runtimeGuiCategories() { +//$$ return null; +//$$ } +//$$ } //#endif diff --git a/src/main/java/com/replaymod/core/gui/GuiReplaySettings.java b/src/main/java/com/replaymod/core/gui/GuiReplaySettings.java index 921ae1f4..c277fcbd 100644 --- a/src/main/java/com/replaymod/core/gui/GuiReplaySettings.java +++ b/src/main/java/com/replaymod/core/gui/GuiReplaySettings.java @@ -13,17 +13,17 @@ import de.johni0702.minecraft.gui.layout.HorizontalLayout; import de.johni0702.minecraft.gui.layout.VerticalLayout; import de.johni0702.minecraft.gui.utils.Consumer; import lombok.RequiredArgsConstructor; -import net.minecraft.client.resources.I18n; +import net.minecraft.client.resource.language.I18n; import java.util.List; public class GuiReplaySettings extends AbstractGuiScreen { - public GuiReplaySettings(final net.minecraft.client.gui.GuiScreen parent, final SettingsRegistry settingsRegistry) { + public GuiReplaySettings(final net.minecraft.client.gui.Screen parent, final SettingsRegistry settingsRegistry) { final GuiButton doneButton = new GuiButton(this).setI18nLabel("gui.done").setSize(200, 20).onClick(new Runnable() { @Override public void run() { - getMinecraft().displayGuiScreen(parent); + getMinecraft().openScreen(parent); } }); @@ -42,7 +42,7 @@ public class GuiReplaySettings extends AbstractGuiScreen { final SettingsRegistry.SettingKey booleanKey = (SettingsRegistry.SettingKey) key; final GuiToggleButton button = new GuiToggleButton<>().setSize(150, 20) .setI18nLabel(key.getDisplayString()).setSelected(settingsRegistry.get(booleanKey) ? 0 : 1) - .setValues(I18n.format("options.on"), I18n.format("options.off")); + .setValues(I18n.translate("options.on"), I18n.translate("options.off")); element = button.onClick(new Runnable() { @Override public void run() { @@ -60,7 +60,7 @@ public class GuiReplaySettings extends AbstractGuiScreen { for (int j = 0; j < entries.length; j++) { Object value = values.get(j); entries[j] = new MultipleChoiceDropdownEntry(value, - I18n.format(multipleChoiceKey.getDisplayString()) + ": " + I18n.format(value.toString())); + I18n.translate(multipleChoiceKey.getDisplayString()) + ": " + I18n.translate(value.toString())); if (currentValue.equals(value)) { selected = j; } diff --git a/src/main/java/com/replaymod/core/handler/MainMenuHandler.java b/src/main/java/com/replaymod/core/handler/MainMenuHandler.java index bfe27125..93adf11a 100644 --- a/src/main/java/com/replaymod/core/handler/MainMenuHandler.java +++ b/src/main/java/com/replaymod/core/handler/MainMenuHandler.java @@ -2,10 +2,10 @@ package com.replaymod.core.handler; import com.replaymod.core.mixin.GuiMainMenuAccessor; import de.johni0702.minecraft.gui.utils.EventRegistrations; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiMainMenu; -import net.minecraft.client.gui.GuiScreen; -import net.minecraft.client.gui.GuiScreenRealmsProxy; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.MainMenuScreen; +import net.minecraft.client.gui.Screen; +import net.minecraft.realms.RealmsScreenProxy; import org.lwjgl.opengl.GL11; import java.util.List; @@ -13,13 +13,13 @@ import java.util.List; import static com.replaymod.core.versions.MCVer.*; //#if MC>=11400 -//$$ import de.johni0702.minecraft.gui.versions.callbacks.InitScreenCallback; -//$$ import net.minecraft.client.gui.widget.AbstractButtonWidget; +import de.johni0702.minecraft.gui.versions.callbacks.InitScreenCallback; +import net.minecraft.client.gui.widget.AbstractButtonWidget; //#else -import net.minecraft.client.gui.GuiButton; -import net.minecraftforge.client.event.GuiScreenEvent; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.eventbus.api.SubscribeEvent; +//$$ import net.minecraft.client.gui.GuiButton; +//$$ import net.minecraftforge.client.event.GuiScreenEvent; +//$$ import net.minecraftforge.common.MinecraftForge; +//$$ import net.minecraftforge.eventbus.api.SubscribeEvent; //#endif /** @@ -27,21 +27,21 @@ import net.minecraftforge.eventbus.api.SubscribeEvent; */ public class MainMenuHandler extends EventRegistrations { //#if MC>=11400 - //$$ { on(InitScreenCallback.EVENT, this::onInit); } - //$$ public void onInit(Screen guiScreen, List buttonList) { + { on(InitScreenCallback.EVENT, this::onInit); } + public void onInit(Screen guiScreen, List buttonList) { //#else - @SubscribeEvent - public void onInit(GuiScreenEvent.InitGuiEvent.Post event) { - GuiScreen guiScreen = getGui(event); - List buttonList = getButtonList(event); + //$$ @SubscribeEvent + //$$ public void onInit(GuiScreenEvent.InitGuiEvent.Post event) { + //$$ GuiScreen guiScreen = getGui(event); + //$$ List buttonList = getButtonList(event); //#endif - if (guiScreen instanceof GuiMainMenu) { - GuiMainMenu gui = (GuiMainMenu) guiScreen; + if (guiScreen instanceof MainMenuScreen) { + MainMenuScreen gui = (MainMenuScreen) guiScreen; int realmsOffset = 0; //#if MC>=11400 - //$$ for (AbstractButtonWidget button : buttonList) { + for (AbstractButtonWidget button : buttonList) { //#else - for (GuiButton button : buttonList) { + //$$ for (GuiButton button : buttonList) { //#endif // Buttons that aren't in a rectangle directly above our space don't need moving if (button.x + width(button) < gui.width / 2 - 100 @@ -53,40 +53,40 @@ public class MainMenuHandler extends EventRegistrations { button.y += offset; //#if MC>=11400 - //$$ // FIXME looks like the button has moved into the realms lib? + // FIXME looks like the button has moved into the realms lib? //#else //#if MC>=11300 - if (button.id == 14) { - realmsOffset = offset; - } + //$$ if (button.id == 14) { + //$$ realmsOffset = offset; + //$$ } //#endif //#endif } //#if MC>=11300 GuiMainMenuAccessor guiA = (GuiMainMenuAccessor) gui; - if (realmsOffset != 0 && guiA.getRealmsNotification() instanceof GuiScreenRealmsProxy) { - guiA.setRealmsNotification(new RealmsNotificationProxy((GuiScreenRealmsProxy) guiA.getRealmsNotification(), realmsOffset)); + if (realmsOffset != 0 && guiA.getRealmsNotification() instanceof RealmsScreenProxy) { + guiA.setRealmsNotification(new RealmsNotificationProxy((RealmsScreenProxy) guiA.getRealmsNotification(), realmsOffset)); } //#endif } } //#if MC>=11300 - private static class RealmsNotificationProxy extends GuiScreen { - private final GuiScreenRealmsProxy proxy; + private static class RealmsNotificationProxy extends Screen { + private final RealmsScreenProxy proxy; private final int offset; - private RealmsNotificationProxy(GuiScreenRealmsProxy proxy, int offset) { + private RealmsNotificationProxy(RealmsScreenProxy proxy, int offset) { //#if MC>=11400 - //$$ super(null); + super(null); //#endif this.proxy = proxy; this.offset = offset; } @Override - public void setWorldAndResolution(Minecraft mc, int width, int height) { - proxy.setWorldAndResolution(mc, width, height); + public void init(MinecraftClient mc, int width, int height) { + proxy.init(mc, width, height); } @Override @@ -107,8 +107,8 @@ public class MainMenuHandler extends EventRegistrations { } @Override - public void onGuiClosed() { - proxy.onGuiClosed(); + public void removed() { + proxy.removed(); } } //#endif diff --git a/src/main/java/com/replaymod/core/mixin/AbstractButtonWidgetAccessor.java b/src/main/java/com/replaymod/core/mixin/AbstractButtonWidgetAccessor.java index 947d32c7..069aa53b 100644 --- a/src/main/java/com/replaymod/core/mixin/AbstractButtonWidgetAccessor.java +++ b/src/main/java/com/replaymod/core/mixin/AbstractButtonWidgetAccessor.java @@ -1,13 +1,13 @@ //#if MC>=11400 -//$$ package com.replaymod.core.mixin; -//$$ -//$$ import net.minecraft.client.gui.widget.AbstractButtonWidget; -//$$ import org.spongepowered.asm.mixin.Mixin; -//$$ import org.spongepowered.asm.mixin.gen.Accessor; -//$$ -//$$ @Mixin(AbstractButtonWidget.class) -//$$ public interface AbstractButtonWidgetAccessor { -//$$ @Accessor -//$$ int getHeight(); -//$$ } +package com.replaymod.core.mixin; + +import net.minecraft.client.gui.widget.AbstractButtonWidget; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(AbstractButtonWidget.class) +public interface AbstractButtonWidgetAccessor { + @Accessor + int getHeight(); +} //#endif diff --git a/src/main/java/com/replaymod/core/mixin/GuiMainMenuAccessor.java b/src/main/java/com/replaymod/core/mixin/GuiMainMenuAccessor.java index f2985f0e..75ed667c 100644 --- a/src/main/java/com/replaymod/core/mixin/GuiMainMenuAccessor.java +++ b/src/main/java/com/replaymod/core/mixin/GuiMainMenuAccessor.java @@ -1,16 +1,16 @@ package com.replaymod.core.mixin; -import net.minecraft.client.gui.GuiMainMenu; -import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.gui.MainMenuScreen; +import net.minecraft.client.gui.Screen; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Accessor; -@Mixin(GuiMainMenu.class) +@Mixin(MainMenuScreen.class) public interface GuiMainMenuAccessor { //#if MC>=10904 - @Accessor - GuiScreen getRealmsNotification(); - @Accessor - void setRealmsNotification(GuiScreen value); + @Accessor("realmsNotificationGui") + Screen getRealmsNotification(); + @Accessor("realmsNotificationGui") + void setRealmsNotification(Screen value); //#endif } diff --git a/src/main/java/com/replaymod/core/mixin/GuiScreenAccessor.java b/src/main/java/com/replaymod/core/mixin/GuiScreenAccessor.java index e2b450ec..c535b5a5 100644 --- a/src/main/java/com/replaymod/core/mixin/GuiScreenAccessor.java +++ b/src/main/java/com/replaymod/core/mixin/GuiScreenAccessor.java @@ -1,32 +1,32 @@ package com.replaymod.core.mixin; -import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.gui.Screen; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Accessor; import java.util.List; //#if MC>=11400 -//$$ import net.minecraft.client.gui.widget.AbstractButtonWidget; +import net.minecraft.client.gui.widget.AbstractButtonWidget; //#else -import net.minecraft.client.gui.GuiButton; +//$$ import net.minecraft.client.gui.GuiButton; //#endif //#if MC>=11300 -import net.minecraft.client.gui.IGuiEventListener; +import net.minecraft.client.gui.Element; //#endif -@Mixin(GuiScreen.class) +@Mixin(Screen.class) public interface GuiScreenAccessor { @Accessor //#if MC>=11400 - //$$ List getButtons(); + List getButtons(); //#else - List getButtons(); + //$$ List getButtons(); //#endif //#if MC>=11300 @Accessor - List getChildren(); + List getChildren(); //#endif } diff --git a/src/main/java/com/replaymod/core/mixin/KeyBindingAccessor.java b/src/main/java/com/replaymod/core/mixin/KeyBindingAccessor.java index b7ffc712..b24f1420 100644 --- a/src/main/java/com/replaymod/core/mixin/KeyBindingAccessor.java +++ b/src/main/java/com/replaymod/core/mixin/KeyBindingAccessor.java @@ -1,13 +1,13 @@ package com.replaymod.core.mixin; -import net.minecraft.client.settings.KeyBinding; +import net.minecraft.client.options.KeyBinding; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Accessor; @Mixin(KeyBinding.class) public interface KeyBindingAccessor { - @Accessor + @Accessor("timesPressed") int getPressTime(); - @Accessor + @Accessor("timesPressed") void setPressTime(int value); } diff --git a/src/main/java/com/replaymod/core/mixin/MinecraftAccessor.java b/src/main/java/com/replaymod/core/mixin/MinecraftAccessor.java index c8114d05..d1b884ab 100644 --- a/src/main/java/com/replaymod/core/mixin/MinecraftAccessor.java +++ b/src/main/java/com/replaymod/core/mixin/MinecraftAccessor.java @@ -1,15 +1,15 @@ package com.replaymod.core.mixin; -import net.minecraft.client.Minecraft; -import net.minecraft.crash.CrashReport; -import net.minecraft.util.Timer; +import net.minecraft.client.MinecraftClient; +import net.minecraft.util.crash.CrashReport; +import net.minecraft.client.render.RenderTickCounter; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Accessor; import java.util.Queue; //#if MC<11400 -import java.util.concurrent.FutureTask; +//$$ import java.util.concurrent.FutureTask; //#endif //#if MC<11300 @@ -17,25 +17,25 @@ import java.util.concurrent.FutureTask; //$$ import java.util.List; //#endif -@Mixin(Minecraft.class) +@Mixin(MinecraftClient.class) public interface MinecraftAccessor { - @Accessor - Timer getTimer(); - @Accessor - void setTimer(Timer value); + @Accessor("renderTickCounter") + RenderTickCounter getTimer(); + @Accessor("renderTickCounter") + void setTimer(RenderTickCounter value); //#if MC>=11400 - //$$ @Accessor - //$$ Queue getRenderTaskQueue(); - //#else @Accessor - Queue> getScheduledTasks(); + Queue getRenderTaskQueue(); + //#else + //$$ @Accessor + //$$ Queue> getScheduledTasks(); //#endif - @Accessor("hasCrashed") + @Accessor("crashed") boolean hasCrashed(); - @Accessor + @Accessor("crashReport") CrashReport getCrashReporter(); //#if MC<11300 diff --git a/src/main/java/com/replaymod/core/mixin/MixinGameRenderer.java b/src/main/java/com/replaymod/core/mixin/MixinGameRenderer.java index b8d1e329..03a076e5 100644 --- a/src/main/java/com/replaymod/core/mixin/MixinGameRenderer.java +++ b/src/main/java/com/replaymod/core/mixin/MixinGameRenderer.java @@ -1,59 +1,59 @@ //#if MC>=11400 -//$$ package com.replaymod.core.mixin; -//$$ -//$$ import com.replaymod.core.events.PostRenderWorldCallback; -//$$ import com.replaymod.core.events.PreRenderHandCallback; -//$$ import de.johni0702.minecraft.gui.versions.callbacks.PostRenderHudCallback; -//$$ import de.johni0702.minecraft.gui.versions.callbacks.PostRenderScreenCallback; -//$$ import net.minecraft.client.render.Camera; -//$$ import net.minecraft.client.render.GameRenderer; -//$$ 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; -//$$ -//$$ @Mixin(GameRenderer.class) -//$$ public class MixinGameRenderer { -//$$ @Inject( -//$$ method = "render", -//$$ at = @At( -//$$ value = "INVOKE", -//$$ target = "Lnet/minecraft/client/gui/hud/InGameHud;draw(F)V", -//$$ shift = At.Shift.AFTER -//$$ ) -//$$ ) -//$$ private void postRenderOverlay(float partialTicks, long nanoTime, boolean renderWorld, CallbackInfo ci) { -//$$ PostRenderHudCallback.EVENT.invoker().postRenderHud(partialTicks); -//$$ } -//$$ -//$$ @Inject( -//$$ method = "render", -//$$ at = @At( -//$$ value = "INVOKE", -//$$ target = "Lnet/minecraft/client/gui/Screen;render(IIF)V", -//$$ shift = At.Shift.AFTER -//$$ ) -//$$ ) -//$$ private void postRenderScreen(float partialTicks, long nanoTime, boolean renderWorld, CallbackInfo ci) { -//$$ PostRenderScreenCallback.EVENT.invoker().postRenderScreen(partialTicks); -//$$ } -//$$ -//$$ @Inject( -//$$ method = "renderCenter", -//$$ at = @At( -//$$ value = "FIELD", -//$$ target = "Lnet/minecraft/client/render/GameRenderer;renderHand:Z" -//$$ ) -//$$ ) -//$$ private void postRenderWorld(float partialTicks, long nanoTime, CallbackInfo ci) { -//$$ PostRenderWorldCallback.EVENT.invoker().postRenderWorld(); -//$$ } -//$$ -//$$ @Inject(method = "renderHand", at = @At("HEAD"), cancellable = true) -//$$ private void preRenderHand(Camera camera, float partialTicks, CallbackInfo ci) { -//$$ if (PreRenderHandCallback.EVENT.invoker().preRenderHand()) { -//$$ ci.cancel(); -//$$ } -//$$ } -//$$ } +package com.replaymod.core.mixin; + +import com.replaymod.core.events.PostRenderWorldCallback; +import com.replaymod.core.events.PreRenderHandCallback; +import de.johni0702.minecraft.gui.versions.callbacks.PostRenderHudCallback; +import de.johni0702.minecraft.gui.versions.callbacks.PostRenderScreenCallback; +import net.minecraft.client.render.Camera; +import net.minecraft.client.render.GameRenderer; +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; + +@Mixin(GameRenderer.class) +public class MixinGameRenderer { + @Inject( + method = "render", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/client/gui/hud/InGameHud;draw(F)V", + shift = At.Shift.AFTER + ) + ) + private void postRenderOverlay(float partialTicks, long nanoTime, boolean renderWorld, CallbackInfo ci) { + PostRenderHudCallback.EVENT.invoker().postRenderHud(partialTicks); + } + + @Inject( + method = "render", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/client/gui/Screen;render(IIF)V", + shift = At.Shift.AFTER + ) + ) + private void postRenderScreen(float partialTicks, long nanoTime, boolean renderWorld, CallbackInfo ci) { + PostRenderScreenCallback.EVENT.invoker().postRenderScreen(partialTicks); + } + + @Inject( + method = "renderCenter", + at = @At( + value = "FIELD", + target = "Lnet/minecraft/client/render/GameRenderer;renderHand:Z" + ) + ) + private void postRenderWorld(float partialTicks, long nanoTime, CallbackInfo ci) { + PostRenderWorldCallback.EVENT.invoker().postRenderWorld(); + } + + @Inject(method = "renderHand", at = @At("HEAD"), cancellable = true) + private void preRenderHand(Camera camera, float partialTicks, CallbackInfo ci) { + if (PreRenderHandCallback.EVENT.invoker().preRenderHand()) { + ci.cancel(); + } + } +} //#endif diff --git a/src/main/java/com/replaymod/core/mixin/MixinKeyboardListener.java b/src/main/java/com/replaymod/core/mixin/MixinKeyboardListener.java index a20006b7..cb046983 100644 --- a/src/main/java/com/replaymod/core/mixin/MixinKeyboardListener.java +++ b/src/main/java/com/replaymod/core/mixin/MixinKeyboardListener.java @@ -3,59 +3,59 @@ package com.replaymod.core.mixin; import com.replaymod.core.events.KeyBindingEventCallback; import com.replaymod.core.events.KeyEventCallback; -import net.minecraft.client.KeyboardListener; +import net.minecraft.client.Keyboard; 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; -@Mixin(KeyboardListener.class) +@Mixin(Keyboard.class) public class MixinKeyboardListener { - @Inject(method = "onKeyEvent", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/settings/KeyBinding;onTick(Lnet/minecraft/client/util/InputMappings$Input;)V", shift = At.Shift.AFTER)) + @Inject(method = "onKey", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/options/KeyBinding;onKeyPressed(Lnet/minecraft/client/util/InputUtil$KeyCode;)V", shift = At.Shift.AFTER)) private void afterKeyBindingTick(long windowPointer, int key, int scanCode, int action, int modifiers, CallbackInfo ci) { KeyBindingEventCallback.EVENT.invoker().onKeybindingEvent(); KeyEventCallback.EVENT.invoker().onKeyEvent(key, scanCode, action, modifiers); } //#if MC>=11400 - //$$ /* FIXME we currently don't use these but they also don't work since their target is wrapped in a lambda, - //$$ see MixinMouseListener for working examples - //$$ @Redirect( - //$$ method = "onKey", - //$$ at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/ParentElement;keyPressed(III)Z") - //$$ ) - //$$ private boolean keyPressed(ParentElement element, int keyCode, int modifiers, int scanCode) { - //$$ if (KeyboardCallback.EVENT.invoker().keyPressed(keyCode, modifiers, scanCode)) { - //$$ return true; - //$$ } else { - //$$ return element.keyPressed(keyCode, modifiers, scanCode); - //$$ } - //$$ } - //$$ - //$$ @Redirect( - //$$ method = "onKey", - //$$ at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/ParentElement;keyReleased(III)Z") - //$$ ) - //$$ private boolean keyReleased(ParentElement element, int keyCode, int modifiers, int scanCode) { - //$$ if (KeyboardCallback.EVENT.invoker().keyReleased(keyCode, modifiers, scanCode)) { - //$$ return true; - //$$ } else { - //$$ return element.keyReleased(keyCode, modifiers, scanCode); - //$$ } - //$$ } - //$$ - //$$ @Redirect( - //$$ method = "onKey", - //$$ at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/ParentElement;charTyped(CI)Z") - //$$ ) - //$$ private boolean charTyped(ParentElement element, char keyChar, int modifiers) { - //$$ if (KeyboardCallback.EVENT.invoker().charTyped(keyChar, modifiers)) { - //$$ return true; - //$$ } else { - //$$ return element.charTyped(keyChar, modifiers); - //$$ } - //$$ } - //$$ */ + /* FIXME we currently don't use these but they also don't work since their target is wrapped in a lambda, + see MixinMouseListener for working examples + @Redirect( + method = "onKey", + at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/ParentElement;keyPressed(III)Z") + ) + private boolean keyPressed(ParentElement element, int keyCode, int modifiers, int scanCode) { + if (KeyboardCallback.EVENT.invoker().keyPressed(keyCode, modifiers, scanCode)) { + return true; + } else { + return element.keyPressed(keyCode, modifiers, scanCode); + } + } + + @Redirect( + method = "onKey", + at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/ParentElement;keyReleased(III)Z") + ) + private boolean keyReleased(ParentElement element, int keyCode, int modifiers, int scanCode) { + if (KeyboardCallback.EVENT.invoker().keyReleased(keyCode, modifiers, scanCode)) { + return true; + } else { + return element.keyReleased(keyCode, modifiers, scanCode); + } + } + + @Redirect( + method = "onKey", + at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/ParentElement;charTyped(CI)Z") + ) + private boolean charTyped(ParentElement element, char keyChar, int modifiers) { + if (KeyboardCallback.EVENT.invoker().charTyped(keyChar, modifiers)) { + return true; + } else { + return element.charTyped(keyChar, modifiers); + } + } + */ //#endif } //#endif diff --git a/src/main/java/com/replaymod/core/mixin/MixinMinecraft.java b/src/main/java/com/replaymod/core/mixin/MixinMinecraft.java index fb4d8610..d663dc54 100644 --- a/src/main/java/com/replaymod/core/mixin/MixinMinecraft.java +++ b/src/main/java/com/replaymod/core/mixin/MixinMinecraft.java @@ -1,7 +1,7 @@ package com.replaymod.core.mixin; import com.replaymod.core.versions.MCVer; -import net.minecraft.client.Minecraft; +import net.minecraft.client.MinecraftClient; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; @@ -11,7 +11,7 @@ import com.replaymod.core.events.PostRenderCallback; import com.replaymod.core.events.PreRenderCallback; import de.johni0702.minecraft.gui.versions.callbacks.OpenGuiScreenCallback; import de.johni0702.minecraft.gui.versions.callbacks.PreTickCallback; -import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.gui.Screen; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; //#else @@ -23,56 +23,56 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import java.io.IOException; //#if MC>=11400 -//$$ import net.minecraft.util.NonBlockingThreadExecutor; +import net.minecraft.util.NonBlockingThreadExecutor; //#endif -@Mixin(Minecraft.class) +@Mixin(MinecraftClient.class) public abstract class MixinMinecraft //#if MC>=11400 - //$$ extends NonBlockingThreadExecutor + extends NonBlockingThreadExecutor //#endif implements MCVer.MinecraftMethodAccessor { //#if MC>=11400 - //$$ public MixinMinecraft(String string_1) { super(string_1); } + public MixinMinecraft(String string_1) { super(string_1); } //#endif //#if MC>=11300 - @Shadow protected abstract void processKeyBinds(); + @Shadow protected abstract void handleInputEvents(); @Override public void replayModProcessKeyBinds() { - processKeyBinds(); + handleInputEvents(); } //#if MC>=11400 - //$$ @Override - //$$ public void replayModExecuteTaskQueue() { - //$$ executeTaskQueue(); - //$$ } + @Override + public void replayModExecuteTaskQueue() { + executeTaskQueue(); + } //#endif - @Inject(method = "runGameLoop", + @Inject(method = "render", at = @At(value = "INVOKE", - target = "Lnet/minecraft/client/renderer/GameRenderer;updateCameraAndRender(FJZ)V")) + target = "Lnet/minecraft/client/render/GameRenderer;render(FJZ)V")) private void preRender(boolean unused, CallbackInfo ci) { PreRenderCallback.EVENT.invoker().preRender(); } - @Inject(method = "runGameLoop", + @Inject(method = "render", at = @At(value = "INVOKE", - target = "Lnet/minecraft/client/renderer/GameRenderer;updateCameraAndRender(FJZ)V", + target = "Lnet/minecraft/client/render/GameRenderer;render(FJZ)V", shift = At.Shift.AFTER)) private void postRender(boolean unused, CallbackInfo ci) { PostRenderCallback.EVENT.invoker().postRender(); } - @Inject(method = "runTick", at = @At("HEAD")) + @Inject(method = "tick", at = @At("HEAD")) private void preTick(CallbackInfo ci) { PreTickCallback.EVENT.invoker().preTick(); } - @Inject(method = "displayGuiScreen", at = @At(value = "FIELD", target = "Lnet/minecraft/client/Minecraft;currentScreen:Lnet/minecraft/client/gui/GuiScreen;")) - private void openGuiScreen(GuiScreen newGuiScreen, CallbackInfo ci) { + @Inject(method = "openScreen", at = @At(value = "FIELD", target = "Lnet/minecraft/client/MinecraftClient;currentScreen:Lnet/minecraft/client/gui/Screen;")) + private void openGuiScreen(Screen newGuiScreen, CallbackInfo ci) { OpenGuiScreenCallback.EVENT.invoker().openGuiScreen(newGuiScreen); } //#else diff --git a/src/main/java/com/replaymod/core/mixin/MixinModResourcePackUtil.java b/src/main/java/com/replaymod/core/mixin/MixinModResourcePackUtil.java index 625e88ff..ede1abc2 100644 --- a/src/main/java/com/replaymod/core/mixin/MixinModResourcePackUtil.java +++ b/src/main/java/com/replaymod/core/mixin/MixinModResourcePackUtil.java @@ -1,37 +1,37 @@ //#if MC>=11400 -//$$ package com.replaymod.core.mixin; -//$$ -//$$ import com.replaymod.core.ReplayMod; -//$$ import com.replaymod.core.versions.LangResourcePack; -//$$ import net.fabricmc.fabric.api.resource.ModResourcePack; -//$$ import net.fabricmc.fabric.impl.resources.ModResourcePackUtil; -//$$ import net.fabricmc.loader.api.FabricLoader; -//$$ import net.fabricmc.loader.api.ModContainer; -//$$ import net.minecraft.resource.ResourcePack; -//$$ import net.minecraft.resource.ResourceType; -//$$ 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 java.util.List; -//$$ -//$$ @Mixin(value = ModResourcePackUtil.class, remap = false) -//$$ public class MixinModResourcePackUtil { -//$$ @Inject(method = "appendModResourcePacks", at = @At("RETURN"), remap = false) -//$$ private static void injectRMLangPack(List packList, ResourceType type, CallbackInfo ci) { -//$$ if (type != ResourceType.ASSETS) return; -//$$ -//$$ for (int i = 0; i < packList.size(); i++) { -//$$ ResourcePack pack = packList.get(i); -//$$ if (pack instanceof ModResourcePack && ((ModResourcePack) pack).getFabricModMetadata().getId().equals(ReplayMod.MOD_ID)) { -//$$ ModContainer container = FabricLoader.getInstance().getModContainer(ReplayMod.MOD_ID).orElseThrow(IllegalAccessError::new); -//$$ packList.add(i, new LangResourcePack(container.getRootPath())); -//$$ return; -//$$ } -//$$ } -//$$ -//$$ throw new IllegalStateException("Could not find ReplayMod resource pack."); -//$$ } -//$$ } +package com.replaymod.core.mixin; + +import com.replaymod.core.ReplayMod; +import com.replaymod.core.versions.LangResourcePack; +import net.fabricmc.fabric.api.resource.ModResourcePack; +import net.fabricmc.fabric.impl.resources.ModResourcePackUtil; +import net.fabricmc.loader.api.FabricLoader; +import net.fabricmc.loader.api.ModContainer; +import net.minecraft.resource.ResourcePack; +import net.minecraft.resource.ResourceType; +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 java.util.List; + +@Mixin(value = ModResourcePackUtil.class, remap = false) +public class MixinModResourcePackUtil { + @Inject(method = "appendModResourcePacks", at = @At("RETURN"), remap = false) + private static void injectRMLangPack(List packList, ResourceType type, CallbackInfo ci) { + if (type != ResourceType.ASSETS) return; + + for (int i = 0; i < packList.size(); i++) { + ResourcePack pack = packList.get(i); + if (pack instanceof ModResourcePack && ((ModResourcePack) pack).getFabricModMetadata().getId().equals(ReplayMod.MOD_ID)) { + ModContainer container = FabricLoader.getInstance().getModContainer(ReplayMod.MOD_ID).orElseThrow(IllegalAccessError::new); + packList.add(i, new LangResourcePack(container.getRootPath())); + return; + } + } + + throw new IllegalStateException("Could not find ReplayMod resource pack."); + } +} //#endif diff --git a/src/main/java/com/replaymod/core/mixin/MixinMouseListener.java b/src/main/java/com/replaymod/core/mixin/MixinMouseListener.java index 1fc6698d..f0535033 100644 --- a/src/main/java/com/replaymod/core/mixin/MixinMouseListener.java +++ b/src/main/java/com/replaymod/core/mixin/MixinMouseListener.java @@ -1,60 +1,60 @@ //#if MC>=11400 -//$$ package com.replaymod.core.mixin; -//$$ -//$$ import com.replaymod.core.events.KeyBindingEventCallback; -//$$ import de.johni0702.minecraft.gui.versions.callbacks.MouseCallback; -//$$ import net.minecraft.client.Mouse; -//$$ import net.minecraft.client.gui.Element; -//$$ import net.minecraft.client.gui.Screen; -//$$ 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.Redirect; -//$$ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -//$$ -//$$ @Mixin(Mouse.class) -//$$ public class MixinMouseListener { -//$$ @Shadow private int activeButton; -//$$ -//$$ @Inject(method = "onMouseButton", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/options/KeyBinding;onKeyPressed(Lnet/minecraft/client/util/InputUtil$KeyCode;)V", shift = At.Shift.AFTER)) -//$$ private void afterKeyBindingTick(CallbackInfo ci) { -//$$ KeyBindingEventCallback.EVENT.invoker().onKeybindingEvent(); -//$$ } -//$$ -//$$ @Inject(method = "method_1611", at = @At("HEAD"), cancellable = true) -//$$ private void mouseDown(boolean[] result, double x, double y, int button, CallbackInfo ci) { -//$$ if (MouseCallback.EVENT.invoker().mouseDown(x, y, button)) { -//$$ result[0] = true; -//$$ ci.cancel(); -//$$ } -//$$ } -//$$ -//$$ @Inject(method = "method_1605", at = @At("HEAD"), cancellable = true) -//$$ private void mouseUp(boolean[] result, double x, double y, int button, CallbackInfo ci) { -//$$ if (MouseCallback.EVENT.invoker().mouseUp(x, y, button)) { -//$$ result[0] = true; -//$$ ci.cancel(); -//$$ } -//$$ } -//$$ -//$$ @Inject(method = "method_1602", at = @At("HEAD"), cancellable = true) -//$$ private void mouseDrag(Element element, double x, double y, double dx, double dy, CallbackInfo ci) { -//$$ if (MouseCallback.EVENT.invoker().mouseDrag(x, y, this.activeButton, dx, dy)) { -//$$ ci.cancel(); -//$$ } -//$$ } -//$$ -//$$ @Redirect( -//$$ method = "onMouseScroll", -//$$ at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/Screen;mouseScrolled(DDD)Z") -//$$ ) -//$$ private boolean mouseScroll(Screen element, double x, double y, double scroll) { -//$$ if (MouseCallback.EVENT.invoker().mouseScroll(x, y, scroll)) { -//$$ return true; -//$$ } else { -//$$ return element.mouseScrolled(x, y, scroll); -//$$ } -//$$ } -//$$ } +package com.replaymod.core.mixin; + +import com.replaymod.core.events.KeyBindingEventCallback; +import de.johni0702.minecraft.gui.versions.callbacks.MouseCallback; +import net.minecraft.client.Mouse; +import net.minecraft.client.gui.Element; +import net.minecraft.client.gui.Screen; +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.Redirect; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(Mouse.class) +public class MixinMouseListener { + @Shadow private int activeButton; + + @Inject(method = "onMouseButton", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/options/KeyBinding;onKeyPressed(Lnet/minecraft/client/util/InputUtil$KeyCode;)V", shift = At.Shift.AFTER)) + private void afterKeyBindingTick(CallbackInfo ci) { + KeyBindingEventCallback.EVENT.invoker().onKeybindingEvent(); + } + + @Inject(method = "method_1611", at = @At("HEAD"), cancellable = true) + private void mouseDown(boolean[] result, double x, double y, int button, CallbackInfo ci) { + if (MouseCallback.EVENT.invoker().mouseDown(x, y, button)) { + result[0] = true; + ci.cancel(); + } + } + + @Inject(method = "method_1605", at = @At("HEAD"), cancellable = true) + private void mouseUp(boolean[] result, double x, double y, int button, CallbackInfo ci) { + if (MouseCallback.EVENT.invoker().mouseUp(x, y, button)) { + result[0] = true; + ci.cancel(); + } + } + + @Inject(method = "method_1602", at = @At("HEAD"), cancellable = true) + private void mouseDrag(Element element, double x, double y, double dx, double dy, CallbackInfo ci) { + if (MouseCallback.EVENT.invoker().mouseDrag(x, y, this.activeButton, dx, dy)) { + ci.cancel(); + } + } + + @Redirect( + method = "onMouseScroll", + at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/Screen;mouseScrolled(DDD)Z") + ) + private boolean mouseScroll(Screen element, double x, double y, double scroll) { + if (MouseCallback.EVENT.invoker().mouseScroll(x, y, scroll)) { + return true; + } else { + return element.mouseScrolled(x, y, scroll); + } + } +} //#endif diff --git a/src/main/java/com/replaymod/core/mixin/MixinScreen.java b/src/main/java/com/replaymod/core/mixin/MixinScreen.java index 499c6bef..a35e10b3 100644 --- a/src/main/java/com/replaymod/core/mixin/MixinScreen.java +++ b/src/main/java/com/replaymod/core/mixin/MixinScreen.java @@ -1,27 +1,27 @@ //#if MC>=11400 -//$$ package com.replaymod.core.mixin; -//$$ -//$$ import de.johni0702.minecraft.gui.versions.callbacks.InitScreenCallback; -//$$ import net.minecraft.client.MinecraftClient; -//$$ import net.minecraft.client.gui.Screen; -//$$ import net.minecraft.client.gui.widget.AbstractButtonWidget; -//$$ import org.spongepowered.asm.mixin.Final; -//$$ 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; -//$$ -//$$ import java.util.List; -//$$ -//$$ @Mixin(Screen.class) -//$$ public class MixinScreen { -//$$ @Shadow -//$$ protected @Final List buttons; -//$$ -//$$ @Inject(method = "init(Lnet/minecraft/client/MinecraftClient;II)V", at = @At("RETURN")) -//$$ private void init(MinecraftClient minecraftClient_1, int int_1, int int_2, CallbackInfo ci) { -//$$ InitScreenCallback.EVENT.invoker().initScreen((Screen) (Object) this, buttons); -//$$ } -//$$ } +package com.replaymod.core.mixin; + +import de.johni0702.minecraft.gui.versions.callbacks.InitScreenCallback; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.Screen; +import net.minecraft.client.gui.widget.AbstractButtonWidget; +import org.spongepowered.asm.mixin.Final; +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; + +import java.util.List; + +@Mixin(Screen.class) +public class MixinScreen { + @Shadow + protected @Final List buttons; + + @Inject(method = "init(Lnet/minecraft/client/MinecraftClient;II)V", at = @At("RETURN")) + private void init(MinecraftClient minecraftClient_1, int int_1, int int_2, CallbackInfo ci) { + InitScreenCallback.EVENT.invoker().initScreen((Screen) (Object) this, buttons); + } +} //#endif diff --git a/src/main/java/com/replaymod/core/mixin/TimerAccessor.java b/src/main/java/com/replaymod/core/mixin/TimerAccessor.java index 5e97284e..288eed4e 100644 --- a/src/main/java/com/replaymod/core/mixin/TimerAccessor.java +++ b/src/main/java/com/replaymod/core/mixin/TimerAccessor.java @@ -1,20 +1,20 @@ package com.replaymod.core.mixin; -import net.minecraft.util.Timer; +import net.minecraft.client.render.RenderTickCounter; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Accessor; -@Mixin(Timer.class) +@Mixin(RenderTickCounter.class) public interface TimerAccessor { - @Accessor + @Accessor("prevTimeMillis") long getLastSyncSysClock(); - @Accessor + @Accessor("prevTimeMillis") void setLastSyncSysClock(long value); //#if MC>=11200 - @Accessor + @Accessor("timeScale") float getTickLength(); - @Accessor + @Accessor("timeScale") void setTickLength(float value); //#else //$$ @Accessor diff --git a/src/main/java/com/replaymod/core/utils/ModCompat.java b/src/main/java/com/replaymod/core/utils/ModCompat.java index aff15817..4f5a883d 100644 --- a/src/main/java/com/replaymod/core/utils/ModCompat.java +++ b/src/main/java/com/replaymod/core/utils/ModCompat.java @@ -1,16 +1,16 @@ package com.replaymod.core.utils; import com.replaymod.replaystudio.data.ModInfo; -import net.minecraft.util.ResourceLocation; +import net.minecraft.util.Identifier; //#if MC>=11400 -//$$ import net.fabricmc.loader.api.FabricLoader; -//$$ import net.fabricmc.loader.api.ModContainer; -//$$ import net.minecraft.util.registry.Registry; +import net.fabricmc.loader.api.FabricLoader; +import net.fabricmc.loader.api.ModContainer; +import net.minecraft.util.registry.Registry; //#else //#if MC>=11200 -import net.minecraftforge.registries.ForgeRegistry; -import net.minecraftforge.registries.RegistryManager; +//$$ import net.minecraftforge.registries.ForgeRegistry; +//$$ import net.minecraftforge.registries.RegistryManager; //#else //#if MC>=10800 //$$ import net.minecraftforge.fml.common.registry.GameData; @@ -19,10 +19,10 @@ import net.minecraftforge.registries.RegistryManager; //#endif //$$ import java.util.stream.Stream; //#endif - +//$$ //#if MC>=10800 //#if MC>=11300 -import net.minecraftforge.fml.ModList; +//$$ import net.minecraftforge.fml.ModList; //#else //$$ import net.minecraftforge.fml.common.Loader; //$$ import net.minecraftforge.fml.common.ModContainer; @@ -42,21 +42,21 @@ public class ModCompat { public static Collection getInstalledNetworkMods() { //#if MC>=11300 //#if MC>=11400 - //$$ Map modInfoMap = FabricLoader.getInstance().getAllMods().stream() - //$$ .map(ModContainer::getMetadata) - //$$ .map(m -> new ModInfo(m.getId(), m.getName(), m.getVersion().toString())) - //$$ .collect(Collectors.toMap(ModInfo::getId, Function.identity())); - //$$ return Registry.REGISTRIES.stream() - //$$ .map(Registry::getIds).flatMap(Set::stream) - //#else - Map modInfoMap = ModList.get().getMods().stream() - .map(m -> new ModInfo(m.getModId(), m.getDisplayName(), m.getVersion().toString())) + Map modInfoMap = FabricLoader.getInstance().getAllMods().stream() + .map(ModContainer::getMetadata) + .map(m -> new ModInfo(m.getId(), m.getName(), m.getVersion().toString())) .collect(Collectors.toMap(ModInfo::getId, Function.identity())); - return RegistryManager.ACTIVE.takeSnapshot(false).keySet().stream() - .map(RegistryManager.ACTIVE::getRegistry) - .map(ForgeRegistry::getKeys).flatMap(Set::stream) + return Registry.REGISTRIES.stream() + .map(Registry::getIds).flatMap(Set::stream) + //#else + //$$ Map modInfoMap = ModList.get().getMods().stream() + //$$ .map(m -> new ModInfo(m.getModId(), m.getDisplayName(), m.getVersion().toString())) + //$$ .collect(Collectors.toMap(ModInfo::getId, Function.identity())); + //$$ return RegistryManager.ACTIVE.takeSnapshot(false).keySet().stream() + //$$ .map(RegistryManager.ACTIVE::getRegistry) + //$$ .map(ForgeRegistry::getKeys).flatMap(Set::stream) //#endif - .map(ResourceLocation::getNamespace).filter(s -> !s.equals("minecraft")).distinct() + .map(Identifier::getNamespace).filter(s -> !s.equals("minecraft")).distinct() .map(modInfoMap::get).filter(Objects::nonNull) .collect(Collectors.toList()); //#else diff --git a/src/main/java/com/replaymod/core/utils/Restrictions.java b/src/main/java/com/replaymod/core/utils/Restrictions.java index 1deccf7f..bfda612f 100644 --- a/src/main/java/com/replaymod/core/utils/Restrictions.java +++ b/src/main/java/com/replaymod/core/utils/Restrictions.java @@ -1,9 +1,9 @@ package com.replaymod.core.utils; -import net.minecraft.network.PacketBuffer; +import net.minecraft.util.PacketByteBuf; //#if MC>=10904 -import net.minecraft.network.play.server.SPacketCustomPayload; -import net.minecraft.util.ResourceLocation; +import net.minecraft.client.network.packet.CustomPayloadS2CPacket; +import net.minecraft.util.Identifier; //#else //$$ import net.minecraft.network.play.server.S3FPacketCustomPayload; //#endif @@ -20,7 +20,7 @@ import static com.replaymod.core.versions.MCVer.readString; */ public class Restrictions { //#if MC>=11300 - public static final ResourceLocation PLUGIN_CHANNEL = new ResourceLocation("replaymod", "restrict"); + public static final Identifier PLUGIN_CHANNEL = new Identifier("replaymod", "restrict"); //#else //$$ public static final String PLUGIN_CHANNEL = "Replay|Restrict"; //#endif @@ -30,12 +30,12 @@ public class Restrictions { private boolean onlyRecordingPlayer; //#if MC>=10904 - public String handle(SPacketCustomPayload packet) { + public String handle(CustomPayloadS2CPacket packet) { //#else //$$ public String handle(S3FPacketCustomPayload packet) { //#endif //#if MC>=10800 - PacketBuffer buffer = packet.getBufferData(); + PacketByteBuf buffer = packet.getData(); //#else //$$ PacketBuffer buffer = new PacketBuffer(Unpooled.wrappedBuffer(packet.func_149168_d())); //#endif diff --git a/src/main/java/com/replaymod/core/utils/Utils.java b/src/main/java/com/replaymod/core/utils/Utils.java index f13d397a..10e54994 100644 --- a/src/main/java/com/replaymod/core/utils/Utils.java +++ b/src/main/java/com/replaymod/core/utils/Utils.java @@ -21,9 +21,9 @@ import de.johni0702.minecraft.gui.utils.Colors; import de.johni0702.minecraft.gui.utils.lwjgl.Dimension; import de.johni0702.minecraft.gui.utils.lwjgl.ReadableDimension; import de.johni0702.minecraft.gui.versions.MCVer; -import net.minecraft.client.gui.GuiScreen; -import net.minecraft.crash.CrashReport; -import net.minecraft.util.ResourceLocation; +import net.minecraft.client.gui.Screen; +import net.minecraft.util.crash.CrashReport; +import net.minecraft.util.Identifier; import org.apache.commons.io.Charsets; import org.apache.commons.io.FilenameUtils; import org.apache.logging.log4j.Logger; @@ -34,8 +34,8 @@ import org.apache.logging.log4j.Logger; //#endif //#if MC>=10800 -import net.minecraft.client.network.NetworkPlayerInfo; -import net.minecraft.client.resources.DefaultPlayerSkin; +import net.minecraft.client.network.PlayerListEntry; +import net.minecraft.client.util.DefaultSkinHelper; //#else //$$ import net.minecraft.client.Minecraft; @@ -186,14 +186,14 @@ public class Utils { } } - public static ResourceLocation getResourceLocationForPlayerUUID(UUID uuid) { + public static Identifier getResourceLocationForPlayerUUID(UUID uuid) { //#if MC>=10800 - NetworkPlayerInfo info = getMinecraft().getConnection().getPlayerInfo(uuid); - ResourceLocation skinLocation; - if (info != null && info.hasLocationSkin()) { - skinLocation = info.getLocationSkin(); + PlayerListEntry info = getMinecraft().getNetworkHandler().getPlayerListEntry(uuid); + Identifier skinLocation; + if (info != null && info.hasSkinTexture()) { + skinLocation = info.getSkinTexture(); } else { - skinLocation = DefaultPlayerSkin.getDefaultSkin(uuid); + skinLocation = DefaultSkinHelper.getTexture(uuid); } return skinLocation; //#else @@ -207,7 +207,7 @@ public class Utils { public static boolean isCtrlDown() { //#if MC>=11300 - return GuiScreen.isCtrlKeyDown(); + return Screen.hasControlDown(); //#else //$$ return Keyboard.isKeyDown(Keyboard.KEY_LCONTROL) || Keyboard.isKeyDown(Keyboard.KEY_RCONTROL); //#endif @@ -229,7 +229,7 @@ public class Utils { public static GuiInfoPopup error(Logger logger, GuiContainer container, CrashReport crashReport, Runnable onClose) { // Convert crash report to string - String crashReportStr = crashReport.getCompleteReport(); + String crashReportStr = crashReport.asString(); // Log via logger logger.error(crashReportStr); @@ -237,10 +237,10 @@ public class Utils { // Try to save the crash report if (crashReport.getFile() == null) { try { - File folder = new File(getMinecraft().gameDir, "crash-reports"); + File folder = new File(getMinecraft().runDirectory, "crash-reports"); File file = new File(folder, "crash-" + (new SimpleDateFormat("yyyy-MM-dd_HH.mm.ss")).format(new Date()) + "-client.txt"); logger.debug("Saving crash report to file: {}", file); - crashReport.saveToFile(file); + crashReport.writeToFile(file); } catch (Throwable t) { logger.error("Saving crash report file:", t); } diff --git a/src/main/java/com/replaymod/core/utils/WrappedTimer.java b/src/main/java/com/replaymod/core/utils/WrappedTimer.java index 5e45a4ce..07ddba7a 100644 --- a/src/main/java/com/replaymod/core/utils/WrappedTimer.java +++ b/src/main/java/com/replaymod/core/utils/WrappedTimer.java @@ -1,14 +1,14 @@ package com.replaymod.core.utils; import com.replaymod.core.mixin.TimerAccessor; -import net.minecraft.util.Timer; +import net.minecraft.client.render.RenderTickCounter; -public class WrappedTimer extends Timer { +public class WrappedTimer extends RenderTickCounter { public static final float DEFAULT_MS_PER_TICK = 1000 / 20; - protected final Timer wrapped; + protected final RenderTickCounter wrapped; - public WrappedTimer(Timer wrapped) { + public WrappedTimer(RenderTickCounter wrapped) { //#if MC>=11300 super(0, 0); //#else @@ -19,13 +19,13 @@ public class WrappedTimer extends Timer { } @Override - public void updateTimer( + public void beginRenderTick( //#if MC>=11300 long sysClock //#endif ) { copy(this, wrapped); - wrapped.updateTimer( + wrapped.beginRenderTick( //#if MC>=11300 sysClock //#endif @@ -33,14 +33,14 @@ public class WrappedTimer extends Timer { copy(wrapped, this); } - protected void copy(Timer from, Timer to) { + protected void copy(RenderTickCounter from, RenderTickCounter to) { TimerAccessor fromA = (TimerAccessor) from; TimerAccessor toA = (TimerAccessor) to; - to.elapsedTicks = from.elapsedTicks; - to.renderPartialTicks = from.renderPartialTicks; + to.ticksThisFrame = from.ticksThisFrame; + to.tickDelta = from.tickDelta; toA.setLastSyncSysClock(fromA.getLastSyncSysClock()); - to.elapsedPartialTicks = from.elapsedPartialTicks; + to.lastFrameDuration = from.lastFrameDuration; //#if MC>=11200 toA.setTickLength(fromA.getTickLength()); //#else diff --git a/src/main/java/com/replaymod/core/versions/LangResourcePack.java b/src/main/java/com/replaymod/core/versions/LangResourcePack.java index d678d358..02beb9a1 100644 --- a/src/main/java/com/replaymod/core/versions/LangResourcePack.java +++ b/src/main/java/com/replaymod/core/versions/LangResourcePack.java @@ -3,10 +3,10 @@ package com.replaymod.core.versions; import com.google.gson.Gson; import com.replaymod.core.ReplayMod; -import net.minecraft.resources.AbstractResourcePack; -import net.minecraft.resources.ResourcePackFileNotFoundException; -import net.minecraft.resources.ResourcePackType; -import net.minecraft.util.ResourceLocation; +import net.minecraft.resource.AbstractFilenameResourcePack; +import net.minecraft.resource.ResourceNotFoundException; +import net.minecraft.resource.ResourceType; +import net.minecraft.util.Identifier; import org.apache.commons.io.IOUtils; import java.io.ByteArrayInputStream; @@ -28,40 +28,40 @@ import java.util.stream.Collectors; //#if MC>=11400 //#else -import net.minecraft.resources.IPackFinder; -import net.minecraft.resources.ResourcePackInfo; -import net.minecraftforge.fml.loading.moddiscovery.ModFile; -import net.minecraftforge.fml.packs.ModFileResourcePack; -import net.minecraftforge.fml.packs.ResourcePackLoader; +//$$ import net.minecraft.resources.IPackFinder; +//$$ import net.minecraft.resources.ResourcePackInfo; +//$$ import net.minecraftforge.fml.loading.moddiscovery.ModFile; +//$$ import net.minecraftforge.fml.packs.ModFileResourcePack; +//$$ import net.minecraftforge.fml.packs.ResourcePackLoader; //#endif /** * Resource pack which on-the-fly converts pre-1.13 language files into 1.13 json format. * Also remaps `replaymod.input.*` bindings to `key.replaymod.*` as convention on Fabric. */ -public class LangResourcePack extends AbstractResourcePack { +public class LangResourcePack extends AbstractFilenameResourcePack { private static final Gson GSON = new Gson(); private static final String NAME = "replaymod_lang"; private static final Pattern JSON_FILE_PATTERN = Pattern.compile("^assets/" + ReplayMod.MOD_ID + "/lang/([a-z][a-z])_([a-z][a-z]).json$"); private static final Pattern LANG_FILE_NAME_PATTERN = Pattern.compile("^([a-z][a-z])_([a-z][a-z]).lang$"); //#if MC>=11400 - //$$ public static final String LEGACY_KEY_PREFIX = "replaymod.input."; - //$$ private static final String FABRIC_KEY_FORMAT = "key." + ReplayMod.MOD_ID + ".%s"; - //$$ - //$$ private final Path basePath; - //$$ public LangResourcePack(Path basePath) { - //$$ super(new File(NAME)); - //$$ this.basePath = basePath; - //$$ } - //#else - public LangResourcePack() { - super(new File(NAME)); - } + public static final String LEGACY_KEY_PREFIX = "replaymod.input."; + private static final String FABRIC_KEY_FORMAT = "key." + ReplayMod.MOD_ID + ".%s"; - private ModFileResourcePack getParent() { - return ResourcePackLoader.getResourcePackFor(ReplayMod.MOD_ID).orElseThrow(() -> new RuntimeException("Failed to get ReplayMod resource pack!")); + private final Path basePath; + public LangResourcePack(Path basePath) { + super(new File(NAME)); + this.basePath = basePath; } + //#else + //$$ public LangResourcePack() { + //$$ super(new File(NAME)); + //$$ } + //$$ + //$$ private ModFileResourcePack getParent() { + //$$ return ResourcePackLoader.getResourcePackFor(ReplayMod.MOD_ID).orElseThrow(() -> new RuntimeException("Failed to get ReplayMod resource pack!")); + //$$ } //#endif private String langName(String path) { @@ -71,16 +71,16 @@ public class LangResourcePack extends AbstractResourcePack { } //#if MC>=11400 - //$$ private Path baseLangPath() { - //$$ return basePath.resolve("assets").resolve(ReplayMod.MOD_ID).resolve("lang"); - //$$ } - //#else private Path baseLangPath() { - ModFileResourcePack parent = getParent(); - if (parent == null) return null; - ModFile modFile = parent.getModFile(); - return modFile.getLocator().findPath(modFile, "assets", ReplayMod.MOD_ID, "lang"); + return basePath.resolve("assets").resolve(ReplayMod.MOD_ID).resolve("lang"); } + //#else + //$$ private Path baseLangPath() { + //$$ ModFileResourcePack parent = getParent(); + //$$ if (parent == null) return null; + //$$ ModFile modFile = parent.getModFile(); + //$$ return modFile.getLocator().findPath(modFile, "assets", ReplayMod.MOD_ID, "lang"); + //$$ } //#endif private Path langPath(String path) { @@ -88,7 +88,7 @@ public class LangResourcePack extends AbstractResourcePack { if (langName == null) return null; Path basePath = baseLangPath(); //#if MC<11400 - if (basePath == null) return null; + //$$ if (basePath == null) return null; //#endif return basePath.resolve(langName); } @@ -98,13 +98,13 @@ public class LangResourcePack extends AbstractResourcePack { } @Override - protected InputStream getInputStream(String path) throws IOException { + protected InputStream openFilename(String path) throws IOException { if ("pack.mcmeta".equals(path)) { return new ByteArrayInputStream("{\"pack\": {\"description\": \"ReplayMod language files\", \"pack_format\": 4}}".getBytes(StandardCharsets.UTF_8)); } Path langPath = langPath(path); - if (langPath == null) throw new ResourcePackFileNotFoundException(this.file, path); + if (langPath == null) throw new ResourceNotFoundException(this.base, path); String langFile; try (InputStream in = Files.newInputStream(langPath)) { @@ -119,9 +119,9 @@ public class LangResourcePack extends AbstractResourcePack { String value = line.substring(i + 1); value = convertValue(value); //#if MC>=11400 - //$$ if (key.startsWith(LEGACY_KEY_PREFIX)) { - //$$ key = String.format(FABRIC_KEY_FORMAT, key.substring(LEGACY_KEY_PREFIX.length())); - //$$ } + if (key.startsWith(LEGACY_KEY_PREFIX)) { + key = String.format(FABRIC_KEY_FORMAT, key.substring(LEGACY_KEY_PREFIX.length())); + } //#endif properties.put(key, value); } @@ -130,18 +130,18 @@ public class LangResourcePack extends AbstractResourcePack { } @Override - protected boolean resourceExists(String path) { + protected boolean containsFilename(String path) { Path langPath = langPath(path); return langPath != null && Files.exists(langPath); } @Override - public Collection getAllResourceLocations(ResourcePackType resourcePackType, String path, int maxDepth, Predicate filter) { - if (resourcePackType == ResourcePackType.CLIENT_RESOURCES && "lang".equals(path)) { + public Collection findResources(ResourceType resourcePackType, String path, int maxDepth, Predicate filter) { + if (resourcePackType == ResourceType.ASSETS && "lang".equals(path)) { Path base = baseLangPath(); //#if MC<11400 - if (base == null) return Collections.emptyList(); + //$$ if (base == null) return Collections.emptyList(); //#endif try { return Files.walk(base, 1) @@ -152,7 +152,7 @@ public class LangResourcePack extends AbstractResourcePack { .filter(Matcher::matches) .map(matcher -> String.format("%s_%s.json", matcher.group(1), matcher.group(1))) .filter(filter::test) - .map(name -> new ResourceLocation(ReplayMod.MOD_ID, "lang/" + name)) + .map(name -> new Identifier(ReplayMod.MOD_ID, "lang/" + name)) .collect(Collectors.toList()); } catch (IOException e) { e.printStackTrace(); @@ -164,8 +164,8 @@ public class LangResourcePack extends AbstractResourcePack { } @Override - public Set getResourceNamespaces(ResourcePackType resourcePackType) { - if (resourcePackType == ResourcePackType.CLIENT_RESOURCES) { + public Set getNamespaces(ResourceType resourcePackType) { + if (resourcePackType == ResourceType.ASSETS) { return Collections.singleton("replaymod"); } else { return Collections.emptySet(); @@ -177,12 +177,12 @@ public class LangResourcePack extends AbstractResourcePack { // Not needed on fabric, using MixinModResourcePackUtil instead. //#if MC<11400 - public static class Finder implements IPackFinder { - @Override - public void addPackInfosToMap(Map packList, ResourcePackInfo.IFactory factory) { - packList.put(NAME, ResourcePackInfo.func_195793_a(NAME, true, LangResourcePack::new, factory, ResourcePackInfo.Priority.BOTTOM)); - } - } + //$$ public static class Finder implements IPackFinder { + //$$ @Override + //$$ public void addPackInfosToMap(Map packList, ResourcePackInfo.IFactory factory) { + //$$ packList.put(NAME, ResourcePackInfo.func_195793_a(NAME, true, LangResourcePack::new, factory, ResourcePackInfo.Priority.BOTTOM)); + //$$ } + //$$ } //#endif } //#endif diff --git a/src/main/java/com/replaymod/core/versions/MCVer.java b/src/main/java/com/replaymod/core/versions/MCVer.java index db61a2c6..44de2a84 100644 --- a/src/main/java/com/replaymod/core/versions/MCVer.java +++ b/src/main/java/com/replaymod/core/versions/MCVer.java @@ -2,44 +2,44 @@ package com.replaymod.core.versions; import com.replaymod.core.mixin.GuiScreenAccessor; import com.replaymod.core.mixin.MinecraftAccessor; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiButton; -import net.minecraft.client.gui.GuiScreen; -import net.minecraft.client.multiplayer.WorldClient; -import net.minecraft.client.renderer.Tessellator; -import net.minecraft.client.renderer.entity.RenderManager; -import net.minecraft.client.renderer.entity.model.ModelBox; -import net.minecraft.client.renderer.entity.model.ModelRenderer; -import net.minecraft.client.renderer.texture.TextureMap; -import net.minecraft.crash.CrashReportCategory; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.widget.ButtonWidget; +import net.minecraft.client.gui.Screen; +import net.minecraft.client.world.ClientWorld; +import net.minecraft.client.render.Tessellator; +import net.minecraft.client.render.entity.EntityRenderDispatcher; +import net.minecraft.client.model.Box; +import net.minecraft.client.model.Cuboid; +import net.minecraft.client.texture.SpriteAtlasTexture; +import net.minecraft.util.crash.CrashReportSection; import net.minecraft.entity.Entity; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.network.PacketBuffer; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.Util; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.util.PacketByteBuf; +import net.minecraft.util.Identifier; +import net.minecraft.util.SystemUtil; import net.minecraft.util.math.MathHelper; import net.minecraft.world.World; -import net.minecraft.world.chunk.Chunk; +import net.minecraft.world.chunk.WorldChunk; //#if MC>=11400 -//$$ import com.replaymod.core.mixin.AbstractButtonWidgetAccessor; -//$$ import net.minecraft.client.gui.widget.AbstractButtonWidget; -//$$ import java.util.concurrent.CompletableFuture; +import com.replaymod.core.mixin.AbstractButtonWidgetAccessor; +import net.minecraft.client.gui.widget.AbstractButtonWidget; +import java.util.concurrent.CompletableFuture; //#else -import com.google.common.util.concurrent.FutureCallback; -import com.google.common.util.concurrent.Futures; -import com.google.common.util.concurrent.ListenableFuture; -import net.minecraft.entity.EntityLivingBase; -import net.minecraftforge.client.event.GuiScreenEvent; -import net.minecraftforge.client.event.RenderGameOverlayEvent; -import net.minecraftforge.client.event.RenderLivingEvent; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.eventbus.api.IEventBus; +//$$ import com.google.common.util.concurrent.FutureCallback; +//$$ import com.google.common.util.concurrent.Futures; +//$$ import com.google.common.util.concurrent.ListenableFuture; +//$$ import net.minecraft.entity.EntityLivingBase; +//$$ import net.minecraftforge.client.event.GuiScreenEvent; +//$$ import net.minecraftforge.client.event.RenderGameOverlayEvent; +//$$ import net.minecraftforge.client.event.RenderLivingEvent; +//$$ import net.minecraftforge.common.MinecraftForge; +//$$ import net.minecraftforge.eventbus.api.IEventBus; //#endif //#if MC>=11300 -import net.minecraft.client.MainWindow; -import net.minecraft.client.util.InputMappings; +import net.minecraft.client.util.Window; +import net.minecraft.client.util.InputUtil; import org.lwjgl.glfw.GLFW; //#else //$$ import net.minecraft.client.gui.ScaledResolution; @@ -58,17 +58,17 @@ import net.minecraft.util.math.Vec3d; //#endif //#if MC>=10809 -import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.client.render.VertexFormats; //#else //$$ import net.minecraftforge.fml.common.FMLCommonHandler; //#endif //#if MC>=10800 -import net.minecraft.client.renderer.BufferBuilder; -import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.client.renderer.vertex.VertexFormat; -import net.minecraft.client.renderer.vertex.VertexFormatElement; -import net.minecraft.world.WorldType; +import net.minecraft.client.render.BufferBuilder; +import com.mojang.blaze3d.platform.GlStateManager; +import net.minecraft.client.render.VertexFormat; +import net.minecraft.client.render.VertexFormatElement; +import net.minecraft.world.level.LevelGeneratorType; //#else //$$ import com.replaymod.core.mixin.ResourcePackRepositoryAccessor; //$$ import com.google.common.util.concurrent.Futures; @@ -79,10 +79,10 @@ import net.minecraft.world.WorldType; //#endif //#if MC>=11400 -//$$ import net.fabricmc.loader.api.FabricLoader; +import net.fabricmc.loader.api.FabricLoader; //#else //#if MC>=11300 -import net.minecraftforge.fml.ModList; +//$$ import net.minecraftforge.fml.ModList; //#else //$$ import net.minecraftforge.fml.common.Loader; //#endif @@ -99,9 +99,9 @@ import java.util.function.Consumer; */ public class MCVer { //#if MC<11400 - public static IEventBus FORGE_BUS = MinecraftForge.EVENT_BUS; + //$$ public static IEventBus FORGE_BUS = MinecraftForge.EVENT_BUS; //#if MC>=10809 - public static IEventBus FML_BUS = FORGE_BUS; + //$$ public static IEventBus FML_BUS = FORGE_BUS; //#else //$$ public static EventBus FML_BUS = FMLCommonHandler.instance().bus(); //#endif @@ -109,20 +109,20 @@ public class MCVer { public static boolean isModLoaded(String id) { //#if MC>=11400 - //$$ return FabricLoader.getInstance().isModLoaded(id.toLowerCase()); + return FabricLoader.getInstance().isModLoaded(id.toLowerCase()); //#else //#if MC>=11300 - return ModList.get().isLoaded(id.toLowerCase()); + //$$ return ModList.get().isLoaded(id.toLowerCase()); //#else //$$ return Loader.isModLoaded(id); //#endif //#endif } - public static void addDetail(CrashReportCategory category, String name, Callable callable) { + public static void addDetail(CrashReportSection category, String name, Callable callable) { //#if MC>=10904 //#if MC>=11200 - category.addDetail(name, callable::call); + category.add(name, callable::call); //#else //$$ category.setDetail(name, callable::call); //#endif @@ -132,83 +132,83 @@ public class MCVer { } //#if MC>=11400 - //$$ public static void width(AbstractButtonWidget button, int value) { - //$$ button.setWidth(value); - //$$ } - //$$ - //$$ public static int width(AbstractButtonWidget button) { - //$$ return button.getWidth(); - //$$ } - //$$ - //$$ public static int height(AbstractButtonWidget button) { - //$$ return ((AbstractButtonWidgetAccessor) button).getHeight(); - //$$ } + public static void width(AbstractButtonWidget button, int value) { + button.setWidth(value); + } + + public static int width(AbstractButtonWidget button) { + return button.getWidth(); + } + + public static int height(AbstractButtonWidget button) { + return ((AbstractButtonWidgetAccessor) button).getHeight(); + } //#else - public static void width(GuiButton button, int value) { - button.width = value; - } - - public static int width(GuiButton button) { - return button.width; - } - - public static int height(GuiButton button) { - return button.height; - } + //$$ public static void width(GuiButton button, int value) { + //$$ button.width = value; + //$$ } + //$$ + //$$ public static int width(GuiButton button) { + //$$ return button.width; + //$$ } + //$$ + //$$ public static int height(GuiButton button) { + //$$ return button.height; + //$$ } //#endif //#if MC<11400 - public static void addButton(GuiScreenEvent.InitGuiEvent event, GuiButton button) { + //$$ public static void addButton(GuiScreenEvent.InitGuiEvent event, GuiButton button) { //#if MC>=11300 - event.addButton(button); + //$$ event.addButton(button); //#else //$$ getButtonList(event).add(button); //#endif - } - - public static void removeButton(GuiScreenEvent.InitGuiEvent event, GuiButton button) { + //$$ } + //$$ + //$$ public static void removeButton(GuiScreenEvent.InitGuiEvent event, GuiButton button) { //#if MC>=11300 - event.removeButton(button); + //$$ event.removeButton(button); //#else //$$ getButtonList(event).remove(button); //#endif - } - - @SuppressWarnings("unchecked") - public static List getButtonList(GuiScreenEvent.InitGuiEvent event) { + //$$ } + //$$ + //$$ @SuppressWarnings("unchecked") + //$$ public static List getButtonList(GuiScreenEvent.InitGuiEvent event) { //#if MC>=10904 - return event.getButtonList(); + //$$ return event.getButtonList(); //#else //$$ return event.buttonList; //#endif - } - - public static GuiButton getButton(GuiScreenEvent.ActionPerformedEvent event) { + //$$ } + //$$ + //$$ public static GuiButton getButton(GuiScreenEvent.ActionPerformedEvent event) { //#if MC>=10904 - return event.getButton(); + //$$ return event.getButton(); //#else //$$ return event.button; //#endif - } - - public static GuiScreen getGui(GuiScreenEvent event) { + //$$ } + //$$ + //$$ public static GuiScreen getGui(GuiScreenEvent event) { //#if MC>=10904 - return event.getGui(); + //$$ return event.getGui(); //#else //$$ return event.gui; //#endif - } - - public static EntityLivingBase getEntity(RenderLivingEvent event) { + //$$ } + //$$ + //$$ public static EntityLivingBase getEntity(RenderLivingEvent event) { //#if MC>=10904 - return event.getEntity(); + //$$ return event.getEntity(); //#else //$$ return event.entity; //#endif - } + //$$ } //#endif - public static String readString(PacketBuffer buffer, int max) { + public static String readString(PacketByteBuf buffer, int max) { //#if MC>=11102 return buffer.readString(max); //#else @@ -225,27 +225,27 @@ public class MCVer { } //#if MC<11400 - public static RenderGameOverlayEvent.ElementType getType(RenderGameOverlayEvent event) { + //$$ public static RenderGameOverlayEvent.ElementType getType(RenderGameOverlayEvent event) { //#if MC>=10904 - return event.getType(); + //$$ return event.getType(); //#else //$$ return event.type; //#endif - } + //$$ } //#endif //#if MC>=10800 - public static WorldType WorldType_DEBUG_ALL_BLOCK_STATES + public static LevelGeneratorType WorldType_DEBUG_ALL_BLOCK_STATES //#if MC>=11200 - = WorldType.DEBUG_ALL_BLOCK_STATES; + = LevelGeneratorType.DEBUG_ALL_BLOCK_STATES; //#else //$$ = WorldType.DEBUG_WORLD; //#endif //#endif //#if MC>=10800 - public static Entity getRenderViewEntity(Minecraft mc) { - return mc.getRenderViewEntity(); + public static Entity getRenderViewEntity(MinecraftClient mc) { + return mc.getCameraEntity(); } //#else //$$ public static EntityLivingBase getRenderViewEntity(Minecraft mc) { @@ -254,8 +254,8 @@ public class MCVer { //#endif //#if MC>=10800 - public static void setRenderViewEntity(Minecraft mc, Entity entity) { - mc.setRenderViewEntity(entity); + public static void setRenderViewEntity(MinecraftClient mc, Entity entity) { + mc.setCameraEntity(entity); } //#else //$$ public static void setRenderViewEntity(Minecraft mc, EntityLivingBase entity) { @@ -263,63 +263,63 @@ public class MCVer { //$$ } //#endif - public static ResourceLocation LOCATION_BLOCKS_TEXTURE + public static Identifier LOCATION_BLOCKS_TEXTURE //#if MC>=10904 - = TextureMap.LOCATION_BLOCKS_TEXTURE; + = SpriteAtlasTexture.BLOCK_ATLAS_TEX; //#else //$$ = TextureMap.locationBlocksTexture; //#endif public static Entity getRiddenEntity(Entity ridden) { //#if MC>=10904 - return ridden.getRidingEntity(); + return ridden.getVehicle(); //#else //$$ return ridden.ridingEntity; //#endif } - public static Iterable loadedEntityList(WorldClient world) { + public static Iterable loadedEntityList(ClientWorld world) { //#if MC>=11400 - //$$ return world.getEntities(); + return world.getEntities(); //#else - return world.loadedEntityList; + //$$ return world.loadedEntityList; //#endif } @SuppressWarnings("unchecked") - public static Collection[] getEntityLists(Chunk chunk) { + public static Collection[] getEntityLists(WorldChunk chunk) { //#if MC>=10800 - return chunk.getEntityLists(); + return chunk.getEntitySectionArray(); //#else //$$ return chunk.entityLists; //#endif } @SuppressWarnings("unchecked") - public static List cubeList(ModelRenderer modelRenderer) { - return modelRenderer.cubeList; + public static List cubeList(Cuboid modelRenderer) { + return modelRenderer.boxes; } @SuppressWarnings("unchecked") - public static List playerEntities(World world) { + public static List playerEntities(World world) { //#if MC>=11400 - //$$ return (List) world.getPlayers(); + return (List) world.getPlayers(); //#else - return world.playerEntities; + //$$ return world.playerEntities; //#endif } public static boolean isOnMainThread() { //#if MC>=11400 - //$$ return getMinecraft().isOnThread(); + return getMinecraft().isOnThread(); //#else - return getMinecraft().isCallingFromMinecraftThread(); + //$$ return getMinecraft().isCallingFromMinecraftThread(); //#endif } //#if MC>=11300 - public static MainWindow newScaledResolution(Minecraft mc) { - return mc.mainWindow; + public static Window newScaledResolution(MinecraftClient mc) { + return mc.window; } //#else //$$ public static ScaledResolution newScaledResolution(Minecraft mc) { @@ -333,13 +333,13 @@ public class MCVer { public static //#if MC>=11400 - //$$ CompletableFuture + CompletableFuture //#else - ListenableFuture + //$$ ListenableFuture //#endif setServerResourcePack(File file) { //#if MC>=11300 - return getMinecraft().getPackFinder().func_195741_a(file); + return getMinecraft().getResourcePackDownloader().loadServerPack(file); //#else //$$ ResourcePackRepository repo = getMinecraft().getResourcePackRepository(); //#if MC>=10809 @@ -364,36 +364,36 @@ public class MCVer { public static void addCallback( //#if MC>=11400 - //$$ CompletableFuture future, + CompletableFuture future, //#else - ListenableFuture future, + //$$ ListenableFuture future, //#endif Consumer success, Consumer failure ) { //#if MC>=11400 - //$$ future.thenAccept(success).exceptionally(throwable -> { - //$$ failure.accept(throwable); - //$$ return null; - //$$ }); - //#else - Futures.addCallback(future, new FutureCallback() { - @Override - public void onSuccess(T result) { - success.accept(result); - } - - @Override - public void onFailure(Throwable throwable) { - failure.accept(throwable); - } + future.thenAccept(success).exceptionally(throwable -> { + failure.accept(throwable); + return null; }); + //#else + //$$ Futures.addCallback(future, new FutureCallback() { + //$$ @Override + //$$ public void onSuccess(T result) { + //$$ success.accept(result); + //$$ } + //$$ + //$$ @Override + //$$ public void onFailure(Throwable throwable) { + //$$ failure.accept(throwable); + //$$ } + //$$ }); //#endif } public static void BufferBuilder_setTranslation(double x, double y, double z) { //#if MC>=10800 - Tessellator.getInstance().getBuffer().setTranslation(x, y, z); + Tessellator.getInstance().getBufferBuilder().setOffset(x, y, z); //#else //$$ Tessellator.instance.setTranslation(x, y, z); //#endif @@ -401,9 +401,9 @@ public class MCVer { public static void BufferBuilder_beginPosCol(int mode) { //#if MC>=10800 - BufferBuilder bufferBuilder = Tessellator.getInstance().getBuffer(); + BufferBuilder bufferBuilder = Tessellator.getInstance().getBufferBuilder(); //#if MC>=10809 - bufferBuilder.begin(mode, DefaultVertexFormats.POSITION_COLOR); + bufferBuilder.begin(mode, VertexFormats.POSITION_COLOR); //#else //$$ bufferBuilder.startDrawing(mode); //#endif @@ -414,12 +414,12 @@ public class MCVer { public static void BufferBuilder_addPosCol(double x, double y, double z, int r, int g, int b, int a) { //#if MC>=10800 - BufferBuilder worldRenderer = Tessellator.getInstance().getBuffer(); + BufferBuilder worldRenderer = Tessellator.getInstance().getBufferBuilder(); //#else //$$ Tessellator worldRenderer = Tessellator.instance; //#endif //#if MC>=10809 - worldRenderer.pos(x, y, z).color(r, g, b, a).endVertex(); + worldRenderer.vertex(x, y, z).color(r, g, b, a).next(); //#else //$$ worldRenderer.setColorRGBA(r, g, b, a); //$$ worldRenderer.addVertex(x, y, z); @@ -428,9 +428,9 @@ public class MCVer { public static void BufferBuilder_beginPosTex(int mode) { //#if MC>=10800 - BufferBuilder bufferBuilder = Tessellator.getInstance().getBuffer(); + BufferBuilder bufferBuilder = Tessellator.getInstance().getBufferBuilder(); //#if MC>=10809 - bufferBuilder.begin(mode, DefaultVertexFormats.POSITION_TEX); + bufferBuilder.begin(mode, VertexFormats.POSITION_UV); //#else //$$ bufferBuilder.startDrawing(mode); //#endif @@ -441,12 +441,12 @@ public class MCVer { public static void BufferBuilder_addPosTex(double x, double y, double z, double u, double v) { //#if MC>=10800 - BufferBuilder worldRenderer = Tessellator.getInstance().getBuffer(); + BufferBuilder worldRenderer = Tessellator.getInstance().getBufferBuilder(); //#else //$$ Tessellator worldRenderer = Tessellator.instance; //#endif //#if MC>=10809 - worldRenderer.pos(x, y, z).tex(u, v).endVertex(); + worldRenderer.vertex(x, y, z).texture(u, v).next(); //#else //$$ worldRenderer.addVertexWithUV(x, y, z, u, v); //#endif @@ -454,9 +454,9 @@ public class MCVer { public static void BufferBuilder_beginPosTexCol(int mode) { //#if MC>=10800 - BufferBuilder bufferBuilder = Tessellator.getInstance().getBuffer(); + BufferBuilder bufferBuilder = Tessellator.getInstance().getBufferBuilder(); //#if MC>=10809 - bufferBuilder.begin(mode, DefaultVertexFormats.POSITION_TEX_COLOR); + bufferBuilder.begin(mode, VertexFormats.POSITION_UV_COLOR); //#else //$$ bufferBuilder.startDrawing(mode); //#endif @@ -467,12 +467,12 @@ public class MCVer { public static void BufferBuilder_addPosTexCol(double x, double y, double z, double u, double v, int r, int g, int b, int a) { //#if MC>=10800 - BufferBuilder worldRenderer = Tessellator.getInstance().getBuffer(); + BufferBuilder worldRenderer = Tessellator.getInstance().getBufferBuilder(); //#else //$$ Tessellator worldRenderer = Tessellator.instance; //#endif //#if MC>=10809 - worldRenderer.pos(x, y, z).tex(u, v).color(r, g, b, a).endVertex(); + worldRenderer.vertex(x, y, z).texture(u, v).color(r, g, b, a).next(); //#else //$$ worldRenderer.setColorRGBA(r, g, b, a); //$$ worldRenderer.addVertexWithUV(x, y, z, u, v); @@ -494,23 +494,23 @@ public class MCVer { //#endif } - public static RenderManager getRenderManager() { + public static EntityRenderDispatcher getRenderManager() { //#if MC>=10800 - return getMinecraft().getRenderManager(); + return getMinecraft().getEntityRenderManager(); //#else //$$ return RenderManager.instance; //#endif } - public static Minecraft getMinecraft() { - return Minecraft.getInstance(); + public static MinecraftClient getMinecraft() { + return MinecraftClient.getInstance(); } public static float getRenderPartialTicks() { - return ((MinecraftAccessor) getMinecraft()).getTimer().renderPartialTicks; + return ((MinecraftAccessor) getMinecraft()).getTimer().tickDelta; } - public static void addButton(GuiScreen screen, GuiButton button) { + public static void addButton(Screen screen, ButtonWidget button) { GuiScreenAccessor acc = (GuiScreenAccessor) screen; acc.getButtons().add(button); //#if MC>=11300 @@ -532,19 +532,19 @@ public class MCVer { //$$ void replayModRunTickKeyboard(); //#endif //#if MC>=11400 - //$$ void replayModExecuteTaskQueue(); + void replayModExecuteTaskQueue(); //#endif } public static long milliTime() { //#if MC>=11300 - return Util.milliTime(); + return SystemUtil.getMeasuringTimeMs(); //#else //$$ return Minecraft.getSystemTime(); //#endif } - public static void bindTexture(ResourceLocation texture) { + public static void bindTexture(Identifier texture) { //#if MC>=11300 getMinecraft().getTextureManager().bindTexture(texture); //#else @@ -573,7 +573,7 @@ public class MCVer { public static void openFile(File file) { //#if MC>=11300 - Util.getOSType().openFile(file); + SystemUtil.getOperatingSystem().open(file); //#else //$$ String path = file.getAbsolutePath(); //$$ @@ -688,9 +688,9 @@ public class MCVer { public static boolean isKeyDown(int keyCode) { //#if MC>=11400 - //$$ return InputUtil.isKeyPressed(getMinecraft().window.getHandle(), keyCode); + return InputUtil.isKeyPressed(getMinecraft().window.getHandle(), keyCode); //#else - return InputMappings.isKeyDown(keyCode); + //$$ return InputMappings.isKeyDown(keyCode); //#endif } } diff --git a/src/main/java/com/replaymod/editor/gui/GuiEditReplay.java b/src/main/java/com/replaymod/editor/gui/GuiEditReplay.java index 9045f32c..245c5785 100644 --- a/src/main/java/com/replaymod/editor/gui/GuiEditReplay.java +++ b/src/main/java/com/replaymod/editor/gui/GuiEditReplay.java @@ -22,7 +22,7 @@ import de.johni0702.minecraft.gui.layout.VerticalLayout; import de.johni0702.minecraft.gui.popup.AbstractGuiPopup; import de.johni0702.minecraft.gui.utils.lwjgl.Color; import de.johni0702.minecraft.gui.utils.lwjgl.ReadableDimension; -import net.minecraft.crash.CrashReport; +import net.minecraft.util.crash.CrashReport; import java.io.IOException; import java.nio.file.Path; @@ -153,13 +153,13 @@ public class GuiEditReplay extends AbstractGuiPopup { replayFile.writeMarkers(markers); replayFile.save(); } catch (IOException e) { - Utils.error(ReplayModEditor.LOGGER, this, CrashReport.makeCrashReport(e, "Writing markers"), this::close); + Utils.error(ReplayModEditor.LOGGER, this, CrashReport.create(e, "Writing markers"), this::close); } try { MarkerProcessor.apply(inputPath, progressPopup.progressBar::setProgress); } catch (IOException e) { - Utils.error(ReplayModEditor.LOGGER, this, CrashReport.makeCrashReport(e, "Running marker processor"), this::close); + Utils.error(ReplayModEditor.LOGGER, this, CrashReport.create(e, "Running marker processor"), this::close); } ReplayMod.instance.runLater(() -> { diff --git a/src/main/java/com/replaymod/editor/gui/GuiReplayEditor.java b/src/main/java/com/replaymod/editor/gui/GuiReplayEditor.java index d9d5c7ae..41c30b9d 100644 --- a/src/main/java/com/replaymod/editor/gui/GuiReplayEditor.java +++ b/src/main/java/com/replaymod/editor/gui/GuiReplayEditor.java @@ -35,7 +35,7 @@ import de.johni0702.minecraft.gui.popup.GuiInfoPopup; import de.johni0702.minecraft.gui.popup.GuiYesNoPopup; import de.johni0702.minecraft.gui.utils.Colors; import de.johni0702.minecraft.gui.utils.lwjgl.ReadableDimension; -import net.minecraft.crash.CrashReport; +import net.minecraft.util.crash.CrashReport; import org.apache.commons.io.FileUtils; import org.apache.commons.lang3.tuple.Pair; @@ -221,7 +221,7 @@ public class GuiReplayEditor extends GuiScreen { try { replayFolder = mod.getReplayFolder(); } catch (IOException e) { - Utils.error(LOGGER, GuiReplayEditor.this, CrashReport.makeCrashReport(e, "Getting replay folder"), null); + Utils.error(LOGGER, GuiReplayEditor.this, CrashReport.create(e, "Getting replay folder"), null); return; } File targetFile = new File(replayFolder, Utils.replayNameToFileName(name)); @@ -275,7 +275,7 @@ public class GuiReplayEditor extends GuiScreen { try { runnable.run(); } catch (Throwable t) { - CrashReport crashReport = CrashReport.makeCrashReport(t, "Editing replay file"); + CrashReport crashReport = CrashReport.create(t, "Editing replay file"); mod.runLater(() -> Utils.error(LOGGER, this, crashReport, popup::close)); return; } diff --git a/src/main/java/com/replaymod/editor/gui/GuiTrimPanel.java b/src/main/java/com/replaymod/editor/gui/GuiTrimPanel.java index 975124ab..778e7006 100644 --- a/src/main/java/com/replaymod/editor/gui/GuiTrimPanel.java +++ b/src/main/java/com/replaymod/editor/gui/GuiTrimPanel.java @@ -23,8 +23,8 @@ import de.johni0702.minecraft.gui.layout.GridLayout; import de.johni0702.minecraft.gui.layout.HorizontalLayout; import de.johni0702.minecraft.gui.layout.VerticalLayout; import de.johni0702.minecraft.gui.utils.lwjgl.Dimension; -import net.minecraft.client.resources.I18n; -import net.minecraft.crash.CrashReport; +import net.minecraft.client.resource.language.I18n; +import net.minecraft.util.crash.CrashReport; import org.apache.commons.lang3.tuple.Pair; import javax.annotation.Nullable; @@ -96,9 +96,9 @@ public class GuiTrimPanel extends GuiPanel { Function toString = m -> { if (m == NO_MARKER) { - return I18n.format("replaymod.gui.editor.trim.marker"); + return I18n.translate("replaymod.gui.editor.trim.marker"); } else { - return ofNullable(m.getName()).orElse(I18n.format("replaymod.gui.ingame.unnamedmarker")) + return ofNullable(m.getName()).orElse(I18n.translate("replaymod.gui.ingame.unnamedmarker")) + " (" + Utils.convertSecondsToShortString(m.getTime() / 1000) + ")"; } }; @@ -112,7 +112,7 @@ public class GuiTrimPanel extends GuiPanel { try { folder = gui.getMod().getReplayFolder(); } catch (IOException e) { - Utils.error(LOGGER, gui, CrashReport.makeCrashReport(e, "Getting replay folder"), gui.backButton::onClick); + Utils.error(LOGGER, gui, CrashReport.create(e, "Getting replay folder"), gui.backButton::onClick); return; } GuiReplayViewer.GuiSelectReplayPopup popup = GuiReplayViewer.GuiSelectReplayPopup.openGui(gui, folder); @@ -128,7 +128,7 @@ public class GuiTrimPanel extends GuiPanel { @Override public void onFailure(Throwable t) { - Utils.error(LOGGER, gui, CrashReport.makeCrashReport(t, "Selecting replay"), gui.backButton::onClick); + Utils.error(LOGGER, gui, CrashReport.create(t, "Selecting replay"), gui.backButton::onClick); } }); }); @@ -174,7 +174,7 @@ public class GuiTrimPanel extends GuiPanel { File file = inputReplay; // Update input button label - inputReplayButton.setLabel(file == NO_REPLAY ? I18n.format("gui.none") : Utils.fileNameToReplayName(file.getName())); + inputReplayButton.setLabel(file == NO_REPLAY ? I18n.translate("gui.none") : Utils.fileNameToReplayName(file.getName())); // Load markers and meta data from replay file ReplayMetaData metaData; @@ -188,7 +188,7 @@ public class GuiTrimPanel extends GuiPanel { markers = replayFile.getMarkers().or(Collections.emptySet()); LOGGER.debug("Loaded {} markers from replay {}", markers.size(), file); } catch (Exception e) { - Utils.error(LOGGER, gui, CrashReport.makeCrashReport(e, "Reading markers from replay"), null); + Utils.error(LOGGER, gui, CrashReport.create(e, "Reading markers from replay"), null); metaData = new ReplayMetaData(); markers = Collections.emptySet(); } diff --git a/src/main/java/com/replaymod/editor/handler/GuiHandler.java b/src/main/java/com/replaymod/editor/handler/GuiHandler.java index e58f758b..a33285c3 100644 --- a/src/main/java/com/replaymod/editor/handler/GuiHandler.java +++ b/src/main/java/com/replaymod/editor/handler/GuiHandler.java @@ -8,16 +8,16 @@ import com.replaymod.replay.gui.screen.GuiReplayViewer; import de.johni0702.minecraft.gui.container.AbstractGuiScreen; import de.johni0702.minecraft.gui.container.GuiScreen; import de.johni0702.minecraft.gui.element.GuiButton; -import net.minecraft.crash.CrashReport; +import net.minecraft.util.crash.CrashReport; //#if MC>=11400 -//$$ import de.johni0702.minecraft.gui.versions.callbacks.InitScreenCallback; -//$$ import net.minecraft.client.gui.Screen; -//$$ import net.minecraft.client.gui.widget.AbstractButtonWidget; -//$$ import java.util.List; +import de.johni0702.minecraft.gui.versions.callbacks.InitScreenCallback; +import net.minecraft.client.gui.Screen; +import net.minecraft.client.gui.widget.AbstractButtonWidget; +import java.util.List; //#else -import net.minecraftforge.client.event.GuiScreenEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; +//$$ import net.minecraftforge.client.event.GuiScreenEvent; +//$$ import net.minecraftforge.eventbus.api.SubscribeEvent; //#endif import java.io.IOException; @@ -26,12 +26,12 @@ import static com.replaymod.core.versions.MCVer.*; public class GuiHandler extends EventRegistrations { //#if MC>=11400 - //$$ { on(InitScreenCallback.EVENT, this::injectIntoReplayViewer); } - //$$ public void injectIntoReplayViewer(Screen vanillaGuiScreen, List buttonList) { + { on(InitScreenCallback.EVENT, this::injectIntoReplayViewer); } + public void injectIntoReplayViewer(Screen vanillaGuiScreen, List buttonList) { //#else - @SubscribeEvent - public void injectIntoReplayViewer(GuiScreenEvent.InitGuiEvent.Post event) { - net.minecraft.client.gui.GuiScreen vanillaGuiScreen = getGui(event); + //$$ @SubscribeEvent + //$$ public void injectIntoReplayViewer(GuiScreenEvent.InitGuiEvent.Post event) { + //$$ net.minecraft.client.gui.GuiScreen vanillaGuiScreen = getGui(event); //#endif AbstractGuiScreen guiScreen = GuiScreen.from(vanillaGuiScreen); if (!(guiScreen instanceof GuiReplayViewer)) { @@ -50,7 +50,7 @@ public class GuiHandler extends EventRegistrations { } }.open(); } catch (IOException e) { - Utils.error(ReplayModEditor.LOGGER, replayViewer, CrashReport.makeCrashReport(e, "Opening replay editor"), () -> {}); + Utils.error(ReplayModEditor.LOGGER, replayViewer, CrashReport.create(e, "Opening replay editor"), () -> {}); } }).setSize(73, 20).setI18nLabel("replaymod.gui.edit").setDisabled()); } diff --git a/src/main/java/com/replaymod/extras/FullBrightness.java b/src/main/java/com/replaymod/extras/FullBrightness.java index db7920b7..351c5fbc 100644 --- a/src/main/java/com/replaymod/extras/FullBrightness.java +++ b/src/main/java/com/replaymod/extras/FullBrightness.java @@ -10,14 +10,14 @@ import de.johni0702.minecraft.gui.element.GuiImage; import de.johni0702.minecraft.gui.element.IGuiImage; import de.johni0702.minecraft.gui.layout.HorizontalLayout; import de.johni0702.minecraft.gui.utils.EventRegistrations; -import net.minecraft.client.GameSettings; +import net.minecraft.client.options.GameOptions; //#if MC>=11400 -//$$ import com.replaymod.core.events.PreRenderCallback; -//$$ import com.replaymod.core.events.PostRenderCallback; +import com.replaymod.core.events.PreRenderCallback; +import com.replaymod.core.events.PostRenderCallback; //#else -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.common.gameevent.TickEvent; +//$$ import net.minecraftforge.eventbus.api.SubscribeEvent; +//$$ import net.minecraftforge.fml.common.gameevent.TickEvent; //#endif public class FullBrightness extends EventRegistrations implements Extra { @@ -25,7 +25,7 @@ public class FullBrightness extends EventRegistrations implements Extra { private final IGuiImage indicator = new GuiImage().setTexture(ReplayMod.TEXTURE, 90, 20, 19, 13).setSize(19, 13); - private GameSettings gameSettings; + private GameOptions gameSettings; private boolean active; //#if MC>=11300 private double originalGamma; @@ -36,7 +36,7 @@ public class FullBrightness extends EventRegistrations implements Extra { @Override public void register(final ReplayMod mod) throws Exception { this.module = ReplayModReplay.instance; - this.gameSettings = mod.getMinecraft().gameSettings; + this.gameSettings = mod.getMinecraft().options; mod.getKeyBindingRegistry().registerKeyBinding("replaymod.input.lighting", Keyboard.KEY_Z, new Runnable() { @Override @@ -44,7 +44,7 @@ public class FullBrightness extends EventRegistrations implements Extra { active = !active; // need to tick once to update lightmap when replay is paused //#if MC>=11300 - mod.getMinecraft().entityRenderer.tick(); + mod.getMinecraft().gameRenderer.tick(); //#else //$$ mod.getMinecraft().entityRenderer.updateRenderer(); //#endif @@ -59,29 +59,29 @@ public class FullBrightness extends EventRegistrations implements Extra { } //#if MC>=11400 - //$$ { on(PreRenderCallback.EVENT, this::preRender); } - //$$ private void preRender() { + { on(PreRenderCallback.EVENT, this::preRender); } + private void preRender() { //#else - @SubscribeEvent - public void preRender(TickEvent.RenderTickEvent event) { - if (event.phase != TickEvent.Phase.START) return; + //$$ @SubscribeEvent + //$$ public void preRender(TickEvent.RenderTickEvent event) { + //$$ if (event.phase != TickEvent.Phase.START) return; //#endif if (active && module.getReplayHandler() != null) { - originalGamma = gameSettings.gammaSetting; - gameSettings.gammaSetting = 1000; + originalGamma = gameSettings.gamma; + gameSettings.gamma = 1000; } } //#if MC>=11400 - //$$ { on(PostRenderCallback.EVENT, this::postRender); } - //$$ private void postRender() { + { on(PostRenderCallback.EVENT, this::postRender); } + private void postRender() { //#else - @SubscribeEvent - public void postRender(TickEvent.RenderTickEvent event) { - if (event.phase != TickEvent.Phase.END) return; + //$$ @SubscribeEvent + //$$ public void postRender(TickEvent.RenderTickEvent event) { + //$$ if (event.phase != TickEvent.Phase.END) return; //#endif if (active && module.getReplayHandler() != null) { - gameSettings.gammaSetting = originalGamma; + gameSettings.gamma = originalGamma; } } diff --git a/src/main/java/com/replaymod/extras/HotkeyButtons.java b/src/main/java/com/replaymod/extras/HotkeyButtons.java index 8e0137d8..49ec31b4 100644 --- a/src/main/java/com/replaymod/extras/HotkeyButtons.java +++ b/src/main/java/com/replaymod/extras/HotkeyButtons.java @@ -20,7 +20,7 @@ import de.johni0702.minecraft.gui.layout.LayoutData; import de.johni0702.minecraft.gui.utils.EventRegistrations; import de.johni0702.minecraft.gui.utils.lwjgl.Dimension; import de.johni0702.minecraft.gui.utils.lwjgl.ReadableDimension; -import net.minecraft.client.resources.I18n; +import net.minecraft.client.resource.language.I18n; //#if MC>=11300 //#else @@ -74,7 +74,7 @@ public class HotkeyButtons extends EventRegistrations implements Extra { final KeyBindingRegistry keyBindingRegistry = mod.getKeyBindingRegistry(); keyBindingRegistry.getKeyBindings().values().stream() - .sorted(Comparator.comparing(it -> I18n.format(it.getKeyDescription()))) + .sorted(Comparator.comparing(it -> I18n.translate(it.getId()))) .forEachOrdered(keyBinding -> { GuiButton button = new GuiButton(){ @Override @@ -83,7 +83,7 @@ public class HotkeyButtons extends EventRegistrations implements Extra { String keyName = "???"; try { //#if MC>=11300 - keyName = keyBinding.func_197978_k(); + keyName = keyBinding.getLocalizedName(); //#else //$$ keyName = Keyboard.getKeyName(keyBinding.getKeyCode()); //#endif @@ -111,7 +111,7 @@ public class HotkeyButtons extends EventRegistrations implements Extra { return new Dimension(Math.max(10, button.getMinSize().getWidth()) + 10, 20); } }).addElements(null, button), - new GuiLabel().setI18nText(keyBinding.getKeyDescription()) + new GuiLabel().setI18nText(keyBinding.getId()) )); }); diff --git a/src/main/java/com/replaymod/extras/OpenEyeExtra.java b/src/main/java/com/replaymod/extras/OpenEyeExtra.java index 08e6c601..49675f01 100644 --- a/src/main/java/com/replaymod/extras/OpenEyeExtra.java +++ b/src/main/java/com/replaymod/extras/OpenEyeExtra.java @@ -86,7 +86,7 @@ public class OpenEyeExtra implements Extra { GuiPopup popup = new GuiPopup(OfferGui.this); new Thread(() -> { try { - File targetFile = new File(mod.getMinecraft().gameDir, "mods/" + ReplayMod.getMinecraftVersion() + "/OpenEye.jar"); + File targetFile = new File(mod.getMinecraft().runDirectory, "mods/" + ReplayMod.getMinecraftVersion() + "/OpenEye.jar"); FileUtils.forceMkdir(targetFile.getParentFile()); HttpsURLConnection connection = (HttpsURLConnection) new URL(DOWNLOAD_URL).openConnection(); diff --git a/src/main/java/com/replaymod/extras/advancedscreenshots/GuiCreateScreenshot.java b/src/main/java/com/replaymod/extras/advancedscreenshots/GuiCreateScreenshot.java index fa65d5a8..2f908952 100644 --- a/src/main/java/com/replaymod/extras/advancedscreenshots/GuiCreateScreenshot.java +++ b/src/main/java/com/replaymod/extras/advancedscreenshots/GuiCreateScreenshot.java @@ -10,7 +10,7 @@ import de.johni0702.minecraft.gui.element.GuiLabel; import de.johni0702.minecraft.gui.function.Loadable; import de.johni0702.minecraft.gui.layout.GridLayout; import de.johni0702.minecraft.gui.layout.VerticalLayout; -import net.minecraft.crash.CrashReport; +import net.minecraft.util.crash.CrashReport; import java.io.File; import java.nio.file.Path; @@ -50,7 +50,7 @@ public class GuiCreateScreenshot extends GuiRenderSettings implements Loadable { buttonPanel.removeElement(queueButton); renderButton.setI18nLabel("replaymod.gui.advancedscreenshots.create").onClick(() -> { // Closing this GUI ensures that settings are saved - getMinecraft().displayGuiScreen(null); + getMinecraft().openScreen(null); mod.runLater(() -> { try { @@ -63,7 +63,7 @@ public class GuiCreateScreenshot extends GuiRenderSettings implements Loadable { } } catch (Throwable t) { - error(LOGGER, GuiCreateScreenshot.this, CrashReport.makeCrashReport(t, "Rendering video"), () -> {}); + error(LOGGER, GuiCreateScreenshot.this, CrashReport.create(t, "Rendering video"), () -> {}); display(); // Re-show the render settings gui and the new error popup } }); @@ -84,7 +84,7 @@ public class GuiCreateScreenshot extends GuiRenderSettings implements Loadable { @Override protected File generateOutputFile(RenderSettings.EncodingPreset encodingPreset) { DateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd_HH.mm.ss"); - File screenshotFolder = new File(getMinecraft().gameDir, "screenshots"); + File screenshotFolder = new File(getMinecraft().runDirectory, "screenshots"); String baseName = DATE_FORMAT.format(new Date()); for (int i = 1; ; i++) { File screenshotFile = new File(screenshotFolder, baseName + (i == 1 ? "" : "_" + i) + ".png"); @@ -96,6 +96,6 @@ public class GuiCreateScreenshot extends GuiRenderSettings implements Loadable { @Override protected Path getSettingsPath() { - return getMinecraft().gameDir.toPath().resolve("config/replaymod-screenshotsettings.json"); + return getMinecraft().runDirectory.toPath().resolve("config/replaymod-screenshotsettings.json"); } } \ No newline at end of file diff --git a/src/main/java/com/replaymod/extras/advancedscreenshots/ScreenshotRenderer.java b/src/main/java/com/replaymod/extras/advancedscreenshots/ScreenshotRenderer.java index 86ac5ae5..835dce2b 100644 --- a/src/main/java/com/replaymod/extras/advancedscreenshots/ScreenshotRenderer.java +++ b/src/main/java/com/replaymod/extras/advancedscreenshots/ScreenshotRenderer.java @@ -8,8 +8,8 @@ import com.replaymod.render.rendering.Pipelines; import de.johni0702.minecraft.gui.utils.lwjgl.Dimension; import de.johni0702.minecraft.gui.utils.lwjgl.ReadableDimension; import lombok.RequiredArgsConstructor; -import net.minecraft.client.Minecraft; -import net.minecraft.crash.CrashReport; +import net.minecraft.client.MinecraftClient; +import net.minecraft.util.crash.CrashReport; //#if MC>=11300 import com.replaymod.render.mixin.MainWindowAccessor; @@ -24,7 +24,7 @@ import static com.replaymod.core.versions.MCVer.getRenderPartialTicks; @RequiredArgsConstructor public class ScreenshotRenderer implements RenderInfo { - private final Minecraft mc = MCVer.getMinecraft(); + private final MinecraftClient mc = MCVer.getMinecraft(); private final RenderSettings settings; @@ -33,18 +33,18 @@ public class ScreenshotRenderer implements RenderInfo { public boolean renderScreenshot() throws Throwable { try { //#if MC>=11300 - int displayWidthBefore = mc.mainWindow.getFramebufferWidth(); - int displayHeightBefore = mc.mainWindow.getFramebufferHeight(); + int displayWidthBefore = mc.window.getFramebufferWidth(); + int displayHeightBefore = mc.window.getFramebufferHeight(); //#else //$$ int displayWidthBefore = mc.displayWidth; //$$ int displayHeightBefore = mc.displayHeight; //#endif - boolean hideGUIBefore = mc.gameSettings.hideGUI; - mc.gameSettings.hideGUI = true; + boolean hideGUIBefore = mc.options.hudHidden; + mc.options.hudHidden = true; //#if MC>=10800 - ChunkLoadingRenderGlobal clrg = new ChunkLoadingRenderGlobal(mc.renderGlobal); + ChunkLoadingRenderGlobal clrg = new ChunkLoadingRenderGlobal(mc.worldRenderer); //#endif if (settings.getRenderMethod() == RenderSettings.RenderMethod.BLEND) { @@ -59,15 +59,15 @@ public class ScreenshotRenderer implements RenderInfo { clrg.uninstall(); //#endif - mc.gameSettings.hideGUI = hideGUIBefore; + mc.options.hudHidden = hideGUIBefore; //#if MC>=11300 //noinspection ConstantConditions - MainWindowAccessor acc = (MainWindowAccessor) (Object) mc.mainWindow; + MainWindowAccessor acc = (MainWindowAccessor) (Object) mc.window; acc.setFramebufferWidth(displayWidthBefore); acc.setFramebufferHeight(displayHeightBefore); - mc.getFramebuffer().createBindFramebuffer(displayWidthBefore, displayHeightBefore + mc.getFramebuffer().resize(displayWidthBefore, displayHeightBefore //#if MC>=11400 - //$$ , false + , false //#endif ); //#else @@ -76,8 +76,8 @@ public class ScreenshotRenderer implements RenderInfo { return true; } catch (OutOfMemoryError e) { e.printStackTrace(); - CrashReport report = CrashReport.makeCrashReport(e, "Creating Equirectangular Screenshot"); - MCVer.getMinecraft().crashed(report); + CrashReport report = CrashReport.create(e, "Creating Equirectangular Screenshot"); + MCVer.getMinecraft().setCrashReport(report); } return false; } diff --git a/src/main/java/com/replaymod/extras/advancedscreenshots/ScreenshotWriter.java b/src/main/java/com/replaymod/extras/advancedscreenshots/ScreenshotWriter.java index dc9c1236..185efc4c 100644 --- a/src/main/java/com/replaymod/extras/advancedscreenshots/ScreenshotWriter.java +++ b/src/main/java/com/replaymod/extras/advancedscreenshots/ScreenshotWriter.java @@ -8,7 +8,7 @@ import com.replaymod.render.frame.RGBFrame; import com.replaymod.render.rendering.FrameConsumer; import com.replaymod.replay.ReplayModReplay; import de.johni0702.minecraft.gui.utils.lwjgl.ReadableDimension; -import net.minecraft.crash.CrashReport; +import net.minecraft.util.crash.CrashReport; import javax.imageio.ImageIO; import java.awt.image.BufferedImage; @@ -47,10 +47,10 @@ public class ScreenshotWriter implements FrameConsumer { ImageIO.write(img, "PNG", outputFile); } catch (OutOfMemoryError e) { e.printStackTrace(); - CrashReport report = CrashReport.makeCrashReport(e, "Exporting frame"); - MCVer.getMinecraft().crashed(report); + CrashReport report = CrashReport.create(e, "Exporting frame"); + MCVer.getMinecraft().setCrashReport(report); } catch (Throwable t) { - CrashReport report = CrashReport.makeCrashReport(t, "Exporting frame"); + CrashReport report = CrashReport.create(t, "Exporting frame"); ReplayMod.instance.runLater(() -> Utils.error(ReplayModExtras.LOGGER, ReplayModReplay.instance.getReplayHandler().getOverlay(), diff --git a/src/main/java/com/replaymod/extras/playeroverview/PlayerOverview.java b/src/main/java/com/replaymod/extras/playeroverview/PlayerOverview.java index a2f0c8cb..6c81a021 100644 --- a/src/main/java/com/replaymod/extras/playeroverview/PlayerOverview.java +++ b/src/main/java/com/replaymod/extras/playeroverview/PlayerOverview.java @@ -11,23 +11,23 @@ import com.replaymod.replay.events.ReplayClosedCallback; import com.replaymod.replay.events.ReplayOpenedCallback; import de.johni0702.minecraft.gui.utils.EventRegistrations; import net.minecraft.entity.Entity; -import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.PlayerEntity; //#if MC>=11400 -//$$ import com.replaymod.core.events.PreRenderHandCallback; -//$$ import java.util.stream.Collectors; +import com.replaymod.core.events.PreRenderHandCallback; +import java.util.stream.Collectors; //#else -import net.minecraftforge.client.event.RenderHandEvent; - +//$$ import net.minecraftforge.client.event.RenderHandEvent; +//$$ //#if MC>=11300 //#else //$$ import org.lwjgl.input.Keyboard; //#endif - +//$$ //#if MC>=10800 -import com.google.common.base.Predicate; +//$$ import com.google.common.base.Predicate; //#if MC>=11300 -import net.minecraftforge.eventbus.api.SubscribeEvent; +//$$ import net.minecraftforge.eventbus.api.SubscribeEvent; //#else //$$ import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; //#endif @@ -59,20 +59,20 @@ public class PlayerOverview extends EventRegistrations implements Extra { public void run() { if (module.getReplayHandler() != null) { //#if MC>=11400 - //$$ List players = mod.getMinecraft().world.getPlayers() - //$$ .stream() - //$$ .map(it -> (PlayerEntity) it) - //$$ .filter(it -> !(it instanceof CameraEntity)) - //$$ .collect(Collectors.toList()); + List players = mod.getMinecraft().world.getPlayers() + .stream() + .map(it -> (PlayerEntity) it) + .filter(it -> !(it instanceof CameraEntity)) + .collect(Collectors.toList()); //#else - @SuppressWarnings("unchecked") + //$$ @SuppressWarnings("unchecked") //#if MC>=10800 - List players = mod.getMinecraft().world.getPlayers(EntityPlayer.class, new Predicate() { - @Override - public boolean apply(Object input) { - return !(input instanceof CameraEntity); // Exclude the camera entity - } - }); + //$$ List players = mod.getMinecraft().world.getPlayers(EntityPlayer.class, new Predicate() { + //$$ @Override + //$$ public boolean apply(Object input) { + //$$ return !(input instanceof CameraEntity); // Exclude the camera entity + //$$ } + //$$ }); //#else //$$ List players = mod.getMinecraft().theWorld.playerEntities; //$$ players = players.stream() @@ -82,7 +82,7 @@ public class PlayerOverview extends EventRegistrations implements Extra { //#endif if (!Utils.isCtrlDown()) { // Hide all players that have an UUID v2 (commonly used for NPCs) - Iterator iter = players.iterator(); + Iterator iter = players.iterator(); while (iter.hasNext()) { UUID uuid = iter.next().getGameProfile().getId(); if (uuid != null && uuid.version() == 2) { @@ -99,7 +99,7 @@ public class PlayerOverview extends EventRegistrations implements Extra { ReplayClosedCallback.EVENT.register(this::onReplayClose); //#if MC>=11400 //#else - FORGE_BUS.register(this); + //$$ FORGE_BUS.register(this); //#endif } @@ -130,18 +130,18 @@ public class PlayerOverview extends EventRegistrations implements Extra { } //#if MC>=11400 - //$$ { on(PreRenderHandCallback.EVENT, this::shouldHideHand); } + { on(PreRenderHandCallback.EVENT, this::shouldHideHand); } //#else - @SubscribeEvent - public void oRenderHand(RenderHandEvent event) { - if (shouldHideHand()) { - event.setCanceled(true); - } - } + //$$ @SubscribeEvent + //$$ public void oRenderHand(RenderHandEvent event) { + //$$ if (shouldHideHand()) { + //$$ event.setCanceled(true); + //$$ } + //$$ } //#endif private boolean shouldHideHand() { Entity view = getRenderViewEntity(module.getCore().getMinecraft()); - return view != null && isHidden(view.getUniqueID()); + return view != null && isHidden(view.getUuid()); } // See MixinRender for why this is 1.7.10 only diff --git a/src/main/java/com/replaymod/extras/playeroverview/PlayerOverviewGui.java b/src/main/java/com/replaymod/extras/playeroverview/PlayerOverviewGui.java index af40d4d2..43b3750f 100644 --- a/src/main/java/com/replaymod/extras/playeroverview/PlayerOverviewGui.java +++ b/src/main/java/com/replaymod/extras/playeroverview/PlayerOverviewGui.java @@ -20,17 +20,17 @@ import de.johni0702.minecraft.gui.layout.HorizontalLayout; import de.johni0702.minecraft.gui.utils.Colors; import de.johni0702.minecraft.gui.utils.lwjgl.Dimension; import de.johni0702.minecraft.gui.utils.lwjgl.ReadableDimension; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.util.ResourceLocation; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.util.Identifier; //#if MC>=10904 -import net.minecraft.init.MobEffects; +import net.minecraft.entity.effect.StatusEffects; //#else //$$ import net.minecraft.potion.Potion; //#endif //#if MC>=10800 -import net.minecraft.entity.player.EnumPlayerModelParts; +import net.minecraft.client.render.entity.PlayerModelPart; //#endif import java.util.Collections; @@ -89,12 +89,12 @@ public class PlayerOverviewGui extends GuiScreen implements Closeable { private final PlayerOverview extra; - public PlayerOverviewGui(final PlayerOverview extra, List players) { + public PlayerOverviewGui(final PlayerOverview extra, List players) { this.extra = extra; Collections.sort(players, new PlayerComparator()); // Sort by name, spectators last - for (final EntityPlayer p : players) { - final ResourceLocation texture = Utils.getResourceLocationForPlayerUUID(p.getUniqueID()); + for (final PlayerEntity p : players) { + final Identifier texture = Utils.getResourceLocationForPlayerUUID(p.getUuid()); final GuiClickable panel = new GuiClickable().setLayout(new HorizontalLayout().setSpacing(2)).addElements( new HorizontalLayout.Data(0.5), new GuiImage() { @Override @@ -102,7 +102,7 @@ public class PlayerOverviewGui extends GuiScreen implements Closeable { renderer.bindTexture(texture); renderer.drawTexturedRect(0, 0, 8, 8, 16, 16, 8, 8, 64, 64); //#if MC>=10809 - if (p.isWearing(EnumPlayerModelParts.HAT)) { + if (p.isSkinOverlayVisible(PlayerModelPart.HEAD)) { //#else //#if MC>=10800 //$$ if (p.func_175148_a(EnumPlayerModelParts.HAT)) { @@ -134,10 +134,10 @@ public class PlayerOverviewGui extends GuiScreen implements Closeable { final GuiCheckbox checkbox = new GuiCheckbox() { @Override public GuiCheckbox setChecked(boolean checked) { - extra.setHidden(p.getUniqueID(), !checked); + extra.setHidden(p.getUuid(), !checked); return super.setChecked(checked); } - }.setChecked(!extra.isHidden(p.getUniqueID())); + }.setChecked(!extra.isHidden(p.getUuid())); new GuiPanel(playersScrollable.getListPanel()).setLayout(new CustomLayout() { @Override protected void layout(GuiPanel container, int width, int height) { @@ -167,17 +167,17 @@ public class PlayerOverviewGui extends GuiScreen implements Closeable { extra.saveHiddenPlayers(); } - private static boolean isSpectator(EntityPlayer e) { + private static boolean isSpectator(PlayerEntity e) { //#if MC>=10904 - return e.isInvisible() && e.getActivePotionEffect(MobEffects.INVISIBILITY) == null; + return e.isInvisible() && e.getStatusEffect(StatusEffects.INVISIBILITY) == null; //#else //$$ return e.isInvisible() && e.getActivePotionEffect(Potion.invisibility) == null; //#endif } - private static final class PlayerComparator implements Comparator { + private static final class PlayerComparator implements Comparator { @Override - public int compare(EntityPlayer o1, EntityPlayer o2) { + public int compare(PlayerEntity o1, PlayerEntity o2) { if (isSpectator(o1) && !isSpectator(o2)) return 1; if (isSpectator(o2) && !isSpectator(o1)) return -1; //#if MC>=11300 diff --git a/src/main/java/com/replaymod/extras/playeroverview/mixin/MixinRender.java b/src/main/java/com/replaymod/extras/playeroverview/mixin/MixinRender.java index b3c44d36..2b928da6 100644 --- a/src/main/java/com/replaymod/extras/playeroverview/mixin/MixinRender.java +++ b/src/main/java/com/replaymod/extras/playeroverview/mixin/MixinRender.java @@ -2,15 +2,15 @@ package com.replaymod.extras.playeroverview.mixin; import com.replaymod.extras.ReplayModExtras; import com.replaymod.extras.playeroverview.PlayerOverview; -import net.minecraft.client.renderer.entity.Render; +import net.minecraft.client.render.entity.EntityRenderer; import net.minecraft.entity.Entity; -import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.PlayerEntity; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; //#if MC>=10800 -import net.minecraft.client.renderer.culling.ICamera; +import net.minecraft.client.render.VisibleRegion; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; //#else //$$ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @@ -31,15 +31,15 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; * * For 1.7.10, that method doesn't exist, so we use a combination of the event and inject into */ -@Mixin(value = Render.class, priority = 1200) +@Mixin(value = EntityRenderer.class, priority = 1200) public abstract class MixinRender { //#if MC>=10800 - @Inject(method = "shouldRender", at=@At("HEAD"), cancellable = true) - public void replayModExtras_isPlayerHidden(Entity entity, ICamera camera, double camX, double camY, double camZ, CallbackInfoReturnable ci) { + @Inject(method = "isVisible", at=@At("HEAD"), cancellable = true) + public void replayModExtras_isPlayerHidden(Entity entity, VisibleRegion camera, double camX, double camY, double camZ, CallbackInfoReturnable ci) { ReplayModExtras.instance.get(PlayerOverview.class).ifPresent(playerOverview -> { - if (entity instanceof EntityPlayer) { - EntityPlayer player = (EntityPlayer) entity; - if (playerOverview.isHidden(player.getUniqueID())) { + if (entity instanceof PlayerEntity) { + PlayerEntity player = (PlayerEntity) entity; + if (playerOverview.isHidden(player.getUuid())) { ci.setReturnValue(false); } } diff --git a/src/main/java/com/replaymod/extras/urischeme/UriScheme.java b/src/main/java/com/replaymod/extras/urischeme/UriScheme.java index 17b873a0..45587757 100644 --- a/src/main/java/com/replaymod/extras/urischeme/UriScheme.java +++ b/src/main/java/com/replaymod/extras/urischeme/UriScheme.java @@ -1,6 +1,6 @@ package com.replaymod.extras.urischeme; -import net.minecraft.util.Util; +import net.minecraft.util.SystemUtil; import javax.swing.*; import java.io.*; @@ -70,12 +70,12 @@ public abstract class UriScheme { } public static UriScheme create() { - switch (Util.getOSType()) { - case LINUX: + switch (SystemUtil.getOperatingSystem()) { + case UNIX: return new LinuxUriScheme(); case WINDOWS: return new WindowsUriScheme(); - case OSX: + case MAC: return new OSXUriScheme(); case SOLARIS: case UNKNOWN: diff --git a/src/main/java/com/replaymod/extras/youtube/GuiYoutubeUpload.java b/src/main/java/com/replaymod/extras/youtube/GuiYoutubeUpload.java index 213ff388..37daf104 100644 --- a/src/main/java/com/replaymod/extras/youtube/GuiYoutubeUpload.java +++ b/src/main/java/com/replaymod/extras/youtube/GuiYoutubeUpload.java @@ -21,11 +21,11 @@ import de.johni0702.minecraft.gui.popup.GuiFileChooserPopup; import de.johni0702.minecraft.gui.utils.lwjgl.ReadableDimension; import joptsimple.internal.Strings; import lombok.RequiredArgsConstructor; -import net.minecraft.client.resources.I18n; +import net.minecraft.client.resource.language.I18n; import org.apache.commons.io.IOUtils; //#if MC>=11300 -import net.minecraft.util.Util; +import net.minecraft.util.SystemUtil; //#else //$$ import org.lwjgl.Sys; //#endif @@ -83,7 +83,7 @@ public class GuiYoutubeUpload extends GuiScreen { public final GuiTextArea descriptionField = new GuiTextArea().setMaxCharCount(Integer.MAX_VALUE) .setMaxTextWidth(Integer.MAX_VALUE).setMaxTextHeight(Integer.MAX_VALUE); { - descriptionField.setText(new String[]{I18n.format("replaymod.gui.videodescription")}); + descriptionField.setText(new String[]{I18n.translate("replaymod.gui.videodescription")}); } public final GuiTextField tagsField = new GuiTextField().setI18nHint("replaymod.gui.videotags"); @@ -219,17 +219,17 @@ public class GuiYoutubeUpload extends GuiScreen { Desktop.getDesktop().browse(new URL(url).toURI()); } catch(Throwable throwable) { //#if MC>=11400 - //$$ SystemUtil.getOperatingSystem().open(url); + SystemUtil.getOperatingSystem().open(url); //#else //#if MC>=11300 - Util.getOSType().openURI(url); + //$$ Util.getOSType().openURI(url); //#else //$$ Sys.openURL(url); //#endif //#endif } upload = null; - progressBar.setLabel(I18n.format("replaymod.gui.ytuploadprogress.done", url)); + progressBar.setLabel(I18n.translate("replaymod.gui.ytuploadprogress.done", url)); setState(false); } diff --git a/src/main/java/com/replaymod/extras/youtube/VideoVisibility.java b/src/main/java/com/replaymod/extras/youtube/VideoVisibility.java index c961b769..e2c5cffc 100644 --- a/src/main/java/com/replaymod/extras/youtube/VideoVisibility.java +++ b/src/main/java/com/replaymod/extras/youtube/VideoVisibility.java @@ -1,12 +1,12 @@ package com.replaymod.extras.youtube; -import net.minecraft.client.resources.I18n; +import net.minecraft.client.resource.language.I18n; public enum VideoVisibility { PUBLIC, UNLISTED, PRIVATE; @Override public String toString() { - return I18n.format("replaymod.gui.videovisibility." + name().toLowerCase()); + return I18n.translate("replaymod.gui.videovisibility." + name().toLowerCase()); } } diff --git a/src/main/java/com/replaymod/extras/youtube/YoutubeUpload.java b/src/main/java/com/replaymod/extras/youtube/YoutubeUpload.java index d05493ac..2ae980a8 100644 --- a/src/main/java/com/replaymod/extras/youtube/YoutubeUpload.java +++ b/src/main/java/com/replaymod/extras/youtube/YoutubeUpload.java @@ -8,11 +8,11 @@ import de.johni0702.minecraft.gui.element.GuiButton; import de.johni0702.minecraft.gui.utils.EventRegistrations; //#if MC>=11400 -//$$ import de.johni0702.minecraft.gui.versions.callbacks.OpenGuiScreenCallback; -//$$ import net.minecraft.client.gui.Screen; +import de.johni0702.minecraft.gui.versions.callbacks.OpenGuiScreenCallback; +import net.minecraft.client.gui.Screen; //#else -import net.minecraftforge.client.event.GuiScreenEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; +//$$ import net.minecraftforge.client.event.GuiScreenEvent; +//$$ import net.minecraftforge.eventbus.api.SubscribeEvent; //#endif import static com.replaymod.core.versions.MCVer.*; @@ -24,12 +24,12 @@ public class YoutubeUpload extends EventRegistrations implements Extra { } //#if MC>=11400 - //$$ { on(OpenGuiScreenCallback.EVENT, this::onGuiOpen); } - //$$ private void onGuiOpen(Screen vanillaGui) { + { on(OpenGuiScreenCallback.EVENT, this::onGuiOpen); } + private void onGuiOpen(Screen vanillaGui) { //#else - @SubscribeEvent - public void onGuiOpen(GuiScreenEvent.InitGuiEvent.Post event) { - net.minecraft.client.gui.GuiScreen vanillaGui = getGui(event); + //$$ @SubscribeEvent + //$$ public void onGuiOpen(GuiScreenEvent.InitGuiEvent.Post event) { + //$$ net.minecraft.client.gui.GuiScreen vanillaGui = getGui(event); //#endif if (GuiScreen.from(vanillaGui) instanceof GuiRenderingDone) { GuiRenderingDone gui = (GuiRenderingDone) GuiScreen.from(vanillaGui); diff --git a/src/main/java/com/replaymod/extras/youtube/YoutubeUploader.java b/src/main/java/com/replaymod/extras/youtube/YoutubeUploader.java index 5eb125d2..e24f4f4d 100644 --- a/src/main/java/com/replaymod/extras/youtube/YoutubeUploader.java +++ b/src/main/java/com/replaymod/extras/youtube/YoutubeUploader.java @@ -28,7 +28,7 @@ import com.replaymod.render.RenderSettings; import com.replaymod.render.metadata.MetadataInjector; import lombok.Getter; import lombok.NonNull; -import net.minecraft.client.Minecraft; +import net.minecraft.client.MinecraftClient; import org.apache.commons.exec.CommandLine; import org.apache.commons.io.FileUtils; @@ -66,7 +66,7 @@ public class YoutubeUploader { @Getter private volatile boolean cancelled; - public YoutubeUploader(Minecraft minecraft, File videoFile, int videoFrames, + public YoutubeUploader(MinecraftClient minecraft, File videoFile, int videoFrames, String thumbnailFormat, byte[] thumbnailImage, RenderSettings settings, VideoVisibility videoVisibility, VideoSnippet videoSnippet) throws GeneralSecurityException, IOException { @@ -78,7 +78,7 @@ public class YoutubeUploader { this.videoVisibility = videoVisibility; this.videoSnippet = videoSnippet; this.httpTransport = GoogleNetHttpTransport.newTrustedTransport(); - this.dataStoreFactory = new FileDataStoreFactory(minecraft.gameDir); + this.dataStoreFactory = new FileDataStoreFactory(minecraft.runDirectory); } diff --git a/src/main/java/com/replaymod/online/ReplayModOnline.java b/src/main/java/com/replaymod/online/ReplayModOnline.java index 7a057ea0..16e4104f 100644 --- a/src/main/java/com/replaymod/online/ReplayModOnline.java +++ b/src/main/java/com/replaymod/online/ReplayModOnline.java @@ -57,7 +57,7 @@ public class ReplayModOnline implements Module { @Override public void initClient() { - Path path = MCVer.getMinecraft().gameDir.toPath().resolve("config/replaymod-online.token"); + Path path = MCVer.getMinecraft().runDirectory.toPath().resolve("config/replaymod-online.token"); PlainFileAuthData authData = new PlainFileAuthData(path); apiClient = new ApiClient(authData); if (Files.notExists(path)) { @@ -89,11 +89,11 @@ public class ReplayModOnline implements Module { @Override public void run() { //#if MC>=11400 - //$$ if (getMinecraft().overlay != null) { - //$$ // delay until after resources have been loaded - //$$ core.runLater(this); - //$$ return; - //$$ } + if (getMinecraft().overlay != null) { + // delay until after resources have been loaded + core.runLater(this); + return; + } //#endif GuiScreen parent = GuiScreen.wrap(getMinecraft().currentScreen); new GuiLoginPrompt(apiClient, parent, parent, false).display(); @@ -142,7 +142,7 @@ public class ReplayModOnline implements Module { public File getDownloadsFolder() { String path = core.getSettingsRegistry().get(Setting.DOWNLOAD_PATH); - return new File(path.startsWith("./") ? getMinecraft().gameDir : null, path); + return new File(path.startsWith("./") ? getMinecraft().runDirectory : null, path); } public File getDownloadedFile(int id) { diff --git a/src/main/java/com/replaymod/online/api/ApiClient.java b/src/main/java/com/replaymod/online/api/ApiClient.java index 0a351c37..be3a0b7f 100755 --- a/src/main/java/com/replaymod/online/api/ApiClient.java +++ b/src/main/java/com/replaymod/online/api/ApiClient.java @@ -11,7 +11,7 @@ import com.replaymod.online.AuthenticationHash; import com.replaymod.online.api.replay.ReplayModApiMethods; import com.replaymod.online.api.replay.SearchQuery; import com.replaymod.online.api.replay.holders.*; -import net.minecraft.client.Minecraft; +import net.minecraft.client.MinecraftClient; import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; @@ -31,7 +31,7 @@ import static com.replaymod.core.utils.Utils.SSL_SOCKET_FACTORY; public class ApiClient { - private static final Minecraft mc = MCVer.getMinecraft(); + private static final MinecraftClient mc = MCVer.getMinecraft(); private static final Gson gson = new Gson(); private static final JsonParser jsonParser = new JsonParser(); @@ -101,7 +101,7 @@ public class ApiClient { AuthenticationHash hash = new AuthenticationHash(); mc.getSessionService().joinServer( - mc.getSession().getProfile(), mc.getSession().getToken(), hash.hash); + mc.getSession().getProfile(), mc.getSession().getAccessToken(), hash.hash); return hash; } diff --git a/src/main/java/com/replaymod/online/api/replay/holders/ApiError.java b/src/main/java/com/replaymod/online/api/replay/holders/ApiError.java index 727886c2..961fed36 100755 --- a/src/main/java/com/replaymod/online/api/replay/holders/ApiError.java +++ b/src/main/java/com/replaymod/online/api/replay/holders/ApiError.java @@ -1,7 +1,7 @@ package com.replaymod.online.api.replay.holders; import lombok.Data; -import net.minecraft.client.resources.I18n; +import net.minecraft.client.resource.language.I18n; @Data public class ApiError { @@ -13,7 +13,7 @@ public class ApiError { public String getTranslatedDesc() { try { - return I18n.format(key, (Object[]) objects); + return I18n.translate(key, (Object[]) objects); } catch(Exception e) { e.printStackTrace(); return desc; diff --git a/src/main/java/com/replaymod/online/api/replay/holders/Category.java b/src/main/java/com/replaymod/online/api/replay/holders/Category.java index d23527d4..978368e7 100755 --- a/src/main/java/com/replaymod/online/api/replay/holders/Category.java +++ b/src/main/java/com/replaymod/online/api/replay/holders/Category.java @@ -1,6 +1,6 @@ package com.replaymod.online.api.replay.holders; -import net.minecraft.client.resources.I18n; +import net.minecraft.client.resource.language.I18n; public enum Category { @@ -27,7 +27,7 @@ public enum Category { } public String toNiceString() { - return I18n.format(this.name); + return I18n.translate(this.name); } public Category next() { diff --git a/src/main/java/com/replaymod/online/gui/GuiRegister.java b/src/main/java/com/replaymod/online/gui/GuiRegister.java index 626b4140..5d110167 100644 --- a/src/main/java/com/replaymod/online/gui/GuiRegister.java +++ b/src/main/java/com/replaymod/online/gui/GuiRegister.java @@ -15,7 +15,7 @@ import de.johni0702.minecraft.gui.utils.Utils; import com.replaymod.core.utils.Patterns; import de.johni0702.minecraft.gui.utils.lwjgl.Dimension; import de.johni0702.minecraft.gui.utils.lwjgl.ReadableColor; -import net.minecraft.client.gui.FontRenderer; +import net.minecraft.client.font.TextRenderer; public class GuiRegister extends AbstractGuiScreen { public static final int MIN_PW_LENGTH = 5; @@ -56,9 +56,9 @@ public class GuiRegister extends AbstractGuiScreen { pos(cancelButton, width / 2 + 2, 170); pos(statusLabel, width / 2 - statusLabel.getMinSize().getWidth() / 2, 152); - FontRenderer font = getMinecraft().fontRenderer; - int lineCount = font.listFormattedStringToWidth(disclaimerLabel.getText(), width - 10).size(); - Dimension dim = new Dimension(width - 10, font.FONT_HEIGHT * lineCount); + TextRenderer font = getMinecraft().textRenderer; + int lineCount = font.wrapStringToWidthAsList(disclaimerLabel.getText(), width - 10).size(); + Dimension dim = new Dimension(width - 10, font.fontHeight * lineCount); disclaimerLabel.setSize(dim); pos(disclaimerLabel, 5, height - dim.getHeight() - 5); } diff --git a/src/main/java/com/replaymod/online/gui/GuiReplayCenter.java b/src/main/java/com/replaymod/online/gui/GuiReplayCenter.java index 5b6e7f01..941544d4 100644 --- a/src/main/java/com/replaymod/online/gui/GuiReplayCenter.java +++ b/src/main/java/com/replaymod/online/gui/GuiReplayCenter.java @@ -39,7 +39,7 @@ import de.johni0702.minecraft.gui.utils.Consumer; import de.johni0702.minecraft.gui.utils.lwjgl.Dimension; import de.johni0702.minecraft.gui.utils.lwjgl.ReadableDimension; import org.apache.commons.lang3.StringUtils; -import net.minecraft.util.text.TextFormatting; +import net.minecraft.text.TextFormat; import java.awt.image.BufferedImage; import java.io.IOException; @@ -220,7 +220,7 @@ public class GuiReplayCenter extends GuiScreen { public void onSuccess(Boolean result) { if (result) { apiClient.logout(); - getMinecraft().displayGuiScreen(null); + getMinecraft().openScreen(null); } } @@ -235,7 +235,7 @@ public class GuiReplayCenter extends GuiScreen { public final GuiButton mainMenuButton = new GuiButton().onClick(new Runnable() { @Override public void run() { - getMinecraft().displayGuiScreen(null); + getMinecraft().openScreen(null); } }).setSize(195, 20).setI18nLabel("replaymod.gui.mainmenu"); @@ -417,9 +417,9 @@ public class GuiReplayCenter extends GuiScreen { this.downloaded = downloaded; ReplayMetaData metaData = fileInfo.getMetadata(); - name.setText(TextFormatting.UNDERLINE + Utils.fileNameToReplayName(fileInfo.getName())); + name.setText(TextFormat.UNDERLINE + Utils.fileNameToReplayName(fileInfo.getName())); author.setI18nText("replaymod.gui.center.author", - "" + TextFormatting.GRAY + TextFormatting.ITALIC, fileInfo.getOwner()); + "" + TextFormat.GRAY + TextFormat.ITALIC, fileInfo.getOwner()); if (StringUtils.isEmpty(metaData.getServerName())) { server.setI18nText("replaymod.gui.iphidden").setColor(Colors.DARK_RED); } else { @@ -443,7 +443,7 @@ public class GuiReplayCenter extends GuiScreen { favorites.setText("⭑" + fileInfo.getFavorites()); likes.setText("⬆" + fileInfo.getRatings().getPositive()); dislikes.setText("⬇" + fileInfo.getRatings().getNegative()); - category.setText(TextFormatting.ITALIC + Optional.fromNullable(Category.fromId(fileInfo.getCategory())) + category.setText(TextFormat.ITALIC + Optional.fromNullable(Category.fromId(fileInfo.getCategory())) .or(Category.MISCELLANEOUS).toNiceString()); addElements(null, durationPanel, downloadsPanel); diff --git a/src/main/java/com/replaymod/online/gui/GuiReplayCenterSearch.java b/src/main/java/com/replaymod/online/gui/GuiReplayCenterSearch.java index 00f6b017..edab6ea3 100644 --- a/src/main/java/com/replaymod/online/gui/GuiReplayCenterSearch.java +++ b/src/main/java/com/replaymod/online/gui/GuiReplayCenterSearch.java @@ -16,7 +16,7 @@ import de.johni0702.minecraft.gui.layout.GridLayout; import de.johni0702.minecraft.gui.popup.AbstractGuiPopup; import de.johni0702.minecraft.gui.utils.Colors; import de.johni0702.minecraft.gui.utils.lwjgl.ReadablePoint; -import net.minecraft.client.resources.I18n; +import net.minecraft.client.resource.language.I18n; //#if MC>=11300 import com.replaymod.core.versions.MCVer.Keyboard; @@ -61,26 +61,26 @@ public class GuiReplayCenterSearch extends AbstractGuiPopup categories = new ArrayList<>(); - categories.add(I18n.format("replaymod.gui.center.search.category")); + categories.add(I18n.translate("replaymod.gui.center.search.category")); for (Category c : Category.values()) { categories.add(c.toNiceString()); } category.setValues(categories.toArray(new String[categories.size()])); List versions = new ArrayList<>(); - versions.add(I18n.format("replaymod.gui.center.search.version")); + versions.add(I18n.translate("replaymod.gui.center.search.version")); for (MinecraftVersion v : MinecraftVersion.values()) { versions.add(v.toNiceName()); } version.setValues(versions.toArray(new String[versions.size()])); gameType.setI18nLabel("replaymod.gui.center.search.gametype") - .setValues(I18n.format("options.particles.all"), - I18n.format("menu.singleplayer"), - I18n.format("menu.multiplayer")); + .setValues(I18n.translate("options.particles.all"), + I18n.translate("menu.singleplayer"), + I18n.translate("menu.multiplayer")); sort.setI18nLabel("replaymod.gui.center.search.order") - .setValues(I18n.format("replaymod.gui.center.search.order.best"), - I18n.format("replaymod.gui.center.search.order.recent")); + .setValues(I18n.translate("replaymod.gui.center.search.order.best"), + I18n.translate("replaymod.gui.center.search.order.recent")); popup.setLayout(new GridLayout().setColumns(3).setSpacingX(5).setSpacingY(5)); popup.addElements(null, diff --git a/src/main/java/com/replaymod/online/gui/GuiReplayDownloading.java b/src/main/java/com/replaymod/online/gui/GuiReplayDownloading.java index 15960c3b..b2537a09 100644 --- a/src/main/java/com/replaymod/online/gui/GuiReplayDownloading.java +++ b/src/main/java/com/replaymod/online/gui/GuiReplayDownloading.java @@ -10,7 +10,7 @@ import de.johni0702.minecraft.gui.element.GuiButton; import de.johni0702.minecraft.gui.element.GuiLabel; import de.johni0702.minecraft.gui.element.advanced.GuiProgressBar; import de.johni0702.minecraft.gui.layout.CustomLayout; -import net.minecraft.util.text.TextFormatting; +import net.minecraft.text.TextFormat; import java.io.File; import java.io.IOException; @@ -34,7 +34,7 @@ public class GuiReplayDownloading extends AbstractGuiScreen() { @Override protected void layout(GuiReplayDownloading container, int width, int height) { diff --git a/src/main/java/com/replaymod/online/gui/GuiSaveModifiedReplay.java b/src/main/java/com/replaymod/online/gui/GuiSaveModifiedReplay.java index 27596349..55899c4e 100644 --- a/src/main/java/com/replaymod/online/gui/GuiSaveModifiedReplay.java +++ b/src/main/java/com/replaymod/online/gui/GuiSaveModifiedReplay.java @@ -44,7 +44,7 @@ public class GuiSaveModifiedReplay extends GuiScreen { } catch (IOException e) { e.printStackTrace(); } - getMinecraft().displayGuiScreen(null); + getMinecraft().openScreen(null); } } @@ -59,7 +59,7 @@ public class GuiSaveModifiedReplay extends GuiScreen { } catch (IOException e) { e.printStackTrace(); } - getMinecraft().displayGuiScreen(null); + getMinecraft().openScreen(null); } } }).setSize(147, 20).setI18nLabel("replaymod.gui.replaymodified.yes"); @@ -67,7 +67,7 @@ public class GuiSaveModifiedReplay extends GuiScreen { @Override public void run() { FileUtils.deleteQuietly(file); - getMinecraft().displayGuiScreen(null); + getMinecraft().openScreen(null); } }).setSize(147, 20).setI18nLabel("replaymod.gui.replaymodified.no"); diff --git a/src/main/java/com/replaymod/online/gui/GuiUploadReplay.java b/src/main/java/com/replaymod/online/gui/GuiUploadReplay.java index 8fd303fb..5bb13cc3 100644 --- a/src/main/java/com/replaymod/online/gui/GuiUploadReplay.java +++ b/src/main/java/com/replaymod/online/gui/GuiUploadReplay.java @@ -32,10 +32,10 @@ import de.johni0702.minecraft.gui.layout.VerticalLayout; import de.johni0702.minecraft.gui.popup.AbstractGuiPopup; import de.johni0702.minecraft.gui.popup.GuiYesNoPopup; import de.johni0702.minecraft.gui.utils.Colors; -import net.minecraft.client.resources.I18n; -import net.minecraft.client.settings.KeyBinding; -import net.minecraft.crash.CrashReport; -import net.minecraft.crash.ReportedException; +import net.minecraft.client.resource.language.I18n; +import net.minecraft.client.options.KeyBinding; +import net.minecraft.util.crash.CrashReport; +import net.minecraft.util.crash.CrashException; import org.apache.commons.io.FileUtils; import org.apache.commons.lang3.StringUtils; @@ -61,7 +61,7 @@ public class GuiUploadReplay extends GuiScreen { public final GuiLabel durationLabel = new GuiLabel(); public final GuiCheckbox hideServerIP = new GuiCheckbox(); public final GuiDropdownMenu category = new GuiDropdownMenu().setHeight(20) - .setValues(Category.values()).setToString(v -> I18n.format("replaymod.category") + ": " + v.toNiceString()); + .setValues(Category.values()).setToString(v -> I18n.translate("replaymod.category") + ": " + v.toNiceString()); public final GuiTextField tags = new GuiTextField().setHeight(20).setMaxLength(30) .setI18nHint("replaymod.gui.upload.tagshint"); @@ -134,7 +134,7 @@ public class GuiUploadReplay extends GuiScreen { metaData = replayFile.getMetaData(); optThumbnail = replayFile.getThumb(); } catch (IOException e) { - throw new ReportedException(CrashReport.makeCrashReport(e, "Read replay file " + file.getName())); + throw new CrashException(CrashReport.create(e, "Read replay file " + file.getName())); } // Apply to gui @@ -152,7 +152,7 @@ public class GuiUploadReplay extends GuiScreen { KeyBindingRegistry registry = mod.getCore().getKeyBindingRegistry(); KeyBinding keyBinding = registry.getKeyBindings().get("replaymod.input.thumbnail"); //#if MC>=11300 - String keyName = keyBinding == null ? "???" : keyBinding.func_197978_k(); + String keyName = keyBinding == null ? "???" : keyBinding.getLocalizedName(); //#else //$$ String keyName = keyBinding == null ? "???" : GameSettings.getKeyDisplayString(keyBinding.getKeyCode()); //#endif @@ -216,7 +216,7 @@ public class GuiUploadReplay extends GuiScreen { if (e instanceof ApiException) { message = e.getLocalizedMessage(); } else { - message = I18n.format("replaymod.gui.unknownerror"); + message = I18n.translate("replaymod.gui.unknownerror"); } mod.getCore().runLater(() -> { // Show error popup diff --git a/src/main/java/com/replaymod/online/handler/GuiHandler.java b/src/main/java/com/replaymod/online/handler/GuiHandler.java index 96eed5ae..139be458 100644 --- a/src/main/java/com/replaymod/online/handler/GuiHandler.java +++ b/src/main/java/com/replaymod/online/handler/GuiHandler.java @@ -9,18 +9,18 @@ import com.replaymod.replay.gui.screen.GuiReplayViewer; import com.replaymod.replay.handler.GuiHandler.InjectedButton; import de.johni0702.minecraft.gui.container.AbstractGuiScreen; import de.johni0702.minecraft.gui.container.GuiScreen; -import net.minecraft.client.gui.GuiButton; -import net.minecraft.client.gui.GuiMainMenu; -import net.minecraft.client.resources.I18n; +import net.minecraft.client.gui.widget.ButtonWidget; +import net.minecraft.client.gui.MainMenuScreen; +import net.minecraft.client.resource.language.I18n; //#if MC>=11400 -//$$ import de.johni0702.minecraft.gui.versions.callbacks.InitScreenCallback; -//$$ import net.minecraft.client.gui.Screen; -//$$ import net.minecraft.client.gui.widget.AbstractButtonWidget; -//$$ import java.util.List; +import de.johni0702.minecraft.gui.versions.callbacks.InitScreenCallback; +import net.minecraft.client.gui.Screen; +import net.minecraft.client.gui.widget.AbstractButtonWidget; +import java.util.List; //#else -import net.minecraftforge.client.event.GuiScreenEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; +//$$ import net.minecraftforge.client.event.GuiScreenEvent; +//$$ import net.minecraftforge.eventbus.api.SubscribeEvent; //#endif import java.io.File; @@ -37,37 +37,37 @@ public class GuiHandler extends EventRegistrations { } //#if MC>=11400 - //$$ { on(InitScreenCallback.EVENT, this::injectIntoMainMenu); } - //$$ public void injectIntoMainMenu(Screen guiScreen, List buttonList) { + { on(InitScreenCallback.EVENT, this::injectIntoMainMenu); } + public void injectIntoMainMenu(Screen guiScreen, List buttonList) { //#else - @SubscribeEvent - public void injectIntoMainMenu(GuiScreenEvent.InitGuiEvent event) { - final net.minecraft.client.gui.GuiScreen guiScreen = getGui(event); + //$$ @SubscribeEvent + //$$ public void injectIntoMainMenu(GuiScreenEvent.InitGuiEvent event) { + //$$ final net.minecraft.client.gui.GuiScreen guiScreen = getGui(event); //#endif - if (!(guiScreen instanceof GuiMainMenu)) { + if (!(guiScreen instanceof MainMenuScreen)) { return; } - GuiButton button = new InjectedButton( + ButtonWidget button = new InjectedButton( guiScreen, BUTTON_REPLAY_CENTER, guiScreen.width / 2 + 2, guiScreen.height / 4 + 10 + 4 * 24, 98, 20, - I18n.format("replaymod.gui.replaycenter"), + I18n.translate("replaymod.gui.replaycenter"), this::onButton ); addButton(guiScreen, button); } //#if MC>=11400 - //$$ { on(InitScreenCallback.EVENT, this::injectIntoReplayViewer); } - //$$ public void injectIntoReplayViewer(Screen vanillaGuiScreen, List buttonList) { + { on(InitScreenCallback.EVENT, this::injectIntoReplayViewer); } + public void injectIntoReplayViewer(Screen vanillaGuiScreen, List buttonList) { //#else - @SubscribeEvent - public void injectIntoReplayViewer(GuiScreenEvent.InitGuiEvent.Post event) { - net.minecraft.client.gui.GuiScreen vanillaGuiScreen = getGui(event); + //$$ @SubscribeEvent + //$$ public void injectIntoReplayViewer(GuiScreenEvent.InitGuiEvent.Post event) { + //$$ net.minecraft.client.gui.GuiScreen vanillaGuiScreen = getGui(event); //#endif AbstractGuiScreen guiScreen = GuiScreen.from(vanillaGuiScreen); if (!(guiScreen instanceof GuiReplayViewer)) { @@ -89,16 +89,16 @@ public class GuiHandler extends EventRegistrations { //#if MC>=11300 private void onButton(InjectedButton button) { - net.minecraft.client.gui.GuiScreen guiScreen = button.guiScreen; + net.minecraft.client.gui.Screen guiScreen = button.guiScreen; //#else //$$ @SubscribeEvent //$$ public void onButton(GuiScreenEvent.ActionPerformedEvent.Pre event) { //$$ net.minecraft.client.gui.GuiScreen guiScreen = getGui(event); //$$ GuiButton button = getButton(event); //#endif - if(!button.enabled) return; + if(!button.active) return; - if (guiScreen instanceof GuiMainMenu) { + if (guiScreen instanceof MainMenuScreen) { if (button.id == BUTTON_REPLAY_CENTER) { GuiReplayCenter replayCenter = new GuiReplayCenter(mod); if (mod.isLoggedIn()) { diff --git a/src/main/java/com/replaymod/pathing/gui/GuiKeyframeRepository.java b/src/main/java/com/replaymod/pathing/gui/GuiKeyframeRepository.java index c6c761a4..5f94852f 100644 --- a/src/main/java/com/replaymod/pathing/gui/GuiKeyframeRepository.java +++ b/src/main/java/com/replaymod/pathing/gui/GuiKeyframeRepository.java @@ -103,7 +103,7 @@ public class GuiKeyframeRepository extends GuiScreen implements Closeable { public final GuiButton loadButton = new GuiButton(buttonPanel).onClick(new Runnable() { @Override public void run() { - getMinecraft().displayGuiScreen(null); + getMinecraft().openScreen(null); try { Timeline timeline = timelines.get(selectedEntry.name); for (Path path : timeline.getPaths()) { diff --git a/src/main/java/com/replaymod/pathing/player/AbstractTimelinePlayer.java b/src/main/java/com/replaymod/pathing/player/AbstractTimelinePlayer.java index 394dcb7a..efbc58cc 100644 --- a/src/main/java/com/replaymod/pathing/player/AbstractTimelinePlayer.java +++ b/src/main/java/com/replaymod/pathing/player/AbstractTimelinePlayer.java @@ -14,8 +14,8 @@ import com.replaymod.replaystudio.pathing.path.Keyframe; import com.replaymod.replaystudio.pathing.path.Path; import com.replaymod.replaystudio.pathing.path.Timeline; import de.johni0702.minecraft.gui.utils.EventRegistrations; -import net.minecraft.client.Minecraft; -import net.minecraft.util.Timer; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.render.RenderTickCounter; import javax.annotation.Nullable; import java.util.Iterator; @@ -26,7 +26,7 @@ import static com.replaymod.core.versions.MCVer.*; * Plays a timeline. */ public abstract class AbstractTimelinePlayer extends EventRegistrations { - private final Minecraft mc = getMinecraft(); + private final MinecraftClient mc = getMinecraft(); private final ReplayHandler replayHandler; private Timeline timeline; protected long startOffset; @@ -81,7 +81,7 @@ public abstract class AbstractTimelinePlayer extends EventRegistrations { TimerAccessor timerA = (TimerAccessor) timer; //#if MC>=11200 timerA.setTickLength(WrappedTimer.DEFAULT_MS_PER_TICK); - timer.renderPartialTicks = timer.elapsedTicks = 0; + timer.tickDelta = timer.ticksThisFrame = 0; //#else //$$ timer.timerSpeed = 1; //$$ timer.elapsedPartialTicks = timer.elapsedTicks = 0; @@ -124,10 +124,10 @@ public abstract class AbstractTimelinePlayer extends EventRegistrations { float timeInTicks = replayTime / 50f; float previousTimeInTicks = lastTime / 50f; float passedTicks = timeInTicks - previousTimeInTicks; - Timer timer = ((MinecraftAccessor) mc).getTimer(); - timer.renderPartialTicks += passedTicks; - timer.elapsedTicks = (int) timer.renderPartialTicks; - timer.renderPartialTicks -= timer.elapsedTicks; + RenderTickCounter timer = ((MinecraftAccessor) mc).getTimer(); + timer.tickDelta += passedTicks; + timer.ticksThisFrame = (int) timer.tickDelta; + timer.tickDelta -= timer.ticksThisFrame; lastTime = replayTime; diff --git a/src/main/java/com/replaymod/pathing/player/ReplayTimer.java b/src/main/java/com/replaymod/pathing/player/ReplayTimer.java index 7e6bae5a..cbf73778 100644 --- a/src/main/java/com/replaymod/pathing/player/ReplayTimer.java +++ b/src/main/java/com/replaymod/pathing/player/ReplayTimer.java @@ -3,35 +3,35 @@ package com.replaymod.pathing.player; import com.replaymod.core.utils.WrappedTimer; import net.fabricmc.fabric.api.event.Event; import net.fabricmc.fabric.api.event.EventFactory; -import net.minecraft.util.Timer; +import net.minecraft.client.render.RenderTickCounter; /** * Wrapper around the current timer that prevents the timer from advancing by itself. */ public class ReplayTimer extends WrappedTimer { //#if MC>=11300 - private final Timer state = new Timer(0, 0); + private final RenderTickCounter state = new RenderTickCounter(0, 0); //#else //$$ private final Timer state = new Timer(0); //#endif - public ReplayTimer(Timer wrapped) { + public ReplayTimer(RenderTickCounter wrapped) { super(wrapped); } @Override // This should be handled by Remap but it isn't (was handled before a9724e3). //#if MC>=11400 - //$$ public void beginRenderTick( + public void beginRenderTick( //#else - public void updateTimer( + //$$ public void updateTimer( //#endif //#if MC>=11300 long sysClock //#endif ) { copy(this, state); // Save our current state - wrapped.updateTimer( + wrapped.beginRenderTick( //#if MC>=11300 sysClock //#endif @@ -40,7 +40,7 @@ public class ReplayTimer extends WrappedTimer { UpdatedCallback.EVENT.invoker().onUpdate(); } - public Timer getWrapped() { + public RenderTickCounter getWrapped() { return wrapped; } diff --git a/src/main/java/com/replaymod/pathing/properties/SpectatorProperty.java b/src/main/java/com/replaymod/pathing/properties/SpectatorProperty.java index b2af033d..9038e179 100644 --- a/src/main/java/com/replaymod/pathing/properties/SpectatorProperty.java +++ b/src/main/java/com/replaymod/pathing/properties/SpectatorProperty.java @@ -7,7 +7,7 @@ import com.replaymod.replaystudio.pathing.property.AbstractProperty; import com.replaymod.replaystudio.pathing.property.PropertyPart; import com.replaymod.replaystudio.pathing.property.PropertyParts; import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.LivingEntity; import net.minecraft.world.World; import java.io.IOException; @@ -34,7 +34,7 @@ public class SpectatorProperty extends AbstractProperty { ReplayHandler handler = ((ReplayHandler) replayHandler); World world = handler.getCameraEntity().getEntityWorld(); // Lookup entity by id, returns null if an entity with the id does not exists - Entity target = world.getEntityByID(value); + Entity target = world.getEntityById(value); // Spectate entity, when called with null, returns to camera //#if MC>=10800 handler.spectateEntity(target); diff --git a/src/main/java/com/replaymod/recording/ReplayModRecording.java b/src/main/java/com/replaymod/recording/ReplayModRecording.java index e7db0369..2af00462 100644 --- a/src/main/java/com/replaymod/recording/ReplayModRecording.java +++ b/src/main/java/com/replaymod/recording/ReplayModRecording.java @@ -11,14 +11,14 @@ import com.replaymod.recording.mixin.NetworkManagerAccessor; import com.replaymod.recording.packet.PacketListener; import io.netty.channel.Channel; import io.netty.util.AttributeKey; -import net.minecraft.network.NetworkManager; +import net.minecraft.network.ClientConnection; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; //#if MC>=11400 -//$$ import net.fabricmc.fabric.api.network.ClientSidePacketRegistry; +import net.fabricmc.fabric.api.network.ClientSidePacketRegistry; //#else -import net.minecraftforge.fml.network.NetworkRegistry; +//$$ import net.minecraftforge.fml.network.NetworkRegistry; //#endif //#if MC>=11300 @@ -68,10 +68,10 @@ public class ReplayModRecording implements Module { new GuiHandler(core).register(); //#if MC>=11400 - //$$ ClientSidePacketRegistry.INSTANCE.register(Restrictions.PLUGIN_CHANNEL, (packetContext, packetByteBuf) -> {}); + ClientSidePacketRegistry.INSTANCE.register(Restrictions.PLUGIN_CHANNEL, (packetContext, packetByteBuf) -> {}); //#else //#if MC>=11300 - NetworkRegistry.newEventChannel(Restrictions.PLUGIN_CHANNEL, () -> "0", any -> true, any -> true); + //$$ NetworkRegistry.newEventChannel(Restrictions.PLUGIN_CHANNEL, () -> "0", any -> true, any -> true); //#else //$$ NetworkRegistry.INSTANCE.newChannel(Restrictions.PLUGIN_CHANNEL, new RestrictionsChannelHandler()); //#endif @@ -83,7 +83,7 @@ public class ReplayModRecording implements Module { //$$ private static class RestrictionsChannelHandler extends ChannelDuplexHandler {} //#endif - public void initiateRecording(NetworkManager networkManager) { + public void initiateRecording(ClientConnection networkManager) { Channel channel = ((NetworkManagerAccessor) networkManager).getChannel(); if (channel.pipeline().get("ReplayModReplay_replaySender") != null) return; //#if MC>=11300 diff --git a/src/main/java/com/replaymod/recording/gui/GuiRecordingControls.java b/src/main/java/com/replaymod/recording/gui/GuiRecordingControls.java index ad5b900f..6407297b 100644 --- a/src/main/java/com/replaymod/recording/gui/GuiRecordingControls.java +++ b/src/main/java/com/replaymod/recording/gui/GuiRecordingControls.java @@ -11,16 +11,16 @@ import de.johni0702.minecraft.gui.element.GuiButton; import de.johni0702.minecraft.gui.layout.CustomLayout; import de.johni0702.minecraft.gui.layout.HorizontalLayout; import de.johni0702.minecraft.gui.utils.EventRegistrations; -import net.minecraft.client.gui.GuiIngameMenu; +import net.minecraft.client.gui.menu.PauseMenuScreen; //#if MC>=11400 -//$$ import de.johni0702.minecraft.gui.versions.callbacks.InitScreenCallback; +import de.johni0702.minecraft.gui.versions.callbacks.InitScreenCallback; //#else -import net.minecraftforge.client.event.GuiScreenEvent; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.eventbus.api.SubscribeEvent; - -import static com.replaymod.core.versions.MCVer.getGui; +//$$ import net.minecraftforge.client.event.GuiScreenEvent; +//$$ import net.minecraftforge.common.MinecraftForge; +//$$ import net.minecraftforge.eventbus.api.SubscribeEvent; +//$$ +//$$ import static com.replaymod.core.versions.MCVer.getGui; //#endif public class GuiRecordingControls extends EventRegistrations { @@ -67,18 +67,18 @@ public class GuiRecordingControls extends EventRegistrations { } //#if MC>=11400 - //$$ { on(InitScreenCallback.EVENT, (screen, buttons) -> { - //$$ if (screen instanceof PauseMenuScreen) { - //$$ show((PauseMenuScreen) screen); - //$$ } - //$$ }); } - //#else - @SubscribeEvent - public void onGuiInit(GuiScreenEvent.InitGuiEvent.Post event) { - if (getGui(event) instanceof GuiIngameMenu) { - show((GuiIngameMenu) getGui(event)); + { on(InitScreenCallback.EVENT, (screen, buttons) -> { + if (screen instanceof PauseMenuScreen) { + show((PauseMenuScreen) screen); } - } + }); } + //#else + //$$ @SubscribeEvent + //$$ public void onGuiInit(GuiScreenEvent.InitGuiEvent.Post event) { + //$$ if (getGui(event) instanceof GuiIngameMenu) { + //$$ show((GuiIngameMenu) getGui(event)); + //$$ } + //$$ } //#endif private void updateState() { @@ -88,7 +88,7 @@ public class GuiRecordingControls extends EventRegistrations { buttonPauseResume.setEnabled(!stopped); } - public void show(GuiIngameMenu gui) { + public void show(PauseMenuScreen gui) { VanillaGuiScreen.setup(gui).setLayout(new CustomLayout() { @Override protected void layout(GuiScreen container, int width, int height) { diff --git a/src/main/java/com/replaymod/recording/gui/GuiRecordingOverlay.java b/src/main/java/com/replaymod/recording/gui/GuiRecordingOverlay.java index 75d63e08..bbc86ca4 100644 --- a/src/main/java/com/replaymod/recording/gui/GuiRecordingOverlay.java +++ b/src/main/java/com/replaymod/recording/gui/GuiRecordingOverlay.java @@ -6,16 +6,16 @@ import com.replaymod.recording.Setting; import de.johni0702.minecraft.gui.GuiRenderer; import de.johni0702.minecraft.gui.MinecraftGuiRenderer; import de.johni0702.minecraft.gui.utils.EventRegistrations; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.FontRenderer; -import net.minecraft.client.resources.I18n; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.font.TextRenderer; +import net.minecraft.client.resource.language.I18n; //#if MC>=11400 -//$$ import de.johni0702.minecraft.gui.versions.callbacks.PostRenderHudCallback; +import de.johni0702.minecraft.gui.versions.callbacks.PostRenderHudCallback; //#else -import net.minecraftforge.client.event.RenderGameOverlayEvent; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.eventbus.api.SubscribeEvent; +//$$ import net.minecraftforge.client.event.RenderGameOverlayEvent; +//$$ import net.minecraftforge.common.MinecraftForge; +//$$ import net.minecraftforge.eventbus.api.SubscribeEvent; //#endif import static com.replaymod.core.ReplayMod.TEXTURE; @@ -30,11 +30,11 @@ import static com.replaymod.core.versions.MCVer.*; * Renders overlay during recording. */ public class GuiRecordingOverlay extends EventRegistrations { - private final Minecraft mc; + private final MinecraftClient mc; private final SettingsRegistry settingsRegistry; private final GuiRecordingControls guiControls; - public GuiRecordingOverlay(Minecraft mc, SettingsRegistry settingsRegistry, GuiRecordingControls guiControls) { + public GuiRecordingOverlay(MinecraftClient mc, SettingsRegistry settingsRegistry, GuiRecordingControls guiControls) { this.mc = mc; this.settingsRegistry = settingsRegistry; this.guiControls = guiControls; @@ -44,18 +44,18 @@ public class GuiRecordingOverlay extends EventRegistrations { * Render the recording icon and text in the top left corner of the screen. */ //#if MC>=11400 - //$$ { on(PostRenderHudCallback.EVENT, partialTicks -> renderRecordingIndicator()); } - //$$ private void renderRecordingIndicator() { + { on(PostRenderHudCallback.EVENT, partialTicks -> renderRecordingIndicator()); } + private void renderRecordingIndicator() { //#else - @SubscribeEvent - public void renderRecordingIndicator(RenderGameOverlayEvent.Post event) { - if (getType(event) != RenderGameOverlayEvent.ElementType.ALL) return; + //$$ @SubscribeEvent + //$$ public void renderRecordingIndicator(RenderGameOverlayEvent.Post event) { + //$$ if (getType(event) != RenderGameOverlayEvent.ElementType.ALL) return; //#endif if (guiControls.isStopped()) return; if (settingsRegistry.get(Setting.INDICATOR)) { - FontRenderer fontRenderer = mc.fontRenderer; - String text = guiControls.isPaused() ? I18n.format("replaymod.gui.paused") : I18n.format("replaymod.gui.recording"); - fontRenderer.drawString(text.toUpperCase(), 30, 18 - (fontRenderer.FONT_HEIGHT / 2), 0xffffffff); + TextRenderer fontRenderer = mc.textRenderer; + String text = guiControls.isPaused() ? I18n.translate("replaymod.gui.paused") : I18n.translate("replaymod.gui.recording"); + fontRenderer.draw(text.toUpperCase(), 30, 18 - (fontRenderer.fontHeight / 2), 0xffffffff); bindTexture(TEXTURE); enableAlpha(); GuiRenderer renderer = new MinecraftGuiRenderer(MCVer.newScaledResolution(mc)); diff --git a/src/main/java/com/replaymod/recording/handler/ConnectionEventHandler.java b/src/main/java/com/replaymod/recording/handler/ConnectionEventHandler.java index 34fe27cf..01a802a2 100755 --- a/src/main/java/com/replaymod/recording/handler/ConnectionEventHandler.java +++ b/src/main/java/com/replaymod/recording/handler/ConnectionEventHandler.java @@ -14,8 +14,8 @@ import com.replaymod.replaystudio.replay.ReplayMetaData; import com.replaymod.replaystudio.replay.ZipReplayFile; import com.replaymod.replaystudio.studio.ReplayStudio; import io.netty.channel.Channel; -import net.minecraft.client.Minecraft; -import net.minecraft.network.NetworkManager; +import net.minecraft.client.MinecraftClient; +import net.minecraft.network.ClientConnection; import org.apache.logging.log4j.Logger; //#if MC>=10800 @@ -40,7 +40,7 @@ public class ConnectionEventHandler { private static final String packetHandlerKey = "packet_handler"; private static final String DATE_FORMAT = "yyyy_MM_dd_HH_mm_ss"; private static final SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT); - private static final Minecraft mc = getMinecraft(); + private static final MinecraftClient mc = getMinecraft(); private final Logger logger; private final ReplayMod core; @@ -55,13 +55,13 @@ public class ConnectionEventHandler { this.core = core; } - public void onConnectedToServerEvent(NetworkManager networkManager) { + public void onConnectedToServerEvent(ClientConnection networkManager) { try { - boolean local = networkManager.isLocalChannel(); + boolean local = networkManager.isLocal(); if (local) { //#if MC>=10800 //#if MC>=11300 - if (mc.getIntegratedServer().getWorld(DimensionType.OVERWORLD).getWorldType() == WorldType_DEBUG_ALL_BLOCK_STATES) { + if (mc.getServer().getWorld(DimensionType.OVERWORLD).getGeneratorType() == WorldType_DEBUG_ALL_BLOCK_STATES) { //#else //$$ if (mc.getIntegratedServer().getEntityWorld().getWorldType() == WorldType_DEBUG_ALL_BLOCK_STATES) { //#endif @@ -82,9 +82,9 @@ public class ConnectionEventHandler { String worldName; if (local) { - worldName = mc.getIntegratedServer().getWorldName(); - } else if (mc.getCurrentServerData() != null) { - worldName = mc.getCurrentServerData().serverIP; + worldName = mc.getServer().getLevelName(); + } else if (mc.getCurrentServerEntry() != null) { + worldName = mc.getCurrentServerEntry().address; //#if MC>=11100 } else if (mc.isConnectedToRealms()) { // we can't access the server name without tapping too deep in the Realms Library diff --git a/src/main/java/com/replaymod/recording/handler/GuiHandler.java b/src/main/java/com/replaymod/recording/handler/GuiHandler.java index c923a996..9a922dec 100644 --- a/src/main/java/com/replaymod/recording/handler/GuiHandler.java +++ b/src/main/java/com/replaymod/recording/handler/GuiHandler.java @@ -8,18 +8,18 @@ import de.johni0702.minecraft.gui.container.VanillaGuiScreen; import de.johni0702.minecraft.gui.element.GuiCheckbox; import de.johni0702.minecraft.gui.layout.CustomLayout; import de.johni0702.minecraft.gui.utils.EventRegistrations; -import net.minecraft.client.gui.GuiMultiplayer; -import net.minecraft.client.gui.GuiWorldSelection; +import net.minecraft.client.gui.menu.MultiplayerScreen; +import net.minecraft.client.gui.menu.LevelSelectScreen; //#if MC>=11400 -//$$ import de.johni0702.minecraft.gui.versions.callbacks.InitScreenCallback; -//$$ import net.minecraft.client.gui.Screen; +import de.johni0702.minecraft.gui.versions.callbacks.InitScreenCallback; +import net.minecraft.client.gui.Screen; //#else -import net.minecraftforge.client.event.GuiScreenEvent; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.eventbus.api.SubscribeEvent; - -import static com.replaymod.core.versions.MCVer.getGui; +//$$ import net.minecraftforge.client.event.GuiScreenEvent; +//$$ import net.minecraftforge.common.MinecraftForge; +//$$ import net.minecraftforge.eventbus.api.SubscribeEvent; +//$$ +//$$ import static com.replaymod.core.versions.MCVer.getGui; //#endif public class GuiHandler extends EventRegistrations { @@ -31,15 +31,15 @@ public class GuiHandler extends EventRegistrations { } //#if MC>=11400 - //$$ { on(InitScreenCallback.EVENT, (screen, buttons) -> onGuiInit(screen)); } - //$$ private void onGuiInit(Screen gui) { + { on(InitScreenCallback.EVENT, (screen, buttons) -> onGuiInit(screen)); } + private void onGuiInit(Screen gui) { //#else - @SubscribeEvent - public void onGuiInit(GuiScreenEvent.InitGuiEvent.Post event) { - net.minecraft.client.gui.GuiScreen gui = getGui(event); + //$$ @SubscribeEvent + //$$ public void onGuiInit(GuiScreenEvent.InitGuiEvent.Post event) { + //$$ net.minecraft.client.gui.GuiScreen gui = getGui(event); //#endif - if (gui instanceof GuiWorldSelection || gui instanceof GuiMultiplayer) { - boolean sp = gui instanceof GuiWorldSelection; + if (gui instanceof LevelSelectScreen || gui instanceof MultiplayerScreen) { + boolean sp = gui instanceof LevelSelectScreen; SettingsRegistry settingsRegistry = mod.getSettingsRegistry(); Setting setting = sp ? Setting.RECORD_SINGLEPLAYER : Setting.RECORD_SERVER; diff --git a/src/main/java/com/replaymod/recording/handler/RecordingEventHandler.java b/src/main/java/com/replaymod/recording/handler/RecordingEventHandler.java index d3529fcc..e5509f32 100755 --- a/src/main/java/com/replaymod/recording/handler/RecordingEventHandler.java +++ b/src/main/java/com/replaymod/recording/handler/RecordingEventHandler.java @@ -3,32 +3,32 @@ package com.replaymod.recording.handler; import com.replaymod.recording.mixin.IntegratedServerAccessor; import com.replaymod.recording.packet.PacketListener; import de.johni0702.minecraft.gui.utils.EventRegistrations; -import net.minecraft.client.Minecraft; -import net.minecraft.client.entity.EntityPlayerSP; -import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.network.ClientPlayerEntity; +import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.network.Packet; -import net.minecraft.network.play.server.*; +import net.minecraft.client.network.packet.*; import net.minecraft.server.integrated.IntegratedServer; // FIXME not (yet?) 1.13 import net.minecraftforge.event.entity.minecart.MinecartInteractEvent; //#if MC>=11400 -//$$ import com.replaymod.core.events.PreRenderCallback; -//$$ import de.johni0702.minecraft.gui.versions.callbacks.PreTickCallback; +import com.replaymod.core.events.PreRenderCallback; +import de.johni0702.minecraft.gui.versions.callbacks.PreTickCallback; //#else -import net.minecraftforge.event.entity.player.PlayerSleepInBedEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.common.gameevent.PlayerEvent.ItemPickupEvent; -import net.minecraftforge.fml.common.gameevent.TickEvent; +//$$ import net.minecraftforge.event.entity.player.PlayerSleepInBedEvent; +//$$ import net.minecraftforge.eventbus.api.SubscribeEvent; +//$$ import net.minecraftforge.fml.common.gameevent.PlayerEvent.ItemPickupEvent; +//$$ import net.minecraftforge.fml.common.gameevent.TickEvent; //#endif //#if MC>=10904 import com.replaymod.recording.mixin.EntityLivingBaseAccessor; -import net.minecraft.inventory.EntityEquipmentSlot; -import net.minecraft.network.datasync.EntityDataManager; -import net.minecraft.util.EnumHand; -import net.minecraft.util.SoundCategory; -import net.minecraft.util.SoundEvent; +import net.minecraft.entity.EquipmentSlot; +import net.minecraft.entity.data.DataTracker; +import net.minecraft.util.Hand; +import net.minecraft.sound.SoundCategory; +import net.minecraft.sound.SoundEvent; //#endif //#if MC>=10800 @@ -43,7 +43,7 @@ import static com.replaymod.core.versions.MCVer.*; public class RecordingEventHandler extends EventRegistrations { - private final Minecraft mc = getMinecraft(); + private final MinecraftClient mc = getMinecraft(); private final PacketListener packetListener; private Double lastX, lastY, lastZ; @@ -54,7 +54,7 @@ public class RecordingEventHandler extends EventRegistrations { private Integer rotationYawHeadBefore; //#if MC>=10904 private boolean wasHandActive; - private EnumHand lastActiveHand; + private Hand lastActiveHand; //#endif public RecordingEventHandler(PacketListener packetListener) { @@ -64,13 +64,13 @@ public class RecordingEventHandler extends EventRegistrations { @Override public void register() { super.register(); - ((RecordingEventSender) mc.renderGlobal).setRecordingEventHandler(this); + ((RecordingEventSender) mc.worldRenderer).setRecordingEventHandler(this); } @Override public void unregister() { super.unregister(); - RecordingEventSender recordingEventSender = ((RecordingEventSender) mc.renderGlobal); + RecordingEventSender recordingEventSender = ((RecordingEventSender) mc.worldRenderer); if (recordingEventSender.getRecordingEventHandler() == this) { recordingEventSender.setRecordingEventHandler(null); } @@ -84,7 +84,7 @@ public class RecordingEventHandler extends EventRegistrations { public void onPlayerJoin() { try { - packetListener.save(new SPacketSpawnPlayer(mc.player)); + packetListener.save(new PlayerSpawnS2CPacket(mc.player)); } catch(Exception e1) { e1.printStackTrace(); } @@ -92,7 +92,7 @@ public class RecordingEventHandler extends EventRegistrations { public void onPlayerRespawn() { try { - packetListener.save(new SPacketSpawnPlayer(mc.player)); + packetListener.save(new PlayerSpawnS2CPacket(mc.player)); lastX = lastY = lastZ = null; } catch(Exception e) { e.printStackTrace(); @@ -104,7 +104,7 @@ public class RecordingEventHandler extends EventRegistrations { double x, double y, double z, float volume, float pitch) { try { // Send to all other players in ServerWorldEventHandler#playSoundToAllNearExcept - packetListener.save(new SPacketSoundEffect(sound, category, x, y, z, volume, pitch)); + packetListener.save(new PlaySoundS2CPacket(sound, category, x, y, z, volume, pitch)); } catch(Exception e) { e.printStackTrace(); } @@ -113,7 +113,7 @@ public class RecordingEventHandler extends EventRegistrations { public void onClientEffect(int type, BlockPos pos, int data) { try { // Send to all other players in ServerWorldEventHandler#playEvent - packetListener.save(new SPacketEffect(type, pos, data, false)); + packetListener.save(new WorldEventS2CPacket(type, pos, data, false)); } catch(Exception e) { e.printStackTrace(); } @@ -121,23 +121,23 @@ public class RecordingEventHandler extends EventRegistrations { //#endif //#if MC>=11400 - //$$ { on(PreTickCallback.EVENT, this::onPlayerTick); } - //$$ private void onPlayerTick() { - //$$ if (mc.player == null) return; + { on(PreTickCallback.EVENT, this::onPlayerTick); } + private void onPlayerTick() { + if (mc.player == null) return; //#else - @SubscribeEvent - public void onPlayerTick(TickEvent.PlayerTickEvent e) { - if(e.player != mc.player) return; + //$$ @SubscribeEvent + //$$ public void onPlayerTick(TickEvent.PlayerTickEvent e) { + //$$ if(e.player != mc.player) return; //#endif - EntityPlayerSP player = mc.player; + ClientPlayerEntity player = mc.player; try { boolean force = false; if(lastX == null || lastY == null || lastZ == null) { force = true; - lastX = player.posX; - lastY = player.posY; - lastZ = player.posZ; + lastX = player.x; + lastY = player.y; + lastZ = player.z; } ticksSinceLastCorrection++; @@ -146,18 +146,18 @@ public class RecordingEventHandler extends EventRegistrations { force = true; } - double dx = player.posX - lastX; - double dy = player.posY - lastY; - double dz = player.posZ - lastZ; + double dx = player.x - lastX; + double dy = player.y - lastY; + double dz = player.z - lastZ; - lastX = player.posX; - lastY = player.posY; - lastZ = player.posZ; + lastX = player.x; + lastY = player.y; + lastZ = player.z; Packet packet; if (force || Math.abs(dx) > 8.0 || Math.abs(dy) > 8.0 || Math.abs(dz) > 8.0) { //#if MC>=10800 - packet = new SPacketEntityTeleport(player); + packet = new EntityPositionS2CPacket(player); //#else //$$ // In 1.7.10 the client player entity has its posY at eye height //$$ // but for all other entities it's at their feet (as it should be). @@ -175,11 +175,11 @@ public class RecordingEventHandler extends EventRegistrations { //$$ ); //#endif } else { - byte newYaw = (byte) ((int) (player.rotationYaw * 256.0F / 360.0F)); - byte newPitch = (byte) ((int) (player.rotationPitch * 256.0F / 360.0F)); + byte newYaw = (byte) ((int) (player.yaw * 256.0F / 360.0F)); + byte newPitch = (byte) ((int) (player.pitch * 256.0F / 360.0F)); //#if MC>=10904 - packet = new SPacketEntity.Move( + packet = new EntityS2CPacket.RotateAndMoveRelative( player.getEntityId(), (short) Math.round(dx * 4096), (short) Math.round(dy * 4096), (short) Math.round(dz * 4096), newYaw, newPitch, player.onGround @@ -198,28 +198,28 @@ public class RecordingEventHandler extends EventRegistrations { packetListener.save(packet); //HEAD POS - int rotationYawHead = ((int)(player.rotationYawHead * 256.0F / 360.0F)); + int rotationYawHead = ((int)(player.headYaw * 256.0F / 360.0F)); if(!Objects.equals(rotationYawHead, rotationYawHeadBefore)) { - packetListener.save(new SPacketEntityHeadLook(player, (byte) rotationYawHead)); + packetListener.save(new EntitySetHeadYawS2CPacket(player, (byte) rotationYawHead)); rotationYawHeadBefore = rotationYawHead; } - packetListener.save(new SPacketEntityVelocity(player.getEntityId(), + packetListener.save(new EntityVelocityUpdateS2CPacket(player.getEntityId(), //#if MC>=11400 - //$$ player.getVelocity() + player.getVelocity() //#else - player.motionX, player.motionY, player.motionZ + //$$ player.motionX, player.motionY, player.motionZ //#endif )); //Animation Packets //Swing Animation - if (player.isSwingInProgress && player.swingProgressInt == -1) { - packetListener.save(new SPacketAnimation( + if (player.isHandSwinging && player.handSwingTicks == -1) { + packetListener.save(new EntityAnimationS2CPacket( player, //#if MC>=10904 - player.swingingHand == EnumHand.MAIN_HAND ? 0 : 3 + player.preferredHand == Hand.MAIN ? 0 : 3 //#else //$$ 0 //#endif @@ -248,34 +248,34 @@ public class RecordingEventHandler extends EventRegistrations { //Inventory Handling //#if MC>=10904 - if (playerItems[0] != player.getHeldItem(EnumHand.MAIN_HAND)) { - playerItems[0] = player.getHeldItem(EnumHand.MAIN_HAND); - packetListener.save(new SPacketEntityEquipment(player.getEntityId(), EntityEquipmentSlot.MAINHAND, playerItems[0])); + if (playerItems[0] != player.getStackInHand(Hand.MAIN)) { + playerItems[0] = player.getStackInHand(Hand.MAIN); + packetListener.save(new EntityEquipmentUpdateS2CPacket(player.getEntityId(), EquipmentSlot.HAND_MAIN, playerItems[0])); } - if (playerItems[1] != player.getHeldItem(EnumHand.OFF_HAND)) { - playerItems[1] = player.getHeldItem(EnumHand.OFF_HAND); - packetListener.save(new SPacketEntityEquipment(player.getEntityId(), EntityEquipmentSlot.OFFHAND, playerItems[1])); + if (playerItems[1] != player.getStackInHand(Hand.OFF)) { + playerItems[1] = player.getStackInHand(Hand.OFF); + packetListener.save(new EntityEquipmentUpdateS2CPacket(player.getEntityId(), EquipmentSlot.HAND_OFF, playerItems[1])); } - if (playerItems[2] != player.getItemStackFromSlot(EntityEquipmentSlot.FEET)) { - playerItems[2] = player.getItemStackFromSlot(EntityEquipmentSlot.FEET); - packetListener.save(new SPacketEntityEquipment(player.getEntityId(), EntityEquipmentSlot.FEET, playerItems[2])); + if (playerItems[2] != player.getEquippedStack(EquipmentSlot.FEET)) { + playerItems[2] = player.getEquippedStack(EquipmentSlot.FEET); + packetListener.save(new EntityEquipmentUpdateS2CPacket(player.getEntityId(), EquipmentSlot.FEET, playerItems[2])); } - if (playerItems[3] != player.getItemStackFromSlot(EntityEquipmentSlot.LEGS)) { - playerItems[3] = player.getItemStackFromSlot(EntityEquipmentSlot.LEGS); - packetListener.save(new SPacketEntityEquipment(player.getEntityId(), EntityEquipmentSlot.LEGS, playerItems[3])); + if (playerItems[3] != player.getEquippedStack(EquipmentSlot.LEGS)) { + playerItems[3] = player.getEquippedStack(EquipmentSlot.LEGS); + packetListener.save(new EntityEquipmentUpdateS2CPacket(player.getEntityId(), EquipmentSlot.LEGS, playerItems[3])); } - if (playerItems[4] != player.getItemStackFromSlot(EntityEquipmentSlot.CHEST)) { - playerItems[4] = player.getItemStackFromSlot(EntityEquipmentSlot.CHEST); - packetListener.save(new SPacketEntityEquipment(player.getEntityId(), EntityEquipmentSlot.CHEST, playerItems[4])); + if (playerItems[4] != player.getEquippedStack(EquipmentSlot.CHEST)) { + playerItems[4] = player.getEquippedStack(EquipmentSlot.CHEST); + packetListener.save(new EntityEquipmentUpdateS2CPacket(player.getEntityId(), EquipmentSlot.CHEST, playerItems[4])); } - if (playerItems[5] != player.getItemStackFromSlot(EntityEquipmentSlot.HEAD)) { - playerItems[5] = player.getItemStackFromSlot(EntityEquipmentSlot.HEAD); - packetListener.save(new SPacketEntityEquipment(player.getEntityId(), EntityEquipmentSlot.HEAD, playerItems[5])); + if (playerItems[5] != player.getEquippedStack(EquipmentSlot.HEAD)) { + playerItems[5] = player.getEquippedStack(EquipmentSlot.HEAD); + packetListener.save(new EntityEquipmentUpdateS2CPacket(player.getEntityId(), EquipmentSlot.HEAD, playerItems[5])); } //#else //$$ if(playerItems[0] != mc.thePlayer.getHeldItem()) { @@ -311,14 +311,14 @@ public class RecordingEventHandler extends EventRegistrations { //Leaving Ride - if((!player.isPassenger() && lastRiding != -1) || - (player.isPassenger() && lastRiding != getRiddenEntity(player).getEntityId())) { - if(!player.isPassenger()) { + if((!player.isRiding() && lastRiding != -1) || + (player.isRiding() && lastRiding != getRiddenEntity(player).getEntityId())) { + if(!player.isRiding()) { lastRiding = -1; } else { lastRiding = getRiddenEntity(player).getEntityId(); } - packetListener.save(new SPacketEntityAttach( + packetListener.save(new EntityAttachS2CPacket( //#if MC<10904 //$$ 0, //#endif @@ -327,24 +327,24 @@ public class RecordingEventHandler extends EventRegistrations { } //Sleeping - if(!player.isPlayerSleeping() && wasSleeping) { - packetListener.save(new SPacketAnimation(player, 2)); + if(!player.isSleeping() && wasSleeping) { + packetListener.save(new EntityAnimationS2CPacket(player, 2)); wasSleeping = false; } //#if MC>=10904 // Active hand (e.g. eating, drinking, blocking) - if (player.isHandActive() ^ wasHandActive || player.getActiveHand() != lastActiveHand) { - wasHandActive = player.isHandActive(); + if (player.isUsingItem() ^ wasHandActive || player.getActiveHand() != lastActiveHand) { + wasHandActive = player.isUsingItem(); lastActiveHand = player.getActiveHand(); - EntityDataManager dataManager = new EntityDataManager(null); - int state = (wasHandActive ? 1 : 0) | (lastActiveHand == EnumHand.OFF_HAND ? 2 : 0); + DataTracker dataManager = new DataTracker(null); + int state = (wasHandActive ? 1 : 0) | (lastActiveHand == Hand.OFF ? 2 : 0); //#if MC>=11300 - dataManager.register(EntityLivingBaseAccessor.getLivingFlags(), (byte) state); + dataManager.startTracking(EntityLivingBaseAccessor.getLivingFlags(), (byte) state); //#else //$$ dataManager.register(EntityLivingBaseAccessor.getLivingFlags(), (byte) state); //#endif - packetListener.save(new SPacketEntityMetadata(player.getEntityId(), dataManager, true)); + packetListener.save(new EntityTrackerUpdateS2CPacket(player.getEntityId(), dataManager, true)); } //#endif @@ -354,20 +354,20 @@ public class RecordingEventHandler extends EventRegistrations { } //#if MC>=11400 - //$$ // FIXME fabric + // FIXME fabric //#else - @SubscribeEvent - public void onPickupItem(ItemPickupEvent event) { - try { + //$$ @SubscribeEvent + //$$ public void onPickupItem(ItemPickupEvent event) { + //$$ try { //#if MC>=11100 //#if MC>=11200 //#if MC>=11300 - ItemStack stack = event.getStack(); - packetListener.save(new SPacketCollectItem( - event.getOriginalEntity().getEntityId(), - event.getPlayer().getEntityId(), - event.getStack().getCount() - )); + //$$ ItemStack stack = event.getStack(); + //$$ packetListener.save(new SPacketCollectItem( + //$$ event.getOriginalEntity().getEntityId(), + //$$ event.getPlayer().getEntityId(), + //$$ event.getStack().getCount() + //$$ )); //#else //$$ packetListener.save(new SPacketCollectItem(event.pickedUp.getEntityId(), event.player.getEntityId(), //$$ event.pickedUp.getItem().getMaxStackSize())); @@ -379,24 +379,24 @@ public class RecordingEventHandler extends EventRegistrations { //#else //$$ packetListener.save(new SPacketCollectItem(event.pickedUp.getEntityId(), event.player.getEntityId())); //#endif - } catch(Exception e) { - e.printStackTrace(); - } - } + //$$ } catch(Exception e) { + //$$ e.printStackTrace(); + //$$ } + //$$ } //#endif //#if MC>=11400 - //$$ // FIXME fabric + // FIXME fabric //#else - @SubscribeEvent - public void onSleep(PlayerSleepInBedEvent event) { - try { + //$$ @SubscribeEvent + //$$ public void onSleep(PlayerSleepInBedEvent event) { + //$$ try { //#if MC>=10904 - if (event.getEntityPlayer() != mc.player) { - return; - } - - packetListener.save(new SPacketUseBed(event.getEntityPlayer(), event.getPos())); + //$$ if (event.getEntityPlayer() != mc.player) { + //$$ return; + //$$ } + //$$ + //$$ packetListener.save(new SPacketUseBed(event.getEntityPlayer(), event.getPos())); //#else //$$ if (event.entityPlayer != mc.thePlayer) { //$$ return; @@ -410,13 +410,13 @@ public class RecordingEventHandler extends EventRegistrations { //#endif //$$ )); //#endif - - wasSleeping = true; - - } catch(Exception e) { - e.printStackTrace(); - } - } + //$$ + //$$ wasSleeping = true; + //$$ + //$$ } catch(Exception e) { + //$$ e.printStackTrace(); + //$$ } + //$$ } //#endif /* FIXME event not (yet?) on 1.13 @@ -451,9 +451,9 @@ public class RecordingEventHandler extends EventRegistrations { //#else //$$ public void onBlockBreakAnim(int breakerId, int x, int y, int z, int progress) { //#endif - EntityPlayer thePlayer = mc.player; + PlayerEntity thePlayer = mc.player; if (thePlayer != null && breakerId == thePlayer.getEntityId()) { - packetListener.save(new SPacketBlockBreakAnim(breakerId, + packetListener.save(new BlockBreakingProgressS2CPacket(breakerId, //#if MC>=10800 pos, //#else @@ -464,15 +464,15 @@ public class RecordingEventHandler extends EventRegistrations { } //#if MC>=11400 - //$$ { on(PreRenderCallback.EVENT, this::checkForGamePaused); } - //$$ private void checkForGamePaused() { + { on(PreRenderCallback.EVENT, this::checkForGamePaused); } + private void checkForGamePaused() { //#else - @SubscribeEvent - public void checkForGamePaused(TickEvent.RenderTickEvent event) { - if (event.phase != TickEvent.Phase.START) return; + //$$ @SubscribeEvent + //$$ public void checkForGamePaused(TickEvent.RenderTickEvent event) { + //$$ if (event.phase != TickEvent.Phase.START) return; //#endif if (mc.isIntegratedServerRunning()) { - IntegratedServer server = mc.getIntegratedServer(); + IntegratedServer server = mc.getServer(); if (server != null && ((IntegratedServerAccessor) server).isGamePaused()) { packetListener.setServerWasPaused(); } diff --git a/src/main/java/com/replaymod/recording/mixin/EntityLivingBaseAccessor.java b/src/main/java/com/replaymod/recording/mixin/EntityLivingBaseAccessor.java index db4bdbfe..20b07a78 100644 --- a/src/main/java/com/replaymod/recording/mixin/EntityLivingBaseAccessor.java +++ b/src/main/java/com/replaymod/recording/mixin/EntityLivingBaseAccessor.java @@ -1,21 +1,21 @@ package com.replaymod.recording.mixin; -import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.LivingEntity; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Accessor; import javax.annotation.Nonnull; //#if MC>=10904 -import net.minecraft.network.datasync.DataParameter; +import net.minecraft.entity.data.TrackedData; //#endif -@Mixin(EntityLivingBase.class) +@Mixin(LivingEntity.class) public interface EntityLivingBaseAccessor { //#if MC>=10904 @Accessor("LIVING_FLAGS") @Nonnull @SuppressWarnings("ConstantConditions") - static DataParameter getLivingFlags() { return null; } + static TrackedData getLivingFlags() { return null; } //#endif } diff --git a/src/main/java/com/replaymod/recording/mixin/IntegratedServerAccessor.java b/src/main/java/com/replaymod/recording/mixin/IntegratedServerAccessor.java index 9d7ce53f..97adbdb2 100644 --- a/src/main/java/com/replaymod/recording/mixin/IntegratedServerAccessor.java +++ b/src/main/java/com/replaymod/recording/mixin/IntegratedServerAccessor.java @@ -6,6 +6,6 @@ import org.spongepowered.asm.mixin.gen.Accessor; @Mixin(IntegratedServer.class) public interface IntegratedServerAccessor { - @Accessor("isGamePaused") + @Accessor("field_5524") boolean isGamePaused(); } diff --git a/src/main/java/com/replaymod/recording/mixin/MixinDownloadingPackFinder.java b/src/main/java/com/replaymod/recording/mixin/MixinDownloadingPackFinder.java index c0283853..e549d32e 100644 --- a/src/main/java/com/replaymod/recording/mixin/MixinDownloadingPackFinder.java +++ b/src/main/java/com/replaymod/recording/mixin/MixinDownloadingPackFinder.java @@ -3,7 +3,7 @@ package com.replaymod.recording.mixin; import com.replaymod.recording.packet.ResourcePackRecorder; import de.johni0702.minecraft.gui.utils.Consumer; -import net.minecraft.client.resources.DownloadingPackFinder; +import net.minecraft.client.resource.ClientResourcePackCreator; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -19,7 +19,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; //$$ import java.util.Map; //#endif -@Mixin(DownloadingPackFinder.class) +@Mixin(ClientResourcePackCreator.class) public abstract class MixinDownloadingPackFinder implements ResourcePackRecorder.IDownloadingPackFinder { private Consumer requestCallback; @@ -29,7 +29,7 @@ public abstract class MixinDownloadingPackFinder implements ResourcePackRecorder } //#if MC>=10800 - @Inject(method = "func_195741_a", at = @At("HEAD")) + @Inject(method = "loadServerPack", at = @At("HEAD")) private void recordDownloadedPack(File file, CallbackInfoReturnable ci) { if (requestCallback != null) { requestCallback.consume(file); diff --git a/src/main/java/com/replaymod/recording/mixin/MixinMouseHelper.java b/src/main/java/com/replaymod/recording/mixin/MixinMouseHelper.java index 19161397..0205076a 100644 --- a/src/main/java/com/replaymod/recording/mixin/MixinMouseHelper.java +++ b/src/main/java/com/replaymod/recording/mixin/MixinMouseHelper.java @@ -3,7 +3,7 @@ package com.replaymod.recording.mixin; import com.replaymod.replay.InputReplayTimer; import com.replaymod.replay.ReplayModReplay; -import net.minecraft.client.MouseHelper; +import net.minecraft.client.Mouse; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; @@ -11,22 +11,22 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.LocalCapture; -@Mixin(MouseHelper.class) +@Mixin(Mouse.class) public abstract class MixinMouseHelper { @Shadow - private boolean mouseGrabbed; + private boolean isCursorLocked; - @Inject(method = "grabMouse", at = @At("HEAD"), cancellable = true) + @Inject(method = "lockCursor", at = @At("HEAD"), cancellable = true) private void noGrab(CallbackInfo ci) { // Used to be provided by Forge for 1.12.2 and below if (Boolean.valueOf(System.getProperty("fml.noGrab", "false"))) { - this.mouseGrabbed = true; + this.isCursorLocked = true; ci.cancel(); } } - @Inject(method = "scrollCallback", - at = @At(value = "INVOKE", target = "Lnet/minecraft/client/entity/EntityPlayerSP;isSpectator()Z"), + @Inject(method = "onMouseScroll", + at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayerEntity;isSpectator()Z"), locals = LocalCapture.CAPTURE_FAILHARD, cancellable = true) private void handleReplayModScroll( @@ -34,9 +34,9 @@ public abstract class MixinMouseHelper { CallbackInfo ci, double _l1, //#if MC>=11400 - //$$ float yOffsetAccumulated + float yOffsetAccumulated //#else - double yOffsetAccumulated + //$$ double yOffsetAccumulated //#endif ) { if (ReplayModReplay.instance.getReplayHandler() != null) { diff --git a/src/main/java/com/replaymod/recording/mixin/MixinNetHandlerLoginClient.java b/src/main/java/com/replaymod/recording/mixin/MixinNetHandlerLoginClient.java index 5494b93d..4fe67613 100644 --- a/src/main/java/com/replaymod/recording/mixin/MixinNetHandlerLoginClient.java +++ b/src/main/java/com/replaymod/recording/mixin/MixinNetHandlerLoginClient.java @@ -1,8 +1,8 @@ package com.replaymod.recording.mixin; import com.replaymod.recording.ReplayModRecording; -import net.minecraft.client.network.NetHandlerLoginClient; -import net.minecraft.network.NetworkManager; +import net.minecraft.client.network.ClientLoginNetworkHandler; +import net.minecraft.network.ClientConnection; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; @@ -13,39 +13,39 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import com.replaymod.core.versions.MCVer; import com.replaymod.recording.handler.RecordingEventHandler.RecordingEventSender; import net.minecraft.network.Packet; -import net.minecraft.network.login.server.SPacketCustomPayloadLogin; -import net.minecraft.network.login.server.SPacketLoginSuccess; +import net.minecraft.client.network.packet.LoginQueryRequestS2CPacket; +import net.minecraft.client.network.packet.LoginSuccessS2CPacket; //#else //$$ import net.minecraftforge.fml.common.network.FMLNetworkEvent; //#endif -@Mixin(NetHandlerLoginClient.class) +@Mixin(ClientLoginNetworkHandler.class) public abstract class MixinNetHandlerLoginClient { @Shadow //#if MC>=10800 - private NetworkManager networkManager; + private ClientConnection connection; //#else //$$ private NetworkManager field_147393_d; //#endif //#if MC>=11300 - @Inject(method = "func_209521_a", at=@At("HEAD")) - private void earlyInitiateRecording(SPacketCustomPayloadLogin packet, CallbackInfo ci) { + @Inject(method = "onQueryRequest", at=@At("HEAD")) + private void earlyInitiateRecording(LoginQueryRequestS2CPacket packet, CallbackInfo ci) { initiateRecording(packet); } - @Inject(method = "handleLoginSuccess", at=@At("HEAD")) - private void lateInitiateRecording(SPacketLoginSuccess packet, CallbackInfo ci) { + @Inject(method = "onLoginSuccess", at=@At("HEAD")) + private void lateInitiateRecording(LoginSuccessS2CPacket packet, CallbackInfo ci) { initiateRecording(packet); } private void initiateRecording(Packet packet) { - RecordingEventSender eventSender = (RecordingEventSender) MCVer.getMinecraft().renderGlobal; + RecordingEventSender eventSender = (RecordingEventSender) MCVer.getMinecraft().worldRenderer; if (eventSender.getRecordingEventHandler() != null) { return; // already recording } - ReplayModRecording.instance.initiateRecording(this.networkManager); + ReplayModRecording.instance.initiateRecording(this.connection); if (eventSender.getRecordingEventHandler() != null) { eventSender.getRecordingEventHandler().onPacket(packet); } @@ -68,9 +68,9 @@ public abstract class MixinNetHandlerLoginClient { // Race condition in Forge's networking (not sure if still present in 1.13) //#if MC>=11200 && MC<11400 - @Inject(method = "handleLoginSuccess", at=@At("RETURN")) - public void replayModRecording_raceConditionWorkAround(CallbackInfo cb) { - ((NetworkManagerAccessor) this.networkManager).getChannel().config().setAutoRead(true); - } + //$$ @Inject(method = "handleLoginSuccess", at=@At("RETURN")) + //$$ public void replayModRecording_raceConditionWorkAround(CallbackInfo cb) { + //$$ ((NetworkManagerAccessor) this.networkManager).getChannel().config().setAutoRead(true); + //$$ } //#endif } diff --git a/src/main/java/com/replaymod/recording/mixin/MixinNetHandlerPlayClient.java b/src/main/java/com/replaymod/recording/mixin/MixinNetHandlerPlayClient.java index 586385a7..121a11b8 100644 --- a/src/main/java/com/replaymod/recording/mixin/MixinNetHandlerPlayClient.java +++ b/src/main/java/com/replaymod/recording/mixin/MixinNetHandlerPlayClient.java @@ -2,9 +2,9 @@ package com.replaymod.recording.mixin; import com.replaymod.core.versions.MCVer; import com.replaymod.recording.handler.RecordingEventHandler; -import net.minecraft.client.Minecraft; -import net.minecraft.client.network.NetHandlerPlayClient; -import net.minecraft.network.play.server.*; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.network.ClientPlayNetworkHandler; +import net.minecraft.client.network.packet.*; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; @@ -16,9 +16,9 @@ import com.github.steveice10.mc.protocol.packet.ingame.server.ServerPlayerListEn import com.github.steveice10.packetlib.io.buffer.ByteBufferNetInput; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; -import net.minecraft.network.PacketBuffer; -import net.minecraft.network.play.server.SPacketPlayerListItem; -import net.minecraft.client.network.NetworkPlayerInfo; +import net.minecraft.util.PacketByteBuf; +import net.minecraft.client.network.packet.PlayerListS2CPacket; +import net.minecraft.client.network.PlayerListEntry; import java.io.IOException; import java.nio.ByteBuffer; @@ -26,18 +26,18 @@ import java.util.Map; import java.util.UUID; //#endif -@Mixin(NetHandlerPlayClient.class) +@Mixin(ClientPlayNetworkHandler.class) public abstract class MixinNetHandlerPlayClient { - private static Minecraft gameController = MCVer.getMinecraft(); + private static MinecraftClient gameController = MCVer.getMinecraft(); //#if MC>=10800 @Shadow - private Map playerInfoMap; + private Map playerListEntries; //#endif public RecordingEventHandler getRecordingEventHandler() { - return ((RecordingEventHandler.RecordingEventSender) gameController.renderGlobal).getRecordingEventHandler(); + return ((RecordingEventHandler.RecordingEventSender) gameController.worldRenderer).getRecordingEventHandler(); } /** @@ -48,19 +48,19 @@ public abstract class MixinNetHandlerPlayClient { * @param ci Callback info */ //#if MC>=10800 - @Inject(method = "handlePlayerListItem", at=@At("HEAD")) - public void recordOwnJoin(SPacketPlayerListItem packet, CallbackInfo ci) { + @Inject(method = "onPlayerList", at=@At("HEAD")) + public void recordOwnJoin(PlayerListS2CPacket packet, CallbackInfo ci) { if (gameController.player == null) return; RecordingEventHandler handler = getRecordingEventHandler(); - if (handler != null && packet.getAction() == SPacketPlayerListItem.Action.ADD_PLAYER) { + if (handler != null && packet.getAction() == PlayerListS2CPacket.Action.ADD) { // We cannot reference SPacketPlayerListItem.AddPlayerData directly for complicated (and yet to be // resolved) reasons (see https://github.com/MinecraftForge/ForgeGradle/issues/472), so we "simply" convert // the back to the MCProtocolLib equivalent and deal with that one. ByteBuf byteBuf = Unpooled.buffer(); ServerPlayerListEntryPacket mcpl = new ServerPlayerListEntryPacket(null, null); try { - packet.writePacketData(new PacketBuffer(byteBuf)); + packet.write(new PacketByteBuf(byteBuf)); byteBuf.readerIndex(0); byte[] array = new byte[byteBuf.readableBytes()]; @@ -77,7 +77,7 @@ public abstract class MixinNetHandlerPlayClient { if (data.getProfile() == null || data.getProfile().getId() == null) continue; // Only add spawn packet for our own player and only if he isn't known yet if (data.getProfile().getId().equals(gameController.player.getGameProfile().getId()) - && !this.playerInfoMap.containsKey(data.getProfile().getId())) { + && !this.playerListEntries.containsKey(data.getProfile().getId())) { handler.onPlayerJoin(); } } @@ -100,8 +100,8 @@ public abstract class MixinNetHandlerPlayClient { * @param packet The packet * @param ci Callback info */ - @Inject(method = "handleRespawn", at=@At("RETURN")) - public void recordOwnRespawn(SPacketRespawn packet, CallbackInfo ci) { + @Inject(method = "onPlayerRespawn", at=@At("RETURN")) + public void recordOwnRespawn(PlayerRespawnS2CPacket packet, CallbackInfo ci) { RecordingEventHandler handler = getRecordingEventHandler(); if (handler != null) { handler.onPlayerRespawn(); diff --git a/src/main/java/com/replaymod/recording/mixin/MixinRenderGlobal.java b/src/main/java/com/replaymod/recording/mixin/MixinRenderGlobal.java index 6b5f44d5..eb0950ed 100644 --- a/src/main/java/com/replaymod/recording/mixin/MixinRenderGlobal.java +++ b/src/main/java/com/replaymod/recording/mixin/MixinRenderGlobal.java @@ -1,7 +1,7 @@ package com.replaymod.recording.mixin; import com.replaymod.recording.handler.RecordingEventHandler; -import net.minecraft.client.renderer.WorldRenderer; +import net.minecraft.client.render.WorldRenderer; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -27,7 +27,7 @@ public abstract class MixinRenderGlobal implements RecordingEventHandler.Recordi } //#if MC>=10800 - @Inject(method = "sendBlockBreakProgress", at = @At("HEAD")) + @Inject(method = "setBlockBreakingProgress", at = @At("HEAD")) //#else //$$ @Inject(method = "destroyBlockPartially", at = @At("HEAD")) //#endif diff --git a/src/main/java/com/replaymod/recording/mixin/MixinWorldClient.java b/src/main/java/com/replaymod/recording/mixin/MixinWorldClient.java index 0333c4d2..2d3bf882 100644 --- a/src/main/java/com/replaymod/recording/mixin/MixinWorldClient.java +++ b/src/main/java/com/replaymod/recording/mixin/MixinWorldClient.java @@ -2,15 +2,15 @@ package com.replaymod.recording.mixin; //#if MC>=10904 import com.replaymod.recording.handler.RecordingEventHandler; -import net.minecraft.client.Minecraft; -import net.minecraft.client.multiplayer.WorldClient; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.profiler.Profiler; -import net.minecraft.util.SoundCategory; -import net.minecraft.util.SoundEvent; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.world.ClientWorld; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.util.profiler.Profiler; +import net.minecraft.sound.SoundCategory; +import net.minecraft.sound.SoundEvent; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; -import net.minecraft.world.storage.WorldInfo; +import net.minecraft.world.level.LevelProperties; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; @@ -18,52 +18,52 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; //#if MC>=11400 -//$$ import net.minecraft.world.chunk.ChunkManager; -//$$ import net.minecraft.world.dimension.Dimension; -//$$ import net.minecraft.world.dimension.DimensionType; -//$$ import java.util.function.BiFunction; -//#else -import net.minecraft.world.storage.ISaveHandler; -//#if MC>=11300 +import net.minecraft.world.chunk.ChunkManager; import net.minecraft.world.dimension.Dimension; -import net.minecraft.world.storage.WorldSavedDataStorage; +import net.minecraft.world.dimension.DimensionType; +import java.util.function.BiFunction; +//#else +//$$ import net.minecraft.world.storage.ISaveHandler; +//#if MC>=11300 +//$$ import net.minecraft.world.dimension.Dimension; +//$$ import net.minecraft.world.storage.WorldSavedDataStorage; //#else //$$ import net.minecraft.world.WorldProvider; //#endif //#endif -@Mixin(WorldClient.class) +@Mixin(ClientWorld.class) public abstract class MixinWorldClient extends World implements RecordingEventHandler.RecordingEventSender { @Shadow - private Minecraft mc; + private MinecraftClient client; //#if MC>=11400 - //$$ protected MixinWorldClient(LevelProperties levelProperties_1, DimensionType dimensionType_1, BiFunction biFunction_1, Profiler profiler_1, boolean boolean_1) { - //$$ super(levelProperties_1, dimensionType_1, biFunction_1, profiler_1, boolean_1); - //$$ } + protected MixinWorldClient(LevelProperties levelProperties_1, DimensionType dimensionType_1, BiFunction biFunction_1, Profiler profiler_1, boolean boolean_1) { + super(levelProperties_1, dimensionType_1, biFunction_1, profiler_1, boolean_1); + } //#else - protected MixinWorldClient(ISaveHandler saveHandlerIn, + //$$ protected MixinWorldClient(ISaveHandler saveHandlerIn, //#if MC>=11300 - WorldSavedDataStorage mapStorage, + //$$ WorldSavedDataStorage mapStorage, //#endif - WorldInfo info, + //$$ WorldInfo info, //#if MC>=11300 - Dimension providerIn, + //$$ Dimension providerIn, //#else //$$ WorldProvider providerIn, //#endif - Profiler profilerIn, boolean client) { - super(saveHandlerIn, + //$$ Profiler profilerIn, boolean client) { + //$$ super(saveHandlerIn, //#if MC>=11300 - mapStorage, + //$$ mapStorage, //#endif - info, providerIn, profilerIn, client); - } + //$$ info, providerIn, profilerIn, client); + //$$ } //#endif private RecordingEventHandler replayModRecording_getRecordingEventHandler() { - return ((RecordingEventHandler.RecordingEventSender) mc.renderGlobal).getRecordingEventHandler(); + return ((RecordingEventHandler.RecordingEventSender) client.worldRenderer).getRecordingEventHandler(); } // Sounds that are emitted by thePlayer no longer take the long way over the server @@ -71,15 +71,15 @@ public abstract class MixinWorldClient extends World implements RecordingEventHa // other clients so we have to record them manually. // E.g. Block place sounds //#if MC>=11400 - //$$ @Inject(method = "playSound(Lnet/minecraft/entity/player/PlayerEntity;DDDLnet/minecraft/sound/SoundEvent;Lnet/minecraft/sound/SoundCategory;FF)V", - //$$ at = @At("HEAD")) - //#else - @Inject(method = "playSound(Lnet/minecraft/entity/player/EntityPlayer;DDDLnet/minecraft/util/SoundEvent;Lnet/minecraft/util/SoundCategory;FF)V", + @Inject(method = "playSound(Lnet/minecraft/entity/player/PlayerEntity;DDDLnet/minecraft/sound/SoundEvent;Lnet/minecraft/sound/SoundCategory;FF)V", at = @At("HEAD")) + //#else + //$$ @Inject(method = "playSound(Lnet/minecraft/entity/player/EntityPlayer;DDDLnet/minecraft/util/SoundEvent;Lnet/minecraft/util/SoundCategory;FF)V", + //$$ at = @At("HEAD")) //#endif - public void replayModRecording_recordClientSound(EntityPlayer player, double x, double y, double z, SoundEvent sound, SoundCategory category, + public void replayModRecording_recordClientSound(PlayerEntity player, double x, double y, double z, SoundEvent sound, SoundCategory category, float volume, float pitch, CallbackInfo ci) { - if (player == mc.player) { + if (player == client.player) { RecordingEventHandler handler = replayModRecording_getRecordingEventHandler(); if (handler != null) { handler.onClientSound(sound, category, x, y, z, volume, pitch); @@ -89,14 +89,14 @@ public abstract class MixinWorldClient extends World implements RecordingEventHa // Same goes for level events (also called effects). E.g. door open, block break, etc. //#if MC>=11400 - //$$ @Inject(method = "playLevelEvent", at = @At("HEAD")) - //$$ private void playLevelEvent (PlayerEntity player, int type, BlockPos pos, int data, CallbackInfo ci) { + @Inject(method = "playLevelEvent", at = @At("HEAD")) + private void playLevelEvent (PlayerEntity player, int type, BlockPos pos, int data, CallbackInfo ci) { //#else - // These are handled in the World class, so we override the method in WorldClient and add our special handling. - @Override - public void playEvent (EntityPlayer player, int type, BlockPos pos, int data) { + //$$ // These are handled in the World class, so we override the method in WorldClient and add our special handling. + //$$ @Override + //$$ public void playEvent (EntityPlayer player, int type, BlockPos pos, int data) { //#endif - if (player == mc.player) { + if (player == client.player) { // We caused this event, the server won't send it to us RecordingEventHandler handler = replayModRecording_getRecordingEventHandler(); if (handler != null) { @@ -104,7 +104,7 @@ public abstract class MixinWorldClient extends World implements RecordingEventHa } } //#if MC<11400 - super.playEvent(player, type, pos, data); + //$$ super.playEvent(player, type, pos, data); //#endif } } diff --git a/src/main/java/com/replaymod/recording/mixin/NetworkManagerAccessor.java b/src/main/java/com/replaymod/recording/mixin/NetworkManagerAccessor.java index 9c47cfaf..ec919023 100644 --- a/src/main/java/com/replaymod/recording/mixin/NetworkManagerAccessor.java +++ b/src/main/java/com/replaymod/recording/mixin/NetworkManagerAccessor.java @@ -1,11 +1,11 @@ package com.replaymod.recording.mixin; import io.netty.channel.Channel; -import net.minecraft.network.NetworkManager; +import net.minecraft.network.ClientConnection; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Accessor; -@Mixin(NetworkManager.class) +@Mixin(ClientConnection.class) public interface NetworkManagerAccessor { @Accessor Channel getChannel(); diff --git a/src/main/java/com/replaymod/recording/mixin/SPacketSpawnMobAccessor.java b/src/main/java/com/replaymod/recording/mixin/SPacketSpawnMobAccessor.java index 778822af..e0a65717 100644 --- a/src/main/java/com/replaymod/recording/mixin/SPacketSpawnMobAccessor.java +++ b/src/main/java/com/replaymod/recording/mixin/SPacketSpawnMobAccessor.java @@ -1,14 +1,14 @@ package com.replaymod.recording.mixin; -import net.minecraft.network.datasync.EntityDataManager; -import net.minecraft.network.play.server.SPacketSpawnMob; +import net.minecraft.entity.data.DataTracker; +import net.minecraft.client.network.packet.MobSpawnS2CPacket; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Accessor; -@Mixin(SPacketSpawnMob.class) +@Mixin(MobSpawnS2CPacket.class) public interface SPacketSpawnMobAccessor { - @Accessor - EntityDataManager getDataManager(); - @Accessor - void setDataManager(EntityDataManager value); + @Accessor("dataTracker") + DataTracker getDataManager(); + @Accessor("dataTracker") + void setDataManager(DataTracker value); } diff --git a/src/main/java/com/replaymod/recording/mixin/SPacketSpawnPlayerAccessor.java b/src/main/java/com/replaymod/recording/mixin/SPacketSpawnPlayerAccessor.java index 4426ec3c..10af34f3 100644 --- a/src/main/java/com/replaymod/recording/mixin/SPacketSpawnPlayerAccessor.java +++ b/src/main/java/com/replaymod/recording/mixin/SPacketSpawnPlayerAccessor.java @@ -1,14 +1,14 @@ package com.replaymod.recording.mixin; -import net.minecraft.network.datasync.EntityDataManager; -import net.minecraft.network.play.server.SPacketSpawnPlayer; +import net.minecraft.entity.data.DataTracker; +import net.minecraft.client.network.packet.PlayerSpawnS2CPacket; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Accessor; -@Mixin(SPacketSpawnPlayer.class) +@Mixin(PlayerSpawnS2CPacket.class) public interface SPacketSpawnPlayerAccessor { - @Accessor("watcher") - EntityDataManager getDataManager(); - @Accessor("watcher") - void setDataManager(EntityDataManager value); + @Accessor("dataTracker") + DataTracker getDataManager(); + @Accessor("dataTracker") + void setDataManager(DataTracker value); } diff --git a/src/main/java/com/replaymod/recording/packet/PacketListener.java b/src/main/java/com/replaymod/recording/packet/PacketListener.java index e4e44e0c..d04ac0f7 100755 --- a/src/main/java/com/replaymod/recording/packet/PacketListener.java +++ b/src/main/java/com/replaymod/recording/packet/PacketListener.java @@ -17,22 +17,22 @@ import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelInboundHandlerAdapter; -import net.minecraft.client.Minecraft; +import net.minecraft.client.MinecraftClient; import net.minecraft.entity.Entity; -import net.minecraft.network.EnumConnectionState; +import net.minecraft.network.NetworkState; import net.minecraft.network.Packet; -import net.minecraft.network.PacketBuffer; -import net.minecraft.network.play.server.*; -import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.PacketByteBuf; +import net.minecraft.client.network.packet.*; +import net.minecraft.text.StringTextComponent; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; //#if MC>=11300 -import net.minecraft.network.login.server.SPacketLoginSuccess; +import net.minecraft.client.network.packet.LoginSuccessS2CPacket; //#endif //#if MC>=10904 -import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.entity.data.DataTracker; //#else //$$ import net.minecraft.entity.DataWatcher; //$$ @@ -40,7 +40,7 @@ import net.minecraft.network.datasync.EntityDataManager; //#endif //#if MC>=10800 -import net.minecraft.network.EnumPacketDirection; +import net.minecraft.network.NetworkSide; //#if MC<11300 //$$ import net.minecraftforge.fml.common.network.internal.FMLProxyPacket; //#endif @@ -64,7 +64,7 @@ import static com.replaymod.core.versions.MCVer.*; public class PacketListener extends ChannelInboundHandlerAdapter { - private static final Minecraft mc = getMinecraft(); + private static final MinecraftClient mc = getMinecraft(); private static final Logger logger = LogManager.getLogger(); private final ReplayMod core; @@ -85,7 +85,7 @@ public class PacketListener extends ChannelInboundHandlerAdapter { private long timePassedWhilePaused; private volatile boolean serverWasPaused; //#if MC>=11300 - private EnumConnectionState connectionState = EnumConnectionState.LOGIN; + private NetworkState connectionState = NetworkState.LOGIN; //#else //$$ private EnumConnectionState connectionState = EnumConnectionState.PLAY; //#endif @@ -126,9 +126,9 @@ public class PacketListener extends ChannelInboundHandlerAdapter { public void save(Packet packet) { try { - if(packet instanceof SPacketSpawnPlayer) { + if(packet instanceof PlayerSpawnS2CPacket) { //#if MC>=10800 - UUID uuid = ((SPacketSpawnPlayer) packet).getUniqueId(); + UUID uuid = ((PlayerSpawnS2CPacket) packet).getPlayerUuid(); //#else //$$ UUID uuid = ((S0CPacketSpawnPlayer) packet).func_148948_e().getId(); //#endif @@ -164,8 +164,8 @@ public class PacketListener extends ChannelInboundHandlerAdapter { }); //#if MC>=11300 - if (packet instanceof SPacketLoginSuccess) { - connectionState = EnumConnectionState.PLAY; + if (packet instanceof LoginSuccessS2CPacket) { + connectionState = NetworkState.PLAY; } //#endif } catch(Exception e) { @@ -229,9 +229,9 @@ public class PacketListener extends ChannelInboundHandlerAdapter { Packet packet = (Packet) msg; //#if MC>=10904 - if(packet instanceof SPacketCollectItem) { + if(packet instanceof ItemPickupAnimationS2CPacket) { if(mc.player != null || - ((SPacketCollectItem) packet).getEntityID() == mc.player.getEntityId()) { + ((ItemPickupAnimationS2CPacket) packet).getEntityId() == mc.player.getEntityId()) { //#else //$$ if(packet instanceof S0DPacketCollectItem) { //$$ if(mc.thePlayer != null || @@ -247,8 +247,8 @@ public class PacketListener extends ChannelInboundHandlerAdapter { } //#if MC>=10800 - if (packet instanceof SPacketResourcePackSend) { - save(resourcePackRecorder.handleResourcePack((SPacketResourcePackSend) packet)); + if (packet instanceof ResourcePackSendS2CPacket) { + save(resourcePackRecorder.handleResourcePack((ResourcePackSendS2CPacket) packet)); return; } //#else @@ -276,10 +276,10 @@ public class PacketListener extends ChannelInboundHandlerAdapter { save(packet); - if (packet instanceof SPacketCustomPayload) { - SPacketCustomPayload p = (SPacketCustomPayload) packet; - if (Restrictions.PLUGIN_CHANNEL.equals(p.getChannelName())) { - packet = new SPacketDisconnect(new TextComponentString("Please update to view this replay.")); + if (packet instanceof CustomPayloadS2CPacket) { + CustomPayloadS2CPacket p = (CustomPayloadS2CPacket) packet; + if (Restrictions.PLUGIN_CHANNEL.equals(p.getChannel())) { + packet = new DisconnectS2CPacket(new StringTextComponent("Please update to view this replay.")); save(packet); } } @@ -293,21 +293,21 @@ public class PacketListener extends ChannelInboundHandlerAdapter { } //#if MC>=10904 - private void DataManager_set(EntityDataManager dataManager, EntityDataManager.DataEntry entry) { - dataManager.register(entry.getKey(), entry.getValue()); + private void DataManager_set(DataTracker dataManager, DataTracker.Entry entry) { + dataManager.startTracking(entry.getData(), entry.get()); } //#endif @SuppressWarnings("unchecked") private byte[] getPacketData(Packet packet) throws Exception { - if (packet instanceof SPacketSpawnMob) { - SPacketSpawnMob p = (SPacketSpawnMob) packet; + if (packet instanceof MobSpawnS2CPacket) { + MobSpawnS2CPacket p = (MobSpawnS2CPacket) packet; SPacketSpawnMobAccessor pa = (SPacketSpawnMobAccessor) p; if (pa.getDataManager() == null) { - pa.setDataManager(new EntityDataManager(null)); - if (p.getDataManagerEntries() != null) { + pa.setDataManager(new DataTracker(null)); + if (p.getTrackedValues() != null) { //#if MC>=10904 - for (EntityDataManager.DataEntry entry : p.getDataManagerEntries()) { + for (DataTracker.Entry entry : p.getTrackedValues()) { DataManager_set(pa.getDataManager(), entry); } //#else @@ -319,14 +319,14 @@ public class PacketListener extends ChannelInboundHandlerAdapter { } } - if (packet instanceof SPacketSpawnPlayer) { - SPacketSpawnPlayer p = (SPacketSpawnPlayer) packet; + if (packet instanceof PlayerSpawnS2CPacket) { + PlayerSpawnS2CPacket p = (PlayerSpawnS2CPacket) packet; SPacketSpawnPlayerAccessor pa = (SPacketSpawnPlayerAccessor) p; if (pa.getDataManager() == null) { - pa.setDataManager(new EntityDataManager(null)); - if (p.getDataManagerEntries() != null) { + pa.setDataManager(new DataTracker(null)); + if (p.getTrackedValues() != null) { //#if MC>=10904 - for (EntityDataManager.DataEntry entry : p.getDataManagerEntries()) { + for (DataTracker.Entry entry : p.getTrackedValues()) { DataManager_set(pa.getDataManager(), entry); } //#else @@ -339,7 +339,7 @@ public class PacketListener extends ChannelInboundHandlerAdapter { } //#if MC>=10800 - Integer packetId = connectionState.getPacketId(EnumPacketDirection.CLIENTBOUND, packet); + Integer packetId = connectionState.getPacketId(NetworkSide.CLIENT, packet); //#else //$$ Integer packetId = (Integer) connectionState.func_150755_b().inverse().get(packet.getClass()); //#endif @@ -347,9 +347,9 @@ public class PacketListener extends ChannelInboundHandlerAdapter { throw new IOException("Unknown packet type:" + packet.getClass()); } ByteBuf byteBuf = Unpooled.buffer(); - PacketBuffer packetBuffer = new PacketBuffer(byteBuf); + PacketByteBuf packetBuffer = new PacketByteBuf(byteBuf); packetBuffer.writeVarInt(packetId); - packet.writePacketData(packetBuffer); + packet.write(packetBuffer); byteBuf.readerIndex(0); byte[] array = new byte[byteBuf.readableBytes()]; @@ -369,11 +369,11 @@ public class PacketListener extends ChannelInboundHandlerAdapter { Marker marker = new Marker(); marker.setName(name); marker.setTime(timestamp); - marker.setX(view.posX); - marker.setY(view.posY); - marker.setZ(view.posZ); - marker.setYaw(view.rotationYaw); - marker.setPitch(view.rotationPitch); + marker.setX(view.x); + marker.setY(view.y); + marker.setZ(view.z); + marker.setYaw(view.yaw); + marker.setPitch(view.pitch); // Roll is always 0 saveService.submit(() -> { synchronized (replayFile) { diff --git a/src/main/java/com/replaymod/recording/packet/ResourcePackRecorder.java b/src/main/java/com/replaymod/recording/packet/ResourcePackRecorder.java index 706ff199..7e8e599c 100644 --- a/src/main/java/com/replaymod/recording/packet/ResourcePackRecorder.java +++ b/src/main/java/com/replaymod/recording/packet/ResourcePackRecorder.java @@ -3,19 +3,19 @@ package com.replaymod.recording.packet; import com.google.common.hash.Hashing; import com.google.common.io.Files; import com.replaymod.replaystudio.replay.ReplayFile; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiYesNo; -import net.minecraft.client.multiplayer.ServerData; -import net.minecraft.client.multiplayer.ServerList; -import net.minecraft.client.resources.DownloadingPackFinder; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.menu.YesNoScreen; +import net.minecraft.client.options.ServerEntry; +import net.minecraft.client.options.ServerList; +import net.minecraft.client.resource.ClientResourcePackCreator; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; //#if MC>=11400 -//$$ import net.minecraft.text.TranslatableTextComponent; +import net.minecraft.text.TranslatableTextComponent; //#else -import net.minecraft.client.gui.GuiYesNoCallback; -import net.minecraft.client.resources.I18n; +//$$ import net.minecraft.client.gui.GuiYesNoCallback; +//$$ import net.minecraft.client.resources.I18n; //#endif //#if MC>=10800 @@ -26,19 +26,19 @@ import de.johni0702.minecraft.gui.utils.Consumer; //#endif //#if MC>=10800 -import net.minecraft.network.play.client.CPacketResourcePackStatus; -import net.minecraft.network.play.client.CPacketResourcePackStatus.Action; -import net.minecraft.network.play.server.SPacketResourcePackSend; +import net.minecraft.server.network.packet.ResourcePackStatusC2SPacket; +import net.minecraft.server.network.packet.ResourcePackStatusC2SPacket.Status; +import net.minecraft.client.network.packet.ResourcePackSendS2CPacket; //#endif //#if MC>=10800 //#if MC>=11400 -//$$ import java.util.concurrent.CompletableFuture; +import java.util.concurrent.CompletableFuture; //#else -import com.google.common.util.concurrent.ListenableFuture; +//$$ import com.google.common.util.concurrent.ListenableFuture; //#endif -import net.minecraft.client.network.NetHandlerPlayClient; -import net.minecraft.network.NetworkManager; +import net.minecraft.client.network.ClientPlayNetworkHandler; +import net.minecraft.network.ClientConnection; //#else //$$ import com.replaymod.core.mixin.ResourcePackRepositoryAccessor; //$$ import net.minecraft.client.multiplayer.ServerData.ServerResourceMode; @@ -61,7 +61,7 @@ import static com.replaymod.core.versions.MCVer.*; */ public class ResourcePackRecorder { private static final Logger logger = LogManager.getLogger(); - private static final Minecraft mc = getMinecraft(); + private static final MinecraftClient mc = getMinecraft(); private final ReplayFile replayFile; @@ -102,99 +102,99 @@ public class ResourcePackRecorder { } //#if MC>=10800 - public CPacketResourcePackStatus makeStatusPacket(String hash, Action action) { + public ResourcePackStatusC2SPacket makeStatusPacket(String hash, Status action) { //#if MC>=11002 - return new CPacketResourcePackStatus(action); + return new ResourcePackStatusC2SPacket(action); //#else //$$ return new CPacketResourcePackStatus(hash, action); //#endif } - public synchronized SPacketResourcePackSend handleResourcePack(SPacketResourcePackSend packet) { + public synchronized ResourcePackSendS2CPacket handleResourcePack(ResourcePackSendS2CPacket packet) { final int requestId = nextRequestId++; - final NetHandlerPlayClient netHandler = mc.getConnection(); - final NetworkManager netManager = netHandler.getNetworkManager(); + final ClientPlayNetworkHandler netHandler = mc.getNetworkHandler(); + final ClientConnection netManager = netHandler.getClientConnection(); final String url = packet.getURL(); - final String hash = packet.getHash(); + final String hash = packet.getSHA1(); if (url.startsWith("level://")) { String levelName = url.substring("level://".length()); - File savesDir = new File(mc.gameDir, "saves"); + File savesDir = new File(mc.runDirectory, "saves"); final File levelDir = new File(savesDir, levelName); if (levelDir.isFile()) { - netManager.sendPacket(makeStatusPacket(hash, Action.ACCEPTED)); + netManager.send(makeStatusPacket(hash, Status.ACCEPTED)); addCallback(setServerResourcePack(levelDir), result -> { recordResourcePack(levelDir, requestId); - netManager.sendPacket(makeStatusPacket(hash, Action.SUCCESSFULLY_LOADED)); + netManager.send(makeStatusPacket(hash, Status.SUCCESSFULLY_LOADED)); }, throwable -> { - netManager.sendPacket(makeStatusPacket(hash, Action.FAILED_DOWNLOAD)); + netManager.send(makeStatusPacket(hash, Status.FAILED_DOWNLOAD)); }); } else { - netManager.sendPacket(makeStatusPacket(hash, Action.FAILED_DOWNLOAD)); + netManager.send(makeStatusPacket(hash, Status.FAILED_DOWNLOAD)); } } else { - final ServerData serverData = mc.getCurrentServerData(); - if (serverData != null && serverData.getResourceMode() == ServerData.ServerResourceMode.ENABLED) { - netManager.sendPacket(makeStatusPacket(hash, Action.ACCEPTED)); + final ServerEntry serverData = mc.getCurrentServerEntry(); + if (serverData != null && serverData.getResourcePack() == ServerEntry.ResourcePackState.ENABLED) { + netManager.send(makeStatusPacket(hash, Status.ACCEPTED)); downloadResourcePackFuture(requestId, url, hash); - } else if (serverData != null && serverData.getResourceMode() != ServerData.ServerResourceMode.PROMPT) { - netManager.sendPacket(makeStatusPacket(hash, Action.DECLINED)); + } else if (serverData != null && serverData.getResourcePack() != ServerEntry.ResourcePackState.PROMPT) { + netManager.send(makeStatusPacket(hash, Status.DECLINED)); } else { // Lambdas MUST NOT be used with methods that need re-obfuscation in FG prior to 2.2 (will result in AbstractMethodError) //#if MC>=11400 - //$$ mc.execute(() -> mc.openScreen(new YesNoScreen(result -> { + mc.execute(() -> mc.openScreen(new YesNoScreen(result -> { //#else - //noinspection Convert2Lambda - mc.addScheduledTask(() -> mc.displayGuiScreen(new GuiYesNo(new GuiYesNoCallback() { - @Override + //$$ //noinspection Convert2Lambda + //$$ mc.addScheduledTask(() -> mc.displayGuiScreen(new GuiYesNo(new GuiYesNoCallback() { + //$$ @Override //#if MC>=11300 - public void confirmResult(boolean result, int id) { + //$$ public void confirmResult(boolean result, int id) { //#else //$$ public void confirmClicked(boolean result, int id) { //#endif //#endif if (serverData != null) { - serverData.setResourceMode(result ? ServerData.ServerResourceMode.ENABLED : ServerData.ServerResourceMode.DISABLED); + serverData.setResourcePackState(result ? ServerEntry.ResourcePackState.ENABLED : ServerEntry.ResourcePackState.DISABLED); } if (result) { - netManager.sendPacket(makeStatusPacket(hash, Action.ACCEPTED)); + netManager.send(makeStatusPacket(hash, Status.ACCEPTED)); downloadResourcePackFuture(requestId, url, hash); } else { - netManager.sendPacket(makeStatusPacket(hash, Action.DECLINED)); + netManager.send(makeStatusPacket(hash, Status.DECLINED)); } - ServerList.saveSingleServer(serverData); - mc.displayGuiScreen(null); + ServerList.updateServerListEntry(serverData); + mc.openScreen(null); } //#if MC>=11400 - //$$ , new TranslatableTextComponent("multiplayer.texturePrompt.line1"), new TranslatableTextComponent("multiplayer.texturePrompt.line2")))); + , new TranslatableTextComponent("multiplayer.texturePrompt.line1"), new TranslatableTextComponent("multiplayer.texturePrompt.line2")))); //#else - }, I18n.format("multiplayer.texturePrompt.line1"), I18n.format("multiplayer.texturePrompt.line2"), 0))); + //$$ }, I18n.format("multiplayer.texturePrompt.line1"), I18n.format("multiplayer.texturePrompt.line2"), 0))); //#endif } } - return new SPacketResourcePackSend("replay://" + requestId, ""); + return new ResourcePackSendS2CPacket("replay://" + requestId, ""); } private void downloadResourcePackFuture(int requestId, String url, final String hash) { addCallback(downloadResourcePack(requestId, url, hash), - result -> mc.getConnection().sendPacket(makeStatusPacket(hash, Action.SUCCESSFULLY_LOADED)), - throwable -> mc.getConnection().sendPacket(makeStatusPacket(hash, Action.FAILED_DOWNLOAD))); + result -> mc.getNetworkHandler().sendPacket(makeStatusPacket(hash, Status.SUCCESSFULLY_LOADED)), + throwable -> mc.getNetworkHandler().sendPacket(makeStatusPacket(hash, Status.FAILED_DOWNLOAD))); } private //#if MC>=11400 - //$$ CompletableFuture + CompletableFuture //#else - ListenableFuture + //$$ ListenableFuture //#endif downloadResourcePack(final int requestId, String url, String hash) { - DownloadingPackFinder packFinder = mc.getPackFinder(); + ClientResourcePackCreator packFinder = mc.getResourcePackDownloader(); ((IDownloadingPackFinder) packFinder).setRequestCallback(file -> recordResourcePack(file, requestId)); - return packFinder.downloadResourcePack(url, hash); + return packFinder.download(url, hash); } public interface IDownloadingPackFinder { diff --git a/src/main/java/com/replaymod/render/RenderSettings.java b/src/main/java/com/replaymod/render/RenderSettings.java index f6081bc7..363fcfec 100644 --- a/src/main/java/com/replaymod/render/RenderSettings.java +++ b/src/main/java/com/replaymod/render/RenderSettings.java @@ -5,8 +5,8 @@ import de.johni0702.minecraft.gui.utils.lwjgl.ReadableColor; import lombok.AllArgsConstructor; import lombok.Data; import lombok.Getter; -import net.minecraft.client.resources.I18n; -import net.minecraft.util.Util; +import net.minecraft.client.resource.language.I18n; +import net.minecraft.util.SystemUtil; import java.io.File; import java.util.Arrays; @@ -32,11 +32,11 @@ public class RenderSettings { @Override public String toString() { - return I18n.format("replaymod.gui.rendersettings.renderer." + name().toLowerCase()); + return I18n.translate("replaymod.gui.rendersettings.renderer." + name().toLowerCase()); } public String getDescription() { - return I18n.format("replaymod.gui.rendersettings.renderer." + name().toLowerCase() + ".description"); + return I18n.translate("replaymod.gui.rendersettings.renderer." + name().toLowerCase() + ".description"); } public boolean isSpherical() { @@ -89,7 +89,7 @@ public class RenderSettings { @Override public String toString() { - return I18n.format("replaymod.gui.rendersettings.presets." + name().replace('_', '.').toLowerCase()); + return I18n.translate("replaymod.gui.rendersettings.presets." + name().replace('_', '.').toLowerCase()); } } @@ -102,7 +102,7 @@ public class RenderSettings { @Override public String toString() { - return I18n.format("replaymod.gui.rendersettings.antialiasing." + name().toLowerCase()); + return I18n.translate("replaymod.gui.rendersettings.antialiasing." + name().toLowerCase()); } } @@ -173,16 +173,16 @@ public class RenderSettings { } private static String findFFmpeg() { - switch (Util.getOSType()) { + switch (SystemUtil.getOperatingSystem()) { case WINDOWS: // Allow windows users to unpack the ffmpeg archive into a sub-folder of their .minecraft folder - File inDotMinecraft = new File(MCVer.getMinecraft().gameDir, "ffmpeg/bin/ffmpeg.exe"); + File inDotMinecraft = new File(MCVer.getMinecraft().runDirectory, "ffmpeg/bin/ffmpeg.exe"); if (inDotMinecraft.exists()) { LOGGER.debug("FFmpeg found in .minecraft/ffmpeg"); return inDotMinecraft.getAbsolutePath(); } break; - case OSX: + case MAC: // The PATH doesn't seem to be set as expected on OSX, therefore we check some common locations ourselves for (String path : new String[]{"/usr/local/bin/ffmpeg", "/usr/bin/ffmpeg"}) { File file = new File(path); @@ -212,7 +212,7 @@ public class RenderSettings { } } break; - case LINUX: // Linux users are entrusted to have their PATH configured correctly (most package manager do this) + case UNIX: // Linux users are entrusted to have their PATH configured correctly (most package manager do this) case SOLARIS: // Never heard of anyone running this mod on Solaris having any problems case UNKNOWN: // Unknown OS, just try to use "ffmpeg" } diff --git a/src/main/java/com/replaymod/render/ReplayModRender.java b/src/main/java/com/replaymod/render/ReplayModRender.java index 49baf1e8..f99b5f69 100644 --- a/src/main/java/com/replaymod/render/ReplayModRender.java +++ b/src/main/java/com/replaymod/render/ReplayModRender.java @@ -4,8 +4,8 @@ import com.replaymod.core.Module; import com.replaymod.core.ReplayMod; import com.replaymod.render.utils.RenderJob; import com.replaymod.replay.events.ReplayClosedCallback; -import net.minecraft.crash.CrashReport; -import net.minecraft.crash.ReportedException; +import net.minecraft.util.crash.CrashReport; +import net.minecraft.util.crash.CrashException; import org.apache.commons.io.FileUtils; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -45,17 +45,17 @@ public class ReplayModRender implements Module { public File getVideoFolder() { String path = core.getSettingsRegistry().get(Setting.RENDER_PATH); - File folder = new File(path.startsWith("./") ? core.getMinecraft().gameDir : null, path); + File folder = new File(path.startsWith("./") ? core.getMinecraft().runDirectory : null, path); try { FileUtils.forceMkdir(folder); } catch (IOException e) { - throw new ReportedException(CrashReport.makeCrashReport(e, "Cannot create video folder.")); + throw new CrashException(CrashReport.create(e, "Cannot create video folder.")); } return folder; } public Path getRenderSettingsPath() { - return core.getMinecraft().gameDir.toPath().resolve("config/replaymod-rendersettings.json"); + return core.getMinecraft().runDirectory.toPath().resolve("config/replaymod-rendersettings.json"); } public List getRenderQueue() { diff --git a/src/main/java/com/replaymod/render/VideoWriter.java b/src/main/java/com/replaymod/render/VideoWriter.java index b9483dca..f3f061a4 100755 --- a/src/main/java/com/replaymod/render/VideoWriter.java +++ b/src/main/java/com/replaymod/render/VideoWriter.java @@ -7,8 +7,8 @@ import com.replaymod.render.rendering.VideoRenderer; import com.replaymod.render.utils.ByteBufferPool; import com.replaymod.render.utils.StreamPipe; import de.johni0702.minecraft.gui.utils.lwjgl.ReadableDimension; -import net.minecraft.crash.CrashReport; -import net.minecraft.crash.CrashReportCategory; +import net.minecraft.util.crash.CrashReport; +import net.minecraft.util.crash.CrashReportSection; import org.apache.commons.exec.CommandLine; import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; @@ -68,7 +68,7 @@ public class VideoWriter implements FrameConsumer { } catch (IOException e) { throw new NoFFmpegException(e); } - File exportLogFile = new File(MCVer.getMinecraft().gameDir, "export.log"); + File exportLogFile = new File(MCVer.getMinecraft().runDirectory, "export.log"); OutputStream exportLogOut = new TeeOutputStream(new FileOutputStream(exportLogFile), ffmpegLog); new StreamPipe(process.getInputStream(), exportLogOut).start(); new StreamPipe(process.getErrorStream(), exportLogOut).start(); @@ -122,11 +122,11 @@ public class VideoWriter implements FrameConsumer { renderer.setFailure(e); return; } - CrashReport report = CrashReport.makeCrashReport(t, "Exporting frame"); - CrashReportCategory exportDetails = report.makeCategory("Export details"); + CrashReport report = CrashReport.create(t, "Exporting frame"); + CrashReportSection exportDetails = report.addElement("Export details"); MCVer.addDetail(exportDetails, "Export command", settings::getExportCommand); MCVer.addDetail(exportDetails, "Export args", commandArgs::toString); - MCVer.getMinecraft().crashed(report); + MCVer.getMinecraft().setCrashReport(report); } } diff --git a/src/main/java/com/replaymod/render/blend/BlendMaterials.java b/src/main/java/com/replaymod/render/blend/BlendMaterials.java index 4570d30b..b19fe709 100644 --- a/src/main/java/com/replaymod/render/blend/BlendMaterials.java +++ b/src/main/java/com/replaymod/render/blend/BlendMaterials.java @@ -4,7 +4,7 @@ import com.replaymod.render.blend.data.DImage; import com.replaymod.render.blend.data.DMaterial; import com.replaymod.render.blend.data.DPackedFile; import com.replaymod.render.blend.data.DTexture; -import net.minecraft.client.renderer.GLAllocation; +import net.minecraft.client.util.GlAllocationUtils; import org.apache.commons.lang3.tuple.Pair; import org.lwjgl.opengl.GL11; @@ -27,7 +27,7 @@ public class BlendMaterials { // Read raw image data from GL int width = GL11.glGetTexLevelParameteri(GL11.GL_TEXTURE_2D, 0, GL11.GL_TEXTURE_WIDTH); int height = GL11.glGetTexLevelParameteri(GL11.GL_TEXTURE_2D, 0, GL11.GL_TEXTURE_HEIGHT); - ByteBuffer buffer = GLAllocation.createDirectByteBuffer(width * height * 4); + ByteBuffer buffer = GlAllocationUtils.allocateByteBuffer(width * height * 4); GL11.glGetTexImage(GL11.GL_TEXTURE_2D, 0, GL11.GL_RGBA, GL11.GL_UNSIGNED_BYTE, buffer); // Convert to BufferedImage diff --git a/src/main/java/com/replaymod/render/blend/BlendMeshBuilder.java b/src/main/java/com/replaymod/render/blend/BlendMeshBuilder.java index 0e5dda04..237a00d8 100644 --- a/src/main/java/com/replaymod/render/blend/BlendMeshBuilder.java +++ b/src/main/java/com/replaymod/render/blend/BlendMeshBuilder.java @@ -6,14 +6,14 @@ import com.replaymod.render.blend.data.DMesh; import de.johni0702.minecraft.gui.utils.lwjgl.vector.ReadableVector3f; import de.johni0702.minecraft.gui.utils.lwjgl.vector.Vector2f; import de.johni0702.minecraft.gui.utils.lwjgl.vector.Vector3f; -import net.minecraft.client.renderer.Tessellator; -import net.minecraft.client.renderer.vertex.VertexFormat; -import net.minecraft.client.renderer.vertex.VertexFormatElement; +import net.minecraft.client.render.Tessellator; +import net.minecraft.client.render.VertexFormat; +import net.minecraft.client.render.VertexFormatElement; import org.lwjgl.opengl.GL11; //#if MC>=10904 //#if MC>=11200 -import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.render.BufferBuilder; //#else //$$ import net.minecraft.client.renderer.VertexBuffer; //#endif @@ -68,7 +68,7 @@ public class BlendMeshBuilder // Someone probably finished drawing with the global instance instead of this one, // let's just assume that what's happened and finish our last draw by ourselves // (might miss correct texture though) - super.finishDrawing(); + super.end(); addBufferToMesh(); } else { throw new IllegalStateException("Already drawing!"); @@ -91,14 +91,14 @@ public class BlendMeshBuilder public void maybeFinishDrawing() { if (isDrawing) { isDrawing = false; - super.finishDrawing(); + super.end(); addBufferToMesh(); } } @Override //#if MC>=10809 - public void finishDrawing() { + public void end() { //#else //$$ public int finishDrawing() { //#endif @@ -106,13 +106,13 @@ public class BlendMeshBuilder throw new IllegalStateException("Not building!"); } else { if (!wellBehaved) { - Tessellator.getInstance().getBuffer().finishDrawing(); + Tessellator.getInstance().getBufferBuilder().end(); } //#if MC<10809 //$$ int ret = //#endif - super.finishDrawing(); + super.end(); addBufferToMesh(); @@ -140,7 +140,7 @@ public class BlendMeshBuilder public static DMesh addBufferToMesh(ByteBuffer buffer, int mode, VertexFormat vertexFormat, DMesh mesh, ReadableVector3f vertOffset) { //#if MC>=11300 - int vertexCount = buffer.remaining() / vertexFormat.getSize(); + int vertexCount = buffer.remaining() / vertexFormat.getVertexSize(); //#else //$$ int vertexCount = buffer.remaining() / vertexFormat.getNextOffset(); //#endif @@ -160,26 +160,26 @@ public class BlendMeshBuilder int index = 0; for (VertexFormatElement element : getElements(vertexFormat)) { //#if MC>=10809 - int offset = vertexFormat.getOffset(index); + int offset = vertexFormat.getElementOffset(index); //#else //$$ int offset = element.getOffset(); //#endif - switch (element.getUsage()) { + switch (element.getType()) { case POSITION: - if (element.getType() != VertexFormatElement.EnumType.FLOAT) { + if (element.getFormat() != VertexFormatElement.Format.FLOAT) { throw new UnsupportedOperationException("Only float is supported for position elements!"); } posOffset = offset; break; case COLOR: - if (element.getType() != VertexFormatElement.EnumType.UBYTE) { + if (element.getFormat() != VertexFormatElement.Format.UNSIGNED_BYTE) { throw new UnsupportedOperationException("Only unsigned byte is supported for color elements!"); } colorOffset = offset; break; case UV: if (element.getIndex() != 0) break; - if (element.getType() != VertexFormatElement.EnumType.FLOAT) { + if (element.getFormat() != VertexFormatElement.Format.FLOAT) { throw new UnsupportedOperationException("Only float is supported for UV elements!"); } uvOffset = offset; @@ -194,7 +194,7 @@ public class BlendMeshBuilder List uvs = new ArrayList<>(vertexCount); List colors = new ArrayList<>(vertexCount); //#if MC>=11300 - int step = vertexFormat.getSize(); + int step = vertexFormat.getVertexSize(); //#else //$$ int step = vertexFormat.getNextOffset(); //#endif diff --git a/src/main/java/com/replaymod/render/blend/BlendState.java b/src/main/java/com/replaymod/render/blend/BlendState.java index a0d22bce..dfe810cb 100644 --- a/src/main/java/com/replaymod/render/blend/BlendState.java +++ b/src/main/java/com/replaymod/render/blend/BlendState.java @@ -10,9 +10,9 @@ import com.replaymod.render.blend.exporters.ParticlesExporter; import com.replaymod.render.blend.exporters.RenderState; import com.replaymod.render.blend.exporters.TileEntityExporter; //#endif -import net.minecraft.crash.CrashReport; -import net.minecraft.crash.CrashReportCategory; -import net.minecraft.crash.ReportedException; +import net.minecraft.util.crash.CrashReport; +import net.minecraft.util.crash.CrashReportSection; +import net.minecraft.util.crash.CrashException; import org.apache.commons.io.output.NullOutputStream; import org.blender.utils.BlenderFactory; import org.cakelab.blender.io.BlenderFile; @@ -80,10 +80,10 @@ public class BlendState implements Exporter { try { exporter.setup(); } catch (IOException e) { - CrashReport report = CrashReport.makeCrashReport(e, "Setup of blend exporter"); - CrashReportCategory category = report.makeCategory("Exporter"); + CrashReport report = CrashReport.create(e, "Setup of blend exporter"); + CrashReportSection category = report.addElement("Exporter"); addDetail(category, "Exporter", exporter::toString); - throw new ReportedException(report); + throw new CrashException(report); } } } @@ -94,10 +94,10 @@ public class BlendState implements Exporter { try { exporter.tearDown(); } catch (IOException e) { - CrashReport report = CrashReport.makeCrashReport(e, "Tear down of blend exporter"); - CrashReportCategory category = report.makeCategory("Exporter"); + CrashReport report = CrashReport.create(e, "Tear down of blend exporter"); + CrashReportSection category = report.addElement("Exporter"); addDetail(category, "Exporter", exporter::toString); - throw new ReportedException(report); + throw new CrashException(report); } } @@ -131,11 +131,11 @@ public class BlendState implements Exporter { try { exporter.preFrame(frame); } catch (IOException e) { - CrashReport report = CrashReport.makeCrashReport(e, "Pre frame of blend exporter"); - CrashReportCategory category = report.makeCategory("Exporter"); + CrashReport report = CrashReport.create(e, "Pre frame of blend exporter"); + CrashReportSection category = report.addElement("Exporter"); addDetail(category, "Exporter", exporter::toString); addDetail(category, "Frame", () -> String.valueOf(frame)); - throw new ReportedException(report); + throw new CrashException(report); } } } @@ -146,11 +146,11 @@ public class BlendState implements Exporter { try { exporter.postFrame(frame); } catch (IOException e) { - CrashReport report = CrashReport.makeCrashReport(e, "Post frame of blend exporter"); - CrashReportCategory category = report.makeCategory("Exporter"); + CrashReport report = CrashReport.create(e, "Post frame of blend exporter"); + CrashReportSection category = report.addElement("Exporter"); addDetail(category, "Exporter", exporter::toString); addDetail(category, "Frame", () -> String.valueOf(frame)); - throw new ReportedException(report); + throw new CrashException(report); } } diff --git a/src/main/java/com/replaymod/render/blend/Util.java b/src/main/java/com/replaymod/render/blend/Util.java index 55cc6b75..edc81250 100644 --- a/src/main/java/com/replaymod/render/blend/Util.java +++ b/src/main/java/com/replaymod/render/blend/Util.java @@ -4,10 +4,10 @@ import de.johni0702.minecraft.gui.utils.lwjgl.vector.Matrix3f; import de.johni0702.minecraft.gui.utils.lwjgl.vector.Matrix4f; import de.johni0702.minecraft.gui.utils.lwjgl.vector.Quaternion; import de.johni0702.minecraft.gui.utils.lwjgl.vector.Vector3f; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.GLAllocation; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.util.GlAllocationUtils; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.block.entity.BlockEntity; import org.blender.dna.Link; import org.blender.dna.ListBase; import org.blender.utils.BlenderFactory; @@ -18,7 +18,7 @@ import java.io.IOException; import java.nio.FloatBuffer; //#if MC>=11400 -//$$ import net.minecraft.util.math.Vec3d; +import net.minecraft.util.math.Vec3d; //#endif public class Util { @@ -39,7 +39,7 @@ public class Util { } } - private static FloatBuffer floatBuffer = GLAllocation.createDirectFloatBuffer(16); + private static FloatBuffer floatBuffer = GlAllocationUtils.allocateFloatBuffer(16); public static Matrix4f getGlMatrix(int matrix) { floatBuffer.clear(); //#if MC>=11300 @@ -138,16 +138,16 @@ public class Util { //#if MC>=10800 public static Vector3f getCameraPos() { - Minecraft mc = Minecraft.getInstance(); + MinecraftClient mc = MinecraftClient.getInstance(); //#if MC>=11400 - //$$ Vec3d pos = mc.getEntityRenderManager().camera.getPos(); - //$$ return new Vector3f((float) pos.x, (float) pos.y, (float) pos.z); + Vec3d pos = mc.getEntityRenderManager().camera.getPos(); + return new Vector3f((float) pos.x, (float) pos.y, (float) pos.z); //#else - return new Vector3f( - (float) -mc.getRenderManager().viewerPosX, - (float) -mc.getRenderManager().viewerPosY, - (float) -mc.getRenderManager().viewerPosZ - ); + //$$ return new Vector3f( + //$$ (float) -mc.getRenderManager().viewerPosX, + //$$ (float) -mc.getRenderManager().viewerPosY, + //$$ (float) -mc.getRenderManager().viewerPosZ + //$$ ); //#endif } //#endif @@ -182,10 +182,10 @@ public class Util { } } - public static String getTileEntityId(TileEntity tileEntity) { - NBTTagCompound nbt = new NBTTagCompound(); + public static String getTileEntityId(BlockEntity tileEntity) { + CompoundTag nbt = new CompoundTag(); //#if MC>=11300 - tileEntity.write(nbt); + tileEntity.toTag(nbt); //#else //$$ tileEntity.writeToNBT(nbt); //#endif diff --git a/src/main/java/com/replaymod/render/blend/exporters/ChunkExporter.java b/src/main/java/com/replaymod/render/blend/exporters/ChunkExporter.java index c6736950..825cd0d8 100644 --- a/src/main/java/com/replaymod/render/blend/exporters/ChunkExporter.java +++ b/src/main/java/com/replaymod/render/blend/exporters/ChunkExporter.java @@ -10,19 +10,19 @@ import com.replaymod.render.blend.data.DObject; import com.replaymod.render.blend.mixin.ContainerLocalRenderInformationAccessor; import com.replaymod.render.blend.mixin.WorldRendererAccessor; import de.johni0702.minecraft.gui.utils.lwjgl.vector.Vector3f; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.GLAllocation; -import net.minecraft.client.renderer.OpenGlHelper; -import net.minecraft.client.renderer.chunk.CompiledChunk; -import net.minecraft.client.renderer.chunk.RenderChunk; -import net.minecraft.client.renderer.vertex.DefaultVertexFormats; -import net.minecraft.client.renderer.vertex.VertexBuffer; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.util.GlAllocationUtils; +import com.mojang.blaze3d.platform.GLX; +import net.minecraft.client.render.chunk.ChunkRenderData; +import net.minecraft.client.render.chunk.ChunkRenderer; +import net.minecraft.client.render.VertexFormats; +import net.minecraft.client.gl.GlBuffer; import org.apache.commons.lang3.tuple.Pair; import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL15; //#if MC>=10904 -import net.minecraft.util.BlockRenderLayer; +import net.minecraft.block.BlockRenderLayer; import net.minecraft.util.math.BlockPos; //#else //$$ import net.minecraft.util.BlockPos; @@ -43,7 +43,7 @@ public class ChunkExporter implements Exporter { private final Map chunkObjects = new HashMap<>(); //#if MC>=10904 private final Map> chunkLayerObjects = new HashMap<>(); - private final List> chunks = new ArrayList<>(); + private final List> chunks = new ArrayList<>(); //#else //$$ private final Map> chunkLayerObjects = new HashMap<>(); //$$ private final List> chunks = new ArrayList<>(); @@ -51,13 +51,13 @@ public class ChunkExporter implements Exporter { private DObject chunksObject; private int frame; - public void addChunkUpdate(RenderChunk chunk, CompiledChunk compiledChunk) { + public void addChunkUpdate(ChunkRenderer chunk, ChunkRenderData compiledChunk) { //#if MC>=10904 for (BlockRenderLayer layer : BlockRenderLayer.values()) { //#else //$$ for (EnumWorldBlockLayer layer : EnumWorldBlockLayer.values()) { //#endif - if (compiledChunk == null || compiledChunk.isLayerStarted(layer)) { + if (compiledChunk == null || compiledChunk.isBufferInitialized(layer)) { chunks.add(Pair.of(chunk, layer)); } } @@ -66,12 +66,12 @@ public class ChunkExporter implements Exporter { @Override public void setup() throws IOException { - Minecraft mc = MCVer.getMinecraft(); + MinecraftClient mc = MCVer.getMinecraft(); @SuppressWarnings("unchecked") - List renderInfos = ((WorldRendererAccessor) mc.renderGlobal).getRenderInfos(); + List renderInfos = ((WorldRendererAccessor) mc.worldRenderer).getRenderInfos(); for (ContainerLocalRenderInformationAccessor renderInfo : renderInfos) { - RenderChunk renderChunk = renderInfo.getRenderChunk(); - CompiledChunk compiledChunk = renderChunk.getCompiledChunk(); + ChunkRenderer renderChunk = renderInfo.getRenderChunk(); + ChunkRenderData compiledChunk = renderChunk.getChunkRenderData(); if (!compiledChunk.isEmpty()) { addChunkUpdate(renderChunk, null); } @@ -98,18 +98,18 @@ public class ChunkExporter implements Exporter { @Override public void postFrame(int frame) throws IOException { //#if MC>=10904 - for (Pair pair : chunks) { + for (Pair pair : chunks) { BlockRenderLayer layer = pair.getRight(); //#else //$$ for (Pair pair : chunks) { //$$ EnumWorldBlockLayer layer = pair.getRight(); //#endif - RenderChunk chunk = pair.getLeft(); - DObject chunkObject = chunkObjects.get(chunk.getPosition()); + ChunkRenderer chunk = pair.getLeft(); + DObject chunkObject = chunkObjects.get(chunk.getOrigin()); if (chunkObject == null) { chunkObject = buildChunkObject(chunk); - chunkObjects.put(chunk.getPosition(), chunkObject); - chunkLayerObjects.put(chunk.getPosition(), new EnumMap<>(layer.getDeclaringClass())); + chunkObjects.put(chunk.getOrigin(), chunkObject); + chunkLayerObjects.put(chunk.getOrigin(), new EnumMap<>(layer.getDeclaringClass())); } DObject layerObject = buildChunkLayerObject(chunkObject, chunk, layer); if (layerObject == null) continue; @@ -118,7 +118,7 @@ public class ChunkExporter implements Exporter { //#else //$$ Map layerObjects //#endif - = chunkLayerObjects.get(chunk.getPosition()); + = chunkLayerObjects.get(chunk.getOrigin()); DObject oldLayerObject = layerObjects.get(layer); if (oldLayerObject != null) { oldLayerObject.keyframe("hide", 0, frame, 1f); @@ -134,8 +134,8 @@ public class ChunkExporter implements Exporter { chunks.clear(); } - private DObject buildChunkObject(RenderChunk renderChunk) { - BlockPos pos = renderChunk.getPosition(); + private DObject buildChunkObject(ChunkRenderer renderChunk) { + BlockPos pos = renderChunk.getOrigin(); DObject chunkObject = new DObject(DObject.Type.OB_EMPTY); chunkObject.setParent(chunksObject); chunkObject.id.name = "Chunk[" + pos.getX()/16 + "/" + pos.getY()/16 + "/" + pos.getZ()/16 + "]"; @@ -143,13 +143,13 @@ public class ChunkExporter implements Exporter { return chunkObject; } - private DObject buildChunkLayerObject(DObject chunkObject, RenderChunk renderChunk, + private DObject buildChunkLayerObject(DObject chunkObject, ChunkRenderer renderChunk, //#if MC>=10904 BlockRenderLayer layer) { //#else //$$ EnumWorldBlockLayer layer) { //#endif - VertexBuffer vertexBuffer = renderChunk.getVertexBufferByLayer(layer.ordinal()); + GlBuffer vertexBuffer = renderChunk.getGlBuffer(layer.ordinal()); if (vertexBuffer == null) return null; DObject layerObject = new DObject(buildChunkLayerMesh(vertexBuffer)); @@ -158,16 +158,16 @@ public class ChunkExporter implements Exporter { return layerObject; } - private DMesh buildChunkLayerMesh(VertexBuffer vertexBuffer) { - vertexBuffer.bindBuffer(); - int size = GL15.glGetBufferParameteri(OpenGlHelper.GL_ARRAY_BUFFER, GL15.GL_BUFFER_SIZE); - ByteBuffer byteBuffer = GLAllocation.createDirectByteBuffer(size); - GL15.glGetBufferSubData(OpenGlHelper.GL_ARRAY_BUFFER, 0, byteBuffer); - vertexBuffer.unbindBuffer(); + private DMesh buildChunkLayerMesh(GlBuffer vertexBuffer) { + vertexBuffer.bind(); + int size = GL15.glGetBufferParameteri(GLX.GL_ARRAY_BUFFER, GL15.GL_BUFFER_SIZE); + ByteBuffer byteBuffer = GlAllocationUtils.allocateByteBuffer(size); + GL15.glGetBufferSubData(GLX.GL_ARRAY_BUFFER, 0, byteBuffer); + vertexBuffer.unbind(); MCVer.getMinecraft().getTextureManager().bindTexture(LOCATION_BLOCKS_TEXTURE); - return BlendMeshBuilder.addBufferToMesh(byteBuffer, GL11.GL_QUADS, DefaultVertexFormats.BLOCK, null, null); + return BlendMeshBuilder.addBufferToMesh(byteBuffer, GL11.GL_QUADS, VertexFormats.POSITION_COLOR_UV_LMAP, null, null); } private static final int STRIDE = 28; diff --git a/src/main/java/com/replaymod/render/blend/exporters/EntityExporter.java b/src/main/java/com/replaymod/render/blend/exporters/EntityExporter.java index 586359e2..e22d7544 100644 --- a/src/main/java/com/replaymod/render/blend/exporters/EntityExporter.java +++ b/src/main/java/com/replaymod/render/blend/exporters/EntityExporter.java @@ -7,9 +7,9 @@ import com.replaymod.render.blend.Exporter; import com.replaymod.render.blend.data.DObject; import de.johni0702.minecraft.gui.utils.lwjgl.vector.Matrix4f; import de.johni0702.minecraft.gui.utils.lwjgl.vector.Vector3f; -import net.minecraft.client.Minecraft; +import net.minecraft.client.MinecraftClient; import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.LivingEntity; import java.util.IdentityHashMap; import java.util.Map; @@ -18,7 +18,7 @@ import static com.replaymod.render.blend.Util.getCameraPos; import static com.replaymod.render.blend.Util.getGlModelViewMatrix; public class EntityExporter implements Exporter { - private final Minecraft mc = MCVer.getMinecraft(); + private final MinecraftClient mc = MCVer.getMinecraft(); private final RenderState renderState; private DObject entitiesObject; private Map entityObjects; @@ -69,7 +69,7 @@ public class EntityExporter implements Exporter { // So, we translate there, then store the model-view-matrix and then translate back to let the // renderer translate there again. // Instead of actually translating, we just add the translation on the current model-view-matrix. - if (!(entity instanceof EntityLivingBase)) { // except for EntityLivingBase which get special (better) treatment + if (!(entity instanceof LivingEntity)) { // except for EntityLivingBase which get special (better) treatment Matrix4f modelView = getGlModelViewMatrix(); Matrix4f.translate(new Vector3f((float) dx, (float) dy, (float) dz), modelView, modelView); renderState.pushModelView(modelView); diff --git a/src/main/java/com/replaymod/render/blend/exporters/ItemExporter.java b/src/main/java/com/replaymod/render/blend/exporters/ItemExporter.java index 3af25e7c..edf81816 100644 --- a/src/main/java/com/replaymod/render/blend/exporters/ItemExporter.java +++ b/src/main/java/com/replaymod/render/blend/exporters/ItemExporter.java @@ -5,20 +5,20 @@ import com.replaymod.render.blend.BlendMeshBuilder; import com.replaymod.render.blend.Exporter; import com.replaymod.render.blend.data.DMesh; import com.replaymod.render.blend.data.DObject; -import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.client.render.VertexFormats; import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.Direction; import org.lwjgl.opengl.GL11; //#if MC>=11400 -//$$ import net.minecraft.util.math.Vec3i; +import net.minecraft.util.math.Vec3i; //#else -import net.minecraftforge.client.model.pipeline.LightUtil; +//$$ import net.minecraftforge.client.model.pipeline.LightUtil; //#endif //#if MC>=11300 -import net.minecraft.client.renderer.model.BakedQuad; -import net.minecraft.client.renderer.model.IBakedModel; +import net.minecraft.client.render.model.BakedQuad; +import net.minecraft.client.render.model.BakedModel; //#else //$$ import net.minecraft.client.renderer.block.model.BakedQuad; //#if MC>=10904 @@ -42,7 +42,7 @@ public class ItemExporter implements Exporter { this.renderState = renderState; } - public void onRender(Object renderItem, IBakedModel model, ItemStack stack) { + public void onRender(Object renderItem, BakedModel model, ItemStack stack) { DObject object = getObjectForItemStack(renderItem, model, stack); renderState.pushObject(object); @@ -55,7 +55,7 @@ public class ItemExporter implements Exporter { renderState.pop(); } - private DObject getObjectForItemStack(Object renderItem, IBakedModel model, ItemStack stack) { + private DObject getObjectForItemStack(Object renderItem, BakedModel model, ItemStack stack) { int frame = renderState.getFrame(); DObject parent = renderState.peekObject(); DObject object = null; @@ -81,19 +81,19 @@ public class ItemExporter implements Exporter { } @SuppressWarnings("unchecked") - private static DMesh generateMeshForItemStack(Object renderItem, IBakedModel model, ItemStack stack) { + private static DMesh generateMeshForItemStack(Object renderItem, BakedModel model, ItemStack stack) { DMesh mesh = new DMesh(); BlendMeshBuilder builder = new BlendMeshBuilder(mesh); builder.setWellBehaved(true); //#if MC>=10809 - builder.begin(GL11.GL_QUADS, DefaultVertexFormats.ITEM); + builder.begin(GL11.GL_QUADS, VertexFormats.POSITION_COLOR_UV_NORMAL); //#else //$$ builder.startDrawingQuads(); //$$ builder.setVertexFormat(DefaultVertexFormats.ITEM); //#endif //#if MC>=11300 - for (EnumFacing face : EnumFacing.values()) { + for (Direction face : Direction.values()) { renderQuads(renderItem, builder, model.getQuads(null, face, new Random()), stack); } renderQuads(renderItem, builder, model.getQuads(null, null, new Random()), stack); @@ -111,26 +111,26 @@ public class ItemExporter implements Exporter { //#endif //#endif - builder.finishDrawing(); + builder.end(); return mesh; } private static void renderQuads(Object renderItem, BlendMeshBuilder buffer, List quads, ItemStack stack) { for (BakedQuad quad : quads) { - int color = stack != null && quad.hasTintIndex() + int color = stack != null && quad.hasColor() //#if MC>=10904 - ? ((ItemRendererAccessor) renderItem).getItemColors().getColor(stack, quad.getTintIndex()) | 0xff000000 + ? ((ItemRendererAccessor) renderItem).getItemColors().getRenderColor(stack, quad.getColorIndex()) | 0xff000000 //#else //$$ ? stack.getItem().getColorFromItemStack(stack, quad.getTintIndex()) | 0xff000000 //#endif : 0xffffffff; //#if MC>=11400 - //$$ buffer.putVertexData(quad.getVertexData()); - //$$ buffer.setQuadColor(color); - //$$ Vec3i vec3i_1 = quad.getFace().getVector(); - //$$ buffer.postNormal(vec3i_1.getX(), vec3i_1.getY(), vec3i_1.getZ()); + buffer.putVertexData(quad.getVertexData()); + buffer.setQuadColor(color); + Vec3i vec3i_1 = quad.getFace().getVector(); + buffer.postNormal(vec3i_1.getX(), vec3i_1.getY(), vec3i_1.getZ()); //#else - LightUtil.renderQuadColor(buffer, quad, color); + //$$ LightUtil.renderQuadColor(buffer, quad, color); //#endif } @@ -138,18 +138,18 @@ public class ItemExporter implements Exporter { private static class ItemBasedDObject extends DObject { private final Object renderItem; - private final IBakedModel model; + private final BakedModel model; private final ItemStack stack; private boolean valid; - public ItemBasedDObject(Object renderItem, IBakedModel model, ItemStack stack) { + public ItemBasedDObject(Object renderItem, BakedModel model, ItemStack stack) { super(generateMeshForItemStack(renderItem, model, stack)); this.renderItem = renderItem; this.model = model; this.stack = stack; } - public boolean isBasedOn(Object renderItem, IBakedModel model, ItemStack stack) { + public boolean isBasedOn(Object renderItem, BakedModel model, ItemStack stack) { return this.renderItem == renderItem && this.model == model && this.stack == stack; } diff --git a/src/main/java/com/replaymod/render/blend/exporters/ModelRendererExporter.java b/src/main/java/com/replaymod/render/blend/exporters/ModelRendererExporter.java index a9d5efd8..643ee0df 100644 --- a/src/main/java/com/replaymod/render/blend/exporters/ModelRendererExporter.java +++ b/src/main/java/com/replaymod/render/blend/exporters/ModelRendererExporter.java @@ -8,8 +8,8 @@ import com.replaymod.render.blend.data.DObject; import org.lwjgl.opengl.GL11; //#if MC>=11300 -import net.minecraft.client.renderer.entity.model.ModelBox; -import net.minecraft.client.renderer.entity.model.ModelRenderer; +import net.minecraft.client.model.Box; +import net.minecraft.client.model.Cuboid; //#else //$$ import net.minecraft.client.model.ModelBox; //$$ import net.minecraft.client.model.ModelRenderer; @@ -31,7 +31,7 @@ public class ModelRendererExporter implements Exporter { public void setup() throws IOException { } - public void preRenderModel(ModelRenderer model, float scale) { + public void preRenderModel(Cuboid model, float scale) { DObject object = getObjectForModel(model, scale); renderState.pushObject(object); renderState.pushModelView(); @@ -53,7 +53,7 @@ public class ModelRendererExporter implements Exporter { renderState.pop(); } - private DObject getObjectForModel(ModelRenderer model, float scale) { + private DObject getObjectForModel(Cuboid model, float scale) { int frame = renderState.getFrame(); DObject parent = renderState.peekObject(); DObject object = null; @@ -67,17 +67,17 @@ public class ModelRendererExporter implements Exporter { } if (object == null) { object = new ModelBasedDObject(model, scale); - object.id.name = model.boxName; + object.id.name = model.name; object.setParent(parent); } object.lastFrame = frame; return object; } - private static DMesh generateMesh(ModelRenderer model, float scale) { + private static DMesh generateMesh(Cuboid model, float scale) { DMesh mesh = new DMesh(); BlendMeshBuilder builder = new BlendMeshBuilder(mesh); - for (ModelBox box : cubeList(model)) { + for (Box box : cubeList(model)) { box.render(builder, scale); } builder.maybeFinishDrawing(); @@ -85,17 +85,17 @@ public class ModelRendererExporter implements Exporter { } private static class ModelBasedDObject extends DObject { - private final ModelRenderer model; + private final Cuboid model; private final float scale; private boolean valid; - public ModelBasedDObject(ModelRenderer model, float scale) { + public ModelBasedDObject(Cuboid model, float scale) { super(generateMesh(model, scale)); this.model = model; this.scale = scale; } - public boolean isBasedOn(ModelRenderer model, float scale) { + public boolean isBasedOn(Cuboid model, float scale) { return this.model == model && Math.abs(this.scale - scale) < 1e-4; } diff --git a/src/main/java/com/replaymod/render/blend/exporters/ParticlesExporter.java b/src/main/java/com/replaymod/render/blend/exporters/ParticlesExporter.java index 3f9dd1c0..70e037fd 100644 --- a/src/main/java/com/replaymod/render/blend/exporters/ParticlesExporter.java +++ b/src/main/java/com/replaymod/render/blend/exporters/ParticlesExporter.java @@ -10,10 +10,10 @@ import com.replaymod.render.blend.data.DObject; import com.replaymod.render.blend.mixin.ParticleAccessor; import de.johni0702.minecraft.gui.utils.lwjgl.vector.Matrix4f; import de.johni0702.minecraft.gui.utils.lwjgl.vector.Vector3f; -import net.minecraft.client.Minecraft; +import net.minecraft.client.MinecraftClient; //#if MC>=11400 -//$$ import net.minecraft.util.math.Vec3d; +import net.minecraft.util.math.Vec3d; //#endif //#if MC>=10904 @@ -24,7 +24,7 @@ import net.minecraft.client.particle.Particle; //#endif //#if MC>=10809 -import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.client.render.VertexFormats; //#endif import java.io.IOException; @@ -35,7 +35,7 @@ import static com.replaymod.render.blend.Util.getCameraPos; import static com.replaymod.render.blend.Util.getGlModelViewMatrix; public class ParticlesExporter implements Exporter { - private final Minecraft mc = MCVer.getMinecraft(); + private final MinecraftClient mc = MCVer.getMinecraft(); private final RenderState renderState; private DObject pointAtObject; private DObject particlesObject; @@ -113,9 +113,9 @@ public class ParticlesExporter implements Exporter { // Instead of actually translating, we just add the translation on the current model-view-matrix. Matrix4f modelView = getGlModelViewMatrix(); ParticleAccessor acc = (ParticleAccessor) particle; - double dx = acc.getPrevPosX() + (acc.getPosX() - acc.getPrevPosX()) * renderPartialTicks - Particle.interpPosX; - double dy = acc.getPrevPosY() + (acc.getPosY() - acc.getPrevPosY()) * renderPartialTicks - Particle.interpPosY; - double dz = acc.getPrevPosZ() + (acc.getPosZ() - acc.getPrevPosZ()) * renderPartialTicks - Particle.interpPosZ; + double dx = acc.getPrevPosX() + (acc.getPosX() - acc.getPrevPosX()) * renderPartialTicks - Particle.cameraX; + double dy = acc.getPrevPosY() + (acc.getPosY() - acc.getPrevPosY()) * renderPartialTicks - Particle.cameraY; + double dz = acc.getPrevPosZ() + (acc.getPosZ() - acc.getPrevPosZ()) * renderPartialTicks - Particle.cameraZ; Vector3f offset = new Vector3f((float) dx, (float) dy, (float) dz); Matrix4f.translate(offset, modelView, modelView); renderState.pushModelView(modelView); @@ -162,22 +162,22 @@ public class ParticlesExporter implements Exporter { builder.setReverseOffset(offset); builder.setWellBehaved(true); //#if MC>=10809 - builder.begin(7, DefaultVertexFormats.PARTICLE_POSITION_TEX_COLOR_LMAP); + builder.begin(7, VertexFormats.POSITION_UV_COLOR_LMAP); //#else //$$ builder.startDrawingQuads(); //#endif //#if MC>=10809 - particle.renderParticle(builder, + particle.buildGeometry(builder, //#if MC>=11400 - //$$ MCVer.getMinecraft().gameRenderer.getCamera(), + MCVer.getMinecraft().gameRenderer.getCamera(), //#else - MCVer.getMinecraft().getRenderViewEntity(), + //$$ MCVer.getMinecraft().getRenderViewEntity(), //#endif 0, 1, 1, 0, 0, 0); //#else //$$ particle.func_180434_a(builder, Minecraft.getMinecraft().getRenderViewEntity(), 0, 1, 1, 0, 0, 0); //#endif - builder.finishDrawing(); + builder.end(); return mesh; } diff --git a/src/main/java/com/replaymod/render/blend/exporters/TileEntityExporter.java b/src/main/java/com/replaymod/render/blend/exporters/TileEntityExporter.java index ee3a1b83..84608cfc 100644 --- a/src/main/java/com/replaymod/render/blend/exporters/TileEntityExporter.java +++ b/src/main/java/com/replaymod/render/blend/exporters/TileEntityExporter.java @@ -7,8 +7,8 @@ import com.replaymod.render.blend.Exporter; import com.replaymod.render.blend.data.DObject; import de.johni0702.minecraft.gui.utils.lwjgl.vector.Matrix4f; import de.johni0702.minecraft.gui.utils.lwjgl.vector.Vector3f; -import net.minecraft.client.Minecraft; -import net.minecraft.tileentity.TileEntity; +import net.minecraft.client.MinecraftClient; +import net.minecraft.block.entity.BlockEntity; //#if MC>=10904 import net.minecraft.util.math.BlockPos; @@ -24,11 +24,11 @@ import static com.replaymod.render.blend.Util.getGlModelViewMatrix; import static com.replaymod.render.blend.Util.getTileEntityId; public class TileEntityExporter implements Exporter { - private final Minecraft mc = MCVer.getMinecraft(); + private final MinecraftClient mc = MCVer.getMinecraft(); private final RenderState renderState; private DObject tileEntitiesObject; - private Map tileEntityObjects; - private Map tileEntityObjectsSeen; + private Map tileEntityObjects; + private Map tileEntityObjectsSeen; public TileEntityExporter(RenderState renderState) { this.renderState = renderState; @@ -52,13 +52,13 @@ public class TileEntityExporter implements Exporter { // so we position it at 0/0/0 and instead have the tile entities themselves move more Matrix4f.translate(new Vector3f( //#if MC>=11400 - //$$ (float) -mc.getEntityRenderManager().camera.getPos().x, - //$$ (float) -mc.getEntityRenderManager().camera.getPos().y, - //$$ (float) -mc.getEntityRenderManager().camera.getPos().z + (float) -mc.getEntityRenderManager().camera.getPos().x, + (float) -mc.getEntityRenderManager().camera.getPos().y, + (float) -mc.getEntityRenderManager().camera.getPos().z //#else - (float) -mc.getRenderManager().viewerPosX, - (float) -mc.getRenderManager().viewerPosY, - (float) -mc.getRenderManager().viewerPosZ + //$$ (float) -mc.getRenderManager().viewerPosX, + //$$ (float) -mc.getRenderManager().viewerPosY, + //$$ (float) -mc.getRenderManager().viewerPosZ //#endif ), modelView, modelView); renderState.push(tileEntitiesObject, modelView); @@ -68,7 +68,7 @@ public class TileEntityExporter implements Exporter { renderState.pop(); } - public void preRender(TileEntity tileEntity, double dx, double dy, double dz, float renderPartialTicks, int destroyStage, float alpha) { + public void preRender(BlockEntity tileEntity, double dx, double dy, double dz, float renderPartialTicks, int destroyStage, float alpha) { // FIXME: handle alpha DObject tileEntityObject = tileEntityObjects.get(tileEntity); if (tileEntityObject == null) { @@ -102,7 +102,7 @@ public class TileEntityExporter implements Exporter { @Override public void postFrame(int frame) throws IOException { - for (Map.Entry entry : tileEntityObjects.entrySet()) { + for (Map.Entry entry : tileEntityObjects.entrySet()) { if (!tileEntityObjectsSeen.containsKey(entry.getKey())) { DObject object = entry.getValue(); object.keyframe("hide", 0, renderState.getFrame(), 1f); diff --git a/src/main/java/com/replaymod/render/blend/mixin/ContainerLocalRenderInformationAccessor.java b/src/main/java/com/replaymod/render/blend/mixin/ContainerLocalRenderInformationAccessor.java index 1e7e58e9..14827b18 100644 --- a/src/main/java/com/replaymod/render/blend/mixin/ContainerLocalRenderInformationAccessor.java +++ b/src/main/java/com/replaymod/render/blend/mixin/ContainerLocalRenderInformationAccessor.java @@ -1,25 +1,25 @@ //#if MC>=10800 package com.replaymod.render.blend.mixin; -import net.minecraft.client.renderer.chunk.RenderChunk; +import net.minecraft.client.render.chunk.ChunkRenderer; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Accessor; //#if MC>=11400 -//$$ @Mixin(targets = "net/minecraft/client/render/WorldRenderer/ChunkInfo") +@Mixin(targets = "net/minecraft/client/render/WorldRenderer/ChunkInfo") //#else //#if MC>=11300 -@Mixin(targets = "net/minecraft/client/renderer/WorldRenderer$ContainerLocalRenderInformation") +//$$ @Mixin(targets = "net/minecraft/client/renderer/WorldRenderer$ContainerLocalRenderInformation") //#else //$$ @Mixin(targets = "net/minecraft/client/renderer/RenderGlobal$ContainerLocalRenderInformation") //#endif //#endif public interface ContainerLocalRenderInformationAccessor { //#if MC>=11400 - //$$ @Accessor("renderer") + @Accessor("renderer") //#else - @Accessor + //$$ @Accessor //#endif - RenderChunk getRenderChunk(); + ChunkRenderer getRenderChunk(); } //#endif diff --git a/src/main/java/com/replaymod/render/blend/mixin/ItemRendererAccessor.java b/src/main/java/com/replaymod/render/blend/mixin/ItemRendererAccessor.java index 8f28a1e7..1778e389 100644 --- a/src/main/java/com/replaymod/render/blend/mixin/ItemRendererAccessor.java +++ b/src/main/java/com/replaymod/render/blend/mixin/ItemRendererAccessor.java @@ -1,14 +1,14 @@ //#if MC>=10904 package com.replaymod.render.blend.mixin; -import net.minecraft.client.renderer.ItemRenderer; -import net.minecraft.client.renderer.color.ItemColors; +import net.minecraft.client.render.item.ItemRenderer; +import net.minecraft.client.render.item.ItemColorMap; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Accessor; @Mixin(ItemRenderer.class) public interface ItemRendererAccessor { - @Accessor - ItemColors getItemColors(); + @Accessor("colorMap") + ItemColorMap getItemColors(); } //#endif diff --git a/src/main/java/com/replaymod/render/blend/mixin/MixinChunkRenderWorker.java b/src/main/java/com/replaymod/render/blend/mixin/MixinChunkRenderWorker.java index 46ea9cde..e2002298 100644 --- a/src/main/java/com/replaymod/render/blend/mixin/MixinChunkRenderWorker.java +++ b/src/main/java/com/replaymod/render/blend/mixin/MixinChunkRenderWorker.java @@ -3,14 +3,14 @@ package com.replaymod.render.blend.mixin; import com.replaymod.render.blend.BlendState; import com.replaymod.render.blend.exporters.ChunkExporter; -import net.minecraft.client.renderer.chunk.ChunkRenderWorker; +import net.minecraft.client.render.chunk.ChunkRenderWorker; 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; //#if MC>=11300 -import net.minecraft.client.renderer.chunk.ChunkRenderTask; +import net.minecraft.client.render.chunk.ChunkRenderTask; //#else //$$ import net.minecraft.client.renderer.chunk.ChunkCompileTaskGenerator; //#endif @@ -18,14 +18,14 @@ import net.minecraft.client.renderer.chunk.ChunkRenderTask; @Mixin(ChunkRenderWorker.class) public abstract class MixinChunkRenderWorker { - @Inject(method = "processTask", at = @At("RETURN")) + @Inject(method = "runTask", at = @At("RETURN")) //#if MC>=11300 public void afterChunkUpdate(ChunkRenderTask task, CallbackInfo ci) { BlendState blendState = BlendState.getState(); if (blendState != null) { - if (task.getStatus() == ChunkRenderTask.Status.DONE - && task.getType() == ChunkRenderTask.Type.REBUILD_CHUNK) { - blendState.get(ChunkExporter.class).addChunkUpdate(task.getRenderChunk(), task.getCompiledChunk()); + if (task.getStage() == ChunkRenderTask.Stage.DONE + && task.getMode() == ChunkRenderTask.Mode.REBUILD_CHUNK) { + blendState.get(ChunkExporter.class).addChunkUpdate(task.getChunkRenderer(), task.getRenderData()); } } } diff --git a/src/main/java/com/replaymod/render/blend/mixin/MixinEffectRenderer.java b/src/main/java/com/replaymod/render/blend/mixin/MixinEffectRenderer.java index 41dcb82b..f0355c54 100644 --- a/src/main/java/com/replaymod/render/blend/mixin/MixinEffectRenderer.java +++ b/src/main/java/com/replaymod/render/blend/mixin/MixinEffectRenderer.java @@ -9,9 +9,9 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; //#if MC>=11400 -//$$ import net.minecraft.client.render.Camera; +import net.minecraft.client.render.Camera; //#else -import net.minecraft.entity.Entity; +//$$ import net.minecraft.entity.Entity; //#endif //#if MC>=10904 @@ -30,9 +30,9 @@ public abstract class MixinEffectRenderer { @Inject(method = "renderParticles", at = @At("HEAD")) private void preRender( //#if MC>=11400 - //$$ Camera view, + Camera view, //#else - Entity view, + //$$ Entity view, //#endif float renderPartialTicks, CallbackInfo ci @@ -46,9 +46,9 @@ public abstract class MixinEffectRenderer { @Inject(method = "renderParticles", at = @At("RETURN")) private void postRender( //#if MC>=11400 - //$$ Camera view, + Camera view, //#else - Entity view, + //$$ Entity view, //#endif float renderPartialTicks, CallbackInfo ci @@ -60,21 +60,21 @@ public abstract class MixinEffectRenderer { } //#if MC<11400 - @Inject(method = "renderLitParticles", at = @At("HEAD")) - public void preLitRender(Entity view, float renderPartialTicks, CallbackInfo ci) { - BlendState blendState = BlendState.getState(); - if (blendState != null) { - blendState.get(ParticlesExporter.class).preParticlesRender(true); - } - } - - @Inject(method = "renderLitParticles", at = @At("RETURN")) - public void postLitRender(Entity view, float renderPartialTicks, CallbackInfo ci) { - BlendState blendState = BlendState.getState(); - if (blendState != null) { - blendState.get(ParticlesExporter.class).postParticlesRender(); - } - } + //$$ @Inject(method = "renderLitParticles", at = @At("HEAD")) + //$$ public void preLitRender(Entity view, float renderPartialTicks, CallbackInfo ci) { + //$$ BlendState blendState = BlendState.getState(); + //$$ if (blendState != null) { + //$$ blendState.get(ParticlesExporter.class).preParticlesRender(true); + //$$ } + //$$ } + //$$ + //$$ @Inject(method = "renderLitParticles", at = @At("RETURN")) + //$$ public void postLitRender(Entity view, float renderPartialTicks, CallbackInfo ci) { + //$$ BlendState blendState = BlendState.getState(); + //$$ if (blendState != null) { + //$$ blendState.get(ParticlesExporter.class).postParticlesRender(); + //$$ } + //$$ } //#endif } //#endif diff --git a/src/main/java/com/replaymod/render/blend/mixin/MixinModelRenderer.java b/src/main/java/com/replaymod/render/blend/mixin/MixinModelRenderer.java index e452b1f5..afd1c82b 100644 --- a/src/main/java/com/replaymod/render/blend/mixin/MixinModelRenderer.java +++ b/src/main/java/com/replaymod/render/blend/mixin/MixinModelRenderer.java @@ -9,26 +9,26 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; //#if MC>=11300 -import net.minecraft.client.renderer.entity.model.ModelRenderer; +import net.minecraft.client.model.Cuboid; //#else //$$ import net.minecraft.client.model.ModelRenderer; //#endif -@Mixin(ModelRenderer.class) +@Mixin(Cuboid.class) public abstract class MixinModelRenderer { @Inject(method = "render", at = @At("HEAD")) public void preRender(float scale, CallbackInfo ci) { BlendState blendState = BlendState.getState(); if (blendState != null) { - blendState.get(ModelRendererExporter.class).preRenderModel((ModelRenderer)(Object)this, scale); + blendState.get(ModelRendererExporter.class).preRenderModel((Cuboid)(Object)this, scale); } } - @Inject(method = "renderWithRotation", at = @At("HEAD")) + @Inject(method = "method_2852", at = @At("HEAD")) public void preRenderWithRotation(float scale, CallbackInfo ci) { BlendState blendState = BlendState.getState(); if (blendState != null) { - blendState.get(ModelRendererExporter.class).preRenderModel((ModelRenderer)(Object)this, scale); + blendState.get(ModelRendererExporter.class).preRenderModel((Cuboid)(Object)this, scale); } } @@ -40,7 +40,7 @@ public abstract class MixinModelRenderer { } } - @Inject(method = "renderWithRotation", at = @At("RETURN")) + @Inject(method = "method_2852", at = @At("RETURN")) public void postRenderWithRotation(float scale, CallbackInfo ci) { BlendState blendState = BlendState.getState(); if (blendState != null) { @@ -50,7 +50,7 @@ public abstract class MixinModelRenderer { @Inject(method = "render", at = @At(value = "INVOKE", - target = "Lnet/minecraft/client/renderer/GlStateManager;callList(I)V"), + target = "Lcom/mojang/blaze3d/platform/GlStateManager;callList(I)V"), expect = 3) public void onRender(float scale, CallbackInfo ci) { BlendState blendState = BlendState.getState(); @@ -59,9 +59,9 @@ public abstract class MixinModelRenderer { } } - @Inject(method = "renderWithRotation", + @Inject(method = "method_2852", at = @At(value = "INVOKE", - target = "Lnet/minecraft/client/renderer/GlStateManager;callList(I)V")) + target = "Lcom/mojang/blaze3d/platform/GlStateManager;callList(I)V")) public void onRenderWithRotation(float scale, CallbackInfo ci) { BlendState blendState = BlendState.getState(); if (blendState != null) { diff --git a/src/main/java/com/replaymod/render/blend/mixin/MixinRenderGlobal.java b/src/main/java/com/replaymod/render/blend/mixin/MixinRenderGlobal.java index 925ee531..35ad4256 100644 --- a/src/main/java/com/replaymod/render/blend/mixin/MixinRenderGlobal.java +++ b/src/main/java/com/replaymod/render/blend/mixin/MixinRenderGlobal.java @@ -4,20 +4,20 @@ package com.replaymod.render.blend.mixin; import com.replaymod.render.blend.BlendState; import com.replaymod.render.blend.exporters.EntityExporter; import com.replaymod.render.blend.exporters.TileEntityExporter; -import net.minecraft.client.renderer.culling.ICamera; +import net.minecraft.client.render.VisibleRegion; 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; //#if MC>=11400 -//$$ import net.minecraft.client.render.Camera; +import net.minecraft.client.render.Camera; //#else -import net.minecraft.entity.Entity; +//$$ import net.minecraft.entity.Entity; //#endif //#if MC>=11300 -import net.minecraft.client.renderer.WorldRenderer; +import net.minecraft.client.render.WorldRenderer; //#else //$$ import net.minecraft.client.renderer.RenderGlobal; //#endif @@ -34,17 +34,17 @@ public abstract class MixinRenderGlobal { @Inject(method = "renderEntities", at = @At(value = "INVOKE", //#if MC>=10904 - target = "Lnet/minecraft/client/renderer/entity/RenderManager;renderEntityStatic(Lnet/minecraft/entity/Entity;FZ)V")) + target = "Lnet/minecraft/client/render/entity/EntityRenderDispatcher;render(Lnet/minecraft/entity/Entity;FZ)V")) //#else //$$ target = "Lnet/minecraft/client/renderer/entity/RenderManager;renderEntitySimple(Lnet/minecraft/entity/Entity;F)Z")) //#endif private void preEntityRender( //#if MC>=11400 - //$$ Camera view, + Camera view, //#else - Entity view, + //$$ Entity view, //#endif - ICamera camera, float renderPartialTicks, CallbackInfo ci) { + VisibleRegion camera, float renderPartialTicks, CallbackInfo ci) { BlendState blendState = BlendState.getState(); if (blendState != null) { blendState.get(EntityExporter.class).preEntitiesRender(); @@ -54,18 +54,18 @@ public abstract class MixinRenderGlobal { @Inject(method = "renderEntities", at = @At(value = "INVOKE", //#if MC>=10904 - target = "Lnet/minecraft/client/renderer/entity/RenderManager;renderEntityStatic(Lnet/minecraft/entity/Entity;FZ)V", + target = "Lnet/minecraft/client/render/entity/EntityRenderDispatcher;render(Lnet/minecraft/entity/Entity;FZ)V", //#else //$$ target = "Lnet/minecraft/client/renderer/entity/RenderManager;renderEntitySimple(Lnet/minecraft/entity/Entity;F)Z", //#endif shift = At.Shift.AFTER)) private void postEntityRender( //#if MC>=11400 - //$$ Camera view, + Camera view, //#else - Entity view, + //$$ Entity view, //#endif - ICamera camera, float renderPartialTicks, CallbackInfo ci) { + VisibleRegion camera, float renderPartialTicks, CallbackInfo ci) { BlendState blendState = BlendState.getState(); if (blendState != null) { blendState.get(EntityExporter.class).postEntitiesRender(); @@ -75,18 +75,18 @@ public abstract class MixinRenderGlobal { @Inject(method = "renderEntities", at = @At( value = "INVOKE", //#if MC>=11300 - target = "Lnet/minecraft/client/renderer/tileentity/TileEntityRendererDispatcher;render(Lnet/minecraft/tileentity/TileEntity;FI)V" + target = "Lnet/minecraft/client/render/block/entity/BlockEntityRenderDispatcher;render(Lnet/minecraft/block/entity/BlockEntity;FI)V" //#else //$$ target = "Lnet/minecraft/client/renderer/tileentity/TileEntityRendererDispatcher;renderTileEntity(Lnet/minecraft/tileentity/TileEntity;FI)V" //#endif )) private void preTileEntityRender( //#if MC>=11400 - //$$ Camera view, + Camera view, //#else - Entity view, + //$$ Entity view, //#endif - ICamera camera, float renderPartialTicks, CallbackInfo ci) { + VisibleRegion camera, float renderPartialTicks, CallbackInfo ci) { BlendState blendState = BlendState.getState(); if (blendState != null) { blendState.get(TileEntityExporter.class).preTileEntitiesRender(); @@ -96,7 +96,7 @@ public abstract class MixinRenderGlobal { @Inject(method = "renderEntities", at = @At( value = "INVOKE", //#if MC>=11300 - target = "Lnet/minecraft/client/renderer/tileentity/TileEntityRendererDispatcher;render(Lnet/minecraft/tileentity/TileEntity;FI)V", + target = "Lnet/minecraft/client/render/block/entity/BlockEntityRenderDispatcher;render(Lnet/minecraft/block/entity/BlockEntity;FI)V", //#else //$$ target = "Lnet/minecraft/client/renderer/tileentity/TileEntityRendererDispatcher;renderTileEntity(Lnet/minecraft/tileentity/TileEntity;FI)V", //#endif @@ -104,11 +104,11 @@ public abstract class MixinRenderGlobal { )) private void postTileEntityRender( //#if MC>=11400 - //$$ Camera view, + Camera view, //#else - Entity view, + //$$ Entity view, //#endif - ICamera camera, float renderPartialTicks, CallbackInfo ci) { + VisibleRegion camera, float renderPartialTicks, CallbackInfo ci) { BlendState blendState = BlendState.getState(); if (blendState != null) { blendState.get(TileEntityExporter.class).postTileEntitiesRender(); diff --git a/src/main/java/com/replaymod/render/blend/mixin/MixinRenderItem.java b/src/main/java/com/replaymod/render/blend/mixin/MixinRenderItem.java index 494348d9..0eefd916 100644 --- a/src/main/java/com/replaymod/render/blend/mixin/MixinRenderItem.java +++ b/src/main/java/com/replaymod/render/blend/mixin/MixinRenderItem.java @@ -10,8 +10,8 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; //#if MC>=11300 -import net.minecraft.client.renderer.ItemRenderer; -import net.minecraft.client.renderer.model.IBakedModel; +import net.minecraft.client.render.item.ItemRenderer; +import net.minecraft.client.render.model.BakedModel; //#else //#if MC>=10904 //$$ import net.minecraft.client.renderer.RenderItem; @@ -29,11 +29,11 @@ import net.minecraft.client.renderer.model.IBakedModel; //#endif public abstract class MixinRenderItem { //#if MC>=11400 - //$$ @Inject(method = "renderItemModel", at = @At("HEAD")) + @Inject(method = "renderItemModel", at = @At("HEAD")) //#else //#if MC>=11300 - @Inject(method = "renderModel(Lnet/minecraft/client/renderer/model/IBakedModel;Lnet/minecraft/item/ItemStack;)V", - at = @At("HEAD")) + //$$ @Inject(method = "renderModel(Lnet/minecraft/client/renderer/model/IBakedModel;Lnet/minecraft/item/ItemStack;)V", + //$$ at = @At("HEAD")) //#else //#if MC>=10904 //$$ @Inject(method = "renderModel(Lnet/minecraft/client/renderer/block/model/IBakedModel;Lnet/minecraft/item/ItemStack;)V", @@ -44,7 +44,7 @@ public abstract class MixinRenderItem { //#endif //#endif //#endif - private void onRenderModel(IBakedModel model, ItemStack stack, CallbackInfo ci) { + private void onRenderModel(BakedModel model, ItemStack stack, CallbackInfo ci) { BlendState blendState = BlendState.getState(); if (blendState != null) { blendState.get(ItemExporter.class).onRender(this, model, stack); diff --git a/src/main/java/com/replaymod/render/blend/mixin/MixinRenderLivingBase.java b/src/main/java/com/replaymod/render/blend/mixin/MixinRenderLivingBase.java index a470219a..a356c2be 100644 --- a/src/main/java/com/replaymod/render/blend/mixin/MixinRenderLivingBase.java +++ b/src/main/java/com/replaymod/render/blend/mixin/MixinRenderLivingBase.java @@ -3,34 +3,34 @@ package com.replaymod.render.blend.mixin; import com.replaymod.render.blend.BlendState; import com.replaymod.render.blend.exporters.EntityExporter; -import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.LivingEntity; 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; //#if MC>=10904 -import net.minecraft.client.renderer.entity.RenderLivingBase; +import net.minecraft.client.render.entity.LivingEntityRenderer; //#else //$$ import net.minecraft.client.renderer.entity.RendererLivingEntity; //#endif //#if MC>=10904 -@Mixin(RenderLivingBase.class) +@Mixin(LivingEntityRenderer.class) //#else //$$ @Mixin(RendererLivingEntity.class) //#endif public abstract class MixinRenderLivingBase { - @Inject(method = "doRender", at = @At( + @Inject(method = "method_4054", at = @At( value = "INVOKE", //#if MC>=10904 - target = "Lnet/minecraft/client/renderer/entity/RenderLivingBase;prepareScale(Lnet/minecraft/entity/EntityLivingBase;F)F", + target = "Lnet/minecraft/client/render/entity/LivingEntityRenderer;scaleAndTranslate(Lnet/minecraft/entity/LivingEntity;F)F", //#else //$$ target = "Lnet/minecraft/client/renderer/entity/RendererLivingEntity;preRenderCallback(Lnet/minecraft/entity/EntityLivingBase;F)V", //#endif shift = At.Shift.AFTER )) - private void recordModelMatrix(EntityLivingBase entity, double x, double y, double z, float entityYaw, float partialTicks, CallbackInfo ci) { + private void recordModelMatrix(LivingEntity entity, double x, double y, double z, float entityYaw, float partialTicks, CallbackInfo ci) { BlendState blendState = BlendState.getState(); if (blendState != null) { blendState.get(EntityExporter.class).postEntityLivingSetup(); diff --git a/src/main/java/com/replaymod/render/blend/mixin/MixinRenderManager.java b/src/main/java/com/replaymod/render/blend/mixin/MixinRenderManager.java index ec5ff5ba..e6084995 100644 --- a/src/main/java/com/replaymod/render/blend/mixin/MixinRenderManager.java +++ b/src/main/java/com/replaymod/render/blend/mixin/MixinRenderManager.java @@ -3,7 +3,7 @@ package com.replaymod.render.blend.mixin; import com.replaymod.render.blend.BlendState; import com.replaymod.render.blend.exporters.EntityExporter; -import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.client.render.entity.EntityRenderDispatcher; import net.minecraft.entity.Entity; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -15,21 +15,21 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; //$$ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; //#endif -@Mixin(RenderManager.class) +@Mixin(EntityRenderDispatcher.class) public abstract class MixinRenderManager { @Inject( //#if MC>=11400 - //$$ method = "render(Lnet/minecraft/entity/Entity;DDDFFZ)V", + method = "render(Lnet/minecraft/entity/Entity;DDDFFZ)V", //#else //#if MC>=11300 - method = "renderEntity", + //$$ method = "renderEntity", //#else //$$ method = "doRenderEntity", //#endif //#endif at = @At(value = "INVOKE", - target = "Lnet/minecraft/client/renderer/entity/Render;doRender(Lnet/minecraft/entity/Entity;DDDFF)V")) + target = "Lnet/minecraft/client/render/entity/EntityRenderer;render(Lnet/minecraft/entity/Entity;DDDFF)V")) public void preRender(Entity entity, double x, double y, double z, float yaw, float renderPartialTicks, boolean box, //#if MC>=10904 CallbackInfo ci) { @@ -44,16 +44,16 @@ public abstract class MixinRenderManager { @Inject( //#if MC>=11400 - //$$ method = "render(Lnet/minecraft/entity/Entity;DDDFFZ)V", + method = "render(Lnet/minecraft/entity/Entity;DDDFFZ)V", //#else //#if MC>=11300 - method = "renderEntity", + //$$ method = "renderEntity", //#else //$$ method = "doRenderEntity", //#endif //#endif at = @At(value = "INVOKE", - target = "Lnet/minecraft/client/renderer/entity/Render;doRender(Lnet/minecraft/entity/Entity;DDDFF)V", + target = "Lnet/minecraft/client/render/entity/EntityRenderer;render(Lnet/minecraft/entity/Entity;DDDFF)V", shift = At.Shift.AFTER)) public void postRender(Entity entity, double x, double y, double z, float yaw, float renderPartialTicks, boolean box, //#if MC>=10904 diff --git a/src/main/java/com/replaymod/render/blend/mixin/MixinTileEntityRendererDispatcher.java b/src/main/java/com/replaymod/render/blend/mixin/MixinTileEntityRendererDispatcher.java index f88593d8..f21e4cda 100644 --- a/src/main/java/com/replaymod/render/blend/mixin/MixinTileEntityRendererDispatcher.java +++ b/src/main/java/com/replaymod/render/blend/mixin/MixinTileEntityRendererDispatcher.java @@ -3,25 +3,25 @@ package com.replaymod.render.blend.mixin; import com.replaymod.render.blend.BlendState; import com.replaymod.render.blend.exporters.TileEntityExporter; -import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher; -import net.minecraft.tileentity.TileEntity; +import net.minecraft.client.render.block.entity.BlockEntityRenderDispatcher; +import net.minecraft.block.entity.BlockEntity; 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; -@Mixin(TileEntityRendererDispatcher.class) +@Mixin(BlockEntityRenderDispatcher.class) public abstract class MixinTileEntityRendererDispatcher { //#if MC>=11300 //#if MC>=11400 - //$$ @Inject(method = "renderEntity(Lnet/minecraft/block/entity/BlockEntity;DDDFIZ)V", - //$$ at = @At("HEAD")) - //#else - @Inject(method = "render(Lnet/minecraft/tileentity/TileEntity;DDDFIZ)V", + @Inject(method = "renderEntity(Lnet/minecraft/block/entity/BlockEntity;DDDFIZ)V", at = @At("HEAD")) + //#else + //$$ @Inject(method = "render(Lnet/minecraft/tileentity/TileEntity;DDDFIZ)V", + //$$ at = @At("HEAD")) //#endif - public void preRender(TileEntity tileEntity, double x, double y, double z, float renderPartialTicks, int destroyStage, boolean hasNoBlock, CallbackInfo ci) { + public void preRender(BlockEntity tileEntity, double x, double y, double z, float renderPartialTicks, int destroyStage, boolean hasNoBlock, CallbackInfo ci) { float alpha = 1; //#else //#if MC>=11200 @@ -43,13 +43,13 @@ public abstract class MixinTileEntityRendererDispatcher { //#if MC>=11300 //#if MC>=11400 - //$$ @Inject(method = "renderEntity(Lnet/minecraft/block/entity/BlockEntity;DDDFIZ)V", - //$$ at = @At("RETURN")) - //#else - @Inject(method = "render(Lnet/minecraft/tileentity/TileEntity;DDDFIZ)V", + @Inject(method = "renderEntity(Lnet/minecraft/block/entity/BlockEntity;DDDFIZ)V", at = @At("RETURN")) + //#else + //$$ @Inject(method = "render(Lnet/minecraft/tileentity/TileEntity;DDDFIZ)V", + //$$ at = @At("RETURN")) //#endif - public void postRender(TileEntity tileEntity, double x, double y, double z, float renderPartialTicks, int destroyStage, boolean hasNoBlock, CallbackInfo ci) { + public void postRender(BlockEntity tileEntity, double x, double y, double z, float renderPartialTicks, int destroyStage, boolean hasNoBlock, CallbackInfo ci) { //#else //#if MC>=11200 //$$ @Inject(method = "renderTileEntityAt(Lnet/minecraft/tileentity/TileEntity;DDDFIF)V", diff --git a/src/main/java/com/replaymod/render/blend/mixin/ParticleAccessor.java b/src/main/java/com/replaymod/render/blend/mixin/ParticleAccessor.java index b1763234..47a5304d 100644 --- a/src/main/java/com/replaymod/render/blend/mixin/ParticleAccessor.java +++ b/src/main/java/com/replaymod/render/blend/mixin/ParticleAccessor.java @@ -17,11 +17,11 @@ public interface ParticleAccessor double getPrevPosY(); @Accessor double getPrevPosZ(); - @Accessor + @Accessor("x") double getPosX(); - @Accessor + @Accessor("y") double getPosY(); - @Accessor + @Accessor("z") double getPosZ(); //#endif } diff --git a/src/main/java/com/replaymod/render/blend/mixin/WorldRendererAccessor.java b/src/main/java/com/replaymod/render/blend/mixin/WorldRendererAccessor.java index 6401b35a..1ac1271d 100644 --- a/src/main/java/com/replaymod/render/blend/mixin/WorldRendererAccessor.java +++ b/src/main/java/com/replaymod/render/blend/mixin/WorldRendererAccessor.java @@ -1,7 +1,7 @@ //#if MC>=10800 package com.replaymod.render.blend.mixin; -import net.minecraft.client.renderer.WorldRenderer; +import net.minecraft.client.render.WorldRenderer; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Accessor; @@ -9,7 +9,7 @@ import java.util.List; @Mixin(WorldRenderer.class) public interface WorldRendererAccessor { - @Accessor + @Accessor("chunkInfos") List getRenderInfos(); } //#endif diff --git a/src/main/java/com/replaymod/render/capturer/MultiFramePboOpenGlFrameCapturer.java b/src/main/java/com/replaymod/render/capturer/MultiFramePboOpenGlFrameCapturer.java index 2af60ffe..c552df43 100644 --- a/src/main/java/com/replaymod/render/capturer/MultiFramePboOpenGlFrameCapturer.java +++ b/src/main/java/com/replaymod/render/capturer/MultiFramePboOpenGlFrameCapturer.java @@ -80,9 +80,9 @@ public abstract class MultiFramePboOpenGlFrameCapturer { - private static final ResourceLocation vertexResource = new ResourceLocation("replaymod", "shader/ods.vert"); - private static final ResourceLocation fragmentResource = new ResourceLocation("replaymod", "shader/ods.frag"); + private static final Identifier vertexResource = new Identifier("replaymod", "shader/ods.vert"); + private static final Identifier fragmentResource = new Identifier("replaymod", "shader/ods.frag"); private final CubicPboOpenGlFrameCapturer left, right; private final Program shaderProgram; @@ -73,7 +73,7 @@ public class ODSFrameCapturer implements FrameCapturer { leftEyeVariable = shaderProgram.getUniformVariable("leftEye"); directionVariable = shaderProgram.getUniformVariable("direction"); } catch (Exception e) { - throw new ReportedException(CrashReport.makeCrashReport(e, "Creating ODS shaders")); + throw new CrashException(CrashReport.create(e, "Creating ODS shaders")); } } @@ -146,19 +146,19 @@ public class ODSFrameCapturer implements FrameCapturer { resize(getFrameWidth(), getFrameHeight()); pushMatrix(); - frameBuffer().bindFramebuffer(true); + frameBuffer().beginWrite(true); clear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT //#if MC>=11400 - //$$ , false + , false //#endif ); - enableTexture2D(); + enableTexture(); directionVariable.set(captureData.ordinal()); worldRenderer.renderWorld(partialTicks, null); - frameBuffer().unbindFramebuffer(); + frameBuffer().endWrite(); popMatrix(); return captureFrame(frameId, captureData); diff --git a/src/main/java/com/replaymod/render/capturer/OpenGlFrameCapturer.java b/src/main/java/com/replaymod/render/capturer/OpenGlFrameCapturer.java index a570d829..c6c3691f 100644 --- a/src/main/java/com/replaymod/render/capturer/OpenGlFrameCapturer.java +++ b/src/main/java/com/replaymod/render/capturer/OpenGlFrameCapturer.java @@ -8,8 +8,8 @@ import com.replaymod.render.utils.ByteBufferPool; import de.johni0702.minecraft.gui.utils.lwjgl.Dimension; import de.johni0702.minecraft.gui.utils.lwjgl.ReadableDimension; import de.johni0702.minecraft.gui.utils.lwjgl.WritableDimension; -import net.minecraft.client.Minecraft; -import net.minecraft.client.shader.Framebuffer; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gl.GlFramebuffer; import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL12; @@ -21,7 +21,7 @@ import com.replaymod.render.mixin.MainWindowAccessor; //#endif //#if MC>=10800 -import static net.minecraft.client.renderer.GlStateManager.*; +import static com.mojang.blaze3d.platform.GlStateManager.*; //#else //$$ import static com.replaymod.core.versions.MCVer.GlStateManager.*; //#endif @@ -33,9 +33,9 @@ public abstract class OpenGlFrameCapturer=11400 - //$$ , false + , false //#endif ); - enableTexture2D(); + enableTexture(); worldRenderer.renderWorld(partialTicks, captureData); - frameBuffer().unbindFramebuffer(); + frameBuffer().endWrite(); popMatrix(); return captureFrame(frameId, captureData); @@ -106,9 +106,9 @@ public abstract class OpenGlFrameCapturer=11300 - Framebuffer fb = mc.getFramebuffer(); - if (fb.framebufferWidth != width || fb.framebufferHeight != height) { - fb.createFramebuffer(width, height + GlFramebuffer fb = mc.getFramebuffer(); + if (fb.viewWidth != width || fb.viewHeight != height) { + fb.initFbo(width, height //#if MC>=11400 - //$$ , false + , false //#endif ); } //noinspection ConstantConditions - MainWindowAccessor mainWindow = (MainWindowAccessor) (Object) mc.mainWindow; + MainWindowAccessor mainWindow = (MainWindowAccessor) (Object) mc.window; mainWindow.setFramebufferWidth(width); mainWindow.setFramebufferHeight(height); //#else diff --git a/src/main/java/com/replaymod/render/capturer/SimplePboOpenGlFrameCapturer.java b/src/main/java/com/replaymod/render/capturer/SimplePboOpenGlFrameCapturer.java index 52132e9f..9bbdba57 100644 --- a/src/main/java/com/replaymod/render/capturer/SimplePboOpenGlFrameCapturer.java +++ b/src/main/java/com/replaymod/render/capturer/SimplePboOpenGlFrameCapturer.java @@ -64,9 +64,9 @@ public class SimplePboOpenGlFrameCapturer extends OpenGlFrameCapturer { // Assume they know what they're doing - getMinecraft().displayGuiScreen(null); + getMinecraft().openScreen(null); }); } } diff --git a/src/main/java/com/replaymod/render/gui/GuiRenderQueue.java b/src/main/java/com/replaymod/render/gui/GuiRenderQueue.java index f559746c..256b5a3f 100644 --- a/src/main/java/com/replaymod/render/gui/GuiRenderQueue.java +++ b/src/main/java/com/replaymod/render/gui/GuiRenderQueue.java @@ -29,8 +29,8 @@ import de.johni0702.minecraft.gui.popup.GuiYesNoPopup; import de.johni0702.minecraft.gui.utils.Colors; import de.johni0702.minecraft.gui.utils.lwjgl.Dimension; import de.johni0702.minecraft.gui.utils.lwjgl.ReadableDimension; -import net.minecraft.client.gui.GuiErrorScreen; -import net.minecraft.crash.CrashReport; +import net.minecraft.client.gui.menu.NoticeScreen; +import net.minecraft.util.crash.CrashReport; import javax.annotation.Nullable; import java.util.List; @@ -38,7 +38,7 @@ import java.util.List; import static com.replaymod.render.ReplayModRender.LOGGER; //#if MC>=11400 -//$$ import net.minecraft.text.TranslatableTextComponent; +import net.minecraft.text.TranslatableTextComponent; //#endif public class GuiRenderQueue extends AbstractGuiPopup { @@ -204,7 +204,7 @@ public class GuiRenderQueue extends AbstractGuiPopup { private void processQueue(Iterable queue) { // Close all GUIs (so settings in GuiRenderSettings are saved) - getMinecraft().displayGuiScreen(null); + getMinecraft().openScreen(null); // Start rendering int jobsDone = 0; for (RenderJob renderJob : queue) { @@ -214,17 +214,17 @@ public class GuiRenderQueue extends AbstractGuiPopup { videoRenderer.renderVideo(); } catch (VideoWriter.NoFFmpegException e) { LOGGER.error("Rendering video:", e); - GuiErrorScreen errorScreen = new GuiErrorScreen( + NoticeScreen errorScreen = new NoticeScreen( //#if MC>=11400 - //$$ () -> {}, - //$$ new TranslatableTextComponent("replaymod.gui.rendering.error.title"), - //$$ new TranslatableTextComponent("replaymod.gui.rendering.error.message") + () -> {}, + new TranslatableTextComponent("replaymod.gui.rendering.error.title"), + new TranslatableTextComponent("replaymod.gui.rendering.error.message") //#else - I18n.format("replaymod.gui.rendering.error.title"), - I18n.format("replaymod.gui.rendering.error.message") + //$$ I18n.format("replaymod.gui.rendering.error.title"), + //$$ I18n.format("replaymod.gui.rendering.error.message") //#endif ); - getMinecraft().displayGuiScreen(errorScreen); + getMinecraft().openScreen(errorScreen); return; } catch (VideoWriter.FFmpegStartupException e) { int jobsToSkip = jobsDone; @@ -236,7 +236,7 @@ public class GuiRenderQueue extends AbstractGuiPopup { }); return; } catch (Throwable t) { - Utils.error(LOGGER, this, CrashReport.makeCrashReport(t, "Rendering video"), () -> {}); + Utils.error(LOGGER, this, CrashReport.create(t, "Rendering video"), () -> {}); container.display(); // Re-show the queue popup and the new error popup return; } diff --git a/src/main/java/com/replaymod/render/gui/GuiRenderSettings.java b/src/main/java/com/replaymod/render/gui/GuiRenderSettings.java index 98e38136..2201922c 100644 --- a/src/main/java/com/replaymod/render/gui/GuiRenderSettings.java +++ b/src/main/java/com/replaymod/render/gui/GuiRenderSettings.java @@ -32,9 +32,9 @@ import de.johni0702.minecraft.gui.utils.lwjgl.Color; import de.johni0702.minecraft.gui.utils.lwjgl.Dimension; import de.johni0702.minecraft.gui.utils.lwjgl.ReadableColor; import de.johni0702.minecraft.gui.utils.lwjgl.ReadableDimension; -import net.minecraft.client.gui.GuiErrorScreen; -import net.minecraft.client.resources.I18n; -import net.minecraft.crash.CrashReport; +import net.minecraft.client.gui.menu.NoticeScreen; +import net.minecraft.client.resource.language.I18n; +import net.minecraft.util.crash.CrashReport; import javax.annotation.Nullable; import java.io.File; @@ -52,7 +52,7 @@ import static com.replaymod.core.utils.Utils.error; import static com.replaymod.render.ReplayModRender.LOGGER; //#if MC>=11400 -//$$ import net.minecraft.text.TranslatableTextComponent; +import net.minecraft.text.TranslatableTextComponent; //#endif public class GuiRenderSettings extends GuiScreen implements Closeable { @@ -108,7 +108,7 @@ public class GuiRenderSettings extends GuiScreen implements Closeable { public final GuiSlider frameRateSlider = new GuiSlider().onValueChanged(new Runnable() { @Override public void run() { - frameRateSlider.setText(I18n.format("replaymod.gui.rendersettings.framerate") + frameRateSlider.setText(I18n.translate("replaymod.gui.rendersettings.framerate") + ": " + (frameRateSlider.getValue() + 10)); } }).setSize(122, 20).setSteps(110); @@ -177,7 +177,7 @@ public class GuiRenderSettings extends GuiScreen implements Closeable { .onValueChanged(new Runnable() { @Override public void run() { - sphericalFovSlider.setText(I18n.format("replaymod.gui.rendersettings.sphericalFov") + sphericalFovSlider.setText(I18n.translate("replaymod.gui.rendersettings.sphericalFov") + ": " + (MIN_SPHERICAL_FOV + sphericalFovSlider.getValue() * SPHERICAL_FOV_STEP_SIZE) + "°"); updateInputs(); @@ -231,23 +231,23 @@ public class GuiRenderSettings extends GuiScreen implements Closeable { @Override public void run() { // Closing this GUI ensures that settings are saved - getMinecraft().displayGuiScreen(null); + getMinecraft().openScreen(null); try { VideoRenderer videoRenderer = new VideoRenderer(save(false), replayHandler, timeline); videoRenderer.renderVideo(); } catch (VideoWriter.NoFFmpegException e) { LOGGER.error("Rendering video:", e); - GuiErrorScreen errorScreen = new GuiErrorScreen( + NoticeScreen errorScreen = new NoticeScreen( //#if MC>=11400 - //$$ () -> {}, - //$$ new TranslatableTextComponent("replaymod.gui.rendering.error.title"), - //$$ new TranslatableTextComponent("replaymod.gui.rendering.error.message") + () -> {}, + new TranslatableTextComponent("replaymod.gui.rendering.error.title"), + new TranslatableTextComponent("replaymod.gui.rendering.error.message") //#else - I18n.format("replaymod.gui.rendering.error.title"), - I18n.format("replaymod.gui.rendering.error.message") + //$$ I18n.format("replaymod.gui.rendering.error.title"), + //$$ I18n.format("replaymod.gui.rendering.error.message") //#endif ); - getMinecraft().displayGuiScreen(errorScreen); + getMinecraft().openScreen(errorScreen); } catch (VideoWriter.FFmpegStartupException e) { GuiExportFailed.tryToRecover(e, newSettings -> { // Update settings with fixed ffmpeg arguments @@ -256,7 +256,7 @@ public class GuiRenderSettings extends GuiScreen implements Closeable { renderButton.onClick(); }); } catch (Throwable t) { - error(LOGGER, GuiRenderSettings.this, CrashReport.makeCrashReport(t, "Rendering video"), () -> {}); + error(LOGGER, GuiRenderSettings.this, CrashReport.create(t, "Rendering video"), () -> {}); display(); // Re-show the render settings gui and the new error popup } } @@ -264,7 +264,7 @@ public class GuiRenderSettings extends GuiScreen implements Closeable { public final GuiButton cancelButton = new GuiButton(buttonPanel).onClick(new Runnable() { @Override public void run() { - getMinecraft().displayGuiScreen(null); + getMinecraft().openScreen(null); } }).setSize(100, 20).setI18nLabel("replaymod.gui.cancel"); @@ -538,7 +538,7 @@ public class GuiRenderSettings extends GuiScreen implements Closeable { antiAliasingDropdown.getSelectedValue(), exportCommand.getText(), exportArguments.getText(), - net.minecraft.client.gui.GuiScreen.isCtrlKeyDown() + net.minecraft.client.gui.Screen.hasControlDown() ); } diff --git a/src/main/java/com/replaymod/render/gui/GuiRenderingDone.java b/src/main/java/com/replaymod/render/gui/GuiRenderingDone.java index 6e534d4d..0b209231 100644 --- a/src/main/java/com/replaymod/render/gui/GuiRenderingDone.java +++ b/src/main/java/com/replaymod/render/gui/GuiRenderingDone.java @@ -50,7 +50,7 @@ public class GuiRenderingDone extends GuiScreen { settingsRegistry.set(Setting.SKIP_POST_RENDER_GUI, true); settingsRegistry.save(); } - getMinecraft().displayGuiScreen(null); + getMinecraft().openScreen(null); } }).setSize(100, 20).setI18nLabel("replaymod.gui.close"); diff --git a/src/main/java/com/replaymod/render/gui/GuiVideoRenderer.java b/src/main/java/com/replaymod/render/gui/GuiVideoRenderer.java index 0ecfe297..ff915daf 100644 --- a/src/main/java/com/replaymod/render/gui/GuiVideoRenderer.java +++ b/src/main/java/com/replaymod/render/gui/GuiVideoRenderer.java @@ -17,18 +17,18 @@ import de.johni0702.minecraft.gui.layout.HorizontalLayout; import de.johni0702.minecraft.gui.utils.lwjgl.Dimension; import de.johni0702.minecraft.gui.utils.lwjgl.ReadableDimension; import de.johni0702.minecraft.gui.utils.lwjgl.ReadablePoint; -import net.minecraft.client.renderer.texture.DynamicTexture; -import net.minecraft.client.resources.I18n; -import net.minecraft.util.ResourceLocation; +import net.minecraft.client.texture.NativeImageBackedTexture; +import net.minecraft.client.resource.language.I18n; +import net.minecraft.util.Identifier; //#if MC>=11300 -import net.minecraft.client.renderer.texture.NativeImage; +import net.minecraft.client.texture.NativeImage; //#endif import java.nio.ByteBuffer; public class GuiVideoRenderer extends GuiScreen implements Tickable { - private static final ResourceLocation NO_PREVIEW_TEXTURE = new ResourceLocation("replaymod", "logo.jpg"); + private static final Identifier NO_PREVIEW_TEXTURE = new Identifier("replaymod", "logo.jpg"); private final VideoRenderer renderer; @@ -86,7 +86,7 @@ public class GuiVideoRenderer extends GuiScreen implements Tickable { } }.setI18nLabel("replaymod.gui.rendering.cancel").setSize(150, 20); - private DynamicTexture previewTexture; + private NativeImageBackedTexture previewTexture; private boolean previewTextureDirty; { @@ -205,8 +205,8 @@ public class GuiVideoRenderer extends GuiScreen implements Tickable { prevRenderedFrames = renderer.getFramesDone(); } - renderTime.setText(I18n.format("replaymod.gui.rendering.timetaken") + ": " + secToString(renderTimeTaken/1000)); - remainingTime.setText(I18n.format("replaymod.gui.rendering.timeleft") + ": " + secToString(renderTimeLeft)); + renderTime.setText(I18n.translate("replaymod.gui.rendering.timetaken") + ": " + secToString(renderTimeTaken/1000)); + remainingTime.setText(I18n.translate("replaymod.gui.rendering.timeleft") + ": " + secToString(renderTimeLeft)); int framesDone = renderer.getFramesDone(), framesTotal = renderer.getTotalFrames(); progressBar.setI18nLabel("replaymod.gui.rendering.progress", framesDone, framesTotal); @@ -219,9 +219,9 @@ public class GuiVideoRenderer extends GuiScreen implements Tickable { int sec = seconds - ((min*60) + (hours*60*60)); StringBuilder builder = new StringBuilder(); - if(hours > 0) builder.append(hours).append(I18n.format("replaymod.gui.hours")); - if(min > 0 || hours > 0) builder.append(min).append(I18n.format("replaymod.gui.minutes")); - builder.append(sec).append(I18n.format("replaymod.gui.seconds")); + if(hours > 0) builder.append(hours).append(I18n.translate("replaymod.gui.hours")); + if(min > 0 || hours > 0) builder.append(min).append(I18n.translate("replaymod.gui.minutes")); + builder.append(sec).append(I18n.translate("replaymod.gui.seconds")); return builder.toString(); } @@ -233,14 +233,14 @@ public class GuiVideoRenderer extends GuiScreen implements Tickable { if (previewTexture == null) { //#if MC>=11300 - previewTexture = new DynamicTexture(videoWidth, videoHeight, true); + previewTexture = new NativeImageBackedTexture(videoWidth, videoHeight, true); //#else //$$ previewTexture = new DynamicTexture(videoWidth, videoHeight); //#endif } if (previewTextureDirty) { - previewTexture.updateDynamicTexture(); + previewTexture.upload(); previewTextureDirty = false; } @@ -271,7 +271,7 @@ public class GuiVideoRenderer extends GuiScreen implements Tickable { buffer.mark(); synchronized (this) { //#if MC>=11300 - NativeImage data = previewTexture.getTextureData(); + NativeImage data = previewTexture.getImage(); assert data != null; for (int y = 0; y < data.getHeight(); y++) { for (int x = 0; x < data.getWidth(); x++) { diff --git a/src/main/java/com/replaymod/render/hooks/ChunkLoadingRenderGlobal.java b/src/main/java/com/replaymod/render/hooks/ChunkLoadingRenderGlobal.java index 5dca63b6..d4fce49b 100644 --- a/src/main/java/com/replaymod/render/hooks/ChunkLoadingRenderGlobal.java +++ b/src/main/java/com/replaymod/render/hooks/ChunkLoadingRenderGlobal.java @@ -4,12 +4,12 @@ package com.replaymod.render.hooks; import com.replaymod.render.mixin.ChunkRenderDispatcherAccessor; import com.replaymod.render.mixin.WorldRendererAccessor; import com.replaymod.render.utils.JailingQueue; -import net.minecraft.client.renderer.RegionRenderCacheBuilder; -import net.minecraft.client.renderer.WorldRenderer; -import net.minecraft.client.renderer.chunk.ChunkRenderDispatcher; -import net.minecraft.client.renderer.chunk.ChunkRenderTask; -import net.minecraft.client.renderer.chunk.ChunkRenderWorker; -import net.minecraft.client.renderer.chunk.RenderChunk; +import net.minecraft.client.render.chunk.BlockLayeredBufferBuilder; +import net.minecraft.client.render.WorldRenderer; +import net.minecraft.client.render.chunk.ChunkBatcher; +import net.minecraft.client.render.chunk.ChunkRenderTask; +import net.minecraft.client.render.chunk.ChunkRenderWorker; +import net.minecraft.client.render.chunk.ChunkRenderer; import java.lang.reflect.Field; import java.util.Iterator; @@ -29,7 +29,7 @@ public class ChunkLoadingRenderGlobal { //#else //$$ private final RenderGlobal hooked; //#endif - private ChunkRenderDispatcher renderDispatcher; + private ChunkBatcher renderDispatcher; //#if MC>=11300 private JailingQueue workerJailingQueue; //#else @@ -51,7 +51,7 @@ public class ChunkLoadingRenderGlobal { setup(((WorldRendererAccessor) renderGlobal).getRenderDispatcher()); } - public void updateRenderDispatcher(ChunkRenderDispatcher renderDispatcher) { + public void updateRenderDispatcher(ChunkBatcher renderDispatcher) { if (this.renderDispatcher != null) { workerJailingQueue.freeAll(); this.renderDispatcher = null; @@ -61,9 +61,9 @@ public class ChunkLoadingRenderGlobal { } } - private void setup(ChunkRenderDispatcher renderDispatcher) { + private void setup(ChunkBatcher renderDispatcher) { this.renderDispatcher = renderDispatcher; - this.renderWorker = new CustomChunkRenderWorker(renderDispatcher, new RegionRenderCacheBuilder()); + this.renderWorker = new CustomChunkRenderWorker(renderDispatcher, new BlockLayeredBufferBuilder()); ChunkRenderDispatcherAccessor renderDispatcherAcc = (ChunkRenderDispatcherAccessor) renderDispatcher; int workerThreads = renderDispatcherAcc.getListThreadedWorkers().size(); @@ -80,20 +80,20 @@ public class ChunkLoadingRenderGlobal { null, 0 //#if MC>=11400 - //$$ , null + , null //#endif ); //#else //$$ ChunkCompileTaskGenerator element = new ChunkCompileTaskGenerator(null, null); //#endif - element.finish(); + element.cancel(); for (int i = 0; i < workerThreads; i++) { queueChunkUpdates.add(element); } // Temporary workaround for dead lock, will be replaced by a new (ShaderMod compatible) mechanism later //noinspection StatementWithEmptyBody - while (renderDispatcher.runChunkUploads(0)) {} + while (renderDispatcher.method_3631(0)) {} workerJailingQueue.jail(workerThreads); renderDispatcherAcc.setQueueChunkUpdates(queueChunkUpdates); @@ -111,7 +111,7 @@ public class ChunkLoadingRenderGlobal { } public void updateChunks() { - while (renderDispatcher.runChunkUploads(0)) { + while (renderDispatcher.method_3631(0)) { ((WorldRendererAccessor) hooked).setDisplayListEntitiesDirty(true); } @@ -123,18 +123,18 @@ public class ChunkLoadingRenderGlobal { queueChunkUpdates = ((ChunkRenderDispatcherAccessor) renderDispatcher).getQueueChunkUpdates(); while (!queueChunkUpdates.isEmpty()) { try { - renderWorker.processTask(queueChunkUpdates.poll()); + renderWorker.runTask(queueChunkUpdates.poll()); } catch (InterruptedException ignored) { } } - Iterator iterator = ((WorldRendererAccessor) hooked).getChunksToUpdate().iterator(); + Iterator iterator = ((WorldRendererAccessor) hooked).getChunksToUpdate().iterator(); while (iterator.hasNext()) { - RenderChunk renderchunk = iterator.next(); + ChunkRenderer renderchunk = iterator.next(); - renderDispatcher.updateChunkNow(renderchunk); + renderDispatcher.method_3627(renderchunk); //#if MC>=10904 - renderchunk.clearNeedsUpdate(); + renderchunk.method_3662(); //#else //$$ renderchunk.setNeedsUpdate(false); //#endif @@ -165,19 +165,19 @@ public class ChunkLoadingRenderGlobal { * Custom ChunkRenderWorker class providing access to the protected processTask method */ private static class CustomChunkRenderWorker extends ChunkRenderWorker { - public CustomChunkRenderWorker(ChunkRenderDispatcher p_i46202_1_, RegionRenderCacheBuilder p_i46202_2_) { + public CustomChunkRenderWorker(ChunkBatcher p_i46202_1_, BlockLayeredBufferBuilder p_i46202_2_) { super(p_i46202_1_, p_i46202_2_); } @Override - protected void processTask( + protected void runTask( //#if MC>=11300 ChunkRenderTask p_178474_1_ //#else //$$ ChunkCompileTaskGenerator p_178474_1_ //#endif ) throws InterruptedException { - super.processTask(p_178474_1_); + super.runTask(p_178474_1_); } } } diff --git a/src/main/java/com/replaymod/render/hooks/EntityRendererHandler.java b/src/main/java/com/replaymod/render/hooks/EntityRendererHandler.java index 3123f4bb..7353ce99 100644 --- a/src/main/java/com/replaymod/render/hooks/EntityRendererHandler.java +++ b/src/main/java/com/replaymod/render/hooks/EntityRendererHandler.java @@ -6,11 +6,11 @@ import com.replaymod.render.capturer.CaptureData; import com.replaymod.render.capturer.RenderInfo; import com.replaymod.render.capturer.WorldRenderer; import lombok.Getter; -import net.minecraft.client.Minecraft; +import net.minecraft.client.MinecraftClient; //#if MC<11400 //#if MC>=11300 -import net.minecraftforge.fml.hooks.BasicEventHooks; +//$$ import net.minecraftforge.fml.hooks.BasicEventHooks; //#else //$$ import net.minecraftforge.fml.common.FMLCommonHandler; //#endif @@ -19,7 +19,7 @@ import net.minecraftforge.fml.hooks.BasicEventHooks; import java.io.IOException; public class EntityRendererHandler implements WorldRenderer { - public final Minecraft mc = MCVer.getMinecraft(); + public final MinecraftClient mc = MCVer.getMinecraft(); @Getter protected final RenderSettings settings; @@ -35,7 +35,7 @@ public class EntityRendererHandler implements WorldRenderer { this.settings = settings; this.renderInfo = renderInfo; - ((IEntityRenderer) mc.entityRenderer).replayModRender_setHandler(this); + ((IEntityRenderer) mc.gameRenderer).replayModRender_setHandler(this); } @Override @@ -47,17 +47,17 @@ public class EntityRendererHandler implements WorldRenderer { public void renderWorld(float partialTicks, long finishTimeNano) { //#if MC<11400 //#if MC>=11300 - BasicEventHooks.onRenderTickStart(partialTicks); + //$$ BasicEventHooks.onRenderTickStart(partialTicks); //#else //$$ FMLCommonHandler.instance().onRenderTickStart(partialTicks); //#endif //#endif - mc.entityRenderer.renderWorld(partialTicks, finishTimeNano); + mc.gameRenderer.renderWorld(partialTicks, finishTimeNano); //#if MC<11400 //#if MC>=11300 - BasicEventHooks.onRenderTickEnd(partialTicks); + //$$ BasicEventHooks.onRenderTickEnd(partialTicks); //#else //$$ FMLCommonHandler.instance().onRenderTickEnd(partialTicks); //#endif @@ -66,7 +66,7 @@ public class EntityRendererHandler implements WorldRenderer { @Override public void close() throws IOException { - ((IEntityRenderer) mc.entityRenderer).replayModRender_setHandler(null); + ((IEntityRenderer) mc.gameRenderer).replayModRender_setHandler(null); } @Override diff --git a/src/main/java/com/replaymod/render/mixin/ChunkRenderDispatcherAccessor.java b/src/main/java/com/replaymod/render/mixin/ChunkRenderDispatcherAccessor.java index 87e42a7d..10a6cf1b 100644 --- a/src/main/java/com/replaymod/render/mixin/ChunkRenderDispatcherAccessor.java +++ b/src/main/java/com/replaymod/render/mixin/ChunkRenderDispatcherAccessor.java @@ -1,9 +1,9 @@ //#if MC>=10800 package com.replaymod.render.mixin; -import net.minecraft.client.renderer.chunk.ChunkRenderDispatcher; -import net.minecraft.client.renderer.chunk.ChunkRenderTask; -import net.minecraft.client.renderer.chunk.ChunkRenderWorker; +import net.minecraft.client.render.chunk.ChunkBatcher; +import net.minecraft.client.render.chunk.ChunkRenderTask; +import net.minecraft.client.render.chunk.ChunkRenderWorker; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Accessor; @@ -14,15 +14,15 @@ import java.util.concurrent.PriorityBlockingQueue; //$$ import java.util.concurrent.BlockingQueue; //#endif -@Mixin(ChunkRenderDispatcher.class) +@Mixin(ChunkBatcher.class) public interface ChunkRenderDispatcherAccessor { - @Accessor + @Accessor("workers") List getListThreadedWorkers(); //#if MC>=10904 - @Accessor + @Accessor("pendingChunks") PriorityBlockingQueue getQueueChunkUpdates(); - @Accessor + @Accessor("pendingChunks") void setQueueChunkUpdates(PriorityBlockingQueue value); //#else //$$ @Accessor diff --git a/src/main/java/com/replaymod/render/mixin/MainWindowAccessor.java b/src/main/java/com/replaymod/render/mixin/MainWindowAccessor.java index 4978789e..20a76271 100644 --- a/src/main/java/com/replaymod/render/mixin/MainWindowAccessor.java +++ b/src/main/java/com/replaymod/render/mixin/MainWindowAccessor.java @@ -1,11 +1,11 @@ //#if MC>=11300 package com.replaymod.render.mixin; -import net.minecraft.client.MainWindow; +import net.minecraft.client.util.Window; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Accessor; -@Mixin(MainWindow.class) +@Mixin(Window.class) public interface MainWindowAccessor { @Accessor void setFramebufferWidth(int value); diff --git a/src/main/java/com/replaymod/render/mixin/MixinCamera.java b/src/main/java/com/replaymod/render/mixin/MixinCamera.java index b13bc31b..f4164c06 100644 --- a/src/main/java/com/replaymod/render/mixin/MixinCamera.java +++ b/src/main/java/com/replaymod/render/mixin/MixinCamera.java @@ -14,20 +14,20 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import static com.replaymod.core.versions.MCVer.*; //#if MC>=11400 -//$$ import net.minecraft.client.render.Camera; -//$$ import net.minecraft.world.BlockView; +import net.minecraft.client.render.Camera; +import net.minecraft.world.BlockView; //#else -import net.minecraft.client.renderer.GameRenderer; +//$$ import net.minecraft.client.renderer.GameRenderer; //#endif //#if MC>=11400 -//$$ @Mixin(value = Camera.class) +@Mixin(value = Camera.class) //#else -@Mixin(value = GameRenderer.class) +//$$ @Mixin(value = GameRenderer.class) //#endif public abstract class MixinCamera { private EntityRendererHandler getHandler() { - return ((EntityRendererHandler.IEntityRenderer) getMinecraft().entityRenderer).replayModRender_getHandler(); + return ((EntityRendererHandler.IEntityRenderer) getMinecraft().gameRenderer).replayModRender_getHandler(); } private float orgYaw; @@ -37,16 +37,16 @@ public abstract class MixinCamera { private float orgRoll; //#if MC>=11400 - //$$ @Inject(method = "update", at = @At("HEAD")) + @Inject(method = "update", at = @At("HEAD")) //#else - @Inject(method = "setupCameraTransform", at = @At("HEAD")) + //$$ @Inject(method = "setupCameraTransform", at = @At("HEAD")) //#endif private void replayModRender_beforeSetupCameraTransform( //#if MC>=11400 - //$$ BlockView blockView, - //$$ Entity entity, - //$$ boolean thirdPerson, - //$$ boolean inverseView, + BlockView blockView, + Entity entity, + boolean thirdPerson, + boolean inverseView, //#endif float partialTicks, //#if MC<11300 @@ -56,30 +56,30 @@ public abstract class MixinCamera { ) { if (getHandler() != null) { //#if MC<11400 - Entity entity = getRenderViewEntity(getMinecraft()); + //$$ Entity entity = getRenderViewEntity(getMinecraft()); //#endif - orgYaw = entity.rotationYaw; - orgPitch = entity.rotationPitch; - orgPrevYaw = entity.prevRotationYaw; - orgPrevPitch = entity.prevRotationPitch; + orgYaw = entity.yaw; + orgPitch = entity.pitch; + orgPrevYaw = entity.prevYaw; + orgPrevPitch = entity.prevPitch; orgRoll = entity instanceof CameraEntity ? ((CameraEntity) entity).roll : 0; } //#if MC<11400 - } - - @Inject(method = "orientCamera", at = @At("HEAD")) - private void replayModRender_resetRotationIfNeeded(float partialTicks, CallbackInfo ci) { + //$$ } + //$$ + //$$ @Inject(method = "orientCamera", at = @At("HEAD")) + //$$ private void replayModRender_resetRotationIfNeeded(float partialTicks, CallbackInfo ci) { //#endif if (getHandler() != null) { //#if MC<11400 - Entity entity = getRenderViewEntity(getMinecraft()); + //$$ Entity entity = getRenderViewEntity(getMinecraft()); //#endif RenderSettings settings = getHandler().getSettings(); if (settings.isStabilizeYaw()) { - entity.prevRotationYaw = entity.rotationYaw = 0; + entity.prevYaw = entity.yaw = 0; } if (settings.isStabilizePitch()) { - entity.prevRotationPitch = entity.rotationPitch = 0; + entity.prevPitch = entity.pitch = 0; } if (settings.isStabilizeRoll() && entity instanceof CameraEntity) { ((CameraEntity) entity).roll = 0; @@ -88,16 +88,16 @@ public abstract class MixinCamera { } //#if MC>=11400 - //$$ @Inject(method = "update", at = @At("RETURN")) + @Inject(method = "update", at = @At("RETURN")) //#else - @Inject(method = "setupCameraTransform", at = @At("RETURN")) + //$$ @Inject(method = "setupCameraTransform", at = @At("RETURN")) //#endif private void replayModRender_afterSetupCameraTransform( //#if MC>=11400 - //$$ BlockView blockView, - //$$ Entity entity, - //$$ boolean thirdPerson, - //$$ boolean inverseView, + BlockView blockView, + Entity entity, + boolean thirdPerson, + boolean inverseView, //#endif float partialTicks, //#if MC<11300 @@ -107,12 +107,12 @@ public abstract class MixinCamera { ) { if (getHandler() != null) { //#if MC<11400 - Entity entity = getRenderViewEntity(getMinecraft()); + //$$ Entity entity = getRenderViewEntity(getMinecraft()); //#endif - entity.rotationYaw = orgYaw; - entity.rotationPitch = orgPitch; - entity.prevRotationYaw = orgPrevYaw; - entity.prevRotationPitch = orgPrevPitch; + entity.yaw = orgYaw; + entity.pitch = orgPitch; + entity.prevYaw = orgPrevYaw; + entity.prevPitch = orgPrevPitch; if (entity instanceof CameraEntity) { ((CameraEntity) entity).roll = orgRoll; } @@ -120,16 +120,16 @@ public abstract class MixinCamera { } //#if MC>=11400 - //$$ @Inject(method = "update", at = @At("HEAD")) + @Inject(method = "update", at = @At("HEAD")) //#else - @Inject(method = "orientCamera", at = @At("HEAD")) + //$$ @Inject(method = "orientCamera", at = @At("HEAD")) //#endif private void replayModRender_setupCubicFrameRotation( //#if MC>=11400 - //$$ BlockView blockView, - //$$ Entity entity, - //$$ boolean thirdPerson, - //$$ boolean inverseView, + BlockView blockView, + Entity entity, + boolean thirdPerson, + boolean inverseView, //#endif float partialTicks, CallbackInfo ci diff --git a/src/main/java/com/replaymod/render/mixin/MixinEntityRenderer.java b/src/main/java/com/replaymod/render/mixin/MixinEntityRenderer.java index 9df1656e..5ae72030 100644 --- a/src/main/java/com/replaymod/render/mixin/MixinEntityRenderer.java +++ b/src/main/java/com/replaymod/render/mixin/MixinEntityRenderer.java @@ -4,8 +4,8 @@ import com.replaymod.core.versions.MCVer; import com.replaymod.render.capturer.StereoscopicOpenGlFrameCapturer; import com.replaymod.render.hooks.EntityRendererHandler; import de.johni0702.minecraft.gui.utils.lwjgl.ReadableColor; -import net.minecraft.client.Minecraft; -import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.client.MinecraftClient; +import net.minecraft.entity.player.PlayerEntity; import org.lwjgl.opengl.GL11; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -15,15 +15,15 @@ import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; //#if MC>=11400 -//$$ import net.minecraft.client.render.Camera; -//$$ import net.minecraft.util.hit.HitResult; +import net.minecraft.client.render.Camera; +import net.minecraft.util.hit.HitResult; //#endif //#if MC>=11300 -import net.minecraft.client.GameSettings; -import net.minecraft.client.renderer.GameRenderer; -import net.minecraft.client.renderer.Matrix4f; -import net.minecraft.client.renderer.WorldRenderer; +import net.minecraft.client.options.GameOptions; +import net.minecraft.client.render.GameRenderer; +import net.minecraft.client.util.math.Matrix4f; +import net.minecraft.client.render.WorldRenderer; //#else //$$ import com.replaymod.replay.camera.CameraEntity; //$$ import net.minecraft.client.renderer.EntityRenderer; @@ -34,13 +34,13 @@ import net.minecraft.client.renderer.WorldRenderer; //#endif //#if MC>=10904 -import net.minecraft.util.math.RayTraceResult; +import net.minecraft.world.RayTraceContext; //#else //$$ import net.minecraft.util.MovingObjectPosition; //#endif //#if MC>=10800 -import net.minecraft.client.renderer.GlStateManager; +import com.mojang.blaze3d.platform.GlStateManager; //#else //$$ import net.minecraft.entity.EntityLivingBase; //$$ import com.replaymod.core.versions.MCVer.GlStateManager; @@ -55,7 +55,7 @@ import static com.replaymod.core.versions.MCVer.*; //#endif public abstract class MixinEntityRenderer implements EntityRendererHandler.IEntityRenderer { @Shadow - public Minecraft mc; + public MinecraftClient client; private EntityRendererHandler replayModRender_handler; @@ -94,7 +94,7 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti @Inject(method = "renderHand", at = @At("HEAD"), cancellable = true) private void replayModRender_renderSpectatorHand( //#if MC>=11400 - //$$ Camera camera, + Camera camera, //#endif float partialTicks, //#if MC<11300 @@ -129,16 +129,16 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti //#endif //#if MC>=11400 - //$$ @Redirect(method = "renderCenter", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/WorldRenderer;drawHighlightedBlockOutline(Lnet/minecraft/client/render/Camera;Lnet/minecraft/util/hit/HitResult;I)V")) - //$$ private void replayModRender_drawSelectionBox(WorldRenderer instance, Camera camera, HitResult hitResult, int something) { - //$$ if (replayModRender_handler == null) { - //$$ instance.drawHighlightedBlockOutline(camera, hitResult, something); - //$$ } - //$$ } + @Redirect(method = "renderCenter", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/WorldRenderer;drawHighlightedBlockOutline(Lnet/minecraft/client/render/Camera;Lnet/minecraft/util/hit/HitResult;I)V")) + private void replayModRender_drawSelectionBox(WorldRenderer instance, Camera camera, HitResult hitResult, int something) { + if (replayModRender_handler == null) { + instance.drawHighlightedBlockOutline(camera, hitResult, something); + } + } //#else //#if MC>=11300 - @Redirect(method = "updateCameraAndRender(FJ)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/WorldRenderer;drawSelectionBox(Lnet/minecraft/entity/player/EntityPlayer;Lnet/minecraft/util/math/RayTraceResult;IF)V")) - private void replayModRender_drawSelectionBox(WorldRenderer instance, EntityPlayer player, RayTraceResult rtr, int alwaysZero, float partialTicks) { + //$$ @Redirect(method = "updateCameraAndRender(FJ)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/WorldRenderer;drawSelectionBox(Lnet/minecraft/entity/player/EntityPlayer;Lnet/minecraft/util/math/RayTraceResult;IF)V")) + //$$ private void replayModRender_drawSelectionBox(WorldRenderer instance, EntityPlayer player, RayTraceResult rtr, int alwaysZero, float partialTicks) { //#else //#if MC>=10904 //$$ @Redirect(method = "renderWorldPass", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/RenderGlobal;drawSelectionBox(Lnet/minecraft/entity/player/EntityPlayer;Lnet/minecraft/util/math/RayTraceResult;IF)V")) @@ -152,19 +152,19 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti //$$ private void replayModRender_drawSelectionBox(RenderGlobal instance, EntityPlayer player, MovingObjectPosition rtr, int alwaysZero, float partialTicks) { //#endif //#endif - if (replayModRender_handler == null) { - instance.drawSelectionBox(player, rtr, alwaysZero, partialTicks); - } - } + //$$ if (replayModRender_handler == null) { + //$$ instance.drawSelectionBox(player, rtr, alwaysZero, partialTicks); + //$$ } + //$$ } //#endif private int orgRenderDistanceChunks; //#if MC>=11300 //#if MC>=11400 - //$$ @Inject(method = "renderCenter", at = @At(value = "JUMP", ordinal = 0)) + @Inject(method = "renderCenter", at = @At(value = "JUMP", ordinal = 0)) //#else - @Inject(method = "updateCameraAndRender(FJ)V", at = @At(value = "JUMP", ordinal = 0)) + //$$ @Inject(method = "updateCameraAndRender(FJ)V", at = @At(value = "JUMP", ordinal = 0)) //#endif //#else //#if MC>=10800 @@ -176,17 +176,17 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti //#endif private void replayModRender_beforeRenderSky(CallbackInfo ci) { if (replayModRender_handler != null && replayModRender_handler.getSettings().getChromaKeyingColor() != null) { - GameSettings settings = MCVer.getMinecraft().gameSettings; - orgRenderDistanceChunks = settings.renderDistanceChunks; - settings.renderDistanceChunks = 5; // Set render distance to 5 so we're always rendering sky when chroma keying + GameOptions settings = MCVer.getMinecraft().options; + orgRenderDistanceChunks = settings.viewDistance; + settings.viewDistance = 5; // Set render distance to 5 so we're always rendering sky when chroma keying } } //#if MC>=11300 //#if MC>=11400 - //$$ @Redirect(method = "renderCenter", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/WorldRenderer;renderSky(F)V")) + @Redirect(method = "renderCenter", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/WorldRenderer;renderSky(F)V")) //#else - @Redirect(method = "updateCameraAndRender(FJ)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/WorldRenderer;renderSky(F)V")) + //$$ @Redirect(method = "updateCameraAndRender(FJ)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/WorldRenderer;renderSky(F)V")) //#endif private void replayModRender_renderSky(WorldRenderer instance, float partialTicks) { //#else @@ -199,12 +199,12 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti //#endif //#endif if (replayModRender_handler != null && replayModRender_handler.getSettings().getChromaKeyingColor() != null) { - MCVer.getMinecraft().gameSettings.renderDistanceChunks = orgRenderDistanceChunks; + MCVer.getMinecraft().options.viewDistance = orgRenderDistanceChunks; ReadableColor color = replayModRender_handler.getSettings().getChromaKeyingColor(); GlStateManager.clearColor(color.getRed() / 255f, color.getGreen() / 255f, color.getBlue() / 255f, 1); GlStateManager.clear(GL11.GL_COLOR_BUFFER_BIT //#if MC>=11400 - //$$ , false + , false //#endif ); } else { @@ -225,7 +225,7 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti */ //#if MC>=10800 - @Inject(method = "setupCameraTransform", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/GlStateManager;loadIdentity()V", shift = At.Shift.AFTER, ordinal = 0)) + @Inject(method = "applyCameraTransformations", at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/platform/GlStateManager;loadIdentity()V", shift = At.Shift.AFTER, ordinal = 0)) //#else //$$ @Inject(method = "setupCameraTransform", at = @At(value = "INVOKE", target = "Lorg/lwjgl/opengl/GL11;glLoadIdentity()V", shift = At.Shift.AFTER, ordinal = 0, remap = false)) //#endif @@ -246,7 +246,7 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti } //#if MC>=10800 - @Inject(method = "setupCameraTransform", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/GlStateManager;loadIdentity()V", shift = At.Shift.AFTER, ordinal = 1)) + @Inject(method = "applyCameraTransformations", at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/platform/GlStateManager;loadIdentity()V", shift = At.Shift.AFTER, ordinal = 1)) //#else //$$ @Inject(method = "setupCameraTransform", at = @At(value = "INVOKE", target = "Lorg/lwjgl/opengl/GL11;glLoadIdentity()V", shift = At.Shift.AFTER, ordinal = 1, remap = false)) //#endif @@ -271,21 +271,21 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti */ //#if MC>=11300 - @Redirect(method = "setupCameraTransform", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/Matrix4f;perspective(DFFF)Lnet/minecraft/client/renderer/Matrix4f;")) + @Redirect(method = "applyCameraTransformations", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/util/math/Matrix4f;method_4929(DFFF)Lnet/minecraft/client/util/math/Matrix4f;")) private Matrix4f replayModRender_perspective$0(double fovY, float aspect, float zNear, float zFar) { return replayModRender_perspective((float) fovY, aspect, zNear, zFar); } //#if MC>=11400 - //$$ @Redirect(method = "renderCenter", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/util/math/Matrix4f;method_4929(DFFF)Lnet/minecraft/client/util/math/Matrix4f;")) + @Redirect(method = "renderCenter", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/util/math/Matrix4f;method_4929(DFFF)Lnet/minecraft/client/util/math/Matrix4f;")) //#else - @Redirect(method = "updateCameraAndRender(FJ)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/Matrix4f;perspective(DFFF)Lnet/minecraft/client/renderer/Matrix4f;")) + //$$ @Redirect(method = "updateCameraAndRender(FJ)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/Matrix4f;perspective(DFFF)Lnet/minecraft/client/renderer/Matrix4f;")) //#endif private Matrix4f replayModRender_perspective$1(double fovY, float aspect, float zNear, float zFar) { return replayModRender_perspective((float) fovY, aspect, zNear, zFar); } - @Redirect(method = "renderCloudsCheck", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/Matrix4f;perspective(DFFF)Lnet/minecraft/client/renderer/Matrix4f;")) + @Redirect(method = "renderAboveClouds", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/util/math/Matrix4f;method_4929(DFFF)Lnet/minecraft/client/util/math/Matrix4f;")) private Matrix4f replayModRender_perspective$2(double fovY, float aspect, float zNear, float zFar) { return replayModRender_perspective((float) fovY, aspect, zNear, zFar); } @@ -295,7 +295,7 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti fovY = 90; aspect = 1; } - return Matrix4f.perspective(fovY, aspect, zNear, zFar); + return Matrix4f.method_4929(fovY, aspect, zNear, zFar); } //#else //$$ @Redirect(method = "setupCameraTransform", at = @At(value = "INVOKE", target = "Lorg/lwjgl/util/glu/Project;gluPerspective(FFFF)V", remap = false)) diff --git a/src/main/java/com/replaymod/render/mixin/MixinFogRenderer.java b/src/main/java/com/replaymod/render/mixin/MixinFogRenderer.java index e9647b09..2923d239 100644 --- a/src/main/java/com/replaymod/render/mixin/MixinFogRenderer.java +++ b/src/main/java/com/replaymod/render/mixin/MixinFogRenderer.java @@ -3,31 +3,31 @@ package com.replaymod.render.mixin; import com.replaymod.core.versions.MCVer; import com.replaymod.render.hooks.EntityRendererHandler; -import net.minecraft.client.renderer.FogRenderer; +import net.minecraft.client.render.BackgroundRenderer; 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; //#if MC>=11400 -//$$ import net.minecraft.client.render.Camera; +import net.minecraft.client.render.Camera; //#endif -@Mixin(FogRenderer.class) +@Mixin(BackgroundRenderer.class) public abstract class MixinFogRenderer { - @Inject(method = "setupFog", at = @At("HEAD"), cancellable = true) + @Inject(method = "applyFog", at = @At("HEAD"), cancellable = true) private void replayModRender_onSetupFog( //#if MC>=11400 - //$$ Camera camera, - //$$ int something, + Camera camera, + int something, //#else - int fogDistanceFlag, - float partialTicks, + //$$ int fogDistanceFlag, + //$$ float partialTicks, //#endif CallbackInfo ci ) { EntityRendererHandler handler = - ((EntityRendererHandler.IEntityRenderer) MCVer.getMinecraft().entityRenderer).replayModRender_getHandler(); + ((EntityRendererHandler.IEntityRenderer) MCVer.getMinecraft().gameRenderer).replayModRender_getHandler(); if (handler == null) return; if (handler.getSettings().getChromaKeyingColor() != null) { ci.cancel(); diff --git a/src/main/java/com/replaymod/render/mixin/MixinFrustum.java b/src/main/java/com/replaymod/render/mixin/MixinFrustum.java index aad8f545..3ba6006d 100644 --- a/src/main/java/com/replaymod/render/mixin/MixinFrustum.java +++ b/src/main/java/com/replaymod/render/mixin/MixinFrustum.java @@ -8,7 +8,7 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; //#if MC>=10800 -import net.minecraft.client.renderer.culling.Frustum; +import net.minecraft.client.render.Frustum; //#else //$$ import net.minecraft.client.renderer.culling.Frustrum; //#endif @@ -19,9 +19,9 @@ import net.minecraft.client.renderer.culling.Frustum; //$$ @Mixin(Frustrum.class) //#endif public abstract class MixinFrustum { - @Inject(method = "isBoxInFrustum", at = @At("HEAD"), cancellable = true) - public void isBoxInFrustum(double minX, double minY, double minZ, double maxX, double maxY, double maxZ, CallbackInfoReturnable ci) { - EntityRendererHandler handler = ((EntityRendererHandler.IEntityRenderer) MCVer.getMinecraft().entityRenderer).replayModRender_getHandler(); + @Inject(method = "intersects", at = @At("HEAD"), cancellable = true) + public void intersects(double minX, double minY, double minZ, double maxX, double maxY, double maxZ, CallbackInfoReturnable ci) { + EntityRendererHandler handler = ((EntityRendererHandler.IEntityRenderer) MCVer.getMinecraft().gameRenderer).replayModRender_getHandler(); if (handler != null && handler.omnidirectional && handler.data == null) { // Normally the camera is always facing the direction of the omnidirectional image face that is currently // getting rendered. With ODS however, the camera is always facing forwards and the turning happens in the diff --git a/src/main/java/com/replaymod/render/mixin/MixinGlStateManager.java b/src/main/java/com/replaymod/render/mixin/MixinGlStateManager.java index 989c84b1..84a06a3d 100644 --- a/src/main/java/com/replaymod/render/mixin/MixinGlStateManager.java +++ b/src/main/java/com/replaymod/render/mixin/MixinGlStateManager.java @@ -3,7 +3,7 @@ package com.replaymod.render.mixin; import com.replaymod.render.hooks.FogStateCallback; import com.replaymod.render.hooks.Texture2DStateCallback; -import net.minecraft.client.renderer.GlStateManager; +import com.mojang.blaze3d.platform.GlStateManager; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; @@ -24,13 +24,13 @@ public abstract class MixinGlStateManager { FogStateCallback.EVENT.invoker().fogStateChanged(false); } - @Inject(method = "enableTexture2D", at = @At("HEAD")) - private static void enableTexture2D(CallbackInfo ci) { + @Inject(method = "enableTexture", at = @At("HEAD")) + private static void enableTexture(CallbackInfo ci) { Texture2DStateCallback.EVENT.invoker().texture2DStateChanged(MixinGlStateManager.activeTexture, true); } - @Inject(method = "disableTexture2D", at = @At("HEAD")) - private static void disableTexture2D(CallbackInfo ci) { + @Inject(method = "disableTexture", at = @At("HEAD")) + private static void disableTexture(CallbackInfo ci) { Texture2DStateCallback.EVENT.invoker().texture2DStateChanged(MixinGlStateManager.activeTexture, false); } } diff --git a/src/main/java/com/replaymod/render/mixin/MixinParticleManager.java b/src/main/java/com/replaymod/render/mixin/MixinParticleManager.java index cb8354a6..623159fa 100644 --- a/src/main/java/com/replaymod/render/mixin/MixinParticleManager.java +++ b/src/main/java/com/replaymod/render/mixin/MixinParticleManager.java @@ -8,27 +8,27 @@ import com.replaymod.render.blend.mixin.ParticleAccessor; import com.replaymod.render.hooks.EntityRendererHandler; import net.minecraft.client.particle.Particle; import net.minecraft.client.particle.ParticleManager; -import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.render.BufferBuilder; import net.minecraft.util.math.Vec3d; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; //#if MC>=11400 -//$$ import net.minecraft.client.render.Camera; +import net.minecraft.client.render.Camera; //#else -import net.minecraft.entity.Entity; +//$$ import net.minecraft.entity.Entity; //#endif @Mixin(ParticleManager.class) public abstract class MixinParticleManager { //#if MC>=11200 //#if MC>=11400 - //$$ @Redirect(method = "renderParticles", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/particle/Particle;buildGeometry(Lnet/minecraft/client/render/BufferBuilder;Lnet/minecraft/client/render/Camera;FFFFFF)V")) - //$$ private void renderNormalParticle(Particle particle, BufferBuilder vertexBuffer, Camera view, float partialTicks, + @Redirect(method = "renderParticles", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/particle/Particle;buildGeometry(Lnet/minecraft/client/render/BufferBuilder;Lnet/minecraft/client/render/Camera;FFFFFF)V")) + private void renderNormalParticle(Particle particle, BufferBuilder vertexBuffer, Camera view, float partialTicks, //#else - @Redirect(method = "renderParticles", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/particle/Particle;renderParticle(Lnet/minecraft/client/renderer/BufferBuilder;Lnet/minecraft/entity/Entity;FFFFFF)V")) - private void renderNormalParticle(Particle particle, BufferBuilder vertexBuffer, Entity view, float partialTicks, + //$$ @Redirect(method = "renderParticles", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/particle/Particle;renderParticle(Lnet/minecraft/client/renderer/BufferBuilder;Lnet/minecraft/entity/Entity;FFFFFF)V")) + //$$ private void renderNormalParticle(Particle particle, BufferBuilder vertexBuffer, Entity view, float partialTicks, //#endif //#else //$$ @Redirect(method = "renderParticles", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/particle/Particle;renderParticle(Lnet/minecraft/client/renderer/VertexBuffer;Lnet/minecraft/entity/Entity;FFFFFF)V")) @@ -41,33 +41,33 @@ public abstract class MixinParticleManager { // Seems to be gone by 1.14 //#if MC<11400 //#if MC>=11200 - @Redirect(method = "renderLitParticles", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/particle/Particle;renderParticle(Lnet/minecraft/client/renderer/BufferBuilder;Lnet/minecraft/entity/Entity;FFFFFF)V")) - private void renderLitParticle(Particle particle, BufferBuilder vertexBuffer, Entity view, float partialTicks, + //$$ @Redirect(method = "renderLitParticles", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/particle/Particle;renderParticle(Lnet/minecraft/client/renderer/BufferBuilder;Lnet/minecraft/entity/Entity;FFFFFF)V")) + //$$ private void renderLitParticle(Particle particle, BufferBuilder vertexBuffer, Entity view, float partialTicks, //#else //$$ @Redirect(method = "renderLitParticles", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/particle/Particle;renderParticle(Lnet/minecraft/client/renderer/VertexBuffer;Lnet/minecraft/entity/Entity;FFFFFF)V")) //$$ private void renderLitParticle(Particle particle, VertexBuffer vertexBuffer, Entity view, float partialTicks, //#endif - float rotX, float rotXZ, float rotZ, float rotYZ, float rotXY) { - renderParticle(particle, vertexBuffer, view, partialTicks, rotX, rotXZ, rotZ, rotYZ, rotXY); - } + //$$ float rotX, float rotXZ, float rotZ, float rotYZ, float rotXY) { + //$$ renderParticle(particle, vertexBuffer, view, partialTicks, rotX, rotXZ, rotZ, rotYZ, rotXY); + //$$ } //#endif private void renderParticle(Particle particle, BufferBuilder vertexBuffer, //#if MC>=11400 - //$$ Camera view, + Camera view, //#else - Entity view, + //$$ Entity view, //#endif float partialTicks, float rotX, float rotXZ, float rotZ, float rotYZ, float rotXY) { - EntityRendererHandler handler = ((EntityRendererHandler.IEntityRenderer) MCVer.getMinecraft().entityRenderer).replayModRender_getHandler(); + EntityRendererHandler handler = ((EntityRendererHandler.IEntityRenderer) MCVer.getMinecraft().gameRenderer).replayModRender_getHandler(); if (handler != null && handler.omnidirectional) { // Align all particles towards the camera //#if MC>=11400 - //$$ Vec3d pos = view.getPos(); + Vec3d pos = view.getPos(); //#else - Vec3d pos = new Vec3d(view.posX, view.posY, view.posZ); + //$$ Vec3d pos = new Vec3d(view.posX, view.posY, view.posZ); //#endif Vec3d d = MCVer.getPosition(particle, partialTicks).subtract(pos); double pitch = -Math.atan2(d.y, Math.sqrt(d.x * d.x + d.z * d.z)); @@ -84,7 +84,7 @@ public abstract class MixinParticleManager { if (blendState != null) { blendState.get(ParticlesExporter.class).onRender(particle, partialTicks); } - particle.renderParticle(vertexBuffer, view, partialTicks, rotX, rotXZ, rotZ, rotYZ, rotXY); + particle.buildGeometry(vertexBuffer, view, partialTicks, rotX, rotXZ, rotZ, rotYZ, rotXY); } } //#endif diff --git a/src/main/java/com/replaymod/render/mixin/MixinRender.java b/src/main/java/com/replaymod/render/mixin/MixinRender.java index 1186e1ff..e0dffe1a 100644 --- a/src/main/java/com/replaymod/render/mixin/MixinRender.java +++ b/src/main/java/com/replaymod/render/mixin/MixinRender.java @@ -2,22 +2,22 @@ package com.replaymod.render.mixin; import com.replaymod.core.versions.MCVer; import com.replaymod.render.hooks.EntityRendererHandler; -import net.minecraft.client.renderer.entity.Render; +import net.minecraft.client.render.entity.EntityRenderer; import net.minecraft.entity.Entity; 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; -@Mixin(Render.class) +@Mixin(EntityRenderer.class) public abstract class MixinRender { //#if MC>=11400 - //$$ @Inject(method = "renderLabel(Lnet/minecraft/entity/Entity;Ljava/lang/String;DDDI)V", at = @At("HEAD"), cancellable = true) + @Inject(method = "renderLabel(Lnet/minecraft/entity/Entity;Ljava/lang/String;DDDI)V", at = @At("HEAD"), cancellable = true) //#else - @Inject(method = "renderLivingLabel", at = @At("HEAD"), cancellable = true) + //$$ @Inject(method = "renderLivingLabel", at = @At("HEAD"), cancellable = true) //#endif private void replayModRender_areAllNamesHidden(Entity entityIn, String str, double x, double y, double z, int maxDistance, CallbackInfo ci) { - EntityRendererHandler handler = ((EntityRendererHandler.IEntityRenderer) MCVer.getMinecraft().entityRenderer).replayModRender_getHandler(); + EntityRendererHandler handler = ((EntityRendererHandler.IEntityRenderer) MCVer.getMinecraft().gameRenderer).replayModRender_getHandler(); if (handler != null && !handler.getSettings().isRenderNameTags()) { ci.cancel(); } diff --git a/src/main/java/com/replaymod/render/mixin/MixinRenderGlobal.java b/src/main/java/com/replaymod/render/mixin/MixinRenderGlobal.java index 6a6cb680..a99ce33c 100644 --- a/src/main/java/com/replaymod/render/mixin/MixinRenderGlobal.java +++ b/src/main/java/com/replaymod/render/mixin/MixinRenderGlobal.java @@ -2,8 +2,8 @@ package com.replaymod.render.mixin; import com.replaymod.render.hooks.ChunkLoadingRenderGlobal; -import net.minecraft.client.renderer.chunk.ChunkRenderDispatcher; -import net.minecraft.client.renderer.culling.ICamera; +import net.minecraft.client.render.chunk.ChunkBatcher; +import net.minecraft.client.render.VisibleRegion; import net.minecraft.entity.Entity; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -12,11 +12,11 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; //#if MC>=11400 -//$$ import net.minecraft.client.render.Camera; +import net.minecraft.client.render.Camera; //#endif //#if MC>=11300 -import net.minecraft.client.renderer.WorldRenderer; +import net.minecraft.client.render.WorldRenderer; //#else //$$ import net.minecraft.client.renderer.RenderGlobal; //#endif @@ -37,41 +37,41 @@ public abstract class MixinRenderGlobal { private boolean replayModRender_passThroughSetupTerrain; @Shadow - public boolean displayListEntitiesDirty; + public boolean terrainUpdateNecessary; @Shadow - public ChunkRenderDispatcher renderDispatcher; + public ChunkBatcher chunkBatcher; @Shadow - public abstract void setupTerrain( + public abstract void setUpTerrain( //#if MC>=11400 - //$$ Camera viewEntity, + Camera viewEntity, //#else - Entity viewEntity, + //$$ Entity viewEntity, //#if MC>=11300 - float partialTicks, + //$$ float partialTicks, //#else //$$ double partialTicks, //#endif //#endif - ICamera camera, + VisibleRegion camera, int frameCount, boolean playerSpectator ); - @Inject(method = "setupTerrain", at = @At("HEAD"), cancellable = true) + @Inject(method = "setUpTerrain", at = @At("HEAD"), cancellable = true) private void replayModRender_setupTerrain( //#if MC>=11400 - //$$ Camera viewEntity, + Camera viewEntity, //#else - Entity viewEntity, + //$$ Entity viewEntity, //#if MC>=11300 - float partialTicks, + //$$ float partialTicks, //#else //$$ double partialTicks, //#endif //#endif - ICamera camera, + VisibleRegion camera, int frameCount, boolean playerSpectator, CallbackInfo ci @@ -80,19 +80,19 @@ public abstract class MixinRenderGlobal { replayModRender_passThroughSetupTerrain = true; do { - setupTerrain( + setUpTerrain( viewEntity, //#if MC<11400 - partialTicks, + //$$ partialTicks, //#endif camera, replayModRender_hook.nextFrameId(), playerSpectator ); replayModRender_hook.updateChunks(); - } while (this.displayListEntitiesDirty); + } while (this.terrainUpdateNecessary); - this.displayListEntitiesDirty = true; + this.terrainUpdateNecessary = true; replayModRender_passThroughSetupTerrain = false; ci.cancel(); @@ -118,7 +118,7 @@ public abstract class MixinRenderGlobal { // Prior to 1.9.4, MC always uses the same ChunkRenderDispatcher instance //#if MC>=10904 - @Inject(method = "setWorldAndLoadRenderers", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/chunk/ChunkRenderDispatcher;stopWorkerThreads()V")) + @Inject(method = "setWorld", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/chunk/ChunkBatcher;method_3619()V")) private void stopWorkerThreadsAndChunkLoadingRenderGlobal(CallbackInfo ci) { if (replayModRender_hook != null) { replayModRender_hook.updateRenderDispatcher(null); @@ -126,10 +126,10 @@ public abstract class MixinRenderGlobal { } //#endif - @Inject(method = "loadRenderers", at = @At(value = "RETURN")) + @Inject(method = "reload", at = @At(value = "RETURN")) private void setupChunkLoadingRenderGlobal(CallbackInfo ci) { if (replayModRender_hook != null) { - replayModRender_hook.updateRenderDispatcher(this.renderDispatcher); + replayModRender_hook.updateRenderDispatcher(this.chunkBatcher); } } } diff --git a/src/main/java/com/replaymod/render/mixin/MixinRenderManager.java b/src/main/java/com/replaymod/render/mixin/MixinRenderManager.java index 84e84a60..0a3af042 100644 --- a/src/main/java/com/replaymod/render/mixin/MixinRenderManager.java +++ b/src/main/java/com/replaymod/render/mixin/MixinRenderManager.java @@ -2,7 +2,7 @@ package com.replaymod.render.mixin; import com.replaymod.core.versions.MCVer; import com.replaymod.render.hooks.EntityRendererHandler; -import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.client.render.entity.EntityRenderDispatcher; import net.minecraft.entity.Entity; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -15,19 +15,19 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; //$$ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; //#endif -@Mixin(RenderManager.class) +@Mixin(EntityRenderDispatcher.class) public abstract class MixinRenderManager { @Shadow - private float playerViewX; + private float cameraPitch; @Shadow - private float playerViewY; + private float cameraYaw; //#if MC>=11400 - //$$ @Inject(method = "render(Lnet/minecraft/entity/Entity;DDDFFZ)V", at = @At("HEAD")) + @Inject(method = "render(Lnet/minecraft/entity/Entity;DDDFFZ)V", at = @At("HEAD")) //#else //#if MC>=11300 - @Inject(method = "renderEntity", at = @At("HEAD")) + //$$ @Inject(method = "renderEntity", at = @At("HEAD")) //#else //$$ @Inject(method = "doRenderEntity", at = @At("HEAD")) //#endif @@ -37,12 +37,12 @@ public abstract class MixinRenderManager { //#else //$$ private void replayModRender_reorientForCubicRendering(Entity entity, double dx, double dy, double dz, float iDoNotKnow, float partialTicks, boolean iDoNotCare, CallbackInfoReturnable ci) { //#endif - EntityRendererHandler handler = ((EntityRendererHandler.IEntityRenderer) MCVer.getMinecraft().entityRenderer).replayModRender_getHandler(); + EntityRendererHandler handler = ((EntityRendererHandler.IEntityRenderer) MCVer.getMinecraft().gameRenderer).replayModRender_getHandler(); if (handler != null && handler.omnidirectional) { double pitch = -Math.atan2(dy, Math.sqrt(dx * dx + dz * dz)); double yaw = -Math.atan2(dx, dz); - this.playerViewX = (float) Math.toDegrees(pitch); - this.playerViewY = (float) Math.toDegrees(yaw); + this.cameraPitch = (float) Math.toDegrees(pitch); + this.cameraYaw = (float) Math.toDegrees(yaw); } } } diff --git a/src/main/java/com/replaymod/render/mixin/WorldRendererAccessor.java b/src/main/java/com/replaymod/render/mixin/WorldRendererAccessor.java index e5003bfc..1a6f9b33 100644 --- a/src/main/java/com/replaymod/render/mixin/WorldRendererAccessor.java +++ b/src/main/java/com/replaymod/render/mixin/WorldRendererAccessor.java @@ -1,29 +1,29 @@ package com.replaymod.render.mixin; -import net.minecraft.client.renderer.WorldRenderer; +import net.minecraft.client.render.WorldRenderer; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Accessor; import java.util.Set; //#if MC>=10800 -import net.minecraft.client.renderer.chunk.ChunkRenderDispatcher; -import net.minecraft.client.renderer.chunk.RenderChunk; +import net.minecraft.client.render.chunk.ChunkBatcher; +import net.minecraft.client.render.chunk.ChunkRenderer; //#endif @Mixin(WorldRenderer.class) public interface WorldRendererAccessor { - @Accessor + @Accessor("field_4076") void setRenderEntitiesStartupCounter(int value); //#if MC>=10800 - @Accessor - ChunkRenderDispatcher getRenderDispatcher(); + @Accessor("chunkBatcher") + ChunkBatcher getRenderDispatcher(); - @Accessor + @Accessor("terrainUpdateNecessary") void setDisplayListEntitiesDirty(boolean value); - @Accessor - Set getChunksToUpdate(); + @Accessor("chunkRenderers") + Set getChunksToUpdate(); //#endif } diff --git a/src/main/java/com/replaymod/render/rendering/Pipeline.java b/src/main/java/com/replaymod/render/rendering/Pipeline.java index 39063e79..15cf72b7 100644 --- a/src/main/java/com/replaymod/render/rendering/Pipeline.java +++ b/src/main/java/com/replaymod/render/rendering/Pipeline.java @@ -3,9 +3,9 @@ package com.replaymod.render.rendering; import com.replaymod.core.mixin.MinecraftAccessor; import com.replaymod.core.versions.MCVer; import lombok.RequiredArgsConstructor; -import net.minecraft.client.Minecraft; -import net.minecraft.crash.CrashReport; -import net.minecraft.crash.ReportedException; +import net.minecraft.client.MinecraftClient; +import net.minecraft.util.crash.CrashReport; +import net.minecraft.util.crash.CrashException; //#if MC>=11300 import org.lwjgl.glfw.GLFW; @@ -55,10 +55,10 @@ public class Pipeline implements Runnable { } }, new ThreadPoolExecutor.DiscardPolicy()); - Minecraft mc = MCVer.getMinecraft(); + MinecraftClient mc = MCVer.getMinecraft(); while (!capturer.isDone() && !Thread.currentThread().isInterrupted()) { //#if MC>=11300 - if (GLFW.glfwWindowShouldClose(mc.mainWindow.getHandle()) || ((MinecraftAccessor) mc).hasCrashed()) { + if (GLFW.glfwWindowShouldClose(mc.window.getHandle()) || ((MinecraftAccessor) mc).hasCrashed()) { //#else //$$ if (Display.isCloseRequested() || ((MinecraftAccessor) mc).hasCrashed()) { //#endif @@ -83,8 +83,8 @@ public class Pipeline implements Runnable { processor.close(); consumer.close(); } catch (Throwable t) { - CrashReport crashReport = CrashReport.makeCrashReport(t, "Cleaning up rendering pipeline"); - throw new ReportedException(crashReport); + CrashReport crashReport = CrashReport.create(t, "Cleaning up rendering pipeline"); + throw new CrashException(crashReport); } } @@ -115,8 +115,8 @@ public class Pipeline implements Runnable { consumerLock.notifyAll(); } } catch (Throwable t) { - CrashReport crashReport = CrashReport.makeCrashReport(t, "Processing frame"); - MCVer.getMinecraft().crashed(crashReport); + CrashReport crashReport = CrashReport.create(t, "Processing frame"); + MCVer.getMinecraft().setCrashReport(crashReport); } } } diff --git a/src/main/java/com/replaymod/render/rendering/VideoRenderer.java b/src/main/java/com/replaymod/render/rendering/VideoRenderer.java index dcdcef53..dd8e9ab3 100644 --- a/src/main/java/com/replaymod/render/rendering/VideoRenderer.java +++ b/src/main/java/com/replaymod/render/rendering/VideoRenderer.java @@ -25,12 +25,12 @@ import com.replaymod.replaystudio.pathing.path.Path; import com.replaymod.replaystudio.pathing.path.Timeline; import de.johni0702.minecraft.gui.utils.lwjgl.Dimension; import de.johni0702.minecraft.gui.utils.lwjgl.ReadableDimension; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.OpenGlHelper; -import net.minecraft.client.shader.Framebuffer; -import net.minecraft.crash.ReportedException; -import net.minecraft.util.SoundCategory; -import net.minecraft.util.Timer; +import net.minecraft.client.MinecraftClient; +import com.mojang.blaze3d.platform.GLX; +import net.minecraft.client.gl.GlFramebuffer; +import net.minecraft.util.crash.CrashException; +import net.minecraft.sound.SoundCategory; +import net.minecraft.client.render.RenderTickCounter; //#if MC>=11300 import com.replaymod.render.mixin.MainWindowAccessor; @@ -44,7 +44,7 @@ import org.lwjgl.glfw.GLFW; //#if MC>=10800 import com.replaymod.render.hooks.ChunkLoadingRenderGlobal; -import static net.minecraft.client.renderer.GlStateManager.*; +import static com.mojang.blaze3d.platform.GlStateManager.*; //#else //$$ import static com.replaymod.core.versions.MCVer.GlStateManager.*; //#endif @@ -64,7 +64,7 @@ import static org.lwjgl.opengl.GL11.GL_COLOR_BUFFER_BIT; import static org.lwjgl.opengl.GL11.GL_DEPTH_BUFFER_BIT; public class VideoRenderer implements RenderInfo { - private final Minecraft mc = MCVer.getMinecraft(); + private final MinecraftClient mc = MCVer.getMinecraft(); private final RenderSettings settings; private final ReplayHandler replayHandler; private final Timeline timeline; @@ -90,7 +90,7 @@ public class VideoRenderer implements RenderInfo { private boolean cancelled; private volatile Throwable failureCause; - private Framebuffer guiFramebuffer; + private GlFramebuffer guiFramebuffer; private int displayWidth, displayHeight; public VideoRenderer(RenderSettings settings, ReplayHandler replayHandler, Timeline timeline) throws IOException { @@ -127,7 +127,7 @@ public class VideoRenderer implements RenderInfo { // Because this might take some time to prepare we'll render the GUI at least once to not confuse the user drawGui(); - Timer timer = ((MinecraftAccessor) mc).getTimer(); + RenderTickCounter timer = ((MinecraftAccessor) mc).getTimer(); // Play up to one second before starting to render // This is necessary in order to ensure that all entities have at least two position packets @@ -142,14 +142,14 @@ public class VideoRenderer implements RenderInfo { if (videoStart > 1000) { int replayTime = videoStart - 1000; //#if MC>=11200 - timer.renderPartialTicks = 0; + timer.tickDelta = 0; ((TimerAccessor) timer).setTickLength(WrappedTimer.DEFAULT_MS_PER_TICK); //#else //$$ timer.elapsedPartialTicks = timer.renderPartialTicks = 0; //$$ timer.timerSpeed = 1; //#endif while (replayTime < videoStart) { - timer.elapsedTicks = 1; + timer.ticksThisFrame = 1; replayTime += 50; replayHandler.getReplaySender().sendPacketsTill(replayTime); tick(); @@ -157,12 +157,12 @@ public class VideoRenderer implements RenderInfo { } } - ((WorldRendererAccessor) mc.renderGlobal).setRenderEntitiesStartupCounter(0); + ((WorldRendererAccessor) mc.worldRenderer).setRenderEntitiesStartupCounter(0); renderingPipeline.run(); if (((MinecraftAccessor) mc).hasCrashed()) { - throw new ReportedException(((MinecraftAccessor) mc).getCrashReporter()); + throw new CrashException(((MinecraftAccessor) mc).getCrashReporter()); } if (settings.isInjectSphericalMetadata()) { @@ -186,10 +186,10 @@ public class VideoRenderer implements RenderInfo { public float updateForNextFrame() { // because the jGui lib uses Minecraft's displayWidth and displayHeight values, update these temporarily //#if MC>=11300 - int displayWidthBefore = mc.mainWindow.getFramebufferWidth(); - int displayHeightBefore = mc.mainWindow.getFramebufferHeight(); + int displayWidthBefore = mc.window.getFramebufferWidth(); + int displayHeightBefore = mc.window.getFramebufferHeight(); //noinspection ConstantConditions - MainWindowAccessor acc = (MainWindowAccessor) (Object) mc.mainWindow; + MainWindowAccessor acc = (MainWindowAccessor) (Object) mc.window; acc.setFramebufferWidth(displayWidth); acc.setFramebufferHeight(displayHeight); //#else @@ -204,14 +204,14 @@ public class VideoRenderer implements RenderInfo { } // Updating the timer will cause the timeline player to update the game state - Timer timer = ((MinecraftAccessor) mc).getTimer(); - timer.updateTimer( + RenderTickCounter timer = ((MinecraftAccessor) mc).getTimer(); + timer.beginRenderTick( //#if MC>=11300 MCVer.milliTime() //#endif ); - int elapsedTicks = timer.elapsedTicks; + int elapsedTicks = timer.ticksThisFrame; while (elapsedTicks-- > 0) { tick(); } @@ -226,7 +226,7 @@ public class VideoRenderer implements RenderInfo { //#endif framesDone++; - return timer.renderPartialTicks; + return timer.tickDelta; } @Override @@ -238,22 +238,22 @@ public class VideoRenderer implements RenderInfo { timelinePlayer = new TimelinePlayer(replayHandler); timelinePlayerFuture = timelinePlayer.start(timeline); - if (!OpenGlHelper.isFramebufferEnabled()) { + if (!GLX.isUsingFBOs()) { //#if MC>=11300 - GLFW.glfwSetWindowAttrib(mc.mainWindow.getHandle(), GLFW.GLFW_RESIZABLE, 1); + GLFW.glfwSetWindowAttrib(mc.window.getHandle(), GLFW.GLFW_RESIZABLE, 1); //#else //$$ Display.setResizable(false); //#endif } - if (mc.gameSettings.showDebugInfo) { + if (mc.options.debugEnabled) { debugInfoWasShown = true; - mc.gameSettings.showDebugInfo = false; + mc.options.debugEnabled = false; } //#if MC>=11300 - if (mc.mouseHelper.isMouseGrabbed()) { + if (mc.mouse.isCursorLocked()) { mouseWasGrabbed = true; } - mc.mouseHelper.ungrabMouse(); + mc.mouse.unlockCursor(); //#else //$$ if (Mouse.isGrabbed()) { //$$ mouseWasGrabbed = true; @@ -265,8 +265,8 @@ public class VideoRenderer implements RenderInfo { originalSoundLevels = new EnumMap<>(SoundCategory.class); for (SoundCategory category : SoundCategory.values()) { if (category != SoundCategory.MASTER) { - originalSoundLevels.put(category, mc.gameSettings.getSoundLevel(category)); - mc.gameSettings.setSoundLevel(category, 0); + originalSoundLevels.put(category, mc.options.getSoundVolume(category)); + mc.options.setSoundVolume(category, 0); } } @@ -295,13 +295,13 @@ public class VideoRenderer implements RenderInfo { //#endif //#if MC>=10800 - chunkLoadingRenderGlobal = new ChunkLoadingRenderGlobal(mc.renderGlobal); + chunkLoadingRenderGlobal = new ChunkLoadingRenderGlobal(mc.worldRenderer); //#endif // Set up our own framebuffer to render the GUI to - guiFramebuffer = new Framebuffer(displayWidth, displayHeight, true + guiFramebuffer = new GlFramebuffer(displayWidth, displayHeight, true //#if MC>=11400 - //$$ , false + , false //#endif ); } @@ -313,25 +313,25 @@ public class VideoRenderer implements RenderInfo { // Tear down of the timeline player might only happen the next tick after it was cancelled timelinePlayer.onTick(); - if (!OpenGlHelper.isFramebufferEnabled()) { + if (!GLX.isUsingFBOs()) { //#if MC>=11300 - GLFW.glfwSetWindowAttrib(mc.mainWindow.getHandle(), GLFW.GLFW_RESIZABLE, 0); + GLFW.glfwSetWindowAttrib(mc.window.getHandle(), GLFW.GLFW_RESIZABLE, 0); //#else //$$ Display.setResizable(true); //#endif } - mc.gameSettings.showDebugInfo = debugInfoWasShown; + mc.options.debugEnabled = debugInfoWasShown; if (mouseWasGrabbed) { //#if MC>=11300 - mc.mouseHelper.grabMouse(); + mc.mouse.lockCursor(); //#else //$$ mc.mouseHelper.grabMouseCursor(); //#endif } for (Map.Entry entry : originalSoundLevels.entrySet()) { - mc.gameSettings.setSoundLevel(entry.getKey(), entry.getValue()); + mc.options.setSoundVolume(entry.getKey(), entry.getValue()); } - mc.displayGuiScreen(null); + mc.openScreen(null); //#if MC>=10800 if (chunkLoadingRenderGlobal != null) { chunkLoadingRenderGlobal.uninstall(); @@ -350,13 +350,13 @@ public class VideoRenderer implements RenderInfo { // Finally, resize the Minecraft framebuffer to the actual width/height of the window //#if MC>=11300 - mc.getFramebuffer().createFramebuffer(displayWidth, displayHeight + mc.getFramebuffer().initFbo(displayWidth, displayHeight //#if MC>=11400 - //$$ , false + , false //#endif ); //noinspection ConstantConditions - MainWindowAccessor acc = (MainWindowAccessor) (Object) mc.mainWindow; + MainWindowAccessor acc = (MainWindowAccessor) (Object) mc.window; acc.setFramebufferWidth(displayWidth); acc.setFramebufferHeight(displayHeight); //#else @@ -366,15 +366,15 @@ public class VideoRenderer implements RenderInfo { private void tick() { //#if MC>=11400 - //$$ ((MCVer.MinecraftMethodAccessor) mc).replayModExecuteTaskQueue(); + ((MCVer.MinecraftMethodAccessor) mc).replayModExecuteTaskQueue(); //#else - Queue> scheduledTasks = ((MinecraftAccessor) mc).getScheduledTasks(); - //noinspection SynchronizationOnLocalVariableOrMethodParameter - synchronized (scheduledTasks) { - while (!scheduledTasks.isEmpty()) { - scheduledTasks.poll().run(); - } - } + //$$ Queue> scheduledTasks = ((MinecraftAccessor) mc).getScheduledTasks(); + //$$ //noinspection SynchronizationOnLocalVariableOrMethodParameter + //$$ synchronized (scheduledTasks) { + //$$ while (!scheduledTasks.isEmpty()) { + //$$ scheduledTasks.poll().run(); + //$$ } + //$$ } //#endif mc.currentScreen = gui.toMinecraft(); @@ -385,7 +385,7 @@ public class VideoRenderer implements RenderInfo { //$$ throw new RuntimeException(e); //$$ } //#else - mc.runTick(); + mc.tick(); //#endif } @@ -395,9 +395,9 @@ public class VideoRenderer implements RenderInfo { if (!settings.isHighPerformance() && displaySizeChanged()) { updateDisplaySize(); //#if MC>=11300 - guiFramebuffer.createBindFramebuffer(mc.mainWindow.getFramebufferWidth(), mc.mainWindow.getFramebufferHeight() + guiFramebuffer.resize(mc.window.getFramebufferWidth(), mc.window.getFramebufferHeight() //#if MC>=11400 - //$$ , false + , false //#endif ); //#else @@ -408,16 +408,16 @@ public class VideoRenderer implements RenderInfo { pushMatrix(); clear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT //#if MC>=11400 - //$$ , false + , false //#endif ); - enableTexture2D(); - guiFramebuffer.bindFramebuffer(true); + enableTexture(); + guiFramebuffer.beginWrite(true); //#if MC>=11300 - mc.mainWindow.setupOverlayRendering( + mc.window.method_4493( //#if MC>=11400 - //$$ false + false //#endif ); //#else @@ -425,7 +425,7 @@ public class VideoRenderer implements RenderInfo { //#endif //#if MC>=11300 - gui.toMinecraft().setWorldAndResolution(mc, mc.mainWindow.getScaledWidth(), mc.mainWindow.getScaledHeight()); + gui.toMinecraft().init(mc, mc.window.getScaledWidth(), mc.window.getScaledHeight()); //#else //$$ ScaledResolution scaled = newScaledResolution(mc); //$$ gui.toMinecraft().setWorldAndResolution(mc, scaled.getScaledWidth(), scaled.getScaledHeight()); @@ -447,8 +447,8 @@ public class VideoRenderer implements RenderInfo { //#endif //#if MC>=11300 - int mouseX = (int) mc.mouseHelper.getMouseX(); - int mouseY = (int) mc.mouseHelper.getMouseY(); + int mouseX = (int) mc.mouse.getX(); + int mouseY = (int) mc.mouse.getY(); gui.toMinecraft().tick(); gui.toMinecraft().render(mouseX, mouseY, 0); @@ -460,14 +460,14 @@ public class VideoRenderer implements RenderInfo { //$$ gui.toMinecraft().drawScreen(mouseX, mouseY, 0); //#endif - guiFramebuffer.unbindFramebuffer(); + guiFramebuffer.endWrite(); popMatrix(); pushMatrix(); - guiFramebuffer.framebufferRender(displayWidth, displayHeight); + guiFramebuffer.draw(displayWidth, displayHeight); popMatrix(); //#if MC>=11300 - mc.mainWindow.update(false); + mc.window.setFullscreen(false); //#else //$$ // if not in high performance mode, update the gui size if screen size changed //$$ // otherwise just swap the progress gui to screen @@ -482,8 +482,8 @@ public class VideoRenderer implements RenderInfo { //$$ } //#endif //#if MC>=11300 - if (mc.mouseHelper.isMouseGrabbed()) { - mc.mouseHelper.ungrabMouse(); + if (mc.mouse.isCursorLocked()) { + mc.mouse.unlockCursor(); } //#else //$$ if (Mouse.isGrabbed()) { @@ -503,7 +503,7 @@ public class VideoRenderer implements RenderInfo { private boolean displaySizeChanged() { //#if MC>=11300 - return displayWidth != mc.mainWindow.getWidth() || displayHeight != mc.mainWindow.getHeight(); + return displayWidth != mc.window.getWidth() || displayHeight != mc.window.getHeight(); //#else //$$ return displayWidth != Display.getWidth() || displayHeight != Display.getHeight(); //#endif @@ -511,8 +511,8 @@ public class VideoRenderer implements RenderInfo { private void updateDisplaySize() { //#if MC>=11300 - displayWidth = mc.mainWindow.getWidth(); - displayHeight = mc.mainWindow.getHeight(); + displayWidth = mc.window.getWidth(); + displayHeight = mc.window.getHeight(); //#else //$$ displayWidth = Display.getWidth(); //$$ displayHeight = Display.getHeight(); diff --git a/src/main/java/com/replaymod/render/shader/Program.java b/src/main/java/com/replaymod/render/shader/Program.java index 3481c5f9..cf2da1a6 100644 --- a/src/main/java/com/replaymod/render/shader/Program.java +++ b/src/main/java/com/replaymod/render/shader/Program.java @@ -1,7 +1,7 @@ package com.replaymod.render.shader; import com.replaymod.core.versions.MCVer; -import net.minecraft.util.ResourceLocation; +import net.minecraft.util.Identifier; import org.apache.commons.io.IOUtils; import org.lwjgl.opengl.ARBFragmentShader; import org.lwjgl.opengl.ARBShaderObjects; @@ -9,7 +9,7 @@ import org.lwjgl.opengl.ARBVertexShader; import org.lwjgl.opengl.GL11; //#if MC>=11300 -import net.minecraft.resources.IResource; +import net.minecraft.resource.Resource; //#else //$$ import net.minecraft.client.resources.IResource; //#endif @@ -21,7 +21,7 @@ import static org.lwjgl.opengl.ARBShaderObjects.*; public class Program { private final int program; - public Program(ResourceLocation vertexShader, ResourceLocation fragmentShader) throws Exception { + public Program(Identifier vertexShader, Identifier fragmentShader) throws Exception { int vertShader = createShader(vertexShader, ARBVertexShader.GL_VERTEX_SHADER_ARB); int fragShader = createShader(fragmentShader, ARBFragmentShader.GL_FRAGMENT_SHADER_ARB); @@ -44,7 +44,7 @@ public class Program { } } - private int createShader(ResourceLocation resourceLocation, int shaderType) throws Exception { + private int createShader(Identifier resourceLocation, int shaderType) throws Exception { int shader = 0; try { shader = glCreateShaderObjectARB(shaderType); @@ -52,7 +52,7 @@ public class Program { if(shader == 0) throw new Exception("glCreateShaderObjectARB failed"); - IResource resource = MCVer.getMinecraft().getResourceManager().getResource(resourceLocation); + Resource resource = MCVer.getMinecraft().getResourceManager().getResource(resourceLocation); try (InputStream is = resource.getInputStream()) { glShaderSourceARB(shader, IOUtils.toString(is)); } diff --git a/src/main/java/com/replaymod/render/utils/SoundHandler.java b/src/main/java/com/replaymod/render/utils/SoundHandler.java index 8959689d..940d51bc 100644 --- a/src/main/java/com/replaymod/render/utils/SoundHandler.java +++ b/src/main/java/com/replaymod/render/utils/SoundHandler.java @@ -1,7 +1,7 @@ package com.replaymod.render.utils; import com.replaymod.core.versions.MCVer; -import net.minecraft.util.ResourceLocation; +import net.minecraft.util.Identifier; import org.apache.commons.io.IOUtils; import javax.sound.sampled.AudioInputStream; @@ -12,7 +12,7 @@ import java.io.InputStream; public class SoundHandler { - private final ResourceLocation successSoundLocation = new ResourceLocation("replaymod", "render_success.wav"); + private final Identifier successSoundLocation = new Identifier("replaymod", "render_success.wav"); public void playRenderSuccessSound() { playSound(successSoundLocation); @@ -22,7 +22,7 @@ public class SoundHandler { * Plays a .wav Sound from a ResourceLocation. This method does not respect Game Settings like Audio Volume. * @param loc The Sound File's ResourceLocation */ - public void playSound(ResourceLocation loc) { + public void playSound(Identifier loc) { try { InputStream is = MCVer.getMinecraft().getResourceManager().getResource(loc).getInputStream(); byte[] bytes = IOUtils.toByteArray(is); diff --git a/src/main/java/com/replaymod/replay/FullReplaySender.java b/src/main/java/com/replaymod/replay/FullReplaySender.java index 80eff08a..35fabfb0 100755 --- a/src/main/java/com/replaymod/replay/FullReplaySender.java +++ b/src/main/java/com/replaymod/replay/FullReplaySender.java @@ -19,46 +19,46 @@ import io.netty.channel.ChannelDuplexHandler; import io.netty.channel.ChannelHandler.Sharable; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelPromise; -import net.minecraft.client.Minecraft; -import net.minecraft.client.entity.EntityOtherPlayerMP; -import net.minecraft.client.gui.GuiDownloadTerrain; -import net.minecraft.client.gui.GuiErrorScreen; -import net.minecraft.client.multiplayer.WorldClient; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.network.EnumConnectionState; -import net.minecraft.network.NetworkManager; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.network.OtherClientPlayerEntity; +import net.minecraft.client.gui.menu.DownloadingTerrainScreen; +import net.minecraft.client.gui.menu.NoticeScreen; +import net.minecraft.client.world.ClientWorld; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.network.NetworkState; +import net.minecraft.network.ClientConnection; import net.minecraft.network.Packet; -import net.minecraft.network.PacketBuffer; -import net.minecraft.network.login.server.SPacketLoginSuccess; -import net.minecraft.network.play.server.*; -import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.PacketByteBuf; +import net.minecraft.client.network.packet.LoginSuccessS2CPacket; +import net.minecraft.client.network.packet.*; +import net.minecraft.text.TextComponent; import net.minecraft.world.World; -import net.minecraft.world.chunk.IChunkProvider; +import net.minecraft.world.chunk.ChunkProvider; import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; //#if MC>=11400 -//$$ import de.johni0702.minecraft.gui.versions.callbacks.PreTickCallback; -//$$ import net.minecraft.entity.EntityType; -//$$ import net.minecraft.text.TranslatableTextComponent; +import de.johni0702.minecraft.gui.versions.callbacks.PreTickCallback; +import net.minecraft.entity.EntityType; +import net.minecraft.text.TranslatableTextComponent; //#else -import net.minecraft.client.resources.I18n; -import net.minecraft.entity.Entity; -import net.minecraft.util.math.MathHelper; -import net.minecraft.world.EnumDifficulty; -import net.minecraft.world.WorldType; -import net.minecraft.world.chunk.Chunk; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.common.gameevent.TickEvent; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Iterator; +//$$ import net.minecraft.client.resources.I18n; +//$$ import net.minecraft.entity.Entity; +//$$ import net.minecraft.util.math.MathHelper; +//$$ import net.minecraft.world.EnumDifficulty; +//$$ import net.minecraft.world.WorldType; +//$$ import net.minecraft.world.chunk.Chunk; +//$$ import net.minecraftforge.eventbus.api.SubscribeEvent; +//$$ import net.minecraftforge.fml.common.gameevent.TickEvent; +//$$ import java.util.ArrayList; +//$$ import java.util.Collection; +//$$ import java.util.Iterator; //#endif //#if MC>=11300 -import net.minecraft.util.ResourceLocation; +import net.minecraft.util.Identifier; //#if MC<11400 -import net.minecraft.world.dimension.DimensionType; +//$$ import net.minecraft.world.dimension.DimensionType; //#endif //#endif @@ -66,13 +66,13 @@ import net.minecraft.world.dimension.DimensionType; import com.replaymod.core.utils.WrappedTimer; //#endif //#if MC>=11002 -import net.minecraft.world.GameType; +import net.minecraft.world.GameMode; //#else //$$ import net.minecraft.world.WorldSettings.GameType; //#endif //#if MC>=10800 -import net.minecraft.network.EnumPacketDirection; +import net.minecraft.network.NetworkSide; //#else //$$ import org.apache.commons.io.Charsets; //#endif @@ -96,26 +96,26 @@ public class FullReplaySender extends ChannelDuplexHandler implements ReplaySend */ private static final List BAD_PACKETS = Arrays.asList( //#if MC>=11400 - //$$ OpenWrittenBookS2CPacket.class, + OpenWrittenBookS2CPacket.class, //#endif //#if MC>=11200 - SPacketRecipeBook.class, - SPacketAdvancementInfo.class, - SPacketSelectAdvancementsTab.class, + SynchronizeRecipesS2CPacket.class, + AdvancementUpdateS2CPacket.class, + SelectAdvancementTabS2CPacket.class, //#endif //#if MC>=10904 // TODO Update possibly more? - SPacketUpdateHealth.class, - SPacketOpenWindow.class, - SPacketCloseWindow.class, - SPacketSetSlot.class, - SPacketWindowItems.class, - SPacketSignEditorOpen.class, - SPacketStatistics.class, - SPacketSetExperience.class, - SPacketCamera.class, - SPacketPlayerAbilities.class, - SPacketTitle.class + HealthUpdateS2CPacket.class, + GuiOpenS2CPacket.class, + GuiCloseS2CPacket.class, + GuiSlotUpdateS2CPacket.class, + GuiUpdateS2CPacket.class, + SignEditorOpenS2CPacket.class, + StatisticsS2CPacket.class, + ExperienceBarUpdateS2CPacket.class, + SetCameraEntityS2CPacket.class, + PlayerAbilitiesS2CPacket.class, + TitleS2CPacket.class //#else //#if MC>=10800 //$$ S43PacketCamera.class, @@ -211,7 +211,7 @@ public class FullReplaySender extends ChannelDuplexHandler implements ReplaySend /** * The minecraft instance. */ - protected Minecraft mc = getMinecraft(); + protected MinecraftClient mc = getMinecraft(); /** * The total length of this replay in milliseconds. @@ -325,13 +325,13 @@ public class FullReplaySender extends ChannelDuplexHandler implements ReplaySend class EventHandler extends EventRegistrations { //#if MC>=11400 - //$$ { on(PreTickCallback.EVENT, this::onWorldTick); } - //$$ private void onWorldTick() { + { on(PreTickCallback.EVENT, this::onWorldTick); } + private void onWorldTick() { //#else - @SubscribeEvent - public void onWorldTick(TickEvent.ClientTickEvent event) { - // Unfortunately the WorldTickEvent doesn't seem to be emitted on the CLIENT side - if (event.phase != TickEvent.Phase.START) return; + //$$ @SubscribeEvent + //$$ public void onWorldTick(TickEvent.ClientTickEvent event) { + //$$ // Unfortunately the WorldTickEvent doesn't seem to be emitted on the CLIENT side + //$$ if (event.phase != TickEvent.Phase.START) return; //#endif // Spawning a player into an empty chunk (which we might do with the recording player) @@ -340,10 +340,10 @@ public class FullReplaySender extends ChannelDuplexHandler implements ReplaySend // To counteract this, we need to manually update it's position if it hasn't been added // to any chunk yet. if (mc.world != null) { - for (EntityPlayer playerEntity : playerEntities(mc.world)) { - if (!playerEntity.addedToChunk && playerEntity instanceof EntityOtherPlayerMP) { + for (PlayerEntity playerEntity : playerEntities(mc.world)) { + if (!playerEntity.field_6016 && playerEntity instanceof OtherClientPlayerEntity) { //#if MC>=11300 - playerEntity.livingTick(); + playerEntity.updateState(); //#else //$$ playerEntity.onLivingUpdate(); //#endif @@ -380,27 +380,27 @@ public class FullReplaySender extends ChannelDuplexHandler implements ReplaySend // Therefore we have to remove all loaded, dead entities manually if we are in sync mode. // We do this after every SpawnX packet and after the destroy entities packet. if (!asyncMode && mc.world != null) { - if (p instanceof SPacketSpawnPlayer - || p instanceof SPacketSpawnObject - || p instanceof SPacketSpawnMob - || p instanceof SPacketSpawnGlobalEntity - || p instanceof SPacketSpawnPainting - || p instanceof SPacketSpawnExperienceOrb - || p instanceof SPacketDestroyEntities) { - WorldClient world = mc.world; + if (p instanceof PlayerSpawnS2CPacket + || p instanceof EntitySpawnS2CPacket + || p instanceof MobSpawnS2CPacket + || p instanceof EntitySpawnGlobalS2CPacket + || p instanceof PaintingSpawnS2CPacket + || p instanceof ExperienceOrbSpawnS2CPacket + || p instanceof EntitiesDestroyS2CPacket) { + ClientWorld world = mc.world; //#if MC>=11400 - //$$ // Note: Not sure if it's still required but there's this really handy method anyway - //$$ world.finishRemovingEntities(); + // Note: Not sure if it's still required but there's this really handy method anyway + world.finishRemovingEntities(); //#else - Iterator iter = loadedEntityList(world).iterator(); - while (iter.hasNext()) { - Entity entity = iter.next(); - if (entity.removed) { - int chunkX = entity.chunkCoordX; - int chunkY = entity.chunkCoordZ; - + //$$ Iterator iter = loadedEntityList(world).iterator(); + //$$ while (iter.hasNext()) { + //$$ Entity entity = iter.next(); + //$$ if (entity.removed) { + //$$ int chunkX = entity.chunkCoordX; + //$$ int chunkY = entity.chunkCoordZ; + //$$ //#if MC>=11300 - if (entity.addedToChunk && world.getChunkProvider().provideChunk(chunkX, chunkY, false, false) != null) { + //$$ if (entity.addedToChunk && world.getChunkProvider().provideChunk(chunkX, chunkY, false, false) != null) { //#else //#if MC>=10904 //$$ if (entity.addedToChunk && world.getChunkProvider().getLoadedChunk(chunkX, chunkY) != null) { @@ -408,14 +408,14 @@ public class FullReplaySender extends ChannelDuplexHandler implements ReplaySend //$$ if (entity.addedToChunk && world.getChunkProvider().chunkExists(chunkX, chunkY)) { //#endif //#endif - world.getChunk(chunkX, chunkY).removeEntity(entity); - } - - iter.remove(); - world.onEntityRemoved(entity); - } - - } + //$$ world.getChunk(chunkX, chunkY).removeEntity(entity); + //$$ } + //$$ + //$$ iter.remove(); + //$$ world.onEntityRemoved(entity); + //$$ } + //$$ + //$$ } //#endif } } @@ -430,17 +430,17 @@ public class FullReplaySender extends ChannelDuplexHandler implements ReplaySend private Packet deserializePacket(byte[] bytes) throws IOException, IllegalAccessException, InstantiationException { ByteBuf bb = Unpooled.wrappedBuffer(bytes); - PacketBuffer pb = new PacketBuffer(bb); + PacketByteBuf pb = new PacketByteBuf(bb); int i = pb.readVarInt(); - EnumConnectionState state = loginPhase ? EnumConnectionState.LOGIN : EnumConnectionState.PLAY; + NetworkState state = loginPhase ? NetworkState.LOGIN : NetworkState.PLAY; //#if MC>=10800 - Packet p = state.getPacket(EnumPacketDirection.CLIENTBOUND, i); + Packet p = state.getPacketHandler(NetworkSide.CLIENT, i); //#else //$$ Packet p = Packet.generatePacket(state.func_150755_b(), i); //#endif - p.readPacketData(pb); + p.read(pb); return p; } @@ -451,14 +451,14 @@ public class FullReplaySender extends ChannelDuplexHandler implements ReplaySend * @return The processed packet or {@code null} if no packet shall be sent */ protected Packet processPacket(Packet p) throws Exception { - if (p instanceof SPacketLoginSuccess) { + if (p instanceof LoginSuccessS2CPacket) { loginPhase = false; return p; } - if (p instanceof SPacketCustomPayload) { - SPacketCustomPayload packet = (SPacketCustomPayload) p; - if (Restrictions.PLUGIN_CHANNEL.equals(packet.getChannelName())) { + if (p instanceof CustomPayloadS2CPacket) { + CustomPayloadS2CPacket packet = (CustomPayloadS2CPacket) p; + if (Restrictions.PLUGIN_CHANNEL.equals(packet.getChannel())) { final String unknown = replayHandler.getRestrictions().handle(packet); if (unknown == null) { return null; @@ -472,22 +472,22 @@ public class FullReplaySender extends ChannelDuplexHandler implements ReplaySend } catch (IOException e) { e.printStackTrace(); } - mc.displayGuiScreen(new GuiErrorScreen( + mc.openScreen(new NoticeScreen( //#if MC>=11400 - //$$ () -> {}, - //$$ new TranslatableTextComponent("replaymod.error.unknownrestriction1"), - //$$ new TranslatableTextComponent("replaymod.error.unknownrestriction2", unknown) + () -> {}, + new TranslatableTextComponent("replaymod.error.unknownrestriction1"), + new TranslatableTextComponent("replaymod.error.unknownrestriction2", unknown) //#else - I18n.format("replaymod.error.unknownrestriction1"), - I18n.format("replaymod.error.unknownrestriction2", unknown) + //$$ I18n.format("replaymod.error.unknownrestriction1"), + //$$ I18n.format("replaymod.error.unknownrestriction2", unknown) //#endif )); }); } } } - if (p instanceof SPacketDisconnect) { - ITextComponent reason = ((SPacketDisconnect) p).getReason(); + if (p instanceof DisconnectS2CPacket) { + TextComponent reason = ((DisconnectS2CPacket) p).getReason(); String message = reason.getString(); if ("Please update to view this replay.".equals(message)) { // This version of the mod supports replay restrictions so we are allowed @@ -498,28 +498,28 @@ public class FullReplaySender extends ChannelDuplexHandler implements ReplaySend if(BAD_PACKETS.contains(p.getClass())) return null; - if (p instanceof SPacketCustomPayload) { - SPacketCustomPayload packet = (SPacketCustomPayload) p; + if (p instanceof CustomPayloadS2CPacket) { + CustomPayloadS2CPacket packet = (CustomPayloadS2CPacket) p; //#if MC>=11300 - ResourceLocation channelName = packet.getChannelName(); + Identifier channelName = packet.getChannel(); //#else //$$ String channelName = packet.getChannelName(); //#endif // On 1.14+ there's a dedicated OpenWrittenBookS2CPacket now //#if MC<11400 //#if MC>=11300 - if (SPacketCustomPayload.BOOK_OPEN.equals(channelName)) { + //$$ if (SPacketCustomPayload.BOOK_OPEN.equals(channelName)) { //#else //$$ if ("MC|BOpen".equals(channelName)) { //#endif - return null; - } + //$$ return null; + //$$ } //#endif //#if MC>=10800 } - if(p instanceof SPacketResourcePackSend) { - SPacketResourcePackSend packet = (SPacketResourcePackSend) p; + if(p instanceof ResourcePackSendS2CPacket) { + ResourcePackSendS2CPacket packet = (ResourcePackSendS2CPacket) p; String url = packet.getURL(); if (url.startsWith("replay://")) { //#else @@ -543,41 +543,41 @@ public class FullReplaySender extends ChannelDuplexHandler implements ReplaySend } } - if(p instanceof SPacketJoinGame) { - SPacketJoinGame packet = (SPacketJoinGame) p; - int entId = packet.getPlayerId(); + if(p instanceof GameJoinS2CPacket) { + GameJoinS2CPacket packet = (GameJoinS2CPacket) p; + int entId = packet.getEntityId(); allowMovement = true; actualID = entId; entId = -1789435; // Camera entity id should be negative which is an invalid id and can't be used by servers //#if MC>=11400 - //$$ p = new GameJoinS2CPacket( - //$$ entId, - //$$ GameMode.SPECTATOR, - //$$ false, - //$$ packet.getDimension(), - //$$ 0, // max players (has no getter -> never actually used) - //$$ packet.getGeneratorType(), - //$$ packet.getChunkLoadDistance(), - //$$ packet.hasReducedDebugInfo() - //$$ ); + p = new GameJoinS2CPacket( + entId, + GameMode.SPECTATOR, + false, + packet.getDimension(), + 0, // max players (has no getter -> never actually used) + packet.getGeneratorType(), + packet.getChunkLoadDistance(), + packet.hasReducedDebugInfo() + ); //#else //#if MC>=10800 //#if MC>=11300 - DimensionType dimension = packet.func_212642_e(); + //$$ DimensionType dimension = packet.func_212642_e(); //#else //$$ int dimension = packet.getDimension(); //#endif - EnumDifficulty difficulty = packet.getDifficulty(); + //$$ EnumDifficulty difficulty = packet.getDifficulty(); //#if MC>=11300 - int maxPlayers = 0; // literally never used by vanilla (i.e. no accessor) + //$$ int maxPlayers = 0; // literally never used by vanilla (i.e. no accessor) //#else //$$ int maxPlayers = packet.getMaxPlayers(); //#endif - WorldType worldType = packet.getWorldType(); - + //$$ WorldType worldType = packet.getWorldType(); + //$$ //#if MC>=10904 - p = new SPacketJoinGame(entId, GameType.SPECTATOR, false, dimension, - difficulty, maxPlayers, worldType, false); + //$$ p = new SPacketJoinGame(entId, GameType.SPECTATOR, false, dimension, + //$$ difficulty, maxPlayers, worldType, false); //#else //$$ p = new S01PacketJoinGame(entId, GameType.SPECTATOR, false, dimension, //$$ difficulty, maxPlayers, worldType, false); @@ -594,14 +594,14 @@ public class FullReplaySender extends ChannelDuplexHandler implements ReplaySend //#endif } - if(p instanceof SPacketRespawn) { - SPacketRespawn respawn = (SPacketRespawn) p; + if(p instanceof PlayerRespawnS2CPacket) { + PlayerRespawnS2CPacket respawn = (PlayerRespawnS2CPacket) p; //#if MC>=11400 - //$$ p = new PlayerRespawnS2CPacket(respawn.getDimension(), respawn.getGeneratorType(), GameMode.SPECTATOR); + p = new PlayerRespawnS2CPacket(respawn.getDimension(), respawn.getGeneratorType(), GameMode.SPECTATOR); //#else //#if MC>=10809 - p = new SPacketRespawn(respawn.func_212643_b(), - respawn.getDifficulty(), respawn.getWorldType(), GameType.SPECTATOR); + //$$ p = new SPacketRespawn(respawn.func_212643_b(), + //$$ respawn.getDifficulty(), respawn.getWorldType(), GameType.SPECTATOR); //#else //$$ p = new S07PacketRespawn(respawn.func_149082_c(), //$$ respawn.func_149081_d(), respawn.func_149080_f(), @@ -616,13 +616,13 @@ public class FullReplaySender extends ChannelDuplexHandler implements ReplaySend allowMovement = true; } - if(p instanceof SPacketPlayerPosLook) { - final SPacketPlayerPosLook ppl = (SPacketPlayerPosLook) p; + if(p instanceof PlayerPositionLookS2CPacket) { + final PlayerPositionLookS2CPacket ppl = (PlayerPositionLookS2CPacket) p; if(!hasWorldLoaded) hasWorldLoaded = true; - if (mc.currentScreen instanceof GuiDownloadTerrain) { + if (mc.currentScreen instanceof DownloadingTerrainScreen) { // Close the world loading screen manually in case we swallow the packet - mc.displayGuiScreen(null); + mc.openScreen(null); } if(replayHandler.shouldSuppressCameraMovements()) return null; @@ -631,13 +631,13 @@ public class FullReplaySender extends ChannelDuplexHandler implements ReplaySend //#if MC>=10800 //#if MC>=10904 - for (SPacketPlayerPosLook.EnumFlags relative : ppl.getFlags()) { + for (PlayerPositionLookS2CPacket.Flag relative : ppl.getFlags()) { //#else //$$ for (Object relative : ppl.func_179834_f()) { //#endif - if (relative == SPacketPlayerPosLook.EnumFlags.X - || relative == SPacketPlayerPosLook.EnumFlags.Y - || relative == SPacketPlayerPosLook.EnumFlags.Z) { + if (relative == PlayerPositionLookS2CPacket.Flag.X + || relative == PlayerPositionLookS2CPacket.Flag.Y + || relative == PlayerPositionLookS2CPacket.Flag.Z) { return null; // At least one of the coordinates is relative, so we don't care } } @@ -645,8 +645,8 @@ public class FullReplaySender extends ChannelDuplexHandler implements ReplaySend if(cent != null) { //#if MC>=10809 - if(!allowMovement && !((Math.abs(cent.posX - ppl.getX()) > TP_DISTANCE_LIMIT) || - (Math.abs(cent.posZ - ppl.getZ()) > TP_DISTANCE_LIMIT))) { + if(!allowMovement && !((Math.abs(cent.x - ppl.getX()) > TP_DISTANCE_LIMIT) || + (Math.abs(cent.z - ppl.getZ()) > TP_DISTANCE_LIMIT))) { //#else //$$ if(!allowMovement && !((Math.abs(cent.posX - ppl.func_148932_c()) > TP_DISTANCE_LIMIT) || //$$ (Math.abs(cent.posZ - ppl.func_148933_e()) > TP_DISTANCE_LIMIT))) { @@ -676,9 +676,9 @@ public class FullReplaySender extends ChannelDuplexHandler implements ReplaySend }.run(); } - if(p instanceof SPacketChangeGameState) { - SPacketChangeGameState pg = (SPacketChangeGameState)p; - int reason = pg.getGameState(); + if(p instanceof GameStateChangeS2CPacket) { + GameStateChangeS2CPacket pg = (GameStateChangeS2CPacket)p; + int reason = pg.getReason(); // only allow the following packets: // 1 - End raining @@ -692,7 +692,7 @@ public class FullReplaySender extends ChannelDuplexHandler implements ReplaySend } } - if (p instanceof SPacketChat) { + if (p instanceof ChatMessageS2CPacket) { if (!ReplayModReplay.instance.getCore().getSettingsRegistry().get(Setting.SHOW_CHAT)) { return null; } @@ -923,17 +923,17 @@ public class FullReplaySender extends ChannelDuplexHandler implements ReplaySend protected Packet processPacketAsync(Packet p) { //If hurrying, ignore some packets, except for short durations if(desiredTimeStamp - lastTimeStamp > 1000) { - if(p instanceof SPacketParticles) return null; + if(p instanceof ParticleS2CPacket) return null; - if(p instanceof SPacketSpawnObject) { - SPacketSpawnObject pso = (SPacketSpawnObject)p; + if(p instanceof EntitySpawnS2CPacket) { + EntitySpawnS2CPacket pso = (EntitySpawnS2CPacket)p; //#if MC>=11400 - //$$ if (pso.getEntityTypeId() == EntityType.FIREWORK_ROCKET) return null; + if (pso.getEntityTypeId() == EntityType.FIREWORK_ROCKET) return null; //#else - int type = pso.getType(); - if(type == 76) { // Firework rocket - return null; - } + //$$ int type = pso.getType(); + //$$ if(type == 76) { // Firework rocket + //$$ return null; + //$$ } //#endif } } @@ -1020,8 +1020,8 @@ public class FullReplaySender extends ChannelDuplexHandler implements ReplaySend protected Packet processPacketSync(Packet p) { //#if MC>=10904 - if (p instanceof SPacketUnloadChunk) { - SPacketUnloadChunk packet = (SPacketUnloadChunk) p; + if (p instanceof UnloadChunkS2CPacket) { + UnloadChunkS2CPacket packet = (UnloadChunkS2CPacket) p; int x = packet.getX(); int z = packet.getZ(); //#else @@ -1045,43 +1045,43 @@ public class FullReplaySender extends ChannelDuplexHandler implements ReplaySend // To make things worse, it seems like players were never supposed to be unloaded this way because // they will remain glitched in the World#playerEntities list. World world = mc.world; - IChunkProvider chunkProvider = world.getChunkProvider(); + ChunkProvider chunkProvider = world.getChunkManager(); // Get the chunk that will be unloaded //#if MC>=11400 - //$$ // FIXME fabric + // FIXME fabric //#else //#if MC>=11300 - Chunk chunk = chunkProvider.provideChunk(x, z, false, false); + //$$ Chunk chunk = chunkProvider.provideChunk(x, z, false, false); //#else //$$ Chunk chunk = chunkProvider.provideChunk(x, z); //#endif - if (!chunk.isEmpty()) { - List entitiesInChunk = new ArrayList<>(); - // Gather all entities in that chunk - for (Collection entityList : getEntityLists(chunk)) { - entitiesInChunk.addAll(entityList); - } - for (Entity entity : entitiesInChunk) { - // Skip interpolation of position updates coming from server - // (See: newX in EntityLivingBase or otherPlayerMPX in EntityOtherPlayerMP) - // Needs to be called at least 4 times thanks to - // EntityOtherPlayerMP#otherPlayerMPPosRotationIncrements (max vanilla value is 3) - for (int i = 0; i < 4; i++) { + //$$ if (!chunk.isEmpty()) { + //$$ List entitiesInChunk = new ArrayList<>(); + //$$ // Gather all entities in that chunk + //$$ for (Collection entityList : getEntityLists(chunk)) { + //$$ entitiesInChunk.addAll(entityList); + //$$ } + //$$ for (Entity entity : entitiesInChunk) { + //$$ // Skip interpolation of position updates coming from server + //$$ // (See: newX in EntityLivingBase or otherPlayerMPX in EntityOtherPlayerMP) + //$$ // Needs to be called at least 4 times thanks to + //$$ // EntityOtherPlayerMP#otherPlayerMPPosRotationIncrements (max vanilla value is 3) + //$$ for (int i = 0; i < 4; i++) { //#if MC>=11300 - entity.tick(); + //$$ entity.tick(); //#else //$$ entity.onUpdate(); //#endif - } - - // Check whether the entity has left the chunk - int chunkX = MathHelper.floor(entity.posX / 16); - int chunkZ = MathHelper.floor(entity.posZ / 16); - if (entity.chunkCoordX != chunkX || entity.chunkCoordZ != chunkZ) { - // Entity has left the chunk - chunk.removeEntityAtIndex(entity, entity.chunkCoordY); + //$$ } + //$$ + //$$ // Check whether the entity has left the chunk + //$$ int chunkX = MathHelper.floor(entity.posX / 16); + //$$ int chunkZ = MathHelper.floor(entity.posZ / 16); + //$$ if (entity.chunkCoordX != chunkX || entity.chunkCoordZ != chunkZ) { + //$$ // Entity has left the chunk + //$$ chunk.removeEntityAtIndex(entity, entity.chunkCoordY); //#if MC>=11300 - Chunk newChunk = chunkProvider.provideChunk(chunkX, chunkZ, false, false); + //$$ Chunk newChunk = chunkProvider.provideChunk(chunkX, chunkZ, false, false); //#else //#if MC>=10904 //$$ Chunk newChunk = chunkProvider.getLoadedChunk(chunkX, chunkZ); @@ -1090,34 +1090,34 @@ public class FullReplaySender extends ChannelDuplexHandler implements ReplaySend //$$ ? chunkProvider.provideChunk(chunkX, chunkZ) : null; //#endif //#endif - if (newChunk != null) { - newChunk.addEntity(entity); - } else { - // Entity has left all loaded chunks - entity.addedToChunk = false; - } - } else { - // When entities remain in a chunk that's to be unloaded, they'll only be added to a unload - // queue and remain loaded as before until the next tick (which during jumping is way off). - // So, if they are re-spawned with the same entity id, MC actually cleans up the old entity and - // then adds the new one but leaves the unload queue as is. - // Finally, on the next tick the legitimate entity will be unloaded because it's part of the - // unload queue (entities .equals based purely on their id). However, the old entity object - // is used to determine the chunk the entity is removed from and in this case that'll allow the - // legitimate entity to remain registered in a loaded chunk, causing them to still be rendered. - // - // The usual removal-due-to-chunk-unload process will, without touching the entityList, call - // onEntityRemoved. In that method WorldClient checks to see whether the entity is still in the - // entityList (which it is) and then adds it to the entitySpawnQueue. - // As the final result the entity will remain loaded. - // To get the same result without ticking, we just remove the entity from the to-be-unloaded - // chunk but keep it loaded otherwise. They won't be rendered because they're not part of any - // chunk and will be removed properly if the server decides to re-spawn the entity. - chunk.removeEntityAtIndex(entity, entity.chunkCoordY); - entity.addedToChunk = false; - } - } - } + //$$ if (newChunk != null) { + //$$ newChunk.addEntity(entity); + //$$ } else { + //$$ // Entity has left all loaded chunks + //$$ entity.addedToChunk = false; + //$$ } + //$$ } else { + //$$ // When entities remain in a chunk that's to be unloaded, they'll only be added to a unload + //$$ // queue and remain loaded as before until the next tick (which during jumping is way off). + //$$ // So, if they are re-spawned with the same entity id, MC actually cleans up the old entity and + //$$ // then adds the new one but leaves the unload queue as is. + //$$ // Finally, on the next tick the legitimate entity will be unloaded because it's part of the + //$$ // unload queue (entities .equals based purely on their id). However, the old entity object + //$$ // is used to determine the chunk the entity is removed from and in this case that'll allow the + //$$ // legitimate entity to remain registered in a loaded chunk, causing them to still be rendered. + //$$ // + //$$ // The usual removal-due-to-chunk-unload process will, without touching the entityList, call + //$$ // onEntityRemoved. In that method WorldClient checks to see whether the entity is still in the + //$$ // entityList (which it is) and then adds it to the entitySpawnQueue. + //$$ // As the final result the entity will remain loaded. + //$$ // To get the same result without ticking, we just remove the entity from the to-be-unloaded + //$$ // chunk but keep it loaded otherwise. They won't be rendered because they're not part of any + //$$ // chunk and will be removed properly if the server decides to re-spawn the entity. + //$$ chunk.removeEntityAtIndex(entity, entity.chunkCoordY); + //$$ entity.addedToChunk = false; + //$$ } + //$$ } + //$$ } //#endif } return p; // During synchronous playback everything is sent normally diff --git a/src/main/java/com/replaymod/replay/InputReplayTimer.java b/src/main/java/com/replaymod/replay/InputReplayTimer.java index 41efec35..4c9109e7 100644 --- a/src/main/java/com/replaymod/replay/InputReplayTimer.java +++ b/src/main/java/com/replaymod/replay/InputReplayTimer.java @@ -4,8 +4,8 @@ import com.replaymod.core.utils.WrappedTimer; import com.replaymod.core.versions.MCVer; import com.replaymod.replay.camera.CameraController; import com.replaymod.replay.camera.CameraEntity; -import net.minecraft.client.Minecraft; -import net.minecraft.util.Timer; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.render.RenderTickCounter; //#if MC>=11300 import com.replaymod.core.versions.MCVer; @@ -32,9 +32,9 @@ import org.lwjgl.glfw.GLFW; public class InputReplayTimer extends WrappedTimer { private final ReplayModReplay mod; - private final Minecraft mc; + private final MinecraftClient mc; - public InputReplayTimer(Timer wrapped, ReplayModReplay mod) { + public InputReplayTimer(RenderTickCounter wrapped, ReplayModReplay mod) { super(wrapped); this.mod = mod; this.mc = mod.getCore().getMinecraft(); @@ -43,12 +43,12 @@ public class InputReplayTimer extends WrappedTimer { @Override //#if MC>=11300 //#if MC>=11400 - //$$ // FIXME this should be handled by the preprocessor but there seems to be a bug - //$$ public void beginRenderTick(long sysClock) { + // FIXME this should be handled by the preprocessor but there seems to be a bug + public void beginRenderTick(long sysClock) { //#else - public void updateTimer(long sysClock) { + //$$ public void updateTimer(long sysClock) { //#endif - super.updateTimer(sysClock); + super.beginRenderTick(sysClock); //#else //$$ public void updateTimer() { //$$ super.updateTimer(); @@ -63,11 +63,11 @@ public class InputReplayTimer extends WrappedTimer { // tick speed may vary or there may not be any ticks at all (when the replay is paused) if (mod.getReplayHandler() != null) { //#if MC>=11300 - if (mc.currentScreen == null || mc.currentScreen.allowUserInput) { + if (mc.currentScreen == null || mc.currentScreen.passEvents) { GLFW.glfwPollEvents(); MCVer.processKeyBinds(); } - mc.keyboardListener.tick(); + mc.keyboard.pollDebugCrash(); //#else //#if MC>=10904 //$$ if (mc.currentScreen == null || mc.currentScreen.allowUserInput) { diff --git a/src/main/java/com/replaymod/replay/NoGuiScreenshot.java b/src/main/java/com/replaymod/replay/NoGuiScreenshot.java index c5433ee6..a29c767b 100644 --- a/src/main/java/com/replaymod/replay/NoGuiScreenshot.java +++ b/src/main/java/com/replaymod/replay/NoGuiScreenshot.java @@ -8,9 +8,9 @@ import com.replaymod.core.versions.MCVer; import lombok.AccessLevel; import lombok.Getter; import lombok.RequiredArgsConstructor; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.util.ScreenShotHelper; +import net.minecraft.client.MinecraftClient; +import com.mojang.blaze3d.platform.GlStateManager; +import net.minecraft.client.util.ScreenshotUtils; import org.apache.commons.io.FileUtils; import javax.imageio.ImageIO; @@ -25,7 +25,7 @@ public class NoGuiScreenshot { private final int width; private final int height; - public static ListenableFuture take(final Minecraft mc, final int width, final int height) { + public static ListenableFuture take(final MinecraftClient mc, final int width, final int height) { final SettableFuture future = SettableFuture.create(); Runnable runnable = new Runnable() { @Override @@ -35,28 +35,28 @@ public class NoGuiScreenshot { } //#if MC>=11300 - int frameWidth = mc.mainWindow.getFramebufferWidth(), frameHeight = mc.mainWindow.getFramebufferHeight(); + int frameWidth = mc.window.getFramebufferWidth(), frameHeight = mc.window.getFramebufferHeight(); //#else //$$ int frameWidth = mc.displayWidth, frameHeight = mc.displayHeight; //#endif - final boolean guiHidden = mc.gameSettings.hideGUI; + final boolean guiHidden = mc.options.hudHidden; try { - mc.gameSettings.hideGUI = true; + mc.options.hudHidden = true; // Render frame without GUI GlStateManager.pushMatrix(); GlStateManager.clear( 16640 //#if MC>=11400 - //$$ , true + , true //#endif ); - mc.getFramebuffer().bindFramebuffer(true); - GlStateManager.enableTexture2D(); + mc.getFramebuffer().beginWrite(true); + GlStateManager.enableTexture(); //#if MC>=11300 - mc.entityRenderer.renderWorld(MCVer.getRenderPartialTicks(), System.nanoTime()); + mc.gameRenderer.renderWorld(MCVer.getRenderPartialTicks(), System.nanoTime()); //#else //#if MC>=10809 //$$ mc.entityRenderer.updateCameraAndRender(MCVer.getRenderPartialTicks(), System.nanoTime()); @@ -65,17 +65,17 @@ public class NoGuiScreenshot { //#endif //#endif - mc.getFramebuffer().unbindFramebuffer(); + mc.getFramebuffer().endWrite(); GlStateManager.popMatrix(); GlStateManager.pushMatrix(); - mc.getFramebuffer().framebufferRender(frameWidth, frameHeight); + mc.getFramebuffer().draw(frameWidth, frameHeight); GlStateManager.popMatrix(); } catch (Throwable t) { future.setException(t); return; } finally { // Reset GUI settings - mc.gameSettings.hideGUI = guiHidden; + mc.options.hudHidden = guiHidden; } // The frame without GUI has been rendered @@ -85,8 +85,8 @@ public class NoGuiScreenshot { File tmpFolder = Files.createTempDir(); try { //#if MC>=11300 - ScreenShotHelper.saveScreenshot(tmpFolder, "tmp", frameWidth, frameHeight, mc.getFramebuffer(), (msg) -> - ReplayMod.instance.runLater(() -> mc.ingameGUI.getChatGUI().printChatMessage(msg))); + ScreenshotUtils.method_1662(tmpFolder, "tmp", frameWidth, frameHeight, mc.getFramebuffer(), (msg) -> + ReplayMod.instance.runLater(() -> mc.inGameHud.getChatHud().addMessage(msg))); //#else //$$ ScreenShotHelper.saveScreenshot(tmpFolder, "tmp", frameWidth, frameHeight, mc.getFramebuffer()); //#endif diff --git a/src/main/java/com/replaymod/replay/QuickReplaySender.java b/src/main/java/com/replaymod/replay/QuickReplaySender.java index 33bcad41..4506aa72 100644 --- a/src/main/java/com/replaymod/replay/QuickReplaySender.java +++ b/src/main/java/com/replaymod/replay/QuickReplaySender.java @@ -58,20 +58,20 @@ import io.netty.buffer.Unpooled; import io.netty.channel.ChannelHandler; import io.netty.channel.ChannelHandlerAdapter; import io.netty.channel.ChannelHandlerContext; -import net.minecraft.client.Minecraft; -import net.minecraft.network.EnumConnectionState; -import net.minecraft.network.EnumPacketDirection; +import net.minecraft.client.MinecraftClient; +import net.minecraft.network.NetworkState; +import net.minecraft.network.NetworkSide; import net.minecraft.network.Packet; -import net.minecraft.network.PacketBuffer; +import net.minecraft.util.PacketByteBuf; //#if MC>=11400 -//$$ import de.johni0702.minecraft.gui.versions.callbacks.PreTickCallback; +import de.johni0702.minecraft.gui.versions.callbacks.PreTickCallback; //#else -import com.github.steveice10.mc.protocol.data.game.setting.Difficulty; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.common.gameevent.TickEvent; - -import static com.replaymod.core.versions.MCVer.FML_BUS; +//$$ import com.github.steveice10.mc.protocol.data.game.setting.Difficulty; +//$$ import net.minecraftforge.eventbus.api.SubscribeEvent; +//$$ import net.minecraftforge.fml.common.gameevent.TickEvent; +//$$ +//$$ import static com.replaymod.core.versions.MCVer.FML_BUS; //#endif import javax.annotation.Nullable; @@ -113,7 +113,7 @@ public class QuickReplaySender extends ChannelHandlerAdapter implements ReplaySe private static final String CACHE_INDEX_ENTRY = "quickModeCacheIndex.bin"; private static final int CACHE_VERSION = 0; - private final Minecraft mc = getMinecraft(); + private final MinecraftClient mc = getMinecraft(); private final ReplayModReplay mod; private final ReplayFile replayFile; @@ -216,7 +216,7 @@ public class QuickReplaySender extends ChannelHandlerAdapter implements ReplaySe ctx.fireChannelRead(toMC(new ServerRespawnPacket( 0, //#if MC<11400 - Difficulty.NORMAL, + //$$ Difficulty.NORMAL, //#endif GameMode.SPECTATOR, WorldType.DEFAULT @@ -279,12 +279,12 @@ public class QuickReplaySender extends ChannelHandlerAdapter implements ReplaySe private class EventHandler extends EventRegistrations { //#if MC>=11400 - //$$ { on(PreTickCallback.EVENT, this::onTick); } - //$$ private void onTick() { + { on(PreTickCallback.EVENT, this::onTick); } + private void onTick() { //#else - @SubscribeEvent - public void onTick(TickEvent.ClientTickEvent event) { - if (event.phase != TickEvent.Phase.START) return; + //$$ @SubscribeEvent + //$$ public void onTick(TickEvent.ClientTickEvent event) { + //$$ if (event.phase != TickEvent.Phase.START) return; //#endif if (!asyncMode) return; @@ -653,16 +653,16 @@ public class QuickReplaySender extends ChannelHandlerAdapter implements ReplaySe private static final ByteBuf byteBuf = Unpooled.buffer(); private static final ByteBufOutputStream byteBufOut = new ByteBufOutputStream(byteBuf); - private static final PacketBuffer packetBuf = new PacketBuffer(byteBuf); + private static final PacketByteBuf packetBuf = new PacketByteBuf(byteBuf); private static final ReplayOutputStream encoder = new ReplayOutputStream(new ReplayStudio(), byteBufOut); private static final Inflater inflater = new Inflater(); private static final Deflater deflater = new Deflater(); private static Packet toMC(com.github.steveice10.packetlib.packet.Packet packet) { - return toMC(packet, EnumConnectionState.PLAY); + return toMC(packet, NetworkState.PLAY); } - private static Packet toMC(com.github.steveice10.packetlib.packet.Packet packet, EnumConnectionState state) { + private static Packet toMC(com.github.steveice10.packetlib.packet.Packet packet, NetworkState state) { // We need to re-encode MCProtocolLib packets, so we can then decode them as NMS packets // The main reason we aren't reading them as NMS packets is that we want ReplayStudio to be able // to apply ViaVersion (and potentially other magic) to it. @@ -676,8 +676,8 @@ public class QuickReplaySender extends ChannelHandlerAdapter implements ReplaySe byteBuf.skipBytes(8); // Skip packet length & timestamp int packetId = packetBuf.readVarInt(); - Packet mcPacket = state.getPacket(EnumPacketDirection.CLIENTBOUND, packetId); - mcPacket.readPacketData(packetBuf); + Packet mcPacket = state.getPacketHandler(NetworkSide.CLIENT, packetId); + mcPacket.read(packetBuf); return mcPacket; } catch (Exception e) { Utils.throwIfUnchecked(e); @@ -710,8 +710,8 @@ public class QuickReplaySender extends ChannelHandlerAdapter implements ReplaySe } int packetId = packetBuf.readVarInt(); - Packet mcPacket = EnumConnectionState.PLAY.getPacket(EnumPacketDirection.CLIENTBOUND, packetId); - mcPacket.readPacketData(packetBuf); + Packet mcPacket = NetworkState.PLAY.getPacketHandler(NetworkSide.CLIENT, packetId); + mcPacket.read(packetBuf); return mcPacket; } catch (Exception e) { Utils.throwIfInstanceOf(e, IOException.class); diff --git a/src/main/java/com/replaymod/replay/ReplayHandler.java b/src/main/java/com/replaymod/replay/ReplayHandler.java index 70262ca6..47753a3e 100755 --- a/src/main/java/com/replaymod/replay/ReplayHandler.java +++ b/src/main/java/com/replaymod/replay/ReplayHandler.java @@ -24,22 +24,22 @@ import de.johni0702.minecraft.gui.element.advanced.GuiProgressBar; import de.johni0702.minecraft.gui.popup.AbstractGuiPopup; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.embedded.EmbeddedChannel; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiScreen; -import net.minecraft.client.network.NetHandlerLoginClient; -import net.minecraft.client.resources.I18n; -import net.minecraft.crash.CrashReport; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.Screen; +import net.minecraft.client.network.ClientLoginNetworkHandler; +import net.minecraft.client.resource.language.I18n; +import net.minecraft.util.crash.CrashReport; import net.minecraft.entity.Entity; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.network.NetworkManager; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.network.ClientConnection; import java.io.IOException; import java.util.*; //#if MC>=11300 import com.replaymod.replay.mixin.EntityLivingBaseAccessor; -import net.minecraft.client.MainWindow; -import net.minecraft.entity.EntityLivingBase; +import net.minecraft.client.util.Window; +import net.minecraft.entity.LivingEntity; //#else //$$ import com.replaymod.replay.mixin.EntityOtherPlayerMPAccessor; //$$ import net.minecraft.client.entity.EntityOtherPlayerMP; @@ -59,11 +59,11 @@ import net.minecraft.entity.EntityLivingBase; //#endif //#if MC>=10800 -import net.minecraft.network.EnumPacketDirection; +import net.minecraft.network.NetworkSide; //#if MC>=11400 //#else //#if MC>=11300 -import net.minecraftforge.fml.network.NetworkHooks; +//$$ import net.minecraftforge.fml.network.NetworkHooks; //#else //$$ import com.mojang.authlib.GameProfile; //$$ import net.minecraft.client.network.NetHandlerPlayClient; @@ -86,13 +86,13 @@ import javax.annotation.Nullable; import static com.replaymod.core.versions.MCVer.*; import static com.replaymod.replay.ReplayModReplay.LOGGER; -import static net.minecraft.client.renderer.GlStateManager.*; +import static com.mojang.blaze3d.platform.GlStateManager.*; import static org.lwjgl.opengl.GL11.GL_COLOR_BUFFER_BIT; import static org.lwjgl.opengl.GL11.GL_DEPTH_BUFFER_BIT; public class ReplayHandler { - private static Minecraft mc = getMinecraft(); + private static MinecraftClient mc = getMinecraft(); /** * The file currently being played. @@ -164,11 +164,11 @@ public class ReplayHandler { // Force re-creation of camera entity by unloading the previous world ReplayMod.instance.runLater(() -> { //#if MC>=11300 - mc.mouseHelper.ungrabMouse(); + mc.mouse.unlockCursor(); //#else //$$ mc.setIngameNotInFocus(); //#endif - mc.loadWorld(null); + mc.joinWorld(null); }); restrictions = new Restrictions(); @@ -202,8 +202,8 @@ public class ReplayHandler { } if (mc.world != null) { - mc.world.sendQuittingDisconnectingPacket(); - mc.loadWorld(null); + mc.world.disconnect(); + mc.joinWorld(null); } TimerAccessor timer = (TimerAccessor) ((MinecraftAccessor) mc).getTimer(); @@ -216,20 +216,20 @@ public class ReplayHandler { ReplayModReplay.instance.replayHandler = null; - mc.displayGuiScreen(null); + mc.openScreen(null); ReplayClosedCallback.EVENT.invoker().replayClosed(this); } private void setup() { //#if MC>=11100 - mc.ingameGUI.getChatGUI().clearChatMessages(false); + mc.inGameHud.getChatHud().clear(false); //#else //$$ mc.ingameGUI.getChatGUI().clearChatMessages(); //#endif //#if MC>=10800 - NetworkManager networkManager = new NetworkManager(EnumPacketDirection.CLIENTBOUND) { + ClientConnection networkManager = new ClientConnection(NetworkSide.CLIENT) { @Override public void exceptionCaught(ChannelHandlerContext ctx, Throwable t) { t.printStackTrace(); @@ -258,7 +258,7 @@ public class ReplayHandler { //$$ mc.displayGuiScreen(new GuiOpeningReplay(networkManager)); //#endif - networkManager.setNetHandler(new NetHandlerLoginClient( + networkManager.setPacketListener(new ClientLoginNetworkHandler( networkManager, mc, null @@ -283,7 +283,7 @@ public class ReplayHandler { channel.pipeline().fireChannelActive(); //#if MC>=11300 && MC<11400 - NetworkHooks.registerClientLoginChannel(networkManager); + //$$ NetworkHooks.registerClientLoginChannel(networkManager); //#endif } @@ -322,7 +322,7 @@ public class ReplayHandler { @Override public void onFailure(@Nonnull Throwable t) { String message = "Failed to initialize quick mode. It will not be available."; - Utils.error(LOGGER, overlay, CrashReport.makeCrashReport(t, message), popup::close); + Utils.error(LOGGER, overlay, CrashReport.create(t, message), popup::close); } }); } @@ -372,7 +372,7 @@ public class ReplayHandler { CameraEntity cam = getCameraEntity(); if (cam != null) { - targetCameraPosition = new Location(cam.posX, cam.posY, cam.posZ, cam.rotationYaw, cam.rotationPitch); + targetCameraPosition = new Location(cam.x, cam.y, cam.z, cam.yaw, cam.pitch); } else { targetCameraPosition = null; } @@ -445,8 +445,8 @@ public class ReplayHandler { if (e == null || e == cameraEntity) { spectating = null; e = cameraEntity; - } else if (e instanceof EntityPlayer) { - spectating = e.getUniqueID(); + } else if (e instanceof PlayerEntity) { + spectating = e.getUuid(); } if (e == cameraEntity) { @@ -514,16 +514,16 @@ public class ReplayHandler { // Update all entity positions (especially prev/lastTick values) for (Entity entity : loadedEntityList(mc.world)) { skipTeleportInterpolation(entity); - entity.lastTickPosX = entity.prevPosX = entity.posX; - entity.lastTickPosY = entity.prevPosY = entity.posY; - entity.lastTickPosZ = entity.prevPosZ = entity.posZ; - entity.prevRotationYaw = entity.rotationYaw; - entity.prevRotationPitch = entity.rotationPitch; + entity.prevRenderX = entity.prevX = entity.x; + entity.prevRenderY = entity.prevY = entity.y; + entity.prevRenderZ = entity.prevZ = entity.z; + entity.prevYaw = entity.yaw; + entity.prevPitch = entity.pitch; } // Run previous tick //#if MC>=11300 - mc.runTick(); + mc.tick(); //#else //$$ try { //$$ mc.runTick(); @@ -549,14 +549,14 @@ public class ReplayHandler { } if (targetTime < replaySender.currentTimeStamp()) { - mc.displayGuiScreen(null); + mc.openScreen(null); } if (retainCameraPosition) { CameraEntity cam = getCameraEntity(); if (cam != null) { - targetCameraPosition = new Location(cam.posX, cam.posY, cam.posZ, - cam.rotationYaw, cam.rotationPitch); + targetCameraPosition = new Location(cam.x, cam.y, cam.z, + cam.yaw, cam.pitch); } else { targetCameraPosition = null; } @@ -568,9 +568,9 @@ public class ReplayHandler { replaySender.jumpToTime(targetTime); } else { // We either have to restart the replay or send a significant amount of packets // Render our please-wait-screen - GuiScreen guiScreen = new GuiScreen( + Screen guiScreen = new Screen( //#if MC>=11400 - //$$ null + null //#endif ) { @Override @@ -579,8 +579,8 @@ public class ReplayHandler { //#else //$$ public void drawScreen(int mouseX, int mouseY, float partialTicks) { //#endif - drawBackground(0); - drawCenteredString(mc.fontRenderer, I18n.format("replaymod.gui.pleasewait"), + renderDirtBackground(0); + drawCenteredString(minecraft.textRenderer, I18n.translate("replaymod.gui.pleasewait"), width / 2, height / 2, 0xffffffff); } }; @@ -592,46 +592,46 @@ public class ReplayHandler { pushMatrix(); clear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT //#if MC>=11400 - //$$ , true + , true //#endif ); - enableTexture2D(); - mc.getFramebuffer().bindFramebuffer(true); + enableTexture(); + mc.getFramebuffer().beginWrite(true); //#if MC>=11400 - //$$ mc.window.method_4493(true); + mc.window.method_4493(true); //#else //#if MC>=11300 - mc.mainWindow.setupOverlayRendering(); + //$$ mc.mainWindow.setupOverlayRendering(); //#else //$$ mc.entityRenderer.setupOverlayRendering(); //#endif //#endif //#if MC>=11300 - MainWindow + Window //#else //$$ ScaledResolution //#endif resolution = newScaledResolution(mc); - guiScreen.setWorldAndResolution(mc, resolution.getScaledWidth(), resolution.getScaledHeight()); + guiScreen.init(mc, resolution.getScaledWidth(), resolution.getScaledHeight()); //#if MC>=11300 guiScreen.render(0, 0, 0); //#else //$$ guiScreen.drawScreen(0, 0, 0); //#endif - mc.getFramebuffer().unbindFramebuffer(); + mc.getFramebuffer().endWrite(); popMatrix(); pushMatrix(); //#if MC>=11300 - mc.getFramebuffer().framebufferRender(mc.mainWindow.getFramebufferWidth(), mc.mainWindow.getFramebufferHeight()); + mc.getFramebuffer().draw(mc.window.getFramebufferWidth(), mc.window.getFramebufferHeight()); //#else //$$ mc.getFramebuffer().framebufferRender(mc.displayWidth, mc.displayHeight); //#endif popMatrix(); //#if MC>=11300 - mc.mainWindow.update(true); + mc.window.setFullscreen(true); //#else //$$ Display.update(); //#endif @@ -641,7 +641,7 @@ public class ReplayHandler { replaySender.setAsyncMode(true); replaySender.setReplaySpeed(0); - mc.getConnection().getNetworkManager() + mc.getNetworkHandler().getClientConnection() //#if MC>=11300 .tick(); //#else @@ -649,11 +649,11 @@ public class ReplayHandler { //#endif for (Entity entity : loadedEntityList(mc.world)) { skipTeleportInterpolation(entity); - entity.lastTickPosX = entity.prevPosX = entity.posX; - entity.lastTickPosY = entity.prevPosY = entity.posY; - entity.lastTickPosZ = entity.prevPosZ = entity.posZ; - entity.prevRotationYaw = entity.rotationYaw; - entity.prevRotationPitch = entity.rotationPitch; + entity.prevRenderX = entity.prevX = entity.x; + entity.prevRenderY = entity.prevY = entity.y; + entity.prevRenderZ = entity.prevZ = entity.z; + entity.prevYaw = entity.yaw; + entity.prevPitch = entity.pitch; } //#if MC>=10800 && MC<11300 //$$ try { @@ -662,7 +662,7 @@ public class ReplayHandler { //$$ e.printStackTrace(); // This should never be thrown but whatever //$$ } //#else - mc.runTick(); + mc.tick(); //#endif //finally, updating the camera's position (which is not done by the sync jumping) @@ -676,12 +676,12 @@ public class ReplayHandler { private void skipTeleportInterpolation(Entity entity) { //#if MC>=11300 - if (entity instanceof EntityLivingBase && !(entity instanceof CameraEntity)) { - EntityLivingBase e = (EntityLivingBase) entity; + if (entity instanceof LivingEntity && !(entity instanceof CameraEntity)) { + LivingEntity e = (LivingEntity) entity; EntityLivingBaseAccessor ea = (EntityLivingBaseAccessor) e; e.setPosition(ea.getInterpTargetX(), ea.getInterpTargetY(), ea.getInterpTargetZ()); - e.rotationYaw = (float) ea.getInterpTargetYaw(); - e.rotationPitch = (float) ea.getInterpTargetPitch(); + e.yaw = (float) ea.getInterpTargetYaw(); + e.pitch = (float) ea.getInterpTargetPitch(); } //#else //$$ if (entity instanceof EntityOtherPlayerMP) { diff --git a/src/main/java/com/replaymod/replay/ReplayModReplay.java b/src/main/java/com/replaymod/replay/ReplayModReplay.java index 28df96c6..bc0d297c 100644 --- a/src/main/java/com/replaymod/replay/ReplayModReplay.java +++ b/src/main/java/com/replaymod/replay/ReplayModReplay.java @@ -22,7 +22,7 @@ import com.replaymod.replaystudio.data.Marker; import com.replaymod.replaystudio.replay.ReplayFile; import com.replaymod.replaystudio.replay.ZipReplayFile; import com.replaymod.replaystudio.studio.ReplayStudio; -import net.minecraft.client.Minecraft; +import net.minecraft.client.MinecraftClient; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -64,11 +64,11 @@ public class ReplayModReplay implements Module { if (camera != null) { Marker marker = new Marker(); marker.setTime(replayHandler.getReplaySender().currentTimeStamp()); - marker.setX(camera.posX); - marker.setY(camera.posY); - marker.setZ(camera.posZ); - marker.setYaw(camera.rotationYaw); - marker.setPitch(camera.rotationPitch); + marker.setX(camera.x); + marker.setY(camera.y); + marker.setZ(camera.z); + marker.setYaw(camera.yaw); + marker.setPitch(camera.pitch); marker.setRoll(camera.roll); replayHandler.getOverlay().timeline.addMarker(marker); } @@ -80,7 +80,7 @@ public class ReplayModReplay implements Module { @Override public void run() { if (replayHandler != null) { - Minecraft mc = MCVer.getMinecraft(); + MinecraftClient mc = MCVer.getMinecraft(); ListenableFuture future = NoGuiScreenshot.take(mc, 1280, 720); Futures.addCallback(future, new FutureCallback() { @Override diff --git a/src/main/java/com/replaymod/replay/ReplaySender.java b/src/main/java/com/replaymod/replay/ReplaySender.java index e1b474fe..ab46bd89 100644 --- a/src/main/java/com/replaymod/replay/ReplaySender.java +++ b/src/main/java/com/replaymod/replay/ReplaySender.java @@ -2,7 +2,7 @@ package com.replaymod.replay; import com.replaymod.core.mixin.MinecraftAccessor; import com.replaymod.core.mixin.TimerAccessor; -import net.minecraft.client.Minecraft; +import net.minecraft.client.MinecraftClient; import static com.replaymod.core.versions.MCVer.getMinecraft; @@ -14,7 +14,7 @@ public interface ReplaySender { * @return {@code true} if it is paused, {@code false} otherwise */ public default boolean paused() { - Minecraft mc = getMinecraft(); + MinecraftClient mc = getMinecraft(); TimerAccessor timer = (TimerAccessor) ((MinecraftAccessor) mc).getTimer(); //#if MC>=11200 return timer.getTickLength() == Float.POSITIVE_INFINITY; diff --git a/src/main/java/com/replaymod/replay/camera/CameraEntity.java b/src/main/java/com/replaymod/replay/camera/CameraEntity.java index 7741435c..a8f49420 100755 --- a/src/main/java/com/replaymod/replay/camera/CameraEntity.java +++ b/src/main/java/com/replaymod/replay/camera/CameraEntity.java @@ -11,45 +11,45 @@ import com.replaymod.replay.mixin.FirstPersonRendererAccessor; import com.replaymod.replaystudio.util.Location; import lombok.Getter; import lombok.Setter; -import net.minecraft.client.Minecraft; -import net.minecraft.client.entity.AbstractClientPlayer; -import net.minecraft.client.network.NetHandlerPlayClient; -import net.minecraft.client.settings.KeyBinding; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.network.AbstractClientPlayerEntity; +import net.minecraft.client.network.ClientPlayNetworkHandler; +import net.minecraft.client.options.KeyBinding; import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLiving; -import net.minecraft.entity.item.EntityItemFrame; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.entity.mob.MobEntity; +import net.minecraft.entity.decoration.ItemFrameEntity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.util.Identifier; +import net.minecraft.util.math.BoundingBox; //#if MC>=11400 -//$$ import com.replaymod.core.events.KeyBindingEventCallback; -//$$ import com.replaymod.core.events.PreRenderCallback; -//$$ import com.replaymod.core.events.PreRenderHandCallback; -//$$ import com.replaymod.replay.events.RenderSpectatorCrosshairCallback; -//$$ import de.johni0702.minecraft.gui.versions.callbacks.PreTickCallback; -//$$ import net.fabricmc.fabric.api.util.TriState; -//$$ import net.minecraft.client.world.ClientWorld; -//$$ import net.minecraft.fluid.Fluid; -//$$ import net.minecraft.tag.Tag; -//$$ import net.minecraft.util.hit.BlockHitResult; -//$$ import net.minecraft.util.hit.HitResult; +import com.replaymod.core.events.KeyBindingEventCallback; +import com.replaymod.core.events.PreRenderCallback; +import com.replaymod.core.events.PreRenderHandCallback; +import com.replaymod.replay.events.RenderSpectatorCrosshairCallback; +import de.johni0702.minecraft.gui.versions.callbacks.PreTickCallback; +import net.fabricmc.fabric.api.util.TriState; +import net.minecraft.client.world.ClientWorld; +import net.minecraft.fluid.Fluid; +import net.minecraft.tag.Tag; +import net.minecraft.util.hit.BlockHitResult; +import net.minecraft.util.hit.HitResult; //#else -import com.replaymod.core.versions.MCVer; -import com.replaymod.replay.events.ReplayChatMessageEvent; -import net.minecraft.util.math.RayTraceResult; -import net.minecraft.util.text.ITextComponent; -import net.minecraft.world.World; -import net.minecraftforge.client.event.EntityViewRenderEvent; -import net.minecraftforge.client.event.RenderGameOverlayEvent; -import net.minecraftforge.client.event.RenderHandEvent; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.eventbus.api.EventPriority; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.common.gameevent.TickEvent; - +//$$ import com.replaymod.core.versions.MCVer; +//$$ import com.replaymod.replay.events.ReplayChatMessageEvent; +//$$ import net.minecraft.util.math.RayTraceResult; +//$$ import net.minecraft.util.text.ITextComponent; +//$$ import net.minecraft.world.World; +//$$ import net.minecraftforge.client.event.EntityViewRenderEvent; +//$$ import net.minecraftforge.client.event.RenderGameOverlayEvent; +//$$ import net.minecraftforge.client.event.RenderHandEvent; +//$$ import net.minecraftforge.common.MinecraftForge; +//$$ import net.minecraftforge.eventbus.api.EventPriority; +//$$ import net.minecraftforge.eventbus.api.SubscribeEvent; +//$$ import net.minecraftforge.fml.common.gameevent.TickEvent; +//$$ //#if MC>=11300 -import net.minecraft.util.math.RayTraceFluidMode; +//$$ import net.minecraft.util.math.RayTraceFluidMode; //#else //$$ import net.minecraft.block.material.Material; //$$ import net.minecraft.entity.EntityLivingBase; @@ -57,22 +57,22 @@ import net.minecraft.util.math.RayTraceFluidMode; //#endif //#if MC>=10904 -import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.entity.EquipmentSlot; //#if MC>=11200 //#if MC>=11300 -import net.minecraft.client.util.RecipeBookClient; +import net.minecraft.client.recipe.book.ClientRecipeBook; //#else //$$ import net.minecraft.stats.RecipeBook; //#endif //#endif -import net.minecraft.stats.StatisticsManager; -import net.minecraft.util.EnumHand; +import net.minecraft.stat.StatHandler; +import net.minecraft.util.Hand; //#else //$$ import net.minecraft.stats.StatFileWriter; //#endif //#if MC>=10800 -import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.client.network.ClientPlayerEntity; //#else //$$ import net.minecraft.client.entity.EntityClientPlayerMP; //$$ import net.minecraft.util.Session; @@ -92,7 +92,7 @@ import static com.replaymod.core.versions.MCVer.*; @SuppressWarnings("EntityConstructor") public class CameraEntity //#if MC>=10800 - extends EntityPlayerSP + extends ClientPlayerEntity //#else //$$ extends EntityClientPlayerMP //#endif @@ -122,9 +122,9 @@ public class CameraEntity //#if MC>=11300 //#if MC>=11400 - //$$ public CameraEntity(MinecraftClient mcIn, ClientWorld worldIn, ClientPlayNetworkHandler netHandlerPlayClient, StatHandler statisticsManager, ClientRecipeBook recipeBookClient) { + public CameraEntity(MinecraftClient mcIn, ClientWorld worldIn, ClientPlayNetworkHandler netHandlerPlayClient, StatHandler statisticsManager, ClientRecipeBook recipeBookClient) { //#else - public CameraEntity(Minecraft mcIn, World worldIn, NetHandlerPlayClient netHandlerPlayClient, StatisticsManager statisticsManager, RecipeBookClient recipeBookClient) { + //$$ public CameraEntity(Minecraft mcIn, World worldIn, NetHandlerPlayClient netHandlerPlayClient, StatisticsManager statisticsManager, RecipeBookClient recipeBookClient) { //#endif super(mcIn, worldIn, netHandlerPlayClient, statisticsManager, recipeBookClient); //#else @@ -161,7 +161,7 @@ public class CameraEntity * @param z Delta in Z direction */ public void moveCamera(double x, double y, double z) { - setCameraPosition(this.posX + x, this.posY + y, this.posZ + z); + setCameraPosition(this.x + x, this.y + y, this.z + z); } /** @@ -171,9 +171,9 @@ public class CameraEntity * @param z Z coordinate */ public void setCameraPosition(double x, double y, double z) { - this.lastTickPosX = this.prevPosX = this.posX = x; - this.lastTickPosY = this.prevPosY = this.posY = y; - this.lastTickPosZ = this.prevPosZ = this.posZ = z; + this.prevRenderX = this.prevX = this.x = x; + this.prevRenderY = this.prevY = this.y = y; + this.prevRenderZ = this.prevZ = this.z = z; updateBoundingBox(); } @@ -184,8 +184,8 @@ public class CameraEntity * @param roll Roll in degrees */ public void setCameraRotation(float yaw, float pitch, float roll) { - this.prevRotationYaw = this.rotationYaw = yaw; - this.prevRotationPitch = this.rotationPitch = pitch; + this.prevYaw = this.yaw = yaw; + this.prevPitch = this.pitch = pitch; this.roll = roll; } @@ -209,38 +209,38 @@ public class CameraEntity //#else //$$ float yOffset = 1.62f; // Magic value (eye height) from EntityRenderer#orientCamera //#endif - this.prevPosX = to.prevPosX; - this.prevPosY = to.prevPosY + yOffset; - this.prevPosZ = to.prevPosZ; - this.prevRotationYaw = to.prevRotationYaw; - this.prevRotationPitch = to.prevRotationPitch; - this.posX = to.posX; - this.posY = to.posY + yOffset; - this.posZ = to.posZ; - this.rotationYaw = to.rotationYaw; - this.rotationPitch = to.rotationPitch; - this.lastTickPosX = to.lastTickPosX; - this.lastTickPosY = to.lastTickPosY + yOffset; - this.lastTickPosZ = to.lastTickPosZ; + this.prevX = to.prevX; + this.prevY = to.prevY + yOffset; + this.prevZ = to.prevZ; + this.prevYaw = to.prevYaw; + this.prevPitch = to.prevPitch; + this.x = to.x; + this.y = to.y + yOffset; + this.z = to.z; + this.yaw = to.yaw; + this.pitch = to.pitch; + this.prevRenderX = to.prevRenderX; + this.prevRenderY = to.prevRenderY + yOffset; + this.prevRenderZ = to.prevRenderZ; updateBoundingBox(); } private void updateBoundingBox() { //#if MC>=11400 - //$$ float width = getWidth(); - //$$ float height = getHeight(); + float width = getWidth(); + float height = getHeight(); //#endif //#if MC>=10800 //#if MC>=11300 - setBoundingBox(new AxisAlignedBB( + setBoundingBox(new BoundingBox( //#else //$$ setEntityBoundingBox(new AxisAlignedBB( //#endif //#else //$$ this.boundingBox.setBB(AxisAlignedBB.getBoundingBox( //#endif - this.posX - width / 2, this.posY, this.posZ - width / 2, - this.posX + width / 2, this.posY + height, this.posZ + width / 2)); + this.x - width / 2, this.y, this.z - width / 2, + this.x + width / 2, this.y + height, this.z + width / 2)); } @Override @@ -250,7 +250,7 @@ public class CameraEntity //$$ public void onUpdate() { //#endif //#if MC>=10800 - Entity view = getRenderViewEntity(this.mc); + Entity view = getRenderViewEntity(this.client); //#else //$$ EntityLivingBase view = getRenderViewEntity(this.mc); //#endif @@ -259,19 +259,19 @@ public class CameraEntity // This is important if the spectated player respawns as their // entity is recreated and we have to spectate a new entity UUID spectating = ReplayModReplay.instance.getReplayHandler().getSpectatedUUID(); - if (spectating != null && (view.getUniqueID() != spectating + if (spectating != null && (view.getUuid() != spectating || view.world != this.world) - || this.world.getEntityByID(view.getEntityId()) != view) { + || this.world.getEntityById(view.getEntityId()) != view) { if (spectating == null) { // Entity (non-player) died, stop spectating ReplayModReplay.instance.getReplayHandler().spectateEntity(this); return; } - view = this.world.getPlayerEntityByUUID(spectating); + view = this.world.getPlayerByUuid(spectating); if (view != null) { - setRenderViewEntity(this.mc, view); + setRenderViewEntity(this.client, view); } else { - setRenderViewEntity(this.mc, this); + setRenderViewEntity(this.client, this); return; } } @@ -284,25 +284,25 @@ public class CameraEntity } @Override - public void preparePlayerToSpawn() { + public void method_5823() { // Make sure our world is up-to-date in case of world changes - if (this.mc.world != null) { - this.world = this.mc.world; + if (this.client.world != null) { + this.world = this.client.world; } - super.preparePlayerToSpawn(); + super.method_5823(); } @Override public void setRotation(float yaw, float pitch) { - if (getRenderViewEntity(this.mc) == this) { + if (getRenderViewEntity(this.client) == this) { // Only update camera rotation when the camera is the view super.setRotation(yaw, pitch); } } @Override - public boolean isEntityInsideOpaqueBlock() { - return falseUnlessSpectating(Entity::isEntityInsideOpaqueBlock); // Make sure no suffocation overlay is rendered + public boolean isInsideWall() { + return falseUnlessSpectating(Entity::isInsideWall); // Make sure no suffocation overlay is rendered } //#if MC<11300 @@ -313,36 +313,36 @@ public class CameraEntity //#endif //#if MC>=11400 - //$$ @Override - //$$ public boolean isInFluid(Tag fluid, boolean loadedChunksOnly) { - //$$ return falseUnlessSpectating(entity -> entity.isInFluid(fluid, loadedChunksOnly)); - //$$ } + @Override + public boolean isInFluid(Tag fluid, boolean loadedChunksOnly) { + return falseUnlessSpectating(entity -> entity.isInFluid(fluid, loadedChunksOnly)); + } //#else //#if MC>=10800 - @Override - public boolean isInLava() { - return falseUnlessSpectating(Entity::isInLava); // Make sure no lava overlay is rendered - } + //$$ @Override + //$$ public boolean isInLava() { + //$$ return falseUnlessSpectating(Entity::isInLava); // Make sure no lava overlay is rendered + //$$ } //#else //$$ @Override //$$ public boolean handleLavaMovement() { //$$ return falseUnlessSpectating(Entity::handleLavaMovement); // Make sure no lava overlay is rendered //$$ } //#endif - - @Override - public boolean isInWater() { - return falseUnlessSpectating(Entity::isInWater); // Make sure no water overlay is rendered - } + //$$ + //$$ @Override + //$$ public boolean isInWater() { + //$$ return falseUnlessSpectating(Entity::isInWater); // Make sure no water overlay is rendered + //$$ } //#endif @Override - public boolean isBurning() { - return falseUnlessSpectating(Entity::isBurning); // Make sure no fire overlay is rendered + public boolean isOnFire() { + return falseUnlessSpectating(Entity::isOnFire); // Make sure no fire overlay is rendered } private boolean falseUnlessSpectating(Function property) { - Entity view = getRenderViewEntity(this.mc); + Entity view = getRenderViewEntity(this.client); if (view != null && view != this) { return property.apply(view); } @@ -350,19 +350,19 @@ public class CameraEntity } @Override - public boolean canBePushed() { + public boolean isPushable() { return false; // We are in full control of ourselves } //#if MC>=10800 @Override - protected void createRunningParticles() { + protected void spawnSprintingParticles() { // We do not produce any particles, we are a camera } //#endif @Override - public boolean canBeCollidedWith() { + public boolean collides() { return false; // We are a camera, we cannot collide } @@ -374,23 +374,23 @@ public class CameraEntity //#endif //#if MC>=11400 - //$$ @Override - //$$ public boolean shouldRenderFrom(double double_1, double double_2, double double_3) { - //$$ return false; // never render the camera otherwise it'd be visible e.g. in 3rd-person or with shaders - //$$ } - //#else @Override - public boolean shouldRenderInPass(int pass) { - // Never render the camera - // This is necessary to hide the player head in third person mode and to not - // cause any unwanted shadows when rendering with shaders. - return false; + public boolean shouldRenderFrom(double double_1, double double_2, double double_3) { + return false; // never render the camera otherwise it'd be visible e.g. in 3rd-person or with shaders } + //#else + //$$ @Override + //$$ public boolean shouldRenderInPass(int pass) { + //$$ // Never render the camera + //$$ // This is necessary to hide the player head in third person mode and to not + //$$ // cause any unwanted shadows when rendering with shaders. + //$$ return false; + //$$ } //#endif @Override public boolean isInvisible() { - Entity view = getRenderViewEntity(this.mc); + Entity view = getRenderViewEntity(this.client); if (view != this) { return view.isInvisible(); } @@ -398,99 +398,99 @@ public class CameraEntity } @Override - public ResourceLocation getLocationSkin() { - Entity view = getRenderViewEntity(this.mc); - if (view != this && view instanceof EntityPlayer) { - return Utils.getResourceLocationForPlayerUUID(view.getUniqueID()); + public Identifier getSkinTexture() { + Entity view = getRenderViewEntity(this.client); + if (view != this && view instanceof PlayerEntity) { + return Utils.getResourceLocationForPlayerUUID(view.getUuid()); } - return super.getLocationSkin(); + return super.getSkinTexture(); } //#if MC>=10800 @Override - public String getSkinType() { - Entity view = this.mc.getRenderViewEntity(); - if (view != this && view instanceof AbstractClientPlayer) { - return ((AbstractClientPlayer) view).getSkinType(); + public String getModel() { + Entity view = this.client.getCameraEntity(); + if (view != this && view instanceof AbstractClientPlayerEntity) { + return ((AbstractClientPlayerEntity) view).getModel(); } - return super.getSkinType(); + return super.getModel(); } //#endif @Override - public float getSwingProgress(float renderPartialTicks) { - Entity view = getRenderViewEntity(this.mc); - if (view != this && view instanceof EntityPlayer) { - return ((EntityPlayer) view).getSwingProgress(renderPartialTicks); + public float getHandSwingProgress(float renderPartialTicks) { + Entity view = getRenderViewEntity(this.client); + if (view != this && view instanceof PlayerEntity) { + return ((PlayerEntity) view).getHandSwingProgress(renderPartialTicks); } return 0; } //#if MC>=10904 @Override - public float getCooldownPeriod() { - Entity view = this.mc.getRenderViewEntity(); - if (view != this && view instanceof EntityPlayer) { - return ((EntityPlayer) view).getCooldownPeriod(); + public float method_7279() { + Entity view = this.client.getCameraEntity(); + if (view != this && view instanceof PlayerEntity) { + return ((PlayerEntity) view).method_7279(); } return 1; } @Override - public float getCooledAttackStrength(float adjustTicks) { - Entity view = this.mc.getRenderViewEntity(); - if (view != this && view instanceof EntityPlayer) { - return ((EntityPlayer) view).getCooledAttackStrength(adjustTicks); + public float method_7261(float adjustTicks) { + Entity view = this.client.getCameraEntity(); + if (view != this && view instanceof PlayerEntity) { + return ((PlayerEntity) view).method_7261(adjustTicks); } // Default to 1 as to not render the cooldown indicator (renders for < 1) return 1; } @Override - public EnumHand getActiveHand() { - Entity view = this.mc.getRenderViewEntity(); - if (view != this && view instanceof EntityPlayer) { - return ((EntityPlayer) view).getActiveHand(); + public Hand getActiveHand() { + Entity view = this.client.getCameraEntity(); + if (view != this && view instanceof PlayerEntity) { + return ((PlayerEntity) view).getActiveHand(); } return super.getActiveHand(); } @Override - public boolean isHandActive() { - Entity view = this.mc.getRenderViewEntity(); - if (view != this && view instanceof EntityPlayer) { - return ((EntityPlayer) view).isHandActive(); + public boolean isUsingItem() { + Entity view = this.client.getCameraEntity(); + if (view != this && view instanceof PlayerEntity) { + return ((PlayerEntity) view).isUsingItem(); } - return super.isHandActive(); + return super.isUsingItem(); } //#if MC>=11400 - //$$ @Override - //$$ public HitResult rayTrace(double maxDistance, float tickDelta, boolean fluids) { - //$$ HitResult result = super.rayTrace(maxDistance, tickDelta, fluids); - //$$ - //$$ // Make sure we can never look at blocks (-> no outline) - //$$ if (result instanceof BlockHitResult) { - //$$ BlockHitResult blockResult = (BlockHitResult) result; - //$$ result = BlockHitResult.createMissed(result.getPos(), blockResult.getSide(), blockResult.getBlockPos()); - //$$ } - //$$ - //$$ return result; - //$$ } - //#else - //#if MC>=11300 @Override - public RayTraceResult rayTrace(double blockReachDistance, float partialTicks, RayTraceFluidMode p_174822_4_) { - RayTraceResult pos = super.rayTrace(blockReachDistance, partialTicks, p_174822_4_); + public HitResult rayTrace(double maxDistance, float tickDelta, boolean fluids) { + HitResult result = super.rayTrace(maxDistance, tickDelta, fluids); // Make sure we can never look at blocks (-> no outline) - if(pos != null && pos.type == RayTraceResult.Type.BLOCK) { - pos.type = RayTraceResult.Type.MISS; + if (result instanceof BlockHitResult) { + BlockHitResult blockResult = (BlockHitResult) result; + result = BlockHitResult.createMissed(result.getPos(), blockResult.getSide(), blockResult.getBlockPos()); } - return pos; + return result; } //#else + //#if MC>=11300 + //$$ @Override + //$$ public RayTraceResult rayTrace(double blockReachDistance, float partialTicks, RayTraceFluidMode p_174822_4_) { + //$$ RayTraceResult pos = super.rayTrace(blockReachDistance, partialTicks, p_174822_4_); + //$$ + //$$ // Make sure we can never look at blocks (-> no outline) + //$$ if(pos != null && pos.type == RayTraceResult.Type.BLOCK) { + //$$ pos.type = RayTraceResult.Type.MISS; + //$$ } + //$$ + //$$ return pos; + //$$ } + //#else //$$ @Override //$$ public RayTraceResult rayTrace(double p_174822_1_, float p_174822_3_) { //$$ RayTraceResult pos = super.rayTrace(p_174822_1_, 1f); @@ -546,40 +546,40 @@ public class CameraEntity handleInputEvents(); Map keyBindings = ReplayMod.instance.getKeyBindingRegistry().getKeyBindings(); - if (keyBindings.get("replaymod.input.rollclockwise").isKeyDown()) { + if (keyBindings.get("replaymod.input.rollclockwise").isPressed()) { roll += Utils.isCtrlDown() ? 0.2 : 1; } - if (keyBindings.get("replaymod.input.rollcounterclockwise").isKeyDown()) { + if (keyBindings.get("replaymod.input.rollcounterclockwise").isPressed()) { roll -= Utils.isCtrlDown() ? 0.2 : 1; } } private void handleInputEvents() { - if (this.mc.gameSettings.keyBindAttack.isPressed() || this.mc.gameSettings.keyBindUseItem.isPressed()) { - if (canSpectate(this.mc.pointedEntity)) { + if (this.client.options.keyAttack.wasPressed() || this.client.options.keyUse.wasPressed()) { + if (canSpectate(this.client.targetedEntity)) { ReplayModReplay.instance.getReplayHandler().spectateEntity( //#if MC<=10710 //$$ (EntityLivingBase) //#endif - this.mc.pointedEntity); + this.client.targetedEntity); // Make sure we don't exit right away //noinspection StatementWithEmptyBody - while (this.mc.gameSettings.keyBindSneak.isPressed()); + while (this.client.options.keySneak.wasPressed()); } } } private void updateArmYawAndPitch() { - this.prevRenderArmYaw = this.renderArmYaw; - this.prevRenderArmPitch = this.renderArmPitch; - this.renderArmPitch = this.renderArmPitch + (this.rotationPitch - this.renderArmPitch) * 0.5f; - this.renderArmYaw = this.renderArmYaw + (this.rotationYaw - this.renderArmYaw) * 0.5f; + this.lastRenderYaw = this.renderYaw; + this.lastRenderPitch = this.renderPitch; + this.renderPitch = this.renderPitch + (this.pitch - this.renderPitch) * 0.5f; + this.renderYaw = this.renderYaw + (this.yaw - this.renderYaw) * 0.5f; } public boolean canSpectate(Entity e) { return e != null && !e.isInvisible() //#if MC>=10800 - && (e instanceof EntityPlayer || e instanceof EntityLiving || e instanceof EntityItemFrame); + && (e instanceof PlayerEntity || e instanceof MobEntity || e instanceof ItemFrameEntity); //#else //$$ && e instanceof EntityPlayer; // cannot be more generic since 1.7.10 has no concept of eye height //#endif @@ -587,11 +587,11 @@ public class CameraEntity //#if MC<11400 //#if MC>=11102 - @Override - public void sendMessage(ITextComponent message) { - if (MinecraftForge.EVENT_BUS.post(new ReplayChatMessageEvent(this))) return; - super.sendMessage(message); - } + //$$ @Override + //$$ public void sendMessage(ITextComponent message) { + //$$ if (MinecraftForge.EVENT_BUS.post(new ReplayChatMessageEvent(this))) return; + //$$ super.sendMessage(message); + //$$ } //#else //$$ @Override //$$ public void addChatMessage(ITextComponent message) { @@ -607,53 +607,53 @@ public class CameraEntity //$$ public // All event handlers need to be public in 1.7.10 //#endif class EventHandler extends EventRegistrations { - private final Minecraft mc = getMinecraft(); + private final MinecraftClient mc = getMinecraft(); private EventHandler() {} //#if MC>=11400 - //$$ { on(PreTickCallback.EVENT, this::onPreClientTick); } - //$$ private void onPreClientTick() { + { on(PreTickCallback.EVENT, this::onPreClientTick); } + private void onPreClientTick() { //#else - @SubscribeEvent - public void onPreClientTick(TickEvent.ClientTickEvent event) { - if (event.phase != TickEvent.Phase.START) return; + //$$ @SubscribeEvent + //$$ public void onPreClientTick(TickEvent.ClientTickEvent event) { + //$$ if (event.phase != TickEvent.Phase.START) return; //#endif updateArmYawAndPitch(); } //#if MC>=11400 - //$$ { on(PreRenderCallback.EVENT, this::onRenderUpdate); } - //$$ private void onRenderUpdate() { + { on(PreRenderCallback.EVENT, this::onRenderUpdate); } + private void onRenderUpdate() { //#else - @SubscribeEvent - public void onRenderUpdate(TickEvent.RenderTickEvent event) { - if (event.phase != TickEvent.Phase.START) return; + //$$ @SubscribeEvent + //$$ public void onRenderUpdate(TickEvent.RenderTickEvent event) { + //$$ if (event.phase != TickEvent.Phase.START) return; //#endif update(); } //#if MC>=11400 - //$$ { on(KeyBindingEventCallback.EVENT, CameraEntity.this::handleInputEvents); } + { on(KeyBindingEventCallback.EVENT, CameraEntity.this::handleInputEvents); } //#endif //#if MC>=11400 - //$$ { on(RenderSpectatorCrosshairCallback.EVENT, this::shouldRenderSpectatorCrosshair); } - //$$ private TriState shouldRenderSpectatorCrosshair() { - //$$ return TriState.of(canSpectate(mc.targetedEntity)); - //$$ } - //#else - @SubscribeEvent - public void preCrosshairRender(RenderGameOverlayEvent.Pre event) { - // The crosshair should only render if targeted entity can actually be spectated - if (MCVer.getType(event) == RenderGameOverlayEvent.ElementType.CROSSHAIRS) { - event.setCanceled(!canSpectate(mc.pointedEntity)); - } - // Hotbar should never be rendered - if (MCVer.getType(event) == RenderGameOverlayEvent.ElementType.HOTBAR) { - event.setCanceled(true); - } + { on(RenderSpectatorCrosshairCallback.EVENT, this::shouldRenderSpectatorCrosshair); } + private TriState shouldRenderSpectatorCrosshair() { + return TriState.of(canSpectate(mc.targetedEntity)); } + //#else + //$$ @SubscribeEvent + //$$ public void preCrosshairRender(RenderGameOverlayEvent.Pre event) { + //$$ // The crosshair should only render if targeted entity can actually be spectated + //$$ if (MCVer.getType(event) == RenderGameOverlayEvent.ElementType.CROSSHAIRS) { + //$$ event.setCanceled(!canSpectate(mc.pointedEntity)); + //$$ } + //$$ // Hotbar should never be rendered + //$$ if (MCVer.getType(event) == RenderGameOverlayEvent.ElementType.HOTBAR) { + //$$ event.setCanceled(true); + //$$ } + //$$ } //#endif { on(SettingsChangedCallback.EVENT, this::onSettingsChanged); } @@ -668,47 +668,47 @@ public class CameraEntity } //#if MC>=11400 - //$$ { on(PreRenderHandCallback.EVENT, this::onRenderHand); } - //$$ private boolean onRenderHand() { - //$$ // Unless we are spectating another player, don't render our hand - //$$ if (getRenderViewEntity(mc) == CameraEntity.this || !(getRenderViewEntity(mc) instanceof PlayerEntity)) { - //$$ return true; // cancel hand rendering - //$$ } else { - //$$ onRenderHandMonitor(); - //$$ return false; - //$$ } - //$$ } - //#else - @SubscribeEvent - public void onRenderHand(RenderHandEvent event) { + { on(PreRenderHandCallback.EVENT, this::onRenderHand); } + private boolean onRenderHand() { // Unless we are spectating another player, don't render our hand - if (getRenderViewEntity(mc) == CameraEntity.this || !(getRenderViewEntity(mc) instanceof EntityPlayer)) { - event.setCanceled(true); + if (getRenderViewEntity(mc) == CameraEntity.this || !(getRenderViewEntity(mc) instanceof PlayerEntity)) { + return true; // cancel hand rendering + } else { + onRenderHandMonitor(); + return false; } } + //#else + //$$ @SubscribeEvent + //$$ public void onRenderHand(RenderHandEvent event) { + //$$ // Unless we are spectating another player, don't render our hand + //$$ if (getRenderViewEntity(mc) == CameraEntity.this || !(getRenderViewEntity(mc) instanceof EntityPlayer)) { + //$$ event.setCanceled(true); + //$$ } + //$$ } //#endif //#if MC>=11400 - //$$ private void onRenderHandMonitor() { + private void onRenderHandMonitor() { //#else - @SubscribeEvent(priority = EventPriority.LOWEST) - public void onRenderHandMonitor(RenderHandEvent event) { + //$$ @SubscribeEvent(priority = EventPriority.LOWEST) + //$$ public void onRenderHandMonitor(RenderHandEvent event) { //#endif Entity view = getRenderViewEntity(mc); - if (view instanceof EntityPlayer) { - EntityPlayer player = (EntityPlayer) view; + if (view instanceof PlayerEntity) { + PlayerEntity player = (PlayerEntity) view; // When the spectated player has changed, force equip their items to prevent the equip animation if (lastHandRendered != player) { lastHandRendered = player; - FirstPersonRendererAccessor acc = (FirstPersonRendererAccessor) mc.entityRenderer.itemRenderer; + FirstPersonRendererAccessor acc = (FirstPersonRendererAccessor) mc.gameRenderer.firstPersonRenderer; //#if MC>=10904 acc.setPrevEquippedProgressMainHand(1); acc.setPrevEquippedProgressOffHand(1); acc.setEquippedProgressMainHand(1); acc.setEquippedProgressOffHand(1); - acc.setItemStackMainHand(player.getItemStackFromSlot(EntityEquipmentSlot.MAINHAND)); - acc.setItemStackOffHand(player.getItemStackFromSlot(EntityEquipmentSlot.OFFHAND)); + acc.setItemStackMainHand(player.getEquippedStack(EquipmentSlot.HAND_MAIN)); + acc.setItemStackOffHand(player.getEquippedStack(EquipmentSlot.HAND_OFF)); //#else //$$ acc.setPrevEquippedProgress(1); //$$ acc.setEquippedProgress(1); @@ -717,75 +717,75 @@ public class CameraEntity //#endif - mc.player.renderArmYaw = mc.player.prevRenderArmYaw = player.rotationYaw; - mc.player.renderArmPitch = mc.player.prevRenderArmPitch = player.rotationPitch; + mc.player.renderYaw = mc.player.lastRenderYaw = player.yaw; + mc.player.renderPitch = mc.player.lastRenderPitch = player.pitch; } } } //#if MC>=11400 - //$$ // Moved to MixinCamera + // Moved to MixinCamera //#else //#if MC>=10800 - @SubscribeEvent - public void onEntityViewRenderEvent(EntityViewRenderEvent.CameraSetup event) { - if (mc.getRenderViewEntity() == CameraEntity.this) { + //$$ @SubscribeEvent + //$$ public void onEntityViewRenderEvent(EntityViewRenderEvent.CameraSetup event) { + //$$ if (mc.getRenderViewEntity() == CameraEntity.this) { //#if MC>=10904 - event.setRoll(roll); + //$$ event.setRoll(roll); //#else //$$ event.roll = roll; //#endif - } - } + //$$ } + //$$ } //#endif //#endif private boolean heldItemTooltipsWasTrue; //#if MC>=11400 - //$$ // FIXME fabric + // FIXME fabric //#else - @SubscribeEvent - public void preRenderGameOverlay(RenderGameOverlayEvent.Pre event) { - switch (MCVer.getType(event)) { - case ALL: - heldItemTooltipsWasTrue = mc.gameSettings.heldItemTooltips; - mc.gameSettings.heldItemTooltips = false; - break; - case ARMOR: - case HEALTH: - case FOOD: - case AIR: - case HOTBAR: - case EXPERIENCE: - case HEALTHMOUNT: - case JUMPBAR: + //$$ @SubscribeEvent + //$$ public void preRenderGameOverlay(RenderGameOverlayEvent.Pre event) { + //$$ switch (MCVer.getType(event)) { + //$$ case ALL: + //$$ heldItemTooltipsWasTrue = mc.gameSettings.heldItemTooltips; + //$$ mc.gameSettings.heldItemTooltips = false; + //$$ break; + //$$ case ARMOR: + //$$ case HEALTH: + //$$ case FOOD: + //$$ case AIR: + //$$ case HOTBAR: + //$$ case EXPERIENCE: + //$$ case HEALTHMOUNT: + //$$ case JUMPBAR: //#if MC>=10904 - case POTION_ICONS: + //$$ case POTION_ICONS: //#endif - event.setCanceled(true); - break; - case HELMET: - case PORTAL: - case CROSSHAIRS: - case BOSSHEALTH: + //$$ event.setCanceled(true); + //$$ break; + //$$ case HELMET: + //$$ case PORTAL: + //$$ case CROSSHAIRS: + //$$ case BOSSHEALTH: //#if MC>=10904 - case BOSSINFO: - case SUBTITLES: + //$$ case BOSSINFO: + //$$ case SUBTITLES: //#endif - case TEXT: - case CHAT: - case PLAYER_LIST: - case DEBUG: - break; - } - } - - @SubscribeEvent - public void postRenderGameOverlay(RenderGameOverlayEvent.Post event) { - if (MCVer.getType(event) != RenderGameOverlayEvent.ElementType.ALL) return; - mc.gameSettings.heldItemTooltips = heldItemTooltipsWasTrue; - } + //$$ case TEXT: + //$$ case CHAT: + //$$ case PLAYER_LIST: + //$$ case DEBUG: + //$$ break; + //$$ } + //$$ } + //$$ + //$$ @SubscribeEvent + //$$ public void postRenderGameOverlay(RenderGameOverlayEvent.Post event) { + //$$ if (MCVer.getType(event) != RenderGameOverlayEvent.ElementType.ALL) return; + //$$ mc.gameSettings.heldItemTooltips = heldItemTooltipsWasTrue; + //$$ } //#endif } } diff --git a/src/main/java/com/replaymod/replay/camera/ClassicCameraController.java b/src/main/java/com/replaymod/replay/camera/ClassicCameraController.java index 80736230..b6e8d55f 100644 --- a/src/main/java/com/replaymod/replay/camera/ClassicCameraController.java +++ b/src/main/java/com/replaymod/replay/camera/ClassicCameraController.java @@ -1,7 +1,7 @@ package com.replaymod.replay.camera; import de.johni0702.minecraft.gui.utils.lwjgl.vector.Vector3f; -import net.minecraft.client.settings.KeyBinding; +import net.minecraft.client.options.KeyBinding; import static com.replaymod.core.versions.MCVer.*; @@ -32,34 +32,34 @@ public class ClassicCameraController implements CameraController { public void update(float partialTicksPassed) { boolean forward = false, backward = false, left = false, right = false, up = false, down = false; speedup = false; - for(KeyBinding kb : getMinecraft().gameSettings.keyBindings) { - if(!kb.isKeyDown()) continue; - if(kb.getKeyDescription().equals("key.forward")) { + for(KeyBinding kb : getMinecraft().options.keysAll) { + if(!kb.isPressed()) continue; + if(kb.getId().equals("key.forward")) { forward = true; speedup = true; } - if(kb.getKeyDescription().equals("key.back")) { + if(kb.getId().equals("key.back")) { backward = true; speedup = true; } - if(kb.getKeyDescription().equals("key.jump")) { + if(kb.getId().equals("key.jump")) { up = true; speedup = true; } - if(kb.getKeyDescription().equals("key.left")) { + if(kb.getId().equals("key.left")) { left = true; speedup = true; } - if(kb.getKeyDescription().equals("key.right")) { + if(kb.getId().equals("key.right")) { right = true; speedup = true; } - if(kb.getKeyDescription().equals("key.sneak")) { + if(kb.getId().equals("key.sneak")) { down = true; speedup = true; } @@ -135,7 +135,7 @@ public class ClassicCameraController implements CameraController { } private void setMovement(MoveDirection dir) { - float rotationPitch = camera.rotationPitch, rotationYaw = camera.rotationYaw; + float rotationPitch = camera.pitch, rotationYaw = camera.yaw; switch(dir) { case BACKWARD: direction = this.getVectorForRotation(-rotationPitch, rotationYaw - 180); diff --git a/src/main/java/com/replaymod/replay/camera/SpectatorCameraController.java b/src/main/java/com/replaymod/replay/camera/SpectatorCameraController.java index 609d6ed7..5183a2bf 100644 --- a/src/main/java/com/replaymod/replay/camera/SpectatorCameraController.java +++ b/src/main/java/com/replaymod/replay/camera/SpectatorCameraController.java @@ -3,13 +3,13 @@ package com.replaymod.replay.camera; import com.replaymod.replay.ReplayModReplay; import com.replaymod.replay.mixin.EntityPlayerAccessor; import lombok.RequiredArgsConstructor; -import net.minecraft.client.Minecraft; -import net.minecraft.client.settings.KeyBinding; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.options.KeyBinding; import net.minecraft.entity.Entity; -import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.PlayerEntity; //#if MC>=11400 -//$$ import net.minecraft.entity.EquipmentSlot; +import net.minecraft.entity.EquipmentSlot; //#endif //#if MC>=11300 @@ -27,17 +27,17 @@ public class SpectatorCameraController implements CameraController { @Override public void update(float partialTicksPassed) { - Minecraft mc = getMinecraft(); - if (mc.gameSettings.keyBindSneak.isPressed()) { + MinecraftClient mc = getMinecraft(); + if (mc.options.keySneak.wasPressed()) { ReplayModReplay.instance.getReplayHandler().spectateCamera(); } // Soak up all remaining key presses - for (KeyBinding binding : Arrays.asList(mc.gameSettings.keyBindAttack, mc.gameSettings.keyBindUseItem, - mc.gameSettings.keyBindJump, mc.gameSettings.keyBindSneak, mc.gameSettings.keyBindForward, - mc.gameSettings.keyBindBack, mc.gameSettings.keyBindLeft, mc.gameSettings.keyBindRight)) { + for (KeyBinding binding : Arrays.asList(mc.options.keyAttack, mc.options.keyUse, + mc.options.keyJump, mc.options.keySneak, mc.options.keyForward, + mc.options.keyBack, mc.options.keyLeft, mc.options.keyRight)) { //noinspection StatementWithEmptyBody - while (binding.isPressed()); + while (binding.wasPressed()); } // Prevent mouse movement @@ -54,18 +54,18 @@ public class SpectatorCameraController implements CameraController { if (view != null && view != camera) { camera.setCameraPosRot(getRenderViewEntity(mc)); // If it's a player, also 'steal' its inventory so the rendering code knows what item to render - if (view instanceof EntityPlayer) { - EntityPlayer viewPlayer = (EntityPlayer) view; + if (view instanceof PlayerEntity) { + PlayerEntity viewPlayer = (PlayerEntity) view; //#if MC>=11400 - //$$ camera.setEquippedStack(EquipmentSlot.HEAD, viewPlayer.getEquippedStack(EquipmentSlot.HEAD)); + camera.setEquippedStack(EquipmentSlot.HEAD, viewPlayer.getEquippedStack(EquipmentSlot.HEAD)); //#else - camera.inventory = viewPlayer.inventory; + //$$ camera.inventory = viewPlayer.inventory; //#endif EntityPlayerAccessor cameraA = (EntityPlayerAccessor) camera; EntityPlayerAccessor viewPlayerA = (EntityPlayerAccessor) viewPlayer; //#if MC>=10904 cameraA.setItemStackMainHand(viewPlayerA.getItemStackMainHand()); - camera.swingingHand = viewPlayer.swingingHand; + camera.preferredHand = viewPlayer.preferredHand; cameraA.setActiveItemStackUseCount(viewPlayerA.getActiveItemStackUseCount()); //#else //$$ cameraA.setItemInUse(viewPlayerA.getItemInUse()); diff --git a/src/main/java/com/replaymod/replay/camera/VanillaCameraController.java b/src/main/java/com/replaymod/replay/camera/VanillaCameraController.java index d4c0610f..93b85c78 100644 --- a/src/main/java/com/replaymod/replay/camera/VanillaCameraController.java +++ b/src/main/java/com/replaymod/replay/camera/VanillaCameraController.java @@ -1,11 +1,11 @@ package com.replaymod.replay.camera; import de.johni0702.minecraft.gui.utils.lwjgl.vector.Vector3f; -import net.minecraft.client.Minecraft; -import net.minecraft.client.settings.KeyBinding; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.options.KeyBinding; //#if MC>=11300 -import net.minecraft.client.GameSettings; +import net.minecraft.client.options.GameOptions; //#else //$$ import net.minecraft.client.settings.GameSettings; //#endif @@ -28,15 +28,15 @@ public class VanillaCameraController implements CameraController { private int speed; - public VanillaCameraController(Minecraft mc, CameraEntity camera) { + public VanillaCameraController(MinecraftClient mc, CameraEntity camera) { this.camera = camera; - GameSettings gameSettings = mc.gameSettings; - this.bindings[0] = gameSettings.keyBindForward; - this.bindings[1] = gameSettings.keyBindBack; - this.bindings[2] = gameSettings.keyBindLeft; - this.bindings[3] = gameSettings.keyBindRight; - this.bindings[4] = gameSettings.keyBindJump; - this.bindings[5] = gameSettings.keyBindSneak; + GameOptions gameSettings = mc.options; + this.bindings[0] = gameSettings.keyForward; + this.bindings[1] = gameSettings.keyBack; + this.bindings[2] = gameSettings.keyLeft; + this.bindings[3] = gameSettings.keyRight; + this.bindings[4] = gameSettings.keyJump; + this.bindings[5] = gameSettings.keySneak; } @Override @@ -44,13 +44,13 @@ public class VanillaCameraController implements CameraController { if (partialTicksPassed == 0) return; Vector3f direction = new Vector3f(0, 0, 0); for (int i = 0; i < 6; i++) { // First, get movement direction depending on keys pressed - if (bindings[i].isKeyDown()) { + if (bindings[i].isPressed()) { Vector3f.add(direction, DIRECTIONS[i], direction); } } if (direction.length() == 0) return; direction.normalise(direction); // Normalize, so we don't move quicker if we hold down multiple keys - double yawRadians = Math.toRadians(camera.rotationYaw); + double yawRadians = Math.toRadians(camera.yaw); float yawSin = (float) Math.sin(yawRadians), yawCos = (float) Math.cos(yawRadians); // Rotate by yaw direction.set( diff --git a/src/main/java/com/replaymod/replay/events/ReplayChatMessageEvent.java b/src/main/java/com/replaymod/replay/events/ReplayChatMessageEvent.java index 93b0c17b..82650125 100644 --- a/src/main/java/com/replaymod/replay/events/ReplayChatMessageEvent.java +++ b/src/main/java/com/replaymod/replay/events/ReplayChatMessageEvent.java @@ -1,16 +1,16 @@ //#if MC<11400 -package com.replaymod.replay.events; - -import com.replaymod.replay.camera.CameraEntity; -import lombok.Getter; -import lombok.RequiredArgsConstructor; -import net.minecraftforge.eventbus.api.Cancelable; -import net.minecraftforge.eventbus.api.Event; - -@Cancelable -@RequiredArgsConstructor -public class ReplayChatMessageEvent extends Event { - @Getter - private final CameraEntity cameraEntity; -} +//$$ package com.replaymod.replay.events; +//$$ +//$$ import com.replaymod.replay.camera.CameraEntity; +//$$ import lombok.Getter; +//$$ import lombok.RequiredArgsConstructor; +//$$ import net.minecraftforge.eventbus.api.Cancelable; +//$$ import net.minecraftforge.eventbus.api.Event; +//$$ +//$$ @Cancelable +//$$ @RequiredArgsConstructor +//$$ public class ReplayChatMessageEvent extends Event { +//$$ @Getter +//$$ private final CameraEntity cameraEntity; +//$$ } //#endif diff --git a/src/main/java/com/replaymod/replay/gui/overlay/GuiMarkerTimeline.java b/src/main/java/com/replaymod/replay/gui/overlay/GuiMarkerTimeline.java index 64312a53..d312d670 100644 --- a/src/main/java/com/replaymod/replay/gui/overlay/GuiMarkerTimeline.java +++ b/src/main/java/com/replaymod/replay/gui/overlay/GuiMarkerTimeline.java @@ -14,7 +14,7 @@ import de.johni0702.minecraft.gui.function.Typeable; import de.johni0702.minecraft.gui.utils.lwjgl.Point; import de.johni0702.minecraft.gui.utils.lwjgl.ReadableDimension; import de.johni0702.minecraft.gui.utils.lwjgl.ReadablePoint; -import net.minecraft.client.resources.I18n; +import net.minecraft.client.resource.language.I18n; import javax.annotation.Nonnull; import javax.annotation.Nullable; @@ -219,7 +219,7 @@ public class GuiMarkerTimeline extends AbstractGuiTimeline im protected String getTooltipText(RenderInfo renderInfo) { Marker marker = getMarkerAt(renderInfo.mouseX, renderInfo.mouseY); if (marker != null) { - return marker.getName() != null ? marker.getName() : I18n.format("replaymod.gui.ingame.unnamedmarker"); + return marker.getName() != null ? marker.getName() : I18n.translate("replaymod.gui.ingame.unnamedmarker"); } return super.getTooltipText(renderInfo); } diff --git a/src/main/java/com/replaymod/replay/gui/overlay/GuiReplayOverlay.java b/src/main/java/com/replaymod/replay/gui/overlay/GuiReplayOverlay.java index ddd4d641..a57c1d6d 100644 --- a/src/main/java/com/replaymod/replay/gui/overlay/GuiReplayOverlay.java +++ b/src/main/java/com/replaymod/replay/gui/overlay/GuiReplayOverlay.java @@ -19,8 +19,8 @@ import de.johni0702.minecraft.gui.utils.EventRegistrations; import de.johni0702.minecraft.gui.utils.lwjgl.ReadableDimension; import de.johni0702.minecraft.gui.utils.lwjgl.ReadablePoint; import de.johni0702.minecraft.gui.utils.lwjgl.WritablePoint; -import net.minecraft.client.GameSettings; -import net.minecraft.client.resources.I18n; +import net.minecraft.client.options.GameOptions; +import net.minecraft.client.resource.language.I18n; //#if MC>=11300 import com.replaymod.core.events.KeyBindingEventCallback; @@ -117,7 +117,7 @@ public class GuiReplayOverlay extends AbstractGuiOverlay { @Override public void run() { double speed = getSpeedSliderValue(); - speedSlider.setText(I18n.format("replaymod.gui.speed") + ": " + speed + "x"); + speedSlider.setText(I18n.translate("replaymod.gui.speed") + ": " + speed + "x"); ReplaySender replaySender = replayHandler.getReplaySender(); if (!replaySender.paused()) { replaySender.setReplaySpeed(speed); @@ -157,7 +157,7 @@ public class GuiReplayOverlay extends AbstractGuiOverlay { @Override public void draw(GuiRenderer renderer, ReadableDimension size, RenderInfo renderInfo) { // Do not render overlay when user pressed F1 and we are not currently in some popup - if (getMinecraft().gameSettings.hideGUI && isAllowUserInput()) { + if (getMinecraft().options.hudHidden && isAllowUserInput()) { // Note that this only applies to when the mouse is visible, otherwise // the draw method isn't called in the first place return; @@ -178,8 +178,8 @@ public class GuiReplayOverlay extends AbstractGuiOverlay { //$$ @SubscribeEvent //$$ public void onKeyBindingEvent(InputEvent.KeyInputEvent event) { //#endif - GameSettings gameSettings = getMinecraft().gameSettings; - while (gameSettings.keyBindChat.isPressed() || gameSettings.keyBindCommand.isPressed()) { + GameOptions gameSettings = getMinecraft().options; + while (gameSettings.keyChat.wasPressed() || gameSettings.keyCommand.wasPressed()) { if (!isMouseVisible()) { setMouseVisible(true); } @@ -196,10 +196,10 @@ public class GuiReplayOverlay extends AbstractGuiOverlay { //$$ if (!Keyboard.getEventKeyState()) return; //$$ int key = Keyboard.getEventKey(); //#endif - GameSettings gameSettings = getMinecraft().gameSettings; + GameOptions gameSettings = getMinecraft().options; // Handle the F1 key binding while the overlay is opened as a gui screen if (isMouseVisible() && key == Keyboard.KEY_F1) { - gameSettings.hideGUI = !gameSettings.hideGUI; + gameSettings.hudHidden = !gameSettings.hudHidden; } } } diff --git a/src/main/java/com/replaymod/replay/gui/screen/GuiModCompatWarning.java b/src/main/java/com/replaymod/replay/gui/screen/GuiModCompatWarning.java index dbd40b52..1ea0fd0d 100644 --- a/src/main/java/com/replaymod/replay/gui/screen/GuiModCompatWarning.java +++ b/src/main/java/com/replaymod/replay/gui/screen/GuiModCompatWarning.java @@ -81,7 +81,7 @@ public class GuiModCompatWarning extends AbstractGuiScreen } } - cancelButton.onClick(() -> getMinecraft().displayGuiScreen(null)); + cancelButton.onClick(() -> getMinecraft().openScreen(null)); loadButton.onClick(() -> { try { mod.startReplay(replayFile, false); diff --git a/src/main/java/com/replaymod/replay/gui/screen/GuiReplayViewer.java b/src/main/java/com/replaymod/replay/gui/screen/GuiReplayViewer.java index 8607c141..10b31728 100755 --- a/src/main/java/com/replaymod/replay/gui/screen/GuiReplayViewer.java +++ b/src/main/java/com/replaymod/replay/gui/screen/GuiReplayViewer.java @@ -5,7 +5,7 @@ import com.google.common.base.Supplier; import com.google.common.util.concurrent.FutureCallback; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.SettableFuture; -import net.minecraft.util.text.TextFormatting; +import net.minecraft.text.TextFormat; import com.replaymod.core.ReplayMod; import com.replaymod.core.SettingsRegistry; import com.replaymod.core.gui.GuiReplaySettings; @@ -36,9 +36,9 @@ import de.johni0702.minecraft.gui.utils.lwjgl.Dimension; import de.johni0702.minecraft.gui.utils.lwjgl.ReadableDimension; import de.johni0702.minecraft.gui.utils.lwjgl.ReadablePoint; import lombok.Getter; -import net.minecraft.client.gui.GuiErrorScreen; -import net.minecraft.crash.CrashReport; -import net.minecraft.crash.ReportedException; +import net.minecraft.client.gui.menu.NoticeScreen; +import net.minecraft.util.crash.CrashReport; +import net.minecraft.util.crash.CrashException; import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOCase; import org.apache.commons.io.filefilter.SuffixFileFilter; @@ -57,9 +57,9 @@ import java.util.List; import static com.replaymod.replay.ReplayModReplay.LOGGER; //#if MC>=11400 -//$$ import net.minecraft.text.TranslatableTextComponent; +import net.minecraft.text.TranslatableTextComponent; //#else -import net.minecraft.client.resources.I18n; +//$$ import net.minecraft.client.resources.I18n; //#endif public class GuiReplayViewer extends GuiScreen { @@ -141,14 +141,14 @@ public class GuiReplayViewer extends GuiScreen { } catch (IOException e) { // We failed (might also be their OS) e.printStackTrace(); - getMinecraft().displayGuiScreen(new GuiErrorScreen( + getMinecraft().openScreen(new NoticeScreen( //#if MC>=11400 - //$$ () -> {}, - //$$ new TranslatableTextComponent("replaymod.gui.viewer.delete.failed1"), - //$$ new TranslatableTextComponent("replaymod.gui.viewer.delete.failed2") + () -> {}, + new TranslatableTextComponent("replaymod.gui.viewer.delete.failed1"), + new TranslatableTextComponent("replaymod.gui.viewer.delete.failed2") //#else - I18n.format("replaymod.gui.viewer.delete.failed1"), - I18n.format("replaymod.gui.viewer.delete.failed2") + //$$ I18n.format("replaymod.gui.viewer.delete.failed1"), + //$$ I18n.format("replaymod.gui.viewer.delete.failed2") //#endif )); return; @@ -170,7 +170,7 @@ public class GuiReplayViewer extends GuiScreen { String name = list.getSelected().name.getText(); GuiYesNoPopup popup = GuiYesNoPopup.open(GuiReplayViewer.this, new GuiLabel().setI18nText("replaymod.gui.viewer.delete.linea").setColor(Colors.BLACK), - new GuiLabel().setI18nText("replaymod.gui.viewer.delete.lineb", name + TextFormatting.RESET).setColor(Colors.BLACK) + new GuiLabel().setI18nText("replaymod.gui.viewer.delete.lineb", name + TextFormat.RESET).setColor(Colors.BLACK) ).setYesI18nLabel("replaymod.gui.delete").setNoI18nLabel("replaymod.gui.cancel"); Futures.addCallback(popup.getFuture(), new FutureCallback() { @Override @@ -203,7 +203,7 @@ public class GuiReplayViewer extends GuiScreen { public final GuiButton cancelButton = new GuiButton().onClick(new Runnable() { @Override public void run() { - getMinecraft().displayGuiScreen(null); + getMinecraft().openScreen(null); } }).setSize(73, 20).setI18nLabel("replaymod.gui.cancel"); @@ -225,7 +225,7 @@ public class GuiReplayViewer extends GuiScreen { try { list.setFolder(mod.getCore().getReplayFolder()); } catch (IOException e) { - throw new ReportedException(CrashReport.makeCrashReport(e, "Getting replay folder")); + throw new CrashException(CrashReport.create(e, "Getting replay folder")); } setTitle(new GuiLabel().setI18nText("replaymod.gui.replayviewer")); @@ -404,7 +404,7 @@ public class GuiReplayViewer extends GuiScreen { public GuiReplayEntry(File file, ReplayMetaData metaData, BufferedImage thumbImage) { this.file = file; - name.setText(TextFormatting.UNDERLINE + Utils.fileNameToReplayName(file.getName())); + name.setText(TextFormat.UNDERLINE + Utils.fileNameToReplayName(file.getName())); if (StringUtils.isEmpty(metaData.getServerName()) || !ReplayMod.instance.getSettingsRegistry().get(Setting.SHOW_SERVER_IPS)) { server.setI18nText("replaymod.gui.iphidden").setColor(Colors.DARK_RED); diff --git a/src/main/java/com/replaymod/replay/handler/GuiHandler.java b/src/main/java/com/replaymod/replay/handler/GuiHandler.java index a0f568fc..98723cfa 100644 --- a/src/main/java/com/replaymod/replay/handler/GuiHandler.java +++ b/src/main/java/com/replaymod/replay/handler/GuiHandler.java @@ -3,19 +3,19 @@ package com.replaymod.replay.handler; import de.johni0702.minecraft.gui.utils.EventRegistrations; import com.replaymod.replay.ReplayModReplay; import com.replaymod.replay.gui.screen.GuiReplayViewer; -import net.minecraft.client.gui.GuiButton; -import net.minecraft.client.gui.GuiIngameMenu; -import net.minecraft.client.gui.GuiMainMenu; -import net.minecraft.client.gui.GuiMultiplayer; -import net.minecraft.client.gui.GuiScreen; -import net.minecraft.client.resources.I18n; +import net.minecraft.client.gui.widget.ButtonWidget; +import net.minecraft.client.gui.menu.PauseMenuScreen; +import net.minecraft.client.gui.MainMenuScreen; +import net.minecraft.client.gui.menu.MultiplayerScreen; +import net.minecraft.client.gui.Screen; +import net.minecraft.client.resource.language.I18n; //#if MC>=11400 -//$$ import de.johni0702.minecraft.gui.versions.callbacks.InitScreenCallback; -//$$ import net.minecraft.client.gui.widget.AbstractButtonWidget; +import de.johni0702.minecraft.gui.versions.callbacks.InitScreenCallback; +import net.minecraft.client.gui.widget.AbstractButtonWidget; //#else -import net.minecraftforge.client.event.GuiScreenEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; +//$$ import net.minecraftforge.client.event.GuiScreenEvent; +//$$ import net.minecraftforge.eventbus.api.SubscribeEvent; //#endif import java.io.IOException; @@ -37,15 +37,15 @@ public class GuiHandler extends EventRegistrations { } //#if MC>=11400 - //$$ { on(InitScreenCallback.EVENT, this::injectIntoIngameMenu); } - //$$ private void injectIntoIngameMenu(Screen guiScreen, List buttonList) { + { on(InitScreenCallback.EVENT, this::injectIntoIngameMenu); } + private void injectIntoIngameMenu(Screen guiScreen, List buttonList) { //#else - @SubscribeEvent - public void injectIntoIngameMenu(GuiScreenEvent.InitGuiEvent.Post event) { - GuiScreen guiScreen = getGui(event); - List buttonList = getButtonList(event); + //$$ @SubscribeEvent + //$$ public void injectIntoIngameMenu(GuiScreenEvent.InitGuiEvent.Post event) { + //$$ GuiScreen guiScreen = getGui(event); + //$$ List buttonList = getButtonList(event); //#endif - if (!(guiScreen instanceof GuiIngameMenu)) { + if (!(guiScreen instanceof PauseMenuScreen)) { return; } @@ -54,19 +54,19 @@ public class GuiHandler extends EventRegistrations { mod.getReplayHandler().getReplaySender().setReplaySpeed(0); //#if MC>=11400 - //$$ final String BUTTON_OPTIONS = I18n.translate("menu.options"); - //$$ final String BUTTON_EXIT_SERVER = I18n.translate("menu.disconnect"); - //$$ final String BUTTON_ADVANCEMENTS = I18n.translate("gui.advancements"); - //$$ final String BUTTON_STATS = I18n.translate("gui.stats"); - //$$ final String BUTTON_OPEN_TO_LAN = I18n.translate("menu.shareToLan"); + final String BUTTON_OPTIONS = I18n.translate("menu.options"); + final String BUTTON_EXIT_SERVER = I18n.translate("menu.disconnect"); + final String BUTTON_ADVANCEMENTS = I18n.translate("gui.advancements"); + final String BUTTON_STATS = I18n.translate("gui.stats"); + final String BUTTON_OPEN_TO_LAN = I18n.translate("menu.shareToLan"); //#else //#if MC>=11300 - final int BUTTON_OPTIONS = 0; + //$$ final int BUTTON_OPTIONS = 0; //#endif - final int BUTTON_EXIT_SERVER = 1; - final int BUTTON_ADVANCEMENTS = 5; - final int BUTTON_STATS = 6; - final int BUTTON_OPEN_TO_LAN = 7; + //$$ final int BUTTON_EXIT_SERVER = 1; + //$$ final int BUTTON_ADVANCEMENTS = 5; + //$$ final int BUTTON_STATS = 6; + //$$ final int BUTTON_OPEN_TO_LAN = 7; //#endif @@ -74,17 +74,17 @@ public class GuiHandler extends EventRegistrations { //$$ GuiButton openToLan = null; //#endif //#if MC>=11400 - //$$ AbstractButtonWidget achievements = null, stats = null; - //$$ for(AbstractButtonWidget b : new ArrayList<>(buttonList)) { + AbstractButtonWidget achievements = null, stats = null; + for(AbstractButtonWidget b : new ArrayList<>(buttonList)) { //#else - GuiButton achievements = null, stats = null; - for(GuiButton b : new ArrayList<>(buttonList)) { + //$$ GuiButton achievements = null, stats = null; + //$$ for(GuiButton b : new ArrayList<>(buttonList)) { //#endif boolean remove = false; //#if MC>=11400 - //$$ String id = b.getMessage(); + String id = b.getMessage(); //#else - Integer id = b.id; + //$$ Integer id = b.id; //#endif if (id.equals(BUTTON_EXIT_SERVER)) { // Replace "Exit Server" button with "Exit Replay" button @@ -96,7 +96,7 @@ public class GuiHandler extends EventRegistrations { b.y, width(b), height(b), - I18n.format("replaymod.gui.exit"), + I18n.translate("replaymod.gui.exit"), this::onButton )); } else if (id.equals(BUTTON_ADVANCEMENTS)) { @@ -114,9 +114,9 @@ public class GuiHandler extends EventRegistrations { //#if MC>=11300 } else if (id.equals(BUTTON_OPTIONS)) { //#if MC>=11400 - //$$ width(b, 204); + width(b, 204); //#else - width(b, 200); + //$$ width(b, 200); //#endif //#endif } @@ -149,9 +149,9 @@ public class GuiHandler extends EventRegistrations { */ private void moveAllButtonsDirectlyBelowUpwards( //#if MC>=11400 - //$$ List buttons, + List buttons, //#else - List buttons, + //$$ List buttons, //#endif int belowY, int xStart, @@ -164,14 +164,14 @@ public class GuiHandler extends EventRegistrations { } //#if MC>=11400 - //$$ { on(InitScreenCallback.EVENT, this::ensureReplayStopped); } - //$$ private void ensureReplayStopped(Screen guiScreen, List buttonList) { + { on(InitScreenCallback.EVENT, this::ensureReplayStopped); } + private void ensureReplayStopped(Screen guiScreen, List buttonList) { //#else - @SubscribeEvent - public void ensureReplayStopped(GuiScreenEvent.InitGuiEvent event) { - GuiScreen guiScreen = getGui(event); + //$$ @SubscribeEvent + //$$ public void ensureReplayStopped(GuiScreenEvent.InitGuiEvent event) { + //$$ GuiScreen guiScreen = getGui(event); //#endif - if (!(guiScreen instanceof GuiMainMenu || guiScreen instanceof GuiMultiplayer)) { + if (!(guiScreen instanceof MainMenuScreen || guiScreen instanceof MultiplayerScreen)) { return; } @@ -191,24 +191,24 @@ public class GuiHandler extends EventRegistrations { } //#if MC>=11400 - //$$ { on(InitScreenCallback.EVENT, this::injectIntoMainMenu); } - //$$ private void injectIntoMainMenu(Screen guiScreen, List buttonList) { + { on(InitScreenCallback.EVENT, this::injectIntoMainMenu); } + private void injectIntoMainMenu(Screen guiScreen, List buttonList) { //#else - @SubscribeEvent - public void injectIntoMainMenu(GuiScreenEvent.InitGuiEvent event) { - GuiScreen guiScreen = getGui(event); + //$$ @SubscribeEvent + //$$ public void injectIntoMainMenu(GuiScreenEvent.InitGuiEvent event) { + //$$ GuiScreen guiScreen = getGui(event); //#endif - if (!(guiScreen instanceof GuiMainMenu)) { + if (!(guiScreen instanceof MainMenuScreen)) { return; } - GuiButton button = new InjectedButton( + ButtonWidget button = new InjectedButton( guiScreen, BUTTON_REPLAY_VIEWER, guiScreen.width / 2 - 100, guiScreen.height / 4 + 10 + 4 * 24, 98, 20, - I18n.format("replaymod.gui.replayviewer"), + I18n.translate("replaymod.gui.replayviewer"), this::onButton ); addButton(guiScreen, button); @@ -216,24 +216,24 @@ public class GuiHandler extends EventRegistrations { //#if MC>=11300 private void onButton(InjectedButton button) { - GuiScreen guiScreen = button.guiScreen; + Screen guiScreen = button.guiScreen; //#else //$$ @SubscribeEvent //$$ public void onButton(GuiScreenEvent.ActionPerformedEvent.Pre event) { //$$ GuiScreen guiScreen = getGui(event); //$$ GuiButton button = getButton(event); //#endif - if(!button.enabled) return; + if(!button.active) return; - if (guiScreen instanceof GuiMainMenu) { + if (guiScreen instanceof MainMenuScreen) { if (button.id == BUTTON_REPLAY_VIEWER) { new GuiReplayViewer(mod).display(); } } - if (guiScreen instanceof GuiIngameMenu && mod.getReplayHandler() != null) { + if (guiScreen instanceof PauseMenuScreen && mod.getReplayHandler() != null) { if (button.id == BUTTON_EXIT_REPLAY) { - button.enabled = false; + button.active = false; try { mod.getReplayHandler().endReplay(); } catch (IOException e) { @@ -243,11 +243,11 @@ public class GuiHandler extends EventRegistrations { } } - public static class InjectedButton extends GuiButton { - public final GuiScreen guiScreen; + public static class InjectedButton extends ButtonWidget { + public final Screen guiScreen; public final int id; private Consumer onClick; - public InjectedButton(GuiScreen guiScreen, int buttonId, int x, int y, int width, int height, String buttonText, + public InjectedButton(Screen guiScreen, int buttonId, int x, int y, int width, int height, String buttonText, //#if MC>=11300 Consumer onClick //#else @@ -256,7 +256,7 @@ public class GuiHandler extends EventRegistrations { ) { super( //#if MC<11400 - buttonId, + //$$ buttonId, //#endif x, y, @@ -264,7 +264,7 @@ public class GuiHandler extends EventRegistrations { height, buttonText //#if MC>=11400 - //$$ , self -> onClick.accept((InjectedButton) self) + , self -> onClick.accept((InjectedButton) self) //#endif ); this.guiScreen = guiScreen; @@ -277,10 +277,10 @@ public class GuiHandler extends EventRegistrations { } //#if MC>=11300 && MC<11400 - @Override - public void onClick(double mouseX, double mouseY) { - onClick.accept(this); - } + //$$ @Override + //$$ public void onClick(double mouseX, double mouseY) { + //$$ onClick.accept(this); + //$$ } //#endif } } diff --git a/src/main/java/com/replaymod/replay/mixin/EntityLivingBaseAccessor.java b/src/main/java/com/replaymod/replay/mixin/EntityLivingBaseAccessor.java index 0900ad4a..cd5b2233 100644 --- a/src/main/java/com/replaymod/replay/mixin/EntityLivingBaseAccessor.java +++ b/src/main/java/com/replaymod/replay/mixin/EntityLivingBaseAccessor.java @@ -1,28 +1,28 @@ package com.replaymod.replay.mixin; -import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.LivingEntity; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Accessor; -@Mixin(EntityLivingBase.class) +@Mixin(LivingEntity.class) public interface EntityLivingBaseAccessor { //#if MC>=11300 - @Accessor + @Accessor("field_6224") double getInterpTargetX(); - @Accessor + @Accessor("field_6245") double getInterpTargetY(); - @Accessor + @Accessor("field_6263") double getInterpTargetZ(); - @Accessor + @Accessor("field_6284") double getInterpTargetYaw(); - @Accessor + @Accessor("field_6221") double getInterpTargetPitch(); //#endif //#if MC>=10904 - @Accessor + @Accessor("itemUseTimeLeft") int getActiveItemStackUseCount(); - @Accessor + @Accessor("itemUseTimeLeft") void setActiveItemStackUseCount(int value); //#endif } diff --git a/src/main/java/com/replaymod/replay/mixin/EntityPlayerAccessor.java b/src/main/java/com/replaymod/replay/mixin/EntityPlayerAccessor.java index e986752b..41ed5604 100644 --- a/src/main/java/com/replaymod/replay/mixin/EntityPlayerAccessor.java +++ b/src/main/java/com/replaymod/replay/mixin/EntityPlayerAccessor.java @@ -1,16 +1,16 @@ package com.replaymod.replay.mixin; -import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Accessor; -@Mixin(EntityPlayer.class) +@Mixin(PlayerEntity.class) public interface EntityPlayerAccessor extends EntityLivingBaseAccessor { //#if MC>=10904 - @Accessor + @Accessor("field_7525") ItemStack getItemStackMainHand(); - @Accessor + @Accessor("field_7525") void setItemStackMainHand(ItemStack value); //#else //$$ @Accessor diff --git a/src/main/java/com/replaymod/replay/mixin/FirstPersonRendererAccessor.java b/src/main/java/com/replaymod/replay/mixin/FirstPersonRendererAccessor.java index 1d51620d..c93c98ef 100644 --- a/src/main/java/com/replaymod/replay/mixin/FirstPersonRendererAccessor.java +++ b/src/main/java/com/replaymod/replay/mixin/FirstPersonRendererAccessor.java @@ -1,6 +1,6 @@ package com.replaymod.replay.mixin; -import net.minecraft.client.renderer.FirstPersonRenderer; +import net.minecraft.client.render.FirstPersonRenderer; import net.minecraft.item.ItemStack; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Accessor; @@ -8,17 +8,17 @@ import org.spongepowered.asm.mixin.gen.Accessor; @Mixin(FirstPersonRenderer.class) public interface FirstPersonRendererAccessor { //#if MC>=10904 - @Accessor + @Accessor("mainHand") void setItemStackMainHand(ItemStack value); - @Accessor + @Accessor("offHand") void setItemStackOffHand(ItemStack value); - @Accessor + @Accessor("equipProgressMainHand") void setEquippedProgressMainHand(float value); - @Accessor + @Accessor("prevEquipProgressMainHand") void setPrevEquippedProgressMainHand(float value); - @Accessor + @Accessor("equipProgressOffHand") void setEquippedProgressOffHand(float value); - @Accessor + @Accessor("prevEquipProgressOffHand") void setPrevEquippedProgressOffHand(float value); //#else //$$ @Accessor diff --git a/src/main/java/com/replaymod/replay/mixin/MixinCamera.java b/src/main/java/com/replaymod/replay/mixin/MixinCamera.java index b4ff6096..a0c0d58a 100644 --- a/src/main/java/com/replaymod/replay/mixin/MixinCamera.java +++ b/src/main/java/com/replaymod/replay/mixin/MixinCamera.java @@ -1,30 +1,30 @@ //#if MC>=11400 -//$$ package com.replaymod.replay.mixin; -//$$ -//$$ import com.mojang.blaze3d.platform.GlStateManager; -//$$ import com.replaymod.replay.camera.CameraEntity; -//$$ import net.minecraft.client.render.Camera; -//$$ import net.minecraft.entity.Entity; -//$$ import net.minecraft.world.BlockView; -//$$ 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; -//$$ -//$$ @Mixin(Camera.class) -//$$ public class MixinCamera { -//$$ @Inject( -//$$ method = "update", -//$$ at = @At( -//$$ value = "INVOKE", -//$$ target = "Lcom/mojang/blaze3d/platform/GlStateManager;rotatef(FFFF)V", -//$$ ordinal = 0 -//$$ ) -//$$ ) -//$$ private void applyRoll(BlockView blockView, Entity view, boolean boolean_1, boolean boolean_2, float float_1, CallbackInfo ci) { -//$$ if (view instanceof CameraEntity) { -//$$ GlStateManager.rotatef(((CameraEntity) view).roll, 0.0F, 0.0F, 1.0F); -//$$ } -//$$ } -//$$ } +package com.replaymod.replay.mixin; + +import com.mojang.blaze3d.platform.GlStateManager; +import com.replaymod.replay.camera.CameraEntity; +import net.minecraft.client.render.Camera; +import net.minecraft.entity.Entity; +import net.minecraft.world.BlockView; +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; + +@Mixin(Camera.class) +public class MixinCamera { + @Inject( + method = "update", + at = @At( + value = "INVOKE", + target = "Lcom/mojang/blaze3d/platform/GlStateManager;rotatef(FFFF)V", + ordinal = 0 + ) + ) + private void applyRoll(BlockView blockView, Entity view, boolean boolean_1, boolean boolean_2, float float_1, CallbackInfo ci) { + if (view instanceof CameraEntity) { + GlStateManager.rotatef(((CameraEntity) view).roll, 0.0F, 0.0F, 1.0F); + } + } +} //#endif diff --git a/src/main/java/com/replaymod/replay/mixin/MixinGuiSpectator.java b/src/main/java/com/replaymod/replay/mixin/MixinGuiSpectator.java index 14727046..8a6bbf13 100644 --- a/src/main/java/com/replaymod/replay/mixin/MixinGuiSpectator.java +++ b/src/main/java/com/replaymod/replay/mixin/MixinGuiSpectator.java @@ -2,7 +2,7 @@ package com.replaymod.replay.mixin; import com.replaymod.replay.camera.CameraEntity; -import net.minecraft.client.gui.GuiSpectator; +import net.minecraft.client.gui.hud.SpectatorHud; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -10,18 +10,18 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import static com.replaymod.core.versions.MCVer.*; -@Mixin(GuiSpectator.class) +@Mixin(SpectatorHud.class) public abstract class MixinGuiSpectator { //#if MC>=10904 - @Inject(method = "onHotbarSelected", at = @At("HEAD"), cancellable = true) + @Inject(method = "method_1976", at = @At("HEAD"), cancellable = true) //#else //$$ @Inject(method = "func_175260_a", at = @At("HEAD"), cancellable = true) //#endif public void isInReplay( //#if MC>=11400 - //$$ double i, + double i, //#else - int i, + //$$ int i, //#endif CallbackInfo ci ) { diff --git a/src/main/java/com/replaymod/replay/mixin/MixinInGameHud.java b/src/main/java/com/replaymod/replay/mixin/MixinInGameHud.java index 41d9bd5a..7d12ca4d 100644 --- a/src/main/java/com/replaymod/replay/mixin/MixinInGameHud.java +++ b/src/main/java/com/replaymod/replay/mixin/MixinInGameHud.java @@ -1,22 +1,22 @@ //#if MC>=11400 -//$$ package com.replaymod.replay.mixin; -//$$ -//$$ import com.replaymod.replay.events.RenderSpectatorCrosshairCallback; -//$$ import net.fabricmc.fabric.api.util.TriState; -//$$ import net.minecraft.client.gui.hud.InGameHud; -//$$ 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.CallbackInfoReturnable; -//$$ -//$$ @Mixin(InGameHud.class) -//$$ public class MixinInGameHud { -//$$ @Inject(method = "shouldRenderSpectatorCrosshair", at = @At("HEAD"), cancellable = true) -//$$ private void shouldRenderSpectatorCrosshair(CallbackInfoReturnable ci) { -//$$ TriState state = RenderSpectatorCrosshairCallback.EVENT.invoker().shouldRenderSpectatorCrosshair(); -//$$ if (state != TriState.DEFAULT) { -//$$ ci.setReturnValue(state.get()); -//$$ } -//$$ } -//$$ } +package com.replaymod.replay.mixin; + +import com.replaymod.replay.events.RenderSpectatorCrosshairCallback; +import net.fabricmc.fabric.api.util.TriState; +import net.minecraft.client.gui.hud.InGameHud; +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.CallbackInfoReturnable; + +@Mixin(InGameHud.class) +public class MixinInGameHud { + @Inject(method = "shouldRenderSpectatorCrosshair", at = @At("HEAD"), cancellable = true) + private void shouldRenderSpectatorCrosshair(CallbackInfoReturnable ci) { + TriState state = RenderSpectatorCrosshairCallback.EVENT.invoker().shouldRenderSpectatorCrosshair(); + if (state != TriState.DEFAULT) { + ci.setReturnValue(state.get()); + } + } +} //#endif diff --git a/src/main/java/com/replaymod/replay/mixin/MixinKeyboardListener.java b/src/main/java/com/replaymod/replay/mixin/MixinKeyboardListener.java index 0555795b..9f6eca83 100644 --- a/src/main/java/com/replaymod/replay/mixin/MixinKeyboardListener.java +++ b/src/main/java/com/replaymod/replay/mixin/MixinKeyboardListener.java @@ -8,30 +8,30 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; //#if MC>=11300 -import net.minecraft.client.KeyboardListener; +import net.minecraft.client.Keyboard; //#else //$$ import net.minecraft.client.Minecraft; //#endif //#if MC>=11300 -@Mixin(KeyboardListener.class) +@Mixin(Keyboard.class) //#else //$$ @Mixin(Minecraft.class) //#endif public abstract class MixinKeyboardListener { @Inject( //#if MC>=11300 - method = "onKeyEvent", + method = "onKey", //#else //$$ method = "dispatchKeypresses", //#endif at = @At( value = "INVOKE", //#if MC>=11400 - //$$ target = "Lnet/minecraft/client/util/ScreenshotUtils;method_1659(Ljava/io/File;IILnet/minecraft/client/gl/GlFramebuffer;Ljava/util/function/Consumer;)V" + target = "Lnet/minecraft/client/util/ScreenshotUtils;method_1659(Ljava/io/File;IILnet/minecraft/client/gl/GlFramebuffer;Ljava/util/function/Consumer;)V" //#else //#if MC>=11300 - target = "Lnet/minecraft/util/ScreenShotHelper;saveScreenshot(Ljava/io/File;IILnet/minecraft/client/shader/Framebuffer;Ljava/util/function/Consumer;)V" + //$$ target = "Lnet/minecraft/util/ScreenShotHelper;saveScreenshot(Ljava/io/File;IILnet/minecraft/client/shader/Framebuffer;Ljava/util/function/Consumer;)V" //#else //$$ target = "Lnet/minecraft/util/ScreenShotHelper;saveScreenshot(Ljava/io/File;IILnet/minecraft/client/shader/Framebuffer;)Lnet/minecraft/util/text/ITextComponent;" //#endif diff --git a/src/main/java/com/replaymod/replay/mixin/MixinParticleManager.java b/src/main/java/com/replaymod/replay/mixin/MixinParticleManager.java index 80ebece8..428a50a3 100644 --- a/src/main/java/com/replaymod/replay/mixin/MixinParticleManager.java +++ b/src/main/java/com/replaymod/replay/mixin/MixinParticleManager.java @@ -16,7 +16,7 @@ import java.util.Queue; public abstract class MixinParticleManager { @Shadow //#if MC>=11300 - private Queue queue; + private Queue newParticles; //#else //$$ private Queue queueEntityFX; //#endif @@ -29,10 +29,10 @@ public abstract class MixinParticleManager { * @param world The new world * @param ci Callback info */ - @Inject(method = "clearEffects", at = @At("HEAD")) + @Inject(method = "setWorld", at = @At("HEAD")) public void replayModReplay_clearParticleQueue(World world, CallbackInfo ci) { //#if MC>=11300 - this.queue.clear(); + this.newParticles.clear(); //#else //$$ this.queueEntityFX.clear(); //#endif diff --git a/src/main/java/com/replaymod/replay/mixin/MixinPlayerControllerMP.java b/src/main/java/com/replaymod/replay/mixin/MixinPlayerControllerMP.java index a5719a0c..84a3cb25 100644 --- a/src/main/java/com/replaymod/replay/mixin/MixinPlayerControllerMP.java +++ b/src/main/java/com/replaymod/replay/mixin/MixinPlayerControllerMP.java @@ -2,9 +2,9 @@ package com.replaymod.replay.mixin; import com.replaymod.replay.ReplayModReplay; import com.replaymod.replay.camera.CameraEntity; -import net.minecraft.client.Minecraft; -import net.minecraft.client.multiplayer.PlayerControllerMP; -import net.minecraft.client.network.NetHandlerPlayClient; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.network.ClientPlayerInteractionManager; +import net.minecraft.client.network.ClientPlayNetworkHandler; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; @@ -12,40 +12,40 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; //#if MC>=11400 -//$$ import net.minecraft.client.world.ClientWorld; +import net.minecraft.client.world.ClientWorld; //#else -import net.minecraft.world.World; +//$$ import net.minecraft.world.World; //#endif //#if MC>=11200 //#if MC>=11300 -import net.minecraft.client.util.RecipeBookClient; +import net.minecraft.client.recipe.book.ClientRecipeBook; //#else //$$ import net.minecraft.stats.RecipeBook; //#endif //#endif //#if MC>=10904 -import net.minecraft.stats.StatisticsManager; +import net.minecraft.stat.StatHandler; //#else //$$ import net.minecraft.stats.StatFileWriter; //#endif //#if MC>=10800 -import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.client.network.ClientPlayerEntity; //#else //$$ import net.minecraft.client.entity.EntityClientPlayerMP; //$$ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; //#endif -@Mixin(PlayerControllerMP.class) +@Mixin(ClientPlayerInteractionManager.class) public abstract class MixinPlayerControllerMP { @Shadow - private Minecraft mc; + private MinecraftClient client; @Shadow //#if MC>=10904 - private NetHandlerPlayClient connection; + private ClientPlayNetworkHandler networkHandler; //#else //$$ private NetHandlerPlayClient netClientHandler; //#endif @@ -54,16 +54,16 @@ public abstract class MixinPlayerControllerMP { @Inject(method = "createPlayer", at=@At("HEAD"), cancellable = true) private void replayModReplay_createReplayCamera( //#if MC>=11400 - //$$ ClientWorld worldIn, + ClientWorld worldIn, //#else - World worldIn, + //$$ World worldIn, //#endif - StatisticsManager statisticsManager, - RecipeBookClient recipeBookClient, - CallbackInfoReturnable ci + StatHandler statisticsManager, + ClientRecipeBook recipeBookClient, + CallbackInfoReturnable ci ) { if (ReplayModReplay.instance.getReplayHandler() != null) { - ci.setReturnValue(new CameraEntity(this.mc, worldIn, this.connection, statisticsManager, recipeBookClient)); + ci.setReturnValue(new CameraEntity(this.client, worldIn, this.networkHandler, statisticsManager, recipeBookClient)); //#else //#if MC>=11200 //$$ @Inject(method = "func_192830_a", at=@At("HEAD"), cancellable = true) @@ -97,13 +97,13 @@ public abstract class MixinPlayerControllerMP { //#if MC>=10800 //#if MC>=11300 - @Inject(method = "isSpectatorMode", at=@At("HEAD"), cancellable = true) + @Inject(method = "isFlyingLocked", at=@At("HEAD"), cancellable = true) //#else //$$ @Inject(method = "isSpectator", at=@At("HEAD"), cancellable = true) //#endif private void replayModReplay_isSpectator(CallbackInfoReturnable ci) { - if (this.mc.player instanceof CameraEntity) { // this check should in theory not be required - ci.setReturnValue(this.mc.player.isSpectator()); + if (this.client.player instanceof CameraEntity) { // this check should in theory not be required + ci.setReturnValue(this.client.player.isSpectator()); } } //#endif diff --git a/src/main/java/com/replaymod/replay/mixin/MixinRenderArrow.java b/src/main/java/com/replaymod/replay/mixin/MixinRenderArrow.java index 31570815..96f7df75 100644 --- a/src/main/java/com/replaymod/replay/mixin/MixinRenderArrow.java +++ b/src/main/java/com/replaymod/replay/mixin/MixinRenderArrow.java @@ -2,24 +2,24 @@ package com.replaymod.replay.mixin; import com.replaymod.replay.ReplayModReplay; -import net.minecraft.client.renderer.culling.ICamera; -import net.minecraft.client.renderer.entity.Render; -import net.minecraft.client.renderer.entity.RenderArrow; -import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.client.render.VisibleRegion; +import net.minecraft.client.render.entity.EntityRenderer; +import net.minecraft.client.render.entity.ArrowEntityRenderer; +import net.minecraft.client.render.entity.EntityRenderDispatcher; import net.minecraft.entity.Entity; import org.spongepowered.asm.mixin.Mixin; -@Mixin(RenderArrow.class) -public abstract class MixinRenderArrow extends Render { - protected MixinRenderArrow(RenderManager renderManager) { +@Mixin(ArrowEntityRenderer.class) +public abstract class MixinRenderArrow extends EntityRenderer { + protected MixinRenderArrow(EntityRenderDispatcher renderManager) { super(renderManager); } @SuppressWarnings("unchecked") @Override - public boolean shouldRender(Entity entity, ICamera camera, double camX, double camY, double camZ) { + public boolean isVisible(Entity entity, VisibleRegion camera, double camX, double camY, double camZ) { // Force arrows to always render, otherwise they stop rendering when you get close to them - return ReplayModReplay.instance.getReplayHandler() != null || super.shouldRender(entity, camera, camX, camY, camZ); + return ReplayModReplay.instance.getReplayHandler() != null || super.isVisible(entity, camera, camX, camY, camZ); } } //#endif diff --git a/src/main/java/com/replaymod/replay/mixin/MixinRenderItem.java b/src/main/java/com/replaymod/replay/mixin/MixinRenderItem.java index 00de694d..3211da62 100644 --- a/src/main/java/com/replaymod/replay/mixin/MixinRenderItem.java +++ b/src/main/java/com/replaymod/replay/mixin/MixinRenderItem.java @@ -2,13 +2,13 @@ package com.replaymod.replay.mixin; import com.replaymod.replay.ReplayHandler; import com.replaymod.replay.ReplayModReplay; -import net.minecraft.client.renderer.ItemRenderer; +import net.minecraft.client.render.item.ItemRenderer; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; //#if MC>=11300 -import net.minecraft.util.Util; +import net.minecraft.util.SystemUtil; //#else //$$ import net.minecraft.client.Minecraft; //#endif @@ -17,9 +17,9 @@ import net.minecraft.util.Util; public class MixinRenderItem { //#if MC>=11300 //#if MC>=11400 - //$$ @Redirect(method = "renderGlint", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/SystemUtil;getMeasuringTimeMs()J")) + @Redirect(method = "renderGlint", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/SystemUtil;getMeasuringTimeMs()J")) //#else - @Redirect(method = "renderEffect", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/Util;milliTime()J")) + //$$ @Redirect(method = "renderEffect", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/Util;milliTime()J")) //#endif private static long getEnchantmentTime() { //#else @@ -31,7 +31,7 @@ public class MixinRenderItem { return replayHandler.getReplaySender().currentTimeStamp(); } //#if MC>=11300 - return Util.milliTime(); + return SystemUtil.getMeasuringTimeMs(); //#else //$$ return Minecraft.getSystemTime(); //#endif diff --git a/src/main/java/com/replaymod/replay/mixin/MixinRenderLivingBase.java b/src/main/java/com/replaymod/replay/mixin/MixinRenderLivingBase.java index 58017b06..a24d2be2 100644 --- a/src/main/java/com/replaymod/replay/mixin/MixinRenderLivingBase.java +++ b/src/main/java/com/replaymod/replay/mixin/MixinRenderLivingBase.java @@ -1,8 +1,8 @@ package com.replaymod.replay.mixin; import com.replaymod.replay.camera.CameraEntity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.player.PlayerEntity; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -10,7 +10,7 @@ import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; //#if MC>=10904 -import net.minecraft.client.renderer.entity.RenderLivingBase; +import net.minecraft.client.render.entity.LivingEntityRenderer; //#else //$$ import net.minecraft.client.renderer.entity.RendererLivingEntity; //#endif @@ -18,31 +18,31 @@ import net.minecraft.client.renderer.entity.RenderLivingBase; import static com.replaymod.core.versions.MCVer.*; //#if MC>=10904 -@Mixin(RenderLivingBase.class) +@Mixin(LivingEntityRenderer.class) //#else //$$ @Mixin(RendererLivingEntity.class) //#endif public abstract class MixinRenderLivingBase { - @Inject(method = "canRenderName", at = @At("HEAD"), cancellable = true) - private void replayModReplay_canRenderInvisibleName(EntityLivingBase entity, CallbackInfoReturnable ci) { - EntityPlayer thePlayer = getMinecraft().player; + @Inject(method = "method_4055", at = @At("HEAD"), cancellable = true) + private void replayModReplay_canRenderInvisibleName(LivingEntity entity, CallbackInfoReturnable ci) { + PlayerEntity thePlayer = getMinecraft().player; if (thePlayer instanceof CameraEntity && entity.isInvisible()) { ci.setReturnValue(false); } } @Redirect( - method = "renderModel", + method = "render", at = @At( value = "INVOKE", //#if MC>=11400 - //$$ target = "Lnet/minecraft/entity/LivingEntity;canSeePlayer(Lnet/minecraft/entity/player/PlayerEntity;)Z" + target = "Lnet/minecraft/entity/LivingEntity;canSeePlayer(Lnet/minecraft/entity/player/PlayerEntity;)Z" //#else - target = "Lnet/minecraft/entity/EntityLivingBase;isInvisibleToPlayer(Lnet/minecraft/entity/player/EntityPlayer;)Z" + //$$ target = "Lnet/minecraft/entity/EntityLivingBase;isInvisibleToPlayer(Lnet/minecraft/entity/player/EntityPlayer;)Z" //#endif ) ) - private boolean replayModReplay_shouldInvisibleNotBeRendered(EntityLivingBase entity, EntityPlayer thePlayer) { - return thePlayer instanceof CameraEntity || entity.isInvisibleToPlayer(thePlayer); + private boolean replayModReplay_shouldInvisibleNotBeRendered(LivingEntity entity, PlayerEntity thePlayer) { + return thePlayer instanceof CameraEntity || entity.canSeePlayer(thePlayer); } } diff --git a/src/main/java/com/replaymod/replay/mixin/MixinRenderManager.java b/src/main/java/com/replaymod/replay/mixin/MixinRenderManager.java index 795e36c4..3df86b43 100644 --- a/src/main/java/com/replaymod/replay/mixin/MixinRenderManager.java +++ b/src/main/java/com/replaymod/replay/mixin/MixinRenderManager.java @@ -1,30 +1,30 @@ // Appears to no longer be needed in 1.14+ (maybe not even 1.13?) //#if MC>=10800 && MC<11400 -package com.replaymod.replay.mixin; - -import net.minecraft.client.GameSettings; -import net.minecraft.client.gui.FontRenderer; -import net.minecraft.client.renderer.entity.RenderManager; -import net.minecraft.entity.Entity; -import net.minecraft.entity.passive.EntityAnimal; -import net.minecraft.world.World; -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(RenderManager.class) -public class MixinRenderManager { - @Shadow - private float playerViewY; - - @Inject(method = "cacheActiveRenderInfo", at = @At("RETURN")) - public void fixHeadRotationForAnimals(World world, FontRenderer font, Entity view, Entity target, GameSettings settings, float partialRenderTick, CallbackInfo ci) { - if (view instanceof EntityAnimal && !((EntityAnimal) view).isPlayerSleeping()) { - EntityAnimal e = (EntityAnimal) view; - this.playerViewY = e.prevRotationYawHead + (e.rotationYawHead - e.prevRotationYawHead) * partialRenderTick; - } - } -} +//$$ package com.replaymod.replay.mixin; +//$$ +//$$ import net.minecraft.client.GameSettings; +//$$ import net.minecraft.client.gui.FontRenderer; +//$$ import net.minecraft.client.renderer.entity.RenderManager; +//$$ import net.minecraft.entity.Entity; +//$$ import net.minecraft.entity.passive.EntityAnimal; +//$$ import net.minecraft.world.World; +//$$ 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(RenderManager.class) +//$$ public class MixinRenderManager { +//$$ @Shadow +//$$ private float playerViewY; +//$$ +//$$ @Inject(method = "cacheActiveRenderInfo", at = @At("RETURN")) +//$$ public void fixHeadRotationForAnimals(World world, FontRenderer font, Entity view, Entity target, GameSettings settings, float partialRenderTick, CallbackInfo ci) { +//$$ if (view instanceof EntityAnimal && !((EntityAnimal) view).isPlayerSleeping()) { +//$$ EntityAnimal e = (EntityAnimal) view; +//$$ this.playerViewY = e.prevRotationYawHead + (e.rotationYawHead - e.prevRotationYawHead) * partialRenderTick; +//$$ } +//$$ } +//$$ } //#endif diff --git a/src/main/java/com/replaymod/replay/mixin/MixinTileEntityEndPortalRenderer.java b/src/main/java/com/replaymod/replay/mixin/MixinTileEntityEndPortalRenderer.java index 5b2ca010..9c66d4ef 100644 --- a/src/main/java/com/replaymod/replay/mixin/MixinTileEntityEndPortalRenderer.java +++ b/src/main/java/com/replaymod/replay/mixin/MixinTileEntityEndPortalRenderer.java @@ -2,21 +2,21 @@ package com.replaymod.replay.mixin; import com.replaymod.replay.ReplayHandler; import com.replaymod.replay.ReplayModReplay; -import net.minecraft.client.renderer.tileentity.TileEntityEndPortalRenderer; +import net.minecraft.client.render.block.entity.EndPortalBlockEntityRenderer; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; //#if MC>=11300 -import net.minecraft.util.Util; +import net.minecraft.util.SystemUtil; //#else //$$ import net.minecraft.client.Minecraft; //#endif -@Mixin(TileEntityEndPortalRenderer.class) +@Mixin(EndPortalBlockEntityRenderer.class) public class MixinTileEntityEndPortalRenderer { //#if MC>=11300 - @Redirect(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/Util;milliTime()J")) + @Redirect(method = "method_3591", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/SystemUtil;getMeasuringTimeMs()J")) //#else //#if MC>=10809 //$$ @Redirect(method = "renderTileEntityAt", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Minecraft;getSystemTime()J")) @@ -34,7 +34,7 @@ public class MixinTileEntityEndPortalRenderer { return replayHandler.getReplaySender().currentTimeStamp(); } //#if MC>=11300 - return Util.milliTime(); + return SystemUtil.getMeasuringTimeMs(); //#else //$$ return Minecraft.getSystemTime(); //#endif diff --git a/src/main/java/com/replaymod/replay/mixin/MixinViewFrustum.java b/src/main/java/com/replaymod/replay/mixin/MixinViewFrustum.java index 54eb1f94..ef52f19f 100644 --- a/src/main/java/com/replaymod/replay/mixin/MixinViewFrustum.java +++ b/src/main/java/com/replaymod/replay/mixin/MixinViewFrustum.java @@ -1,28 +1,28 @@ //#if MC>=10800 package com.replaymod.replay.mixin; -import net.minecraft.client.renderer.ViewFrustum; -import net.minecraft.client.renderer.chunk.RenderChunk; +import net.minecraft.client.render.ChunkRenderDispatcher; +import net.minecraft.client.render.chunk.ChunkRenderer; import net.minecraft.util.math.BlockPos; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; -@Mixin(ViewFrustum.class) +@Mixin(ChunkRenderDispatcher.class) public abstract class MixinViewFrustum { @Redirect( - method = "updateChunkPositions", + method = "updateCameraPosition", at = @At( value = "INVOKE", //#if MC>=10904 - target = "Lnet/minecraft/client/renderer/chunk/RenderChunk;setPosition(III)V" + target = "Lnet/minecraft/client/render/chunk/ChunkRenderer;method_3653(III)V" //#else //$$ target = "Lnet/minecraft/client/renderer/chunk/RenderChunk;setPosition(Lnet/minecraft/util/BlockPos;)V" //#endif ) ) private void replayModReplay_updatePositionAndMarkForUpdate( - RenderChunk renderChunk, + ChunkRenderer renderChunk, //#if MC>=10904 int x, int y, int z //#else @@ -32,10 +32,10 @@ public abstract class MixinViewFrustum { //#if MC>=10904 BlockPos pos = new BlockPos(x, y, z); //#endif - if (!pos.equals(renderChunk.getPosition())) { + if (!pos.equals(renderChunk.getOrigin())) { //#if MC>=10904 - renderChunk.setPosition(x, y, z); - renderChunk.setNeedsUpdate(false); + renderChunk.method_3653(x, y, z); + renderChunk.scheduleRender(false); //#else //$$ renderChunk.setPosition(pos); //$$ renderChunk.setNeedsUpdate(true); diff --git a/src/main/java/com/replaymod/replay/mixin/MixinWorldClient.java b/src/main/java/com/replaymod/replay/mixin/MixinWorldClient.java index 3e9743bb..64e6e252 100644 --- a/src/main/java/com/replaymod/replay/mixin/MixinWorldClient.java +++ b/src/main/java/com/replaymod/replay/mixin/MixinWorldClient.java @@ -1,34 +1,34 @@ package com.replaymod.replay.mixin; -import net.minecraft.client.multiplayer.WorldClient; +import net.minecraft.client.world.ClientWorld; import net.minecraft.entity.Entity; 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; -@Mixin(WorldClient.class) +@Mixin(ClientWorld.class) public abstract class MixinWorldClient { // Looks like this has finally been fixed in 1.14 (or been moved somewhere else entirely, guess we'll find out) //#if MC<11400 - /** - * Fixes a bug in vanilla Minecraft that leaves entities remaining in the entityList even after respawn. - * The entityList in WorldClient is a Set that assumes that the entity ID of its entities does not change. - * However in {@link WorldClient#addEntityToWorld(int, Entity)}, the entity passed in is first added to the - * set and subsequently its id is changed, leaving it stuck in he Set. That is the buggy method. - * This wouldn't be too much of a problem if the entity had the correct id to begin with, however the handler for - * the spawn player packet creates an EntityOtherPlayerMP which takes its id from a counter and then passes it to - * this method with the wrong id. - * This mixin fixes the id of the entity before it is added to the set instead of right after. - * The original id change right after is not changed, however it should not have any effect. - * @param entityId The id to be set for the entity - * @param entity The entity to be added - * @param ci Callback info - */ - @Inject(method = "addEntityToWorld", at=@At("HEAD")) - public void replayModReplay_fix_addEntityToWorld(int entityId, Entity entity, CallbackInfo ci) { - entity.setEntityId(entityId); - } + //$$ /** + //$$ * Fixes a bug in vanilla Minecraft that leaves entities remaining in the entityList even after respawn. + //$$ * The entityList in WorldClient is a Set that assumes that the entity ID of its entities does not change. + //$$ * However in {@link WorldClient#addEntityToWorld(int, Entity)}, the entity passed in is first added to the + //$$ * set and subsequently its id is changed, leaving it stuck in he Set. That is the buggy method. + //$$ * This wouldn't be too much of a problem if the entity had the correct id to begin with, however the handler for + //$$ * the spawn player packet creates an EntityOtherPlayerMP which takes its id from a counter and then passes it to + //$$ * this method with the wrong id. + //$$ * This mixin fixes the id of the entity before it is added to the set instead of right after. + //$$ * The original id change right after is not changed, however it should not have any effect. + //$$ * @param entityId The id to be set for the entity + //$$ * @param entity The entity to be added + //$$ * @param ci Callback info + //$$ */ + //$$ @Inject(method = "addEntityToWorld", at=@At("HEAD")) + //$$ public void replayModReplay_fix_addEntityToWorld(int entityId, Entity entity, CallbackInfo ci) { + //$$ entity.setEntityId(entityId); + //$$ } //#endif } diff --git a/src/main/java/com/replaymod/simplepathing/ReplayModSimplePathing.java b/src/main/java/com/replaymod/simplepathing/ReplayModSimplePathing.java index cf53c07f..6dd3c208 100644 --- a/src/main/java/com/replaymod/simplepathing/ReplayModSimplePathing.java +++ b/src/main/java/com/replaymod/simplepathing/ReplayModSimplePathing.java @@ -22,8 +22,8 @@ import com.replaymod.simplepathing.SPTimeline.SPPath; import com.replaymod.simplepathing.gui.GuiPathing; import com.replaymod.simplepathing.preview.PathPreview; import lombok.Getter; -import net.minecraft.crash.CrashReport; -import net.minecraft.crash.ReportedException; +import net.minecraft.util.crash.CrashReport; +import net.minecraft.util.crash.CrashException; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -107,7 +107,7 @@ public class ReplayModSimplePathing extends EventRegistrations implements Module } } } catch (IOException e) { - throw new ReportedException(CrashReport.makeCrashReport(e, "Reading timeline")); + throw new CrashException(CrashReport.create(e, "Reading timeline")); } guiPathing = new GuiPathing(core, this, replayHandler); @@ -223,8 +223,8 @@ public class ReplayModSimplePathing extends EventRegistrations implements Module String serialized = serialization.serialize(Collections.singletonMap("", spTimeline.getTimeline())); timeline = serialization.deserialize(serialized).get(""); } catch (Throwable t) { - CrashReport report = CrashReport.makeCrashReport(t, "Cloning timeline"); - throw new ReportedException(report); + CrashReport report = CrashReport.create(t, "Cloning timeline"); + throw new CrashException(report); } int id = lastSaveId.incrementAndGet(); diff --git a/src/main/java/com/replaymod/simplepathing/SPTimeline.java b/src/main/java/com/replaymod/simplepathing/SPTimeline.java index dca46937..f0223ed0 100644 --- a/src/main/java/com/replaymod/simplepathing/SPTimeline.java +++ b/src/main/java/com/replaymod/simplepathing/SPTimeline.java @@ -29,9 +29,9 @@ import com.replaymod.replaystudio.util.EntityPositionTracker; import com.replaymod.replaystudio.util.Location; import com.replaymod.simplepathing.properties.ExplicitInterpolationProperty; import lombok.Getter; -import net.minecraft.crash.CrashReport; -import net.minecraft.crash.CrashReportCategory; -import net.minecraft.crash.ReportedException; +import net.minecraft.util.crash.CrashReport; +import net.minecraft.util.crash.CrashReportSection; +import net.minecraft.util.crash.CrashException; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.Validate; import org.apache.commons.lang3.tuple.Triple; @@ -657,10 +657,10 @@ public class SPTimeline implements PathingRegistry { jsonWriter.endArray(); jsonWriter.flush(); } catch (IOException e) { - CrashReport crash = CrashReport.makeCrashReport(e, "Serializing interpolator"); - CrashReportCategory category = crash.makeCategory("Serializing interpolator"); + CrashReport crash = CrashReport.create(e, "Serializing interpolator"); + CrashReportSection category = crash.addElement("Serializing interpolator"); addDetail(category, "Interpolator", interpolator::toString); - throw new ReportedException(crash); + throw new CrashException(crash); } return baos.toString(); @@ -672,10 +672,10 @@ public class SPTimeline implements PathingRegistry { jsonReader.beginArray(); return deserializeInterpolator(jsonReader); } catch (IOException e) { - CrashReport crash = CrashReport.makeCrashReport(e, "De-serializing interpolator"); - CrashReportCategory category = crash.makeCategory("De-serializing interpolator"); + CrashReport crash = CrashReport.create(e, "De-serializing interpolator"); + CrashReportSection category = crash.addElement("De-serializing interpolator"); addDetail(category, "Interpolator", json::toString); - throw new ReportedException(crash); + throw new CrashException(crash); } } } diff --git a/src/main/java/com/replaymod/simplepathing/gui/GuiEditKeyframe.java b/src/main/java/com/replaymod/simplepathing/gui/GuiEditKeyframe.java index 9bdd2e4c..44e7925d 100644 --- a/src/main/java/com/replaymod/simplepathing/gui/GuiEditKeyframe.java +++ b/src/main/java/com/replaymod/simplepathing/gui/GuiEditKeyframe.java @@ -35,7 +35,7 @@ import de.johni0702.minecraft.gui.utils.Colors; import de.johni0702.minecraft.gui.utils.Consumer; import de.johni0702.minecraft.gui.utils.lwjgl.ReadablePoint; import lombok.Getter; -import net.minecraft.client.resources.I18n; +import net.minecraft.client.resource.language.I18n; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -289,7 +289,7 @@ public abstract class GuiEditKeyframe> extends Abst setLayout(new VerticalLayout()); dropdown = new GuiDropdownMenu() - .setToString(s -> I18n.format(s.getI18nName())) + .setToString(s -> I18n.translate(s.getI18nName())) .setValues(InterpolatorType.values()).setHeight(20) .onSelection(i -> setSettingsPanel(dropdown.getSelectedValue())); diff --git a/src/main/java/com/replaymod/simplepathing/gui/GuiPathing.java b/src/main/java/com/replaymod/simplepathing/gui/GuiPathing.java index 652dfd62..50730f81 100644 --- a/src/main/java/com/replaymod/simplepathing/gui/GuiPathing.java +++ b/src/main/java/com/replaymod/simplepathing/gui/GuiPathing.java @@ -49,7 +49,7 @@ import de.johni0702.minecraft.gui.utils.lwjgl.Dimension; import de.johni0702.minecraft.gui.utils.lwjgl.ReadableDimension; import de.johni0702.minecraft.gui.utils.lwjgl.ReadablePoint; import de.johni0702.minecraft.gui.utils.lwjgl.WritablePoint; -import net.minecraft.crash.CrashReport; +import net.minecraft.util.crash.CrashReport; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -110,7 +110,7 @@ public class GuiPathing { String serialized = serialization.serialize(Collections.singletonMap("", spTimeline.getTimeline())); timeline = serialization.deserialize(serialized).get(""); } catch (Throwable t) { - error(LOGGER, replayHandler.getOverlay(), CrashReport.makeCrashReport(t, "Cloning timeline"), () -> {}); + error(LOGGER, replayHandler.getOverlay(), CrashReport.create(t, "Cloning timeline"), () -> {}); return; } @@ -569,7 +569,7 @@ public class GuiPathing { public void onFailure(@Nonnull Throwable t) { String message = "Failed to load entity tracker, pathing will be unavailable."; GuiReplayOverlay overlay = replayHandler.getOverlay(); - Utils.error(LOGGER, overlay, CrashReport.makeCrashReport(t, message), popup::close); + Utils.error(LOGGER, overlay, CrashReport.create(t, message), popup::close); } }); return false; @@ -623,8 +623,8 @@ public class GuiPathing { if (!replayHandler.isCameraView()) { spectatedId = getRenderViewEntity(replayHandler.getOverlay().getMinecraft()).getEntityId(); } - timeline.addPositionKeyframe(time, camera.posX, camera.posY, camera.posZ, - camera.rotationYaw, camera.rotationPitch, camera.roll, spectatedId); + timeline.addPositionKeyframe(time, camera.x, camera.y, camera.z, + camera.yaw, camera.pitch, camera.roll, spectatedId); mod.setSelected(path, time); } break; diff --git a/src/main/java/com/replaymod/simplepathing/preview/PathPreviewRenderer.java b/src/main/java/com/replaymod/simplepathing/preview/PathPreviewRenderer.java index 5fe142b3..e776bbe2 100644 --- a/src/main/java/com/replaymod/simplepathing/preview/PathPreviewRenderer.java +++ b/src/main/java/com/replaymod/simplepathing/preview/PathPreviewRenderer.java @@ -16,19 +16,19 @@ import com.replaymod.simplepathing.ReplayModSimplePathing; import com.replaymod.simplepathing.SPTimeline; import com.replaymod.simplepathing.gui.GuiPathing; import de.johni0702.minecraft.gui.utils.EventRegistrations; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.MinecraftClient; +import com.mojang.blaze3d.platform.GlStateManager; import net.minecraft.entity.Entity; -import net.minecraft.util.ResourceLocation; +import net.minecraft.util.Identifier; import org.apache.commons.lang3.tuple.Pair; import org.apache.commons.lang3.tuple.Triple; import org.lwjgl.opengl.GL11; //#if MC>=11400 -//$$ import com.replaymod.core.events.PostRenderWorldCallback; +import com.replaymod.core.events.PostRenderWorldCallback; //#else -import net.minecraftforge.client.event.RenderWorldLastEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; +//$$ import net.minecraftforge.client.event.RenderWorldLastEvent; +//$$ import net.minecraftforge.eventbus.api.SubscribeEvent; //#endif import java.util.Comparator; @@ -38,8 +38,8 @@ import static com.replaymod.core.ReplayMod.TEXTURE; import static com.replaymod.core.versions.MCVer.*; public class PathPreviewRenderer extends EventRegistrations { - private static final ResourceLocation CAMERA_HEAD = new ResourceLocation("replaymod", "camera_head.png"); - private static final Minecraft mc = MCVer.getMinecraft(); + private static final Identifier CAMERA_HEAD = new Identifier("replaymod", "camera_head.png"); + private static final MinecraftClient mc = MCVer.getMinecraft(); private static final int SLOW_PATH_COLOR = 0xffcccc; private static final int FAST_PATH_COLOR = 0x660000; @@ -54,13 +54,13 @@ public class PathPreviewRenderer extends EventRegistrations { } //#if MC>=11400 - //$$ { on(PostRenderWorldCallback.EVENT, this::renderCameraPath); } - //$$ private void renderCameraPath() { + { on(PostRenderWorldCallback.EVENT, this::renderCameraPath); } + private void renderCameraPath() { //#else - @SubscribeEvent - public void renderCameraPath(RenderWorldLastEvent event) { + //$$ @SubscribeEvent + //$$ public void renderCameraPath(RenderWorldLastEvent event) { //#endif - if (!replayHandler.getReplaySender().isAsyncMode() || mc.gameSettings.hideGUI) return; + if (!replayHandler.getReplaySender().isAsyncMode() || mc.options.hudHidden) return; Entity view = getRenderViewEntity(mc); if (view == null) return; @@ -77,12 +77,12 @@ public class PathPreviewRenderer extends EventRegistrations { path.update(); - int renderDistance = mc.gameSettings.renderDistanceChunks * 16; + int renderDistance = mc.options.viewDistance * 16; int renderDistanceSquared = renderDistance * renderDistance; //#if MC>=10800 // Eye height is subtracted to make path appear higher (at eye height) than it actually is (at foot height) - Triple viewPos = Triple.of(view.posX, view.posY - view.getEyeHeight(), view.posZ); + Triple viewPos = Triple.of(view.x, view.y - view.getStandingEyeHeight(), view.z); //#else //$$ Triple viewPos = Triple.of(view.posX, view.posY, view.posZ); //#endif @@ -180,7 +180,7 @@ public class PathPreviewRenderer extends EventRegistrations { } } } finally { - GlStateManager.popAttrib(); + GlStateManager.popAttributes(); } } @@ -269,8 +269,8 @@ public class PathPreviewRenderer extends EventRegistrations { pos.getRight() - view.getRight() ); GL11.glNormal3f(0, 1, 0); - GL11.glRotatef(-getRenderManager().playerViewY, 0, 1, 0); - GL11.glRotatef(getRenderManager().playerViewX, 1, 0, 0); + GL11.glRotatef(-getRenderManager().cameraYaw, 0, 1, 0); + GL11.glRotatef(getRenderManager().cameraPitch, 1, 0, 0); Tessellator_getInstance().draw(); diff --git a/src/main/resources/mixins.core.replaymod.json b/src/main/resources/mixins.core.replaymod.json index f7180f32..67d49286 100644 --- a/src/main/resources/mixins.core.replaymod.json +++ b/src/main/resources/mixins.core.replaymod.json @@ -5,11 +5,11 @@ "server": [], "client": [ //#if MC>=11400 - //$$ "AbstractButtonWidgetAccessor", - //$$ "MixinGameRenderer", - //$$ "MixinScreen", - //$$ "MixinModResourcePackUtil", - //$$ "MixinMouseListener", + "AbstractButtonWidgetAccessor", + "MixinGameRenderer", + "MixinScreen", + "MixinModResourcePackUtil", + "MixinMouseListener", //#endif //#if MC>=11300 "MixinKeyboardListener", diff --git a/src/main/resources/mixins.render.replaymod.json b/src/main/resources/mixins.render.replaymod.json index 635b6f35..8b95ca80 100644 --- a/src/main/resources/mixins.render.replaymod.json +++ b/src/main/resources/mixins.render.replaymod.json @@ -8,7 +8,7 @@ "ChunkRenderDispatcherAccessor", //#endif //#if MC>=11400 - //$$ "MainWindowAccessor", + "MainWindowAccessor", //#endif "WorldRendererAccessor", //#if MC>=10904 diff --git a/src/main/resources/mixins.replay.replaymod.json b/src/main/resources/mixins.replay.replaymod.json index 306e1662..7abe6540 100644 --- a/src/main/resources/mixins.replay.replaymod.json +++ b/src/main/resources/mixins.replay.replaymod.json @@ -5,8 +5,8 @@ "server": [], "client": [ //#if MC>=11400 - //$$ "MixinCamera", - //$$ "MixinInGameHud", + "MixinCamera", + "MixinInGameHud", //#endif "EntityLivingBaseAccessor", //#if MC<11300 @@ -21,7 +21,7 @@ "MixinGuiSpectator", "MixinRenderArrow", //#if MC<11400 - "MixinRenderManager", + //$$ "MixinRenderManager", //#endif "MixinViewFrustum", //#endif diff --git a/versions/core/mcVersion b/versions/core/mcVersion index a2d6d3ef..af5d3ee7 100644 --- a/versions/core/mcVersion +++ b/versions/core/mcVersion @@ -1 +1 @@ -11302 \ No newline at end of file +11400 \ No newline at end of file