Added Keybindings for custom actions (Thumbnail and Lighting)
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
package eu.crushedpixel.replaymod;
|
||||
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraftforge.common.MinecraftForge;
|
||||
import net.minecraftforge.common.config.Configuration;
|
||||
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.RecordingHandler;
|
||||
import eu.crushedpixel.replaymod.recording.ConnectionEventHandler;
|
||||
import eu.crushedpixel.replaymod.registry.KeybindRegistry;
|
||||
import eu.crushedpixel.replaymod.renderer.SafeEntityRenderer;
|
||||
import eu.crushedpixel.replaymod.settings.ReplaySettings;
|
||||
|
||||
@Mod(modid = ReplayMod.MODID, version = ReplayMod.VERSION)
|
||||
@@ -35,6 +38,8 @@ public class ReplayMod
|
||||
public static final String MODID = "replaymod";
|
||||
public static final String VERSION = "0.0.1";
|
||||
|
||||
private static final Minecraft mc = Minecraft.getMinecraft();
|
||||
|
||||
public static GuiReplayOverlay overlay = new GuiReplayOverlay();
|
||||
|
||||
public static ReplaySettings replaySettings = new ReplaySettings(0, true, true, true, false, false);
|
||||
@@ -83,5 +88,13 @@ public class ReplayMod
|
||||
MinecraftForge.EVENT_BUS.register(overlay);
|
||||
|
||||
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 net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.entity.EntityPlayerSP;
|
||||
import net.minecraft.client.gui.GuiButton;
|
||||
import net.minecraft.client.gui.GuiChat;
|
||||
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.resources.I18n;
|
||||
import net.minecraft.client.settings.GameSettings.Options;
|
||||
import net.minecraftforge.client.GuiIngameForge;
|
||||
import net.minecraftforge.client.event.GuiOpenEvent;
|
||||
import net.minecraftforge.client.event.GuiScreenEvent.ActionPerformedEvent;
|
||||
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.replaymanager.GuiReplayManager;
|
||||
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;
|
||||
|
||||
public class GuiEventHandler {
|
||||
@@ -102,12 +106,13 @@ public class GuiEventHandler {
|
||||
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;
|
||||
Thread t = new Thread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
mc.displayGuiScreen(new GuiReplaySaving(new GuiMainMenu()));
|
||||
public void run() {
|
||||
//mc.displayGuiScreen(new GuiReplaySaving(new GuiMainMenu()));
|
||||
|
||||
ReplayHandler.setSpeed(1f);
|
||||
ReplayHandler.endReplay();
|
||||
|
||||
@@ -115,6 +120,8 @@ public class GuiEventHandler {
|
||||
|
||||
ReplayHandler.lastExit = System.currentTimeMillis();
|
||||
mc.theWorld.sendQuittingDisconnectingPacket();
|
||||
|
||||
ReplayGuiRegistry.show();
|
||||
}
|
||||
});
|
||||
t.run();
|
||||
|
||||
@@ -42,6 +42,7 @@ import eu.crushedpixel.replaymod.holders.Position;
|
||||
import eu.crushedpixel.replaymod.holders.PositionKeyframe;
|
||||
import eu.crushedpixel.replaymod.holders.TimeKeyframe;
|
||||
import eu.crushedpixel.replaymod.reflection.MCPNames;
|
||||
import eu.crushedpixel.replaymod.registry.ReplayGuiRegistry;
|
||||
import eu.crushedpixel.replaymod.replay.ReplayHandler;
|
||||
import eu.crushedpixel.replaymod.replay.ReplayProcess;
|
||||
import eu.crushedpixel.replaymod.screenshot.ReplayScreenshot;
|
||||
@@ -135,21 +136,10 @@ public class GuiReplayOverlay extends Gui {
|
||||
@SubscribeEvent
|
||||
public void onRenderGui(RenderGameOverlayEvent.Post event) throws IllegalArgumentException, IllegalAccessException {
|
||||
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;
|
||||
}
|
||||
|
||||
ReplayGuiRegistry.hide();
|
||||
|
||||
if(event.type == ElementType.PLAYER_LIST) {
|
||||
if(event.isCancelable()) {
|
||||
@@ -157,20 +147,6 @@ public class GuiReplayOverlay extends Gui {
|
||||
}
|
||||
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);
|
||||
drawBlockOutline.set(Minecraft.getMinecraft().entityRenderer, false);
|
||||
@@ -829,10 +805,6 @@ public class GuiReplayOverlay extends Gui {
|
||||
return;
|
||||
}
|
||||
|
||||
if(Keyboard.isKeyDown(Keyboard.KEY_V) && !Keyboard.isRepeatEvent()) {
|
||||
ReplayMod.replaySettings.setLightingEnabled(!ReplayMod.replaySettings.isLightingEnabled());
|
||||
}
|
||||
|
||||
KeyBinding[] keyBindings = Minecraft.getMinecraft().gameSettings.keyBindings;
|
||||
for(KeyBinding kb : keyBindings) {
|
||||
if(!kb.isKeyDown()) {
|
||||
@@ -875,11 +847,18 @@ public class GuiReplayOverlay extends Gui {
|
||||
continue;
|
||||
}
|
||||
|
||||
//TODO: Register key handlers
|
||||
if(kb.getKeyDescription().equals("key.screenshot") && kb.isPressed()) {
|
||||
//Custom registered handlers
|
||||
if(kb.getKeyDescription().equals("key.thumbnail") && kb.isPressed()) {
|
||||
ReplayScreenshot.prepareScreenshot();
|
||||
requestScreenshot = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
if(kb.getKeyDescription().equals("key.lighting") && kb.isPressed()) {
|
||||
ReplayMod.replaySettings.setLightingEnabled(!ReplayMod.replaySettings.isLightingEnabled());
|
||||
continue;
|
||||
}
|
||||
|
||||
} catch(Exception e) {
|
||||
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.S28PacketEffect;
|
||||
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.S2DPacketOpenWindow;
|
||||
import net.minecraft.network.play.server.S2EPacketCloseWindow;
|
||||
@@ -385,7 +386,8 @@ public class ReplaySender extends ChannelInboundHandlerAdapter {
|
||||
|
||||
if(hurryToTimestamp) { //If hurrying, ignore some packets
|
||||
if(p instanceof S45PacketTitle ||
|
||||
p instanceof S29PacketSoundEffect) return;
|
||||
p instanceof S29PacketSoundEffect ||
|
||||
p instanceof S2APacketParticles) return;
|
||||
}
|
||||
|
||||
if(p instanceof S02PacketChat) {
|
||||
|
||||
@@ -50,8 +50,7 @@ public class ReplayScreenshot {
|
||||
beforeScreen = mc.currentScreen;
|
||||
}
|
||||
|
||||
public static void saveScreenshot(Framebuffer buffer)
|
||||
{
|
||||
public static void saveScreenshot(Framebuffer buffer) {
|
||||
|
||||
try {
|
||||
GuiReplaySaving.replaySaving = true;
|
||||
|
||||
Reference in New Issue
Block a user