Added Keybindings for custom actions (Thumbnail and Lighting)
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
package eu.crushedpixel.replaymod;
|
package eu.crushedpixel.replaymod;
|
||||||
|
|
||||||
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraftforge.common.MinecraftForge;
|
import net.minecraftforge.common.MinecraftForge;
|
||||||
import net.minecraftforge.common.config.Configuration;
|
import net.minecraftforge.common.config.Configuration;
|
||||||
import net.minecraftforge.common.config.Property;
|
import net.minecraftforge.common.config.Property;
|
||||||
@@ -15,6 +16,8 @@ import eu.crushedpixel.replaymod.events.GuiEventHandler;
|
|||||||
import eu.crushedpixel.replaymod.events.GuiReplayOverlay;
|
import eu.crushedpixel.replaymod.events.GuiReplayOverlay;
|
||||||
import eu.crushedpixel.replaymod.events.RecordingHandler;
|
import eu.crushedpixel.replaymod.events.RecordingHandler;
|
||||||
import eu.crushedpixel.replaymod.recording.ConnectionEventHandler;
|
import eu.crushedpixel.replaymod.recording.ConnectionEventHandler;
|
||||||
|
import eu.crushedpixel.replaymod.registry.KeybindRegistry;
|
||||||
|
import eu.crushedpixel.replaymod.renderer.SafeEntityRenderer;
|
||||||
import eu.crushedpixel.replaymod.settings.ReplaySettings;
|
import eu.crushedpixel.replaymod.settings.ReplaySettings;
|
||||||
|
|
||||||
@Mod(modid = ReplayMod.MODID, version = ReplayMod.VERSION)
|
@Mod(modid = ReplayMod.MODID, version = ReplayMod.VERSION)
|
||||||
@@ -35,6 +38,8 @@ public class ReplayMod
|
|||||||
public static final String MODID = "replaymod";
|
public static final String MODID = "replaymod";
|
||||||
public static final String VERSION = "0.0.1";
|
public static final String VERSION = "0.0.1";
|
||||||
|
|
||||||
|
private static final Minecraft mc = Minecraft.getMinecraft();
|
||||||
|
|
||||||
public static GuiReplayOverlay overlay = new GuiReplayOverlay();
|
public static GuiReplayOverlay overlay = new GuiReplayOverlay();
|
||||||
|
|
||||||
public static ReplaySettings replaySettings = new ReplaySettings(0, true, true, true, false, false);
|
public static ReplaySettings replaySettings = new ReplaySettings(0, true, true, true, false, false);
|
||||||
@@ -83,5 +88,13 @@ public class ReplayMod
|
|||||||
MinecraftForge.EVENT_BUS.register(overlay);
|
MinecraftForge.EVENT_BUS.register(overlay);
|
||||||
|
|
||||||
AuthenticationHandler.authenticate();
|
AuthenticationHandler.authenticate();
|
||||||
|
|
||||||
|
KeybindRegistry.initialize();
|
||||||
|
|
||||||
|
try {
|
||||||
|
mc.entityRenderer = new SafeEntityRenderer(mc, mc.entityRenderer);
|
||||||
|
} catch(Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import java.util.ArrayList;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
|
import net.minecraft.client.entity.EntityPlayerSP;
|
||||||
import net.minecraft.client.gui.GuiButton;
|
import net.minecraft.client.gui.GuiButton;
|
||||||
import net.minecraft.client.gui.GuiChat;
|
import net.minecraft.client.gui.GuiChat;
|
||||||
import net.minecraft.client.gui.GuiDisconnected;
|
import net.minecraft.client.gui.GuiDisconnected;
|
||||||
@@ -14,6 +15,7 @@ import net.minecraft.client.gui.GuiVideoSettings;
|
|||||||
import net.minecraft.client.gui.inventory.GuiInventory;
|
import net.minecraft.client.gui.inventory.GuiInventory;
|
||||||
import net.minecraft.client.resources.I18n;
|
import net.minecraft.client.resources.I18n;
|
||||||
import net.minecraft.client.settings.GameSettings.Options;
|
import net.minecraft.client.settings.GameSettings.Options;
|
||||||
|
import net.minecraftforge.client.GuiIngameForge;
|
||||||
import net.minecraftforge.client.event.GuiOpenEvent;
|
import net.minecraftforge.client.event.GuiOpenEvent;
|
||||||
import net.minecraftforge.client.event.GuiScreenEvent.ActionPerformedEvent;
|
import net.minecraftforge.client.event.GuiScreenEvent.ActionPerformedEvent;
|
||||||
import net.minecraftforge.client.event.GuiScreenEvent.InitGuiEvent;
|
import net.minecraftforge.client.event.GuiScreenEvent.InitGuiEvent;
|
||||||
@@ -23,6 +25,8 @@ import eu.crushedpixel.replaymod.gui.GuiReplaySaving;
|
|||||||
import eu.crushedpixel.replaymod.gui.GuiReplaySettings;
|
import eu.crushedpixel.replaymod.gui.GuiReplaySettings;
|
||||||
import eu.crushedpixel.replaymod.gui.replaymanager.GuiReplayManager;
|
import eu.crushedpixel.replaymod.gui.replaymanager.GuiReplayManager;
|
||||||
import eu.crushedpixel.replaymod.gui.replaymanager.ResourceHelper;
|
import eu.crushedpixel.replaymod.gui.replaymanager.ResourceHelper;
|
||||||
|
import eu.crushedpixel.replaymod.registry.ReplayGuiRegistry;
|
||||||
|
import eu.crushedpixel.replaymod.renderer.SafeEntityRenderer;
|
||||||
import eu.crushedpixel.replaymod.replay.ReplayHandler;
|
import eu.crushedpixel.replaymod.replay.ReplayHandler;
|
||||||
|
|
||||||
public class GuiEventHandler {
|
public class GuiEventHandler {
|
||||||
@@ -102,12 +106,13 @@ public class GuiEventHandler {
|
|||||||
mc.displayGuiScreen(new GuiReplaySettings(event.gui));
|
mc.displayGuiScreen(new GuiReplaySettings(event.gui));
|
||||||
}
|
}
|
||||||
|
|
||||||
if(ReplayHandler.isReplaying() && event.gui instanceof GuiIngameMenu && event.button.id == 1) {
|
if(ReplayHandler.replayActive() && event.gui instanceof GuiIngameMenu && event.button.id == 1) {
|
||||||
event.button.enabled = false;
|
event.button.enabled = false;
|
||||||
Thread t = new Thread(new Runnable() {
|
Thread t = new Thread(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
mc.displayGuiScreen(new GuiReplaySaving(new GuiMainMenu()));
|
//mc.displayGuiScreen(new GuiReplaySaving(new GuiMainMenu()));
|
||||||
|
|
||||||
ReplayHandler.setSpeed(1f);
|
ReplayHandler.setSpeed(1f);
|
||||||
ReplayHandler.endReplay();
|
ReplayHandler.endReplay();
|
||||||
|
|
||||||
@@ -115,6 +120,8 @@ public class GuiEventHandler {
|
|||||||
|
|
||||||
ReplayHandler.lastExit = System.currentTimeMillis();
|
ReplayHandler.lastExit = System.currentTimeMillis();
|
||||||
mc.theWorld.sendQuittingDisconnectingPacket();
|
mc.theWorld.sendQuittingDisconnectingPacket();
|
||||||
|
|
||||||
|
ReplayGuiRegistry.show();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
t.run();
|
t.run();
|
||||||
|
|||||||
@@ -42,6 +42,7 @@ import eu.crushedpixel.replaymod.holders.Position;
|
|||||||
import eu.crushedpixel.replaymod.holders.PositionKeyframe;
|
import eu.crushedpixel.replaymod.holders.PositionKeyframe;
|
||||||
import eu.crushedpixel.replaymod.holders.TimeKeyframe;
|
import eu.crushedpixel.replaymod.holders.TimeKeyframe;
|
||||||
import eu.crushedpixel.replaymod.reflection.MCPNames;
|
import eu.crushedpixel.replaymod.reflection.MCPNames;
|
||||||
|
import eu.crushedpixel.replaymod.registry.ReplayGuiRegistry;
|
||||||
import eu.crushedpixel.replaymod.replay.ReplayHandler;
|
import eu.crushedpixel.replaymod.replay.ReplayHandler;
|
||||||
import eu.crushedpixel.replaymod.replay.ReplayProcess;
|
import eu.crushedpixel.replaymod.replay.ReplayProcess;
|
||||||
import eu.crushedpixel.replaymod.screenshot.ReplayScreenshot;
|
import eu.crushedpixel.replaymod.screenshot.ReplayScreenshot;
|
||||||
@@ -135,22 +136,11 @@ public class GuiReplayOverlay extends Gui {
|
|||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public void onRenderGui(RenderGameOverlayEvent.Post event) throws IllegalArgumentException, IllegalAccessException {
|
public void onRenderGui(RenderGameOverlayEvent.Post event) throws IllegalArgumentException, IllegalAccessException {
|
||||||
if(!ReplayHandler.replayActive()) {
|
if(!ReplayHandler.replayActive()) {
|
||||||
GuiIngameForge.renderExperiance = true;
|
|
||||||
GuiIngameForge.renderArmor = true;
|
|
||||||
GuiIngameForge.renderAir = true;
|
|
||||||
GuiIngameForge.renderHealth = true;
|
|
||||||
GuiIngameForge.renderHotbar = true;
|
|
||||||
GuiIngameForge.renderFood = true;
|
|
||||||
GuiIngameForge.renderBossHealth = true;
|
|
||||||
GuiIngameForge.renderCrosshairs = true;
|
|
||||||
GuiIngameForge.renderHelmet = true;
|
|
||||||
GuiIngameForge.renderPortal = true;
|
|
||||||
GuiIngameForge.renderHealthMount = true;
|
|
||||||
GuiIngameForge.renderJumpBar = true;
|
|
||||||
GuiIngameForge.renderObjective = true;
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ReplayGuiRegistry.hide();
|
||||||
|
|
||||||
if(event.type == ElementType.PLAYER_LIST) {
|
if(event.type == ElementType.PLAYER_LIST) {
|
||||||
if(event.isCancelable()) {
|
if(event.isCancelable()) {
|
||||||
event.setCanceled(true);
|
event.setCanceled(true);
|
||||||
@@ -158,20 +148,6 @@ public class GuiReplayOverlay extends Gui {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
GuiIngameForge.renderExperiance = false;
|
|
||||||
GuiIngameForge.renderArmor = false;
|
|
||||||
GuiIngameForge.renderAir = false;
|
|
||||||
GuiIngameForge.renderHealth = false;
|
|
||||||
GuiIngameForge.renderHotbar = false;
|
|
||||||
GuiIngameForge.renderFood = false;
|
|
||||||
GuiIngameForge.renderBossHealth = false;
|
|
||||||
GuiIngameForge.renderCrosshairs = false;
|
|
||||||
GuiIngameForge.renderHelmet = false;
|
|
||||||
GuiIngameForge.renderPortal = false;
|
|
||||||
GuiIngameForge.renderHealthMount = false;
|
|
||||||
GuiIngameForge.renderJumpBar = false;
|
|
||||||
GuiIngameForge.renderObjective = false;
|
|
||||||
|
|
||||||
GL11.glEnable(GL11.GL_BLEND);
|
GL11.glEnable(GL11.GL_BLEND);
|
||||||
drawBlockOutline.set(Minecraft.getMinecraft().entityRenderer, false);
|
drawBlockOutline.set(Minecraft.getMinecraft().entityRenderer, false);
|
||||||
|
|
||||||
@@ -829,10 +805,6 @@ public class GuiReplayOverlay extends Gui {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(Keyboard.isKeyDown(Keyboard.KEY_V) && !Keyboard.isRepeatEvent()) {
|
|
||||||
ReplayMod.replaySettings.setLightingEnabled(!ReplayMod.replaySettings.isLightingEnabled());
|
|
||||||
}
|
|
||||||
|
|
||||||
KeyBinding[] keyBindings = Minecraft.getMinecraft().gameSettings.keyBindings;
|
KeyBinding[] keyBindings = Minecraft.getMinecraft().gameSettings.keyBindings;
|
||||||
for(KeyBinding kb : keyBindings) {
|
for(KeyBinding kb : keyBindings) {
|
||||||
if(!kb.isKeyDown()) {
|
if(!kb.isKeyDown()) {
|
||||||
@@ -875,11 +847,18 @@ public class GuiReplayOverlay extends Gui {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO: Register key handlers
|
//Custom registered handlers
|
||||||
if(kb.getKeyDescription().equals("key.screenshot") && kb.isPressed()) {
|
if(kb.getKeyDescription().equals("key.thumbnail") && kb.isPressed()) {
|
||||||
ReplayScreenshot.prepareScreenshot();
|
ReplayScreenshot.prepareScreenshot();
|
||||||
requestScreenshot = true;
|
requestScreenshot = true;
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(kb.getKeyDescription().equals("key.lighting") && kb.isPressed()) {
|
||||||
|
ReplayMod.replaySettings.setLightingEnabled(!ReplayMod.replaySettings.isLightingEnabled());
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
} catch(Exception e) {
|
} catch(Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,24 @@
|
|||||||
|
package eu.crushedpixel.replaymod.registry;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import net.minecraft.client.Minecraft;
|
||||||
|
import net.minecraft.client.settings.KeyBinding;
|
||||||
|
|
||||||
|
import org.lwjgl.input.Keyboard;
|
||||||
|
|
||||||
|
public class KeybindRegistry {
|
||||||
|
|
||||||
|
private static Minecraft mc = Minecraft.getMinecraft();
|
||||||
|
|
||||||
|
public static void initialize() {
|
||||||
|
List<KeyBinding> bindings = new ArrayList<KeyBinding>(Arrays.asList(mc.gameSettings.keyBindings));
|
||||||
|
|
||||||
|
bindings.add(new KeyBinding("key.lighting", Keyboard.KEY_V, "category.replaymod"));
|
||||||
|
bindings.add(new KeyBinding("key.thumbnail", Keyboard.KEY_B, "category.replaymod"));
|
||||||
|
|
||||||
|
mc.gameSettings.keyBindings = bindings.toArray(new KeyBinding[bindings.size()]);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,75 @@
|
|||||||
|
package eu.crushedpixel.replaymod.registry;
|
||||||
|
|
||||||
|
import java.lang.reflect.Field;
|
||||||
|
|
||||||
|
import net.minecraft.client.Minecraft;
|
||||||
|
import net.minecraft.client.renderer.EntityRenderer;
|
||||||
|
import net.minecraftforge.client.GuiIngameForge;
|
||||||
|
|
||||||
|
public class ReplayGuiRegistry {
|
||||||
|
|
||||||
|
private static Field renderHand;
|
||||||
|
private static Minecraft mc = Minecraft.getMinecraft();
|
||||||
|
|
||||||
|
public static boolean hidden = false;
|
||||||
|
|
||||||
|
static {
|
||||||
|
try {
|
||||||
|
renderHand = EntityRenderer.class.getDeclaredField("renderHand"); //TODO: MCPNames
|
||||||
|
renderHand.setAccessible(true);
|
||||||
|
} catch(Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void hide() {
|
||||||
|
if(hidden) return;
|
||||||
|
GuiIngameForge.renderExperiance = false;
|
||||||
|
GuiIngameForge.renderArmor = false;
|
||||||
|
GuiIngameForge.renderAir = false;
|
||||||
|
GuiIngameForge.renderHealth = false;
|
||||||
|
GuiIngameForge.renderHotbar = false;
|
||||||
|
GuiIngameForge.renderFood = false;
|
||||||
|
GuiIngameForge.renderBossHealth = false;
|
||||||
|
GuiIngameForge.renderCrosshairs = false;
|
||||||
|
GuiIngameForge.renderHelmet = false;
|
||||||
|
GuiIngameForge.renderPortal = false;
|
||||||
|
GuiIngameForge.renderHealthMount = false;
|
||||||
|
GuiIngameForge.renderJumpBar = false;
|
||||||
|
GuiIngameForge.renderObjective = false;
|
||||||
|
|
||||||
|
try {
|
||||||
|
renderHand.set(mc.entityRenderer, false);
|
||||||
|
} catch(Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
hidden = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void show() {
|
||||||
|
mc.gameSettings.hideGUI = false;
|
||||||
|
|
||||||
|
GuiIngameForge.renderExperiance = true;
|
||||||
|
GuiIngameForge.renderArmor = true;
|
||||||
|
GuiIngameForge.renderAir = true;
|
||||||
|
GuiIngameForge.renderHealth = true;
|
||||||
|
GuiIngameForge.renderHotbar = true;
|
||||||
|
GuiIngameForge.renderFood = true;
|
||||||
|
GuiIngameForge.renderBossHealth = true;
|
||||||
|
GuiIngameForge.renderCrosshairs = true;
|
||||||
|
GuiIngameForge.renderHelmet = true;
|
||||||
|
GuiIngameForge.renderPortal = true;
|
||||||
|
GuiIngameForge.renderHealthMount = true;
|
||||||
|
GuiIngameForge.renderJumpBar = true;
|
||||||
|
GuiIngameForge.renderObjective = true;
|
||||||
|
|
||||||
|
try {
|
||||||
|
renderHand.set(mc.entityRenderer, true);
|
||||||
|
} catch(Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
hidden = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
package eu.crushedpixel.replaymod.renderer;
|
||||||
|
|
||||||
|
import java.lang.reflect.Field;
|
||||||
|
|
||||||
|
import net.minecraft.client.Minecraft;
|
||||||
|
import net.minecraft.client.renderer.EntityRenderer;
|
||||||
|
import net.minecraft.client.resources.IResourceManager;
|
||||||
|
|
||||||
|
public class SafeEntityRenderer extends EntityRenderer {
|
||||||
|
|
||||||
|
private static Field resourceManager;
|
||||||
|
static {
|
||||||
|
try {
|
||||||
|
resourceManager = EntityRenderer.class.getDeclaredField("resourceManager"); //TODO: MCPNames
|
||||||
|
resourceManager.setAccessible(true);
|
||||||
|
} catch(Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public SafeEntityRenderer(Minecraft mcIn, EntityRenderer renderer) throws IllegalArgumentException, IllegalAccessException {
|
||||||
|
super(mcIn, (IResourceManager)resourceManager.get(renderer));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void updateCameraAndRender(float partialTicks) {
|
||||||
|
try {
|
||||||
|
super.updateCameraAndRender(partialTicks);
|
||||||
|
} catch(Exception e) {} //This is plain easier than doing proper error prevention.
|
||||||
|
//If Johni reads this, don't think I'm a bad programmer... Just a lazy one :P
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -35,6 +35,7 @@ import net.minecraft.network.play.server.S1DPacketEntityEffect;
|
|||||||
import net.minecraft.network.play.server.S1FPacketSetExperience;
|
import net.minecraft.network.play.server.S1FPacketSetExperience;
|
||||||
import net.minecraft.network.play.server.S28PacketEffect;
|
import net.minecraft.network.play.server.S28PacketEffect;
|
||||||
import net.minecraft.network.play.server.S29PacketSoundEffect;
|
import net.minecraft.network.play.server.S29PacketSoundEffect;
|
||||||
|
import net.minecraft.network.play.server.S2APacketParticles;
|
||||||
import net.minecraft.network.play.server.S2BPacketChangeGameState;
|
import net.minecraft.network.play.server.S2BPacketChangeGameState;
|
||||||
import net.minecraft.network.play.server.S2DPacketOpenWindow;
|
import net.minecraft.network.play.server.S2DPacketOpenWindow;
|
||||||
import net.minecraft.network.play.server.S2EPacketCloseWindow;
|
import net.minecraft.network.play.server.S2EPacketCloseWindow;
|
||||||
@@ -385,7 +386,8 @@ public class ReplaySender extends ChannelInboundHandlerAdapter {
|
|||||||
|
|
||||||
if(hurryToTimestamp) { //If hurrying, ignore some packets
|
if(hurryToTimestamp) { //If hurrying, ignore some packets
|
||||||
if(p instanceof S45PacketTitle ||
|
if(p instanceof S45PacketTitle ||
|
||||||
p instanceof S29PacketSoundEffect) return;
|
p instanceof S29PacketSoundEffect ||
|
||||||
|
p instanceof S2APacketParticles) return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(p instanceof S02PacketChat) {
|
if(p instanceof S02PacketChat) {
|
||||||
|
|||||||
@@ -50,8 +50,7 @@ public class ReplayScreenshot {
|
|||||||
beforeScreen = mc.currentScreen;
|
beforeScreen = mc.currentScreen;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void saveScreenshot(Framebuffer buffer)
|
public static void saveScreenshot(Framebuffer buffer) {
|
||||||
{
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
GuiReplaySaving.replaySaving = true;
|
GuiReplaySaving.replaySaving = true;
|
||||||
|
|||||||
Reference in New Issue
Block a user