Switch core to 1.14 (generated via ./gradlew :1.14:setCoreVersion)

This commit is contained in:
Jonas Herzig
2019-05-10 14:09:22 +02:00
parent 7f7d33def8
commit 7cbf7f7c94
183 changed files with 3250 additions and 3250 deletions

2
jGui

Submodule jGui updated: 717ac58178...e0af866315

View File

@@ -6,7 +6,7 @@ import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
//#if MC<11400 //#if MC<11400
import com.replaymod.compat.oranges17animations.HideInvisibleEntities; //$$ import com.replaymod.compat.oranges17animations.HideInvisibleEntities;
//#endif //#endif
//#if MC<11300 //#if MC<11300
@@ -27,7 +27,7 @@ public class ReplayModCompat implements Module {
//#endif //#endif
new DisableFastRender().register(); new DisableFastRender().register();
//#if MC<11400 //#if MC<11400
new HideInvisibleEntities().register(); //$$ new HideInvisibleEntities().register();
//#endif //#endif
//#if MC<11300 //#if MC<11300
//$$ DisableBetterSprinting.register(); //$$ DisableBetterSprinting.register();

View File

@@ -3,11 +3,11 @@ package com.replaymod.compat.optifine;
import de.johni0702.minecraft.gui.utils.EventRegistrations; import de.johni0702.minecraft.gui.utils.EventRegistrations;
import com.replaymod.core.versions.MCVer; import com.replaymod.core.versions.MCVer;
import com.replaymod.render.events.ReplayRenderCallback; import com.replaymod.render.events.ReplayRenderCallback;
import net.minecraft.client.Minecraft; import net.minecraft.client.MinecraftClient;
public class DisableFastRender extends EventRegistrations { public class DisableFastRender extends EventRegistrations {
private final Minecraft mc = Minecraft.getInstance(); private final MinecraftClient mc = MinecraftClient.getInstance();
private boolean wasFastRender = false; private boolean wasFastRender = false;
@@ -16,8 +16,8 @@ public class DisableFastRender extends EventRegistrations {
if (!MCVer.hasOptifine()) return; if (!MCVer.hasOptifine()) return;
try { try {
wasFastRender = (boolean) OptifineReflection.gameSettings_ofFastRender.get(mc.gameSettings); wasFastRender = (boolean) OptifineReflection.gameSettings_ofFastRender.get(mc.options);
OptifineReflection.gameSettings_ofFastRender.set(mc.gameSettings, false); OptifineReflection.gameSettings_ofFastRender.set(mc.options, false);
} catch (IllegalAccessException e) { } catch (IllegalAccessException e) {
e.printStackTrace(); e.printStackTrace();
} }
@@ -28,7 +28,7 @@ public class DisableFastRender extends EventRegistrations {
if (!MCVer.hasOptifine()) return; if (!MCVer.hasOptifine()) return;
try { try {
OptifineReflection.gameSettings_ofFastRender.set(mc.gameSettings, wasFastRender); OptifineReflection.gameSettings_ofFastRender.set(mc.options, wasFastRender);
} catch (IllegalAccessException e) { } catch (IllegalAccessException e) {
e.printStackTrace(); e.printStackTrace();
} }

View File

@@ -1,6 +1,6 @@
package com.replaymod.compat.optifine; 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.Field;
import java.lang.reflect.InvocationTargetException; import java.lang.reflect.InvocationTargetException;
@@ -15,7 +15,7 @@ public class OptifineReflection {
// this throws an ignored ClassNotFoundException if Optifine isn't installed // this throws an ignored ClassNotFoundException if Optifine isn't installed
Class.forName("Config"); Class.forName("Config");
gameSettings_ofFastRender = GameSettings.class.getDeclaredField("ofFastRender"); gameSettings_ofFastRender = GameOptions.class.getDeclaredField("ofFastRender");
gameSettings_ofFastRender.setAccessible(true); gameSettings_ofFastRender.setAccessible(true);
} catch (ClassNotFoundException ignore) { } catch (ClassNotFoundException ignore) {
// no optifine installed // no optifine installed

View File

@@ -1,32 +1,32 @@
//#if MC<11400 //#if MC<11400
package com.replaymod.compat.oranges17animations; //$$ package com.replaymod.compat.oranges17animations;
//$$
import com.replaymod.replay.camera.CameraEntity; //$$ import com.replaymod.replay.camera.CameraEntity;
import de.johni0702.minecraft.gui.utils.EventRegistrations; //$$ import de.johni0702.minecraft.gui.utils.EventRegistrations;
import net.minecraft.client.Minecraft; //$$ import net.minecraft.client.Minecraft;
import net.minecraftforge.client.event.RenderLivingEvent; //$$ import net.minecraftforge.client.event.RenderLivingEvent;
import net.minecraftforge.eventbus.api.EventPriority; //$$ import net.minecraftforge.eventbus.api.EventPriority;
import net.minecraftforge.eventbus.api.SubscribeEvent; //$$ import net.minecraftforge.eventbus.api.SubscribeEvent;
//$$
import static com.replaymod.core.versions.MCVer.*; //$$ 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. //$$ * 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. //$$ * 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. //$$ * 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 { //$$ public class HideInvisibleEntities extends EventRegistrations {
private final Minecraft mc = Minecraft.getInstance(); //$$ private final Minecraft mc = Minecraft.getInstance();
private final boolean modLoaded = isModLoaded("animations"); //$$ private final boolean modLoaded = isModLoaded("animations");
//$$
@SubscribeEvent(priority = EventPriority.HIGH) //$$ @SubscribeEvent(priority = EventPriority.HIGH)
public void preRenderLiving(RenderLivingEvent.Pre event) { //$$ public void preRenderLiving(RenderLivingEvent.Pre event) {
if (modLoaded) { //$$ if (modLoaded) {
if (mc.player instanceof CameraEntity && getEntity(event).isInvisible()) { //$$ if (mc.player instanceof CameraEntity && getEntity(event).isInvisible()) {
event.setCanceled(true); //$$ event.setCanceled(true);
} //$$ }
} //$$ }
} //$$ }
} //$$ }
//#endif //#endif

View File

@@ -3,22 +3,22 @@ package com.replaymod.compat.shaders;
import com.replaymod.render.hooks.EntityRendererHandler; import com.replaymod.render.hooks.EntityRendererHandler;
import de.johni0702.minecraft.gui.utils.EventRegistrations; import de.johni0702.minecraft.gui.utils.EventRegistrations;
import net.minecraft.client.Minecraft; import net.minecraft.client.MinecraftClient;
import java.lang.reflect.InvocationTargetException; import java.lang.reflect.InvocationTargetException;
import static com.replaymod.core.versions.MCVer.getRenderPartialTicks; import static com.replaymod.core.versions.MCVer.getRenderPartialTicks;
//#if MC>=11400 //#if MC>=11400
//$$ import com.replaymod.core.events.PreRenderCallback; import com.replaymod.core.events.PreRenderCallback;
//#else //#else
import net.minecraftforge.eventbus.api.SubscribeEvent; //$$ import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.gameevent.TickEvent; //$$ import net.minecraftforge.fml.common.gameevent.TickEvent;
//#endif //#endif
public class ShaderBeginRender extends EventRegistrations { public class ShaderBeginRender extends EventRegistrations {
private final Minecraft mc = Minecraft.getInstance(); private final MinecraftClient mc = MinecraftClient.getInstance();
/** /**
* Invokes Shaders#beginRender when rendering a video, * Invokes Shaders#beginRender when rendering a video,
@@ -26,19 +26,19 @@ public class ShaderBeginRender extends EventRegistrations {
* which we're not calling during rendering. * which we're not calling during rendering.
*/ */
//#if MC>=11400 //#if MC>=11400
//$$ { on(PreRenderCallback.EVENT, this::onRenderTickStart); } { on(PreRenderCallback.EVENT, this::onRenderTickStart); }
//$$ private void onRenderTickStart() { private void onRenderTickStart() {
//#else //#else
@SubscribeEvent //$$ @SubscribeEvent
public void onRenderTickStart(TickEvent.RenderTickEvent event) { //$$ public void onRenderTickStart(TickEvent.RenderTickEvent event) {
if (event.phase != TickEvent.Phase.START) return; //$$ if (event.phase != TickEvent.Phase.START) return;
//#endif //#endif
if (ShaderReflection.shaders_beginRender == null) return; if (ShaderReflection.shaders_beginRender == null) return;
if (ShaderReflection.config_isShaders == null) return; if (ShaderReflection.config_isShaders == null) return;
try { try {
// check if video is being rendered // check if video is being rendered
if (((EntityRendererHandler.IEntityRenderer) mc.entityRenderer).replayModRender_getHandler() == null) if (((EntityRendererHandler.IEntityRenderer) mc.gameRenderer).replayModRender_getHandler() == null)
return; return;
// check if Shaders are enabled // check if Shaders are enabled

View File

@@ -1,7 +1,7 @@
//#if MC>=10800 //#if MC>=10800
package com.replaymod.compat.shaders; package com.replaymod.compat.shaders;
import net.minecraft.client.Minecraft; import net.minecraft.client.MinecraftClient;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.lang.reflect.Method; import java.lang.reflect.Method;
@@ -37,7 +37,7 @@ public class ShaderReflection {
shaders_isShadowPass = shadersClass.getDeclaredField("isShadowPass"); shaders_isShadowPass = shadersClass.getDeclaredField("isShadowPass");
shaders_isShadowPass.setAccessible(true); 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); shaders_beginRender.setAccessible(true);
renderGlobal_chunksToUpdateForced = Class.forName("net.minecraft.client.renderer.RenderGlobal") renderGlobal_chunksToUpdateForced = Class.forName("net.minecraft.client.renderer.RenderGlobal")

View File

@@ -4,7 +4,7 @@ package com.replaymod.compat.shaders.mixin;
import com.replaymod.compat.shaders.ShaderReflection; import com.replaymod.compat.shaders.ShaderReflection;
import com.replaymod.replay.ReplayHandler; import com.replaymod.replay.ReplayHandler;
import com.replaymod.replay.ReplayModReplay; 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.Mixin;
import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Inject;
@@ -14,10 +14,10 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
public abstract class MixinShaderEntityRenderer { public abstract class MixinShaderEntityRenderer {
//#if MC>=11400 //#if MC>=11400
//$$ @Inject(method = "renderCenter", at = @At("HEAD")) @Inject(method = "renderCenter", at = @At("HEAD"))
//#else //#else
//#if MC>=11300 //#if MC>=11300
@Inject(method = "updateCameraAndRender(FJ)V", at = @At("HEAD")) //$$ @Inject(method = "updateCameraAndRender(FJ)V", at = @At("HEAD"))
//#else //#else
//$$ @Inject(method = "renderWorldPass", at = @At("HEAD")) //$$ @Inject(method = "renderWorldPass", at = @At("HEAD"))
//#endif //#endif

View File

@@ -2,17 +2,17 @@
package com.replaymod.compat.shaders.mixin; package com.replaymod.compat.shaders.mixin;
import com.replaymod.render.hooks.EntityRendererHandler; import com.replaymod.render.hooks.EntityRendererHandler;
import net.minecraft.client.Minecraft; import net.minecraft.client.MinecraftClient;
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.Mixin;
import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
@Mixin(RenderChunk.class) @Mixin(ChunkRenderer.class)
public abstract class MixinShaderRenderChunk { public abstract class MixinShaderRenderChunk {
private final Minecraft mc = Minecraft.getInstance(); private final MinecraftClient mc = MinecraftClient.getInstance();
/** /**
* Changes the RenderChunk#isPlayerUpdate method that Optifine adds * Changes the RenderChunk#isPlayerUpdate method that Optifine adds
@@ -23,7 +23,7 @@ public abstract class MixinShaderRenderChunk {
private void replayModCompat_disableIsPlayerUpdate(CallbackInfoReturnable<Boolean> ci) { private void replayModCompat_disableIsPlayerUpdate(CallbackInfoReturnable<Boolean> ci) {
// TODO: Update to 1.12 once optifine is available // 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? // 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); ci.setReturnValue(true);
} }

View File

@@ -3,9 +3,9 @@ package com.replaymod.compat.shaders.mixin;
import com.replaymod.compat.shaders.ShaderReflection; import com.replaymod.compat.shaders.ShaderReflection;
import com.replaymod.render.hooks.EntityRendererHandler; import com.replaymod.render.hooks.EntityRendererHandler;
import net.minecraft.client.Minecraft; import net.minecraft.client.MinecraftClient;
import net.minecraft.client.renderer.WorldRenderer; import net.minecraft.client.render.WorldRenderer;
import net.minecraft.client.renderer.culling.ICamera; import net.minecraft.client.render.VisibleRegion;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At; 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; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
//#if MC>=11400 //#if MC>=11400
//$$ import net.minecraft.client.render.Camera; import net.minecraft.client.render.Camera;
//#else //#else
import net.minecraft.entity.Entity; //$$ import net.minecraft.entity.Entity;
//#endif //#endif
@Mixin(WorldRenderer.class) @Mixin(WorldRenderer.class)
public abstract class MixinShaderRenderGlobal { public abstract class MixinShaderRenderGlobal {
private final Minecraft mc = Minecraft.getInstance(); private final MinecraftClient mc = MinecraftClient.getInstance();
@Shadow @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( public void replayModCompat_setupTerrain(
//#if MC>=11400 //#if MC>=11400
//$$ Camera viewEntity, Camera viewEntity,
//#else //#else
Entity viewEntity, //$$ Entity viewEntity,
//#if MC>=11300 //#if MC>=11300
float partialTicks, //$$ float partialTicks,
//#else //#else
//$$ double partialTicks, //$$ double partialTicks,
//#endif //#endif
//#endif //#endif
ICamera camera, VisibleRegion camera,
int frameCount, int frameCount,
boolean playerSpectator, boolean playerSpectator,
CallbackInfo ci 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; if (ShaderReflection.shaders_isShadowPass == null) return;
// when called by the shadow pass, displayListEntitiesDirty can't be set to false, as no chunk updates // 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. // set it to false manually to exit the loop imposed by MixinRenderGlobal#replayModRender_setupTerrain.
try { try {
if ((boolean) ShaderReflection.shaders_isShadowPass.get(null) == true) { if ((boolean) ShaderReflection.shaders_isShadowPass.get(null) == true) {
this.displayListEntitiesDirty = false; this.terrainUpdateNecessary = false;
} }
} catch (IllegalAccessException ignore) {} } catch (IllegalAccessException ignore) {}

View File

@@ -1,6 +1,6 @@
package com.replaymod.compat.shaders.mixin; 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.Mixin;
import org.spongepowered.asm.mixin.Pseudo; import org.spongepowered.asm.mixin.Pseudo;
import org.spongepowered.asm.mixin.injection.At; 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; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
//#if MC>=11400 //#if MC>=11400
//$$ import com.replaymod.core.events.PreRenderHandCallback; import com.replaymod.core.events.PreRenderHandCallback;
//#else //#else
import com.replaymod.core.versions.MCVer; //$$ import com.replaymod.core.versions.MCVer;
import net.minecraftforge.client.ForgeHooksClient; //$$ import net.minecraftforge.client.ForgeHooksClient;
//#endif //#endif
@Pseudo @Pseudo
@@ -24,10 +24,10 @@ public abstract class MixinShadersRender {
@Inject(method = "renderHand0", at = @At("HEAD"), cancellable = true, remap = false) @Inject(method = "renderHand0", at = @At("HEAD"), cancellable = true, remap = false)
private static void replayModCompat_disableRenderHand0(GameRenderer er, float partialTicks, int renderPass, CallbackInfo ci) { private static void replayModCompat_disableRenderHand0(GameRenderer er, float partialTicks, int renderPass, CallbackInfo ci) {
//#if MC>=11400 //#if MC>=11400
//$$ if (PreRenderHandCallback.EVENT.invoker().preRenderHand()) { if (PreRenderHandCallback.EVENT.invoker().preRenderHand()) {
//#else //#else
//#if MC>=11300 //#if MC>=11300
if (ForgeHooksClient.renderFirstPersonHand(MCVer.getMinecraft().renderGlobal, partialTicks)) { //$$ if (ForgeHooksClient.renderFirstPersonHand(MCVer.getMinecraft().renderGlobal, partialTicks)) {
//#else //#else
//$$ if (ForgeHooksClient.renderFirstPersonHand(MCVer.getMinecraft().renderGlobal, partialTicks, renderPass)) { //$$ if (ForgeHooksClient.renderFirstPersonHand(MCVer.getMinecraft().renderGlobal, partialTicks, renderPass)) {
//#endif //#endif

View File

@@ -4,19 +4,19 @@ import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.Multimap; import com.google.common.collect.Multimap;
import de.johni0702.minecraft.gui.utils.EventRegistrations; import de.johni0702.minecraft.gui.utils.EventRegistrations;
import com.replaymod.core.versions.MCVer; import com.replaymod.core.versions.MCVer;
import net.minecraft.client.settings.KeyBinding; import net.minecraft.client.options.KeyBinding;
import net.minecraft.crash.CrashReport; import net.minecraft.util.crash.CrashReport;
import net.minecraft.crash.CrashReportCategory; import net.minecraft.util.crash.CrashReportSection;
import net.minecraft.crash.ReportedException; import net.minecraft.util.crash.CrashException;
//#if MC>=11400 //#if MC>=11400
//$$ import com.replaymod.core.versions.LangResourcePack; import com.replaymod.core.versions.LangResourcePack;
//$$ import net.fabricmc.fabric.api.client.keybinding.FabricKeyBinding; import net.fabricmc.fabric.api.client.keybinding.FabricKeyBinding;
//$$ import net.minecraft.client.util.InputUtil; import net.minecraft.client.util.InputUtil;
//$$ import net.minecraft.util.Identifier; import net.minecraft.util.Identifier;
//$$ import static com.replaymod.core.ReplayMod.MOD_ID; import static com.replaymod.core.ReplayMod.MOD_ID;
//#else //#else
import net.minecraftforge.fml.client.registry.ClientRegistry; //$$ import net.minecraftforge.fml.client.registry.ClientRegistry;
//#endif //#endif
//#if MC>=11300 //#if MC>=11300
@@ -39,7 +39,7 @@ import java.util.Map;
public class KeyBindingRegistry extends EventRegistrations { public class KeyBindingRegistry extends EventRegistrations {
private static final String CATEGORY = "replaymod.title"; private static final String CATEGORY = "replaymod.title";
//#if MC>=11400 //#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 //#endif
private Map<String, KeyBinding> keyBindings = new HashMap<String, KeyBinding>(); private Map<String, KeyBinding> keyBindings = new HashMap<String, KeyBinding>();
@@ -59,16 +59,16 @@ public class KeyBindingRegistry extends EventRegistrations {
KeyBinding keyBinding = keyBindings.get(name); KeyBinding keyBinding = keyBindings.get(name);
if (keyBinding == null) { if (keyBinding == null) {
//#if MC>=11400 //#if MC>=11400
//$$ if (keyCode == 0) { if (keyCode == 0) {
//$$ keyCode = -1; keyCode = -1;
//$$ } }
//$$ Identifier id = new Identifier(MOD_ID, name.substring(LangResourcePack.LEGACY_KEY_PREFIX.length())); 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(); FabricKeyBinding fabricKeyBinding = FabricKeyBinding.Builder.create(id, InputUtil.Type.KEYSYM, keyCode, CATEGORY).build();
//$$ net.fabricmc.fabric.api.client.keybinding.KeyBindingRegistry.INSTANCE.register(fabricKeyBinding); net.fabricmc.fabric.api.client.keybinding.KeyBindingRegistry.INSTANCE.register(fabricKeyBinding);
//$$ keyBinding = fabricKeyBinding; keyBinding = fabricKeyBinding;
//#else //#else
keyBinding = new KeyBinding(name, keyCode, CATEGORY); //$$ keyBinding = new KeyBinding(name, keyCode, CATEGORY);
ClientRegistry.registerKeyBinding(keyBinding); //$$ ClientRegistry.registerKeyBinding(keyBinding);
//#endif //#endif
keyBindings.put(name, keyBinding); keyBindings.put(name, keyBinding);
} }
@@ -103,7 +103,7 @@ public class KeyBindingRegistry extends EventRegistrations {
public void handleRepeatedKeyBindings() { public void handleRepeatedKeyBindings() {
for (Map.Entry<KeyBinding, Collection<Runnable>> entry : repeatedKeyBindingHandlers.asMap().entrySet()) { for (Map.Entry<KeyBinding, Collection<Runnable>> entry : repeatedKeyBindingHandlers.asMap().entrySet()) {
if (entry.getKey().isKeyDown()) { if (entry.getKey().isPressed()) {
invokeKeyBindingHandlers(entry.getKey(), entry.getValue()); invokeKeyBindingHandlers(entry.getKey(), entry.getValue());
} }
} }
@@ -111,7 +111,7 @@ public class KeyBindingRegistry extends EventRegistrations {
public void handleKeyBindings() { public void handleKeyBindings() {
for (Map.Entry<KeyBinding, Collection<Runnable>> entry : keyBindingHandlers.asMap().entrySet()) { for (Map.Entry<KeyBinding, Collection<Runnable>> entry : keyBindingHandlers.asMap().entrySet()) {
while (entry.getKey().isPressed()) { while (entry.getKey().wasPressed()) {
invokeKeyBindingHandlers(entry.getKey(), entry.getValue()); invokeKeyBindingHandlers(entry.getKey(), entry.getValue());
} }
} }
@@ -122,11 +122,11 @@ public class KeyBindingRegistry extends EventRegistrations {
try { try {
runnable.run(); runnable.run();
} catch (Throwable cause) { } catch (Throwable cause) {
CrashReport crashReport = CrashReport.makeCrashReport(cause, "Handling Key Binding"); CrashReport crashReport = CrashReport.create(cause, "Handling Key Binding");
CrashReportCategory category = crashReport.makeCategory("Key Binding"); CrashReportSection category = crashReport.addElement("Key Binding");
MCVer.addDetail(category, "Key Binding", keyBinding::toString); MCVer.addDetail(category, "Key Binding", keyBinding::toString);
MCVer.addDetail(category, "Handler", runnable::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 { try {
runnable.run(); runnable.run();
} catch (Throwable cause) { } catch (Throwable cause) {
CrashReport crashReport = CrashReport.makeCrashReport(cause, "Handling Raw Key Binding"); CrashReport crashReport = CrashReport.create(cause, "Handling Raw Key Binding");
CrashReportCategory category = crashReport.makeCategory("Key Binding"); CrashReportSection category = crashReport.addElement("Key Binding");
MCVer.addDetail(category, "Key Code", () -> "" + keyCode); MCVer.addDetail(category, "Key Code", () -> "" + keyCode);
MCVer.addDetail(category, "Handler", runnable::toString); MCVer.addDetail(category, "Handler", runnable::toString);
throw new ReportedException(crashReport); throw new CrashException(crashReport);
} }
} }
} }

View File

@@ -19,50 +19,50 @@ import com.replaymod.replaystudio.util.I18n;
import com.replaymod.simplepathing.ReplayModSimplePathing; import com.replaymod.simplepathing.ReplayModSimplePathing;
import de.johni0702.minecraft.gui.container.GuiScreen; import de.johni0702.minecraft.gui.container.GuiScreen;
import lombok.Getter; import lombok.Getter;
import net.minecraft.client.Minecraft; import net.minecraft.client.MinecraftClient;
import net.minecraft.util.ResourceLocation; import net.minecraft.util.Identifier;
import net.minecraft.util.text.ITextComponent; import net.minecraft.text.TextComponent;
import net.minecraft.util.text.Style; import net.minecraft.text.Style;
import net.minecraft.util.text.TextComponentString; import net.minecraft.text.StringTextComponent;
import net.minecraft.util.text.TextComponentTranslation; import net.minecraft.text.TranslatableTextComponent;
import net.minecraft.util.text.TextFormatting; import net.minecraft.text.TextFormat;
import org.apache.commons.io.FileUtils; import org.apache.commons.io.FileUtils;
//#if MC>=11400 //#if MC>=11400
//$$ import com.github.steveice10.mc.protocol.MinecraftConstants; 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.replaymod.core.versions.LangResourcePack; import com.replaymod.core.versions.LangResourcePack;
import net.minecraft.resources.FolderPack; import net.fabricmc.api.ClientModInitializer;
import net.minecraft.resources.IPackFinder; import net.fabricmc.loader.api.FabricLoader;
import net.minecraft.resources.ResourcePackInfo; import net.minecraft.SharedConstants;
import net.minecraftforge.fml.DeferredWorkQueue; import net.minecraft.client.options.GameOption;
import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; import net.minecraft.resource.DirectoryResourcePack;
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; import net.minecraft.resource.ResourcePackCreator;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; import net.minecraft.resource.ResourcePackContainer;
import net.minecraftforge.versions.mcp.MCPVersion; //#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 //#else
//$$ import net.minecraft.client.resources.FolderResourcePack; //$$ import net.minecraft.client.resources.FolderResourcePack;
//$$ import net.minecraft.client.resources.IResourcePack; //$$ import net.minecraft.client.resources.IResourcePack;
//$$ import net.minecraftforge.common.config.Configuration; //$$ import net.minecraftforge.common.config.Configuration;
//#endif //#endif
//$$
//#if MC>=10800 //#if MC>=10800
import net.minecraft.client.GameSettings; //$$ import net.minecraft.client.GameSettings;
//#endif //#endif
//$$
//#if MC>=11300 //#if MC>=11300
import net.minecraftforge.fml.ModList; //$$ import net.minecraftforge.fml.ModList;
//#else //#else
//$$ import net.minecraftforge.fml.common.Loader; //$$ import net.minecraftforge.fml.common.Loader;
//$$ import net.minecraftforge.fml.common.Mod.EventHandler; //$$ import net.minecraftforge.fml.common.Mod.EventHandler;
@@ -77,8 +77,8 @@ import net.minecraftforge.fml.ModList;
//$$ import java.util.ArrayDeque; //$$ import java.util.ArrayDeque;
//#endif //#endif
//#endif //#endif
import net.minecraftforge.fml.common.Mod; //$$ import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.gameevent.TickEvent; //$$ import net.minecraftforge.fml.common.gameevent.TickEvent;
//#endif //#endif
import java.io.ByteArrayInputStream; import java.io.ByteArrayInputStream;
@@ -96,7 +96,7 @@ import static com.replaymod.core.versions.MCVer.*;
//#if MC<11400 //#if MC<11400
//#if MC>=11300 //#if MC>=11300
@Mod(ReplayMod.MOD_ID) //$$ @Mod(ReplayMod.MOD_ID)
//#else //#else
//$$ @Mod(modid = ReplayMod.MOD_ID, //$$ @Mod(modid = ReplayMod.MOD_ID,
//$$ useMetadata = true, //$$ useMetadata = true,
@@ -112,17 +112,17 @@ import static com.replaymod.core.versions.MCVer.*;
//#endif //#endif
public class ReplayMod implements public class ReplayMod implements
//#if MC>=11400 //#if MC>=11400
//$$ ClientModInitializer, ClientModInitializer,
//#endif //#endif
Module Module
{ {
@Getter(lazy = true) @Getter(lazy = true)
//#if MC>=11400 //#if MC>=11400
//$$ private static final String minecraftVersion = MinecraftClient.getInstance().getGame().getVersion().getName(); private static final String minecraftVersion = MinecraftClient.getInstance().getGame().getVersion().getName();
//#else //#else
//#if MC>=11300 //#if MC>=11300
private static final String minecraftVersion = MCPVersion.getMCVersion(); //$$ private static final String minecraftVersion = MCPVersion.getMCVersion();
//#else //#else
//$$ private static final String minecraftVersion = Loader.MC_VERSION; //$$ private static final String minecraftVersion = Loader.MC_VERSION;
//#endif //#endif
@@ -130,10 +130,10 @@ public class ReplayMod implements
public static final String MOD_ID = "replaymod"; 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; public static final int TEXTURE_SIZE = 256;
private static final Minecraft mc = MCVer.getMinecraft(); private static final MinecraftClient mc = MCVer.getMinecraft();
//#if MC<11300 //#if MC<11300
//$$ @Deprecated //$$ @Deprecated
@@ -159,26 +159,26 @@ public class ReplayMod implements
private final GuiBackgroundProcesses backgroundProcesses = new GuiBackgroundProcesses(); private final GuiBackgroundProcesses backgroundProcesses = new GuiBackgroundProcesses();
public ReplayMod() { public ReplayMod() {
I18n.setI18n(net.minecraft.client.resources.I18n::format); I18n.setI18n(net.minecraft.client.resource.language.I18n::translate);
//#if MC>=11400 //#if MC>=11400
//$$ // Check Minecraft protocol version for compatibility // Check Minecraft protocol version for compatibility
//$$ int supportedProtocol = MinecraftConstants.PROTOCOL_VERSION; int supportedProtocol = MinecraftConstants.PROTOCOL_VERSION;
//$$ int actualProtocol = SharedConstants.getGameVersion().getProtocolVersion(); int actualProtocol = SharedConstants.getGameVersion().getProtocolVersion();
//$$ if (supportedProtocol != actualProtocol) { if (supportedProtocol != actualProtocol) {
//$$ throw new UnsupportedOperationException(String.format( throw new UnsupportedOperationException(String.format(
//$$ "Unsupported Minecraft version, supporting protocol version %s (%s) but actual version is %s (%s).", "Unsupported Minecraft version, supporting protocol version %s (%s) but actual version is %s (%s).",
//$$ supportedProtocol, MinecraftConstants.GAME_VERSION, supportedProtocol, MinecraftConstants.GAME_VERSION,
//$$ actualProtocol, SharedConstants.getGameVersion().getName() actualProtocol, SharedConstants.getGameVersion().getName()
//$$ )); ));
//$$ } }
//#endif //#endif
//#if MC>=11400 //#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 //#else
//#if MC>=11300 //#if MC>=11300
DeferredWorkQueue.runLater(() -> MCVer.getMinecraft().getResourcePackList().addPackFinder(new LangResourcePack.Finder())); //$$ DeferredWorkQueue.runLater(() -> MCVer.getMinecraft().getResourcePackList().addPackFinder(new LangResourcePack.Finder()));
//#endif //#endif
//#endif //#endif
@@ -219,7 +219,7 @@ public class ReplayMod implements
public File getReplayFolder() throws IOException { public File getReplayFolder() throws IOException {
String path = getSettingsRegistry().get(Setting.RECORDING_PATH); 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); FileUtils.forceMkdir(folder);
return folder; return folder;
} }
@@ -234,11 +234,11 @@ public class ReplayMod implements
//#endif //#endif
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
//#if MC>=11300 //#if MC>=11300
FolderPack jGuiResourcePack = new FolderPack(new File("../jGui/src/main/resources")) { DirectoryResourcePack jGuiResourcePack = new DirectoryResourcePack(new File("../jGui/src/main/resources")) {
@Override @Override
protected InputStream getInputStream(String resourceName) throws IOException { protected InputStream openFilename(String resourceName) throws IOException {
try { try {
return super.getInputStream(resourceName); return super.openFilename(resourceName);
//#else //#else
//$$ List<IResourcePack> defaultResourcePacks = ((MinecraftAccessor) mc).getDefaultResourcePacks(); //$$ List<IResourcePack> defaultResourcePacks = ((MinecraftAccessor) mc).getDefaultResourcePacks();
//$$ FolderResourcePack jGuiResourcePack = new FolderResourcePack(new File("../jGui/src/main/resources")) { //$$ FolderResourcePack jGuiResourcePack = new FolderResourcePack(new File("../jGui/src/main/resources")) {
@@ -250,9 +250,9 @@ public class ReplayMod implements
} catch (IOException e) { } catch (IOException e) {
if ("pack.mcmeta".equals(resourceName)) { if ("pack.mcmeta".equals(resourceName)) {
//#if MC>=11400 //#if MC>=11400
//$$ int version = 4; int version = 4;
//#else //#else
int version = 1; //$$ int version = 1;
//#endif //#endif
return new ByteArrayInputStream(("{\"pack\": {\"description\": \"dummy pack for jGui resources in dev-env\", \"pack_format\": " return new ByteArrayInputStream(("{\"pack\": {\"description\": \"dummy pack for jGui resources in dev-env\", \"pack_format\": "
+ version + "}}").getBytes(StandardCharsets.UTF_8)); + version + "}}").getBytes(StandardCharsets.UTF_8));
@@ -262,10 +262,10 @@ public class ReplayMod implements
} }
}; };
//#if MC>=11300 //#if MC>=11300
mc.getResourcePackList().addPackFinder(new IPackFinder() { mc.method_1520().addCreator(new ResourcePackCreator() {
@Override @Override
public <T extends ResourcePackInfo> void addPackInfosToMap(Map<String, T> map, ResourcePackInfo.IFactory<T> factory) { public <T extends ResourcePackContainer> void registerContainer(Map<String, T> map, ResourcePackContainer.Factory<T> factory) {
map.put("jgui", ResourcePackInfo.func_195793_a("jgui", true, () -> jGuiResourcePack, factory, ResourcePackInfo.Priority.BOTTOM)); map.put("jgui", ResourcePackContainer.of("jgui", true, () -> jGuiResourcePack, factory, ResourcePackContainer.SortingDirection.BOTTOM));
} }
}); });
//#else //#else
@@ -290,19 +290,19 @@ public class ReplayMod implements
}} }}
//#if MC>=11400 //#if MC>=11400
//$$ @Override @Override
//$$ public void onInitializeClient() { public void onInitializeClient() {
//$$ modules.forEach(Module::initCommon); modules.forEach(Module::initCommon);
//$$ modules.forEach(Module::initClient); modules.forEach(Module::initClient);
//$$ modules.forEach(m -> m.registerKeyBindings(keyBindingRegistry)); modules.forEach(m -> m.registerKeyBindings(keyBindingRegistry));
//$$ } }
//#else //#else
//#if MC>=11300 //#if MC>=11300
{ //$$ {
FMLJavaModLoadingContext.get().getModEventBus().addListener((FMLCommonSetupEvent event) -> modules.forEach(Module::initCommon)); //$$ 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(Module::initClient));
FMLJavaModLoadingContext.get().getModEventBus().addListener((FMLClientSetupEvent event) -> modules.forEach(m -> m.registerKeyBindings(keyBindingRegistry))); //$$ FMLJavaModLoadingContext.get().getModEventBus().addListener((FMLClientSetupEvent event) -> modules.forEach(m -> m.registerKeyBindings(keyBindingRegistry)));
} //$$ }
//#else //#else
//$$ @EventHandler //$$ @EventHandler
//$$ public void init(FMLInitializationEvent event) { //$$ public void init(FMLInitializationEvent event) {
@@ -335,9 +335,9 @@ public class ReplayMod implements
//#if MC>=10800 //#if MC>=10800
if (!MCVer.hasOptifine()) { if (!MCVer.hasOptifine()) {
//#if MC>=11400 //#if MC>=11400
//$$ GameOption.RENDER_DISTANCE.setMax(64f); GameOption.RENDER_DISTANCE.setMax(64f);
//#else //#else
GameSettings.Options.RENDER_DISTANCE.setValueMax(64f); //$$ GameSettings.Options.RENDER_DISTANCE.setValueMax(64f);
//#endif //#endif
} }
//#endif //#endif
@@ -385,64 +385,64 @@ public class ReplayMod implements
*/ */
private boolean inRunLater = false; private boolean inRunLater = false;
//#if MC>=11400 //#if MC>=11400
//$$ private boolean inRenderTaskQueue = false; private boolean inRenderTaskQueue = false;
//#endif //#endif
public void runLater(Runnable runnable) { public void runLater(Runnable runnable) {
//#if MC>=11400 //#if MC>=11400
//$$ if (mc.isOnThread() && inRunLater && !inRenderTaskQueue) { if (mc.isOnThread() && inRunLater && !inRenderTaskQueue) {
//$$ ((MinecraftAccessor) mc).getRenderTaskQueue().offer(() -> { ((MinecraftAccessor) mc).getRenderTaskQueue().offer(() -> {
//$$ inRenderTaskQueue = true; inRenderTaskQueue = true;
//$$ try { try {
//$$ runLater(runnable); runLater(runnable);
//$$ } finally { } finally {
//$$ inRenderTaskQueue = false; 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);
}
} }
}); });
//#else } else {
//$$ FORGE_BUS.register(new RunLaterHelper(runnable)); mc.method_18858(() -> {
//#endif
return;
}
//#if MC>=10800
Queue<FutureTask<?>> tasks = ((MinecraftAccessor) mc).getScheduledTasks();
//noinspection SynchronizationOnLocalVariableOrMethodParameter
synchronized (tasks) {
//#else
//$$ Queue<ListenableFutureTask<?>> tasks = scheduledTasks;
//$$ synchronized (scheduledTasks) {
//#endif
tasks.add(ListenableFutureTask.create(() -> {
inRunLater = true; inRunLater = true;
try { try {
runnable.run(); runnable.run();
} finally { } finally {
inRunLater = false; 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<FutureTask<?>> tasks = ((MinecraftAccessor) mc).getScheduledTasks();
//$$ //noinspection SynchronizationOnLocalVariableOrMethodParameter
//$$ synchronized (tasks) {
//#else
//$$ Queue<ListenableFutureTask<?>> tasks = scheduledTasks;
//$$ synchronized (scheduledTasks) {
//#endif
//$$ tasks.add(ListenableFutureTask.create(() -> {
//$$ inRunLater = true;
//$$ try {
//$$ runnable.run();
//$$ } finally {
//$$ inRunLater = false;
//$$ }
//$$ }, null));
//$$ }
//#endif //#endif
} }
@@ -479,12 +479,12 @@ public class ReplayMod implements
public String getVersion() { public String getVersion() {
//#if MC>=11400 //#if MC>=11400
//$$ return FabricLoader.getInstance().getModContainer(MOD_ID) return FabricLoader.getInstance().getModContainer(MOD_ID)
//$$ .orElseThrow(IllegalStateException::new) .orElseThrow(IllegalStateException::new)
//$$ .getMetadata().getVersion().toString(); .getMetadata().getVersion().toString();
//#else //#else
//#if MC>=11300 //#if MC>=11300
return ModList.get().getModContainerById(MOD_ID).get().getModInfo().getVersion().toString(); //$$ return ModList.get().getModContainerById(MOD_ID).get().getModInfo().getVersion().toString();
//#else //#else
//$$ return Loader.instance().getIndexedModList().get(MOD_ID).getVersion(); //$$ return Loader.instance().getIndexedModList().get(MOD_ID).getVersion();
//#endif //#endif
@@ -497,7 +497,7 @@ public class ReplayMod implements
} }
} }
public Minecraft getMinecraft() { public MinecraftClient getMinecraft() {
return mc; return mc;
} }
@@ -513,13 +513,13 @@ public class ReplayMod implements
if (getSettingsRegistry().get(Setting.NOTIFICATIONS)) { if (getSettingsRegistry().get(Setting.NOTIFICATIONS)) {
// Some nostalgia: "§8[§6Replay Mod§8]§r Your message goes here" // Some nostalgia: "§8[§6Replay Mod§8]§r Your message goes here"
//#if MC>=10904 //#if MC>=10904
Style coloredDarkGray = new Style().setColor(TextFormatting.DARK_GRAY); Style coloredDarkGray = new Style().setColor(TextFormat.DARK_GRAY);
Style coloredGold = new Style().setColor(TextFormatting.GOLD); Style coloredGold = new Style().setColor(TextFormat.GOLD);
ITextComponent text = new TextComponentString("[").setStyle(coloredDarkGray) TextComponent text = new StringTextComponent("[").setStyle(coloredDarkGray)
.appendSibling(new TextComponentTranslation("replaymod.title").setStyle(coloredGold)) .append(new TranslatableTextComponent("replaymod.title").setStyle(coloredGold))
.appendSibling(new TextComponentString("] ")) .append(new StringTextComponent("] "))
.appendSibling(new TextComponentTranslation(message, args).setStyle(new Style() .append(new TranslatableTextComponent(message, args).setStyle(new Style()
.setColor(warning ? TextFormatting.RED : TextFormatting.DARK_GREEN))); .setColor(warning ? TextFormat.RED : TextFormat.DARK_GREEN)));
//#else //#else
//$$ ChatStyle coloredDarkGray = new ChatStyle().setColor(EnumChatFormatting.DARK_GRAY); //$$ ChatStyle coloredDarkGray = new ChatStyle().setColor(EnumChatFormatting.DARK_GRAY);
//$$ ChatStyle coloredGold = new ChatStyle().setColor(EnumChatFormatting.GOLD); //$$ ChatStyle coloredGold = new ChatStyle().setColor(EnumChatFormatting.GOLD);
@@ -531,7 +531,7 @@ public class ReplayMod implements
//#endif //#endif
// Send message to chat GUI // Send message to chat GUI
// The ingame GUI is initialized at startup, therefore this is possible before the client is connected // 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);
} }
} }

View File

@@ -8,21 +8,21 @@ import java.util.*;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
//#if MC>=11400 //#if MC>=11400
//$$ import com.google.gson.Gson; import com.google.gson.Gson;
//$$ import com.google.gson.GsonBuilder; import com.google.gson.GsonBuilder;
//$$ import com.google.gson.JsonElement; import com.google.gson.JsonElement;
//$$ import com.google.gson.JsonObject; import com.google.gson.JsonObject;
//$$ import com.google.gson.JsonPrimitive; import com.google.gson.JsonPrimitive;
//$$ import java.io.IOException; import java.io.IOException;
//$$ import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
//$$ import java.nio.file.Files; import java.nio.file.Files;
//$$ import java.nio.file.Path; import java.nio.file.Path;
//#else //#else
//#if MC>=11300 //#if MC>=11300
import net.minecraftforge.common.ForgeConfigSpec; //$$ import net.minecraftforge.common.ForgeConfigSpec;
import net.minecraftforge.fml.ModLoadingContext; //$$ import net.minecraftforge.fml.ModLoadingContext;
import net.minecraftforge.fml.config.ModConfig; //$$ import net.minecraftforge.fml.config.ModConfig;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; //$$ import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
//#else //#else
//$$ import net.minecraftforge.common.config.Configuration; //$$ import net.minecraftforge.common.config.Configuration;
//#endif //#endif
@@ -33,80 +33,80 @@ import static com.replaymod.core.versions.MCVer.*;
public class SettingsRegistry { public class SettingsRegistry {
private Map<SettingKey<?>, Object> settings = new ConcurrentHashMap<>(); private Map<SettingKey<?>, Object> settings = new ConcurrentHashMap<>();
//#if MC>=11400 //#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 //#else
private static final Object NULL_OBJECT = new Object(); //$$ private static final Object NULL_OBJECT = new Object();
//#if MC>=11300 //#if MC>=11300
private ForgeConfigSpec spec; //$$ private ForgeConfigSpec spec;
private ModConfig config; //$$ private ModConfig config;
//#else //#else
//$$ private Configuration configuration; //$$ private Configuration configuration;
//#endif //#endif
//#endif //#endif
//#if MC>=11400 //#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<SettingKey<?>, 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() { public void register() {
if (spec == null) { String config;
ForgeConfigSpec.Builder builder = new ForgeConfigSpec.Builder(); if (Files.exists(configFile)) {
for (SettingKey<?> key : settings.keySet()) { try {
builder config = new String(Files.readAllBytes(configFile), StandardCharsets.UTF_8);
.translation(key.getDisplayString()) } catch (IOException e) {
.define(key.getCategory() + "." + key.getKey(), key.getDefault()); e.printStackTrace();
return;
} }
spec = builder.build(); } else {
save();
return;
} }
FMLJavaModLoadingContext.get().getModEventBus().addListener(this::load); Gson gson = new Gson();
ModLoadingContext.get().registerConfig(ModConfig.Type.CLIENT, spec); JsonObject root = gson.fromJson(config, JsonObject.class);
}
private void load(ModConfig.Loading event) {
config = event.getConfig();
for (Map.Entry<SettingKey<?>, Object> entry : settings.entrySet()) { for (Map.Entry<SettingKey<?>, Object> entry : settings.entrySet()) {
SettingKey<?> key = entry.getKey(); SettingKey<?> key = entry.getKey();
Object value = config.getConfigData().get(key.getCategory() + "." + key.getKey()); JsonElement category = root.get(key.getCategory());
entry.setValue(value == null ? key.getDefault() : value); 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 //#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<SettingKey<?>, 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) { //$$ public void setConfiguration(Configuration configuration) {
//$$ this.configuration = configuration; //$$ this.configuration = configuration;
//$$ //$$
@@ -134,13 +134,13 @@ public class SettingsRegistry {
public void register(SettingKey<?> key) { public void register(SettingKey<?> key) {
//#if MC>=11400 //#if MC>=11400
//$$ settings.put(key, key.getDefault()); settings.put(key, key.getDefault());
//#else //#else
//#if MC>=11300 //#if MC>=11300
if (spec != null) { //$$ if (spec != null) {
throw new IllegalStateException("Cannot register more settings are spec has been built."); //$$ throw new IllegalStateException("Cannot register more settings are spec has been built.");
} //$$ }
settings.put(key, NULL_OBJECT); //$$ settings.put(key, NULL_OBJECT);
//#else //#else
//$$ Object value; //$$ Object value;
//$$ if (configuration != null) { //$$ if (configuration != null) {
@@ -178,9 +178,9 @@ public class SettingsRegistry {
public <T> void set(SettingKey<T> key, T value) { public <T> void set(SettingKey<T> key, T value) {
//#if MC<11400 //#if MC<11400
//#if MC>=11300 //#if MC>=11300
if (config != null) { //$$ if (config != null) {
config.getConfigData().set(key.getCategory() + "." + key.getKey(), value); //$$ config.getConfigData().set(key.getCategory() + "." + key.getKey(), value);
} //$$ }
//#else //#else
//$$ if (key.getDefault() instanceof Boolean) { //$$ if (key.getDefault() instanceof Boolean) {
//$$ configuration.get(key.getCategory(), key.getKey(), (Boolean) key.getDefault()).set((Boolean) value); //$$ configuration.get(key.getCategory(), key.getKey(), (Boolean) key.getDefault()).set((Boolean) value);
@@ -201,39 +201,39 @@ public class SettingsRegistry {
public void save() { public void save() {
//#if MC>=11400 //#if MC>=11400
//$$ JsonObject root = new JsonObject(); JsonObject root = new JsonObject();
//$$ for (Map.Entry<SettingKey<?>, Object> entry : settings.entrySet()) { for (Map.Entry<SettingKey<?>, Object> entry : settings.entrySet()) {
//$$ SettingKey<?> key = entry.getKey(); SettingKey<?> key = entry.getKey();
//$$ JsonObject category = root.getAsJsonObject(key.getCategory()); JsonObject category = root.getAsJsonObject(key.getCategory());
//$$ if (category == null) { if (category == null) {
//$$ category = new JsonObject(); category = new JsonObject();
//$$ root.add(key.getCategory(), category); root.add(key.getCategory(), category);
//$$ } }
//$$
//$$ Object value = entry.getValue(); Object value = entry.getValue();
//$$ if (value instanceof Boolean) { if (value instanceof Boolean) {
//$$ category.addProperty(key.getKey(), (Boolean) value); category.addProperty(key.getKey(), (Boolean) value);
//$$ } }
//$$ if (value instanceof Number) { if (value instanceof Number) {
//$$ category.addProperty(key.getKey(), (Number) value); category.addProperty(key.getKey(), (Number) value);
//$$ } }
//$$ if (value instanceof String) { if (value instanceof String) {
//$$ category.addProperty(key.getKey(), (String) value); category.addProperty(key.getKey(), (String) value);
//$$ } }
//$$ } }
//$$ Gson gson = new GsonBuilder().setPrettyPrinting().create(); Gson gson = new GsonBuilder().setPrettyPrinting().create();
//$$ String config = gson.toJson(gson); String config = gson.toJson(gson);
//$$ try { try {
//$$ Files.createDirectories(configFile.getParent()); Files.createDirectories(configFile.getParent());
//$$ Files.write(configFile, config.getBytes(StandardCharsets.UTF_8)); Files.write(configFile, config.getBytes(StandardCharsets.UTF_8));
//$$ } catch (IOException e) { } catch (IOException e) {
//$$ e.printStackTrace(); e.printStackTrace();
//$$ } }
//#else //#else
//#if MC>=11300 //#if MC>=11300
if (config != null) { //$$ if (config != null) {
config.save(); //$$ config.save();
} //$$ }
//#else //#else
//$$ configuration.save(); //$$ configuration.save();
//#endif //#endif

View File

@@ -1,19 +1,19 @@
//#if MC>=11400 //#if MC>=11400
//$$ package com.replaymod.core.events; package com.replaymod.core.events;
//$$
//$$ import net.fabricmc.fabric.api.event.Event; import net.fabricmc.fabric.api.event.Event;
//$$ import net.fabricmc.fabric.api.event.EventFactory; import net.fabricmc.fabric.api.event.EventFactory;
//$$
//$$ public interface PostRenderWorldCallback { public interface PostRenderWorldCallback {
//$$ Event<PostRenderWorldCallback> EVENT = EventFactory.createArrayBacked( Event<PostRenderWorldCallback> EVENT = EventFactory.createArrayBacked(
//$$ PostRenderWorldCallback.class, PostRenderWorldCallback.class,
//$$ (listeners) -> () -> { (listeners) -> () -> {
//$$ for (PostRenderWorldCallback listener : listeners) { for (PostRenderWorldCallback listener : listeners) {
//$$ listener.postRenderWorld(); listener.postRenderWorld();
//$$ } }
//$$ } }
//$$ ); );
//$$
//$$ void postRenderWorld(); void postRenderWorld();
//$$ } }
//#endif //#endif

View File

@@ -14,13 +14,13 @@ import de.johni0702.minecraft.gui.utils.lwjgl.Dimension;
import de.johni0702.minecraft.gui.utils.lwjgl.ReadableDimension; import de.johni0702.minecraft.gui.utils.lwjgl.ReadableDimension;
//#if MC>=11400 //#if MC>=11400
//$$ import de.johni0702.minecraft.gui.versions.callbacks.InitScreenCallback; import de.johni0702.minecraft.gui.versions.callbacks.InitScreenCallback;
//$$ import net.minecraft.client.gui.Screen; import net.minecraft.client.gui.Screen;
//#else //#else
import net.minecraftforge.client.event.GuiScreenEvent; //$$ import net.minecraftforge.client.event.GuiScreenEvent;
import net.minecraftforge.common.MinecraftForge; //$$ import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.eventbus.api.SubscribeEvent; //$$ import net.minecraftforge.eventbus.api.SubscribeEvent;
import static com.replaymod.core.versions.MCVer.getGui; //$$ import static com.replaymod.core.versions.MCVer.getGui;
//#endif //#endif
import static com.replaymod.core.versions.MCVer.getMinecraft; 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)); private GuiPanel panel = new GuiPanel().setLayout(new VerticalLayout().setSpacing(10));
//#if MC>=11400 //#if MC>=11400
//$$ { on(InitScreenCallback.EVENT, (screen, buttons) -> onGuiInit(screen)); } { on(InitScreenCallback.EVENT, (screen, buttons) -> onGuiInit(screen)); }
//$$ private void onGuiInit(Screen guiScreen) { private void onGuiInit(Screen guiScreen) {
//#else //#else
@SubscribeEvent //$$ @SubscribeEvent
public void onGuiInit(GuiScreenEvent.InitGuiEvent.Post event) { //$$ public void onGuiInit(GuiScreenEvent.InitGuiEvent.Post event) {
net.minecraft.client.gui.GuiScreen guiScreen = getGui(event); //$$ net.minecraft.client.gui.GuiScreen guiScreen = getGui(event);
//#endif //#endif
if (guiScreen != getMinecraft().currentScreen) return; // people tend to construct GuiScreens without opening them if (guiScreen != getMinecraft().currentScreen) return; // people tend to construct GuiScreens without opening them

View File

@@ -1,35 +1,35 @@
//#if MC<11400 //#if MC<11400
package com.replaymod.core.gui; //$$ package com.replaymod.core.gui;
//$$
import com.replaymod.core.ReplayMod; //$$ import com.replaymod.core.ReplayMod;
import net.minecraft.client.Minecraft; //$$ import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiScreen; //$$ import net.minecraft.client.gui.GuiScreen;
//$$
//#if MC>=10800 //#if MC>=10800
import net.minecraftforge.fml.client.IModGuiFactory; //$$ import net.minecraftforge.fml.client.IModGuiFactory;
//#else //#else
//$$ import cpw.mods.fml.client.IModGuiFactory; //$$ import cpw.mods.fml.client.IModGuiFactory;
//#endif //#endif
//$$
import java.util.Set; //$$ import java.util.Set;
//$$
@SuppressWarnings("unused") //$$ @SuppressWarnings("unused")
public class GuiFactory implements IModGuiFactory { //$$ public class GuiFactory implements IModGuiFactory {
@Override //$$ @Override
public void initialize(Minecraft minecraftInstance) { //$$ public void initialize(Minecraft minecraftInstance) {
//$$
} //$$ }
//$$
//#if MC>=11200 //#if MC>=11200
@Override //$$ @Override
public boolean hasConfigGui() { //$$ public boolean hasConfigGui() {
return true; //$$ return true;
} //$$ }
//$$
@Override //$$ @Override
public GuiScreen createConfigGui(GuiScreen parentScreen) { //$$ public GuiScreen createConfigGui(GuiScreen parentScreen) {
return new GuiReplaySettings(parentScreen, ReplayMod.instance.getSettingsRegistry()).toMinecraft(); //$$ return new GuiReplaySettings(parentScreen, ReplayMod.instance.getSettingsRegistry()).toMinecraft();
} //$$ }
//#else //#else
//$$ @Override //$$ @Override
//$$ public Class<? extends GuiScreen> mainConfigGuiClass() { //$$ public Class<? extends GuiScreen> mainConfigGuiClass() {
@@ -54,10 +54,10 @@ public class GuiFactory implements IModGuiFactory {
//$$ } //$$ }
//$$ } //$$ }
//#endif //#endif
//$$
@Override //$$ @Override
public Set<RuntimeOptionCategoryElement> runtimeGuiCategories() { //$$ public Set<RuntimeOptionCategoryElement> runtimeGuiCategories() {
return null; //$$ return null;
} //$$ }
} //$$ }
//#endif //#endif

View File

@@ -13,17 +13,17 @@ import de.johni0702.minecraft.gui.layout.HorizontalLayout;
import de.johni0702.minecraft.gui.layout.VerticalLayout; import de.johni0702.minecraft.gui.layout.VerticalLayout;
import de.johni0702.minecraft.gui.utils.Consumer; import de.johni0702.minecraft.gui.utils.Consumer;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import net.minecraft.client.resources.I18n; import net.minecraft.client.resource.language.I18n;
import java.util.List; import java.util.List;
public class GuiReplaySettings extends AbstractGuiScreen<GuiReplaySettings> { public class GuiReplaySettings extends AbstractGuiScreen<GuiReplaySettings> {
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() { final GuiButton doneButton = new GuiButton(this).setI18nLabel("gui.done").setSize(200, 20).onClick(new Runnable() {
@Override @Override
public void run() { public void run() {
getMinecraft().displayGuiScreen(parent); getMinecraft().openScreen(parent);
} }
}); });
@@ -42,7 +42,7 @@ public class GuiReplaySettings extends AbstractGuiScreen<GuiReplaySettings> {
final SettingsRegistry.SettingKey<Boolean> booleanKey = (SettingsRegistry.SettingKey<Boolean>) key; final SettingsRegistry.SettingKey<Boolean> booleanKey = (SettingsRegistry.SettingKey<Boolean>) key;
final GuiToggleButton button = new GuiToggleButton<>().setSize(150, 20) final GuiToggleButton button = new GuiToggleButton<>().setSize(150, 20)
.setI18nLabel(key.getDisplayString()).setSelected(settingsRegistry.get(booleanKey) ? 0 : 1) .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() { element = button.onClick(new Runnable() {
@Override @Override
public void run() { public void run() {
@@ -60,7 +60,7 @@ public class GuiReplaySettings extends AbstractGuiScreen<GuiReplaySettings> {
for (int j = 0; j < entries.length; j++) { for (int j = 0; j < entries.length; j++) {
Object value = values.get(j); Object value = values.get(j);
entries[j] = new MultipleChoiceDropdownEntry(value, 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)) { if (currentValue.equals(value)) {
selected = j; selected = j;
} }

View File

@@ -2,10 +2,10 @@ package com.replaymod.core.handler;
import com.replaymod.core.mixin.GuiMainMenuAccessor; import com.replaymod.core.mixin.GuiMainMenuAccessor;
import de.johni0702.minecraft.gui.utils.EventRegistrations; import de.johni0702.minecraft.gui.utils.EventRegistrations;
import net.minecraft.client.Minecraft; import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.GuiMainMenu; import net.minecraft.client.gui.MainMenuScreen;
import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.gui.Screen;
import net.minecraft.client.gui.GuiScreenRealmsProxy; import net.minecraft.realms.RealmsScreenProxy;
import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL11;
import java.util.List; import java.util.List;
@@ -13,13 +13,13 @@ import java.util.List;
import static com.replaymod.core.versions.MCVer.*; import static com.replaymod.core.versions.MCVer.*;
//#if MC>=11400 //#if MC>=11400
//$$ import de.johni0702.minecraft.gui.versions.callbacks.InitScreenCallback; import de.johni0702.minecraft.gui.versions.callbacks.InitScreenCallback;
//$$ import net.minecraft.client.gui.widget.AbstractButtonWidget; import net.minecraft.client.gui.widget.AbstractButtonWidget;
//#else //#else
import net.minecraft.client.gui.GuiButton; //$$ import net.minecraft.client.gui.GuiButton;
import net.minecraftforge.client.event.GuiScreenEvent; //$$ import net.minecraftforge.client.event.GuiScreenEvent;
import net.minecraftforge.common.MinecraftForge; //$$ import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.eventbus.api.SubscribeEvent; //$$ import net.minecraftforge.eventbus.api.SubscribeEvent;
//#endif //#endif
/** /**
@@ -27,21 +27,21 @@ import net.minecraftforge.eventbus.api.SubscribeEvent;
*/ */
public class MainMenuHandler extends EventRegistrations { public class MainMenuHandler extends EventRegistrations {
//#if MC>=11400 //#if MC>=11400
//$$ { on(InitScreenCallback.EVENT, this::onInit); } { on(InitScreenCallback.EVENT, this::onInit); }
//$$ public void onInit(Screen guiScreen, List<AbstractButtonWidget> buttonList) { public void onInit(Screen guiScreen, List<AbstractButtonWidget> buttonList) {
//#else //#else
@SubscribeEvent //$$ @SubscribeEvent
public void onInit(GuiScreenEvent.InitGuiEvent.Post event) { //$$ public void onInit(GuiScreenEvent.InitGuiEvent.Post event) {
GuiScreen guiScreen = getGui(event); //$$ GuiScreen guiScreen = getGui(event);
List<GuiButton> buttonList = getButtonList(event); //$$ List<GuiButton> buttonList = getButtonList(event);
//#endif //#endif
if (guiScreen instanceof GuiMainMenu) { if (guiScreen instanceof MainMenuScreen) {
GuiMainMenu gui = (GuiMainMenu) guiScreen; MainMenuScreen gui = (MainMenuScreen) guiScreen;
int realmsOffset = 0; int realmsOffset = 0;
//#if MC>=11400 //#if MC>=11400
//$$ for (AbstractButtonWidget button : buttonList) { for (AbstractButtonWidget button : buttonList) {
//#else //#else
for (GuiButton button : buttonList) { //$$ for (GuiButton button : buttonList) {
//#endif //#endif
// Buttons that aren't in a rectangle directly above our space don't need moving // Buttons that aren't in a rectangle directly above our space don't need moving
if (button.x + width(button) < gui.width / 2 - 100 if (button.x + width(button) < gui.width / 2 - 100
@@ -53,40 +53,40 @@ public class MainMenuHandler extends EventRegistrations {
button.y += offset; button.y += offset;
//#if MC>=11400 //#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 //#else
//#if MC>=11300 //#if MC>=11300
if (button.id == 14) { //$$ if (button.id == 14) {
realmsOffset = offset; //$$ realmsOffset = offset;
} //$$ }
//#endif //#endif
//#endif //#endif
} }
//#if MC>=11300 //#if MC>=11300
GuiMainMenuAccessor guiA = (GuiMainMenuAccessor) gui; GuiMainMenuAccessor guiA = (GuiMainMenuAccessor) gui;
if (realmsOffset != 0 && guiA.getRealmsNotification() instanceof GuiScreenRealmsProxy) { if (realmsOffset != 0 && guiA.getRealmsNotification() instanceof RealmsScreenProxy) {
guiA.setRealmsNotification(new RealmsNotificationProxy((GuiScreenRealmsProxy) guiA.getRealmsNotification(), realmsOffset)); guiA.setRealmsNotification(new RealmsNotificationProxy((RealmsScreenProxy) guiA.getRealmsNotification(), realmsOffset));
} }
//#endif //#endif
} }
} }
//#if MC>=11300 //#if MC>=11300
private static class RealmsNotificationProxy extends GuiScreen { private static class RealmsNotificationProxy extends Screen {
private final GuiScreenRealmsProxy proxy; private final RealmsScreenProxy proxy;
private final int offset; private final int offset;
private RealmsNotificationProxy(GuiScreenRealmsProxy proxy, int offset) { private RealmsNotificationProxy(RealmsScreenProxy proxy, int offset) {
//#if MC>=11400 //#if MC>=11400
//$$ super(null); super(null);
//#endif //#endif
this.proxy = proxy; this.proxy = proxy;
this.offset = offset; this.offset = offset;
} }
@Override @Override
public void setWorldAndResolution(Minecraft mc, int width, int height) { public void init(MinecraftClient mc, int width, int height) {
proxy.setWorldAndResolution(mc, width, height); proxy.init(mc, width, height);
} }
@Override @Override
@@ -107,8 +107,8 @@ public class MainMenuHandler extends EventRegistrations {
} }
@Override @Override
public void onGuiClosed() { public void removed() {
proxy.onGuiClosed(); proxy.removed();
} }
} }
//#endif //#endif

View File

@@ -1,13 +1,13 @@
//#if MC>=11400 //#if MC>=11400
//$$ package com.replaymod.core.mixin; package com.replaymod.core.mixin;
//$$
//$$ import net.minecraft.client.gui.widget.AbstractButtonWidget; import net.minecraft.client.gui.widget.AbstractButtonWidget;
//$$ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
//$$ import org.spongepowered.asm.mixin.gen.Accessor; import org.spongepowered.asm.mixin.gen.Accessor;
//$$
//$$ @Mixin(AbstractButtonWidget.class) @Mixin(AbstractButtonWidget.class)
//$$ public interface AbstractButtonWidgetAccessor { public interface AbstractButtonWidgetAccessor {
//$$ @Accessor @Accessor
//$$ int getHeight(); int getHeight();
//$$ } }
//#endif //#endif

View File

@@ -1,16 +1,16 @@
package com.replaymod.core.mixin; package com.replaymod.core.mixin;
import net.minecraft.client.gui.GuiMainMenu; import net.minecraft.client.gui.MainMenuScreen;
import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.gui.Screen;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor; import org.spongepowered.asm.mixin.gen.Accessor;
@Mixin(GuiMainMenu.class) @Mixin(MainMenuScreen.class)
public interface GuiMainMenuAccessor { public interface GuiMainMenuAccessor {
//#if MC>=10904 //#if MC>=10904
@Accessor @Accessor("realmsNotificationGui")
GuiScreen getRealmsNotification(); Screen getRealmsNotification();
@Accessor @Accessor("realmsNotificationGui")
void setRealmsNotification(GuiScreen value); void setRealmsNotification(Screen value);
//#endif //#endif
} }

View File

@@ -1,32 +1,32 @@
package com.replaymod.core.mixin; 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.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor; import org.spongepowered.asm.mixin.gen.Accessor;
import java.util.List; import java.util.List;
//#if MC>=11400 //#if MC>=11400
//$$ import net.minecraft.client.gui.widget.AbstractButtonWidget; import net.minecraft.client.gui.widget.AbstractButtonWidget;
//#else //#else
import net.minecraft.client.gui.GuiButton; //$$ import net.minecraft.client.gui.GuiButton;
//#endif //#endif
//#if MC>=11300 //#if MC>=11300
import net.minecraft.client.gui.IGuiEventListener; import net.minecraft.client.gui.Element;
//#endif //#endif
@Mixin(GuiScreen.class) @Mixin(Screen.class)
public interface GuiScreenAccessor { public interface GuiScreenAccessor {
@Accessor @Accessor
//#if MC>=11400 //#if MC>=11400
//$$ List<AbstractButtonWidget> getButtons(); List<AbstractButtonWidget> getButtons();
//#else //#else
List<GuiButton> getButtons(); //$$ List<GuiButton> getButtons();
//#endif //#endif
//#if MC>=11300 //#if MC>=11300
@Accessor @Accessor
List<IGuiEventListener> getChildren(); List<Element> getChildren();
//#endif //#endif
} }

View File

@@ -1,13 +1,13 @@
package com.replaymod.core.mixin; 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.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor; import org.spongepowered.asm.mixin.gen.Accessor;
@Mixin(KeyBinding.class) @Mixin(KeyBinding.class)
public interface KeyBindingAccessor { public interface KeyBindingAccessor {
@Accessor @Accessor("timesPressed")
int getPressTime(); int getPressTime();
@Accessor @Accessor("timesPressed")
void setPressTime(int value); void setPressTime(int value);
} }

View File

@@ -1,15 +1,15 @@
package com.replaymod.core.mixin; package com.replaymod.core.mixin;
import net.minecraft.client.Minecraft; import net.minecraft.client.MinecraftClient;
import net.minecraft.crash.CrashReport; import net.minecraft.util.crash.CrashReport;
import net.minecraft.util.Timer; import net.minecraft.client.render.RenderTickCounter;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor; import org.spongepowered.asm.mixin.gen.Accessor;
import java.util.Queue; import java.util.Queue;
//#if MC<11400 //#if MC<11400
import java.util.concurrent.FutureTask; //$$ import java.util.concurrent.FutureTask;
//#endif //#endif
//#if MC<11300 //#if MC<11300
@@ -17,25 +17,25 @@ import java.util.concurrent.FutureTask;
//$$ import java.util.List; //$$ import java.util.List;
//#endif //#endif
@Mixin(Minecraft.class) @Mixin(MinecraftClient.class)
public interface MinecraftAccessor { public interface MinecraftAccessor {
@Accessor @Accessor("renderTickCounter")
Timer getTimer(); RenderTickCounter getTimer();
@Accessor @Accessor("renderTickCounter")
void setTimer(Timer value); void setTimer(RenderTickCounter value);
//#if MC>=11400 //#if MC>=11400
//$$ @Accessor
//$$ Queue<Runnable> getRenderTaskQueue();
//#else
@Accessor @Accessor
Queue<FutureTask<?>> getScheduledTasks(); Queue<Runnable> getRenderTaskQueue();
//#else
//$$ @Accessor
//$$ Queue<FutureTask<?>> getScheduledTasks();
//#endif //#endif
@Accessor("hasCrashed") @Accessor("crashed")
boolean hasCrashed(); boolean hasCrashed();
@Accessor @Accessor("crashReport")
CrashReport getCrashReporter(); CrashReport getCrashReporter();
//#if MC<11300 //#if MC<11300

View File

@@ -1,59 +1,59 @@
//#if MC>=11400 //#if MC>=11400
//$$ package com.replaymod.core.mixin; package com.replaymod.core.mixin;
//$$
//$$ import com.replaymod.core.events.PostRenderWorldCallback; import com.replaymod.core.events.PostRenderWorldCallback;
//$$ import com.replaymod.core.events.PreRenderHandCallback; import com.replaymod.core.events.PreRenderHandCallback;
//$$ import de.johni0702.minecraft.gui.versions.callbacks.PostRenderHudCallback; import de.johni0702.minecraft.gui.versions.callbacks.PostRenderHudCallback;
//$$ import de.johni0702.minecraft.gui.versions.callbacks.PostRenderScreenCallback; import de.johni0702.minecraft.gui.versions.callbacks.PostRenderScreenCallback;
//$$ import net.minecraft.client.render.Camera; import net.minecraft.client.render.Camera;
//$$ import net.minecraft.client.render.GameRenderer; import net.minecraft.client.render.GameRenderer;
//$$ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
//$$ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.At;
//$$ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Inject;
//$$ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
//$$
//$$ @Mixin(GameRenderer.class) @Mixin(GameRenderer.class)
//$$ public class MixinGameRenderer { public class MixinGameRenderer {
//$$ @Inject( @Inject(
//$$ method = "render", method = "render",
//$$ at = @At( at = @At(
//$$ value = "INVOKE", value = "INVOKE",
//$$ target = "Lnet/minecraft/client/gui/hud/InGameHud;draw(F)V", target = "Lnet/minecraft/client/gui/hud/InGameHud;draw(F)V",
//$$ shift = At.Shift.AFTER shift = At.Shift.AFTER
//$$ ) )
//$$ ) )
//$$ private void postRenderOverlay(float partialTicks, long nanoTime, boolean renderWorld, CallbackInfo ci) { private void postRenderOverlay(float partialTicks, long nanoTime, boolean renderWorld, CallbackInfo ci) {
//$$ PostRenderHudCallback.EVENT.invoker().postRenderHud(partialTicks); PostRenderHudCallback.EVENT.invoker().postRenderHud(partialTicks);
//$$ } }
//$$
//$$ @Inject( @Inject(
//$$ method = "render", method = "render",
//$$ at = @At( at = @At(
//$$ value = "INVOKE", value = "INVOKE",
//$$ target = "Lnet/minecraft/client/gui/Screen;render(IIF)V", target = "Lnet/minecraft/client/gui/Screen;render(IIF)V",
//$$ shift = At.Shift.AFTER shift = At.Shift.AFTER
//$$ ) )
//$$ ) )
//$$ private void postRenderScreen(float partialTicks, long nanoTime, boolean renderWorld, CallbackInfo ci) { private void postRenderScreen(float partialTicks, long nanoTime, boolean renderWorld, CallbackInfo ci) {
//$$ PostRenderScreenCallback.EVENT.invoker().postRenderScreen(partialTicks); PostRenderScreenCallback.EVENT.invoker().postRenderScreen(partialTicks);
//$$ } }
//$$
//$$ @Inject( @Inject(
//$$ method = "renderCenter", method = "renderCenter",
//$$ at = @At( at = @At(
//$$ value = "FIELD", value = "FIELD",
//$$ target = "Lnet/minecraft/client/render/GameRenderer;renderHand:Z" target = "Lnet/minecraft/client/render/GameRenderer;renderHand:Z"
//$$ ) )
//$$ ) )
//$$ private void postRenderWorld(float partialTicks, long nanoTime, CallbackInfo ci) { private void postRenderWorld(float partialTicks, long nanoTime, CallbackInfo ci) {
//$$ PostRenderWorldCallback.EVENT.invoker().postRenderWorld(); PostRenderWorldCallback.EVENT.invoker().postRenderWorld();
//$$ } }
//$$
//$$ @Inject(method = "renderHand", at = @At("HEAD"), cancellable = true) @Inject(method = "renderHand", at = @At("HEAD"), cancellable = true)
//$$ private void preRenderHand(Camera camera, float partialTicks, CallbackInfo ci) { private void preRenderHand(Camera camera, float partialTicks, CallbackInfo ci) {
//$$ if (PreRenderHandCallback.EVENT.invoker().preRenderHand()) { if (PreRenderHandCallback.EVENT.invoker().preRenderHand()) {
//$$ ci.cancel(); ci.cancel();
//$$ } }
//$$ } }
//$$ } }
//#endif //#endif

View File

@@ -3,59 +3,59 @@ package com.replaymod.core.mixin;
import com.replaymod.core.events.KeyBindingEventCallback; import com.replaymod.core.events.KeyBindingEventCallback;
import com.replaymod.core.events.KeyEventCallback; 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.Mixin;
import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin(KeyboardListener.class) @Mixin(Keyboard.class)
public class MixinKeyboardListener { 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) { private void afterKeyBindingTick(long windowPointer, int key, int scanCode, int action, int modifiers, CallbackInfo ci) {
KeyBindingEventCallback.EVENT.invoker().onKeybindingEvent(); KeyBindingEventCallback.EVENT.invoker().onKeybindingEvent();
KeyEventCallback.EVENT.invoker().onKeyEvent(key, scanCode, action, modifiers); KeyEventCallback.EVENT.invoker().onKeyEvent(key, scanCode, action, modifiers);
} }
//#if MC>=11400 //#if MC>=11400
//$$ /* FIXME we currently don't use these but they also don't work since their target is wrapped in a lambda, /* 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 see MixinMouseListener for working examples
//$$ @Redirect( @Redirect(
//$$ method = "onKey", method = "onKey",
//$$ at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/ParentElement;keyPressed(III)Z") at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/ParentElement;keyPressed(III)Z")
//$$ ) )
//$$ private boolean keyPressed(ParentElement element, int keyCode, int modifiers, int scanCode) { private boolean keyPressed(ParentElement element, int keyCode, int modifiers, int scanCode) {
//$$ if (KeyboardCallback.EVENT.invoker().keyPressed(keyCode, modifiers, scanCode)) { if (KeyboardCallback.EVENT.invoker().keyPressed(keyCode, modifiers, scanCode)) {
//$$ return true; return true;
//$$ } else { } else {
//$$ return element.keyPressed(keyCode, modifiers, scanCode); return element.keyPressed(keyCode, modifiers, scanCode);
//$$ } }
//$$ } }
//$$
//$$ @Redirect( @Redirect(
//$$ method = "onKey", method = "onKey",
//$$ at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/ParentElement;keyReleased(III)Z") at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/ParentElement;keyReleased(III)Z")
//$$ ) )
//$$ private boolean keyReleased(ParentElement element, int keyCode, int modifiers, int scanCode) { private boolean keyReleased(ParentElement element, int keyCode, int modifiers, int scanCode) {
//$$ if (KeyboardCallback.EVENT.invoker().keyReleased(keyCode, modifiers, scanCode)) { if (KeyboardCallback.EVENT.invoker().keyReleased(keyCode, modifiers, scanCode)) {
//$$ return true; return true;
//$$ } else { } else {
//$$ return element.keyReleased(keyCode, modifiers, scanCode); return element.keyReleased(keyCode, modifiers, scanCode);
//$$ } }
//$$ } }
//$$
//$$ @Redirect( @Redirect(
//$$ method = "onKey", method = "onKey",
//$$ at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/ParentElement;charTyped(CI)Z") at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/ParentElement;charTyped(CI)Z")
//$$ ) )
//$$ private boolean charTyped(ParentElement element, char keyChar, int modifiers) { private boolean charTyped(ParentElement element, char keyChar, int modifiers) {
//$$ if (KeyboardCallback.EVENT.invoker().charTyped(keyChar, modifiers)) { if (KeyboardCallback.EVENT.invoker().charTyped(keyChar, modifiers)) {
//$$ return true; return true;
//$$ } else { } else {
//$$ return element.charTyped(keyChar, modifiers); return element.charTyped(keyChar, modifiers);
//$$ } }
//$$ } }
//$$ */ */
//#endif //#endif
} }
//#endif //#endif

View File

@@ -1,7 +1,7 @@
package com.replaymod.core.mixin; package com.replaymod.core.mixin;
import com.replaymod.core.versions.MCVer; 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.Mixin;
import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.At;
@@ -11,7 +11,7 @@ import com.replaymod.core.events.PostRenderCallback;
import com.replaymod.core.events.PreRenderCallback; import com.replaymod.core.events.PreRenderCallback;
import de.johni0702.minecraft.gui.versions.callbacks.OpenGuiScreenCallback; import de.johni0702.minecraft.gui.versions.callbacks.OpenGuiScreenCallback;
import de.johni0702.minecraft.gui.versions.callbacks.PreTickCallback; 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.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
//#else //#else
@@ -23,56 +23,56 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import java.io.IOException; import java.io.IOException;
//#if MC>=11400 //#if MC>=11400
//$$ import net.minecraft.util.NonBlockingThreadExecutor; import net.minecraft.util.NonBlockingThreadExecutor;
//#endif //#endif
@Mixin(Minecraft.class) @Mixin(MinecraftClient.class)
public abstract class MixinMinecraft public abstract class MixinMinecraft
//#if MC>=11400 //#if MC>=11400
//$$ extends NonBlockingThreadExecutor<Runnable> extends NonBlockingThreadExecutor<Runnable>
//#endif //#endif
implements MCVer.MinecraftMethodAccessor { implements MCVer.MinecraftMethodAccessor {
//#if MC>=11400 //#if MC>=11400
//$$ public MixinMinecraft(String string_1) { super(string_1); } public MixinMinecraft(String string_1) { super(string_1); }
//#endif //#endif
//#if MC>=11300 //#if MC>=11300
@Shadow protected abstract void processKeyBinds(); @Shadow protected abstract void handleInputEvents();
@Override @Override
public void replayModProcessKeyBinds() { public void replayModProcessKeyBinds() {
processKeyBinds(); handleInputEvents();
} }
//#if MC>=11400 //#if MC>=11400
//$$ @Override @Override
//$$ public void replayModExecuteTaskQueue() { public void replayModExecuteTaskQueue() {
//$$ executeTaskQueue(); executeTaskQueue();
//$$ } }
//#endif //#endif
@Inject(method = "runGameLoop", @Inject(method = "render",
at = @At(value = "INVOKE", 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) { private void preRender(boolean unused, CallbackInfo ci) {
PreRenderCallback.EVENT.invoker().preRender(); PreRenderCallback.EVENT.invoker().preRender();
} }
@Inject(method = "runGameLoop", @Inject(method = "render",
at = @At(value = "INVOKE", 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)) shift = At.Shift.AFTER))
private void postRender(boolean unused, CallbackInfo ci) { private void postRender(boolean unused, CallbackInfo ci) {
PostRenderCallback.EVENT.invoker().postRender(); PostRenderCallback.EVENT.invoker().postRender();
} }
@Inject(method = "runTick", at = @At("HEAD")) @Inject(method = "tick", at = @At("HEAD"))
private void preTick(CallbackInfo ci) { private void preTick(CallbackInfo ci) {
PreTickCallback.EVENT.invoker().preTick(); PreTickCallback.EVENT.invoker().preTick();
} }
@Inject(method = "displayGuiScreen", at = @At(value = "FIELD", target = "Lnet/minecraft/client/Minecraft;currentScreen:Lnet/minecraft/client/gui/GuiScreen;")) @Inject(method = "openScreen", at = @At(value = "FIELD", target = "Lnet/minecraft/client/MinecraftClient;currentScreen:Lnet/minecraft/client/gui/Screen;"))
private void openGuiScreen(GuiScreen newGuiScreen, CallbackInfo ci) { private void openGuiScreen(Screen newGuiScreen, CallbackInfo ci) {
OpenGuiScreenCallback.EVENT.invoker().openGuiScreen(newGuiScreen); OpenGuiScreenCallback.EVENT.invoker().openGuiScreen(newGuiScreen);
} }
//#else //#else

View File

@@ -1,37 +1,37 @@
//#if MC>=11400 //#if MC>=11400
//$$ package com.replaymod.core.mixin; package com.replaymod.core.mixin;
//$$
//$$ import com.replaymod.core.ReplayMod; import com.replaymod.core.ReplayMod;
//$$ import com.replaymod.core.versions.LangResourcePack; import com.replaymod.core.versions.LangResourcePack;
//$$ import net.fabricmc.fabric.api.resource.ModResourcePack; import net.fabricmc.fabric.api.resource.ModResourcePack;
//$$ import net.fabricmc.fabric.impl.resources.ModResourcePackUtil; import net.fabricmc.fabric.impl.resources.ModResourcePackUtil;
//$$ import net.fabricmc.loader.api.FabricLoader; import net.fabricmc.loader.api.FabricLoader;
//$$ import net.fabricmc.loader.api.ModContainer; import net.fabricmc.loader.api.ModContainer;
//$$ import net.minecraft.resource.ResourcePack; import net.minecraft.resource.ResourcePack;
//$$ import net.minecraft.resource.ResourceType; import net.minecraft.resource.ResourceType;
//$$ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
//$$ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.At;
//$$ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Inject;
//$$ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
//$$
//$$ import java.util.List; import java.util.List;
//$$
//$$ @Mixin(value = ModResourcePackUtil.class, remap = false) @Mixin(value = ModResourcePackUtil.class, remap = false)
//$$ public class MixinModResourcePackUtil { public class MixinModResourcePackUtil {
//$$ @Inject(method = "appendModResourcePacks", at = @At("RETURN"), remap = false) @Inject(method = "appendModResourcePacks", at = @At("RETURN"), remap = false)
//$$ private static void injectRMLangPack(List<ResourcePack> packList, ResourceType type, CallbackInfo ci) { private static void injectRMLangPack(List<ResourcePack> packList, ResourceType type, CallbackInfo ci) {
//$$ if (type != ResourceType.ASSETS) return; if (type != ResourceType.ASSETS) return;
//$$
//$$ for (int i = 0; i < packList.size(); i++) { for (int i = 0; i < packList.size(); i++) {
//$$ ResourcePack pack = packList.get(i); ResourcePack pack = packList.get(i);
//$$ if (pack instanceof ModResourcePack && ((ModResourcePack) pack).getFabricModMetadata().getId().equals(ReplayMod.MOD_ID)) { if (pack instanceof ModResourcePack && ((ModResourcePack) pack).getFabricModMetadata().getId().equals(ReplayMod.MOD_ID)) {
//$$ ModContainer container = FabricLoader.getInstance().getModContainer(ReplayMod.MOD_ID).orElseThrow(IllegalAccessError::new); ModContainer container = FabricLoader.getInstance().getModContainer(ReplayMod.MOD_ID).orElseThrow(IllegalAccessError::new);
//$$ packList.add(i, new LangResourcePack(container.getRootPath())); packList.add(i, new LangResourcePack(container.getRootPath()));
//$$ return; return;
//$$ } }
//$$ } }
//$$
//$$ throw new IllegalStateException("Could not find ReplayMod resource pack."); throw new IllegalStateException("Could not find ReplayMod resource pack.");
//$$ } }
//$$ } }
//#endif //#endif

View File

@@ -1,60 +1,60 @@
//#if MC>=11400 //#if MC>=11400
//$$ package com.replaymod.core.mixin; package com.replaymod.core.mixin;
//$$
//$$ import com.replaymod.core.events.KeyBindingEventCallback; import com.replaymod.core.events.KeyBindingEventCallback;
//$$ import de.johni0702.minecraft.gui.versions.callbacks.MouseCallback; import de.johni0702.minecraft.gui.versions.callbacks.MouseCallback;
//$$ import net.minecraft.client.Mouse; import net.minecraft.client.Mouse;
//$$ import net.minecraft.client.gui.Element; import net.minecraft.client.gui.Element;
//$$ import net.minecraft.client.gui.Screen; import net.minecraft.client.gui.Screen;
//$$ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
//$$ import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Shadow;
//$$ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.At;
//$$ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Inject;
//$$ import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.Redirect;
//$$ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
//$$
//$$ @Mixin(Mouse.class) @Mixin(Mouse.class)
//$$ public class MixinMouseListener { public class MixinMouseListener {
//$$ @Shadow private int activeButton; @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)) @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) { private void afterKeyBindingTick(CallbackInfo ci) {
//$$ KeyBindingEventCallback.EVENT.invoker().onKeybindingEvent(); KeyBindingEventCallback.EVENT.invoker().onKeybindingEvent();
//$$ } }
//$$
//$$ @Inject(method = "method_1611", at = @At("HEAD"), cancellable = true) @Inject(method = "method_1611", at = @At("HEAD"), cancellable = true)
//$$ private void mouseDown(boolean[] result, double x, double y, int button, CallbackInfo ci) { private void mouseDown(boolean[] result, double x, double y, int button, CallbackInfo ci) {
//$$ if (MouseCallback.EVENT.invoker().mouseDown(x, y, button)) { if (MouseCallback.EVENT.invoker().mouseDown(x, y, button)) {
//$$ result[0] = true; result[0] = true;
//$$ ci.cancel(); ci.cancel();
//$$ } }
//$$ } }
//$$
//$$ @Inject(method = "method_1605", at = @At("HEAD"), cancellable = true) @Inject(method = "method_1605", at = @At("HEAD"), cancellable = true)
//$$ private void mouseUp(boolean[] result, double x, double y, int button, CallbackInfo ci) { private void mouseUp(boolean[] result, double x, double y, int button, CallbackInfo ci) {
//$$ if (MouseCallback.EVENT.invoker().mouseUp(x, y, button)) { if (MouseCallback.EVENT.invoker().mouseUp(x, y, button)) {
//$$ result[0] = true; result[0] = true;
//$$ ci.cancel(); ci.cancel();
//$$ } }
//$$ } }
//$$
//$$ @Inject(method = "method_1602", at = @At("HEAD"), cancellable = true) @Inject(method = "method_1602", at = @At("HEAD"), cancellable = true)
//$$ private void mouseDrag(Element element, double x, double y, double dx, double dy, CallbackInfo ci) { 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)) { if (MouseCallback.EVENT.invoker().mouseDrag(x, y, this.activeButton, dx, dy)) {
//$$ ci.cancel(); ci.cancel();
//$$ } }
//$$ } }
//$$
//$$ @Redirect( @Redirect(
//$$ method = "onMouseScroll", method = "onMouseScroll",
//$$ at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/Screen;mouseScrolled(DDD)Z") at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/Screen;mouseScrolled(DDD)Z")
//$$ ) )
//$$ private boolean mouseScroll(Screen element, double x, double y, double scroll) { private boolean mouseScroll(Screen element, double x, double y, double scroll) {
//$$ if (MouseCallback.EVENT.invoker().mouseScroll(x, y, scroll)) { if (MouseCallback.EVENT.invoker().mouseScroll(x, y, scroll)) {
//$$ return true; return true;
//$$ } else { } else {
//$$ return element.mouseScrolled(x, y, scroll); return element.mouseScrolled(x, y, scroll);
//$$ } }
//$$ } }
//$$ } }
//#endif //#endif

View File

@@ -1,27 +1,27 @@
//#if MC>=11400 //#if MC>=11400
//$$ package com.replaymod.core.mixin; package com.replaymod.core.mixin;
//$$
//$$ import de.johni0702.minecraft.gui.versions.callbacks.InitScreenCallback; import de.johni0702.minecraft.gui.versions.callbacks.InitScreenCallback;
//$$ import net.minecraft.client.MinecraftClient; import net.minecraft.client.MinecraftClient;
//$$ import net.minecraft.client.gui.Screen; import net.minecraft.client.gui.Screen;
//$$ import net.minecraft.client.gui.widget.AbstractButtonWidget; import net.minecraft.client.gui.widget.AbstractButtonWidget;
//$$ import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Final;
//$$ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
//$$ import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Shadow;
//$$ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.At;
//$$ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Inject;
//$$ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
//$$
//$$ import java.util.List; import java.util.List;
//$$
//$$ @Mixin(Screen.class) @Mixin(Screen.class)
//$$ public class MixinScreen { public class MixinScreen {
//$$ @Shadow @Shadow
//$$ protected @Final List<AbstractButtonWidget> buttons; protected @Final List<AbstractButtonWidget> buttons;
//$$
//$$ @Inject(method = "init(Lnet/minecraft/client/MinecraftClient;II)V", at = @At("RETURN")) @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) { private void init(MinecraftClient minecraftClient_1, int int_1, int int_2, CallbackInfo ci) {
//$$ InitScreenCallback.EVENT.invoker().initScreen((Screen) (Object) this, buttons); InitScreenCallback.EVENT.invoker().initScreen((Screen) (Object) this, buttons);
//$$ } }
//$$ } }
//#endif //#endif

View File

@@ -1,20 +1,20 @@
package com.replaymod.core.mixin; 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.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor; import org.spongepowered.asm.mixin.gen.Accessor;
@Mixin(Timer.class) @Mixin(RenderTickCounter.class)
public interface TimerAccessor { public interface TimerAccessor {
@Accessor @Accessor("prevTimeMillis")
long getLastSyncSysClock(); long getLastSyncSysClock();
@Accessor @Accessor("prevTimeMillis")
void setLastSyncSysClock(long value); void setLastSyncSysClock(long value);
//#if MC>=11200 //#if MC>=11200
@Accessor @Accessor("timeScale")
float getTickLength(); float getTickLength();
@Accessor @Accessor("timeScale")
void setTickLength(float value); void setTickLength(float value);
//#else //#else
//$$ @Accessor //$$ @Accessor

View File

@@ -1,16 +1,16 @@
package com.replaymod.core.utils; package com.replaymod.core.utils;
import com.replaymod.replaystudio.data.ModInfo; import com.replaymod.replaystudio.data.ModInfo;
import net.minecraft.util.ResourceLocation; import net.minecraft.util.Identifier;
//#if MC>=11400 //#if MC>=11400
//$$ import net.fabricmc.loader.api.FabricLoader; import net.fabricmc.loader.api.FabricLoader;
//$$ import net.fabricmc.loader.api.ModContainer; import net.fabricmc.loader.api.ModContainer;
//$$ import net.minecraft.util.registry.Registry; import net.minecraft.util.registry.Registry;
//#else //#else
//#if MC>=11200 //#if MC>=11200
import net.minecraftforge.registries.ForgeRegistry; //$$ import net.minecraftforge.registries.ForgeRegistry;
import net.minecraftforge.registries.RegistryManager; //$$ import net.minecraftforge.registries.RegistryManager;
//#else //#else
//#if MC>=10800 //#if MC>=10800
//$$ import net.minecraftforge.fml.common.registry.GameData; //$$ import net.minecraftforge.fml.common.registry.GameData;
@@ -19,10 +19,10 @@ import net.minecraftforge.registries.RegistryManager;
//#endif //#endif
//$$ import java.util.stream.Stream; //$$ import java.util.stream.Stream;
//#endif //#endif
//$$
//#if MC>=10800 //#if MC>=10800
//#if MC>=11300 //#if MC>=11300
import net.minecraftforge.fml.ModList; //$$ import net.minecraftforge.fml.ModList;
//#else //#else
//$$ import net.minecraftforge.fml.common.Loader; //$$ import net.minecraftforge.fml.common.Loader;
//$$ import net.minecraftforge.fml.common.ModContainer; //$$ import net.minecraftforge.fml.common.ModContainer;
@@ -42,21 +42,21 @@ public class ModCompat {
public static Collection<ModInfo> getInstalledNetworkMods() { public static Collection<ModInfo> getInstalledNetworkMods() {
//#if MC>=11300 //#if MC>=11300
//#if MC>=11400 //#if MC>=11400
//$$ Map<String, ModInfo> modInfoMap = FabricLoader.getInstance().getAllMods().stream() Map<String, ModInfo> modInfoMap = FabricLoader.getInstance().getAllMods().stream()
//$$ .map(ModContainer::getMetadata) .map(ModContainer::getMetadata)
//$$ .map(m -> new ModInfo(m.getId(), m.getName(), m.getVersion().toString())) .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<String, ModInfo> modInfoMap = ModList.get().getMods().stream()
.map(m -> new ModInfo(m.getModId(), m.getDisplayName(), m.getVersion().toString()))
.collect(Collectors.toMap(ModInfo::getId, Function.identity())); .collect(Collectors.toMap(ModInfo::getId, Function.identity()));
return RegistryManager.ACTIVE.takeSnapshot(false).keySet().stream() return Registry.REGISTRIES.stream()
.map(RegistryManager.ACTIVE::getRegistry) .map(Registry::getIds).flatMap(Set::stream)
.map(ForgeRegistry::getKeys).flatMap(Set::stream) //#else
//$$ Map<String, ModInfo> 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 //#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) .map(modInfoMap::get).filter(Objects::nonNull)
.collect(Collectors.toList()); .collect(Collectors.toList());
//#else //#else

View File

@@ -1,9 +1,9 @@
package com.replaymod.core.utils; package com.replaymod.core.utils;
import net.minecraft.network.PacketBuffer; import net.minecraft.util.PacketByteBuf;
//#if MC>=10904 //#if MC>=10904
import net.minecraft.network.play.server.SPacketCustomPayload; import net.minecraft.client.network.packet.CustomPayloadS2CPacket;
import net.minecraft.util.ResourceLocation; import net.minecraft.util.Identifier;
//#else //#else
//$$ import net.minecraft.network.play.server.S3FPacketCustomPayload; //$$ import net.minecraft.network.play.server.S3FPacketCustomPayload;
//#endif //#endif
@@ -20,7 +20,7 @@ import static com.replaymod.core.versions.MCVer.readString;
*/ */
public class Restrictions { public class Restrictions {
//#if MC>=11300 //#if MC>=11300
public static final ResourceLocation PLUGIN_CHANNEL = new ResourceLocation("replaymod", "restrict"); public static final Identifier PLUGIN_CHANNEL = new Identifier("replaymod", "restrict");
//#else //#else
//$$ public static final String PLUGIN_CHANNEL = "Replay|Restrict"; //$$ public static final String PLUGIN_CHANNEL = "Replay|Restrict";
//#endif //#endif
@@ -30,12 +30,12 @@ public class Restrictions {
private boolean onlyRecordingPlayer; private boolean onlyRecordingPlayer;
//#if MC>=10904 //#if MC>=10904
public String handle(SPacketCustomPayload packet) { public String handle(CustomPayloadS2CPacket packet) {
//#else //#else
//$$ public String handle(S3FPacketCustomPayload packet) { //$$ public String handle(S3FPacketCustomPayload packet) {
//#endif //#endif
//#if MC>=10800 //#if MC>=10800
PacketBuffer buffer = packet.getBufferData(); PacketByteBuf buffer = packet.getData();
//#else //#else
//$$ PacketBuffer buffer = new PacketBuffer(Unpooled.wrappedBuffer(packet.func_149168_d())); //$$ PacketBuffer buffer = new PacketBuffer(Unpooled.wrappedBuffer(packet.func_149168_d()));
//#endif //#endif

View File

@@ -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.Dimension;
import de.johni0702.minecraft.gui.utils.lwjgl.ReadableDimension; import de.johni0702.minecraft.gui.utils.lwjgl.ReadableDimension;
import de.johni0702.minecraft.gui.versions.MCVer; import de.johni0702.minecraft.gui.versions.MCVer;
import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.gui.Screen;
import net.minecraft.crash.CrashReport; import net.minecraft.util.crash.CrashReport;
import net.minecraft.util.ResourceLocation; import net.minecraft.util.Identifier;
import org.apache.commons.io.Charsets; import org.apache.commons.io.Charsets;
import org.apache.commons.io.FilenameUtils; import org.apache.commons.io.FilenameUtils;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
@@ -34,8 +34,8 @@ import org.apache.logging.log4j.Logger;
//#endif //#endif
//#if MC>=10800 //#if MC>=10800
import net.minecraft.client.network.NetworkPlayerInfo; import net.minecraft.client.network.PlayerListEntry;
import net.minecraft.client.resources.DefaultPlayerSkin; import net.minecraft.client.util.DefaultSkinHelper;
//#else //#else
//$$ import net.minecraft.client.Minecraft; //$$ 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 //#if MC>=10800
NetworkPlayerInfo info = getMinecraft().getConnection().getPlayerInfo(uuid); PlayerListEntry info = getMinecraft().getNetworkHandler().getPlayerListEntry(uuid);
ResourceLocation skinLocation; Identifier skinLocation;
if (info != null && info.hasLocationSkin()) { if (info != null && info.hasSkinTexture()) {
skinLocation = info.getLocationSkin(); skinLocation = info.getSkinTexture();
} else { } else {
skinLocation = DefaultPlayerSkin.getDefaultSkin(uuid); skinLocation = DefaultSkinHelper.getTexture(uuid);
} }
return skinLocation; return skinLocation;
//#else //#else
@@ -207,7 +207,7 @@ public class Utils {
public static boolean isCtrlDown() { public static boolean isCtrlDown() {
//#if MC>=11300 //#if MC>=11300
return GuiScreen.isCtrlKeyDown(); return Screen.hasControlDown();
//#else //#else
//$$ return Keyboard.isKeyDown(Keyboard.KEY_LCONTROL) || Keyboard.isKeyDown(Keyboard.KEY_RCONTROL); //$$ return Keyboard.isKeyDown(Keyboard.KEY_LCONTROL) || Keyboard.isKeyDown(Keyboard.KEY_RCONTROL);
//#endif //#endif
@@ -229,7 +229,7 @@ public class Utils {
public static GuiInfoPopup error(Logger logger, GuiContainer container, CrashReport crashReport, Runnable onClose) { public static GuiInfoPopup error(Logger logger, GuiContainer container, CrashReport crashReport, Runnable onClose) {
// Convert crash report to string // Convert crash report to string
String crashReportStr = crashReport.getCompleteReport(); String crashReportStr = crashReport.asString();
// Log via logger // Log via logger
logger.error(crashReportStr); logger.error(crashReportStr);
@@ -237,10 +237,10 @@ public class Utils {
// Try to save the crash report // Try to save the crash report
if (crashReport.getFile() == null) { if (crashReport.getFile() == null) {
try { 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"); 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); logger.debug("Saving crash report to file: {}", file);
crashReport.saveToFile(file); crashReport.writeToFile(file);
} catch (Throwable t) { } catch (Throwable t) {
logger.error("Saving crash report file:", t); logger.error("Saving crash report file:", t);
} }

View File

@@ -1,14 +1,14 @@
package com.replaymod.core.utils; package com.replaymod.core.utils;
import com.replaymod.core.mixin.TimerAccessor; 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; 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 //#if MC>=11300
super(0, 0); super(0, 0);
//#else //#else
@@ -19,13 +19,13 @@ public class WrappedTimer extends Timer {
} }
@Override @Override
public void updateTimer( public void beginRenderTick(
//#if MC>=11300 //#if MC>=11300
long sysClock long sysClock
//#endif //#endif
) { ) {
copy(this, wrapped); copy(this, wrapped);
wrapped.updateTimer( wrapped.beginRenderTick(
//#if MC>=11300 //#if MC>=11300
sysClock sysClock
//#endif //#endif
@@ -33,14 +33,14 @@ public class WrappedTimer extends Timer {
copy(wrapped, this); copy(wrapped, this);
} }
protected void copy(Timer from, Timer to) { protected void copy(RenderTickCounter from, RenderTickCounter to) {
TimerAccessor fromA = (TimerAccessor) from; TimerAccessor fromA = (TimerAccessor) from;
TimerAccessor toA = (TimerAccessor) to; TimerAccessor toA = (TimerAccessor) to;
to.elapsedTicks = from.elapsedTicks; to.ticksThisFrame = from.ticksThisFrame;
to.renderPartialTicks = from.renderPartialTicks; to.tickDelta = from.tickDelta;
toA.setLastSyncSysClock(fromA.getLastSyncSysClock()); toA.setLastSyncSysClock(fromA.getLastSyncSysClock());
to.elapsedPartialTicks = from.elapsedPartialTicks; to.lastFrameDuration = from.lastFrameDuration;
//#if MC>=11200 //#if MC>=11200
toA.setTickLength(fromA.getTickLength()); toA.setTickLength(fromA.getTickLength());
//#else //#else

View File

@@ -3,10 +3,10 @@ package com.replaymod.core.versions;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.replaymod.core.ReplayMod; import com.replaymod.core.ReplayMod;
import net.minecraft.resources.AbstractResourcePack; import net.minecraft.resource.AbstractFilenameResourcePack;
import net.minecraft.resources.ResourcePackFileNotFoundException; import net.minecraft.resource.ResourceNotFoundException;
import net.minecraft.resources.ResourcePackType; import net.minecraft.resource.ResourceType;
import net.minecraft.util.ResourceLocation; import net.minecraft.util.Identifier;
import org.apache.commons.io.IOUtils; import org.apache.commons.io.IOUtils;
import java.io.ByteArrayInputStream; import java.io.ByteArrayInputStream;
@@ -28,40 +28,40 @@ import java.util.stream.Collectors;
//#if MC>=11400 //#if MC>=11400
//#else //#else
import net.minecraft.resources.IPackFinder; //$$ import net.minecraft.resources.IPackFinder;
import net.minecraft.resources.ResourcePackInfo; //$$ import net.minecraft.resources.ResourcePackInfo;
import net.minecraftforge.fml.loading.moddiscovery.ModFile; //$$ import net.minecraftforge.fml.loading.moddiscovery.ModFile;
import net.minecraftforge.fml.packs.ModFileResourcePack; //$$ import net.minecraftforge.fml.packs.ModFileResourcePack;
import net.minecraftforge.fml.packs.ResourcePackLoader; //$$ import net.minecraftforge.fml.packs.ResourcePackLoader;
//#endif //#endif
/** /**
* Resource pack which on-the-fly converts pre-1.13 language files into 1.13 json format. * 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. * 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 Gson GSON = new Gson();
private static final String NAME = "replaymod_lang"; 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 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$"); private static final Pattern LANG_FILE_NAME_PATTERN = Pattern.compile("^([a-z][a-z])_([a-z][a-z]).lang$");
//#if MC>=11400 //#if MC>=11400
//$$ public static final String LEGACY_KEY_PREFIX = "replaymod.input."; public static final String LEGACY_KEY_PREFIX = "replaymod.input.";
//$$ private static final String FABRIC_KEY_FORMAT = "key." + ReplayMod.MOD_ID + ".%s"; 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));
}
private ModFileResourcePack getParent() { private final Path basePath;
return ResourcePackLoader.getResourcePackFor(ReplayMod.MOD_ID).orElseThrow(() -> new RuntimeException("Failed to get ReplayMod resource pack!")); 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 //#endif
private String langName(String path) { private String langName(String path) {
@@ -71,16 +71,16 @@ public class LangResourcePack extends AbstractResourcePack {
} }
//#if MC>=11400 //#if MC>=11400
//$$ private Path baseLangPath() {
//$$ return basePath.resolve("assets").resolve(ReplayMod.MOD_ID).resolve("lang");
//$$ }
//#else
private Path baseLangPath() { private Path baseLangPath() {
ModFileResourcePack parent = getParent(); return basePath.resolve("assets").resolve(ReplayMod.MOD_ID).resolve("lang");
if (parent == null) return null;
ModFile modFile = parent.getModFile();
return modFile.getLocator().findPath(modFile, "assets", ReplayMod.MOD_ID, "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 //#endif
private Path langPath(String path) { private Path langPath(String path) {
@@ -88,7 +88,7 @@ public class LangResourcePack extends AbstractResourcePack {
if (langName == null) return null; if (langName == null) return null;
Path basePath = baseLangPath(); Path basePath = baseLangPath();
//#if MC<11400 //#if MC<11400
if (basePath == null) return null; //$$ if (basePath == null) return null;
//#endif //#endif
return basePath.resolve(langName); return basePath.resolve(langName);
} }
@@ -98,13 +98,13 @@ public class LangResourcePack extends AbstractResourcePack {
} }
@Override @Override
protected InputStream getInputStream(String path) throws IOException { protected InputStream openFilename(String path) throws IOException {
if ("pack.mcmeta".equals(path)) { if ("pack.mcmeta".equals(path)) {
return new ByteArrayInputStream("{\"pack\": {\"description\": \"ReplayMod language files\", \"pack_format\": 4}}".getBytes(StandardCharsets.UTF_8)); return new ByteArrayInputStream("{\"pack\": {\"description\": \"ReplayMod language files\", \"pack_format\": 4}}".getBytes(StandardCharsets.UTF_8));
} }
Path langPath = langPath(path); Path langPath = langPath(path);
if (langPath == null) throw new ResourcePackFileNotFoundException(this.file, path); if (langPath == null) throw new ResourceNotFoundException(this.base, path);
String langFile; String langFile;
try (InputStream in = Files.newInputStream(langPath)) { try (InputStream in = Files.newInputStream(langPath)) {
@@ -119,9 +119,9 @@ public class LangResourcePack extends AbstractResourcePack {
String value = line.substring(i + 1); String value = line.substring(i + 1);
value = convertValue(value); value = convertValue(value);
//#if MC>=11400 //#if MC>=11400
//$$ if (key.startsWith(LEGACY_KEY_PREFIX)) { if (key.startsWith(LEGACY_KEY_PREFIX)) {
//$$ key = String.format(FABRIC_KEY_FORMAT, key.substring(LEGACY_KEY_PREFIX.length())); key = String.format(FABRIC_KEY_FORMAT, key.substring(LEGACY_KEY_PREFIX.length()));
//$$ } }
//#endif //#endif
properties.put(key, value); properties.put(key, value);
} }
@@ -130,18 +130,18 @@ public class LangResourcePack extends AbstractResourcePack {
} }
@Override @Override
protected boolean resourceExists(String path) { protected boolean containsFilename(String path) {
Path langPath = langPath(path); Path langPath = langPath(path);
return langPath != null && Files.exists(langPath); return langPath != null && Files.exists(langPath);
} }
@Override @Override
public Collection<ResourceLocation> getAllResourceLocations(ResourcePackType resourcePackType, String path, int maxDepth, Predicate<String> filter) { public Collection<Identifier> findResources(ResourceType resourcePackType, String path, int maxDepth, Predicate<String> filter) {
if (resourcePackType == ResourcePackType.CLIENT_RESOURCES && "lang".equals(path)) { if (resourcePackType == ResourceType.ASSETS && "lang".equals(path)) {
Path base = baseLangPath(); Path base = baseLangPath();
//#if MC<11400 //#if MC<11400
if (base == null) return Collections.emptyList(); //$$ if (base == null) return Collections.emptyList();
//#endif //#endif
try { try {
return Files.walk(base, 1) return Files.walk(base, 1)
@@ -152,7 +152,7 @@ public class LangResourcePack extends AbstractResourcePack {
.filter(Matcher::matches) .filter(Matcher::matches)
.map(matcher -> String.format("%s_%s.json", matcher.group(1), matcher.group(1))) .map(matcher -> String.format("%s_%s.json", matcher.group(1), matcher.group(1)))
.filter(filter::test) .filter(filter::test)
.map(name -> new ResourceLocation(ReplayMod.MOD_ID, "lang/" + name)) .map(name -> new Identifier(ReplayMod.MOD_ID, "lang/" + name))
.collect(Collectors.toList()); .collect(Collectors.toList());
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
@@ -164,8 +164,8 @@ public class LangResourcePack extends AbstractResourcePack {
} }
@Override @Override
public Set<String> getResourceNamespaces(ResourcePackType resourcePackType) { public Set<String> getNamespaces(ResourceType resourcePackType) {
if (resourcePackType == ResourcePackType.CLIENT_RESOURCES) { if (resourcePackType == ResourceType.ASSETS) {
return Collections.singleton("replaymod"); return Collections.singleton("replaymod");
} else { } else {
return Collections.emptySet(); return Collections.emptySet();
@@ -177,12 +177,12 @@ public class LangResourcePack extends AbstractResourcePack {
// Not needed on fabric, using MixinModResourcePackUtil instead. // Not needed on fabric, using MixinModResourcePackUtil instead.
//#if MC<11400 //#if MC<11400
public static class Finder implements IPackFinder { //$$ public static class Finder implements IPackFinder {
@Override //$$ @Override
public <T extends ResourcePackInfo> void addPackInfosToMap(Map<String, T> packList, ResourcePackInfo.IFactory<T> factory) { //$$ public <T extends ResourcePackInfo> void addPackInfosToMap(Map<String, T> packList, ResourcePackInfo.IFactory<T> factory) {
packList.put(NAME, ResourcePackInfo.func_195793_a(NAME, true, LangResourcePack::new, factory, ResourcePackInfo.Priority.BOTTOM)); //$$ packList.put(NAME, ResourcePackInfo.func_195793_a(NAME, true, LangResourcePack::new, factory, ResourcePackInfo.Priority.BOTTOM));
} //$$ }
} //$$ }
//#endif //#endif
} }
//#endif //#endif

View File

@@ -2,44 +2,44 @@ package com.replaymod.core.versions;
import com.replaymod.core.mixin.GuiScreenAccessor; import com.replaymod.core.mixin.GuiScreenAccessor;
import com.replaymod.core.mixin.MinecraftAccessor; import com.replaymod.core.mixin.MinecraftAccessor;
import net.minecraft.client.Minecraft; import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.widget.ButtonWidget;
import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.gui.Screen;
import net.minecraft.client.multiplayer.WorldClient; import net.minecraft.client.world.ClientWorld;
import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.render.Tessellator;
import net.minecraft.client.renderer.entity.RenderManager; import net.minecraft.client.render.entity.EntityRenderDispatcher;
import net.minecraft.client.renderer.entity.model.ModelBox; import net.minecraft.client.model.Box;
import net.minecraft.client.renderer.entity.model.ModelRenderer; import net.minecraft.client.model.Cuboid;
import net.minecraft.client.renderer.texture.TextureMap; import net.minecraft.client.texture.SpriteAtlasTexture;
import net.minecraft.crash.CrashReportCategory; import net.minecraft.util.crash.CrashReportSection;
import net.minecraft.entity.Entity; import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.network.PacketBuffer; import net.minecraft.util.PacketByteBuf;
import net.minecraft.util.ResourceLocation; import net.minecraft.util.Identifier;
import net.minecraft.util.Util; import net.minecraft.util.SystemUtil;
import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.MathHelper;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraft.world.chunk.Chunk; import net.minecraft.world.chunk.WorldChunk;
//#if MC>=11400 //#if MC>=11400
//$$ import com.replaymod.core.mixin.AbstractButtonWidgetAccessor; import com.replaymod.core.mixin.AbstractButtonWidgetAccessor;
//$$ import net.minecraft.client.gui.widget.AbstractButtonWidget; import net.minecraft.client.gui.widget.AbstractButtonWidget;
//$$ import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletableFuture;
//#else //#else
import com.google.common.util.concurrent.FutureCallback; //$$ import com.google.common.util.concurrent.FutureCallback;
import com.google.common.util.concurrent.Futures; //$$ import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.ListenableFuture; //$$ import com.google.common.util.concurrent.ListenableFuture;
import net.minecraft.entity.EntityLivingBase; //$$ import net.minecraft.entity.EntityLivingBase;
import net.minecraftforge.client.event.GuiScreenEvent; //$$ import net.minecraftforge.client.event.GuiScreenEvent;
import net.minecraftforge.client.event.RenderGameOverlayEvent; //$$ import net.minecraftforge.client.event.RenderGameOverlayEvent;
import net.minecraftforge.client.event.RenderLivingEvent; //$$ import net.minecraftforge.client.event.RenderLivingEvent;
import net.minecraftforge.common.MinecraftForge; //$$ import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.eventbus.api.IEventBus; //$$ import net.minecraftforge.eventbus.api.IEventBus;
//#endif //#endif
//#if MC>=11300 //#if MC>=11300
import net.minecraft.client.MainWindow; import net.minecraft.client.util.Window;
import net.minecraft.client.util.InputMappings; import net.minecraft.client.util.InputUtil;
import org.lwjgl.glfw.GLFW; import org.lwjgl.glfw.GLFW;
//#else //#else
//$$ import net.minecraft.client.gui.ScaledResolution; //$$ import net.minecraft.client.gui.ScaledResolution;
@@ -58,17 +58,17 @@ import net.minecraft.util.math.Vec3d;
//#endif //#endif
//#if MC>=10809 //#if MC>=10809
import net.minecraft.client.renderer.vertex.DefaultVertexFormats; import net.minecraft.client.render.VertexFormats;
//#else //#else
//$$ import net.minecraftforge.fml.common.FMLCommonHandler; //$$ import net.minecraftforge.fml.common.FMLCommonHandler;
//#endif //#endif
//#if MC>=10800 //#if MC>=10800
import net.minecraft.client.renderer.BufferBuilder; import net.minecraft.client.render.BufferBuilder;
import net.minecraft.client.renderer.GlStateManager; import com.mojang.blaze3d.platform.GlStateManager;
import net.minecraft.client.renderer.vertex.VertexFormat; import net.minecraft.client.render.VertexFormat;
import net.minecraft.client.renderer.vertex.VertexFormatElement; import net.minecraft.client.render.VertexFormatElement;
import net.minecraft.world.WorldType; import net.minecraft.world.level.LevelGeneratorType;
//#else //#else
//$$ import com.replaymod.core.mixin.ResourcePackRepositoryAccessor; //$$ import com.replaymod.core.mixin.ResourcePackRepositoryAccessor;
//$$ import com.google.common.util.concurrent.Futures; //$$ import com.google.common.util.concurrent.Futures;
@@ -79,10 +79,10 @@ import net.minecraft.world.WorldType;
//#endif //#endif
//#if MC>=11400 //#if MC>=11400
//$$ import net.fabricmc.loader.api.FabricLoader; import net.fabricmc.loader.api.FabricLoader;
//#else //#else
//#if MC>=11300 //#if MC>=11300
import net.minecraftforge.fml.ModList; //$$ import net.minecraftforge.fml.ModList;
//#else //#else
//$$ import net.minecraftforge.fml.common.Loader; //$$ import net.minecraftforge.fml.common.Loader;
//#endif //#endif
@@ -99,9 +99,9 @@ import java.util.function.Consumer;
*/ */
public class MCVer { public class MCVer {
//#if MC<11400 //#if MC<11400
public static IEventBus FORGE_BUS = MinecraftForge.EVENT_BUS; //$$ public static IEventBus FORGE_BUS = MinecraftForge.EVENT_BUS;
//#if MC>=10809 //#if MC>=10809
public static IEventBus FML_BUS = FORGE_BUS; //$$ public static IEventBus FML_BUS = FORGE_BUS;
//#else //#else
//$$ public static EventBus FML_BUS = FMLCommonHandler.instance().bus(); //$$ public static EventBus FML_BUS = FMLCommonHandler.instance().bus();
//#endif //#endif
@@ -109,20 +109,20 @@ public class MCVer {
public static boolean isModLoaded(String id) { public static boolean isModLoaded(String id) {
//#if MC>=11400 //#if MC>=11400
//$$ return FabricLoader.getInstance().isModLoaded(id.toLowerCase()); return FabricLoader.getInstance().isModLoaded(id.toLowerCase());
//#else //#else
//#if MC>=11300 //#if MC>=11300
return ModList.get().isLoaded(id.toLowerCase()); //$$ return ModList.get().isLoaded(id.toLowerCase());
//#else //#else
//$$ return Loader.isModLoaded(id); //$$ return Loader.isModLoaded(id);
//#endif //#endif
//#endif //#endif
} }
public static void addDetail(CrashReportCategory category, String name, Callable<String> callable) { public static void addDetail(CrashReportSection category, String name, Callable<String> callable) {
//#if MC>=10904 //#if MC>=10904
//#if MC>=11200 //#if MC>=11200
category.addDetail(name, callable::call); category.add(name, callable::call);
//#else //#else
//$$ category.setDetail(name, callable::call); //$$ category.setDetail(name, callable::call);
//#endif //#endif
@@ -132,83 +132,83 @@ public class MCVer {
} }
//#if MC>=11400 //#if MC>=11400
//$$ public static void width(AbstractButtonWidget button, int value) { public static void width(AbstractButtonWidget button, int value) {
//$$ button.setWidth(value); button.setWidth(value);
//$$ } }
//$$
//$$ public static int width(AbstractButtonWidget button) { public static int width(AbstractButtonWidget button) {
//$$ return button.getWidth(); return button.getWidth();
//$$ } }
//$$
//$$ public static int height(AbstractButtonWidget button) { public static int height(AbstractButtonWidget button) {
//$$ return ((AbstractButtonWidgetAccessor) button).getHeight(); return ((AbstractButtonWidgetAccessor) button).getHeight();
//$$ } }
//#else //#else
public static void width(GuiButton button, int value) { //$$ public static void width(GuiButton button, int value) {
button.width = value; //$$ button.width = value;
} //$$ }
//$$
public static int width(GuiButton button) { //$$ public static int width(GuiButton button) {
return button.width; //$$ return button.width;
} //$$ }
//$$
public static int height(GuiButton button) { //$$ public static int height(GuiButton button) {
return button.height; //$$ return button.height;
} //$$ }
//#endif //#endif
//#if MC<11400 //#if MC<11400
public static void addButton(GuiScreenEvent.InitGuiEvent event, GuiButton button) { //$$ public static void addButton(GuiScreenEvent.InitGuiEvent event, GuiButton button) {
//#if MC>=11300 //#if MC>=11300
event.addButton(button); //$$ event.addButton(button);
//#else //#else
//$$ getButtonList(event).add(button); //$$ getButtonList(event).add(button);
//#endif //#endif
} //$$ }
//$$
public static void removeButton(GuiScreenEvent.InitGuiEvent event, GuiButton button) { //$$ public static void removeButton(GuiScreenEvent.InitGuiEvent event, GuiButton button) {
//#if MC>=11300 //#if MC>=11300
event.removeButton(button); //$$ event.removeButton(button);
//#else //#else
//$$ getButtonList(event).remove(button); //$$ getButtonList(event).remove(button);
//#endif //#endif
} //$$ }
//$$
@SuppressWarnings("unchecked") //$$ @SuppressWarnings("unchecked")
public static List<GuiButton> getButtonList(GuiScreenEvent.InitGuiEvent event) { //$$ public static List<GuiButton> getButtonList(GuiScreenEvent.InitGuiEvent event) {
//#if MC>=10904 //#if MC>=10904
return event.getButtonList(); //$$ return event.getButtonList();
//#else //#else
//$$ return event.buttonList; //$$ return event.buttonList;
//#endif //#endif
} //$$ }
//$$
public static GuiButton getButton(GuiScreenEvent.ActionPerformedEvent event) { //$$ public static GuiButton getButton(GuiScreenEvent.ActionPerformedEvent event) {
//#if MC>=10904 //#if MC>=10904
return event.getButton(); //$$ return event.getButton();
//#else //#else
//$$ return event.button; //$$ return event.button;
//#endif //#endif
} //$$ }
//$$
public static GuiScreen getGui(GuiScreenEvent event) { //$$ public static GuiScreen getGui(GuiScreenEvent event) {
//#if MC>=10904 //#if MC>=10904
return event.getGui(); //$$ return event.getGui();
//#else //#else
//$$ return event.gui; //$$ return event.gui;
//#endif //#endif
} //$$ }
//$$
public static EntityLivingBase getEntity(RenderLivingEvent event) { //$$ public static EntityLivingBase getEntity(RenderLivingEvent event) {
//#if MC>=10904 //#if MC>=10904
return event.getEntity(); //$$ return event.getEntity();
//#else //#else
//$$ return event.entity; //$$ return event.entity;
//#endif //#endif
} //$$ }
//#endif //#endif
public static String readString(PacketBuffer buffer, int max) { public static String readString(PacketByteBuf buffer, int max) {
//#if MC>=11102 //#if MC>=11102
return buffer.readString(max); return buffer.readString(max);
//#else //#else
@@ -225,27 +225,27 @@ public class MCVer {
} }
//#if MC<11400 //#if MC<11400
public static RenderGameOverlayEvent.ElementType getType(RenderGameOverlayEvent event) { //$$ public static RenderGameOverlayEvent.ElementType getType(RenderGameOverlayEvent event) {
//#if MC>=10904 //#if MC>=10904
return event.getType(); //$$ return event.getType();
//#else //#else
//$$ return event.type; //$$ return event.type;
//#endif //#endif
} //$$ }
//#endif //#endif
//#if MC>=10800 //#if MC>=10800
public static WorldType WorldType_DEBUG_ALL_BLOCK_STATES public static LevelGeneratorType WorldType_DEBUG_ALL_BLOCK_STATES
//#if MC>=11200 //#if MC>=11200
= WorldType.DEBUG_ALL_BLOCK_STATES; = LevelGeneratorType.DEBUG_ALL_BLOCK_STATES;
//#else //#else
//$$ = WorldType.DEBUG_WORLD; //$$ = WorldType.DEBUG_WORLD;
//#endif //#endif
//#endif //#endif
//#if MC>=10800 //#if MC>=10800
public static Entity getRenderViewEntity(Minecraft mc) { public static Entity getRenderViewEntity(MinecraftClient mc) {
return mc.getRenderViewEntity(); return mc.getCameraEntity();
} }
//#else //#else
//$$ public static EntityLivingBase getRenderViewEntity(Minecraft mc) { //$$ public static EntityLivingBase getRenderViewEntity(Minecraft mc) {
@@ -254,8 +254,8 @@ public class MCVer {
//#endif //#endif
//#if MC>=10800 //#if MC>=10800
public static void setRenderViewEntity(Minecraft mc, Entity entity) { public static void setRenderViewEntity(MinecraftClient mc, Entity entity) {
mc.setRenderViewEntity(entity); mc.setCameraEntity(entity);
} }
//#else //#else
//$$ public static void setRenderViewEntity(Minecraft mc, EntityLivingBase entity) { //$$ public static void setRenderViewEntity(Minecraft mc, EntityLivingBase entity) {
@@ -263,63 +263,63 @@ public class MCVer {
//$$ } //$$ }
//#endif //#endif
public static ResourceLocation LOCATION_BLOCKS_TEXTURE public static Identifier LOCATION_BLOCKS_TEXTURE
//#if MC>=10904 //#if MC>=10904
= TextureMap.LOCATION_BLOCKS_TEXTURE; = SpriteAtlasTexture.BLOCK_ATLAS_TEX;
//#else //#else
//$$ = TextureMap.locationBlocksTexture; //$$ = TextureMap.locationBlocksTexture;
//#endif //#endif
public static Entity getRiddenEntity(Entity ridden) { public static Entity getRiddenEntity(Entity ridden) {
//#if MC>=10904 //#if MC>=10904
return ridden.getRidingEntity(); return ridden.getVehicle();
//#else //#else
//$$ return ridden.ridingEntity; //$$ return ridden.ridingEntity;
//#endif //#endif
} }
public static Iterable<Entity> loadedEntityList(WorldClient world) { public static Iterable<Entity> loadedEntityList(ClientWorld world) {
//#if MC>=11400 //#if MC>=11400
//$$ return world.getEntities(); return world.getEntities();
//#else //#else
return world.loadedEntityList; //$$ return world.loadedEntityList;
//#endif //#endif
} }
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public static Collection<Entity>[] getEntityLists(Chunk chunk) { public static Collection<Entity>[] getEntityLists(WorldChunk chunk) {
//#if MC>=10800 //#if MC>=10800
return chunk.getEntityLists(); return chunk.getEntitySectionArray();
//#else //#else
//$$ return chunk.entityLists; //$$ return chunk.entityLists;
//#endif //#endif
} }
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public static List<ModelBox> cubeList(ModelRenderer modelRenderer) { public static List<Box> cubeList(Cuboid modelRenderer) {
return modelRenderer.cubeList; return modelRenderer.boxes;
} }
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public static List<EntityPlayer> playerEntities(World world) { public static List<PlayerEntity> playerEntities(World world) {
//#if MC>=11400 //#if MC>=11400
//$$ return (List) world.getPlayers(); return (List) world.getPlayers();
//#else //#else
return world.playerEntities; //$$ return world.playerEntities;
//#endif //#endif
} }
public static boolean isOnMainThread() { public static boolean isOnMainThread() {
//#if MC>=11400 //#if MC>=11400
//$$ return getMinecraft().isOnThread(); return getMinecraft().isOnThread();
//#else //#else
return getMinecraft().isCallingFromMinecraftThread(); //$$ return getMinecraft().isCallingFromMinecraftThread();
//#endif //#endif
} }
//#if MC>=11300 //#if MC>=11300
public static MainWindow newScaledResolution(Minecraft mc) { public static Window newScaledResolution(MinecraftClient mc) {
return mc.mainWindow; return mc.window;
} }
//#else //#else
//$$ public static ScaledResolution newScaledResolution(Minecraft mc) { //$$ public static ScaledResolution newScaledResolution(Minecraft mc) {
@@ -333,13 +333,13 @@ public class MCVer {
public static public static
//#if MC>=11400 //#if MC>=11400
//$$ CompletableFuture<?> CompletableFuture<?>
//#else //#else
ListenableFuture<?> //$$ ListenableFuture<?>
//#endif //#endif
setServerResourcePack(File file) { setServerResourcePack(File file) {
//#if MC>=11300 //#if MC>=11300
return getMinecraft().getPackFinder().func_195741_a(file); return getMinecraft().getResourcePackDownloader().loadServerPack(file);
//#else //#else
//$$ ResourcePackRepository repo = getMinecraft().getResourcePackRepository(); //$$ ResourcePackRepository repo = getMinecraft().getResourcePackRepository();
//#if MC>=10809 //#if MC>=10809
@@ -364,36 +364,36 @@ public class MCVer {
public static <T> void addCallback( public static <T> void addCallback(
//#if MC>=11400 //#if MC>=11400
//$$ CompletableFuture<T> future, CompletableFuture<T> future,
//#else //#else
ListenableFuture<T> future, //$$ ListenableFuture<T> future,
//#endif //#endif
Consumer<T> success, Consumer<T> success,
Consumer<Throwable> failure Consumer<Throwable> failure
) { ) {
//#if MC>=11400 //#if MC>=11400
//$$ future.thenAccept(success).exceptionally(throwable -> { future.thenAccept(success).exceptionally(throwable -> {
//$$ failure.accept(throwable); failure.accept(throwable);
//$$ return null; return null;
//$$ });
//#else
Futures.addCallback(future, new FutureCallback<T>() {
@Override
public void onSuccess(T result) {
success.accept(result);
}
@Override
public void onFailure(Throwable throwable) {
failure.accept(throwable);
}
}); });
//#else
//$$ Futures.addCallback(future, new FutureCallback<T>() {
//$$ @Override
//$$ public void onSuccess(T result) {
//$$ success.accept(result);
//$$ }
//$$
//$$ @Override
//$$ public void onFailure(Throwable throwable) {
//$$ failure.accept(throwable);
//$$ }
//$$ });
//#endif //#endif
} }
public static void BufferBuilder_setTranslation(double x, double y, double z) { public static void BufferBuilder_setTranslation(double x, double y, double z) {
//#if MC>=10800 //#if MC>=10800
Tessellator.getInstance().getBuffer().setTranslation(x, y, z); Tessellator.getInstance().getBufferBuilder().setOffset(x, y, z);
//#else //#else
//$$ Tessellator.instance.setTranslation(x, y, z); //$$ Tessellator.instance.setTranslation(x, y, z);
//#endif //#endif
@@ -401,9 +401,9 @@ public class MCVer {
public static void BufferBuilder_beginPosCol(int mode) { public static void BufferBuilder_beginPosCol(int mode) {
//#if MC>=10800 //#if MC>=10800
BufferBuilder bufferBuilder = Tessellator.getInstance().getBuffer(); BufferBuilder bufferBuilder = Tessellator.getInstance().getBufferBuilder();
//#if MC>=10809 //#if MC>=10809
bufferBuilder.begin(mode, DefaultVertexFormats.POSITION_COLOR); bufferBuilder.begin(mode, VertexFormats.POSITION_COLOR);
//#else //#else
//$$ bufferBuilder.startDrawing(mode); //$$ bufferBuilder.startDrawing(mode);
//#endif //#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) { public static void BufferBuilder_addPosCol(double x, double y, double z, int r, int g, int b, int a) {
//#if MC>=10800 //#if MC>=10800
BufferBuilder worldRenderer = Tessellator.getInstance().getBuffer(); BufferBuilder worldRenderer = Tessellator.getInstance().getBufferBuilder();
//#else //#else
//$$ Tessellator worldRenderer = Tessellator.instance; //$$ Tessellator worldRenderer = Tessellator.instance;
//#endif //#endif
//#if MC>=10809 //#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 //#else
//$$ worldRenderer.setColorRGBA(r, g, b, a); //$$ worldRenderer.setColorRGBA(r, g, b, a);
//$$ worldRenderer.addVertex(x, y, z); //$$ worldRenderer.addVertex(x, y, z);
@@ -428,9 +428,9 @@ public class MCVer {
public static void BufferBuilder_beginPosTex(int mode) { public static void BufferBuilder_beginPosTex(int mode) {
//#if MC>=10800 //#if MC>=10800
BufferBuilder bufferBuilder = Tessellator.getInstance().getBuffer(); BufferBuilder bufferBuilder = Tessellator.getInstance().getBufferBuilder();
//#if MC>=10809 //#if MC>=10809
bufferBuilder.begin(mode, DefaultVertexFormats.POSITION_TEX); bufferBuilder.begin(mode, VertexFormats.POSITION_UV);
//#else //#else
//$$ bufferBuilder.startDrawing(mode); //$$ bufferBuilder.startDrawing(mode);
//#endif //#endif
@@ -441,12 +441,12 @@ public class MCVer {
public static void BufferBuilder_addPosTex(double x, double y, double z, double u, double v) { public static void BufferBuilder_addPosTex(double x, double y, double z, double u, double v) {
//#if MC>=10800 //#if MC>=10800
BufferBuilder worldRenderer = Tessellator.getInstance().getBuffer(); BufferBuilder worldRenderer = Tessellator.getInstance().getBufferBuilder();
//#else //#else
//$$ Tessellator worldRenderer = Tessellator.instance; //$$ Tessellator worldRenderer = Tessellator.instance;
//#endif //#endif
//#if MC>=10809 //#if MC>=10809
worldRenderer.pos(x, y, z).tex(u, v).endVertex(); worldRenderer.vertex(x, y, z).texture(u, v).next();
//#else //#else
//$$ worldRenderer.addVertexWithUV(x, y, z, u, v); //$$ worldRenderer.addVertexWithUV(x, y, z, u, v);
//#endif //#endif
@@ -454,9 +454,9 @@ public class MCVer {
public static void BufferBuilder_beginPosTexCol(int mode) { public static void BufferBuilder_beginPosTexCol(int mode) {
//#if MC>=10800 //#if MC>=10800
BufferBuilder bufferBuilder = Tessellator.getInstance().getBuffer(); BufferBuilder bufferBuilder = Tessellator.getInstance().getBufferBuilder();
//#if MC>=10809 //#if MC>=10809
bufferBuilder.begin(mode, DefaultVertexFormats.POSITION_TEX_COLOR); bufferBuilder.begin(mode, VertexFormats.POSITION_UV_COLOR);
//#else //#else
//$$ bufferBuilder.startDrawing(mode); //$$ bufferBuilder.startDrawing(mode);
//#endif //#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) { 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 //#if MC>=10800
BufferBuilder worldRenderer = Tessellator.getInstance().getBuffer(); BufferBuilder worldRenderer = Tessellator.getInstance().getBufferBuilder();
//#else //#else
//$$ Tessellator worldRenderer = Tessellator.instance; //$$ Tessellator worldRenderer = Tessellator.instance;
//#endif //#endif
//#if MC>=10809 //#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 //#else
//$$ worldRenderer.setColorRGBA(r, g, b, a); //$$ worldRenderer.setColorRGBA(r, g, b, a);
//$$ worldRenderer.addVertexWithUV(x, y, z, u, v); //$$ worldRenderer.addVertexWithUV(x, y, z, u, v);
@@ -494,23 +494,23 @@ public class MCVer {
//#endif //#endif
} }
public static RenderManager getRenderManager() { public static EntityRenderDispatcher getRenderManager() {
//#if MC>=10800 //#if MC>=10800
return getMinecraft().getRenderManager(); return getMinecraft().getEntityRenderManager();
//#else //#else
//$$ return RenderManager.instance; //$$ return RenderManager.instance;
//#endif //#endif
} }
public static Minecraft getMinecraft() { public static MinecraftClient getMinecraft() {
return Minecraft.getInstance(); return MinecraftClient.getInstance();
} }
public static float getRenderPartialTicks() { 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; GuiScreenAccessor acc = (GuiScreenAccessor) screen;
acc.getButtons().add(button); acc.getButtons().add(button);
//#if MC>=11300 //#if MC>=11300
@@ -532,19 +532,19 @@ public class MCVer {
//$$ void replayModRunTickKeyboard(); //$$ void replayModRunTickKeyboard();
//#endif //#endif
//#if MC>=11400 //#if MC>=11400
//$$ void replayModExecuteTaskQueue(); void replayModExecuteTaskQueue();
//#endif //#endif
} }
public static long milliTime() { public static long milliTime() {
//#if MC>=11300 //#if MC>=11300
return Util.milliTime(); return SystemUtil.getMeasuringTimeMs();
//#else //#else
//$$ return Minecraft.getSystemTime(); //$$ return Minecraft.getSystemTime();
//#endif //#endif
} }
public static void bindTexture(ResourceLocation texture) { public static void bindTexture(Identifier texture) {
//#if MC>=11300 //#if MC>=11300
getMinecraft().getTextureManager().bindTexture(texture); getMinecraft().getTextureManager().bindTexture(texture);
//#else //#else
@@ -573,7 +573,7 @@ public class MCVer {
public static void openFile(File file) { public static void openFile(File file) {
//#if MC>=11300 //#if MC>=11300
Util.getOSType().openFile(file); SystemUtil.getOperatingSystem().open(file);
//#else //#else
//$$ String path = file.getAbsolutePath(); //$$ String path = file.getAbsolutePath();
//$$ //$$
@@ -688,9 +688,9 @@ public class MCVer {
public static boolean isKeyDown(int keyCode) { public static boolean isKeyDown(int keyCode) {
//#if MC>=11400 //#if MC>=11400
//$$ return InputUtil.isKeyPressed(getMinecraft().window.getHandle(), keyCode); return InputUtil.isKeyPressed(getMinecraft().window.getHandle(), keyCode);
//#else //#else
return InputMappings.isKeyDown(keyCode); //$$ return InputMappings.isKeyDown(keyCode);
//#endif //#endif
} }
} }

View File

@@ -22,7 +22,7 @@ import de.johni0702.minecraft.gui.layout.VerticalLayout;
import de.johni0702.minecraft.gui.popup.AbstractGuiPopup; import de.johni0702.minecraft.gui.popup.AbstractGuiPopup;
import de.johni0702.minecraft.gui.utils.lwjgl.Color; import de.johni0702.minecraft.gui.utils.lwjgl.Color;
import de.johni0702.minecraft.gui.utils.lwjgl.ReadableDimension; 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.io.IOException;
import java.nio.file.Path; import java.nio.file.Path;
@@ -153,13 +153,13 @@ public class GuiEditReplay extends AbstractGuiPopup<GuiEditReplay> {
replayFile.writeMarkers(markers); replayFile.writeMarkers(markers);
replayFile.save(); replayFile.save();
} catch (IOException e) { } 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 { try {
MarkerProcessor.apply(inputPath, progressPopup.progressBar::setProgress); MarkerProcessor.apply(inputPath, progressPopup.progressBar::setProgress);
} catch (IOException e) { } 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(() -> { ReplayMod.instance.runLater(() -> {

View File

@@ -35,7 +35,7 @@ import de.johni0702.minecraft.gui.popup.GuiInfoPopup;
import de.johni0702.minecraft.gui.popup.GuiYesNoPopup; import de.johni0702.minecraft.gui.popup.GuiYesNoPopup;
import de.johni0702.minecraft.gui.utils.Colors; import de.johni0702.minecraft.gui.utils.Colors;
import de.johni0702.minecraft.gui.utils.lwjgl.ReadableDimension; 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.io.FileUtils;
import org.apache.commons.lang3.tuple.Pair; import org.apache.commons.lang3.tuple.Pair;
@@ -221,7 +221,7 @@ public class GuiReplayEditor extends GuiScreen {
try { try {
replayFolder = mod.getReplayFolder(); replayFolder = mod.getReplayFolder();
} catch (IOException e) { } 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; return;
} }
File targetFile = new File(replayFolder, Utils.replayNameToFileName(name)); File targetFile = new File(replayFolder, Utils.replayNameToFileName(name));
@@ -275,7 +275,7 @@ public class GuiReplayEditor extends GuiScreen {
try { try {
runnable.run(); runnable.run();
} catch (Throwable t) { } 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)); mod.runLater(() -> Utils.error(LOGGER, this, crashReport, popup::close));
return; return;
} }

View File

@@ -23,8 +23,8 @@ import de.johni0702.minecraft.gui.layout.GridLayout;
import de.johni0702.minecraft.gui.layout.HorizontalLayout; import de.johni0702.minecraft.gui.layout.HorizontalLayout;
import de.johni0702.minecraft.gui.layout.VerticalLayout; import de.johni0702.minecraft.gui.layout.VerticalLayout;
import de.johni0702.minecraft.gui.utils.lwjgl.Dimension; import de.johni0702.minecraft.gui.utils.lwjgl.Dimension;
import net.minecraft.client.resources.I18n; import net.minecraft.client.resource.language.I18n;
import net.minecraft.crash.CrashReport; import net.minecraft.util.crash.CrashReport;
import org.apache.commons.lang3.tuple.Pair; import org.apache.commons.lang3.tuple.Pair;
import javax.annotation.Nullable; import javax.annotation.Nullable;
@@ -96,9 +96,9 @@ public class GuiTrimPanel extends GuiPanel {
Function<Marker, String> toString = m -> { Function<Marker, String> toString = m -> {
if (m == NO_MARKER) { if (m == NO_MARKER) {
return I18n.format("replaymod.gui.editor.trim.marker"); return I18n.translate("replaymod.gui.editor.trim.marker");
} else { } 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) + ")"; + " (" + Utils.convertSecondsToShortString(m.getTime() / 1000) + ")";
} }
}; };
@@ -112,7 +112,7 @@ public class GuiTrimPanel extends GuiPanel {
try { try {
folder = gui.getMod().getReplayFolder(); folder = gui.getMod().getReplayFolder();
} catch (IOException e) { } 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; return;
} }
GuiReplayViewer.GuiSelectReplayPopup popup = GuiReplayViewer.GuiSelectReplayPopup.openGui(gui, folder); GuiReplayViewer.GuiSelectReplayPopup popup = GuiReplayViewer.GuiSelectReplayPopup.openGui(gui, folder);
@@ -128,7 +128,7 @@ public class GuiTrimPanel extends GuiPanel {
@Override @Override
public void onFailure(Throwable t) { 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; File file = inputReplay;
// Update input button label // 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 // Load markers and meta data from replay file
ReplayMetaData metaData; ReplayMetaData metaData;
@@ -188,7 +188,7 @@ public class GuiTrimPanel extends GuiPanel {
markers = replayFile.getMarkers().or(Collections.emptySet()); markers = replayFile.getMarkers().or(Collections.emptySet());
LOGGER.debug("Loaded {} markers from replay {}", markers.size(), file); LOGGER.debug("Loaded {} markers from replay {}", markers.size(), file);
} catch (Exception e) { } 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(); metaData = new ReplayMetaData();
markers = Collections.emptySet(); markers = Collections.emptySet();
} }

View File

@@ -8,16 +8,16 @@ import com.replaymod.replay.gui.screen.GuiReplayViewer;
import de.johni0702.minecraft.gui.container.AbstractGuiScreen; import de.johni0702.minecraft.gui.container.AbstractGuiScreen;
import de.johni0702.minecraft.gui.container.GuiScreen; import de.johni0702.minecraft.gui.container.GuiScreen;
import de.johni0702.minecraft.gui.element.GuiButton; import de.johni0702.minecraft.gui.element.GuiButton;
import net.minecraft.crash.CrashReport; import net.minecraft.util.crash.CrashReport;
//#if MC>=11400 //#if MC>=11400
//$$ import de.johni0702.minecraft.gui.versions.callbacks.InitScreenCallback; import de.johni0702.minecraft.gui.versions.callbacks.InitScreenCallback;
//$$ import net.minecraft.client.gui.Screen; import net.minecraft.client.gui.Screen;
//$$ import net.minecraft.client.gui.widget.AbstractButtonWidget; import net.minecraft.client.gui.widget.AbstractButtonWidget;
//$$ import java.util.List; import java.util.List;
//#else //#else
import net.minecraftforge.client.event.GuiScreenEvent; //$$ import net.minecraftforge.client.event.GuiScreenEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent; //$$ import net.minecraftforge.eventbus.api.SubscribeEvent;
//#endif //#endif
import java.io.IOException; import java.io.IOException;
@@ -26,12 +26,12 @@ import static com.replaymod.core.versions.MCVer.*;
public class GuiHandler extends EventRegistrations { public class GuiHandler extends EventRegistrations {
//#if MC>=11400 //#if MC>=11400
//$$ { on(InitScreenCallback.EVENT, this::injectIntoReplayViewer); } { on(InitScreenCallback.EVENT, this::injectIntoReplayViewer); }
//$$ public void injectIntoReplayViewer(Screen vanillaGuiScreen, List<AbstractButtonWidget> buttonList) { public void injectIntoReplayViewer(Screen vanillaGuiScreen, List<AbstractButtonWidget> buttonList) {
//#else //#else
@SubscribeEvent //$$ @SubscribeEvent
public void injectIntoReplayViewer(GuiScreenEvent.InitGuiEvent.Post event) { //$$ public void injectIntoReplayViewer(GuiScreenEvent.InitGuiEvent.Post event) {
net.minecraft.client.gui.GuiScreen vanillaGuiScreen = getGui(event); //$$ net.minecraft.client.gui.GuiScreen vanillaGuiScreen = getGui(event);
//#endif //#endif
AbstractGuiScreen guiScreen = GuiScreen.from(vanillaGuiScreen); AbstractGuiScreen guiScreen = GuiScreen.from(vanillaGuiScreen);
if (!(guiScreen instanceof GuiReplayViewer)) { if (!(guiScreen instanceof GuiReplayViewer)) {
@@ -50,7 +50,7 @@ public class GuiHandler extends EventRegistrations {
} }
}.open(); }.open();
} catch (IOException e) { } 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()); }).setSize(73, 20).setI18nLabel("replaymod.gui.edit").setDisabled());
} }

View File

@@ -10,14 +10,14 @@ import de.johni0702.minecraft.gui.element.GuiImage;
import de.johni0702.minecraft.gui.element.IGuiImage; import de.johni0702.minecraft.gui.element.IGuiImage;
import de.johni0702.minecraft.gui.layout.HorizontalLayout; import de.johni0702.minecraft.gui.layout.HorizontalLayout;
import de.johni0702.minecraft.gui.utils.EventRegistrations; import de.johni0702.minecraft.gui.utils.EventRegistrations;
import net.minecraft.client.GameSettings; import net.minecraft.client.options.GameOptions;
//#if MC>=11400 //#if MC>=11400
//$$ import com.replaymod.core.events.PreRenderCallback; import com.replaymod.core.events.PreRenderCallback;
//$$ import com.replaymod.core.events.PostRenderCallback; import com.replaymod.core.events.PostRenderCallback;
//#else //#else
import net.minecraftforge.eventbus.api.SubscribeEvent; //$$ import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.gameevent.TickEvent; //$$ import net.minecraftforge.fml.common.gameevent.TickEvent;
//#endif //#endif
public class FullBrightness extends EventRegistrations implements Extra { 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 final IGuiImage indicator = new GuiImage().setTexture(ReplayMod.TEXTURE, 90, 20, 19, 13).setSize(19, 13);
private GameSettings gameSettings; private GameOptions gameSettings;
private boolean active; private boolean active;
//#if MC>=11300 //#if MC>=11300
private double originalGamma; private double originalGamma;
@@ -36,7 +36,7 @@ public class FullBrightness extends EventRegistrations implements Extra {
@Override @Override
public void register(final ReplayMod mod) throws Exception { public void register(final ReplayMod mod) throws Exception {
this.module = ReplayModReplay.instance; 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() { mod.getKeyBindingRegistry().registerKeyBinding("replaymod.input.lighting", Keyboard.KEY_Z, new Runnable() {
@Override @Override
@@ -44,7 +44,7 @@ public class FullBrightness extends EventRegistrations implements Extra {
active = !active; active = !active;
// need to tick once to update lightmap when replay is paused // need to tick once to update lightmap when replay is paused
//#if MC>=11300 //#if MC>=11300
mod.getMinecraft().entityRenderer.tick(); mod.getMinecraft().gameRenderer.tick();
//#else //#else
//$$ mod.getMinecraft().entityRenderer.updateRenderer(); //$$ mod.getMinecraft().entityRenderer.updateRenderer();
//#endif //#endif
@@ -59,29 +59,29 @@ public class FullBrightness extends EventRegistrations implements Extra {
} }
//#if MC>=11400 //#if MC>=11400
//$$ { on(PreRenderCallback.EVENT, this::preRender); } { on(PreRenderCallback.EVENT, this::preRender); }
//$$ private void preRender() { private void preRender() {
//#else //#else
@SubscribeEvent //$$ @SubscribeEvent
public void preRender(TickEvent.RenderTickEvent event) { //$$ public void preRender(TickEvent.RenderTickEvent event) {
if (event.phase != TickEvent.Phase.START) return; //$$ if (event.phase != TickEvent.Phase.START) return;
//#endif //#endif
if (active && module.getReplayHandler() != null) { if (active && module.getReplayHandler() != null) {
originalGamma = gameSettings.gammaSetting; originalGamma = gameSettings.gamma;
gameSettings.gammaSetting = 1000; gameSettings.gamma = 1000;
} }
} }
//#if MC>=11400 //#if MC>=11400
//$$ { on(PostRenderCallback.EVENT, this::postRender); } { on(PostRenderCallback.EVENT, this::postRender); }
//$$ private void postRender() { private void postRender() {
//#else //#else
@SubscribeEvent //$$ @SubscribeEvent
public void postRender(TickEvent.RenderTickEvent event) { //$$ public void postRender(TickEvent.RenderTickEvent event) {
if (event.phase != TickEvent.Phase.END) return; //$$ if (event.phase != TickEvent.Phase.END) return;
//#endif //#endif
if (active && module.getReplayHandler() != null) { if (active && module.getReplayHandler() != null) {
gameSettings.gammaSetting = originalGamma; gameSettings.gamma = originalGamma;
} }
} }

View File

@@ -20,7 +20,7 @@ import de.johni0702.minecraft.gui.layout.LayoutData;
import de.johni0702.minecraft.gui.utils.EventRegistrations; import de.johni0702.minecraft.gui.utils.EventRegistrations;
import de.johni0702.minecraft.gui.utils.lwjgl.Dimension; import de.johni0702.minecraft.gui.utils.lwjgl.Dimension;
import de.johni0702.minecraft.gui.utils.lwjgl.ReadableDimension; import de.johni0702.minecraft.gui.utils.lwjgl.ReadableDimension;
import net.minecraft.client.resources.I18n; import net.minecraft.client.resource.language.I18n;
//#if MC>=11300 //#if MC>=11300
//#else //#else
@@ -74,7 +74,7 @@ public class HotkeyButtons extends EventRegistrations implements Extra {
final KeyBindingRegistry keyBindingRegistry = mod.getKeyBindingRegistry(); final KeyBindingRegistry keyBindingRegistry = mod.getKeyBindingRegistry();
keyBindingRegistry.getKeyBindings().values().stream() keyBindingRegistry.getKeyBindings().values().stream()
.sorted(Comparator.comparing(it -> I18n.format(it.getKeyDescription()))) .sorted(Comparator.comparing(it -> I18n.translate(it.getId())))
.forEachOrdered(keyBinding -> { .forEachOrdered(keyBinding -> {
GuiButton button = new GuiButton(){ GuiButton button = new GuiButton(){
@Override @Override
@@ -83,7 +83,7 @@ public class HotkeyButtons extends EventRegistrations implements Extra {
String keyName = "???"; String keyName = "???";
try { try {
//#if MC>=11300 //#if MC>=11300
keyName = keyBinding.func_197978_k(); keyName = keyBinding.getLocalizedName();
//#else //#else
//$$ keyName = Keyboard.getKeyName(keyBinding.getKeyCode()); //$$ keyName = Keyboard.getKeyName(keyBinding.getKeyCode());
//#endif //#endif
@@ -111,7 +111,7 @@ public class HotkeyButtons extends EventRegistrations implements Extra {
return new Dimension(Math.max(10, button.getMinSize().getWidth()) + 10, 20); return new Dimension(Math.max(10, button.getMinSize().getWidth()) + 10, 20);
} }
}).addElements(null, button), }).addElements(null, button),
new GuiLabel().setI18nText(keyBinding.getKeyDescription()) new GuiLabel().setI18nText(keyBinding.getId())
)); ));
}); });

View File

@@ -86,7 +86,7 @@ public class OpenEyeExtra implements Extra {
GuiPopup popup = new GuiPopup(OfferGui.this); GuiPopup popup = new GuiPopup(OfferGui.this);
new Thread(() -> { new Thread(() -> {
try { 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()); FileUtils.forceMkdir(targetFile.getParentFile());
HttpsURLConnection connection = (HttpsURLConnection) new URL(DOWNLOAD_URL).openConnection(); HttpsURLConnection connection = (HttpsURLConnection) new URL(DOWNLOAD_URL).openConnection();

View File

@@ -10,7 +10,7 @@ import de.johni0702.minecraft.gui.element.GuiLabel;
import de.johni0702.minecraft.gui.function.Loadable; import de.johni0702.minecraft.gui.function.Loadable;
import de.johni0702.minecraft.gui.layout.GridLayout; import de.johni0702.minecraft.gui.layout.GridLayout;
import de.johni0702.minecraft.gui.layout.VerticalLayout; import de.johni0702.minecraft.gui.layout.VerticalLayout;
import net.minecraft.crash.CrashReport; import net.minecraft.util.crash.CrashReport;
import java.io.File; import java.io.File;
import java.nio.file.Path; import java.nio.file.Path;
@@ -50,7 +50,7 @@ public class GuiCreateScreenshot extends GuiRenderSettings implements Loadable {
buttonPanel.removeElement(queueButton); buttonPanel.removeElement(queueButton);
renderButton.setI18nLabel("replaymod.gui.advancedscreenshots.create").onClick(() -> { renderButton.setI18nLabel("replaymod.gui.advancedscreenshots.create").onClick(() -> {
// Closing this GUI ensures that settings are saved // Closing this GUI ensures that settings are saved
getMinecraft().displayGuiScreen(null); getMinecraft().openScreen(null);
mod.runLater(() -> { mod.runLater(() -> {
try { try {
@@ -63,7 +63,7 @@ public class GuiCreateScreenshot extends GuiRenderSettings implements Loadable {
} }
} catch (Throwable t) { } 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 display(); // Re-show the render settings gui and the new error popup
} }
}); });
@@ -84,7 +84,7 @@ public class GuiCreateScreenshot extends GuiRenderSettings implements Loadable {
@Override @Override
protected File generateOutputFile(RenderSettings.EncodingPreset encodingPreset) { protected File generateOutputFile(RenderSettings.EncodingPreset encodingPreset) {
DateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd_HH.mm.ss"); 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()); String baseName = DATE_FORMAT.format(new Date());
for (int i = 1; ; i++) { for (int i = 1; ; i++) {
File screenshotFile = new File(screenshotFolder, baseName + (i == 1 ? "" : "_" + i) + ".png"); File screenshotFile = new File(screenshotFolder, baseName + (i == 1 ? "" : "_" + i) + ".png");
@@ -96,6 +96,6 @@ public class GuiCreateScreenshot extends GuiRenderSettings implements Loadable {
@Override @Override
protected Path getSettingsPath() { protected Path getSettingsPath() {
return getMinecraft().gameDir.toPath().resolve("config/replaymod-screenshotsettings.json"); return getMinecraft().runDirectory.toPath().resolve("config/replaymod-screenshotsettings.json");
} }
} }

View File

@@ -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.Dimension;
import de.johni0702.minecraft.gui.utils.lwjgl.ReadableDimension; import de.johni0702.minecraft.gui.utils.lwjgl.ReadableDimension;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import net.minecraft.client.Minecraft; import net.minecraft.client.MinecraftClient;
import net.minecraft.crash.CrashReport; import net.minecraft.util.crash.CrashReport;
//#if MC>=11300 //#if MC>=11300
import com.replaymod.render.mixin.MainWindowAccessor; import com.replaymod.render.mixin.MainWindowAccessor;
@@ -24,7 +24,7 @@ import static com.replaymod.core.versions.MCVer.getRenderPartialTicks;
@RequiredArgsConstructor @RequiredArgsConstructor
public class ScreenshotRenderer implements RenderInfo { public class ScreenshotRenderer implements RenderInfo {
private final Minecraft mc = MCVer.getMinecraft(); private final MinecraftClient mc = MCVer.getMinecraft();
private final RenderSettings settings; private final RenderSettings settings;
@@ -33,18 +33,18 @@ public class ScreenshotRenderer implements RenderInfo {
public boolean renderScreenshot() throws Throwable { public boolean renderScreenshot() throws Throwable {
try { try {
//#if MC>=11300 //#if MC>=11300
int displayWidthBefore = mc.mainWindow.getFramebufferWidth(); int displayWidthBefore = mc.window.getFramebufferWidth();
int displayHeightBefore = mc.mainWindow.getFramebufferHeight(); int displayHeightBefore = mc.window.getFramebufferHeight();
//#else //#else
//$$ int displayWidthBefore = mc.displayWidth; //$$ int displayWidthBefore = mc.displayWidth;
//$$ int displayHeightBefore = mc.displayHeight; //$$ int displayHeightBefore = mc.displayHeight;
//#endif //#endif
boolean hideGUIBefore = mc.gameSettings.hideGUI; boolean hideGUIBefore = mc.options.hudHidden;
mc.gameSettings.hideGUI = true; mc.options.hudHidden = true;
//#if MC>=10800 //#if MC>=10800
ChunkLoadingRenderGlobal clrg = new ChunkLoadingRenderGlobal(mc.renderGlobal); ChunkLoadingRenderGlobal clrg = new ChunkLoadingRenderGlobal(mc.worldRenderer);
//#endif //#endif
if (settings.getRenderMethod() == RenderSettings.RenderMethod.BLEND) { if (settings.getRenderMethod() == RenderSettings.RenderMethod.BLEND) {
@@ -59,15 +59,15 @@ public class ScreenshotRenderer implements RenderInfo {
clrg.uninstall(); clrg.uninstall();
//#endif //#endif
mc.gameSettings.hideGUI = hideGUIBefore; mc.options.hudHidden = hideGUIBefore;
//#if MC>=11300 //#if MC>=11300
//noinspection ConstantConditions //noinspection ConstantConditions
MainWindowAccessor acc = (MainWindowAccessor) (Object) mc.mainWindow; MainWindowAccessor acc = (MainWindowAccessor) (Object) mc.window;
acc.setFramebufferWidth(displayWidthBefore); acc.setFramebufferWidth(displayWidthBefore);
acc.setFramebufferHeight(displayHeightBefore); acc.setFramebufferHeight(displayHeightBefore);
mc.getFramebuffer().createBindFramebuffer(displayWidthBefore, displayHeightBefore mc.getFramebuffer().resize(displayWidthBefore, displayHeightBefore
//#if MC>=11400 //#if MC>=11400
//$$ , false , false
//#endif //#endif
); );
//#else //#else
@@ -76,8 +76,8 @@ public class ScreenshotRenderer implements RenderInfo {
return true; return true;
} catch (OutOfMemoryError e) { } catch (OutOfMemoryError e) {
e.printStackTrace(); e.printStackTrace();
CrashReport report = CrashReport.makeCrashReport(e, "Creating Equirectangular Screenshot"); CrashReport report = CrashReport.create(e, "Creating Equirectangular Screenshot");
MCVer.getMinecraft().crashed(report); MCVer.getMinecraft().setCrashReport(report);
} }
return false; return false;
} }

View File

@@ -8,7 +8,7 @@ import com.replaymod.render.frame.RGBFrame;
import com.replaymod.render.rendering.FrameConsumer; import com.replaymod.render.rendering.FrameConsumer;
import com.replaymod.replay.ReplayModReplay; import com.replaymod.replay.ReplayModReplay;
import de.johni0702.minecraft.gui.utils.lwjgl.ReadableDimension; import de.johni0702.minecraft.gui.utils.lwjgl.ReadableDimension;
import net.minecraft.crash.CrashReport; import net.minecraft.util.crash.CrashReport;
import javax.imageio.ImageIO; import javax.imageio.ImageIO;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
@@ -47,10 +47,10 @@ public class ScreenshotWriter implements FrameConsumer<RGBFrame> {
ImageIO.write(img, "PNG", outputFile); ImageIO.write(img, "PNG", outputFile);
} catch (OutOfMemoryError e) { } catch (OutOfMemoryError e) {
e.printStackTrace(); e.printStackTrace();
CrashReport report = CrashReport.makeCrashReport(e, "Exporting frame"); CrashReport report = CrashReport.create(e, "Exporting frame");
MCVer.getMinecraft().crashed(report); MCVer.getMinecraft().setCrashReport(report);
} catch (Throwable t) { } catch (Throwable t) {
CrashReport report = CrashReport.makeCrashReport(t, "Exporting frame"); CrashReport report = CrashReport.create(t, "Exporting frame");
ReplayMod.instance.runLater(() -> Utils.error(ReplayModExtras.LOGGER, ReplayMod.instance.runLater(() -> Utils.error(ReplayModExtras.LOGGER,
ReplayModReplay.instance.getReplayHandler().getOverlay(), ReplayModReplay.instance.getReplayHandler().getOverlay(),

View File

@@ -11,23 +11,23 @@ import com.replaymod.replay.events.ReplayClosedCallback;
import com.replaymod.replay.events.ReplayOpenedCallback; import com.replaymod.replay.events.ReplayOpenedCallback;
import de.johni0702.minecraft.gui.utils.EventRegistrations; import de.johni0702.minecraft.gui.utils.EventRegistrations;
import net.minecraft.entity.Entity; import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.PlayerEntity;
//#if MC>=11400 //#if MC>=11400
//$$ import com.replaymod.core.events.PreRenderHandCallback; import com.replaymod.core.events.PreRenderHandCallback;
//$$ import java.util.stream.Collectors; import java.util.stream.Collectors;
//#else //#else
import net.minecraftforge.client.event.RenderHandEvent; //$$ import net.minecraftforge.client.event.RenderHandEvent;
//$$
//#if MC>=11300 //#if MC>=11300
//#else //#else
//$$ import org.lwjgl.input.Keyboard; //$$ import org.lwjgl.input.Keyboard;
//#endif //#endif
//$$
//#if MC>=10800 //#if MC>=10800
import com.google.common.base.Predicate; //$$ import com.google.common.base.Predicate;
//#if MC>=11300 //#if MC>=11300
import net.minecraftforge.eventbus.api.SubscribeEvent; //$$ import net.minecraftforge.eventbus.api.SubscribeEvent;
//#else //#else
//$$ import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; //$$ import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
//#endif //#endif
@@ -59,20 +59,20 @@ public class PlayerOverview extends EventRegistrations implements Extra {
public void run() { public void run() {
if (module.getReplayHandler() != null) { if (module.getReplayHandler() != null) {
//#if MC>=11400 //#if MC>=11400
//$$ List<PlayerEntity> players = mod.getMinecraft().world.getPlayers() List<PlayerEntity> players = mod.getMinecraft().world.getPlayers()
//$$ .stream() .stream()
//$$ .map(it -> (PlayerEntity) it) .map(it -> (PlayerEntity) it)
//$$ .filter(it -> !(it instanceof CameraEntity)) .filter(it -> !(it instanceof CameraEntity))
//$$ .collect(Collectors.toList()); .collect(Collectors.toList());
//#else //#else
@SuppressWarnings("unchecked") //$$ @SuppressWarnings("unchecked")
//#if MC>=10800 //#if MC>=10800
List<EntityPlayer> players = mod.getMinecraft().world.getPlayers(EntityPlayer.class, new Predicate() { //$$ List<EntityPlayer> players = mod.getMinecraft().world.getPlayers(EntityPlayer.class, new Predicate() {
@Override //$$ @Override
public boolean apply(Object input) { //$$ public boolean apply(Object input) {
return !(input instanceof CameraEntity); // Exclude the camera entity //$$ return !(input instanceof CameraEntity); // Exclude the camera entity
} //$$ }
}); //$$ });
//#else //#else
//$$ List<EntityPlayer> players = mod.getMinecraft().theWorld.playerEntities; //$$ List<EntityPlayer> players = mod.getMinecraft().theWorld.playerEntities;
//$$ players = players.stream() //$$ players = players.stream()
@@ -82,7 +82,7 @@ public class PlayerOverview extends EventRegistrations implements Extra {
//#endif //#endif
if (!Utils.isCtrlDown()) { if (!Utils.isCtrlDown()) {
// Hide all players that have an UUID v2 (commonly used for NPCs) // Hide all players that have an UUID v2 (commonly used for NPCs)
Iterator<EntityPlayer> iter = players.iterator(); Iterator<PlayerEntity> iter = players.iterator();
while (iter.hasNext()) { while (iter.hasNext()) {
UUID uuid = iter.next().getGameProfile().getId(); UUID uuid = iter.next().getGameProfile().getId();
if (uuid != null && uuid.version() == 2) { if (uuid != null && uuid.version() == 2) {
@@ -99,7 +99,7 @@ public class PlayerOverview extends EventRegistrations implements Extra {
ReplayClosedCallback.EVENT.register(this::onReplayClose); ReplayClosedCallback.EVENT.register(this::onReplayClose);
//#if MC>=11400 //#if MC>=11400
//#else //#else
FORGE_BUS.register(this); //$$ FORGE_BUS.register(this);
//#endif //#endif
} }
@@ -130,18 +130,18 @@ public class PlayerOverview extends EventRegistrations implements Extra {
} }
//#if MC>=11400 //#if MC>=11400
//$$ { on(PreRenderHandCallback.EVENT, this::shouldHideHand); } { on(PreRenderHandCallback.EVENT, this::shouldHideHand); }
//#else //#else
@SubscribeEvent //$$ @SubscribeEvent
public void oRenderHand(RenderHandEvent event) { //$$ public void oRenderHand(RenderHandEvent event) {
if (shouldHideHand()) { //$$ if (shouldHideHand()) {
event.setCanceled(true); //$$ event.setCanceled(true);
} //$$ }
} //$$ }
//#endif //#endif
private boolean shouldHideHand() { private boolean shouldHideHand() {
Entity view = getRenderViewEntity(module.getCore().getMinecraft()); 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 // See MixinRender for why this is 1.7.10 only

View File

@@ -20,17 +20,17 @@ import de.johni0702.minecraft.gui.layout.HorizontalLayout;
import de.johni0702.minecraft.gui.utils.Colors; import de.johni0702.minecraft.gui.utils.Colors;
import de.johni0702.minecraft.gui.utils.lwjgl.Dimension; import de.johni0702.minecraft.gui.utils.lwjgl.Dimension;
import de.johni0702.minecraft.gui.utils.lwjgl.ReadableDimension; import de.johni0702.minecraft.gui.utils.lwjgl.ReadableDimension;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.util.ResourceLocation; import net.minecraft.util.Identifier;
//#if MC>=10904 //#if MC>=10904
import net.minecraft.init.MobEffects; import net.minecraft.entity.effect.StatusEffects;
//#else //#else
//$$ import net.minecraft.potion.Potion; //$$ import net.minecraft.potion.Potion;
//#endif //#endif
//#if MC>=10800 //#if MC>=10800
import net.minecraft.entity.player.EnumPlayerModelParts; import net.minecraft.client.render.entity.PlayerModelPart;
//#endif //#endif
import java.util.Collections; import java.util.Collections;
@@ -89,12 +89,12 @@ public class PlayerOverviewGui extends GuiScreen implements Closeable {
private final PlayerOverview extra; private final PlayerOverview extra;
public PlayerOverviewGui(final PlayerOverview extra, List<EntityPlayer> players) { public PlayerOverviewGui(final PlayerOverview extra, List<PlayerEntity> players) {
this.extra = extra; this.extra = extra;
Collections.sort(players, new PlayerComparator()); // Sort by name, spectators last Collections.sort(players, new PlayerComparator()); // Sort by name, spectators last
for (final EntityPlayer p : players) { for (final PlayerEntity p : players) {
final ResourceLocation texture = Utils.getResourceLocationForPlayerUUID(p.getUniqueID()); final Identifier texture = Utils.getResourceLocationForPlayerUUID(p.getUuid());
final GuiClickable panel = new GuiClickable().setLayout(new HorizontalLayout().setSpacing(2)).addElements( final GuiClickable panel = new GuiClickable().setLayout(new HorizontalLayout().setSpacing(2)).addElements(
new HorizontalLayout.Data(0.5), new GuiImage() { new HorizontalLayout.Data(0.5), new GuiImage() {
@Override @Override
@@ -102,7 +102,7 @@ public class PlayerOverviewGui extends GuiScreen implements Closeable {
renderer.bindTexture(texture); renderer.bindTexture(texture);
renderer.drawTexturedRect(0, 0, 8, 8, 16, 16, 8, 8, 64, 64); renderer.drawTexturedRect(0, 0, 8, 8, 16, 16, 8, 8, 64, 64);
//#if MC>=10809 //#if MC>=10809
if (p.isWearing(EnumPlayerModelParts.HAT)) { if (p.isSkinOverlayVisible(PlayerModelPart.HEAD)) {
//#else //#else
//#if MC>=10800 //#if MC>=10800
//$$ if (p.func_175148_a(EnumPlayerModelParts.HAT)) { //$$ if (p.func_175148_a(EnumPlayerModelParts.HAT)) {
@@ -134,10 +134,10 @@ public class PlayerOverviewGui extends GuiScreen implements Closeable {
final GuiCheckbox checkbox = new GuiCheckbox() { final GuiCheckbox checkbox = new GuiCheckbox() {
@Override @Override
public GuiCheckbox setChecked(boolean checked) { public GuiCheckbox setChecked(boolean checked) {
extra.setHidden(p.getUniqueID(), !checked); extra.setHidden(p.getUuid(), !checked);
return super.setChecked(checked); return super.setChecked(checked);
} }
}.setChecked(!extra.isHidden(p.getUniqueID())); }.setChecked(!extra.isHidden(p.getUuid()));
new GuiPanel(playersScrollable.getListPanel()).setLayout(new CustomLayout<GuiPanel>() { new GuiPanel(playersScrollable.getListPanel()).setLayout(new CustomLayout<GuiPanel>() {
@Override @Override
protected void layout(GuiPanel container, int width, int height) { protected void layout(GuiPanel container, int width, int height) {
@@ -167,17 +167,17 @@ public class PlayerOverviewGui extends GuiScreen implements Closeable {
extra.saveHiddenPlayers(); extra.saveHiddenPlayers();
} }
private static boolean isSpectator(EntityPlayer e) { private static boolean isSpectator(PlayerEntity e) {
//#if MC>=10904 //#if MC>=10904
return e.isInvisible() && e.getActivePotionEffect(MobEffects.INVISIBILITY) == null; return e.isInvisible() && e.getStatusEffect(StatusEffects.INVISIBILITY) == null;
//#else //#else
//$$ return e.isInvisible() && e.getActivePotionEffect(Potion.invisibility) == null; //$$ return e.isInvisible() && e.getActivePotionEffect(Potion.invisibility) == null;
//#endif //#endif
} }
private static final class PlayerComparator implements Comparator<EntityPlayer> { private static final class PlayerComparator implements Comparator<PlayerEntity> {
@Override @Override
public int compare(EntityPlayer o1, EntityPlayer o2) { public int compare(PlayerEntity o1, PlayerEntity o2) {
if (isSpectator(o1) && !isSpectator(o2)) return 1; if (isSpectator(o1) && !isSpectator(o2)) return 1;
if (isSpectator(o2) && !isSpectator(o1)) return -1; if (isSpectator(o2) && !isSpectator(o1)) return -1;
//#if MC>=11300 //#if MC>=11300

View File

@@ -2,15 +2,15 @@ package com.replaymod.extras.playeroverview.mixin;
import com.replaymod.extras.ReplayModExtras; import com.replaymod.extras.ReplayModExtras;
import com.replaymod.extras.playeroverview.PlayerOverview; 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.Entity;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.PlayerEntity;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Inject;
//#if MC>=10800 //#if MC>=10800
import net.minecraft.client.renderer.culling.ICamera; import net.minecraft.client.render.VisibleRegion;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
//#else //#else
//$$ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; //$$ 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 * 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 { public abstract class MixinRender {
//#if MC>=10800 //#if MC>=10800
@Inject(method = "shouldRender", at=@At("HEAD"), cancellable = true) @Inject(method = "isVisible", at=@At("HEAD"), cancellable = true)
public void replayModExtras_isPlayerHidden(Entity entity, ICamera camera, double camX, double camY, double camZ, CallbackInfoReturnable<Boolean> ci) { public void replayModExtras_isPlayerHidden(Entity entity, VisibleRegion camera, double camX, double camY, double camZ, CallbackInfoReturnable<Boolean> ci) {
ReplayModExtras.instance.get(PlayerOverview.class).ifPresent(playerOverview -> { ReplayModExtras.instance.get(PlayerOverview.class).ifPresent(playerOverview -> {
if (entity instanceof EntityPlayer) { if (entity instanceof PlayerEntity) {
EntityPlayer player = (EntityPlayer) entity; PlayerEntity player = (PlayerEntity) entity;
if (playerOverview.isHidden(player.getUniqueID())) { if (playerOverview.isHidden(player.getUuid())) {
ci.setReturnValue(false); ci.setReturnValue(false);
} }
} }

View File

@@ -1,6 +1,6 @@
package com.replaymod.extras.urischeme; package com.replaymod.extras.urischeme;
import net.minecraft.util.Util; import net.minecraft.util.SystemUtil;
import javax.swing.*; import javax.swing.*;
import java.io.*; import java.io.*;
@@ -70,12 +70,12 @@ public abstract class UriScheme {
} }
public static UriScheme create() { public static UriScheme create() {
switch (Util.getOSType()) { switch (SystemUtil.getOperatingSystem()) {
case LINUX: case UNIX:
return new LinuxUriScheme(); return new LinuxUriScheme();
case WINDOWS: case WINDOWS:
return new WindowsUriScheme(); return new WindowsUriScheme();
case OSX: case MAC:
return new OSXUriScheme(); return new OSXUriScheme();
case SOLARIS: case SOLARIS:
case UNKNOWN: case UNKNOWN:

View File

@@ -21,11 +21,11 @@ import de.johni0702.minecraft.gui.popup.GuiFileChooserPopup;
import de.johni0702.minecraft.gui.utils.lwjgl.ReadableDimension; import de.johni0702.minecraft.gui.utils.lwjgl.ReadableDimension;
import joptsimple.internal.Strings; import joptsimple.internal.Strings;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import net.minecraft.client.resources.I18n; import net.minecraft.client.resource.language.I18n;
import org.apache.commons.io.IOUtils; import org.apache.commons.io.IOUtils;
//#if MC>=11300 //#if MC>=11300
import net.minecraft.util.Util; import net.minecraft.util.SystemUtil;
//#else //#else
//$$ import org.lwjgl.Sys; //$$ import org.lwjgl.Sys;
//#endif //#endif
@@ -83,7 +83,7 @@ public class GuiYoutubeUpload extends GuiScreen {
public final GuiTextArea descriptionField = new GuiTextArea().setMaxCharCount(Integer.MAX_VALUE) public final GuiTextArea descriptionField = new GuiTextArea().setMaxCharCount(Integer.MAX_VALUE)
.setMaxTextWidth(Integer.MAX_VALUE).setMaxTextHeight(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"); 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()); Desktop.getDesktop().browse(new URL(url).toURI());
} catch(Throwable throwable) { } catch(Throwable throwable) {
//#if MC>=11400 //#if MC>=11400
//$$ SystemUtil.getOperatingSystem().open(url); SystemUtil.getOperatingSystem().open(url);
//#else //#else
//#if MC>=11300 //#if MC>=11300
Util.getOSType().openURI(url); //$$ Util.getOSType().openURI(url);
//#else //#else
//$$ Sys.openURL(url); //$$ Sys.openURL(url);
//#endif //#endif
//#endif //#endif
} }
upload = null; upload = null;
progressBar.setLabel(I18n.format("replaymod.gui.ytuploadprogress.done", url)); progressBar.setLabel(I18n.translate("replaymod.gui.ytuploadprogress.done", url));
setState(false); setState(false);
} }

View File

@@ -1,12 +1,12 @@
package com.replaymod.extras.youtube; package com.replaymod.extras.youtube;
import net.minecraft.client.resources.I18n; import net.minecraft.client.resource.language.I18n;
public enum VideoVisibility { public enum VideoVisibility {
PUBLIC, UNLISTED, PRIVATE; PUBLIC, UNLISTED, PRIVATE;
@Override @Override
public String toString() { public String toString() {
return I18n.format("replaymod.gui.videovisibility." + name().toLowerCase()); return I18n.translate("replaymod.gui.videovisibility." + name().toLowerCase());
} }
} }

View File

@@ -8,11 +8,11 @@ import de.johni0702.minecraft.gui.element.GuiButton;
import de.johni0702.minecraft.gui.utils.EventRegistrations; import de.johni0702.minecraft.gui.utils.EventRegistrations;
//#if MC>=11400 //#if MC>=11400
//$$ import de.johni0702.minecraft.gui.versions.callbacks.OpenGuiScreenCallback; import de.johni0702.minecraft.gui.versions.callbacks.OpenGuiScreenCallback;
//$$ import net.minecraft.client.gui.Screen; import net.minecraft.client.gui.Screen;
//#else //#else
import net.minecraftforge.client.event.GuiScreenEvent; //$$ import net.minecraftforge.client.event.GuiScreenEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent; //$$ import net.minecraftforge.eventbus.api.SubscribeEvent;
//#endif //#endif
import static com.replaymod.core.versions.MCVer.*; import static com.replaymod.core.versions.MCVer.*;
@@ -24,12 +24,12 @@ public class YoutubeUpload extends EventRegistrations implements Extra {
} }
//#if MC>=11400 //#if MC>=11400
//$$ { on(OpenGuiScreenCallback.EVENT, this::onGuiOpen); } { on(OpenGuiScreenCallback.EVENT, this::onGuiOpen); }
//$$ private void onGuiOpen(Screen vanillaGui) { private void onGuiOpen(Screen vanillaGui) {
//#else //#else
@SubscribeEvent //$$ @SubscribeEvent
public void onGuiOpen(GuiScreenEvent.InitGuiEvent.Post event) { //$$ public void onGuiOpen(GuiScreenEvent.InitGuiEvent.Post event) {
net.minecraft.client.gui.GuiScreen vanillaGui = getGui(event); //$$ net.minecraft.client.gui.GuiScreen vanillaGui = getGui(event);
//#endif //#endif
if (GuiScreen.from(vanillaGui) instanceof GuiRenderingDone) { if (GuiScreen.from(vanillaGui) instanceof GuiRenderingDone) {
GuiRenderingDone gui = (GuiRenderingDone) GuiScreen.from(vanillaGui); GuiRenderingDone gui = (GuiRenderingDone) GuiScreen.from(vanillaGui);

View File

@@ -28,7 +28,7 @@ import com.replaymod.render.RenderSettings;
import com.replaymod.render.metadata.MetadataInjector; import com.replaymod.render.metadata.MetadataInjector;
import lombok.Getter; import lombok.Getter;
import lombok.NonNull; import lombok.NonNull;
import net.minecraft.client.Minecraft; import net.minecraft.client.MinecraftClient;
import org.apache.commons.exec.CommandLine; import org.apache.commons.exec.CommandLine;
import org.apache.commons.io.FileUtils; import org.apache.commons.io.FileUtils;
@@ -66,7 +66,7 @@ public class YoutubeUploader {
@Getter @Getter
private volatile boolean cancelled; private volatile boolean cancelled;
public YoutubeUploader(Minecraft minecraft, File videoFile, int videoFrames, public YoutubeUploader(MinecraftClient minecraft, File videoFile, int videoFrames,
String thumbnailFormat, byte[] thumbnailImage, String thumbnailFormat, byte[] thumbnailImage,
RenderSettings settings, VideoVisibility videoVisibility, VideoSnippet videoSnippet) RenderSettings settings, VideoVisibility videoVisibility, VideoSnippet videoSnippet)
throws GeneralSecurityException, IOException { throws GeneralSecurityException, IOException {
@@ -78,7 +78,7 @@ public class YoutubeUploader {
this.videoVisibility = videoVisibility; this.videoVisibility = videoVisibility;
this.videoSnippet = videoSnippet; this.videoSnippet = videoSnippet;
this.httpTransport = GoogleNetHttpTransport.newTrustedTransport(); this.httpTransport = GoogleNetHttpTransport.newTrustedTransport();
this.dataStoreFactory = new FileDataStoreFactory(minecraft.gameDir); this.dataStoreFactory = new FileDataStoreFactory(minecraft.runDirectory);
} }

View File

@@ -57,7 +57,7 @@ public class ReplayModOnline implements Module {
@Override @Override
public void initClient() { 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); PlainFileAuthData authData = new PlainFileAuthData(path);
apiClient = new ApiClient(authData); apiClient = new ApiClient(authData);
if (Files.notExists(path)) { if (Files.notExists(path)) {
@@ -89,11 +89,11 @@ public class ReplayModOnline implements Module {
@Override @Override
public void run() { public void run() {
//#if MC>=11400 //#if MC>=11400
//$$ if (getMinecraft().overlay != null) { if (getMinecraft().overlay != null) {
//$$ // delay until after resources have been loaded // delay until after resources have been loaded
//$$ core.runLater(this); core.runLater(this);
//$$ return; return;
//$$ } }
//#endif //#endif
GuiScreen parent = GuiScreen.wrap(getMinecraft().currentScreen); GuiScreen parent = GuiScreen.wrap(getMinecraft().currentScreen);
new GuiLoginPrompt(apiClient, parent, parent, false).display(); new GuiLoginPrompt(apiClient, parent, parent, false).display();
@@ -142,7 +142,7 @@ public class ReplayModOnline implements Module {
public File getDownloadsFolder() { public File getDownloadsFolder() {
String path = core.getSettingsRegistry().get(Setting.DOWNLOAD_PATH); 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) { public File getDownloadedFile(int id) {

View File

@@ -11,7 +11,7 @@ import com.replaymod.online.AuthenticationHash;
import com.replaymod.online.api.replay.ReplayModApiMethods; import com.replaymod.online.api.replay.ReplayModApiMethods;
import com.replaymod.online.api.replay.SearchQuery; import com.replaymod.online.api.replay.SearchQuery;
import com.replaymod.online.api.replay.holders.*; 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.FileUtils;
import org.apache.commons.io.IOUtils; import org.apache.commons.io.IOUtils;
@@ -31,7 +31,7 @@ import static com.replaymod.core.utils.Utils.SSL_SOCKET_FACTORY;
public class ApiClient { 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 Gson gson = new Gson();
private static final JsonParser jsonParser = new JsonParser(); private static final JsonParser jsonParser = new JsonParser();
@@ -101,7 +101,7 @@ public class ApiClient {
AuthenticationHash hash = new AuthenticationHash(); AuthenticationHash hash = new AuthenticationHash();
mc.getSessionService().joinServer( mc.getSessionService().joinServer(
mc.getSession().getProfile(), mc.getSession().getToken(), hash.hash); mc.getSession().getProfile(), mc.getSession().getAccessToken(), hash.hash);
return hash; return hash;
} }

View File

@@ -1,7 +1,7 @@
package com.replaymod.online.api.replay.holders; package com.replaymod.online.api.replay.holders;
import lombok.Data; import lombok.Data;
import net.minecraft.client.resources.I18n; import net.minecraft.client.resource.language.I18n;
@Data @Data
public class ApiError { public class ApiError {
@@ -13,7 +13,7 @@ public class ApiError {
public String getTranslatedDesc() { public String getTranslatedDesc() {
try { try {
return I18n.format(key, (Object[]) objects); return I18n.translate(key, (Object[]) objects);
} catch(Exception e) { } catch(Exception e) {
e.printStackTrace(); e.printStackTrace();
return desc; return desc;

View File

@@ -1,6 +1,6 @@
package com.replaymod.online.api.replay.holders; package com.replaymod.online.api.replay.holders;
import net.minecraft.client.resources.I18n; import net.minecraft.client.resource.language.I18n;
public enum Category { public enum Category {
@@ -27,7 +27,7 @@ public enum Category {
} }
public String toNiceString() { public String toNiceString() {
return I18n.format(this.name); return I18n.translate(this.name);
} }
public Category next() { public Category next() {

View File

@@ -15,7 +15,7 @@ import de.johni0702.minecraft.gui.utils.Utils;
import com.replaymod.core.utils.Patterns; import com.replaymod.core.utils.Patterns;
import de.johni0702.minecraft.gui.utils.lwjgl.Dimension; import de.johni0702.minecraft.gui.utils.lwjgl.Dimension;
import de.johni0702.minecraft.gui.utils.lwjgl.ReadableColor; 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<GuiRegister> { public class GuiRegister extends AbstractGuiScreen<GuiRegister> {
public static final int MIN_PW_LENGTH = 5; public static final int MIN_PW_LENGTH = 5;
@@ -56,9 +56,9 @@ public class GuiRegister extends AbstractGuiScreen<GuiRegister> {
pos(cancelButton, width / 2 + 2, 170); pos(cancelButton, width / 2 + 2, 170);
pos(statusLabel, width / 2 - statusLabel.getMinSize().getWidth() / 2, 152); pos(statusLabel, width / 2 - statusLabel.getMinSize().getWidth() / 2, 152);
FontRenderer font = getMinecraft().fontRenderer; TextRenderer font = getMinecraft().textRenderer;
int lineCount = font.listFormattedStringToWidth(disclaimerLabel.getText(), width - 10).size(); int lineCount = font.wrapStringToWidthAsList(disclaimerLabel.getText(), width - 10).size();
Dimension dim = new Dimension(width - 10, font.FONT_HEIGHT * lineCount); Dimension dim = new Dimension(width - 10, font.fontHeight * lineCount);
disclaimerLabel.setSize(dim); disclaimerLabel.setSize(dim);
pos(disclaimerLabel, 5, height - dim.getHeight() - 5); pos(disclaimerLabel, 5, height - dim.getHeight() - 5);
} }

View File

@@ -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.Dimension;
import de.johni0702.minecraft.gui.utils.lwjgl.ReadableDimension; import de.johni0702.minecraft.gui.utils.lwjgl.ReadableDimension;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import net.minecraft.util.text.TextFormatting; import net.minecraft.text.TextFormat;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
import java.io.IOException; import java.io.IOException;
@@ -220,7 +220,7 @@ public class GuiReplayCenter extends GuiScreen {
public void onSuccess(Boolean result) { public void onSuccess(Boolean result) {
if (result) { if (result) {
apiClient.logout(); 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() { public final GuiButton mainMenuButton = new GuiButton().onClick(new Runnable() {
@Override @Override
public void run() { public void run() {
getMinecraft().displayGuiScreen(null); getMinecraft().openScreen(null);
} }
}).setSize(195, 20).setI18nLabel("replaymod.gui.mainmenu"); }).setSize(195, 20).setI18nLabel("replaymod.gui.mainmenu");
@@ -417,9 +417,9 @@ public class GuiReplayCenter extends GuiScreen {
this.downloaded = downloaded; this.downloaded = downloaded;
ReplayMetaData metaData = fileInfo.getMetadata(); 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", author.setI18nText("replaymod.gui.center.author",
"" + TextFormatting.GRAY + TextFormatting.ITALIC, fileInfo.getOwner()); "" + TextFormat.GRAY + TextFormat.ITALIC, fileInfo.getOwner());
if (StringUtils.isEmpty(metaData.getServerName())) { if (StringUtils.isEmpty(metaData.getServerName())) {
server.setI18nText("replaymod.gui.iphidden").setColor(Colors.DARK_RED); server.setI18nText("replaymod.gui.iphidden").setColor(Colors.DARK_RED);
} else { } else {
@@ -443,7 +443,7 @@ public class GuiReplayCenter extends GuiScreen {
favorites.setText("" + fileInfo.getFavorites()); favorites.setText("" + fileInfo.getFavorites());
likes.setText("" + fileInfo.getRatings().getPositive()); likes.setText("" + fileInfo.getRatings().getPositive());
dislikes.setText("" + fileInfo.getRatings().getNegative()); 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()); .or(Category.MISCELLANEOUS).toNiceString());
addElements(null, durationPanel, downloadsPanel); addElements(null, durationPanel, downloadsPanel);

View File

@@ -16,7 +16,7 @@ import de.johni0702.minecraft.gui.layout.GridLayout;
import de.johni0702.minecraft.gui.popup.AbstractGuiPopup; import de.johni0702.minecraft.gui.popup.AbstractGuiPopup;
import de.johni0702.minecraft.gui.utils.Colors; import de.johni0702.minecraft.gui.utils.Colors;
import de.johni0702.minecraft.gui.utils.lwjgl.ReadablePoint; import de.johni0702.minecraft.gui.utils.lwjgl.ReadablePoint;
import net.minecraft.client.resources.I18n; import net.minecraft.client.resource.language.I18n;
//#if MC>=11300 //#if MC>=11300
import com.replaymod.core.versions.MCVer.Keyboard; import com.replaymod.core.versions.MCVer.Keyboard;
@@ -61,26 +61,26 @@ public class GuiReplayCenterSearch extends AbstractGuiPopup<GuiReplayCenterSearc
}).setI18nLabel("replaymod.gui.center.top.search"); }).setI18nLabel("replaymod.gui.center.top.search");
{ {
List<String> categories = new ArrayList<>(); List<String> 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()) { for (Category c : Category.values()) {
categories.add(c.toNiceString()); categories.add(c.toNiceString());
} }
category.setValues(categories.toArray(new String[categories.size()])); category.setValues(categories.toArray(new String[categories.size()]));
List<String> versions = new ArrayList<>(); List<String> 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()) { for (MinecraftVersion v : MinecraftVersion.values()) {
versions.add(v.toNiceName()); versions.add(v.toNiceName());
} }
version.setValues(versions.toArray(new String[versions.size()])); version.setValues(versions.toArray(new String[versions.size()]));
gameType.setI18nLabel("replaymod.gui.center.search.gametype") gameType.setI18nLabel("replaymod.gui.center.search.gametype")
.setValues(I18n.format("options.particles.all"), .setValues(I18n.translate("options.particles.all"),
I18n.format("menu.singleplayer"), I18n.translate("menu.singleplayer"),
I18n.format("menu.multiplayer")); I18n.translate("menu.multiplayer"));
sort.setI18nLabel("replaymod.gui.center.search.order") sort.setI18nLabel("replaymod.gui.center.search.order")
.setValues(I18n.format("replaymod.gui.center.search.order.best"), .setValues(I18n.translate("replaymod.gui.center.search.order.best"),
I18n.format("replaymod.gui.center.search.order.recent")); I18n.translate("replaymod.gui.center.search.order.recent"));
popup.setLayout(new GridLayout().setColumns(3).setSpacingX(5).setSpacingY(5)); popup.setLayout(new GridLayout().setColumns(3).setSpacingX(5).setSpacingY(5));
popup.addElements(null, popup.addElements(null,

View File

@@ -10,7 +10,7 @@ import de.johni0702.minecraft.gui.element.GuiButton;
import de.johni0702.minecraft.gui.element.GuiLabel; import de.johni0702.minecraft.gui.element.GuiLabel;
import de.johni0702.minecraft.gui.element.advanced.GuiProgressBar; import de.johni0702.minecraft.gui.element.advanced.GuiProgressBar;
import de.johni0702.minecraft.gui.layout.CustomLayout; 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.File;
import java.io.IOException; import java.io.IOException;
@@ -34,7 +34,7 @@ public class GuiReplayDownloading extends AbstractGuiScreen<GuiReplayDownloading
this.apiClient = mod.getApiClient(); this.apiClient = mod.getApiClient();
setTitle(new GuiLabel().setI18nText("replaymod.gui.viewer.download.title")); setTitle(new GuiLabel().setI18nText("replaymod.gui.viewer.download.title"));
final GuiLabel subTitle = new GuiLabel(this).setI18nText("replaymod.gui.viewer.download.message", final GuiLabel subTitle = new GuiLabel(this).setI18nText("replaymod.gui.viewer.download.message",
TextFormatting.UNDERLINE + name + TextFormatting.RESET); TextFormat.UNDERLINE + name + TextFormat.RESET);
setLayout(new CustomLayout<GuiReplayDownloading>() { setLayout(new CustomLayout<GuiReplayDownloading>() {
@Override @Override
protected void layout(GuiReplayDownloading container, int width, int height) { protected void layout(GuiReplayDownloading container, int width, int height) {

View File

@@ -44,7 +44,7 @@ public class GuiSaveModifiedReplay extends GuiScreen {
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }
getMinecraft().displayGuiScreen(null); getMinecraft().openScreen(null);
} }
} }
@@ -59,7 +59,7 @@ public class GuiSaveModifiedReplay extends GuiScreen {
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }
getMinecraft().displayGuiScreen(null); getMinecraft().openScreen(null);
} }
} }
}).setSize(147, 20).setI18nLabel("replaymod.gui.replaymodified.yes"); }).setSize(147, 20).setI18nLabel("replaymod.gui.replaymodified.yes");
@@ -67,7 +67,7 @@ public class GuiSaveModifiedReplay extends GuiScreen {
@Override @Override
public void run() { public void run() {
FileUtils.deleteQuietly(file); FileUtils.deleteQuietly(file);
getMinecraft().displayGuiScreen(null); getMinecraft().openScreen(null);
} }
}).setSize(147, 20).setI18nLabel("replaymod.gui.replaymodified.no"); }).setSize(147, 20).setI18nLabel("replaymod.gui.replaymodified.no");

View File

@@ -32,10 +32,10 @@ import de.johni0702.minecraft.gui.layout.VerticalLayout;
import de.johni0702.minecraft.gui.popup.AbstractGuiPopup; import de.johni0702.minecraft.gui.popup.AbstractGuiPopup;
import de.johni0702.minecraft.gui.popup.GuiYesNoPopup; import de.johni0702.minecraft.gui.popup.GuiYesNoPopup;
import de.johni0702.minecraft.gui.utils.Colors; import de.johni0702.minecraft.gui.utils.Colors;
import net.minecraft.client.resources.I18n; import net.minecraft.client.resource.language.I18n;
import net.minecraft.client.settings.KeyBinding; import net.minecraft.client.options.KeyBinding;
import net.minecraft.crash.CrashReport; import net.minecraft.util.crash.CrashReport;
import net.minecraft.crash.ReportedException; import net.minecraft.util.crash.CrashException;
import org.apache.commons.io.FileUtils; import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
@@ -61,7 +61,7 @@ public class GuiUploadReplay extends GuiScreen {
public final GuiLabel durationLabel = new GuiLabel(); public final GuiLabel durationLabel = new GuiLabel();
public final GuiCheckbox hideServerIP = new GuiCheckbox(); public final GuiCheckbox hideServerIP = new GuiCheckbox();
public final GuiDropdownMenu<Category> category = new GuiDropdownMenu<Category>().setHeight(20) public final GuiDropdownMenu<Category> category = new GuiDropdownMenu<Category>().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) public final GuiTextField tags = new GuiTextField().setHeight(20).setMaxLength(30)
.setI18nHint("replaymod.gui.upload.tagshint"); .setI18nHint("replaymod.gui.upload.tagshint");
@@ -134,7 +134,7 @@ public class GuiUploadReplay extends GuiScreen {
metaData = replayFile.getMetaData(); metaData = replayFile.getMetaData();
optThumbnail = replayFile.getThumb(); optThumbnail = replayFile.getThumb();
} catch (IOException e) { } 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 // Apply to gui
@@ -152,7 +152,7 @@ public class GuiUploadReplay extends GuiScreen {
KeyBindingRegistry registry = mod.getCore().getKeyBindingRegistry(); KeyBindingRegistry registry = mod.getCore().getKeyBindingRegistry();
KeyBinding keyBinding = registry.getKeyBindings().get("replaymod.input.thumbnail"); KeyBinding keyBinding = registry.getKeyBindings().get("replaymod.input.thumbnail");
//#if MC>=11300 //#if MC>=11300
String keyName = keyBinding == null ? "???" : keyBinding.func_197978_k(); String keyName = keyBinding == null ? "???" : keyBinding.getLocalizedName();
//#else //#else
//$$ String keyName = keyBinding == null ? "???" : GameSettings.getKeyDisplayString(keyBinding.getKeyCode()); //$$ String keyName = keyBinding == null ? "???" : GameSettings.getKeyDisplayString(keyBinding.getKeyCode());
//#endif //#endif
@@ -216,7 +216,7 @@ public class GuiUploadReplay extends GuiScreen {
if (e instanceof ApiException) { if (e instanceof ApiException) {
message = e.getLocalizedMessage(); message = e.getLocalizedMessage();
} else { } else {
message = I18n.format("replaymod.gui.unknownerror"); message = I18n.translate("replaymod.gui.unknownerror");
} }
mod.getCore().runLater(() -> { mod.getCore().runLater(() -> {
// Show error popup // Show error popup

View File

@@ -9,18 +9,18 @@ import com.replaymod.replay.gui.screen.GuiReplayViewer;
import com.replaymod.replay.handler.GuiHandler.InjectedButton; import com.replaymod.replay.handler.GuiHandler.InjectedButton;
import de.johni0702.minecraft.gui.container.AbstractGuiScreen; import de.johni0702.minecraft.gui.container.AbstractGuiScreen;
import de.johni0702.minecraft.gui.container.GuiScreen; import de.johni0702.minecraft.gui.container.GuiScreen;
import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.widget.ButtonWidget;
import net.minecraft.client.gui.GuiMainMenu; import net.minecraft.client.gui.MainMenuScreen;
import net.minecraft.client.resources.I18n; import net.minecraft.client.resource.language.I18n;
//#if MC>=11400 //#if MC>=11400
//$$ import de.johni0702.minecraft.gui.versions.callbacks.InitScreenCallback; import de.johni0702.minecraft.gui.versions.callbacks.InitScreenCallback;
//$$ import net.minecraft.client.gui.Screen; import net.minecraft.client.gui.Screen;
//$$ import net.minecraft.client.gui.widget.AbstractButtonWidget; import net.minecraft.client.gui.widget.AbstractButtonWidget;
//$$ import java.util.List; import java.util.List;
//#else //#else
import net.minecraftforge.client.event.GuiScreenEvent; //$$ import net.minecraftforge.client.event.GuiScreenEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent; //$$ import net.minecraftforge.eventbus.api.SubscribeEvent;
//#endif //#endif
import java.io.File; import java.io.File;
@@ -37,37 +37,37 @@ public class GuiHandler extends EventRegistrations {
} }
//#if MC>=11400 //#if MC>=11400
//$$ { on(InitScreenCallback.EVENT, this::injectIntoMainMenu); } { on(InitScreenCallback.EVENT, this::injectIntoMainMenu); }
//$$ public void injectIntoMainMenu(Screen guiScreen, List<AbstractButtonWidget> buttonList) { public void injectIntoMainMenu(Screen guiScreen, List<AbstractButtonWidget> buttonList) {
//#else //#else
@SubscribeEvent //$$ @SubscribeEvent
public void injectIntoMainMenu(GuiScreenEvent.InitGuiEvent event) { //$$ public void injectIntoMainMenu(GuiScreenEvent.InitGuiEvent event) {
final net.minecraft.client.gui.GuiScreen guiScreen = getGui(event); //$$ final net.minecraft.client.gui.GuiScreen guiScreen = getGui(event);
//#endif //#endif
if (!(guiScreen instanceof GuiMainMenu)) { if (!(guiScreen instanceof MainMenuScreen)) {
return; return;
} }
GuiButton button = new InjectedButton( ButtonWidget button = new InjectedButton(
guiScreen, guiScreen,
BUTTON_REPLAY_CENTER, BUTTON_REPLAY_CENTER,
guiScreen.width / 2 + 2, guiScreen.width / 2 + 2,
guiScreen.height / 4 + 10 + 4 * 24, guiScreen.height / 4 + 10 + 4 * 24,
98, 98,
20, 20,
I18n.format("replaymod.gui.replaycenter"), I18n.translate("replaymod.gui.replaycenter"),
this::onButton this::onButton
); );
addButton(guiScreen, button); addButton(guiScreen, button);
} }
//#if MC>=11400 //#if MC>=11400
//$$ { on(InitScreenCallback.EVENT, this::injectIntoReplayViewer); } { on(InitScreenCallback.EVENT, this::injectIntoReplayViewer); }
//$$ public void injectIntoReplayViewer(Screen vanillaGuiScreen, List<AbstractButtonWidget> buttonList) { public void injectIntoReplayViewer(Screen vanillaGuiScreen, List<AbstractButtonWidget> buttonList) {
//#else //#else
@SubscribeEvent //$$ @SubscribeEvent
public void injectIntoReplayViewer(GuiScreenEvent.InitGuiEvent.Post event) { //$$ public void injectIntoReplayViewer(GuiScreenEvent.InitGuiEvent.Post event) {
net.minecraft.client.gui.GuiScreen vanillaGuiScreen = getGui(event); //$$ net.minecraft.client.gui.GuiScreen vanillaGuiScreen = getGui(event);
//#endif //#endif
AbstractGuiScreen guiScreen = GuiScreen.from(vanillaGuiScreen); AbstractGuiScreen guiScreen = GuiScreen.from(vanillaGuiScreen);
if (!(guiScreen instanceof GuiReplayViewer)) { if (!(guiScreen instanceof GuiReplayViewer)) {
@@ -89,16 +89,16 @@ public class GuiHandler extends EventRegistrations {
//#if MC>=11300 //#if MC>=11300
private void onButton(InjectedButton button) { private void onButton(InjectedButton button) {
net.minecraft.client.gui.GuiScreen guiScreen = button.guiScreen; net.minecraft.client.gui.Screen guiScreen = button.guiScreen;
//#else //#else
//$$ @SubscribeEvent //$$ @SubscribeEvent
//$$ public void onButton(GuiScreenEvent.ActionPerformedEvent.Pre event) { //$$ public void onButton(GuiScreenEvent.ActionPerformedEvent.Pre event) {
//$$ net.minecraft.client.gui.GuiScreen guiScreen = getGui(event); //$$ net.minecraft.client.gui.GuiScreen guiScreen = getGui(event);
//$$ GuiButton button = getButton(event); //$$ GuiButton button = getButton(event);
//#endif //#endif
if(!button.enabled) return; if(!button.active) return;
if (guiScreen instanceof GuiMainMenu) { if (guiScreen instanceof MainMenuScreen) {
if (button.id == BUTTON_REPLAY_CENTER) { if (button.id == BUTTON_REPLAY_CENTER) {
GuiReplayCenter replayCenter = new GuiReplayCenter(mod); GuiReplayCenter replayCenter = new GuiReplayCenter(mod);
if (mod.isLoggedIn()) { if (mod.isLoggedIn()) {

View File

@@ -103,7 +103,7 @@ public class GuiKeyframeRepository extends GuiScreen implements Closeable {
public final GuiButton loadButton = new GuiButton(buttonPanel).onClick(new Runnable() { public final GuiButton loadButton = new GuiButton(buttonPanel).onClick(new Runnable() {
@Override @Override
public void run() { public void run() {
getMinecraft().displayGuiScreen(null); getMinecraft().openScreen(null);
try { try {
Timeline timeline = timelines.get(selectedEntry.name); Timeline timeline = timelines.get(selectedEntry.name);
for (Path path : timeline.getPaths()) { for (Path path : timeline.getPaths()) {

View File

@@ -14,8 +14,8 @@ import com.replaymod.replaystudio.pathing.path.Keyframe;
import com.replaymod.replaystudio.pathing.path.Path; import com.replaymod.replaystudio.pathing.path.Path;
import com.replaymod.replaystudio.pathing.path.Timeline; import com.replaymod.replaystudio.pathing.path.Timeline;
import de.johni0702.minecraft.gui.utils.EventRegistrations; import de.johni0702.minecraft.gui.utils.EventRegistrations;
import net.minecraft.client.Minecraft; import net.minecraft.client.MinecraftClient;
import net.minecraft.util.Timer; import net.minecraft.client.render.RenderTickCounter;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import java.util.Iterator; import java.util.Iterator;
@@ -26,7 +26,7 @@ import static com.replaymod.core.versions.MCVer.*;
* Plays a timeline. * Plays a timeline.
*/ */
public abstract class AbstractTimelinePlayer extends EventRegistrations { public abstract class AbstractTimelinePlayer extends EventRegistrations {
private final Minecraft mc = getMinecraft(); private final MinecraftClient mc = getMinecraft();
private final ReplayHandler replayHandler; private final ReplayHandler replayHandler;
private Timeline timeline; private Timeline timeline;
protected long startOffset; protected long startOffset;
@@ -81,7 +81,7 @@ public abstract class AbstractTimelinePlayer extends EventRegistrations {
TimerAccessor timerA = (TimerAccessor) timer; TimerAccessor timerA = (TimerAccessor) timer;
//#if MC>=11200 //#if MC>=11200
timerA.setTickLength(WrappedTimer.DEFAULT_MS_PER_TICK); timerA.setTickLength(WrappedTimer.DEFAULT_MS_PER_TICK);
timer.renderPartialTicks = timer.elapsedTicks = 0; timer.tickDelta = timer.ticksThisFrame = 0;
//#else //#else
//$$ timer.timerSpeed = 1; //$$ timer.timerSpeed = 1;
//$$ timer.elapsedPartialTicks = timer.elapsedTicks = 0; //$$ timer.elapsedPartialTicks = timer.elapsedTicks = 0;
@@ -124,10 +124,10 @@ public abstract class AbstractTimelinePlayer extends EventRegistrations {
float timeInTicks = replayTime / 50f; float timeInTicks = replayTime / 50f;
float previousTimeInTicks = lastTime / 50f; float previousTimeInTicks = lastTime / 50f;
float passedTicks = timeInTicks - previousTimeInTicks; float passedTicks = timeInTicks - previousTimeInTicks;
Timer timer = ((MinecraftAccessor) mc).getTimer(); RenderTickCounter timer = ((MinecraftAccessor) mc).getTimer();
timer.renderPartialTicks += passedTicks; timer.tickDelta += passedTicks;
timer.elapsedTicks = (int) timer.renderPartialTicks; timer.ticksThisFrame = (int) timer.tickDelta;
timer.renderPartialTicks -= timer.elapsedTicks; timer.tickDelta -= timer.ticksThisFrame;
lastTime = replayTime; lastTime = replayTime;

View File

@@ -3,35 +3,35 @@ package com.replaymod.pathing.player;
import com.replaymod.core.utils.WrappedTimer; import com.replaymod.core.utils.WrappedTimer;
import net.fabricmc.fabric.api.event.Event; import net.fabricmc.fabric.api.event.Event;
import net.fabricmc.fabric.api.event.EventFactory; 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. * Wrapper around the current timer that prevents the timer from advancing by itself.
*/ */
public class ReplayTimer extends WrappedTimer { public class ReplayTimer extends WrappedTimer {
//#if MC>=11300 //#if MC>=11300
private final Timer state = new Timer(0, 0); private final RenderTickCounter state = new RenderTickCounter(0, 0);
//#else //#else
//$$ private final Timer state = new Timer(0); //$$ private final Timer state = new Timer(0);
//#endif //#endif
public ReplayTimer(Timer wrapped) { public ReplayTimer(RenderTickCounter wrapped) {
super(wrapped); super(wrapped);
} }
@Override @Override
// This should be handled by Remap but it isn't (was handled before a9724e3). // This should be handled by Remap but it isn't (was handled before a9724e3).
//#if MC>=11400 //#if MC>=11400
//$$ public void beginRenderTick( public void beginRenderTick(
//#else //#else
public void updateTimer( //$$ public void updateTimer(
//#endif //#endif
//#if MC>=11300 //#if MC>=11300
long sysClock long sysClock
//#endif //#endif
) { ) {
copy(this, state); // Save our current state copy(this, state); // Save our current state
wrapped.updateTimer( wrapped.beginRenderTick(
//#if MC>=11300 //#if MC>=11300
sysClock sysClock
//#endif //#endif
@@ -40,7 +40,7 @@ public class ReplayTimer extends WrappedTimer {
UpdatedCallback.EVENT.invoker().onUpdate(); UpdatedCallback.EVENT.invoker().onUpdate();
} }
public Timer getWrapped() { public RenderTickCounter getWrapped() {
return wrapped; return wrapped;
} }

View File

@@ -7,7 +7,7 @@ import com.replaymod.replaystudio.pathing.property.AbstractProperty;
import com.replaymod.replaystudio.pathing.property.PropertyPart; import com.replaymod.replaystudio.pathing.property.PropertyPart;
import com.replaymod.replaystudio.pathing.property.PropertyParts; import com.replaymod.replaystudio.pathing.property.PropertyParts;
import net.minecraft.entity.Entity; import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.LivingEntity;
import net.minecraft.world.World; import net.minecraft.world.World;
import java.io.IOException; import java.io.IOException;
@@ -34,7 +34,7 @@ public class SpectatorProperty extends AbstractProperty<Integer> {
ReplayHandler handler = ((ReplayHandler) replayHandler); ReplayHandler handler = ((ReplayHandler) replayHandler);
World world = handler.getCameraEntity().getEntityWorld(); World world = handler.getCameraEntity().getEntityWorld();
// Lookup entity by id, returns null if an entity with the id does not exists // 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 // Spectate entity, when called with null, returns to camera
//#if MC>=10800 //#if MC>=10800
handler.spectateEntity(target); handler.spectateEntity(target);

View File

@@ -11,14 +11,14 @@ import com.replaymod.recording.mixin.NetworkManagerAccessor;
import com.replaymod.recording.packet.PacketListener; import com.replaymod.recording.packet.PacketListener;
import io.netty.channel.Channel; import io.netty.channel.Channel;
import io.netty.util.AttributeKey; 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.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
//#if MC>=11400 //#if MC>=11400
//$$ import net.fabricmc.fabric.api.network.ClientSidePacketRegistry; import net.fabricmc.fabric.api.network.ClientSidePacketRegistry;
//#else //#else
import net.minecraftforge.fml.network.NetworkRegistry; //$$ import net.minecraftforge.fml.network.NetworkRegistry;
//#endif //#endif
//#if MC>=11300 //#if MC>=11300
@@ -68,10 +68,10 @@ public class ReplayModRecording implements Module {
new GuiHandler(core).register(); new GuiHandler(core).register();
//#if MC>=11400 //#if MC>=11400
//$$ ClientSidePacketRegistry.INSTANCE.register(Restrictions.PLUGIN_CHANNEL, (packetContext, packetByteBuf) -> {}); ClientSidePacketRegistry.INSTANCE.register(Restrictions.PLUGIN_CHANNEL, (packetContext, packetByteBuf) -> {});
//#else //#else
//#if MC>=11300 //#if MC>=11300
NetworkRegistry.newEventChannel(Restrictions.PLUGIN_CHANNEL, () -> "0", any -> true, any -> true); //$$ NetworkRegistry.newEventChannel(Restrictions.PLUGIN_CHANNEL, () -> "0", any -> true, any -> true);
//#else //#else
//$$ NetworkRegistry.INSTANCE.newChannel(Restrictions.PLUGIN_CHANNEL, new RestrictionsChannelHandler()); //$$ NetworkRegistry.INSTANCE.newChannel(Restrictions.PLUGIN_CHANNEL, new RestrictionsChannelHandler());
//#endif //#endif
@@ -83,7 +83,7 @@ public class ReplayModRecording implements Module {
//$$ private static class RestrictionsChannelHandler extends ChannelDuplexHandler {} //$$ private static class RestrictionsChannelHandler extends ChannelDuplexHandler {}
//#endif //#endif
public void initiateRecording(NetworkManager networkManager) { public void initiateRecording(ClientConnection networkManager) {
Channel channel = ((NetworkManagerAccessor) networkManager).getChannel(); Channel channel = ((NetworkManagerAccessor) networkManager).getChannel();
if (channel.pipeline().get("ReplayModReplay_replaySender") != null) return; if (channel.pipeline().get("ReplayModReplay_replaySender") != null) return;
//#if MC>=11300 //#if MC>=11300

View File

@@ -11,16 +11,16 @@ import de.johni0702.minecraft.gui.element.GuiButton;
import de.johni0702.minecraft.gui.layout.CustomLayout; import de.johni0702.minecraft.gui.layout.CustomLayout;
import de.johni0702.minecraft.gui.layout.HorizontalLayout; import de.johni0702.minecraft.gui.layout.HorizontalLayout;
import de.johni0702.minecraft.gui.utils.EventRegistrations; import de.johni0702.minecraft.gui.utils.EventRegistrations;
import net.minecraft.client.gui.GuiIngameMenu; import net.minecraft.client.gui.menu.PauseMenuScreen;
//#if MC>=11400 //#if MC>=11400
//$$ import de.johni0702.minecraft.gui.versions.callbacks.InitScreenCallback; import de.johni0702.minecraft.gui.versions.callbacks.InitScreenCallback;
//#else //#else
import net.minecraftforge.client.event.GuiScreenEvent; //$$ import net.minecraftforge.client.event.GuiScreenEvent;
import net.minecraftforge.common.MinecraftForge; //$$ import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.eventbus.api.SubscribeEvent; //$$ import net.minecraftforge.eventbus.api.SubscribeEvent;
//$$
import static com.replaymod.core.versions.MCVer.getGui; //$$ import static com.replaymod.core.versions.MCVer.getGui;
//#endif //#endif
public class GuiRecordingControls extends EventRegistrations { public class GuiRecordingControls extends EventRegistrations {
@@ -67,18 +67,18 @@ public class GuiRecordingControls extends EventRegistrations {
} }
//#if MC>=11400 //#if MC>=11400
//$$ { on(InitScreenCallback.EVENT, (screen, buttons) -> { { on(InitScreenCallback.EVENT, (screen, buttons) -> {
//$$ if (screen instanceof PauseMenuScreen) { if (screen instanceof PauseMenuScreen) {
//$$ show((PauseMenuScreen) screen); show((PauseMenuScreen) screen);
//$$ }
//$$ }); }
//#else
@SubscribeEvent
public void onGuiInit(GuiScreenEvent.InitGuiEvent.Post event) {
if (getGui(event) instanceof GuiIngameMenu) {
show((GuiIngameMenu) getGui(event));
} }
} }); }
//#else
//$$ @SubscribeEvent
//$$ public void onGuiInit(GuiScreenEvent.InitGuiEvent.Post event) {
//$$ if (getGui(event) instanceof GuiIngameMenu) {
//$$ show((GuiIngameMenu) getGui(event));
//$$ }
//$$ }
//#endif //#endif
private void updateState() { private void updateState() {
@@ -88,7 +88,7 @@ public class GuiRecordingControls extends EventRegistrations {
buttonPauseResume.setEnabled(!stopped); buttonPauseResume.setEnabled(!stopped);
} }
public void show(GuiIngameMenu gui) { public void show(PauseMenuScreen gui) {
VanillaGuiScreen.setup(gui).setLayout(new CustomLayout<GuiScreen>() { VanillaGuiScreen.setup(gui).setLayout(new CustomLayout<GuiScreen>() {
@Override @Override
protected void layout(GuiScreen container, int width, int height) { protected void layout(GuiScreen container, int width, int height) {

View File

@@ -6,16 +6,16 @@ import com.replaymod.recording.Setting;
import de.johni0702.minecraft.gui.GuiRenderer; import de.johni0702.minecraft.gui.GuiRenderer;
import de.johni0702.minecraft.gui.MinecraftGuiRenderer; import de.johni0702.minecraft.gui.MinecraftGuiRenderer;
import de.johni0702.minecraft.gui.utils.EventRegistrations; import de.johni0702.minecraft.gui.utils.EventRegistrations;
import net.minecraft.client.Minecraft; import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.font.TextRenderer;
import net.minecraft.client.resources.I18n; import net.minecraft.client.resource.language.I18n;
//#if MC>=11400 //#if MC>=11400
//$$ import de.johni0702.minecraft.gui.versions.callbacks.PostRenderHudCallback; import de.johni0702.minecraft.gui.versions.callbacks.PostRenderHudCallback;
//#else //#else
import net.minecraftforge.client.event.RenderGameOverlayEvent; //$$ import net.minecraftforge.client.event.RenderGameOverlayEvent;
import net.minecraftforge.common.MinecraftForge; //$$ import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.eventbus.api.SubscribeEvent; //$$ import net.minecraftforge.eventbus.api.SubscribeEvent;
//#endif //#endif
import static com.replaymod.core.ReplayMod.TEXTURE; import static com.replaymod.core.ReplayMod.TEXTURE;
@@ -30,11 +30,11 @@ import static com.replaymod.core.versions.MCVer.*;
* Renders overlay during recording. * Renders overlay during recording.
*/ */
public class GuiRecordingOverlay extends EventRegistrations { public class GuiRecordingOverlay extends EventRegistrations {
private final Minecraft mc; private final MinecraftClient mc;
private final SettingsRegistry settingsRegistry; private final SettingsRegistry settingsRegistry;
private final GuiRecordingControls guiControls; private final GuiRecordingControls guiControls;
public GuiRecordingOverlay(Minecraft mc, SettingsRegistry settingsRegistry, GuiRecordingControls guiControls) { public GuiRecordingOverlay(MinecraftClient mc, SettingsRegistry settingsRegistry, GuiRecordingControls guiControls) {
this.mc = mc; this.mc = mc;
this.settingsRegistry = settingsRegistry; this.settingsRegistry = settingsRegistry;
this.guiControls = guiControls; 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. * Render the recording icon and text in the top left corner of the screen.
*/ */
//#if MC>=11400 //#if MC>=11400
//$$ { on(PostRenderHudCallback.EVENT, partialTicks -> renderRecordingIndicator()); } { on(PostRenderHudCallback.EVENT, partialTicks -> renderRecordingIndicator()); }
//$$ private void renderRecordingIndicator() { private void renderRecordingIndicator() {
//#else //#else
@SubscribeEvent //$$ @SubscribeEvent
public void renderRecordingIndicator(RenderGameOverlayEvent.Post event) { //$$ public void renderRecordingIndicator(RenderGameOverlayEvent.Post event) {
if (getType(event) != RenderGameOverlayEvent.ElementType.ALL) return; //$$ if (getType(event) != RenderGameOverlayEvent.ElementType.ALL) return;
//#endif //#endif
if (guiControls.isStopped()) return; if (guiControls.isStopped()) return;
if (settingsRegistry.get(Setting.INDICATOR)) { if (settingsRegistry.get(Setting.INDICATOR)) {
FontRenderer fontRenderer = mc.fontRenderer; TextRenderer fontRenderer = mc.textRenderer;
String text = guiControls.isPaused() ? I18n.format("replaymod.gui.paused") : I18n.format("replaymod.gui.recording"); String text = guiControls.isPaused() ? I18n.translate("replaymod.gui.paused") : I18n.translate("replaymod.gui.recording");
fontRenderer.drawString(text.toUpperCase(), 30, 18 - (fontRenderer.FONT_HEIGHT / 2), 0xffffffff); fontRenderer.draw(text.toUpperCase(), 30, 18 - (fontRenderer.fontHeight / 2), 0xffffffff);
bindTexture(TEXTURE); bindTexture(TEXTURE);
enableAlpha(); enableAlpha();
GuiRenderer renderer = new MinecraftGuiRenderer(MCVer.newScaledResolution(mc)); GuiRenderer renderer = new MinecraftGuiRenderer(MCVer.newScaledResolution(mc));

View File

@@ -14,8 +14,8 @@ import com.replaymod.replaystudio.replay.ReplayMetaData;
import com.replaymod.replaystudio.replay.ZipReplayFile; import com.replaymod.replaystudio.replay.ZipReplayFile;
import com.replaymod.replaystudio.studio.ReplayStudio; import com.replaymod.replaystudio.studio.ReplayStudio;
import io.netty.channel.Channel; import io.netty.channel.Channel;
import net.minecraft.client.Minecraft; import net.minecraft.client.MinecraftClient;
import net.minecraft.network.NetworkManager; import net.minecraft.network.ClientConnection;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
//#if MC>=10800 //#if MC>=10800
@@ -40,7 +40,7 @@ public class ConnectionEventHandler {
private static final String packetHandlerKey = "packet_handler"; private static final String packetHandlerKey = "packet_handler";
private static final String DATE_FORMAT = "yyyy_MM_dd_HH_mm_ss"; private static final String DATE_FORMAT = "yyyy_MM_dd_HH_mm_ss";
private static final SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT); 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 Logger logger;
private final ReplayMod core; private final ReplayMod core;
@@ -55,13 +55,13 @@ public class ConnectionEventHandler {
this.core = core; this.core = core;
} }
public void onConnectedToServerEvent(NetworkManager networkManager) { public void onConnectedToServerEvent(ClientConnection networkManager) {
try { try {
boolean local = networkManager.isLocalChannel(); boolean local = networkManager.isLocal();
if (local) { if (local) {
//#if MC>=10800 //#if MC>=10800
//#if MC>=11300 //#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 //#else
//$$ if (mc.getIntegratedServer().getEntityWorld().getWorldType() == WorldType_DEBUG_ALL_BLOCK_STATES) { //$$ if (mc.getIntegratedServer().getEntityWorld().getWorldType() == WorldType_DEBUG_ALL_BLOCK_STATES) {
//#endif //#endif
@@ -82,9 +82,9 @@ public class ConnectionEventHandler {
String worldName; String worldName;
if (local) { if (local) {
worldName = mc.getIntegratedServer().getWorldName(); worldName = mc.getServer().getLevelName();
} else if (mc.getCurrentServerData() != null) { } else if (mc.getCurrentServerEntry() != null) {
worldName = mc.getCurrentServerData().serverIP; worldName = mc.getCurrentServerEntry().address;
//#if MC>=11100 //#if MC>=11100
} else if (mc.isConnectedToRealms()) { } else if (mc.isConnectedToRealms()) {
// we can't access the server name without tapping too deep in the Realms Library // we can't access the server name without tapping too deep in the Realms Library

View File

@@ -8,18 +8,18 @@ import de.johni0702.minecraft.gui.container.VanillaGuiScreen;
import de.johni0702.minecraft.gui.element.GuiCheckbox; import de.johni0702.minecraft.gui.element.GuiCheckbox;
import de.johni0702.minecraft.gui.layout.CustomLayout; import de.johni0702.minecraft.gui.layout.CustomLayout;
import de.johni0702.minecraft.gui.utils.EventRegistrations; import de.johni0702.minecraft.gui.utils.EventRegistrations;
import net.minecraft.client.gui.GuiMultiplayer; import net.minecraft.client.gui.menu.MultiplayerScreen;
import net.minecraft.client.gui.GuiWorldSelection; import net.minecraft.client.gui.menu.LevelSelectScreen;
//#if MC>=11400 //#if MC>=11400
//$$ import de.johni0702.minecraft.gui.versions.callbacks.InitScreenCallback; import de.johni0702.minecraft.gui.versions.callbacks.InitScreenCallback;
//$$ import net.minecraft.client.gui.Screen; import net.minecraft.client.gui.Screen;
//#else //#else
import net.minecraftforge.client.event.GuiScreenEvent; //$$ import net.minecraftforge.client.event.GuiScreenEvent;
import net.minecraftforge.common.MinecraftForge; //$$ import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.eventbus.api.SubscribeEvent; //$$ import net.minecraftforge.eventbus.api.SubscribeEvent;
//$$
import static com.replaymod.core.versions.MCVer.getGui; //$$ import static com.replaymod.core.versions.MCVer.getGui;
//#endif //#endif
public class GuiHandler extends EventRegistrations { public class GuiHandler extends EventRegistrations {
@@ -31,15 +31,15 @@ public class GuiHandler extends EventRegistrations {
} }
//#if MC>=11400 //#if MC>=11400
//$$ { on(InitScreenCallback.EVENT, (screen, buttons) -> onGuiInit(screen)); } { on(InitScreenCallback.EVENT, (screen, buttons) -> onGuiInit(screen)); }
//$$ private void onGuiInit(Screen gui) { private void onGuiInit(Screen gui) {
//#else //#else
@SubscribeEvent //$$ @SubscribeEvent
public void onGuiInit(GuiScreenEvent.InitGuiEvent.Post event) { //$$ public void onGuiInit(GuiScreenEvent.InitGuiEvent.Post event) {
net.minecraft.client.gui.GuiScreen gui = getGui(event); //$$ net.minecraft.client.gui.GuiScreen gui = getGui(event);
//#endif //#endif
if (gui instanceof GuiWorldSelection || gui instanceof GuiMultiplayer) { if (gui instanceof LevelSelectScreen || gui instanceof MultiplayerScreen) {
boolean sp = gui instanceof GuiWorldSelection; boolean sp = gui instanceof LevelSelectScreen;
SettingsRegistry settingsRegistry = mod.getSettingsRegistry(); SettingsRegistry settingsRegistry = mod.getSettingsRegistry();
Setting<Boolean> setting = sp ? Setting.RECORD_SINGLEPLAYER : Setting.RECORD_SERVER; Setting<Boolean> setting = sp ? Setting.RECORD_SINGLEPLAYER : Setting.RECORD_SERVER;

View File

@@ -3,32 +3,32 @@ package com.replaymod.recording.handler;
import com.replaymod.recording.mixin.IntegratedServerAccessor; import com.replaymod.recording.mixin.IntegratedServerAccessor;
import com.replaymod.recording.packet.PacketListener; import com.replaymod.recording.packet.PacketListener;
import de.johni0702.minecraft.gui.utils.EventRegistrations; import de.johni0702.minecraft.gui.utils.EventRegistrations;
import net.minecraft.client.Minecraft; import net.minecraft.client.MinecraftClient;
import net.minecraft.client.entity.EntityPlayerSP; import net.minecraft.client.network.ClientPlayerEntity;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.network.Packet; import net.minecraft.network.Packet;
import net.minecraft.network.play.server.*; import net.minecraft.client.network.packet.*;
import net.minecraft.server.integrated.IntegratedServer; import net.minecraft.server.integrated.IntegratedServer;
// FIXME not (yet?) 1.13 import net.minecraftforge.event.entity.minecart.MinecartInteractEvent; // FIXME not (yet?) 1.13 import net.minecraftforge.event.entity.minecart.MinecartInteractEvent;
//#if MC>=11400 //#if MC>=11400
//$$ import com.replaymod.core.events.PreRenderCallback; import com.replaymod.core.events.PreRenderCallback;
//$$ import de.johni0702.minecraft.gui.versions.callbacks.PreTickCallback; import de.johni0702.minecraft.gui.versions.callbacks.PreTickCallback;
//#else //#else
import net.minecraftforge.event.entity.player.PlayerSleepInBedEvent; //$$ import net.minecraftforge.event.entity.player.PlayerSleepInBedEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent; //$$ import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.gameevent.PlayerEvent.ItemPickupEvent; //$$ import net.minecraftforge.fml.common.gameevent.PlayerEvent.ItemPickupEvent;
import net.minecraftforge.fml.common.gameevent.TickEvent; //$$ import net.minecraftforge.fml.common.gameevent.TickEvent;
//#endif //#endif
//#if MC>=10904 //#if MC>=10904
import com.replaymod.recording.mixin.EntityLivingBaseAccessor; import com.replaymod.recording.mixin.EntityLivingBaseAccessor;
import net.minecraft.inventory.EntityEquipmentSlot; import net.minecraft.entity.EquipmentSlot;
import net.minecraft.network.datasync.EntityDataManager; import net.minecraft.entity.data.DataTracker;
import net.minecraft.util.EnumHand; import net.minecraft.util.Hand;
import net.minecraft.util.SoundCategory; import net.minecraft.sound.SoundCategory;
import net.minecraft.util.SoundEvent; import net.minecraft.sound.SoundEvent;
//#endif //#endif
//#if MC>=10800 //#if MC>=10800
@@ -43,7 +43,7 @@ import static com.replaymod.core.versions.MCVer.*;
public class RecordingEventHandler extends EventRegistrations { public class RecordingEventHandler extends EventRegistrations {
private final Minecraft mc = getMinecraft(); private final MinecraftClient mc = getMinecraft();
private final PacketListener packetListener; private final PacketListener packetListener;
private Double lastX, lastY, lastZ; private Double lastX, lastY, lastZ;
@@ -54,7 +54,7 @@ public class RecordingEventHandler extends EventRegistrations {
private Integer rotationYawHeadBefore; private Integer rotationYawHeadBefore;
//#if MC>=10904 //#if MC>=10904
private boolean wasHandActive; private boolean wasHandActive;
private EnumHand lastActiveHand; private Hand lastActiveHand;
//#endif //#endif
public RecordingEventHandler(PacketListener packetListener) { public RecordingEventHandler(PacketListener packetListener) {
@@ -64,13 +64,13 @@ public class RecordingEventHandler extends EventRegistrations {
@Override @Override
public void register() { public void register() {
super.register(); super.register();
((RecordingEventSender) mc.renderGlobal).setRecordingEventHandler(this); ((RecordingEventSender) mc.worldRenderer).setRecordingEventHandler(this);
} }
@Override @Override
public void unregister() { public void unregister() {
super.unregister(); super.unregister();
RecordingEventSender recordingEventSender = ((RecordingEventSender) mc.renderGlobal); RecordingEventSender recordingEventSender = ((RecordingEventSender) mc.worldRenderer);
if (recordingEventSender.getRecordingEventHandler() == this) { if (recordingEventSender.getRecordingEventHandler() == this) {
recordingEventSender.setRecordingEventHandler(null); recordingEventSender.setRecordingEventHandler(null);
} }
@@ -84,7 +84,7 @@ public class RecordingEventHandler extends EventRegistrations {
public void onPlayerJoin() { public void onPlayerJoin() {
try { try {
packetListener.save(new SPacketSpawnPlayer(mc.player)); packetListener.save(new PlayerSpawnS2CPacket(mc.player));
} catch(Exception e1) { } catch(Exception e1) {
e1.printStackTrace(); e1.printStackTrace();
} }
@@ -92,7 +92,7 @@ public class RecordingEventHandler extends EventRegistrations {
public void onPlayerRespawn() { public void onPlayerRespawn() {
try { try {
packetListener.save(new SPacketSpawnPlayer(mc.player)); packetListener.save(new PlayerSpawnS2CPacket(mc.player));
lastX = lastY = lastZ = null; lastX = lastY = lastZ = null;
} catch(Exception e) { } catch(Exception e) {
e.printStackTrace(); e.printStackTrace();
@@ -104,7 +104,7 @@ public class RecordingEventHandler extends EventRegistrations {
double x, double y, double z, float volume, float pitch) { double x, double y, double z, float volume, float pitch) {
try { try {
// Send to all other players in ServerWorldEventHandler#playSoundToAllNearExcept // 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) { } catch(Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
@@ -113,7 +113,7 @@ public class RecordingEventHandler extends EventRegistrations {
public void onClientEffect(int type, BlockPos pos, int data) { public void onClientEffect(int type, BlockPos pos, int data) {
try { try {
// Send to all other players in ServerWorldEventHandler#playEvent // 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) { } catch(Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
@@ -121,23 +121,23 @@ public class RecordingEventHandler extends EventRegistrations {
//#endif //#endif
//#if MC>=11400 //#if MC>=11400
//$$ { on(PreTickCallback.EVENT, this::onPlayerTick); } { on(PreTickCallback.EVENT, this::onPlayerTick); }
//$$ private void onPlayerTick() { private void onPlayerTick() {
//$$ if (mc.player == null) return; if (mc.player == null) return;
//#else //#else
@SubscribeEvent //$$ @SubscribeEvent
public void onPlayerTick(TickEvent.PlayerTickEvent e) { //$$ public void onPlayerTick(TickEvent.PlayerTickEvent e) {
if(e.player != mc.player) return; //$$ if(e.player != mc.player) return;
//#endif //#endif
EntityPlayerSP player = mc.player; ClientPlayerEntity player = mc.player;
try { try {
boolean force = false; boolean force = false;
if(lastX == null || lastY == null || lastZ == null) { if(lastX == null || lastY == null || lastZ == null) {
force = true; force = true;
lastX = player.posX; lastX = player.x;
lastY = player.posY; lastY = player.y;
lastZ = player.posZ; lastZ = player.z;
} }
ticksSinceLastCorrection++; ticksSinceLastCorrection++;
@@ -146,18 +146,18 @@ public class RecordingEventHandler extends EventRegistrations {
force = true; force = true;
} }
double dx = player.posX - lastX; double dx = player.x - lastX;
double dy = player.posY - lastY; double dy = player.y - lastY;
double dz = player.posZ - lastZ; double dz = player.z - lastZ;
lastX = player.posX; lastX = player.x;
lastY = player.posY; lastY = player.y;
lastZ = player.posZ; lastZ = player.z;
Packet packet; Packet packet;
if (force || Math.abs(dx) > 8.0 || Math.abs(dy) > 8.0 || Math.abs(dz) > 8.0) { if (force || Math.abs(dx) > 8.0 || Math.abs(dy) > 8.0 || Math.abs(dz) > 8.0) {
//#if MC>=10800 //#if MC>=10800
packet = new SPacketEntityTeleport(player); packet = new EntityPositionS2CPacket(player);
//#else //#else
//$$ // In 1.7.10 the client player entity has its posY at eye height //$$ // 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). //$$ // but for all other entities it's at their feet (as it should be).
@@ -175,11 +175,11 @@ public class RecordingEventHandler extends EventRegistrations {
//$$ ); //$$ );
//#endif //#endif
} else { } else {
byte newYaw = (byte) ((int) (player.rotationYaw * 256.0F / 360.0F)); byte newYaw = (byte) ((int) (player.yaw * 256.0F / 360.0F));
byte newPitch = (byte) ((int) (player.rotationPitch * 256.0F / 360.0F)); byte newPitch = (byte) ((int) (player.pitch * 256.0F / 360.0F));
//#if MC>=10904 //#if MC>=10904
packet = new SPacketEntity.Move( packet = new EntityS2CPacket.RotateAndMoveRelative(
player.getEntityId(), player.getEntityId(),
(short) Math.round(dx * 4096), (short) Math.round(dy * 4096), (short) Math.round(dz * 4096), (short) Math.round(dx * 4096), (short) Math.round(dy * 4096), (short) Math.round(dz * 4096),
newYaw, newPitch, player.onGround newYaw, newPitch, player.onGround
@@ -198,28 +198,28 @@ public class RecordingEventHandler extends EventRegistrations {
packetListener.save(packet); packetListener.save(packet);
//HEAD POS //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)) { if(!Objects.equals(rotationYawHead, rotationYawHeadBefore)) {
packetListener.save(new SPacketEntityHeadLook(player, (byte) rotationYawHead)); packetListener.save(new EntitySetHeadYawS2CPacket(player, (byte) rotationYawHead));
rotationYawHeadBefore = rotationYawHead; rotationYawHeadBefore = rotationYawHead;
} }
packetListener.save(new SPacketEntityVelocity(player.getEntityId(), packetListener.save(new EntityVelocityUpdateS2CPacket(player.getEntityId(),
//#if MC>=11400 //#if MC>=11400
//$$ player.getVelocity() player.getVelocity()
//#else //#else
player.motionX, player.motionY, player.motionZ //$$ player.motionX, player.motionY, player.motionZ
//#endif //#endif
)); ));
//Animation Packets //Animation Packets
//Swing Animation //Swing Animation
if (player.isSwingInProgress && player.swingProgressInt == -1) { if (player.isHandSwinging && player.handSwingTicks == -1) {
packetListener.save(new SPacketAnimation( packetListener.save(new EntityAnimationS2CPacket(
player, player,
//#if MC>=10904 //#if MC>=10904
player.swingingHand == EnumHand.MAIN_HAND ? 0 : 3 player.preferredHand == Hand.MAIN ? 0 : 3
//#else //#else
//$$ 0 //$$ 0
//#endif //#endif
@@ -248,34 +248,34 @@ public class RecordingEventHandler extends EventRegistrations {
//Inventory Handling //Inventory Handling
//#if MC>=10904 //#if MC>=10904
if (playerItems[0] != player.getHeldItem(EnumHand.MAIN_HAND)) { if (playerItems[0] != player.getStackInHand(Hand.MAIN)) {
playerItems[0] = player.getHeldItem(EnumHand.MAIN_HAND); playerItems[0] = player.getStackInHand(Hand.MAIN);
packetListener.save(new SPacketEntityEquipment(player.getEntityId(), EntityEquipmentSlot.MAINHAND, playerItems[0])); packetListener.save(new EntityEquipmentUpdateS2CPacket(player.getEntityId(), EquipmentSlot.HAND_MAIN, playerItems[0]));
} }
if (playerItems[1] != player.getHeldItem(EnumHand.OFF_HAND)) { if (playerItems[1] != player.getStackInHand(Hand.OFF)) {
playerItems[1] = player.getHeldItem(EnumHand.OFF_HAND); playerItems[1] = player.getStackInHand(Hand.OFF);
packetListener.save(new SPacketEntityEquipment(player.getEntityId(), EntityEquipmentSlot.OFFHAND, playerItems[1])); packetListener.save(new EntityEquipmentUpdateS2CPacket(player.getEntityId(), EquipmentSlot.HAND_OFF, playerItems[1]));
} }
if (playerItems[2] != player.getItemStackFromSlot(EntityEquipmentSlot.FEET)) { if (playerItems[2] != player.getEquippedStack(EquipmentSlot.FEET)) {
playerItems[2] = player.getItemStackFromSlot(EntityEquipmentSlot.FEET); playerItems[2] = player.getEquippedStack(EquipmentSlot.FEET);
packetListener.save(new SPacketEntityEquipment(player.getEntityId(), EntityEquipmentSlot.FEET, playerItems[2])); packetListener.save(new EntityEquipmentUpdateS2CPacket(player.getEntityId(), EquipmentSlot.FEET, playerItems[2]));
} }
if (playerItems[3] != player.getItemStackFromSlot(EntityEquipmentSlot.LEGS)) { if (playerItems[3] != player.getEquippedStack(EquipmentSlot.LEGS)) {
playerItems[3] = player.getItemStackFromSlot(EntityEquipmentSlot.LEGS); playerItems[3] = player.getEquippedStack(EquipmentSlot.LEGS);
packetListener.save(new SPacketEntityEquipment(player.getEntityId(), EntityEquipmentSlot.LEGS, playerItems[3])); packetListener.save(new EntityEquipmentUpdateS2CPacket(player.getEntityId(), EquipmentSlot.LEGS, playerItems[3]));
} }
if (playerItems[4] != player.getItemStackFromSlot(EntityEquipmentSlot.CHEST)) { if (playerItems[4] != player.getEquippedStack(EquipmentSlot.CHEST)) {
playerItems[4] = player.getItemStackFromSlot(EntityEquipmentSlot.CHEST); playerItems[4] = player.getEquippedStack(EquipmentSlot.CHEST);
packetListener.save(new SPacketEntityEquipment(player.getEntityId(), EntityEquipmentSlot.CHEST, playerItems[4])); packetListener.save(new EntityEquipmentUpdateS2CPacket(player.getEntityId(), EquipmentSlot.CHEST, playerItems[4]));
} }
if (playerItems[5] != player.getItemStackFromSlot(EntityEquipmentSlot.HEAD)) { if (playerItems[5] != player.getEquippedStack(EquipmentSlot.HEAD)) {
playerItems[5] = player.getItemStackFromSlot(EntityEquipmentSlot.HEAD); playerItems[5] = player.getEquippedStack(EquipmentSlot.HEAD);
packetListener.save(new SPacketEntityEquipment(player.getEntityId(), EntityEquipmentSlot.HEAD, playerItems[5])); packetListener.save(new EntityEquipmentUpdateS2CPacket(player.getEntityId(), EquipmentSlot.HEAD, playerItems[5]));
} }
//#else //#else
//$$ if(playerItems[0] != mc.thePlayer.getHeldItem()) { //$$ if(playerItems[0] != mc.thePlayer.getHeldItem()) {
@@ -311,14 +311,14 @@ public class RecordingEventHandler extends EventRegistrations {
//Leaving Ride //Leaving Ride
if((!player.isPassenger() && lastRiding != -1) || if((!player.isRiding() && lastRiding != -1) ||
(player.isPassenger() && lastRiding != getRiddenEntity(player).getEntityId())) { (player.isRiding() && lastRiding != getRiddenEntity(player).getEntityId())) {
if(!player.isPassenger()) { if(!player.isRiding()) {
lastRiding = -1; lastRiding = -1;
} else { } else {
lastRiding = getRiddenEntity(player).getEntityId(); lastRiding = getRiddenEntity(player).getEntityId();
} }
packetListener.save(new SPacketEntityAttach( packetListener.save(new EntityAttachS2CPacket(
//#if MC<10904 //#if MC<10904
//$$ 0, //$$ 0,
//#endif //#endif
@@ -327,24 +327,24 @@ public class RecordingEventHandler extends EventRegistrations {
} }
//Sleeping //Sleeping
if(!player.isPlayerSleeping() && wasSleeping) { if(!player.isSleeping() && wasSleeping) {
packetListener.save(new SPacketAnimation(player, 2)); packetListener.save(new EntityAnimationS2CPacket(player, 2));
wasSleeping = false; wasSleeping = false;
} }
//#if MC>=10904 //#if MC>=10904
// Active hand (e.g. eating, drinking, blocking) // Active hand (e.g. eating, drinking, blocking)
if (player.isHandActive() ^ wasHandActive || player.getActiveHand() != lastActiveHand) { if (player.isUsingItem() ^ wasHandActive || player.getActiveHand() != lastActiveHand) {
wasHandActive = player.isHandActive(); wasHandActive = player.isUsingItem();
lastActiveHand = player.getActiveHand(); lastActiveHand = player.getActiveHand();
EntityDataManager dataManager = new EntityDataManager(null); DataTracker dataManager = new DataTracker(null);
int state = (wasHandActive ? 1 : 0) | (lastActiveHand == EnumHand.OFF_HAND ? 2 : 0); int state = (wasHandActive ? 1 : 0) | (lastActiveHand == Hand.OFF ? 2 : 0);
//#if MC>=11300 //#if MC>=11300
dataManager.register(EntityLivingBaseAccessor.getLivingFlags(), (byte) state); dataManager.startTracking(EntityLivingBaseAccessor.getLivingFlags(), (byte) state);
//#else //#else
//$$ dataManager.register(EntityLivingBaseAccessor.getLivingFlags(), (byte) state); //$$ dataManager.register(EntityLivingBaseAccessor.getLivingFlags(), (byte) state);
//#endif //#endif
packetListener.save(new SPacketEntityMetadata(player.getEntityId(), dataManager, true)); packetListener.save(new EntityTrackerUpdateS2CPacket(player.getEntityId(), dataManager, true));
} }
//#endif //#endif
@@ -354,20 +354,20 @@ public class RecordingEventHandler extends EventRegistrations {
} }
//#if MC>=11400 //#if MC>=11400
//$$ // FIXME fabric // FIXME fabric
//#else //#else
@SubscribeEvent //$$ @SubscribeEvent
public void onPickupItem(ItemPickupEvent event) { //$$ public void onPickupItem(ItemPickupEvent event) {
try { //$$ try {
//#if MC>=11100 //#if MC>=11100
//#if MC>=11200 //#if MC>=11200
//#if MC>=11300 //#if MC>=11300
ItemStack stack = event.getStack(); //$$ ItemStack stack = event.getStack();
packetListener.save(new SPacketCollectItem( //$$ packetListener.save(new SPacketCollectItem(
event.getOriginalEntity().getEntityId(), //$$ event.getOriginalEntity().getEntityId(),
event.getPlayer().getEntityId(), //$$ event.getPlayer().getEntityId(),
event.getStack().getCount() //$$ event.getStack().getCount()
)); //$$ ));
//#else //#else
//$$ packetListener.save(new SPacketCollectItem(event.pickedUp.getEntityId(), event.player.getEntityId(), //$$ packetListener.save(new SPacketCollectItem(event.pickedUp.getEntityId(), event.player.getEntityId(),
//$$ event.pickedUp.getItem().getMaxStackSize())); //$$ event.pickedUp.getItem().getMaxStackSize()));
@@ -379,24 +379,24 @@ public class RecordingEventHandler extends EventRegistrations {
//#else //#else
//$$ packetListener.save(new SPacketCollectItem(event.pickedUp.getEntityId(), event.player.getEntityId())); //$$ packetListener.save(new SPacketCollectItem(event.pickedUp.getEntityId(), event.player.getEntityId()));
//#endif //#endif
} catch(Exception e) { //$$ } catch(Exception e) {
e.printStackTrace(); //$$ e.printStackTrace();
} //$$ }
} //$$ }
//#endif //#endif
//#if MC>=11400 //#if MC>=11400
//$$ // FIXME fabric // FIXME fabric
//#else //#else
@SubscribeEvent //$$ @SubscribeEvent
public void onSleep(PlayerSleepInBedEvent event) { //$$ public void onSleep(PlayerSleepInBedEvent event) {
try { //$$ try {
//#if MC>=10904 //#if MC>=10904
if (event.getEntityPlayer() != mc.player) { //$$ if (event.getEntityPlayer() != mc.player) {
return; //$$ return;
} //$$ }
//$$
packetListener.save(new SPacketUseBed(event.getEntityPlayer(), event.getPos())); //$$ packetListener.save(new SPacketUseBed(event.getEntityPlayer(), event.getPos()));
//#else //#else
//$$ if (event.entityPlayer != mc.thePlayer) { //$$ if (event.entityPlayer != mc.thePlayer) {
//$$ return; //$$ return;
@@ -410,13 +410,13 @@ public class RecordingEventHandler extends EventRegistrations {
//#endif //#endif
//$$ )); //$$ ));
//#endif //#endif
//$$
wasSleeping = true; //$$ wasSleeping = true;
//$$
} catch(Exception e) { //$$ } catch(Exception e) {
e.printStackTrace(); //$$ e.printStackTrace();
} //$$ }
} //$$ }
//#endif //#endif
/* FIXME event not (yet?) on 1.13 /* FIXME event not (yet?) on 1.13
@@ -451,9 +451,9 @@ public class RecordingEventHandler extends EventRegistrations {
//#else //#else
//$$ public void onBlockBreakAnim(int breakerId, int x, int y, int z, int progress) { //$$ public void onBlockBreakAnim(int breakerId, int x, int y, int z, int progress) {
//#endif //#endif
EntityPlayer thePlayer = mc.player; PlayerEntity thePlayer = mc.player;
if (thePlayer != null && breakerId == thePlayer.getEntityId()) { if (thePlayer != null && breakerId == thePlayer.getEntityId()) {
packetListener.save(new SPacketBlockBreakAnim(breakerId, packetListener.save(new BlockBreakingProgressS2CPacket(breakerId,
//#if MC>=10800 //#if MC>=10800
pos, pos,
//#else //#else
@@ -464,15 +464,15 @@ public class RecordingEventHandler extends EventRegistrations {
} }
//#if MC>=11400 //#if MC>=11400
//$$ { on(PreRenderCallback.EVENT, this::checkForGamePaused); } { on(PreRenderCallback.EVENT, this::checkForGamePaused); }
//$$ private void checkForGamePaused() { private void checkForGamePaused() {
//#else //#else
@SubscribeEvent //$$ @SubscribeEvent
public void checkForGamePaused(TickEvent.RenderTickEvent event) { //$$ public void checkForGamePaused(TickEvent.RenderTickEvent event) {
if (event.phase != TickEvent.Phase.START) return; //$$ if (event.phase != TickEvent.Phase.START) return;
//#endif //#endif
if (mc.isIntegratedServerRunning()) { if (mc.isIntegratedServerRunning()) {
IntegratedServer server = mc.getIntegratedServer(); IntegratedServer server = mc.getServer();
if (server != null && ((IntegratedServerAccessor) server).isGamePaused()) { if (server != null && ((IntegratedServerAccessor) server).isGamePaused()) {
packetListener.setServerWasPaused(); packetListener.setServerWasPaused();
} }

View File

@@ -1,21 +1,21 @@
package com.replaymod.recording.mixin; 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.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor; import org.spongepowered.asm.mixin.gen.Accessor;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
//#if MC>=10904 //#if MC>=10904
import net.minecraft.network.datasync.DataParameter; import net.minecraft.entity.data.TrackedData;
//#endif //#endif
@Mixin(EntityLivingBase.class) @Mixin(LivingEntity.class)
public interface EntityLivingBaseAccessor { public interface EntityLivingBaseAccessor {
//#if MC>=10904 //#if MC>=10904
@Accessor("LIVING_FLAGS") @Accessor("LIVING_FLAGS")
@Nonnull @Nonnull
@SuppressWarnings("ConstantConditions") @SuppressWarnings("ConstantConditions")
static DataParameter<Byte> getLivingFlags() { return null; } static TrackedData<Byte> getLivingFlags() { return null; }
//#endif //#endif
} }

View File

@@ -6,6 +6,6 @@ import org.spongepowered.asm.mixin.gen.Accessor;
@Mixin(IntegratedServer.class) @Mixin(IntegratedServer.class)
public interface IntegratedServerAccessor { public interface IntegratedServerAccessor {
@Accessor("isGamePaused") @Accessor("field_5524")
boolean isGamePaused(); boolean isGamePaused();
} }

View File

@@ -3,7 +3,7 @@ package com.replaymod.recording.mixin;
import com.replaymod.recording.packet.ResourcePackRecorder; import com.replaymod.recording.packet.ResourcePackRecorder;
import de.johni0702.minecraft.gui.utils.Consumer; 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.Mixin;
import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.At;
@@ -19,7 +19,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
//$$ import java.util.Map; //$$ import java.util.Map;
//#endif //#endif
@Mixin(DownloadingPackFinder.class) @Mixin(ClientResourcePackCreator.class)
public abstract class MixinDownloadingPackFinder implements ResourcePackRecorder.IDownloadingPackFinder { public abstract class MixinDownloadingPackFinder implements ResourcePackRecorder.IDownloadingPackFinder {
private Consumer<File> requestCallback; private Consumer<File> requestCallback;
@@ -29,7 +29,7 @@ public abstract class MixinDownloadingPackFinder implements ResourcePackRecorder
} }
//#if MC>=10800 //#if MC>=10800
@Inject(method = "func_195741_a", at = @At("HEAD")) @Inject(method = "loadServerPack", at = @At("HEAD"))
private void recordDownloadedPack(File file, CallbackInfoReturnable ci) { private void recordDownloadedPack(File file, CallbackInfoReturnable ci) {
if (requestCallback != null) { if (requestCallback != null) {
requestCallback.consume(file); requestCallback.consume(file);

View File

@@ -3,7 +3,7 @@ package com.replaymod.recording.mixin;
import com.replaymod.replay.InputReplayTimer; import com.replaymod.replay.InputReplayTimer;
import com.replaymod.replay.ReplayModReplay; 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.Mixin;
import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At; 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.CallbackInfo;
import org.spongepowered.asm.mixin.injection.callback.LocalCapture; import org.spongepowered.asm.mixin.injection.callback.LocalCapture;
@Mixin(MouseHelper.class) @Mixin(Mouse.class)
public abstract class MixinMouseHelper { public abstract class MixinMouseHelper {
@Shadow @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) { private void noGrab(CallbackInfo ci) {
// Used to be provided by Forge for 1.12.2 and below // Used to be provided by Forge for 1.12.2 and below
if (Boolean.valueOf(System.getProperty("fml.noGrab", "false"))) { if (Boolean.valueOf(System.getProperty("fml.noGrab", "false"))) {
this.mouseGrabbed = true; this.isCursorLocked = true;
ci.cancel(); ci.cancel();
} }
} }
@Inject(method = "scrollCallback", @Inject(method = "onMouseScroll",
at = @At(value = "INVOKE", target = "Lnet/minecraft/client/entity/EntityPlayerSP;isSpectator()Z"), at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayerEntity;isSpectator()Z"),
locals = LocalCapture.CAPTURE_FAILHARD, locals = LocalCapture.CAPTURE_FAILHARD,
cancellable = true) cancellable = true)
private void handleReplayModScroll( private void handleReplayModScroll(
@@ -34,9 +34,9 @@ public abstract class MixinMouseHelper {
CallbackInfo ci, CallbackInfo ci,
double _l1, double _l1,
//#if MC>=11400 //#if MC>=11400
//$$ float yOffsetAccumulated float yOffsetAccumulated
//#else //#else
double yOffsetAccumulated //$$ double yOffsetAccumulated
//#endif //#endif
) { ) {
if (ReplayModReplay.instance.getReplayHandler() != null) { if (ReplayModReplay.instance.getReplayHandler() != null) {

View File

@@ -1,8 +1,8 @@
package com.replaymod.recording.mixin; package com.replaymod.recording.mixin;
import com.replaymod.recording.ReplayModRecording; import com.replaymod.recording.ReplayModRecording;
import net.minecraft.client.network.NetHandlerLoginClient; import net.minecraft.client.network.ClientLoginNetworkHandler;
import net.minecraft.network.NetworkManager; import net.minecraft.network.ClientConnection;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At; 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.core.versions.MCVer;
import com.replaymod.recording.handler.RecordingEventHandler.RecordingEventSender; import com.replaymod.recording.handler.RecordingEventHandler.RecordingEventSender;
import net.minecraft.network.Packet; import net.minecraft.network.Packet;
import net.minecraft.network.login.server.SPacketCustomPayloadLogin; import net.minecraft.client.network.packet.LoginQueryRequestS2CPacket;
import net.minecraft.network.login.server.SPacketLoginSuccess; import net.minecraft.client.network.packet.LoginSuccessS2CPacket;
//#else //#else
//$$ import net.minecraftforge.fml.common.network.FMLNetworkEvent; //$$ import net.minecraftforge.fml.common.network.FMLNetworkEvent;
//#endif //#endif
@Mixin(NetHandlerLoginClient.class) @Mixin(ClientLoginNetworkHandler.class)
public abstract class MixinNetHandlerLoginClient { public abstract class MixinNetHandlerLoginClient {
@Shadow @Shadow
//#if MC>=10800 //#if MC>=10800
private NetworkManager networkManager; private ClientConnection connection;
//#else //#else
//$$ private NetworkManager field_147393_d; //$$ private NetworkManager field_147393_d;
//#endif //#endif
//#if MC>=11300 //#if MC>=11300
@Inject(method = "func_209521_a", at=@At("HEAD")) @Inject(method = "onQueryRequest", at=@At("HEAD"))
private void earlyInitiateRecording(SPacketCustomPayloadLogin packet, CallbackInfo ci) { private void earlyInitiateRecording(LoginQueryRequestS2CPacket packet, CallbackInfo ci) {
initiateRecording(packet); initiateRecording(packet);
} }
@Inject(method = "handleLoginSuccess", at=@At("HEAD")) @Inject(method = "onLoginSuccess", at=@At("HEAD"))
private void lateInitiateRecording(SPacketLoginSuccess packet, CallbackInfo ci) { private void lateInitiateRecording(LoginSuccessS2CPacket packet, CallbackInfo ci) {
initiateRecording(packet); initiateRecording(packet);
} }
private void initiateRecording(Packet<?> packet) { private void initiateRecording(Packet<?> packet) {
RecordingEventSender eventSender = (RecordingEventSender) MCVer.getMinecraft().renderGlobal; RecordingEventSender eventSender = (RecordingEventSender) MCVer.getMinecraft().worldRenderer;
if (eventSender.getRecordingEventHandler() != null) { if (eventSender.getRecordingEventHandler() != null) {
return; // already recording return; // already recording
} }
ReplayModRecording.instance.initiateRecording(this.networkManager); ReplayModRecording.instance.initiateRecording(this.connection);
if (eventSender.getRecordingEventHandler() != null) { if (eventSender.getRecordingEventHandler() != null) {
eventSender.getRecordingEventHandler().onPacket(packet); 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) // Race condition in Forge's networking (not sure if still present in 1.13)
//#if MC>=11200 && MC<11400 //#if MC>=11200 && MC<11400
@Inject(method = "handleLoginSuccess", at=@At("RETURN")) //$$ @Inject(method = "handleLoginSuccess", at=@At("RETURN"))
public void replayModRecording_raceConditionWorkAround(CallbackInfo cb) { //$$ public void replayModRecording_raceConditionWorkAround(CallbackInfo cb) {
((NetworkManagerAccessor) this.networkManager).getChannel().config().setAutoRead(true); //$$ ((NetworkManagerAccessor) this.networkManager).getChannel().config().setAutoRead(true);
} //$$ }
//#endif //#endif
} }

View File

@@ -2,9 +2,9 @@ package com.replaymod.recording.mixin;
import com.replaymod.core.versions.MCVer; import com.replaymod.core.versions.MCVer;
import com.replaymod.recording.handler.RecordingEventHandler; import com.replaymod.recording.handler.RecordingEventHandler;
import net.minecraft.client.Minecraft; import net.minecraft.client.MinecraftClient;
import net.minecraft.client.network.NetHandlerPlayClient; import net.minecraft.client.network.ClientPlayNetworkHandler;
import net.minecraft.network.play.server.*; import net.minecraft.client.network.packet.*;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At; 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 com.github.steveice10.packetlib.io.buffer.ByteBufferNetInput;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled; import io.netty.buffer.Unpooled;
import net.minecraft.network.PacketBuffer; import net.minecraft.util.PacketByteBuf;
import net.minecraft.network.play.server.SPacketPlayerListItem; import net.minecraft.client.network.packet.PlayerListS2CPacket;
import net.minecraft.client.network.NetworkPlayerInfo; import net.minecraft.client.network.PlayerListEntry;
import java.io.IOException; import java.io.IOException;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
@@ -26,18 +26,18 @@ import java.util.Map;
import java.util.UUID; import java.util.UUID;
//#endif //#endif
@Mixin(NetHandlerPlayClient.class) @Mixin(ClientPlayNetworkHandler.class)
public abstract class MixinNetHandlerPlayClient { public abstract class MixinNetHandlerPlayClient {
private static Minecraft gameController = MCVer.getMinecraft(); private static MinecraftClient gameController = MCVer.getMinecraft();
//#if MC>=10800 //#if MC>=10800
@Shadow @Shadow
private Map<UUID, NetworkPlayerInfo> playerInfoMap; private Map<UUID, PlayerListEntry> playerListEntries;
//#endif //#endif
public RecordingEventHandler getRecordingEventHandler() { 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 * @param ci Callback info
*/ */
//#if MC>=10800 //#if MC>=10800
@Inject(method = "handlePlayerListItem", at=@At("HEAD")) @Inject(method = "onPlayerList", at=@At("HEAD"))
public void recordOwnJoin(SPacketPlayerListItem packet, CallbackInfo ci) { public void recordOwnJoin(PlayerListS2CPacket packet, CallbackInfo ci) {
if (gameController.player == null) return; if (gameController.player == null) return;
RecordingEventHandler handler = getRecordingEventHandler(); 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 // 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 // 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. // the back to the MCProtocolLib equivalent and deal with that one.
ByteBuf byteBuf = Unpooled.buffer(); ByteBuf byteBuf = Unpooled.buffer();
ServerPlayerListEntryPacket mcpl = new ServerPlayerListEntryPacket(null, null); ServerPlayerListEntryPacket mcpl = new ServerPlayerListEntryPacket(null, null);
try { try {
packet.writePacketData(new PacketBuffer(byteBuf)); packet.write(new PacketByteBuf(byteBuf));
byteBuf.readerIndex(0); byteBuf.readerIndex(0);
byte[] array = new byte[byteBuf.readableBytes()]; byte[] array = new byte[byteBuf.readableBytes()];
@@ -77,7 +77,7 @@ public abstract class MixinNetHandlerPlayClient {
if (data.getProfile() == null || data.getProfile().getId() == null) continue; 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 // 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()) if (data.getProfile().getId().equals(gameController.player.getGameProfile().getId())
&& !this.playerInfoMap.containsKey(data.getProfile().getId())) { && !this.playerListEntries.containsKey(data.getProfile().getId())) {
handler.onPlayerJoin(); handler.onPlayerJoin();
} }
} }
@@ -100,8 +100,8 @@ public abstract class MixinNetHandlerPlayClient {
* @param packet The packet * @param packet The packet
* @param ci Callback info * @param ci Callback info
*/ */
@Inject(method = "handleRespawn", at=@At("RETURN")) @Inject(method = "onPlayerRespawn", at=@At("RETURN"))
public void recordOwnRespawn(SPacketRespawn packet, CallbackInfo ci) { public void recordOwnRespawn(PlayerRespawnS2CPacket packet, CallbackInfo ci) {
RecordingEventHandler handler = getRecordingEventHandler(); RecordingEventHandler handler = getRecordingEventHandler();
if (handler != null) { if (handler != null) {
handler.onPlayerRespawn(); handler.onPlayerRespawn();

View File

@@ -1,7 +1,7 @@
package com.replaymod.recording.mixin; package com.replaymod.recording.mixin;
import com.replaymod.recording.handler.RecordingEventHandler; 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.Mixin;
import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Inject;
@@ -27,7 +27,7 @@ public abstract class MixinRenderGlobal implements RecordingEventHandler.Recordi
} }
//#if MC>=10800 //#if MC>=10800
@Inject(method = "sendBlockBreakProgress", at = @At("HEAD")) @Inject(method = "setBlockBreakingProgress", at = @At("HEAD"))
//#else //#else
//$$ @Inject(method = "destroyBlockPartially", at = @At("HEAD")) //$$ @Inject(method = "destroyBlockPartially", at = @At("HEAD"))
//#endif //#endif

View File

@@ -2,15 +2,15 @@ package com.replaymod.recording.mixin;
//#if MC>=10904 //#if MC>=10904
import com.replaymod.recording.handler.RecordingEventHandler; import com.replaymod.recording.handler.RecordingEventHandler;
import net.minecraft.client.Minecraft; import net.minecraft.client.MinecraftClient;
import net.minecraft.client.multiplayer.WorldClient; import net.minecraft.client.world.ClientWorld;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.profiler.Profiler; import net.minecraft.util.profiler.Profiler;
import net.minecraft.util.SoundCategory; import net.minecraft.sound.SoundCategory;
import net.minecraft.util.SoundEvent; import net.minecraft.sound.SoundEvent;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World; 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.Mixin;
import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At; 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; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
//#if MC>=11400 //#if MC>=11400
//$$ import net.minecraft.world.chunk.ChunkManager; 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.dimension.Dimension; 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 //#else
//$$ import net.minecraft.world.WorldProvider; //$$ import net.minecraft.world.WorldProvider;
//#endif //#endif
//#endif //#endif
@Mixin(WorldClient.class) @Mixin(ClientWorld.class)
public abstract class MixinWorldClient extends World implements RecordingEventHandler.RecordingEventSender { public abstract class MixinWorldClient extends World implements RecordingEventHandler.RecordingEventSender {
@Shadow @Shadow
private Minecraft mc; private MinecraftClient client;
//#if MC>=11400 //#if MC>=11400
//$$ protected MixinWorldClient(LevelProperties levelProperties_1, DimensionType dimensionType_1, BiFunction<World, Dimension, ChunkManager> biFunction_1, Profiler profiler_1, boolean boolean_1) { protected MixinWorldClient(LevelProperties levelProperties_1, DimensionType dimensionType_1, BiFunction<World, Dimension, ChunkManager> biFunction_1, Profiler profiler_1, boolean boolean_1) {
//$$ super(levelProperties_1, dimensionType_1, biFunction_1, profiler_1, boolean_1); super(levelProperties_1, dimensionType_1, biFunction_1, profiler_1, boolean_1);
//$$ } }
//#else //#else
protected MixinWorldClient(ISaveHandler saveHandlerIn, //$$ protected MixinWorldClient(ISaveHandler saveHandlerIn,
//#if MC>=11300 //#if MC>=11300
WorldSavedDataStorage mapStorage, //$$ WorldSavedDataStorage mapStorage,
//#endif //#endif
WorldInfo info, //$$ WorldInfo info,
//#if MC>=11300 //#if MC>=11300
Dimension providerIn, //$$ Dimension providerIn,
//#else //#else
//$$ WorldProvider providerIn, //$$ WorldProvider providerIn,
//#endif //#endif
Profiler profilerIn, boolean client) { //$$ Profiler profilerIn, boolean client) {
super(saveHandlerIn, //$$ super(saveHandlerIn,
//#if MC>=11300 //#if MC>=11300
mapStorage, //$$ mapStorage,
//#endif //#endif
info, providerIn, profilerIn, client); //$$ info, providerIn, profilerIn, client);
} //$$ }
//#endif //#endif
private RecordingEventHandler replayModRecording_getRecordingEventHandler() { 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 // 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. // other clients so we have to record them manually.
// E.g. Block place sounds // E.g. Block place sounds
//#if MC>=11400 //#if MC>=11400
//$$ @Inject(method = "playSound(Lnet/minecraft/entity/player/PlayerEntity;DDDLnet/minecraft/sound/SoundEvent;Lnet/minecraft/sound/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")) 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 //#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) { float volume, float pitch, CallbackInfo ci) {
if (player == mc.player) { if (player == client.player) {
RecordingEventHandler handler = replayModRecording_getRecordingEventHandler(); RecordingEventHandler handler = replayModRecording_getRecordingEventHandler();
if (handler != null) { if (handler != null) {
handler.onClientSound(sound, category, x, y, z, volume, pitch); 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. // Same goes for level events (also called effects). E.g. door open, block break, etc.
//#if MC>=11400 //#if MC>=11400
//$$ @Inject(method = "playLevelEvent", at = @At("HEAD")) @Inject(method = "playLevelEvent", at = @At("HEAD"))
//$$ private void playLevelEvent (PlayerEntity player, int type, BlockPos pos, int data, CallbackInfo ci) { private void playLevelEvent (PlayerEntity player, int type, BlockPos pos, int data, CallbackInfo ci) {
//#else //#else
// These are handled in the World class, so we override the method in WorldClient and add our special handling. //$$ // These are handled in the World class, so we override the method in WorldClient and add our special handling.
@Override //$$ @Override
public void playEvent (EntityPlayer player, int type, BlockPos pos, int data) { //$$ public void playEvent (EntityPlayer player, int type, BlockPos pos, int data) {
//#endif //#endif
if (player == mc.player) { if (player == client.player) {
// We caused this event, the server won't send it to us // We caused this event, the server won't send it to us
RecordingEventHandler handler = replayModRecording_getRecordingEventHandler(); RecordingEventHandler handler = replayModRecording_getRecordingEventHandler();
if (handler != null) { if (handler != null) {
@@ -104,7 +104,7 @@ public abstract class MixinWorldClient extends World implements RecordingEventHa
} }
} }
//#if MC<11400 //#if MC<11400
super.playEvent(player, type, pos, data); //$$ super.playEvent(player, type, pos, data);
//#endif //#endif
} }
} }

View File

@@ -1,11 +1,11 @@
package com.replaymod.recording.mixin; package com.replaymod.recording.mixin;
import io.netty.channel.Channel; 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.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor; import org.spongepowered.asm.mixin.gen.Accessor;
@Mixin(NetworkManager.class) @Mixin(ClientConnection.class)
public interface NetworkManagerAccessor { public interface NetworkManagerAccessor {
@Accessor @Accessor
Channel getChannel(); Channel getChannel();

View File

@@ -1,14 +1,14 @@
package com.replaymod.recording.mixin; package com.replaymod.recording.mixin;
import net.minecraft.network.datasync.EntityDataManager; import net.minecraft.entity.data.DataTracker;
import net.minecraft.network.play.server.SPacketSpawnMob; import net.minecraft.client.network.packet.MobSpawnS2CPacket;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor; import org.spongepowered.asm.mixin.gen.Accessor;
@Mixin(SPacketSpawnMob.class) @Mixin(MobSpawnS2CPacket.class)
public interface SPacketSpawnMobAccessor { public interface SPacketSpawnMobAccessor {
@Accessor @Accessor("dataTracker")
EntityDataManager getDataManager(); DataTracker getDataManager();
@Accessor @Accessor("dataTracker")
void setDataManager(EntityDataManager value); void setDataManager(DataTracker value);
} }

View File

@@ -1,14 +1,14 @@
package com.replaymod.recording.mixin; package com.replaymod.recording.mixin;
import net.minecraft.network.datasync.EntityDataManager; import net.minecraft.entity.data.DataTracker;
import net.minecraft.network.play.server.SPacketSpawnPlayer; import net.minecraft.client.network.packet.PlayerSpawnS2CPacket;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor; import org.spongepowered.asm.mixin.gen.Accessor;
@Mixin(SPacketSpawnPlayer.class) @Mixin(PlayerSpawnS2CPacket.class)
public interface SPacketSpawnPlayerAccessor { public interface SPacketSpawnPlayerAccessor {
@Accessor("watcher") @Accessor("dataTracker")
EntityDataManager getDataManager(); DataTracker getDataManager();
@Accessor("watcher") @Accessor("dataTracker")
void setDataManager(EntityDataManager value); void setDataManager(DataTracker value);
} }

View File

@@ -17,22 +17,22 @@ import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled; import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter; import io.netty.channel.ChannelInboundHandlerAdapter;
import net.minecraft.client.Minecraft; import net.minecraft.client.MinecraftClient;
import net.minecraft.entity.Entity; import net.minecraft.entity.Entity;
import net.minecraft.network.EnumConnectionState; import net.minecraft.network.NetworkState;
import net.minecraft.network.Packet; import net.minecraft.network.Packet;
import net.minecraft.network.PacketBuffer; import net.minecraft.util.PacketByteBuf;
import net.minecraft.network.play.server.*; import net.minecraft.client.network.packet.*;
import net.minecraft.util.text.TextComponentString; import net.minecraft.text.StringTextComponent;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
//#if MC>=11300 //#if MC>=11300
import net.minecraft.network.login.server.SPacketLoginSuccess; import net.minecraft.client.network.packet.LoginSuccessS2CPacket;
//#endif //#endif
//#if MC>=10904 //#if MC>=10904
import net.minecraft.network.datasync.EntityDataManager; import net.minecraft.entity.data.DataTracker;
//#else //#else
//$$ import net.minecraft.entity.DataWatcher; //$$ import net.minecraft.entity.DataWatcher;
//$$ //$$
@@ -40,7 +40,7 @@ import net.minecraft.network.datasync.EntityDataManager;
//#endif //#endif
//#if MC>=10800 //#if MC>=10800
import net.minecraft.network.EnumPacketDirection; import net.minecraft.network.NetworkSide;
//#if MC<11300 //#if MC<11300
//$$ import net.minecraftforge.fml.common.network.internal.FMLProxyPacket; //$$ import net.minecraftforge.fml.common.network.internal.FMLProxyPacket;
//#endif //#endif
@@ -64,7 +64,7 @@ import static com.replaymod.core.versions.MCVer.*;
public class PacketListener extends ChannelInboundHandlerAdapter { 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 static final Logger logger = LogManager.getLogger();
private final ReplayMod core; private final ReplayMod core;
@@ -85,7 +85,7 @@ public class PacketListener extends ChannelInboundHandlerAdapter {
private long timePassedWhilePaused; private long timePassedWhilePaused;
private volatile boolean serverWasPaused; private volatile boolean serverWasPaused;
//#if MC>=11300 //#if MC>=11300
private EnumConnectionState connectionState = EnumConnectionState.LOGIN; private NetworkState connectionState = NetworkState.LOGIN;
//#else //#else
//$$ private EnumConnectionState connectionState = EnumConnectionState.PLAY; //$$ private EnumConnectionState connectionState = EnumConnectionState.PLAY;
//#endif //#endif
@@ -126,9 +126,9 @@ public class PacketListener extends ChannelInboundHandlerAdapter {
public void save(Packet packet) { public void save(Packet packet) {
try { try {
if(packet instanceof SPacketSpawnPlayer) { if(packet instanceof PlayerSpawnS2CPacket) {
//#if MC>=10800 //#if MC>=10800
UUID uuid = ((SPacketSpawnPlayer) packet).getUniqueId(); UUID uuid = ((PlayerSpawnS2CPacket) packet).getPlayerUuid();
//#else //#else
//$$ UUID uuid = ((S0CPacketSpawnPlayer) packet).func_148948_e().getId(); //$$ UUID uuid = ((S0CPacketSpawnPlayer) packet).func_148948_e().getId();
//#endif //#endif
@@ -164,8 +164,8 @@ public class PacketListener extends ChannelInboundHandlerAdapter {
}); });
//#if MC>=11300 //#if MC>=11300
if (packet instanceof SPacketLoginSuccess) { if (packet instanceof LoginSuccessS2CPacket) {
connectionState = EnumConnectionState.PLAY; connectionState = NetworkState.PLAY;
} }
//#endif //#endif
} catch(Exception e) { } catch(Exception e) {
@@ -229,9 +229,9 @@ public class PacketListener extends ChannelInboundHandlerAdapter {
Packet packet = (Packet) msg; Packet packet = (Packet) msg;
//#if MC>=10904 //#if MC>=10904
if(packet instanceof SPacketCollectItem) { if(packet instanceof ItemPickupAnimationS2CPacket) {
if(mc.player != null || if(mc.player != null ||
((SPacketCollectItem) packet).getEntityID() == mc.player.getEntityId()) { ((ItemPickupAnimationS2CPacket) packet).getEntityId() == mc.player.getEntityId()) {
//#else //#else
//$$ if(packet instanceof S0DPacketCollectItem) { //$$ if(packet instanceof S0DPacketCollectItem) {
//$$ if(mc.thePlayer != null || //$$ if(mc.thePlayer != null ||
@@ -247,8 +247,8 @@ public class PacketListener extends ChannelInboundHandlerAdapter {
} }
//#if MC>=10800 //#if MC>=10800
if (packet instanceof SPacketResourcePackSend) { if (packet instanceof ResourcePackSendS2CPacket) {
save(resourcePackRecorder.handleResourcePack((SPacketResourcePackSend) packet)); save(resourcePackRecorder.handleResourcePack((ResourcePackSendS2CPacket) packet));
return; return;
} }
//#else //#else
@@ -276,10 +276,10 @@ public class PacketListener extends ChannelInboundHandlerAdapter {
save(packet); save(packet);
if (packet instanceof SPacketCustomPayload) { if (packet instanceof CustomPayloadS2CPacket) {
SPacketCustomPayload p = (SPacketCustomPayload) packet; CustomPayloadS2CPacket p = (CustomPayloadS2CPacket) packet;
if (Restrictions.PLUGIN_CHANNEL.equals(p.getChannelName())) { if (Restrictions.PLUGIN_CHANNEL.equals(p.getChannel())) {
packet = new SPacketDisconnect(new TextComponentString("Please update to view this replay.")); packet = new DisconnectS2CPacket(new StringTextComponent("Please update to view this replay."));
save(packet); save(packet);
} }
} }
@@ -293,21 +293,21 @@ public class PacketListener extends ChannelInboundHandlerAdapter {
} }
//#if MC>=10904 //#if MC>=10904
private <T> void DataManager_set(EntityDataManager dataManager, EntityDataManager.DataEntry<T> entry) { private <T> void DataManager_set(DataTracker dataManager, DataTracker.Entry<T> entry) {
dataManager.register(entry.getKey(), entry.getValue()); dataManager.startTracking(entry.getData(), entry.get());
} }
//#endif //#endif
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
private byte[] getPacketData(Packet packet) throws Exception { private byte[] getPacketData(Packet packet) throws Exception {
if (packet instanceof SPacketSpawnMob) { if (packet instanceof MobSpawnS2CPacket) {
SPacketSpawnMob p = (SPacketSpawnMob) packet; MobSpawnS2CPacket p = (MobSpawnS2CPacket) packet;
SPacketSpawnMobAccessor pa = (SPacketSpawnMobAccessor) p; SPacketSpawnMobAccessor pa = (SPacketSpawnMobAccessor) p;
if (pa.getDataManager() == null) { if (pa.getDataManager() == null) {
pa.setDataManager(new EntityDataManager(null)); pa.setDataManager(new DataTracker(null));
if (p.getDataManagerEntries() != null) { if (p.getTrackedValues() != null) {
//#if MC>=10904 //#if MC>=10904
for (EntityDataManager.DataEntry<?> entry : p.getDataManagerEntries()) { for (DataTracker.Entry<?> entry : p.getTrackedValues()) {
DataManager_set(pa.getDataManager(), entry); DataManager_set(pa.getDataManager(), entry);
} }
//#else //#else
@@ -319,14 +319,14 @@ public class PacketListener extends ChannelInboundHandlerAdapter {
} }
} }
if (packet instanceof SPacketSpawnPlayer) { if (packet instanceof PlayerSpawnS2CPacket) {
SPacketSpawnPlayer p = (SPacketSpawnPlayer) packet; PlayerSpawnS2CPacket p = (PlayerSpawnS2CPacket) packet;
SPacketSpawnPlayerAccessor pa = (SPacketSpawnPlayerAccessor) p; SPacketSpawnPlayerAccessor pa = (SPacketSpawnPlayerAccessor) p;
if (pa.getDataManager() == null) { if (pa.getDataManager() == null) {
pa.setDataManager(new EntityDataManager(null)); pa.setDataManager(new DataTracker(null));
if (p.getDataManagerEntries() != null) { if (p.getTrackedValues() != null) {
//#if MC>=10904 //#if MC>=10904
for (EntityDataManager.DataEntry<?> entry : p.getDataManagerEntries()) { for (DataTracker.Entry<?> entry : p.getTrackedValues()) {
DataManager_set(pa.getDataManager(), entry); DataManager_set(pa.getDataManager(), entry);
} }
//#else //#else
@@ -339,7 +339,7 @@ public class PacketListener extends ChannelInboundHandlerAdapter {
} }
//#if MC>=10800 //#if MC>=10800
Integer packetId = connectionState.getPacketId(EnumPacketDirection.CLIENTBOUND, packet); Integer packetId = connectionState.getPacketId(NetworkSide.CLIENT, packet);
//#else //#else
//$$ Integer packetId = (Integer) connectionState.func_150755_b().inverse().get(packet.getClass()); //$$ Integer packetId = (Integer) connectionState.func_150755_b().inverse().get(packet.getClass());
//#endif //#endif
@@ -347,9 +347,9 @@ public class PacketListener extends ChannelInboundHandlerAdapter {
throw new IOException("Unknown packet type:" + packet.getClass()); throw new IOException("Unknown packet type:" + packet.getClass());
} }
ByteBuf byteBuf = Unpooled.buffer(); ByteBuf byteBuf = Unpooled.buffer();
PacketBuffer packetBuffer = new PacketBuffer(byteBuf); PacketByteBuf packetBuffer = new PacketByteBuf(byteBuf);
packetBuffer.writeVarInt(packetId); packetBuffer.writeVarInt(packetId);
packet.writePacketData(packetBuffer); packet.write(packetBuffer);
byteBuf.readerIndex(0); byteBuf.readerIndex(0);
byte[] array = new byte[byteBuf.readableBytes()]; byte[] array = new byte[byteBuf.readableBytes()];
@@ -369,11 +369,11 @@ public class PacketListener extends ChannelInboundHandlerAdapter {
Marker marker = new Marker(); Marker marker = new Marker();
marker.setName(name); marker.setName(name);
marker.setTime(timestamp); marker.setTime(timestamp);
marker.setX(view.posX); marker.setX(view.x);
marker.setY(view.posY); marker.setY(view.y);
marker.setZ(view.posZ); marker.setZ(view.z);
marker.setYaw(view.rotationYaw); marker.setYaw(view.yaw);
marker.setPitch(view.rotationPitch); marker.setPitch(view.pitch);
// Roll is always 0 // Roll is always 0
saveService.submit(() -> { saveService.submit(() -> {
synchronized (replayFile) { synchronized (replayFile) {

View File

@@ -3,19 +3,19 @@ package com.replaymod.recording.packet;
import com.google.common.hash.Hashing; import com.google.common.hash.Hashing;
import com.google.common.io.Files; import com.google.common.io.Files;
import com.replaymod.replaystudio.replay.ReplayFile; import com.replaymod.replaystudio.replay.ReplayFile;
import net.minecraft.client.Minecraft; import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.GuiYesNo; import net.minecraft.client.gui.menu.YesNoScreen;
import net.minecraft.client.multiplayer.ServerData; import net.minecraft.client.options.ServerEntry;
import net.minecraft.client.multiplayer.ServerList; import net.minecraft.client.options.ServerList;
import net.minecraft.client.resources.DownloadingPackFinder; import net.minecraft.client.resource.ClientResourcePackCreator;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
//#if MC>=11400 //#if MC>=11400
//$$ import net.minecraft.text.TranslatableTextComponent; import net.minecraft.text.TranslatableTextComponent;
//#else //#else
import net.minecraft.client.gui.GuiYesNoCallback; //$$ import net.minecraft.client.gui.GuiYesNoCallback;
import net.minecraft.client.resources.I18n; //$$ import net.minecraft.client.resources.I18n;
//#endif //#endif
//#if MC>=10800 //#if MC>=10800
@@ -26,19 +26,19 @@ import de.johni0702.minecraft.gui.utils.Consumer;
//#endif //#endif
//#if MC>=10800 //#if MC>=10800
import net.minecraft.network.play.client.CPacketResourcePackStatus; import net.minecraft.server.network.packet.ResourcePackStatusC2SPacket;
import net.minecraft.network.play.client.CPacketResourcePackStatus.Action; import net.minecraft.server.network.packet.ResourcePackStatusC2SPacket.Status;
import net.minecraft.network.play.server.SPacketResourcePackSend; import net.minecraft.client.network.packet.ResourcePackSendS2CPacket;
//#endif //#endif
//#if MC>=10800 //#if MC>=10800
//#if MC>=11400 //#if MC>=11400
//$$ import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletableFuture;
//#else //#else
import com.google.common.util.concurrent.ListenableFuture; //$$ import com.google.common.util.concurrent.ListenableFuture;
//#endif //#endif
import net.minecraft.client.network.NetHandlerPlayClient; import net.minecraft.client.network.ClientPlayNetworkHandler;
import net.minecraft.network.NetworkManager; import net.minecraft.network.ClientConnection;
//#else //#else
//$$ import com.replaymod.core.mixin.ResourcePackRepositoryAccessor; //$$ import com.replaymod.core.mixin.ResourcePackRepositoryAccessor;
//$$ import net.minecraft.client.multiplayer.ServerData.ServerResourceMode; //$$ import net.minecraft.client.multiplayer.ServerData.ServerResourceMode;
@@ -61,7 +61,7 @@ import static com.replaymod.core.versions.MCVer.*;
*/ */
public class ResourcePackRecorder { public class ResourcePackRecorder {
private static final Logger logger = LogManager.getLogger(); private static final Logger logger = LogManager.getLogger();
private static final Minecraft mc = getMinecraft(); private static final MinecraftClient mc = getMinecraft();
private final ReplayFile replayFile; private final ReplayFile replayFile;
@@ -102,99 +102,99 @@ public class ResourcePackRecorder {
} }
//#if MC>=10800 //#if MC>=10800
public CPacketResourcePackStatus makeStatusPacket(String hash, Action action) { public ResourcePackStatusC2SPacket makeStatusPacket(String hash, Status action) {
//#if MC>=11002 //#if MC>=11002
return new CPacketResourcePackStatus(action); return new ResourcePackStatusC2SPacket(action);
//#else //#else
//$$ return new CPacketResourcePackStatus(hash, action); //$$ return new CPacketResourcePackStatus(hash, action);
//#endif //#endif
} }
public synchronized SPacketResourcePackSend handleResourcePack(SPacketResourcePackSend packet) { public synchronized ResourcePackSendS2CPacket handleResourcePack(ResourcePackSendS2CPacket packet) {
final int requestId = nextRequestId++; final int requestId = nextRequestId++;
final NetHandlerPlayClient netHandler = mc.getConnection(); final ClientPlayNetworkHandler netHandler = mc.getNetworkHandler();
final NetworkManager netManager = netHandler.getNetworkManager(); final ClientConnection netManager = netHandler.getClientConnection();
final String url = packet.getURL(); final String url = packet.getURL();
final String hash = packet.getHash(); final String hash = packet.getSHA1();
if (url.startsWith("level://")) { if (url.startsWith("level://")) {
String levelName = url.substring("level://".length()); 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); final File levelDir = new File(savesDir, levelName);
if (levelDir.isFile()) { if (levelDir.isFile()) {
netManager.sendPacket(makeStatusPacket(hash, Action.ACCEPTED)); netManager.send(makeStatusPacket(hash, Status.ACCEPTED));
addCallback(setServerResourcePack(levelDir), result -> { addCallback(setServerResourcePack(levelDir), result -> {
recordResourcePack(levelDir, requestId); recordResourcePack(levelDir, requestId);
netManager.sendPacket(makeStatusPacket(hash, Action.SUCCESSFULLY_LOADED)); netManager.send(makeStatusPacket(hash, Status.SUCCESSFULLY_LOADED));
}, throwable -> { }, throwable -> {
netManager.sendPacket(makeStatusPacket(hash, Action.FAILED_DOWNLOAD)); netManager.send(makeStatusPacket(hash, Status.FAILED_DOWNLOAD));
}); });
} else { } else {
netManager.sendPacket(makeStatusPacket(hash, Action.FAILED_DOWNLOAD)); netManager.send(makeStatusPacket(hash, Status.FAILED_DOWNLOAD));
} }
} else { } else {
final ServerData serverData = mc.getCurrentServerData(); final ServerEntry serverData = mc.getCurrentServerEntry();
if (serverData != null && serverData.getResourceMode() == ServerData.ServerResourceMode.ENABLED) { if (serverData != null && serverData.getResourcePack() == ServerEntry.ResourcePackState.ENABLED) {
netManager.sendPacket(makeStatusPacket(hash, Action.ACCEPTED)); netManager.send(makeStatusPacket(hash, Status.ACCEPTED));
downloadResourcePackFuture(requestId, url, hash); downloadResourcePackFuture(requestId, url, hash);
} else if (serverData != null && serverData.getResourceMode() != ServerData.ServerResourceMode.PROMPT) { } else if (serverData != null && serverData.getResourcePack() != ServerEntry.ResourcePackState.PROMPT) {
netManager.sendPacket(makeStatusPacket(hash, Action.DECLINED)); netManager.send(makeStatusPacket(hash, Status.DECLINED));
} else { } else {
// Lambdas MUST NOT be used with methods that need re-obfuscation in FG prior to 2.2 (will result in AbstractMethodError) // Lambdas MUST NOT be used with methods that need re-obfuscation in FG prior to 2.2 (will result in AbstractMethodError)
//#if MC>=11400 //#if MC>=11400
//$$ mc.execute(() -> mc.openScreen(new YesNoScreen(result -> { mc.execute(() -> mc.openScreen(new YesNoScreen(result -> {
//#else //#else
//noinspection Convert2Lambda //$$ //noinspection Convert2Lambda
mc.addScheduledTask(() -> mc.displayGuiScreen(new GuiYesNo(new GuiYesNoCallback() { //$$ mc.addScheduledTask(() -> mc.displayGuiScreen(new GuiYesNo(new GuiYesNoCallback() {
@Override //$$ @Override
//#if MC>=11300 //#if MC>=11300
public void confirmResult(boolean result, int id) { //$$ public void confirmResult(boolean result, int id) {
//#else //#else
//$$ public void confirmClicked(boolean result, int id) { //$$ public void confirmClicked(boolean result, int id) {
//#endif //#endif
//#endif //#endif
if (serverData != null) { if (serverData != null) {
serverData.setResourceMode(result ? ServerData.ServerResourceMode.ENABLED : ServerData.ServerResourceMode.DISABLED); serverData.setResourcePackState(result ? ServerEntry.ResourcePackState.ENABLED : ServerEntry.ResourcePackState.DISABLED);
} }
if (result) { if (result) {
netManager.sendPacket(makeStatusPacket(hash, Action.ACCEPTED)); netManager.send(makeStatusPacket(hash, Status.ACCEPTED));
downloadResourcePackFuture(requestId, url, hash); downloadResourcePackFuture(requestId, url, hash);
} else { } else {
netManager.sendPacket(makeStatusPacket(hash, Action.DECLINED)); netManager.send(makeStatusPacket(hash, Status.DECLINED));
} }
ServerList.saveSingleServer(serverData); ServerList.updateServerListEntry(serverData);
mc.displayGuiScreen(null); mc.openScreen(null);
} }
//#if MC>=11400 //#if MC>=11400
//$$ , new TranslatableTextComponent("multiplayer.texturePrompt.line1"), new TranslatableTextComponent("multiplayer.texturePrompt.line2")))); , new TranslatableTextComponent("multiplayer.texturePrompt.line1"), new TranslatableTextComponent("multiplayer.texturePrompt.line2"))));
//#else //#else
}, I18n.format("multiplayer.texturePrompt.line1"), I18n.format("multiplayer.texturePrompt.line2"), 0))); //$$ }, I18n.format("multiplayer.texturePrompt.line1"), I18n.format("multiplayer.texturePrompt.line2"), 0)));
//#endif //#endif
} }
} }
return new SPacketResourcePackSend("replay://" + requestId, ""); return new ResourcePackSendS2CPacket("replay://" + requestId, "");
} }
private void downloadResourcePackFuture(int requestId, String url, final String hash) { private void downloadResourcePackFuture(int requestId, String url, final String hash) {
addCallback(downloadResourcePack(requestId, url, hash), addCallback(downloadResourcePack(requestId, url, hash),
result -> mc.getConnection().sendPacket(makeStatusPacket(hash, Action.SUCCESSFULLY_LOADED)), result -> mc.getNetworkHandler().sendPacket(makeStatusPacket(hash, Status.SUCCESSFULLY_LOADED)),
throwable -> mc.getConnection().sendPacket(makeStatusPacket(hash, Action.FAILED_DOWNLOAD))); throwable -> mc.getNetworkHandler().sendPacket(makeStatusPacket(hash, Status.FAILED_DOWNLOAD)));
} }
private private
//#if MC>=11400 //#if MC>=11400
//$$ CompletableFuture<?> CompletableFuture<?>
//#else //#else
ListenableFuture<?> //$$ ListenableFuture<?>
//#endif //#endif
downloadResourcePack(final int requestId, String url, String hash) { downloadResourcePack(final int requestId, String url, String hash) {
DownloadingPackFinder packFinder = mc.getPackFinder(); ClientResourcePackCreator packFinder = mc.getResourcePackDownloader();
((IDownloadingPackFinder) packFinder).setRequestCallback(file -> recordResourcePack(file, requestId)); ((IDownloadingPackFinder) packFinder).setRequestCallback(file -> recordResourcePack(file, requestId));
return packFinder.downloadResourcePack(url, hash); return packFinder.download(url, hash);
} }
public interface IDownloadingPackFinder { public interface IDownloadingPackFinder {

View File

@@ -5,8 +5,8 @@ import de.johni0702.minecraft.gui.utils.lwjgl.ReadableColor;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.Getter; import lombok.Getter;
import net.minecraft.client.resources.I18n; import net.minecraft.client.resource.language.I18n;
import net.minecraft.util.Util; import net.minecraft.util.SystemUtil;
import java.io.File; import java.io.File;
import java.util.Arrays; import java.util.Arrays;
@@ -32,11 +32,11 @@ public class RenderSettings {
@Override @Override
public String toString() { public String toString() {
return I18n.format("replaymod.gui.rendersettings.renderer." + name().toLowerCase()); return I18n.translate("replaymod.gui.rendersettings.renderer." + name().toLowerCase());
} }
public String getDescription() { 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() { public boolean isSpherical() {
@@ -89,7 +89,7 @@ public class RenderSettings {
@Override @Override
public String toString() { 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 @Override
public String toString() { 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() { private static String findFFmpeg() {
switch (Util.getOSType()) { switch (SystemUtil.getOperatingSystem()) {
case WINDOWS: case WINDOWS:
// Allow windows users to unpack the ffmpeg archive into a sub-folder of their .minecraft folder // 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()) { if (inDotMinecraft.exists()) {
LOGGER.debug("FFmpeg found in .minecraft/ffmpeg"); LOGGER.debug("FFmpeg found in .minecraft/ffmpeg");
return inDotMinecraft.getAbsolutePath(); return inDotMinecraft.getAbsolutePath();
} }
break; break;
case OSX: case MAC:
// The PATH doesn't seem to be set as expected on OSX, therefore we check some common locations ourselves // 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"}) { for (String path : new String[]{"/usr/local/bin/ffmpeg", "/usr/bin/ffmpeg"}) {
File file = new File(path); File file = new File(path);
@@ -212,7 +212,7 @@ public class RenderSettings {
} }
} }
break; 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 SOLARIS: // Never heard of anyone running this mod on Solaris having any problems
case UNKNOWN: // Unknown OS, just try to use "ffmpeg" case UNKNOWN: // Unknown OS, just try to use "ffmpeg"
} }

View File

@@ -4,8 +4,8 @@ import com.replaymod.core.Module;
import com.replaymod.core.ReplayMod; import com.replaymod.core.ReplayMod;
import com.replaymod.render.utils.RenderJob; import com.replaymod.render.utils.RenderJob;
import com.replaymod.replay.events.ReplayClosedCallback; import com.replaymod.replay.events.ReplayClosedCallback;
import net.minecraft.crash.CrashReport; import net.minecraft.util.crash.CrashReport;
import net.minecraft.crash.ReportedException; import net.minecraft.util.crash.CrashException;
import org.apache.commons.io.FileUtils; import org.apache.commons.io.FileUtils;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
@@ -45,17 +45,17 @@ public class ReplayModRender implements Module {
public File getVideoFolder() { public File getVideoFolder() {
String path = core.getSettingsRegistry().get(Setting.RENDER_PATH); 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 { try {
FileUtils.forceMkdir(folder); FileUtils.forceMkdir(folder);
} catch (IOException e) { } 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; return folder;
} }
public Path getRenderSettingsPath() { 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<RenderJob> getRenderQueue() { public List<RenderJob> getRenderQueue() {

View File

@@ -7,8 +7,8 @@ import com.replaymod.render.rendering.VideoRenderer;
import com.replaymod.render.utils.ByteBufferPool; import com.replaymod.render.utils.ByteBufferPool;
import com.replaymod.render.utils.StreamPipe; import com.replaymod.render.utils.StreamPipe;
import de.johni0702.minecraft.gui.utils.lwjgl.ReadableDimension; import de.johni0702.minecraft.gui.utils.lwjgl.ReadableDimension;
import net.minecraft.crash.CrashReport; import net.minecraft.util.crash.CrashReport;
import net.minecraft.crash.CrashReportCategory; import net.minecraft.util.crash.CrashReportSection;
import org.apache.commons.exec.CommandLine; import org.apache.commons.exec.CommandLine;
import org.apache.commons.io.FileUtils; import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils; import org.apache.commons.io.IOUtils;
@@ -68,7 +68,7 @@ public class VideoWriter implements FrameConsumer<RGBFrame> {
} catch (IOException e) { } catch (IOException e) {
throw new NoFFmpegException(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); OutputStream exportLogOut = new TeeOutputStream(new FileOutputStream(exportLogFile), ffmpegLog);
new StreamPipe(process.getInputStream(), exportLogOut).start(); new StreamPipe(process.getInputStream(), exportLogOut).start();
new StreamPipe(process.getErrorStream(), exportLogOut).start(); new StreamPipe(process.getErrorStream(), exportLogOut).start();
@@ -122,11 +122,11 @@ public class VideoWriter implements FrameConsumer<RGBFrame> {
renderer.setFailure(e); renderer.setFailure(e);
return; return;
} }
CrashReport report = CrashReport.makeCrashReport(t, "Exporting frame"); CrashReport report = CrashReport.create(t, "Exporting frame");
CrashReportCategory exportDetails = report.makeCategory("Export details"); CrashReportSection exportDetails = report.addElement("Export details");
MCVer.addDetail(exportDetails, "Export command", settings::getExportCommand); MCVer.addDetail(exportDetails, "Export command", settings::getExportCommand);
MCVer.addDetail(exportDetails, "Export args", commandArgs::toString); MCVer.addDetail(exportDetails, "Export args", commandArgs::toString);
MCVer.getMinecraft().crashed(report); MCVer.getMinecraft().setCrashReport(report);
} }
} }

View File

@@ -4,7 +4,7 @@ import com.replaymod.render.blend.data.DImage;
import com.replaymod.render.blend.data.DMaterial; import com.replaymod.render.blend.data.DMaterial;
import com.replaymod.render.blend.data.DPackedFile; import com.replaymod.render.blend.data.DPackedFile;
import com.replaymod.render.blend.data.DTexture; 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.apache.commons.lang3.tuple.Pair;
import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL11;
@@ -27,7 +27,7 @@ public class BlendMaterials {
// Read raw image data from GL // Read raw image data from GL
int width = GL11.glGetTexLevelParameteri(GL11.GL_TEXTURE_2D, 0, GL11.GL_TEXTURE_WIDTH); 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); 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); GL11.glGetTexImage(GL11.GL_TEXTURE_2D, 0, GL11.GL_RGBA, GL11.GL_UNSIGNED_BYTE, buffer);
// Convert to BufferedImage // Convert to BufferedImage

View File

@@ -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.ReadableVector3f;
import de.johni0702.minecraft.gui.utils.lwjgl.vector.Vector2f; import de.johni0702.minecraft.gui.utils.lwjgl.vector.Vector2f;
import de.johni0702.minecraft.gui.utils.lwjgl.vector.Vector3f; import de.johni0702.minecraft.gui.utils.lwjgl.vector.Vector3f;
import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.render.Tessellator;
import net.minecraft.client.renderer.vertex.VertexFormat; import net.minecraft.client.render.VertexFormat;
import net.minecraft.client.renderer.vertex.VertexFormatElement; import net.minecraft.client.render.VertexFormatElement;
import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL11;
//#if MC>=10904 //#if MC>=10904
//#if MC>=11200 //#if MC>=11200
import net.minecraft.client.renderer.BufferBuilder; import net.minecraft.client.render.BufferBuilder;
//#else //#else
//$$ import net.minecraft.client.renderer.VertexBuffer; //$$ import net.minecraft.client.renderer.VertexBuffer;
//#endif //#endif
@@ -68,7 +68,7 @@ public class BlendMeshBuilder
// Someone probably finished drawing with the global instance instead of this one, // 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 // let's just assume that what's happened and finish our last draw by ourselves
// (might miss correct texture though) // (might miss correct texture though)
super.finishDrawing(); super.end();
addBufferToMesh(); addBufferToMesh();
} else { } else {
throw new IllegalStateException("Already drawing!"); throw new IllegalStateException("Already drawing!");
@@ -91,14 +91,14 @@ public class BlendMeshBuilder
public void maybeFinishDrawing() { public void maybeFinishDrawing() {
if (isDrawing) { if (isDrawing) {
isDrawing = false; isDrawing = false;
super.finishDrawing(); super.end();
addBufferToMesh(); addBufferToMesh();
} }
} }
@Override @Override
//#if MC>=10809 //#if MC>=10809
public void finishDrawing() { public void end() {
//#else //#else
//$$ public int finishDrawing() { //$$ public int finishDrawing() {
//#endif //#endif
@@ -106,13 +106,13 @@ public class BlendMeshBuilder
throw new IllegalStateException("Not building!"); throw new IllegalStateException("Not building!");
} else { } else {
if (!wellBehaved) { if (!wellBehaved) {
Tessellator.getInstance().getBuffer().finishDrawing(); Tessellator.getInstance().getBufferBuilder().end();
} }
//#if MC<10809 //#if MC<10809
//$$ int ret = //$$ int ret =
//#endif //#endif
super.finishDrawing(); super.end();
addBufferToMesh(); addBufferToMesh();
@@ -140,7 +140,7 @@ public class BlendMeshBuilder
public static DMesh addBufferToMesh(ByteBuffer buffer, int mode, VertexFormat vertexFormat, DMesh mesh, ReadableVector3f vertOffset) { public static DMesh addBufferToMesh(ByteBuffer buffer, int mode, VertexFormat vertexFormat, DMesh mesh, ReadableVector3f vertOffset) {
//#if MC>=11300 //#if MC>=11300
int vertexCount = buffer.remaining() / vertexFormat.getSize(); int vertexCount = buffer.remaining() / vertexFormat.getVertexSize();
//#else //#else
//$$ int vertexCount = buffer.remaining() / vertexFormat.getNextOffset(); //$$ int vertexCount = buffer.remaining() / vertexFormat.getNextOffset();
//#endif //#endif
@@ -160,26 +160,26 @@ public class BlendMeshBuilder
int index = 0; int index = 0;
for (VertexFormatElement element : getElements(vertexFormat)) { for (VertexFormatElement element : getElements(vertexFormat)) {
//#if MC>=10809 //#if MC>=10809
int offset = vertexFormat.getOffset(index); int offset = vertexFormat.getElementOffset(index);
//#else //#else
//$$ int offset = element.getOffset(); //$$ int offset = element.getOffset();
//#endif //#endif
switch (element.getUsage()) { switch (element.getType()) {
case POSITION: case POSITION:
if (element.getType() != VertexFormatElement.EnumType.FLOAT) { if (element.getFormat() != VertexFormatElement.Format.FLOAT) {
throw new UnsupportedOperationException("Only float is supported for position elements!"); throw new UnsupportedOperationException("Only float is supported for position elements!");
} }
posOffset = offset; posOffset = offset;
break; break;
case COLOR: 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!"); throw new UnsupportedOperationException("Only unsigned byte is supported for color elements!");
} }
colorOffset = offset; colorOffset = offset;
break; break;
case UV: case UV:
if (element.getIndex() != 0) break; 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!"); throw new UnsupportedOperationException("Only float is supported for UV elements!");
} }
uvOffset = offset; uvOffset = offset;
@@ -194,7 +194,7 @@ public class BlendMeshBuilder
List<Vector2f> uvs = new ArrayList<>(vertexCount); List<Vector2f> uvs = new ArrayList<>(vertexCount);
List<Integer> colors = new ArrayList<>(vertexCount); List<Integer> colors = new ArrayList<>(vertexCount);
//#if MC>=11300 //#if MC>=11300
int step = vertexFormat.getSize(); int step = vertexFormat.getVertexSize();
//#else //#else
//$$ int step = vertexFormat.getNextOffset(); //$$ int step = vertexFormat.getNextOffset();
//#endif //#endif

View File

@@ -10,9 +10,9 @@ import com.replaymod.render.blend.exporters.ParticlesExporter;
import com.replaymod.render.blend.exporters.RenderState; import com.replaymod.render.blend.exporters.RenderState;
import com.replaymod.render.blend.exporters.TileEntityExporter; import com.replaymod.render.blend.exporters.TileEntityExporter;
//#endif //#endif
import net.minecraft.crash.CrashReport; import net.minecraft.util.crash.CrashReport;
import net.minecraft.crash.CrashReportCategory; import net.minecraft.util.crash.CrashReportSection;
import net.minecraft.crash.ReportedException; import net.minecraft.util.crash.CrashException;
import org.apache.commons.io.output.NullOutputStream; import org.apache.commons.io.output.NullOutputStream;
import org.blender.utils.BlenderFactory; import org.blender.utils.BlenderFactory;
import org.cakelab.blender.io.BlenderFile; import org.cakelab.blender.io.BlenderFile;
@@ -80,10 +80,10 @@ public class BlendState implements Exporter {
try { try {
exporter.setup(); exporter.setup();
} catch (IOException e) { } catch (IOException e) {
CrashReport report = CrashReport.makeCrashReport(e, "Setup of blend exporter"); CrashReport report = CrashReport.create(e, "Setup of blend exporter");
CrashReportCategory category = report.makeCategory("Exporter"); CrashReportSection category = report.addElement("Exporter");
addDetail(category, "Exporter", exporter::toString); addDetail(category, "Exporter", exporter::toString);
throw new ReportedException(report); throw new CrashException(report);
} }
} }
} }
@@ -94,10 +94,10 @@ public class BlendState implements Exporter {
try { try {
exporter.tearDown(); exporter.tearDown();
} catch (IOException e) { } catch (IOException e) {
CrashReport report = CrashReport.makeCrashReport(e, "Tear down of blend exporter"); CrashReport report = CrashReport.create(e, "Tear down of blend exporter");
CrashReportCategory category = report.makeCategory("Exporter"); CrashReportSection category = report.addElement("Exporter");
addDetail(category, "Exporter", exporter::toString); addDetail(category, "Exporter", exporter::toString);
throw new ReportedException(report); throw new CrashException(report);
} }
} }
@@ -131,11 +131,11 @@ public class BlendState implements Exporter {
try { try {
exporter.preFrame(frame); exporter.preFrame(frame);
} catch (IOException e) { } catch (IOException e) {
CrashReport report = CrashReport.makeCrashReport(e, "Pre frame of blend exporter"); CrashReport report = CrashReport.create(e, "Pre frame of blend exporter");
CrashReportCategory category = report.makeCategory("Exporter"); CrashReportSection category = report.addElement("Exporter");
addDetail(category, "Exporter", exporter::toString); addDetail(category, "Exporter", exporter::toString);
addDetail(category, "Frame", () -> String.valueOf(frame)); addDetail(category, "Frame", () -> String.valueOf(frame));
throw new ReportedException(report); throw new CrashException(report);
} }
} }
} }
@@ -146,11 +146,11 @@ public class BlendState implements Exporter {
try { try {
exporter.postFrame(frame); exporter.postFrame(frame);
} catch (IOException e) { } catch (IOException e) {
CrashReport report = CrashReport.makeCrashReport(e, "Post frame of blend exporter"); CrashReport report = CrashReport.create(e, "Post frame of blend exporter");
CrashReportCategory category = report.makeCategory("Exporter"); CrashReportSection category = report.addElement("Exporter");
addDetail(category, "Exporter", exporter::toString); addDetail(category, "Exporter", exporter::toString);
addDetail(category, "Frame", () -> String.valueOf(frame)); addDetail(category, "Frame", () -> String.valueOf(frame));
throw new ReportedException(report); throw new CrashException(report);
} }
} }

View File

@@ -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.Matrix4f;
import de.johni0702.minecraft.gui.utils.lwjgl.vector.Quaternion; import de.johni0702.minecraft.gui.utils.lwjgl.vector.Quaternion;
import de.johni0702.minecraft.gui.utils.lwjgl.vector.Vector3f; import de.johni0702.minecraft.gui.utils.lwjgl.vector.Vector3f;
import net.minecraft.client.Minecraft; import net.minecraft.client.MinecraftClient;
import net.minecraft.client.renderer.GLAllocation; import net.minecraft.client.util.GlAllocationUtils;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.CompoundTag;
import net.minecraft.tileentity.TileEntity; import net.minecraft.block.entity.BlockEntity;
import org.blender.dna.Link; import org.blender.dna.Link;
import org.blender.dna.ListBase; import org.blender.dna.ListBase;
import org.blender.utils.BlenderFactory; import org.blender.utils.BlenderFactory;
@@ -18,7 +18,7 @@ import java.io.IOException;
import java.nio.FloatBuffer; import java.nio.FloatBuffer;
//#if MC>=11400 //#if MC>=11400
//$$ import net.minecraft.util.math.Vec3d; import net.minecraft.util.math.Vec3d;
//#endif //#endif
public class Util { 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) { public static Matrix4f getGlMatrix(int matrix) {
floatBuffer.clear(); floatBuffer.clear();
//#if MC>=11300 //#if MC>=11300
@@ -138,16 +138,16 @@ public class Util {
//#if MC>=10800 //#if MC>=10800
public static Vector3f getCameraPos() { public static Vector3f getCameraPos() {
Minecraft mc = Minecraft.getInstance(); MinecraftClient mc = MinecraftClient.getInstance();
//#if MC>=11400 //#if MC>=11400
//$$ Vec3d pos = mc.getEntityRenderManager().camera.getPos(); Vec3d pos = mc.getEntityRenderManager().camera.getPos();
//$$ return new Vector3f((float) pos.x, (float) pos.y, (float) pos.z); return new Vector3f((float) pos.x, (float) pos.y, (float) pos.z);
//#else //#else
return new Vector3f( //$$ return new Vector3f(
(float) -mc.getRenderManager().viewerPosX, //$$ (float) -mc.getRenderManager().viewerPosX,
(float) -mc.getRenderManager().viewerPosY, //$$ (float) -mc.getRenderManager().viewerPosY,
(float) -mc.getRenderManager().viewerPosZ //$$ (float) -mc.getRenderManager().viewerPosZ
); //$$ );
//#endif //#endif
} }
//#endif //#endif
@@ -182,10 +182,10 @@ public class Util {
} }
} }
public static String getTileEntityId(TileEntity tileEntity) { public static String getTileEntityId(BlockEntity tileEntity) {
NBTTagCompound nbt = new NBTTagCompound(); CompoundTag nbt = new CompoundTag();
//#if MC>=11300 //#if MC>=11300
tileEntity.write(nbt); tileEntity.toTag(nbt);
//#else //#else
//$$ tileEntity.writeToNBT(nbt); //$$ tileEntity.writeToNBT(nbt);
//#endif //#endif

View File

@@ -10,19 +10,19 @@ import com.replaymod.render.blend.data.DObject;
import com.replaymod.render.blend.mixin.ContainerLocalRenderInformationAccessor; import com.replaymod.render.blend.mixin.ContainerLocalRenderInformationAccessor;
import com.replaymod.render.blend.mixin.WorldRendererAccessor; import com.replaymod.render.blend.mixin.WorldRendererAccessor;
import de.johni0702.minecraft.gui.utils.lwjgl.vector.Vector3f; import de.johni0702.minecraft.gui.utils.lwjgl.vector.Vector3f;
import net.minecraft.client.Minecraft; import net.minecraft.client.MinecraftClient;
import net.minecraft.client.renderer.GLAllocation; import net.minecraft.client.util.GlAllocationUtils;
import net.minecraft.client.renderer.OpenGlHelper; import com.mojang.blaze3d.platform.GLX;
import net.minecraft.client.renderer.chunk.CompiledChunk; import net.minecraft.client.render.chunk.ChunkRenderData;
import net.minecraft.client.renderer.chunk.RenderChunk; import net.minecraft.client.render.chunk.ChunkRenderer;
import net.minecraft.client.renderer.vertex.DefaultVertexFormats; import net.minecraft.client.render.VertexFormats;
import net.minecraft.client.renderer.vertex.VertexBuffer; import net.minecraft.client.gl.GlBuffer;
import org.apache.commons.lang3.tuple.Pair; import org.apache.commons.lang3.tuple.Pair;
import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL11;
import org.lwjgl.opengl.GL15; import org.lwjgl.opengl.GL15;
//#if MC>=10904 //#if MC>=10904
import net.minecraft.util.BlockRenderLayer; import net.minecraft.block.BlockRenderLayer;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
//#else //#else
//$$ import net.minecraft.util.BlockPos; //$$ import net.minecraft.util.BlockPos;
@@ -43,7 +43,7 @@ public class ChunkExporter implements Exporter {
private final Map<BlockPos, DObject> chunkObjects = new HashMap<>(); private final Map<BlockPos, DObject> chunkObjects = new HashMap<>();
//#if MC>=10904 //#if MC>=10904
private final Map<BlockPos, Map<BlockRenderLayer, DObject>> chunkLayerObjects = new HashMap<>(); private final Map<BlockPos, Map<BlockRenderLayer, DObject>> chunkLayerObjects = new HashMap<>();
private final List<Pair<RenderChunk, BlockRenderLayer>> chunks = new ArrayList<>(); private final List<Pair<ChunkRenderer, BlockRenderLayer>> chunks = new ArrayList<>();
//#else //#else
//$$ private final Map<BlockPos, Map<EnumWorldBlockLayer, DObject>> chunkLayerObjects = new HashMap<>(); //$$ private final Map<BlockPos, Map<EnumWorldBlockLayer, DObject>> chunkLayerObjects = new HashMap<>();
//$$ private final List<Pair<RenderChunk, EnumWorldBlockLayer>> chunks = new ArrayList<>(); //$$ private final List<Pair<RenderChunk, EnumWorldBlockLayer>> chunks = new ArrayList<>();
@@ -51,13 +51,13 @@ public class ChunkExporter implements Exporter {
private DObject chunksObject; private DObject chunksObject;
private int frame; private int frame;
public void addChunkUpdate(RenderChunk chunk, CompiledChunk compiledChunk) { public void addChunkUpdate(ChunkRenderer chunk, ChunkRenderData compiledChunk) {
//#if MC>=10904 //#if MC>=10904
for (BlockRenderLayer layer : BlockRenderLayer.values()) { for (BlockRenderLayer layer : BlockRenderLayer.values()) {
//#else //#else
//$$ for (EnumWorldBlockLayer layer : EnumWorldBlockLayer.values()) { //$$ for (EnumWorldBlockLayer layer : EnumWorldBlockLayer.values()) {
//#endif //#endif
if (compiledChunk == null || compiledChunk.isLayerStarted(layer)) { if (compiledChunk == null || compiledChunk.isBufferInitialized(layer)) {
chunks.add(Pair.of(chunk, layer)); chunks.add(Pair.of(chunk, layer));
} }
} }
@@ -66,12 +66,12 @@ public class ChunkExporter implements Exporter {
@Override @Override
public void setup() throws IOException { public void setup() throws IOException {
Minecraft mc = MCVer.getMinecraft(); MinecraftClient mc = MCVer.getMinecraft();
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
List<ContainerLocalRenderInformationAccessor> renderInfos = ((WorldRendererAccessor) mc.renderGlobal).getRenderInfos(); List<ContainerLocalRenderInformationAccessor> renderInfos = ((WorldRendererAccessor) mc.worldRenderer).getRenderInfos();
for (ContainerLocalRenderInformationAccessor renderInfo : renderInfos) { for (ContainerLocalRenderInformationAccessor renderInfo : renderInfos) {
RenderChunk renderChunk = renderInfo.getRenderChunk(); ChunkRenderer renderChunk = renderInfo.getRenderChunk();
CompiledChunk compiledChunk = renderChunk.getCompiledChunk(); ChunkRenderData compiledChunk = renderChunk.getChunkRenderData();
if (!compiledChunk.isEmpty()) { if (!compiledChunk.isEmpty()) {
addChunkUpdate(renderChunk, null); addChunkUpdate(renderChunk, null);
} }
@@ -98,18 +98,18 @@ public class ChunkExporter implements Exporter {
@Override @Override
public void postFrame(int frame) throws IOException { public void postFrame(int frame) throws IOException {
//#if MC>=10904 //#if MC>=10904
for (Pair<RenderChunk, BlockRenderLayer> pair : chunks) { for (Pair<ChunkRenderer, BlockRenderLayer> pair : chunks) {
BlockRenderLayer layer = pair.getRight(); BlockRenderLayer layer = pair.getRight();
//#else //#else
//$$ for (Pair<RenderChunk, EnumWorldBlockLayer> pair : chunks) { //$$ for (Pair<RenderChunk, EnumWorldBlockLayer> pair : chunks) {
//$$ EnumWorldBlockLayer layer = pair.getRight(); //$$ EnumWorldBlockLayer layer = pair.getRight();
//#endif //#endif
RenderChunk chunk = pair.getLeft(); ChunkRenderer chunk = pair.getLeft();
DObject chunkObject = chunkObjects.get(chunk.getPosition()); DObject chunkObject = chunkObjects.get(chunk.getOrigin());
if (chunkObject == null) { if (chunkObject == null) {
chunkObject = buildChunkObject(chunk); chunkObject = buildChunkObject(chunk);
chunkObjects.put(chunk.getPosition(), chunkObject); chunkObjects.put(chunk.getOrigin(), chunkObject);
chunkLayerObjects.put(chunk.getPosition(), new EnumMap<>(layer.getDeclaringClass())); chunkLayerObjects.put(chunk.getOrigin(), new EnumMap<>(layer.getDeclaringClass()));
} }
DObject layerObject = buildChunkLayerObject(chunkObject, chunk, layer); DObject layerObject = buildChunkLayerObject(chunkObject, chunk, layer);
if (layerObject == null) continue; if (layerObject == null) continue;
@@ -118,7 +118,7 @@ public class ChunkExporter implements Exporter {
//#else //#else
//$$ Map<EnumWorldBlockLayer, DObject> layerObjects //$$ Map<EnumWorldBlockLayer, DObject> layerObjects
//#endif //#endif
= chunkLayerObjects.get(chunk.getPosition()); = chunkLayerObjects.get(chunk.getOrigin());
DObject oldLayerObject = layerObjects.get(layer); DObject oldLayerObject = layerObjects.get(layer);
if (oldLayerObject != null) { if (oldLayerObject != null) {
oldLayerObject.keyframe("hide", 0, frame, 1f); oldLayerObject.keyframe("hide", 0, frame, 1f);
@@ -134,8 +134,8 @@ public class ChunkExporter implements Exporter {
chunks.clear(); chunks.clear();
} }
private DObject buildChunkObject(RenderChunk renderChunk) { private DObject buildChunkObject(ChunkRenderer renderChunk) {
BlockPos pos = renderChunk.getPosition(); BlockPos pos = renderChunk.getOrigin();
DObject chunkObject = new DObject(DObject.Type.OB_EMPTY); DObject chunkObject = new DObject(DObject.Type.OB_EMPTY);
chunkObject.setParent(chunksObject); chunkObject.setParent(chunksObject);
chunkObject.id.name = "Chunk[" + pos.getX()/16 + "/" + pos.getY()/16 + "/" + pos.getZ()/16 + "]"; chunkObject.id.name = "Chunk[" + pos.getX()/16 + "/" + pos.getY()/16 + "/" + pos.getZ()/16 + "]";
@@ -143,13 +143,13 @@ public class ChunkExporter implements Exporter {
return chunkObject; return chunkObject;
} }
private DObject buildChunkLayerObject(DObject chunkObject, RenderChunk renderChunk, private DObject buildChunkLayerObject(DObject chunkObject, ChunkRenderer renderChunk,
//#if MC>=10904 //#if MC>=10904
BlockRenderLayer layer) { BlockRenderLayer layer) {
//#else //#else
//$$ EnumWorldBlockLayer layer) { //$$ EnumWorldBlockLayer layer) {
//#endif //#endif
VertexBuffer vertexBuffer = renderChunk.getVertexBufferByLayer(layer.ordinal()); GlBuffer vertexBuffer = renderChunk.getGlBuffer(layer.ordinal());
if (vertexBuffer == null) return null; if (vertexBuffer == null) return null;
DObject layerObject = new DObject(buildChunkLayerMesh(vertexBuffer)); DObject layerObject = new DObject(buildChunkLayerMesh(vertexBuffer));
@@ -158,16 +158,16 @@ public class ChunkExporter implements Exporter {
return layerObject; return layerObject;
} }
private DMesh buildChunkLayerMesh(VertexBuffer vertexBuffer) { private DMesh buildChunkLayerMesh(GlBuffer vertexBuffer) {
vertexBuffer.bindBuffer(); vertexBuffer.bind();
int size = GL15.glGetBufferParameteri(OpenGlHelper.GL_ARRAY_BUFFER, GL15.GL_BUFFER_SIZE); int size = GL15.glGetBufferParameteri(GLX.GL_ARRAY_BUFFER, GL15.GL_BUFFER_SIZE);
ByteBuffer byteBuffer = GLAllocation.createDirectByteBuffer(size); ByteBuffer byteBuffer = GlAllocationUtils.allocateByteBuffer(size);
GL15.glGetBufferSubData(OpenGlHelper.GL_ARRAY_BUFFER, 0, byteBuffer); GL15.glGetBufferSubData(GLX.GL_ARRAY_BUFFER, 0, byteBuffer);
vertexBuffer.unbindBuffer(); vertexBuffer.unbind();
MCVer.getMinecraft().getTextureManager().bindTexture(LOCATION_BLOCKS_TEXTURE); 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; private static final int STRIDE = 28;

View File

@@ -7,9 +7,9 @@ import com.replaymod.render.blend.Exporter;
import com.replaymod.render.blend.data.DObject; import com.replaymod.render.blend.data.DObject;
import de.johni0702.minecraft.gui.utils.lwjgl.vector.Matrix4f; import de.johni0702.minecraft.gui.utils.lwjgl.vector.Matrix4f;
import de.johni0702.minecraft.gui.utils.lwjgl.vector.Vector3f; 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.Entity;
import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.LivingEntity;
import java.util.IdentityHashMap; import java.util.IdentityHashMap;
import java.util.Map; import java.util.Map;
@@ -18,7 +18,7 @@ import static com.replaymod.render.blend.Util.getCameraPos;
import static com.replaymod.render.blend.Util.getGlModelViewMatrix; import static com.replaymod.render.blend.Util.getGlModelViewMatrix;
public class EntityExporter implements Exporter { public class EntityExporter implements Exporter {
private final Minecraft mc = MCVer.getMinecraft(); private final MinecraftClient mc = MCVer.getMinecraft();
private final RenderState renderState; private final RenderState renderState;
private DObject entitiesObject; private DObject entitiesObject;
private Map<Entity, DObject> entityObjects; private Map<Entity, DObject> 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 // So, we translate there, then store the model-view-matrix and then translate back to let the
// renderer translate there again. // renderer translate there again.
// Instead of actually translating, we just add the translation on the current model-view-matrix. // 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 modelView = getGlModelViewMatrix();
Matrix4f.translate(new Vector3f((float) dx, (float) dy, (float) dz), modelView, modelView); Matrix4f.translate(new Vector3f((float) dx, (float) dy, (float) dz), modelView, modelView);
renderState.pushModelView(modelView); renderState.pushModelView(modelView);

View File

@@ -5,20 +5,20 @@ import com.replaymod.render.blend.BlendMeshBuilder;
import com.replaymod.render.blend.Exporter; import com.replaymod.render.blend.Exporter;
import com.replaymod.render.blend.data.DMesh; import com.replaymod.render.blend.data.DMesh;
import com.replaymod.render.blend.data.DObject; 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.item.ItemStack;
import net.minecraft.util.EnumFacing; import net.minecraft.util.math.Direction;
import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL11;
//#if MC>=11400 //#if MC>=11400
//$$ import net.minecraft.util.math.Vec3i; import net.minecraft.util.math.Vec3i;
//#else //#else
import net.minecraftforge.client.model.pipeline.LightUtil; //$$ import net.minecraftforge.client.model.pipeline.LightUtil;
//#endif //#endif
//#if MC>=11300 //#if MC>=11300
import net.minecraft.client.renderer.model.BakedQuad; import net.minecraft.client.render.model.BakedQuad;
import net.minecraft.client.renderer.model.IBakedModel; import net.minecraft.client.render.model.BakedModel;
//#else //#else
//$$ import net.minecraft.client.renderer.block.model.BakedQuad; //$$ import net.minecraft.client.renderer.block.model.BakedQuad;
//#if MC>=10904 //#if MC>=10904
@@ -42,7 +42,7 @@ public class ItemExporter implements Exporter {
this.renderState = renderState; 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); DObject object = getObjectForItemStack(renderItem, model, stack);
renderState.pushObject(object); renderState.pushObject(object);
@@ -55,7 +55,7 @@ public class ItemExporter implements Exporter {
renderState.pop(); renderState.pop();
} }
private DObject getObjectForItemStack(Object renderItem, IBakedModel model, ItemStack stack) { private DObject getObjectForItemStack(Object renderItem, BakedModel model, ItemStack stack) {
int frame = renderState.getFrame(); int frame = renderState.getFrame();
DObject parent = renderState.peekObject(); DObject parent = renderState.peekObject();
DObject object = null; DObject object = null;
@@ -81,19 +81,19 @@ public class ItemExporter implements Exporter {
} }
@SuppressWarnings("unchecked") @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(); DMesh mesh = new DMesh();
BlendMeshBuilder builder = new BlendMeshBuilder(mesh); BlendMeshBuilder builder = new BlendMeshBuilder(mesh);
builder.setWellBehaved(true); builder.setWellBehaved(true);
//#if MC>=10809 //#if MC>=10809
builder.begin(GL11.GL_QUADS, DefaultVertexFormats.ITEM); builder.begin(GL11.GL_QUADS, VertexFormats.POSITION_COLOR_UV_NORMAL);
//#else //#else
//$$ builder.startDrawingQuads(); //$$ builder.startDrawingQuads();
//$$ builder.setVertexFormat(DefaultVertexFormats.ITEM); //$$ builder.setVertexFormat(DefaultVertexFormats.ITEM);
//#endif //#endif
//#if MC>=11300 //#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, face, new Random()), stack);
} }
renderQuads(renderItem, builder, model.getQuads(null, null, new Random()), stack); renderQuads(renderItem, builder, model.getQuads(null, null, new Random()), stack);
@@ -111,26 +111,26 @@ public class ItemExporter implements Exporter {
//#endif //#endif
//#endif //#endif
builder.finishDrawing(); builder.end();
return mesh; return mesh;
} }
private static void renderQuads(Object renderItem, BlendMeshBuilder buffer, List<BakedQuad> quads, ItemStack stack) { private static void renderQuads(Object renderItem, BlendMeshBuilder buffer, List<BakedQuad> quads, ItemStack stack) {
for (BakedQuad quad : quads) { for (BakedQuad quad : quads) {
int color = stack != null && quad.hasTintIndex() int color = stack != null && quad.hasColor()
//#if MC>=10904 //#if MC>=10904
? ((ItemRendererAccessor) renderItem).getItemColors().getColor(stack, quad.getTintIndex()) | 0xff000000 ? ((ItemRendererAccessor) renderItem).getItemColors().getRenderColor(stack, quad.getColorIndex()) | 0xff000000
//#else //#else
//$$ ? stack.getItem().getColorFromItemStack(stack, quad.getTintIndex()) | 0xff000000 //$$ ? stack.getItem().getColorFromItemStack(stack, quad.getTintIndex()) | 0xff000000
//#endif //#endif
: 0xffffffff; : 0xffffffff;
//#if MC>=11400 //#if MC>=11400
//$$ buffer.putVertexData(quad.getVertexData()); buffer.putVertexData(quad.getVertexData());
//$$ buffer.setQuadColor(color); buffer.setQuadColor(color);
//$$ Vec3i vec3i_1 = quad.getFace().getVector(); Vec3i vec3i_1 = quad.getFace().getVector();
//$$ buffer.postNormal(vec3i_1.getX(), vec3i_1.getY(), vec3i_1.getZ()); buffer.postNormal(vec3i_1.getX(), vec3i_1.getY(), vec3i_1.getZ());
//#else //#else
LightUtil.renderQuadColor(buffer, quad, color); //$$ LightUtil.renderQuadColor(buffer, quad, color);
//#endif //#endif
} }
@@ -138,18 +138,18 @@ public class ItemExporter implements Exporter {
private static class ItemBasedDObject extends DObject { private static class ItemBasedDObject extends DObject {
private final Object renderItem; private final Object renderItem;
private final IBakedModel model; private final BakedModel model;
private final ItemStack stack; private final ItemStack stack;
private boolean valid; private boolean valid;
public ItemBasedDObject(Object renderItem, IBakedModel model, ItemStack stack) { public ItemBasedDObject(Object renderItem, BakedModel model, ItemStack stack) {
super(generateMeshForItemStack(renderItem, model, stack)); super(generateMeshForItemStack(renderItem, model, stack));
this.renderItem = renderItem; this.renderItem = renderItem;
this.model = model; this.model = model;
this.stack = stack; 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; return this.renderItem == renderItem && this.model == model && this.stack == stack;
} }

View File

@@ -8,8 +8,8 @@ import com.replaymod.render.blend.data.DObject;
import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL11;
//#if MC>=11300 //#if MC>=11300
import net.minecraft.client.renderer.entity.model.ModelBox; import net.minecraft.client.model.Box;
import net.minecraft.client.renderer.entity.model.ModelRenderer; import net.minecraft.client.model.Cuboid;
//#else //#else
//$$ import net.minecraft.client.model.ModelBox; //$$ import net.minecraft.client.model.ModelBox;
//$$ import net.minecraft.client.model.ModelRenderer; //$$ import net.minecraft.client.model.ModelRenderer;
@@ -31,7 +31,7 @@ public class ModelRendererExporter implements Exporter {
public void setup() throws IOException { public void setup() throws IOException {
} }
public void preRenderModel(ModelRenderer model, float scale) { public void preRenderModel(Cuboid model, float scale) {
DObject object = getObjectForModel(model, scale); DObject object = getObjectForModel(model, scale);
renderState.pushObject(object); renderState.pushObject(object);
renderState.pushModelView(); renderState.pushModelView();
@@ -53,7 +53,7 @@ public class ModelRendererExporter implements Exporter {
renderState.pop(); renderState.pop();
} }
private DObject getObjectForModel(ModelRenderer model, float scale) { private DObject getObjectForModel(Cuboid model, float scale) {
int frame = renderState.getFrame(); int frame = renderState.getFrame();
DObject parent = renderState.peekObject(); DObject parent = renderState.peekObject();
DObject object = null; DObject object = null;
@@ -67,17 +67,17 @@ public class ModelRendererExporter implements Exporter {
} }
if (object == null) { if (object == null) {
object = new ModelBasedDObject(model, scale); object = new ModelBasedDObject(model, scale);
object.id.name = model.boxName; object.id.name = model.name;
object.setParent(parent); object.setParent(parent);
} }
object.lastFrame = frame; object.lastFrame = frame;
return object; return object;
} }
private static DMesh generateMesh(ModelRenderer model, float scale) { private static DMesh generateMesh(Cuboid model, float scale) {
DMesh mesh = new DMesh(); DMesh mesh = new DMesh();
BlendMeshBuilder builder = new BlendMeshBuilder(mesh); BlendMeshBuilder builder = new BlendMeshBuilder(mesh);
for (ModelBox box : cubeList(model)) { for (Box box : cubeList(model)) {
box.render(builder, scale); box.render(builder, scale);
} }
builder.maybeFinishDrawing(); builder.maybeFinishDrawing();
@@ -85,17 +85,17 @@ public class ModelRendererExporter implements Exporter {
} }
private static class ModelBasedDObject extends DObject { private static class ModelBasedDObject extends DObject {
private final ModelRenderer model; private final Cuboid model;
private final float scale; private final float scale;
private boolean valid; private boolean valid;
public ModelBasedDObject(ModelRenderer model, float scale) { public ModelBasedDObject(Cuboid model, float scale) {
super(generateMesh(model, scale)); super(generateMesh(model, scale));
this.model = model; this.model = model;
this.scale = scale; 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; return this.model == model && Math.abs(this.scale - scale) < 1e-4;
} }

Some files were not shown because too many files have changed in this diff Show More