From d1f98be46263e970d32485dbbed0dbed545c72fb Mon Sep 17 00:00:00 2001 From: Nicholas Ignoffo Date: Tue, 13 Sep 2016 16:09:45 -0700 Subject: [PATCH] Fix server crash with holding sigil keybind (#915) @Arcaratus, poking because this will break BA again. I separated things into new classes. --- .../client/KeyBindingBloodMagic.java | 120 ------------------ .../client/{ => key}/IKeybindable.java | 4 +- .../client/key/KeyBindingBloodMagic.java | 18 +++ .../bloodmagic/client/key/KeyBindings.java | 111 ++++++++++++++++ .../item/sigil/ItemSigilHolding.java | 10 +- .../bloodmagic/network/KeyProcessor.java | 10 +- .../util/handler/event/ClientHandler.java | 4 +- 7 files changed, 143 insertions(+), 134 deletions(-) delete mode 100644 src/main/java/WayofTime/bloodmagic/client/KeyBindingBloodMagic.java rename src/main/java/WayofTime/bloodmagic/client/{ => key}/IKeybindable.java (66%) create mode 100644 src/main/java/WayofTime/bloodmagic/client/key/KeyBindingBloodMagic.java create mode 100644 src/main/java/WayofTime/bloodmagic/client/key/KeyBindings.java diff --git a/src/main/java/WayofTime/bloodmagic/client/KeyBindingBloodMagic.java b/src/main/java/WayofTime/bloodmagic/client/KeyBindingBloodMagic.java deleted file mode 100644 index b9742854..00000000 --- a/src/main/java/WayofTime/bloodmagic/client/KeyBindingBloodMagic.java +++ /dev/null @@ -1,120 +0,0 @@ -package WayofTime.bloodmagic.client; - -import WayofTime.bloodmagic.api.Constants; -import WayofTime.bloodmagic.item.sigil.ItemSigilHolding; -import WayofTime.bloodmagic.network.BloodMagicPacketHandler; -import WayofTime.bloodmagic.network.KeyProcessor; -import WayofTime.bloodmagic.util.handler.event.ClientHandler; -import net.minecraft.client.Minecraft; -import net.minecraft.client.entity.EntityPlayerSP; -import net.minecraft.client.settings.KeyBinding; -import net.minecraft.item.ItemStack; -import net.minecraftforge.client.settings.IKeyConflictContext; -import net.minecraftforge.client.settings.KeyConflictContext; -import net.minecraftforge.client.settings.KeyModifier; -import net.minecraftforge.fml.client.registry.ClientRegistry; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; -import org.lwjgl.input.Keyboard; - -import java.util.Locale; - -public class KeyBindingBloodMagic extends KeyBinding -{ - @SideOnly(Side.CLIENT) - public KeyBindingBloodMagic(KeyBindings key) - { - super(key.getDescription(), key.getKeyConflictContext(), key.getKeyModifier(), key.getKeyCode(), Constants.Mod.NAME); - - ClientRegistry.registerKeyBinding(this); - } - - // @formatter:off - public enum KeyBindings - { - OPEN_HOLDING(KeyConflictContext.IN_GAME, KeyModifier.NONE, Keyboard.KEY_H) - { - @SideOnly(Side.CLIENT) - @Override - public void handleKeybind() - { - ItemStack itemStack = ClientHandler.minecraft.thePlayer.getHeldItemMainhand(); - if (itemStack != null && itemStack.getItem() instanceof IKeybindable) - BloodMagicPacketHandler.INSTANCE.sendToServer(new KeyProcessor(this, false)); - } - }, - CYCLE_HOLDING_POS(KeyConflictContext.IN_GAME, KeyModifier.SHIFT, Keyboard.KEY_EQUALS) - { - @SideOnly(Side.CLIENT) - @Override - public void handleKeybind() - { - EntityPlayerSP player = Minecraft.getMinecraft().thePlayer; - if (player.getHeldItemMainhand() != null && player.getHeldItemMainhand().getItem() instanceof ItemSigilHolding) - ClientHandler.cycleSigil(player.getHeldItemMainhand(), player, -1); - } - }, - CYCLE_HOLDING_NEG(KeyConflictContext.IN_GAME, KeyModifier.SHIFT, Keyboard.KEY_MINUS) - { - @SideOnly(Side.CLIENT) - @Override - public void handleKeybind() - { - EntityPlayerSP player = Minecraft.getMinecraft().thePlayer; - if (player.getHeldItemMainhand() != null && player.getHeldItemMainhand().getItem() instanceof ItemSigilHolding) - ClientHandler.cycleSigil(player.getHeldItemMainhand(), player, 1); - } - }, - ; - // @formatter:on - - private final IKeyConflictContext keyConflictContext; - private final KeyModifier keyModifier; - private final int keyCode; - - private KeyBinding key; - - KeyBindings(IKeyConflictContext keyConflictContext, KeyModifier keyModifier, int keyCode) - { - this.keyConflictContext = keyConflictContext; - this.keyModifier = keyModifier; - this.keyCode = keyCode; - } - - @SideOnly(Side.CLIENT) - public abstract void handleKeybind(); - - public IKeyConflictContext getKeyConflictContext() - { - return keyConflictContext; - } - - public KeyModifier getKeyModifier() - { - return keyModifier; - } - - public int getKeyCode() - { - return keyCode; - } - - public KeyBinding getKey() - { - if (key == null) - key = new KeyBindingBloodMagic(this); - - return key; - } - - public void setKey(KeyBinding key) - { - this.key = key; - } - - public String getDescription() - { - return Constants.Mod.MODID + ".keybind." + name().toLowerCase(Locale.ENGLISH); - } - } -} diff --git a/src/main/java/WayofTime/bloodmagic/client/IKeybindable.java b/src/main/java/WayofTime/bloodmagic/client/key/IKeybindable.java similarity index 66% rename from src/main/java/WayofTime/bloodmagic/client/IKeybindable.java rename to src/main/java/WayofTime/bloodmagic/client/key/IKeybindable.java index e4b41a74..f2b99fbc 100644 --- a/src/main/java/WayofTime/bloodmagic/client/IKeybindable.java +++ b/src/main/java/WayofTime/bloodmagic/client/key/IKeybindable.java @@ -1,9 +1,9 @@ -package WayofTime.bloodmagic.client; +package WayofTime.bloodmagic.client.key; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; public interface IKeybindable { - void onKeyPressed(ItemStack stack, EntityPlayer player, KeyBindingBloodMagic.KeyBindings key, boolean showInChat); + void onKeyPressed(ItemStack stack, EntityPlayer player, KeyBindings key, boolean showInChat); } diff --git a/src/main/java/WayofTime/bloodmagic/client/key/KeyBindingBloodMagic.java b/src/main/java/WayofTime/bloodmagic/client/key/KeyBindingBloodMagic.java new file mode 100644 index 00000000..32f65613 --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/client/key/KeyBindingBloodMagic.java @@ -0,0 +1,18 @@ +package WayofTime.bloodmagic.client.key; + +import WayofTime.bloodmagic.api.Constants; +import net.minecraft.client.settings.KeyBinding; +import net.minecraftforge.fml.client.registry.ClientRegistry; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class KeyBindingBloodMagic extends KeyBinding +{ + public KeyBindingBloodMagic(KeyBindings key) + { + super(key.getDescription(), key.getKeyConflictContext(), key.getKeyModifier(), key.getKeyCode(), Constants.Mod.NAME); + + ClientRegistry.registerKeyBinding(this); + } +} diff --git a/src/main/java/WayofTime/bloodmagic/client/key/KeyBindings.java b/src/main/java/WayofTime/bloodmagic/client/key/KeyBindings.java new file mode 100644 index 00000000..3b4d12d2 --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/client/key/KeyBindings.java @@ -0,0 +1,111 @@ +package WayofTime.bloodmagic.client.key; + +import WayofTime.bloodmagic.api.Constants; +import WayofTime.bloodmagic.item.sigil.ItemSigilHolding; +import WayofTime.bloodmagic.network.BloodMagicPacketHandler; +import WayofTime.bloodmagic.network.KeyProcessor; +import WayofTime.bloodmagic.util.handler.event.ClientHandler; +import net.minecraft.client.Minecraft; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.client.settings.KeyBinding; +import net.minecraft.item.ItemStack; +import net.minecraftforge.client.settings.IKeyConflictContext; +import net.minecraftforge.client.settings.KeyConflictContext; +import net.minecraftforge.client.settings.KeyModifier; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.input.Keyboard; + +import java.util.Locale; + +public enum KeyBindings +{ + // @formatter:off + OPEN_HOLDING(KeyConflictContext.IN_GAME, KeyModifier.NONE, Keyboard.KEY_H) + { + @SideOnly(Side.CLIENT) + @Override + public void handleKeybind() + { + ItemStack itemStack = ClientHandler.minecraft.thePlayer.getHeldItemMainhand(); + if (itemStack != null && itemStack.getItem() instanceof IKeybindable) + BloodMagicPacketHandler.INSTANCE.sendToServer(new KeyProcessor(this, false)); + } + }, + CYCLE_HOLDING_POS(KeyConflictContext.IN_GAME, KeyModifier.SHIFT, Keyboard.KEY_EQUALS) + { + @SideOnly(Side.CLIENT) + @Override + public void handleKeybind() + { + EntityPlayerSP player = Minecraft.getMinecraft().thePlayer; + if (player.getHeldItemMainhand() != null && player.getHeldItemMainhand().getItem() instanceof ItemSigilHolding) + ClientHandler.cycleSigil(player.getHeldItemMainhand(), player, -1); + } + }, + CYCLE_HOLDING_NEG(KeyConflictContext.IN_GAME, KeyModifier.SHIFT, Keyboard.KEY_MINUS) + { + @SideOnly(Side.CLIENT) + @Override + public void handleKeybind() + { + EntityPlayerSP player = Minecraft.getMinecraft().thePlayer; + if (player.getHeldItemMainhand() != null && player.getHeldItemMainhand().getItem() instanceof ItemSigilHolding) + ClientHandler.cycleSigil(player.getHeldItemMainhand(), player, 1); + } + }, + ; + // @formatter:on + + private final IKeyConflictContext keyConflictContext; + private final KeyModifier keyModifier; + private final int keyCode; + + @SideOnly(Side.CLIENT) + private KeyBinding key; + + KeyBindings(IKeyConflictContext keyConflictContext, KeyModifier keyModifier, int keyCode) + { + this.keyConflictContext = keyConflictContext; + this.keyModifier = keyModifier; + this.keyCode = keyCode; + } + + @SideOnly(Side.CLIENT) + public abstract void handleKeybind(); + + public IKeyConflictContext getKeyConflictContext() + { + return keyConflictContext; + } + + public KeyModifier getKeyModifier() + { + return keyModifier; + } + + public int getKeyCode() + { + return keyCode; + } + + @SideOnly(Side.CLIENT) + public KeyBinding getKey() + { + if (key == null) + key = new KeyBindingBloodMagic(this); + + return key; + } + + @SideOnly(Side.CLIENT) + public void setKey(KeyBinding key) + { + this.key = key; + } + + public String getDescription() + { + return Constants.Mod.MODID + ".keybind." + name().toLowerCase(Locale.ENGLISH); + } +} diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilHolding.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilHolding.java index 15be8107..18c2c249 100644 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilHolding.java +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilHolding.java @@ -3,7 +3,7 @@ package WayofTime.bloodmagic.item.sigil; import java.util.Collections; import java.util.List; -import WayofTime.bloodmagic.client.KeyBindingBloodMagic; +import WayofTime.bloodmagic.client.key.KeyBindings; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; @@ -27,7 +27,7 @@ import WayofTime.bloodmagic.api.iface.IAltarReader; import WayofTime.bloodmagic.api.iface.IBindable; import WayofTime.bloodmagic.api.util.helper.NBTHelper; import WayofTime.bloodmagic.util.Utils; -import WayofTime.bloodmagic.client.IKeybindable; +import WayofTime.bloodmagic.client.key.IKeybindable; import WayofTime.bloodmagic.util.helper.TextHelper; import com.google.common.base.Strings; @@ -42,9 +42,9 @@ public class ItemSigilHolding extends ItemSigilBase implements IKeybindable, IAl } @Override - public void onKeyPressed(ItemStack stack, EntityPlayer player, KeyBindingBloodMagic.KeyBindings key, boolean showInChat) + public void onKeyPressed(ItemStack stack, EntityPlayer player, KeyBindings key, boolean showInChat) { - if (stack == player.getHeldItemMainhand() && stack.getItem() instanceof ItemSigilHolding && key.equals(KeyBindingBloodMagic.KeyBindings.OPEN_HOLDING)) + if (stack == player.getHeldItemMainhand() && stack.getItem() instanceof ItemSigilHolding && key.equals(KeyBindings.OPEN_HOLDING)) { Utils.setUUID(stack); player.openGui(BloodMagic.instance, Constants.Gui.SIGIL_HOLDING_GUI, player.worldObj, (int) player.posX, (int) player.posY, (int) player.posZ); @@ -73,7 +73,7 @@ public class ItemSigilHolding extends ItemSigilBase implements IKeybindable, IAl public void addInformation(ItemStack stack, EntityPlayer player, List tooltip, boolean advanced) { super.addInformation(stack, player, tooltip, advanced); - tooltip.add(TextHelper.localizeEffect("tooltip.BloodMagic.sigil.holding.press", KeyBindingBloodMagic.KeyBindings.OPEN_HOLDING.getKey().getDisplayName())); + tooltip.add(TextHelper.localizeEffect("tooltip.BloodMagic.sigil.holding.press", KeyBindings.OPEN_HOLDING.getKey().getDisplayName())); if (!stack.hasTagCompound()) return; diff --git a/src/main/java/WayofTime/bloodmagic/network/KeyProcessor.java b/src/main/java/WayofTime/bloodmagic/network/KeyProcessor.java index 11f72ce4..4cd933f4 100644 --- a/src/main/java/WayofTime/bloodmagic/network/KeyProcessor.java +++ b/src/main/java/WayofTime/bloodmagic/network/KeyProcessor.java @@ -1,7 +1,7 @@ package WayofTime.bloodmagic.network; -import WayofTime.bloodmagic.client.KeyBindingBloodMagic; -import WayofTime.bloodmagic.client.IKeybindable; +import WayofTime.bloodmagic.client.key.IKeybindable; +import WayofTime.bloodmagic.client.key.KeyBindings; import io.netty.buffer.ByteBuf; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; @@ -18,7 +18,7 @@ public class KeyProcessor implements IMessage, IMessageHandler= KeyBindingBloodMagic.KeyBindings.values().length) + if (msg.keyId < 0 || msg.keyId >= KeyBindings.values().length) { return null; } - KeyBindingBloodMagic.KeyBindings key = KeyBindingBloodMagic.KeyBindings.values()[msg.keyId]; + KeyBindings key = KeyBindings.values()[msg.keyId]; ((IKeybindable) heldStack.getItem()).onKeyPressed(heldStack, entityPlayer, key, msg.showInChat); } } diff --git a/src/main/java/WayofTime/bloodmagic/util/handler/event/ClientHandler.java b/src/main/java/WayofTime/bloodmagic/util/handler/event/ClientHandler.java index 0d0d12fe..ee1bc95a 100644 --- a/src/main/java/WayofTime/bloodmagic/util/handler/event/ClientHandler.java +++ b/src/main/java/WayofTime/bloodmagic/util/handler/event/ClientHandler.java @@ -8,7 +8,7 @@ import java.util.Set; import javax.annotation.Nullable; -import WayofTime.bloodmagic.client.KeyBindingBloodMagic; +import WayofTime.bloodmagic.client.key.KeyBindings; import net.minecraft.client.Minecraft; import net.minecraft.client.entity.EntityPlayerSP; import net.minecraft.client.renderer.GlStateManager; @@ -210,7 +210,7 @@ public class ClientHandler if (!minecraft.inGameHasFocus) return; - for (KeyBindingBloodMagic.KeyBindings keyBinding : KeyBindingBloodMagic.KeyBindings.values()) + for (KeyBindings keyBinding : KeyBindings.values()) if (keyBinding.getKey().isPressed()) keyBinding.handleKeybind(); }