Added Keybindings for custom actions (Thumbnail and Lighting)

This commit is contained in:
Marius Metzger
2015-01-26 17:20:55 +01:00
parent 8c2cf9011e
commit d31180654f
8 changed files with 171 additions and 39 deletions

View File

@@ -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();
}
}
}

View File

@@ -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();

View File

@@ -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();
}

View File

@@ -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()]);
}
}

View File

@@ -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;
}
}

View File

@@ -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
}
}

View File

@@ -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) {

View File

@@ -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;