diff --git a/dependencies.gradle b/dependencies.gradle index e81fcdd62..040559aa7 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -10,6 +10,7 @@ dependencies { compileOnly('com.github.GTNewHorizons:ForgeMultipart:1.2.7:dev') {transitive=false} compileOnly('com.github.GTNewHorizons:NotEnoughItems:2.2.7-GTNH:dev') compileOnly('com.github.GTNewHorizons:BuildCraft:7.1.27:api') {transitive=false} + compile('com.github.GTNewHorizons:GTNHLib:0.0.4:dev') compileOnly('curse.maven:cofh-lib-220333:2388748') compileOnly('curse.maven:minefactory-reloaded-66672:2366150') diff --git a/src/main/java/vazkii/botania/client/core/handler/KeyHandler.java b/src/main/java/vazkii/botania/client/core/handler/KeyHandler.java new file mode 100644 index 000000000..93413812d --- /dev/null +++ b/src/main/java/vazkii/botania/client/core/handler/KeyHandler.java @@ -0,0 +1,36 @@ +package vazkii.botania.client.core.handler; + +import net.minecraft.client.settings.KeyBinding; +import vazkii.botania.common.network.PacketHandler; +import vazkii.botania.common.network.PacketLokiToggle; +import cpw.mods.fml.client.registry.ClientRegistry; +import cpw.mods.fml.common.FMLCommonHandler; +import cpw.mods.fml.common.eventhandler.SubscribeEvent; +import cpw.mods.fml.common.gameevent.InputEvent; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + + +public class KeyHandler { + private static final KeyBinding keyToggleRingOfLoki= new KeyBinding("botaniamisc.toggleLoki", 0, "botaniamisc.keyCategory"); + + public KeyHandler() { + FMLCommonHandler.instance().bus().register(this); + ClientRegistry.registerKeyBinding(keyToggleRingOfLoki); + } + @SideOnly(Side.CLIENT) + @SubscribeEvent + public void key(InputEvent.KeyInputEvent event){ + checkAndPerformKeyActions(); + } + + private void checkAndPerformKeyActions(){ + if (keyToggleRingOfLoki.isPressed()){ + toggleRingLoki(); + } + } + + private static void toggleRingLoki() { + PacketHandler.INSTANCE.sendToServer(new PacketLokiToggle()); + } +} diff --git a/src/main/java/vazkii/botania/client/core/proxy/ClientProxy.java b/src/main/java/vazkii/botania/client/core/proxy/ClientProxy.java index ac491c3e1..b21b86732 100644 --- a/src/main/java/vazkii/botania/client/core/proxy/ClientProxy.java +++ b/src/main/java/vazkii/botania/client/core/proxy/ClientProxy.java @@ -55,6 +55,7 @@ import vazkii.botania.client.core.handler.PersistentVariableHelper; import vazkii.botania.client.core.handler.SubTileRadiusRenderHandler; import vazkii.botania.client.core.handler.TooltipHandler; import vazkii.botania.client.core.helper.ShaderHelper; +import vazkii.botania.client.core.handler.KeyHandler; import vazkii.botania.client.fx.FXSparkle; import vazkii.botania.client.fx.FXWisp; import vazkii.botania.client.gui.lexicon.GuiLexicon; @@ -219,6 +220,7 @@ public class ClientProxy extends CommonProxy { MinecraftForge.EVENT_BUS.register(new SubTileRadiusRenderHandler()); MinecraftForge.EVENT_BUS.register(new MultiblockRenderHandler()); MinecraftForge.EVENT_BUS.register(new SkyblockRenderEvents()); + MinecraftForge.EVENT_BUS.register(new KeyHandler()); FMLCommonHandler.instance().bus().register(new CorporeaAutoCompleteHandler()); if(ConfigHandler.enableSeasonalFeatures) { diff --git a/src/main/java/vazkii/botania/common/Botania.java b/src/main/java/vazkii/botania/common/Botania.java index 8d43e9d71..232f334cb 100644 --- a/src/main/java/vazkii/botania/common/Botania.java +++ b/src/main/java/vazkii/botania/common/Botania.java @@ -63,7 +63,6 @@ public class Botania { storageDrawersLoaded = Loader.isModLoaded("StorageDrawers"); lightHelper = coloredLightsLoaded ? new LightHelperColored() : new LightHelperVanilla(); - proxy.preInit(event); } @EventHandler diff --git a/src/main/java/vazkii/botania/common/core/proxy/CommonProxy.java b/src/main/java/vazkii/botania/common/core/proxy/CommonProxy.java index e441a92b5..24c14e5f4 100644 --- a/src/main/java/vazkii/botania/common/core/proxy/CommonProxy.java +++ b/src/main/java/vazkii/botania/common/core/proxy/CommonProxy.java @@ -79,6 +79,7 @@ import vazkii.botania.common.integration.etfuturum.ModBanners; import vazkii.botania.common.item.ModItems; import vazkii.botania.common.lexicon.LexiconData; import vazkii.botania.common.network.GuiHandler; +import vazkii.botania.common.network.PacketHandler; import vazkii.botania.common.world.SkyblockWorldEvents; import vazkii.botania.common.world.WorldTypeSkyblock; import cpw.mods.fml.common.FMLCommonHandler; @@ -116,6 +117,8 @@ public class CommonProxy { ModAchievements.init(); ModMultiblocks.init(); + PacketHandler.initPackets(); + if(Botania.etFuturumLoaded) ModBanners.init(); diff --git a/src/main/java/vazkii/botania/common/item/relic/ItemLokiRing.java b/src/main/java/vazkii/botania/common/item/relic/ItemLokiRing.java index 5f77e5635..aab4e1e40 100644 --- a/src/main/java/vazkii/botania/common/item/relic/ItemLokiRing.java +++ b/src/main/java/vazkii/botania/common/item/relic/ItemLokiRing.java @@ -13,6 +13,7 @@ package vazkii.botania.common.item.relic; import java.util.ArrayList; import java.util.List; +import com.gtnewhorizon.gtnhlib.GTNHLib; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.client.Minecraft; @@ -26,6 +27,8 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.ChunkCoordinates; import net.minecraft.util.MovingObjectPosition; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; import net.minecraft.world.World; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.entity.player.PlayerInteractEvent; @@ -58,6 +61,7 @@ public class ItemLokiRing extends ItemRelicBauble implements IExtendedWireframeC private static final String TAG_X_ORIGIN = "xOrigin"; private static final String TAG_Y_ORIGIN = "yOrigin"; private static final String TAG_Z_ORIGIN = "zOrigin"; + private static final String TAG_MODE = "mode"; public ItemLokiRing() { super(LibItemNames.LOKI_RING); @@ -89,7 +93,7 @@ public class ItemLokiRing extends ItemRelicBauble implements IExtendedWireframeC int cost = Math.min(cursorCount, (int) Math.pow(Math.E, cursorCount * 0.25)); - if(heldItemStack == null && event.action == Action.RIGHT_CLICK_BLOCK && player.isSneaking()) { + if(heldItemStack == null && event.action == Action.RIGHT_CLICK_BLOCK && player.isSneaking() && isRingEnabled(lokiRing)) { if(originCoords.posY == -1 && lookPos != null) { setOriginPos(lokiRing, lookPos.blockX, lookPos.blockY, lookPos.blockZ); setCursorList(lokiRing, null); @@ -121,7 +125,7 @@ public class ItemLokiRing extends ItemRelicBauble implements IExtendedWireframeC } } } - } else if(heldItemStack != null && event.action == Action.RIGHT_CLICK_BLOCK && lookPos != null && player.isSneaking()) { + } else if(heldItemStack != null && event.action == Action.RIGHT_CLICK_BLOCK && lookPos != null && isRingEnabled(lokiRing)) { for(ChunkCoordinates cursor : cursors) { int x = lookPos.blockX + cursor.posX; int y = lookPos.blockY + cursor.posY; @@ -137,7 +141,23 @@ public class ItemLokiRing extends ItemRelicBauble implements IExtendedWireframeC } } } - + public static void toggleMode(ItemStack stack) { + stack.stackTagCompound.setBoolean(TAG_MODE,!stack.stackTagCompound.getBoolean(TAG_MODE)); + } + @SideOnly(Side.CLIENT) + public static void renderHUDNotification(){ + Minecraft mc = Minecraft.getMinecraft(); + String text = getLokiModeText(getLokiRing(mc.thePlayer)); + GTNHLib.proxy.printMessageAboveHotbar(text, 60, true, true); + } + public static String getLokiModeText(ItemStack stack){ + return EnumChatFormatting.GOLD + StatCollector.translateToLocal("item.botania:lokiRing.name") + " " + (isRingEnabled(stack) ? + EnumChatFormatting.GREEN + StatCollector.translateToLocal("botaniamisc.lokiOn") : + EnumChatFormatting.RED + StatCollector.translateToLocal("botaniamisc.lokiOff")); + } + public static boolean isRingEnabled (final ItemStack stack){ + return stack.stackTagCompound.getBoolean(TAG_MODE); + } public static void breakOnAllCursors(EntityPlayer player, Item item, ItemStack stack, int x, int y, int z, int side) { ItemStack lokiRing = getLokiRing(player); if(lokiRing == null || player.worldObj.isRemote || !(item instanceof ISequentialBreaker)) @@ -206,7 +226,7 @@ public class ItemLokiRing extends ItemRelicBauble implements IExtendedWireframeC return getLokiRing(player) == stack ? getOriginPos(stack) : null; } - private static ItemStack getLokiRing(EntityPlayer player) { + public static ItemStack getLokiRing(EntityPlayer player) { InventoryBaubles baubles = PlayerHandler.getPlayerBaubles(player); ItemStack stack1 = baubles.getStackInSlot(1); ItemStack stack2 = baubles.getStackInSlot(2); diff --git a/src/main/java/vazkii/botania/common/network/PacketHandler.java b/src/main/java/vazkii/botania/common/network/PacketHandler.java new file mode 100644 index 000000000..4bf548bb5 --- /dev/null +++ b/src/main/java/vazkii/botania/common/network/PacketHandler.java @@ -0,0 +1,19 @@ +package vazkii.botania.common.network; + +import vazkii.botania.common.lib.LibMisc; +import cpw.mods.fml.common.network.NetworkRegistry; +import cpw.mods.fml.common.network.simpleimpl.SimpleNetworkWrapper; +import cpw.mods.fml.relauncher.Side; + +public class PacketHandler { + + private PacketHandler() {} + + public static final SimpleNetworkWrapper INSTANCE = + NetworkRegistry.INSTANCE.newSimpleChannel(LibMisc.MOD_ID.toLowerCase()); + + public static void initPackets() { + INSTANCE.registerMessage(PacketLokiToggle.class, PacketLokiToggle.class, 1, Side.SERVER); + INSTANCE.registerMessage(PacketLokiToggleAck.class, PacketLokiToggleAck.class, 2, Side.CLIENT); + } +} diff --git a/src/main/java/vazkii/botania/common/network/PacketLokiToggle.java b/src/main/java/vazkii/botania/common/network/PacketLokiToggle.java new file mode 100644 index 000000000..d232db4f7 --- /dev/null +++ b/src/main/java/vazkii/botania/common/network/PacketLokiToggle.java @@ -0,0 +1,34 @@ +package vazkii.botania.common.network; + +import io.netty.buffer.ByteBuf; + +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import vazkii.botania.common.item.relic.ItemLokiRing; +import cpw.mods.fml.common.network.simpleimpl.IMessage; +import cpw.mods.fml.common.network.simpleimpl.IMessageHandler; +import cpw.mods.fml.common.network.simpleimpl.MessageContext; + +public class PacketLokiToggle implements IMessage, IMessageHandler { + + @Override + public void fromBytes(ByteBuf byteBuf) { + // not needed + } + + @Override + public void toBytes(ByteBuf byteBuf) { + // not needed + } + + @Override + public IMessage onMessage(PacketLokiToggle message, MessageContext ctx) { + EntityPlayerMP player = ctx.getServerHandler().playerEntity; + final ItemStack aRing = ItemLokiRing.getLokiRing(player); + if (aRing != null) { + ItemLokiRing.toggleMode(aRing); + PacketHandler.INSTANCE.sendTo(new PacketLokiToggleAck(), player); + } + return null; + } +} diff --git a/src/main/java/vazkii/botania/common/network/PacketLokiToggleAck.java b/src/main/java/vazkii/botania/common/network/PacketLokiToggleAck.java new file mode 100644 index 000000000..6f2fb3dcc --- /dev/null +++ b/src/main/java/vazkii/botania/common/network/PacketLokiToggleAck.java @@ -0,0 +1,37 @@ +package vazkii.botania.common.network; + +import io.netty.buffer.ByteBuf; + +import net.minecraft.client.Minecraft; +import net.minecraft.item.ItemStack; +import vazkii.botania.common.item.relic.ItemLokiRing; +import cpw.mods.fml.common.network.simpleimpl.IMessage; +import cpw.mods.fml.common.network.simpleimpl.IMessageHandler; +import cpw.mods.fml.common.network.simpleimpl.MessageContext; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +public class PacketLokiToggleAck implements IMessage, IMessageHandler { + + @Override + public void fromBytes(ByteBuf byteBuf) { + // not needed + } + + @Override + public void toBytes(ByteBuf byteBuf) { + // not needed + } + + @SideOnly(Side.CLIENT) + @Override + public IMessage onMessage(PacketLokiToggleAck message, MessageContext ctx) { + Minecraft mc = Minecraft.getMinecraft(); + final ItemStack aRing = ItemLokiRing.getLokiRing(mc.thePlayer) ; + if (aRing != null) { + ItemLokiRing.renderHUDNotification(); + } + + return null; + } +} diff --git a/src/main/resources/assets/botania/lang/en_US.lang b/src/main/resources/assets/botania/lang/en_US.lang index 131faf4c7..9c21bc452 100644 --- a/src/main/resources/assets/botania/lang/en_US.lang +++ b/src/main/resources/assets/botania/lang/en_US.lang @@ -152,6 +152,10 @@ botaniamisc.altarRefill0=Right click with an empty hand to botaniamisc.altarRefill1=add back the last recipe botaniamisc.santaweaveInfo=Manaweave, changed up for the &cs&fe&ca&fs&co&fn botaniamisc.enterToView=^ Press ENTER to view ^ +botaniamisc.keyCategory=Botania +botaniamisc.toggleLoki=Toggle Ring of Loki +botaniamisc.lokiOn=On +botaniamisc.lokiOff=Off # NEI INTEGRATION botania.nei.brewery=Botanical Brewery