Switch core to 1.14 (generated via ./gradlew :1.14:setCoreVersion)
This commit is contained in:
2
jGui
2
jGui
Submodule jGui updated: 717ac58178...e0af866315
@@ -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();
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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")
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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) {}
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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(() -> {
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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())
|
||||||
));
|
));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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(),
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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() {
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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");
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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()) {
|
||||||
|
|||||||
@@ -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()) {
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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));
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
@@ -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"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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() {
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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
Reference in New Issue
Block a user