From 6f15df8081c429fcfe624d2a8927929b7fafe8f2 Mon Sep 17 00:00:00 2001 From: Jonas Herzig Date: Wed, 24 Apr 2019 18:07:46 +0200 Subject: [PATCH] Get compat module compiling on 1.13 --- .../com/replaymod/compat/ReplayModCompat.java | 46 ++-- .../DisableBetterSprinting.java | 234 +++++++++--------- .../mapwriter/mixin/MixinMinecraft.java | 74 +++--- .../compat/optifine/DisableFastRender.java | 16 +- .../compat/optifine/OptifineReflection.java | 2 +- .../HideInvisibleEntities.java | 22 +- .../compat/shaders/ShaderBeginRender.java | 4 +- .../mixin/MixinShaderEntityRenderer.java | 10 +- .../shaders/mixin/MixinShaderRenderChunk.java | 3 +- .../mixin/MixinShaderRenderGlobal.java | 14 +- .../shaders/mixin/MixinShadersRender.java | 10 +- .../java/com/replaymod/core/ReplayMod.java | 7 +- .../com/replaymod/core/versions/MCVer.java | 20 ++ .../mixins.compat.mapwriter.replaymod.json | 4 +- versions/1.13.2/mapping.txt | 4 +- versions/common.gradle | 1 - 16 files changed, 248 insertions(+), 223 deletions(-) diff --git a/src/main/java/com/replaymod/compat/ReplayModCompat.java b/src/main/java/com/replaymod/compat/ReplayModCompat.java index 725f6c19..e124b520 100644 --- a/src/main/java/com/replaymod/compat/ReplayModCompat.java +++ b/src/main/java/com/replaymod/compat/ReplayModCompat.java @@ -1,52 +1,36 @@ package com.replaymod.compat; -import com.replaymod.compat.bettersprinting.DisableBetterSprinting; import com.replaymod.compat.optifine.DisableFastRender; import com.replaymod.compat.oranges17animations.HideInvisibleEntities; +import com.replaymod.core.Module; +import net.minecraftforge.eventbus.api.IEventBus; +import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +//#if MC<11300 +//$$ import com.replaymod.compat.bettersprinting.DisableBetterSprinting; +//#endif + //#if MC>=10800 import com.replaymod.compat.shaders.ShaderBeginRender; -import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.fml.common.event.FMLInitializationEvent; -import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; -import net.minecraftforge.fml.common.eventhandler.EventBus; -//#else -//$$ import cpw.mods.fml.common.Mod; -//$$ import cpw.mods.fml.common.event.FMLInitializationEvent; -//$$ import cpw.mods.fml.common.event.FMLPreInitializationEvent; -//$$ import cpw.mods.fml.common.eventhandler.EventBus; //#endif import static com.replaymod.core.versions.MCVer.*; -@Mod(modid = ReplayModCompat.MOD_ID, - version = "@MOD_VERSION@", - acceptedMinecraftVersions = "@MC_VERSION@", - acceptableRemoteVersions = "*", - //#if MC>=10800 - clientSideOnly = true, - //#endif - useMetadata = true) -public class ReplayModCompat { - public static final String MOD_ID = "replaymod-compat"; +public class ReplayModCompat implements Module { + public static Logger LOGGER = LogManager.getLogger(); - public static Logger LOGGER; - - @Mod.EventHandler - public void preInit(FMLPreInitializationEvent event) { - LOGGER = event.getModLog(); - } - - @Mod.EventHandler - public void init(FMLInitializationEvent event) { - EventBus bus = FML_BUS; + @Override + public void initClient() { + IEventBus bus = FML_BUS; //#if MC>=10800 bus.register(new ShaderBeginRender()); //#endif bus.register(new DisableFastRender()); bus.register(new HideInvisibleEntities()); - DisableBetterSprinting.register(); + //#if MC<11300 + //$$ DisableBetterSprinting.register(); + //#endif } } diff --git a/src/main/java/com/replaymod/compat/bettersprinting/DisableBetterSprinting.java b/src/main/java/com/replaymod/compat/bettersprinting/DisableBetterSprinting.java index b7c4f227..a6c98770 100644 --- a/src/main/java/com/replaymod/compat/bettersprinting/DisableBetterSprinting.java +++ b/src/main/java/com/replaymod/compat/bettersprinting/DisableBetterSprinting.java @@ -1,38 +1,39 @@ -package com.replaymod.compat.bettersprinting; - -import com.replaymod.replay.ReplayModReplay; -import com.replaymod.replay.events.ReplayChatMessageEvent; -import net.minecraft.client.Minecraft; -import net.minecraft.client.multiplayer.PlayerControllerMP; -import net.minecraft.entity.Entity; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraftforge.client.event.GuiOpenEvent; -import net.minecraftforge.common.MinecraftForge; - +//#if MC<11300 +//$$ package com.replaymod.compat.bettersprinting; +//$$ +//$$ import com.replaymod.replay.ReplayModReplay; +//$$ import com.replaymod.replay.events.ReplayChatMessageEvent; +//$$ import net.minecraft.client.Minecraft; +//$$ import net.minecraft.client.multiplayer.PlayerControllerMP; +//$$ import net.minecraft.entity.Entity; +//$$ import net.minecraft.entity.player.EntityPlayer; +//$$ import net.minecraftforge.client.event.GuiOpenEvent; +//$$ import net.minecraftforge.common.MinecraftForge; +//$$ //#if MC>=10904 -import net.minecraft.block.state.IBlockState; -import net.minecraft.util.SoundCategory; -import net.minecraft.util.SoundEvent; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.IWorldEventListener; -import net.minecraft.world.World; - -import javax.annotation.Nullable; +//$$ import net.minecraft.block.state.IBlockState; +//$$ import net.minecraft.util.SoundCategory; +//$$ import net.minecraft.util.SoundEvent; +//$$ import net.minecraft.util.math.BlockPos; +//$$ import net.minecraft.world.IWorldEventListener; +//$$ import net.minecraft.world.World; +//$$ +//$$ import javax.annotation.Nullable; //#else //#if MC>= 10800 //$$ import net.minecraft.util.BlockPos; //#endif //$$ import net.minecraft.world.IWorldAccess; //#endif - +//$$ //#if MC>=10800 -import net.minecraftforge.fml.common.Loader; -import net.minecraftforge.fml.common.ModContainer; -import net.minecraftforge.fml.common.eventhandler.EventPriority; -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; -import net.minecraftforge.fml.common.versioning.DefaultArtifactVersion; -import net.minecraftforge.fml.common.versioning.Restriction; -import net.minecraftforge.fml.common.versioning.VersionRange; +//$$ import net.minecraftforge.fml.common.Loader; +//$$ import net.minecraftforge.fml.common.ModContainer; +//$$ import net.minecraftforge.fml.common.eventhandler.EventPriority; +//$$ import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +//$$ import net.minecraftforge.fml.common.versioning.DefaultArtifactVersion; +//$$ import net.minecraftforge.fml.common.versioning.Restriction; +//$$ import net.minecraftforge.fml.common.versioning.VersionRange; //#else //$$ import cpw.mods.fml.common.Loader; //$$ import cpw.mods.fml.common.ModContainer; @@ -42,103 +43,103 @@ import net.minecraftforge.fml.common.versioning.VersionRange; //$$ import cpw.mods.fml.common.versioning.Restriction; //$$ import cpw.mods.fml.common.versioning.VersionRange; //#endif - -import java.util.Collections; - -import static com.replaymod.compat.ReplayModCompat.LOGGER; -import static com.replaymod.core.versions.MCVer.*; - -/** - * Old Better Sprinting versions replace the vanilla player with their own, overridden instance (replacing the camera entity). - * - * See: https://github.com/chylex/Better-Sprinting/blob/1.8/src/main/java/chylex/bettersprinting/client/player/impl/LogicImplOverride.java - */ -public class DisableBetterSprinting { - private static final VersionRange OLD_VERSION = VersionRange.newRange(null, - Collections.singletonList(new Restriction(null, false, new DefaultArtifactVersion("2.0.0"), false))); - private static final String LOGIC_CLASS_NAME = "chylex.bettersprinting.client.player.impl.LogicImplOverride"; - private static final String CONTROLLER_OVERRIDE_CLASS_NAME = LOGIC_CLASS_NAME + "$PlayerControllerMPOverride"; - - public static void register() { - Loader.instance().getModList().stream() - .filter(mod -> mod.getModId().equalsIgnoreCase("bettersprinting")) - .findFirst() - .map(ModContainer::getProcessedVersion).filter(OLD_VERSION::containsVersion) - .ifPresent($_ -> MinecraftForge.EVENT_BUS.register(new DisableBetterSprinting())); - } - - private DisableBetterSprinting() { - LOGGER.info("BetterSprinting workaround enabled"); - } - - private final Minecraft mc = Minecraft.getMinecraft(); - private PlayerControllerMP originalController; - private BetterSprintingWorldAccess worldAccessHook = new BetterSprintingWorldAccess(); - - @SubscribeEvent(priority = EventPriority.HIGH) - public void beforeGuiOpenEvent(GuiOpenEvent event) { - if (ReplayModReplay.instance.getReplayHandler() != null && world(mc) != null) { - // During replay, get ready to revert BetterSprinting's overwritten playerController - originalController = mc.playerController; +//$$ +//$$ import java.util.Collections; +//$$ +//$$ import static com.replaymod.compat.ReplayModCompat.LOGGER; +//$$ import static com.replaymod.core.versions.MCVer.*; +//$$ +//$$ /** +//$$ * Old Better Sprinting versions replace the vanilla player with their own, overridden instance (replacing the camera entity). +//$$ * +//$$ * See: https://github.com/chylex/Better-Sprinting/blob/1.8/src/main/java/chylex/bettersprinting/client/player/impl/LogicImplOverride.java +//$$ */ +//$$ public class DisableBetterSprinting { +//$$ private static final VersionRange OLD_VERSION = VersionRange.newRange(null, +//$$ Collections.singletonList(new Restriction(null, false, new DefaultArtifactVersion("2.0.0"), false))); +//$$ private static final String LOGIC_CLASS_NAME = "chylex.bettersprinting.client.player.impl.LogicImplOverride"; +//$$ private static final String CONTROLLER_OVERRIDE_CLASS_NAME = LOGIC_CLASS_NAME + "$PlayerControllerMPOverride"; +//$$ +//$$ public static void register() { +//$$ Loader.instance().getModList().stream() +//$$ .filter(mod -> mod.getModId().equalsIgnoreCase("bettersprinting")) +//$$ .findFirst() +//$$ .map(ModContainer::getProcessedVersion).filter(OLD_VERSION::containsVersion) +//$$ .ifPresent($_ -> MinecraftForge.EVENT_BUS.register(new DisableBetterSprinting())); +//$$ } +//$$ +//$$ private DisableBetterSprinting() { +//$$ LOGGER.info("BetterSprinting workaround enabled"); +//$$ } +//$$ +//$$ private final Minecraft mc = Minecraft.getMinecraft(); +//$$ private PlayerControllerMP originalController; +//$$ private BetterSprintingWorldAccess worldAccessHook = new BetterSprintingWorldAccess(); +//$$ +//$$ @SubscribeEvent(priority = EventPriority.HIGH) +//$$ public void beforeGuiOpenEvent(GuiOpenEvent event) { +//$$ if (ReplayModReplay.instance.getReplayHandler() != null && mc.world != null) { +//$$ // During replay, get ready to revert BetterSprinting's overwritten playerController +//$$ originalController = mc.playerController; //#if MC>=10904 - world(mc).addEventListener(worldAccessHook); + //$$ mc.world.addEventListener(worldAccessHook); //#else - //$$ world(mc).addWorldAccess(worldAccessHook); + //$$ mc.theWorld.addWorldAccess(worldAccessHook); //#endif - } - } - - @SubscribeEvent(priority = EventPriority.LOW) - public void afterGuiOpenEvent(GuiOpenEvent event) { - if (ReplayModReplay.instance.getReplayHandler() != null && world(mc) != null) { +//$$ } +//$$ } +//$$ +//$$ @SubscribeEvent(priority = EventPriority.LOW) +//$$ public void afterGuiOpenEvent(GuiOpenEvent event) { +//$$ if (ReplayModReplay.instance.getReplayHandler() != null && mc.world != null) { //#if MC>=10904 - world(mc).addEventListener(worldAccessHook); + //$$ mc.world.addEventListener(worldAccessHook); //#else - //$$ world(mc).addWorldAccess(worldAccessHook); + //$$ mc.theWorld.addWorldAccess(worldAccessHook); //#endif - } - } - - @SubscribeEvent - public void onReplayChatMessage(ReplayChatMessageEvent event) { - // Suppress this message if it's the Better Sprinting warning message - for (StackTraceElement elem : Thread.currentThread().getStackTrace()) { - if (LOGIC_CLASS_NAME.equals(elem.getClassName())) { - LOGGER.info("BetterSprinting warning message suppressed."); - event.setCanceled(true); - return; - } - } - } - - private class BetterSprintingWorldAccess +//$$ } +//$$ } +//$$ +//$$ @SubscribeEvent +//$$ public void onReplayChatMessage(ReplayChatMessageEvent event) { +//$$ // Suppress this message if it's the Better Sprinting warning message +//$$ for (StackTraceElement elem : Thread.currentThread().getStackTrace()) { +//$$ if (LOGIC_CLASS_NAME.equals(elem.getClassName())) { +//$$ LOGGER.info("BetterSprinting warning message suppressed."); +//$$ event.setCanceled(true); +//$$ return; +//$$ } +//$$ } +//$$ } +//$$ +//$$ private class BetterSprintingWorldAccess //#if MC>=10904 - implements IWorldEventListener + //$$ implements IWorldEventListener //#else //$$ implements IWorldAccess //#endif - { - @Override +//$$ { +//$$ @Override //#if MC>=10800 - public void onEntityRemoved(Entity entityIn) { + //$$ public void onEntityRemoved(Entity entityIn) { //#else //$$ public void onEntityDestroy(Entity entityIn) { //#endif - if (mc.playerController != null && mc.playerController.getClass().getName().equals(CONTROLLER_OVERRIDE_CLASS_NAME)) { - // Someone has secretly swapped out the player controller and is about to substitute their own player entity. - // This is the right time to destroy their plan. - LOGGER.info("Preventing player controller {} from being replaced by BetterSprinting with {}.", originalController, mc.playerController); - mc.playerController = originalController; - } - } - - @Override public void markBlockRangeForRenderUpdate(int x1, int y1, int z1, int x2, int y2, int z2) {} +//$$ if (mc.playerController != null && mc.playerController.getClass().getName().equals(CONTROLLER_OVERRIDE_CLASS_NAME)) { +//$$ // Someone has secretly swapped out the player controller and is about to substitute their own player entity. +//$$ // This is the right time to destroy their plan. +//$$ LOGGER.info("Preventing player controller {} from being replaced by BetterSprinting with {}.", originalController, mc.playerController); +//$$ mc.playerController = originalController; +//$$ } +//$$ } +//$$ +//$$ @Override public void markBlockRangeForRenderUpdate(int x1, int y1, int z1, int x2, int y2, int z2) {} //#if MC>=10800 - @Override public void notifyLightSet(BlockPos pos) {} - @Override public void spawnParticle(int p_180442_1_, boolean p_180442_2_, double p_180442_3_, double p_180442_5_, double p_180442_7_, double p_180442_9_, double p_180442_11_, double p_180442_13_, int... p_180442_15_) {} - @Override public void onEntityAdded(Entity entityIn) {} - @Override public void broadcastSound(int p_180440_1_, BlockPos p_180440_2_, int p_180440_3_) {} - @Override public void sendBlockBreakProgress(int breakerId, BlockPos pos, int progress) {} + //$$ @Override public void notifyLightSet(BlockPos pos) {} + //$$ @Override public void spawnParticle(int p_180442_1_, boolean p_180442_2_, double p_180442_3_, double p_180442_5_, double p_180442_7_, double p_180442_9_, double p_180442_11_, double p_180442_13_, int... p_180442_15_) {} + //$$ @Override public void onEntityAdded(Entity entityIn) {} + //$$ @Override public void broadcastSound(int p_180440_1_, BlockPos p_180440_2_, int p_180440_3_) {} + //$$ @Override public void sendBlockBreakProgress(int breakerId, BlockPos pos, int progress) {} //#else //$$ @Override public void markBlockForRenderUpdate(int x, int y, int z) {} //$$ @Override public void spawnParticle(String p_72708_1_, double p_72708_2_, double p_72708_4_, double p_72708_6_, double p_72708_8_, double p_72708_10_, double p_72708_12_) {} @@ -148,13 +149,13 @@ public class DisableBetterSprinting { //$$ @Override public void onStaticEntitiesChanged() {} //#endif //#if MC>=10904 - @Override public void notifyBlockUpdate(World worldIn, BlockPos pos, IBlockState oldState, IBlockState newState, int flags) {} - @Override public void playSoundToAllNearExcept(@Nullable EntityPlayer player, SoundEvent soundIn, SoundCategory category, double x, double y, double z, float volume, float pitch) {} - @Override public void playRecord(SoundEvent soundIn, BlockPos pos) {} - @Override public void playEvent(EntityPlayer player, int type, BlockPos blockPosIn, int data) {} + //$$ @Override public void notifyBlockUpdate(World worldIn, BlockPos pos, IBlockState oldState, IBlockState newState, int flags) {} + //$$ @Override public void playSoundToAllNearExcept(@Nullable EntityPlayer player, SoundEvent soundIn, SoundCategory category, double x, double y, double z, float volume, float pitch) {} + //$$ @Override public void playRecord(SoundEvent soundIn, BlockPos pos) {} + //$$ @Override public void playEvent(EntityPlayer player, int type, BlockPos blockPosIn, int data) {} //#if MC>=11100 //#if MC>=11102 - @Override public void spawnParticle(int p_190570_1_, boolean p_190570_2_, boolean p_190570_3_, double p_190570_4_, double p_190570_6_, double p_190570_8_, double p_190570_10_, double p_190570_12_, double p_190570_14_, int... p_190570_16_) {} + //$$ @Override public void spawnParticle(int p_190570_1_, boolean p_190570_2_, boolean p_190570_3_, double p_190570_4_, double p_190570_6_, double p_190570_8_, double p_190570_10_, double p_190570_12_, double p_190570_14_, int... p_190570_16_) {} //#else //$$ @Override public void func_190570_a(int p_190570_1_, boolean p_190570_2_, boolean p_190570_3_, double p_190570_4_, double p_190570_6_, double p_190570_8_, double p_190570_10_, double p_190570_12_, double p_190570_14_, int... p_190570_16_) {} //#endif @@ -179,5 +180,6 @@ public class DisableBetterSprinting { //#endif //#endif //#endif - } -} +//$$ } +//$$ } +//#endif diff --git a/src/main/java/com/replaymod/compat/mapwriter/mixin/MixinMinecraft.java b/src/main/java/com/replaymod/compat/mapwriter/mixin/MixinMinecraft.java index 7a4a792c..47372d3f 100644 --- a/src/main/java/com/replaymod/compat/mapwriter/mixin/MixinMinecraft.java +++ b/src/main/java/com/replaymod/compat/mapwriter/mixin/MixinMinecraft.java @@ -1,44 +1,46 @@ -package com.replaymod.compat.mapwriter.mixin; - -import com.replaymod.replay.ReplayModReplay; -import net.minecraft.client.Minecraft; -import net.minecraft.client.multiplayer.ServerData; -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.CallbackInfoReturnable; - +//#if MC<11300 +//$$ package com.replaymod.compat.mapwriter.mixin; +//$$ +//$$ import com.replaymod.replay.ReplayModReplay; +//$$ import net.minecraft.client.Minecraft; +//$$ import net.minecraft.client.multiplayer.ServerData; +//$$ 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.CallbackInfoReturnable; +//$$ //#if MC>=10800 -import net.minecraftforge.fml.common.Loader; +//$$ import net.minecraftforge.fml.common.Loader; //#else //$$ import cpw.mods.fml.common.Loader; //#endif - -/** - * Approximately this for <1.12: https://github.com/Vectron/mapwriter/commit/68234520c7a3a0ae8201a085d7e66369900586ac - */ -@Mixin(Minecraft.class) -public abstract class MixinMinecraft { - - @Shadow - private ServerData currentServerData; - - @Inject(method = "getCurrentServerData", cancellable = true, at = @At("HEAD")) - private void replayModCompat_fixBug96(CallbackInfoReturnable ci) { - if (currentServerData == null - && (Loader.isModLoaded("mapwriter") || Loader.isModLoaded("MapWriter")) - && ReplayModReplay.instance.getReplayHandler() != null) { - for (StackTraceElement elem : Thread.currentThread().getStackTrace()) { - if ("mapwriter.util.Utils".equals(elem.getClassName()) && "getWorldName".equals(elem.getMethodName())) { +//$$ +//$$ /** +//$$ * Approximately this for <1.12: https://github.com/Vectron/mapwriter/commit/68234520c7a3a0ae8201a085d7e66369900586ac +//$$ */ +//$$ @Mixin(Minecraft.class) +//$$ public abstract class MixinMinecraft { +//$$ +//$$ @Shadow +//$$ private ServerData currentServerData; +//$$ +//$$ @Inject(method = "getCurrentServerData", cancellable = true, at = @At("HEAD")) +//$$ private void replayModCompat_fixBug96(CallbackInfoReturnable ci) { +//$$ if (currentServerData == null +//$$ && (Loader.isModLoaded("mapwriter") || Loader.isModLoaded("MapWriter")) +//$$ && ReplayModReplay.instance.getReplayHandler() != null) { +//$$ for (StackTraceElement elem : Thread.currentThread().getStackTrace()) { +//$$ if ("mapwriter.util.Utils".equals(elem.getClassName()) && "getWorldName".equals(elem.getMethodName())) { //#if MC>=10809 - ci.setReturnValue(new ServerData(null, "replay", false)); + //$$ ci.setReturnValue(new ServerData(null, "replay", false)); //#else //$$ ci.setReturnValue(new ServerData(null, "replay")); //#endif - return; - } - } - } - } -} +//$$ return; +//$$ } +//$$ } +//$$ } +//$$ } +//$$ } +//#endif diff --git a/src/main/java/com/replaymod/compat/optifine/DisableFastRender.java b/src/main/java/com/replaymod/compat/optifine/DisableFastRender.java index 180626ae..35b221af 100644 --- a/src/main/java/com/replaymod/compat/optifine/DisableFastRender.java +++ b/src/main/java/com/replaymod/compat/optifine/DisableFastRender.java @@ -1,25 +1,19 @@ package com.replaymod.compat.optifine; +import com.replaymod.core.versions.MCVer; import com.replaymod.render.events.ReplayRenderEvent; import net.minecraft.client.Minecraft; - -//#if MC>=10800 -import net.minecraftforge.fml.client.FMLClientHandler; -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; -//#else -//$$ import cpw.mods.fml.client.FMLClientHandler; -//$$ import cpw.mods.fml.common.eventhandler.SubscribeEvent; -//#endif +import net.minecraftforge.eventbus.api.SubscribeEvent; public class DisableFastRender { - private final Minecraft mc = Minecraft.getMinecraft(); + private final Minecraft mc = Minecraft.getInstance(); private boolean wasFastRender = false; @SubscribeEvent public void onRenderBegin(ReplayRenderEvent.Pre event) { - if (!FMLClientHandler.instance().hasOptifine()) return; + if (!MCVer.hasOptifine()) return; try { wasFastRender = (boolean) OptifineReflection.gameSettings_ofFastRender.get(mc.gameSettings); @@ -31,7 +25,7 @@ public class DisableFastRender { @SubscribeEvent public void onRenderEnd(ReplayRenderEvent.Post event){ - if (!FMLClientHandler.instance().hasOptifine()) return; + if (!MCVer.hasOptifine()) return; try { OptifineReflection.gameSettings_ofFastRender.set(mc.gameSettings, wasFastRender); diff --git a/src/main/java/com/replaymod/compat/optifine/OptifineReflection.java b/src/main/java/com/replaymod/compat/optifine/OptifineReflection.java index b05205d2..58abfc7b 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.settings.GameSettings; +import net.minecraft.client.GameSettings; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; diff --git a/src/main/java/com/replaymod/compat/oranges17animations/HideInvisibleEntities.java b/src/main/java/com/replaymod/compat/oranges17animations/HideInvisibleEntities.java index 63fa36f5..64729f18 100644 --- a/src/main/java/com/replaymod/compat/oranges17animations/HideInvisibleEntities.java +++ b/src/main/java/com/replaymod/compat/oranges17animations/HideInvisibleEntities.java @@ -3,15 +3,13 @@ package com.replaymod.compat.oranges17animations; import com.replaymod.replay.camera.CameraEntity; import net.minecraft.client.Minecraft; import net.minecraftforge.client.event.RenderLivingEvent; +import net.minecraftforge.eventbus.api.EventPriority; +import net.minecraftforge.eventbus.api.SubscribeEvent; -//#if MC>=10800 -import net.minecraftforge.fml.common.Loader; -import net.minecraftforge.fml.common.eventhandler.EventPriority; -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +//#if MC>=11300 +import net.minecraftforge.fml.ModList; //#else -//$$ import cpw.mods.fml.common.Loader; -//$$ import cpw.mods.fml.common.eventhandler.EventPriority; -//$$ import cpw.mods.fml.common.eventhandler.SubscribeEvent; +//$$ import net.minecraftforge.fml.common.Loader; //#endif import static com.replaymod.core.versions.MCVer.*; @@ -23,13 +21,17 @@ import static com.replaymod.core.versions.MCVer.*; * To fix this issue, we simply cancel the RenderLivingEvent.Pre before it gets to ArmorAnimation if the entity is invisible. */ public class HideInvisibleEntities { - private final Minecraft mc = Minecraft.getMinecraft(); - private final boolean modLoaded = Loader.isModLoaded("animations"); + private final Minecraft mc = Minecraft.getInstance(); + //#if MC>=11300 + private final boolean modLoaded = ModList.get().isLoaded("animations"); + //#else + //$$ private final boolean modLoaded = Loader.isModLoaded("animations"); + //#endif @SubscribeEvent(priority = EventPriority.HIGH) public void preRenderLiving(RenderLivingEvent.Pre event) { if (modLoaded) { - if (player(mc) instanceof CameraEntity && getEntity(event).isInvisible()) { + if (mc.player instanceof CameraEntity && getEntity(event).isInvisible()) { event.setCanceled(true); } } diff --git a/src/main/java/com/replaymod/compat/shaders/ShaderBeginRender.java b/src/main/java/com/replaymod/compat/shaders/ShaderBeginRender.java index 7079b1bc..765103fc 100644 --- a/src/main/java/com/replaymod/compat/shaders/ShaderBeginRender.java +++ b/src/main/java/com/replaymod/compat/shaders/ShaderBeginRender.java @@ -3,14 +3,14 @@ package com.replaymod.compat.shaders; import com.replaymod.render.hooks.EntityRendererHandler; import net.minecraft.client.Minecraft; -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.gameevent.TickEvent; import java.lang.reflect.InvocationTargetException; public class ShaderBeginRender { - private final Minecraft mc = Minecraft.getMinecraft(); + private final Minecraft mc = Minecraft.getInstance(); /** * Invokes Shaders#beginRender when rendering a video, 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 2f2dad10..4b5e2998 100644 --- a/src/main/java/com/replaymod/compat/shaders/mixin/MixinShaderEntityRenderer.java +++ b/src/main/java/com/replaymod/compat/shaders/mixin/MixinShaderEntityRenderer.java @@ -4,16 +4,20 @@ 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.EntityRenderer; +import net.minecraft.client.renderer.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(EntityRenderer.class) +@Mixin(GameRenderer.class) public abstract class MixinShaderEntityRenderer { - @Inject(method = "renderWorldPass", at = @At("HEAD")) + //#if MC>=11300 + @Inject(method = "updateCameraAndRender(FJ)V", at = @At("HEAD")) + //#else + //$$ @Inject(method = "renderWorldPass", at = @At("HEAD")) + //#endif private void replayModCompat_updateShaderFrameTimeCounter(CallbackInfo ignore) { if (ReplayModReplay.instance.getReplayHandler() == null) return; if (ShaderReflection.shaders_frameTimeCounter == null) return; 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 34395dd7..d46a41c8 100644 --- a/src/main/java/com/replaymod/compat/shaders/mixin/MixinShaderRenderChunk.java +++ b/src/main/java/com/replaymod/compat/shaders/mixin/MixinShaderRenderChunk.java @@ -12,7 +12,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @Mixin(RenderChunk.class) public abstract class MixinShaderRenderChunk { - private final Minecraft mc = Minecraft.getMinecraft(); + private final Minecraft mc = Minecraft.getInstance(); /** * Changes the RenderChunk#isPlayerUpdate method that Optifine adds @@ -22,6 +22,7 @@ public abstract class MixinShaderRenderChunk { @Inject(method = "isPlayerUpdate", at = @At("HEAD"), cancellable = true) 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; 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 15cafb72..4f1e04be 100644 --- a/src/main/java/com/replaymod/compat/shaders/mixin/MixinShaderRenderGlobal.java +++ b/src/main/java/com/replaymod/compat/shaders/mixin/MixinShaderRenderGlobal.java @@ -4,7 +4,7 @@ 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.RenderGlobal; +import net.minecraft.client.renderer.WorldRenderer; import net.minecraft.client.renderer.culling.ICamera; import net.minecraft.entity.Entity; import org.spongepowered.asm.mixin.Mixin; @@ -13,16 +13,22 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -@Mixin(RenderGlobal.class) +@Mixin(WorldRenderer.class) public abstract class MixinShaderRenderGlobal { - private final Minecraft mc = Minecraft.getMinecraft(); + private final Minecraft mc = Minecraft.getInstance(); @Shadow public boolean displayListEntitiesDirty; @Inject(method = "setupTerrain", at = @At("HEAD"), cancellable = true) - public void replayModCompat_setupTerrain(Entity viewEntity, double partialTicks, ICamera camera, + public void replayModCompat_setupTerrain(Entity viewEntity, + //#if MC>=11300 + float partialTicks, + //#else + //$$ double partialTicks, + //#endif + ICamera camera, int frameCount, boolean playerSpectator, CallbackInfo ci) { if (((EntityRendererHandler.IEntityRenderer) mc.entityRenderer).replayModRender_getHandler() == null) return; if (ShaderReflection.shaders_isShadowPass == null) return; 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 0ba5299f..51df262b 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.EntityRenderer; +import net.minecraft.client.renderer.GameRenderer; import net.minecraftforge.client.ForgeHooksClient; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Pseudo; @@ -16,8 +16,12 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; public abstract class MixinShadersRender { @Inject(method = "renderHand0", at = @At("HEAD"), cancellable = true) - private static void replayModCompat_disableRenderHand0(EntityRenderer er, float partialTicks, int renderPass, CallbackInfo ci) { - if (ForgeHooksClient.renderFirstPersonHand(er.mc.renderGlobal, partialTicks, renderPass)) { + private static void replayModCompat_disableRenderHand0(GameRenderer er, float partialTicks, int renderPass, CallbackInfo ci) { + //#if MC>=11300 + if (ForgeHooksClient.renderFirstPersonHand(er.getMinecraft().renderGlobal, partialTicks)) { + //#else + //$$ if (ForgeHooksClient.renderFirstPersonHand(er.mc.renderGlobal, partialTicks, renderPass)) { + //#endif ci.cancel(); } } diff --git a/src/main/java/com/replaymod/core/ReplayMod.java b/src/main/java/com/replaymod/core/ReplayMod.java index aeca90f0..28d0848e 100755 --- a/src/main/java/com/replaymod/core/ReplayMod.java +++ b/src/main/java/com/replaymod/core/ReplayMod.java @@ -2,6 +2,7 @@ package com.replaymod.core; import com.google.common.io.Files; import com.google.common.util.concurrent.ListenableFutureTask; +import com.replaymod.compat.ReplayModCompat; import com.replaymod.core.gui.GuiBackgroundProcesses; import com.replaymod.core.gui.GuiReplaySettings; import com.replaymod.core.gui.RestoreReplayGui; @@ -164,6 +165,7 @@ public class ReplayMod implements Module { modules.add(new ReplayModSimplePathing(this)); modules.add(new ReplayModEditor(this)); modules.add(new ReplayModExtras(this)); + modules.add(new ReplayModCompat()); //#if MC>=11300 settingsRegistry.register(); @@ -284,8 +286,9 @@ public class ReplayMod implements Module { // 1.7.10 crashes when render distance > 16 //#if MC>=10800 - //if(!FMLClientHandler.instance().hasOptifine()) FIXME 1.13 update - GameSettings.Options.RENDER_DISTANCE.setValueMax(64f); + if (!MCVer.hasOptifine()) { + GameSettings.Options.RENDER_DISTANCE.setValueMax(64f); + } //#endif testIfMoeshAndExitMinecraft(); diff --git a/src/main/java/com/replaymod/core/versions/MCVer.java b/src/main/java/com/replaymod/core/versions/MCVer.java index 02a911d9..c196ce40 100644 --- a/src/main/java/com/replaymod/core/versions/MCVer.java +++ b/src/main/java/com/replaymod/core/versions/MCVer.java @@ -32,6 +32,7 @@ import org.lwjgl.glfw.GLFW; //#else //$$ import net.minecraft.client.gui.ScaledResolution; //$$ import net.minecraft.client.resources.ResourcePackRepository; +//$$ import net.minecraftforge.fml.client.FMLClientHandler; //$$ import org.apache.logging.log4j.LogManager; //$$ import org.lwjgl.Sys; //$$ import java.awt.Desktop; @@ -494,6 +495,25 @@ public class MCVer { //#endif } + //#if MC>=11300 + private static Boolean hasOptifine; + public static boolean hasOptifine() { + if (hasOptifine == null) { + try { + Class.forName("Config"); + hasOptifine = true; + } catch (ClassNotFoundException e) { + hasOptifine = false; + } + } + return hasOptifine; + } + //#else + //$$ public static boolean hasOptifine() { + //$$ return FMLClientHandler.instance().hasOptifine(); + //$$ } + //#endif + //#if MC<=10710 //$$ public static class GlStateManager { //$$ public static void resetColor() { /* nop */ } diff --git a/src/main/resources/mixins.compat.mapwriter.replaymod.json b/src/main/resources/mixins.compat.mapwriter.replaymod.json index eb02cea2..b6b29316 100644 --- a/src/main/resources/mixins.compat.mapwriter.replaymod.json +++ b/src/main/resources/mixins.compat.mapwriter.replaymod.json @@ -4,7 +4,9 @@ "mixins": [], "server": [], "client": [ - "MixinMinecraft" + //#if MC<11300 + //$$ "MixinMinecraft" + //#endif ], "compatibilityLevel": "JAVA_8", "minVersion": "0.6.11", diff --git a/versions/1.13.2/mapping.txt b/versions/1.13.2/mapping.txt index 9e5c2441..738f9240 100644 --- a/versions/1.13.2/mapping.txt +++ b/versions/1.13.2/mapping.txt @@ -18,4 +18,6 @@ net.minecraftforge.fml.network.NetworkRegistry net.minecraftforge.fml.common.net net.minecraft.client.renderer.ItemRenderer net.minecraft.client.renderer.RenderItem net.minecraft.world.World getChunk() getChunkFromChunkCoords() net.minecraft.util.text.ITextComponent getString() getUnformattedText() -net.minecraft.network.play.server.SPacketRespawn func_212643_b() getDimensionID() \ No newline at end of file +net.minecraft.network.play.server.SPacketRespawn func_212643_b() getDimensionID() +net.minecraft.client.renderer.GameRenderer net.minecraft.client.renderer.EntityRenderer +net.minecraft.client.renderer.WorldRenderer net.minecraft.client.renderer.RenderGlobal \ No newline at end of file diff --git a/versions/common.gradle b/versions/common.gradle index 221f2cbf..cc43fc55 100644 --- a/versions/common.gradle +++ b/versions/common.gradle @@ -282,7 +282,6 @@ if (project.name != 'core') { sourceSets { main { java { - exclude 'com/replaymod/compat' exclude 'com/replaymod/restrictions' } }