From cfe08dffae34c4b855dcc1c92831e100d6b87501 Mon Sep 17 00:00:00 2001 From: Pahimar Date: Fri, 27 Nov 2015 23:07:45 -0500 Subject: [PATCH] Hey working on a super cool new Admin Panel to make it way easier to set EE3 related values/settings on items. Woo! --- .../com/pahimar/ee3/EquivalentExchange3.java | 15 ++++ .../client/gui/element/ElementCheckBox.java | 39 ++++++++ .../client/gui/inventory/GuiAdminPanel.java | 83 ++++++++++++++++++ ...chemicalTome.java => GuiAlchenomicon.java} | 16 ++-- .../handler/ItemTooltipEventHandler.java | 4 +- .../TileEntityRendererResearchStation.java | 6 +- .../com/pahimar/ee3/command/CommandAdmin.java | 38 ++++++++ .../com/pahimar/ee3/command/CommandEE.java | 1 + .../pahimar/ee3/handler/CraftingHandler.java | 3 - .../com/pahimar/ee3/handler/GuiHandler.java | 16 +++- .../java/com/pahimar/ee3/init/ModItems.java | 4 +- .../java/com/pahimar/ee3/init/Recipes.java | 7 +- .../ee3/inventory/ContainerAdminPanel.java | 34 +++++++ ...alTome.java => ContainerAlchenomicon.java} | 26 +++--- .../inventory/ContainerResearchStation.java | 12 +-- .../ContainerTransmutationTablet.java | 26 +++--- ...alTome.java => InventoryAlchenomicon.java} | 6 +- ...hemicalTome.java => ItemAlchenomicon.java} | 10 +-- .../com/pahimar/ee3/item/ItemMiniumShard.java | 9 +- .../MessageTileEntityResearchStation.java | 12 +-- .../java/com/pahimar/ee3/reference/GUIs.java | 5 +- .../com/pahimar/ee3/reference/Messages.java | 4 +- .../java/com/pahimar/ee3/reference/Names.java | 5 +- .../com/pahimar/ee3/reference/Textures.java | 4 +- .../tileentity/TileEntityResearchStation.java | 16 ++-- .../TileEntityTransmutationTablet.java | 6 +- src/main/resources/assets/ee3/lang/en_US.lang | 7 +- .../assets/ee3/textures/gui/adminPanel.png | Bin 0 -> 3849 bytes .../{alchemicalTome.png => alchenomicon.png} | Bin .../ee3/textures/gui/elements/button.png | Bin 0 -> 3498 bytes .../textures/gui/elements/checkbox_16px.png | Bin 0 -> 4502 bytes .../textures/gui/elements/checkbox_16px.xcf | Bin 0 -> 11243 bytes .../{alchemicalTome.png => alchenomicon.png} | Bin .../textures/items/destructionCatalyst.png | Bin 0 -> 19105 bytes .../ee3/textures/items/mercurialEye.png | Bin 0 -> 18894 bytes .../ee3/textures/xcf/gui/adminPanel.xcf | Bin 0 -> 27374 bytes .../ee3/textures/xcf/gui/elements/button.xcf | Bin 0 -> 12915 bytes 37 files changed, 319 insertions(+), 95 deletions(-) create mode 100644 src/main/java/com/pahimar/ee3/client/gui/element/ElementCheckBox.java create mode 100644 src/main/java/com/pahimar/ee3/client/gui/inventory/GuiAdminPanel.java rename src/main/java/com/pahimar/ee3/client/gui/inventory/{GuiAlchemicalTome.java => GuiAlchenomicon.java} (84%) create mode 100644 src/main/java/com/pahimar/ee3/command/CommandAdmin.java create mode 100644 src/main/java/com/pahimar/ee3/inventory/ContainerAdminPanel.java rename src/main/java/com/pahimar/ee3/inventory/{ContainerAlchemicalTome.java => ContainerAlchenomicon.java} (84%) rename src/main/java/com/pahimar/ee3/inventory/{InventoryAlchemicalTome.java => InventoryAlchenomicon.java} (94%) rename src/main/java/com/pahimar/ee3/item/{ItemAlchemicalTome.java => ItemAlchenomicon.java} (81%) create mode 100644 src/main/resources/assets/ee3/textures/gui/adminPanel.png rename src/main/resources/assets/ee3/textures/gui/{alchemicalTome.png => alchenomicon.png} (100%) create mode 100644 src/main/resources/assets/ee3/textures/gui/elements/button.png create mode 100644 src/main/resources/assets/ee3/textures/gui/elements/checkbox_16px.png create mode 100644 src/main/resources/assets/ee3/textures/gui/elements/checkbox_16px.xcf rename src/main/resources/assets/ee3/textures/items/{alchemicalTome.png => alchenomicon.png} (100%) create mode 100644 src/main/resources/assets/ee3/textures/items/destructionCatalyst.png create mode 100644 src/main/resources/assets/ee3/textures/items/mercurialEye.png create mode 100644 src/main/resources/assets/ee3/textures/xcf/gui/adminPanel.xcf create mode 100644 src/main/resources/assets/ee3/textures/xcf/gui/elements/button.xcf diff --git a/src/main/java/com/pahimar/ee3/EquivalentExchange3.java b/src/main/java/com/pahimar/ee3/EquivalentExchange3.java index 157e22f0..b7806b7d 100644 --- a/src/main/java/com/pahimar/ee3/EquivalentExchange3.java +++ b/src/main/java/com/pahimar/ee3/EquivalentExchange3.java @@ -129,6 +129,21 @@ public class EquivalentExchange3 AbilityRegistry.getInstance().save(); } + @EventHandler + public void handleMissingMappingEvent(FMLMissingMappingsEvent event) + { + for (FMLMissingMappingsEvent.MissingMapping mapping : event.get()) + { + if (mapping.type == GameRegistry.Type.ITEM) + { + if (mapping.name.equals("EE3:alchemicalTome")) + { + mapping.remap(ModItems.alchenomicon); + } + } + } + } + public EnergyValueRegistry getEnergyValueRegistry() { return EnergyValueRegistry.getInstance(); diff --git a/src/main/java/com/pahimar/ee3/client/gui/element/ElementCheckBox.java b/src/main/java/com/pahimar/ee3/client/gui/element/ElementCheckBox.java new file mode 100644 index 00000000..4d8f74ab --- /dev/null +++ b/src/main/java/com/pahimar/ee3/client/gui/element/ElementCheckBox.java @@ -0,0 +1,39 @@ +package com.pahimar.ee3.client.gui.element; + +import com.pahimar.repackage.cofh.lib.gui.GuiBase; +import com.pahimar.repackage.cofh.lib.gui.element.ElementButton; +import net.minecraft.util.ResourceLocation; + +public class ElementCheckBox extends ElementButton +{ + private boolean isChecked; + + public ElementCheckBox(GuiBase gui, int posX, int posY, String name, int sheetX, int sheetY, int hoverX, int hoverY, int disabledX, int disabledY, int sizeX, int sizeY, int texW, int texH, ResourceLocation texture) + { + super(gui, posX, posY, name, sheetX, sheetY, hoverX, hoverY, disabledX, disabledY, sizeX, sizeY, texW, texH, texture); + this.isChecked = false; + + // TODO Standardize size and textures - should only ever need to know gui, name, and positioning + } + + public boolean isChecked() + { + return isChecked; + } + + public ElementCheckBox check() + { + return setIsChecked(true); + } + + public ElementCheckBox unCheck() + { + return setIsChecked(false); + } + + public ElementCheckBox setIsChecked(boolean isChecked) + { + this.isChecked = isChecked; + return this; + } +} diff --git a/src/main/java/com/pahimar/ee3/client/gui/inventory/GuiAdminPanel.java b/src/main/java/com/pahimar/ee3/client/gui/inventory/GuiAdminPanel.java new file mode 100644 index 00000000..bfc431d6 --- /dev/null +++ b/src/main/java/com/pahimar/ee3/client/gui/inventory/GuiAdminPanel.java @@ -0,0 +1,83 @@ +package com.pahimar.ee3.client.gui.inventory; + +import com.pahimar.ee3.inventory.ContainerAdminPanel; +import com.pahimar.ee3.network.PacketHandler; +import com.pahimar.ee3.network.message.MessageGuiElementClicked; +import com.pahimar.ee3.reference.Textures; +import com.pahimar.repackage.cofh.lib.gui.GuiBase; +import com.pahimar.repackage.cofh.lib.gui.GuiColor; +import com.pahimar.repackage.cofh.lib.gui.element.ElementButton; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.entity.player.InventoryPlayer; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class GuiAdminPanel extends GuiBase +{ + + private ElementButton learnableButton; + private ElementButton recoverableButton; + + public GuiAdminPanel(InventoryPlayer inventoryPlayer) + { + super(new ContainerAdminPanel(inventoryPlayer), Textures.Gui.ADMIN_PANEL); + xSize = 175; + ySize = 176; + } + + @Override + public void initGui() + { + super.initGui(); + + learnableButton = new ElementButton(this, 65, 22, "learnable", 0, 0, 0, 20, 0, 40, 100, 20, 100, 60, Textures.Gui.Elements.BUTTON); + recoverableButton = new ElementButton(this, 65, 48, "recoverable", 0, 0, 0, 20, 0, 40, 100, 20, 100, 60, Textures.Gui.Elements.BUTTON); + addElement(learnableButton); + addElement(recoverableButton); + } + + @Override + protected void drawGuiContainerForegroundLayer(int x, int y) + { + super.drawGuiContainerForegroundLayer(x, y); + + if (learnableButton.intersectsWith(mouseX, mouseY)) + { + fontRendererObj.drawSplitString("Not Learnable", 81, 28, 100, new GuiColor(255, 255, 255).getColor()); + } + else + { + fontRendererObj.drawSplitString("Learnable", 90, 28, 100, new GuiColor(255, 255, 255).getColor()); + } + + fontRendererObj.drawSplitString("Recoverable", 85, 54, 100, new GuiColor(255, 255, 255).getColor()); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float partialTicks, int x, int y) + { + mouseX = x - guiLeft; + mouseY = y - guiTop; + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + bindTexture(texture); + drawSizedTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize, 256f, 256f); + GL11.glPushMatrix(); + GL11.glTranslatef(guiLeft, guiTop, 0.0F); + drawElements(partialTicks, false); + drawTabs(partialTicks, false); + GL11.glPopMatrix(); + } + + @Override + protected void updateElementInformation() + { + + } + + @Override + public void handleElementButtonClick(String buttonName, int mouseButton) + { + PacketHandler.INSTANCE.sendToServer(new MessageGuiElementClicked(buttonName, mouseButton)); + } +} diff --git a/src/main/java/com/pahimar/ee3/client/gui/inventory/GuiAlchemicalTome.java b/src/main/java/com/pahimar/ee3/client/gui/inventory/GuiAlchenomicon.java similarity index 84% rename from src/main/java/com/pahimar/ee3/client/gui/inventory/GuiAlchemicalTome.java rename to src/main/java/com/pahimar/ee3/client/gui/inventory/GuiAlchenomicon.java index b3cc49db..de78e7a8 100644 --- a/src/main/java/com/pahimar/ee3/client/gui/inventory/GuiAlchemicalTome.java +++ b/src/main/java/com/pahimar/ee3/client/gui/inventory/GuiAlchenomicon.java @@ -1,7 +1,7 @@ package com.pahimar.ee3.client.gui.inventory; import com.pahimar.ee3.client.gui.element.ElementSearchField; -import com.pahimar.ee3.inventory.ContainerAlchemicalTome; +import com.pahimar.ee3.inventory.ContainerAlchenomicon; import com.pahimar.ee3.network.PacketHandler; import com.pahimar.ee3.network.message.MessageGuiElementClicked; import com.pahimar.ee3.reference.Messages; @@ -19,15 +19,15 @@ import net.minecraft.util.StatCollector; import org.lwjgl.opengl.GL11; @SideOnly(Side.CLIENT) -public class GuiAlchemicalTome extends GuiBase +public class GuiAlchenomicon extends GuiBase { private ElementButton prevPageButton; private ElementButton nextPageButton; private ElementTextField searchTextField; - public GuiAlchemicalTome(InventoryPlayer inventoryPlayer, ItemStack itemStack) + public GuiAlchenomicon(InventoryPlayer inventoryPlayer, ItemStack itemStack) { - super(new ContainerAlchemicalTome(inventoryPlayer.player, itemStack), Textures.Gui.ALCHEMICAL_TOME); + super(new ContainerAlchenomicon(inventoryPlayer.player, itemStack), Textures.Gui.ALCHENOMICON); xSize = 256; ySize = 226; } @@ -56,7 +56,7 @@ public class GuiAlchemicalTome extends GuiBase protected void drawGuiContainerForegroundLayer(int x, int y) { super.drawGuiContainerForegroundLayer(x, y); - int pageOffset = ((ContainerAlchemicalTome) this.inventorySlots).getPageOffset(); + int pageOffset = ((ContainerAlchenomicon) this.inventorySlots).getPageOffset(); if (this.inventorySlots.getSlot(0).getHasStack()) { @@ -64,7 +64,7 @@ public class GuiAlchemicalTome extends GuiBase } else { - if (((ContainerAlchemicalTome) this.inventorySlots).getKnownTransmutationsCount() == 0) + if (((ContainerAlchenomicon) this.inventorySlots).getKnownTransmutationsCount() == 0) { fontRendererObj.drawSplitString(StatCollector.translateToLocal(Messages.Gui.NO_KNOWN_TRANSMUTATIONS), 142, 20, 100, new GuiColor(50, 50, 50).getColor()); } @@ -94,7 +94,7 @@ public class GuiAlchemicalTome extends GuiBase @Override protected void updateElementInformation() { - if (((ContainerAlchemicalTome) this.inventorySlots).getPageOffset() == 0) + if (((ContainerAlchenomicon) this.inventorySlots).getPageOffset() == 0) { prevPageButton.setDisabled(); } @@ -103,7 +103,7 @@ public class GuiAlchemicalTome extends GuiBase prevPageButton.setEnabled(true); } - if (((ContainerAlchemicalTome) this.inventorySlots).getPageOffset() == ((ContainerAlchemicalTome) this.inventorySlots).getMaxPageOffset()) + if (((ContainerAlchenomicon) this.inventorySlots).getPageOffset() == ((ContainerAlchenomicon) this.inventorySlots).getMaxPageOffset()) { nextPageButton.setDisabled(); } diff --git a/src/main/java/com/pahimar/ee3/client/handler/ItemTooltipEventHandler.java b/src/main/java/com/pahimar/ee3/client/handler/ItemTooltipEventHandler.java index 33d7459f..b142c381 100644 --- a/src/main/java/com/pahimar/ee3/client/handler/ItemTooltipEventHandler.java +++ b/src/main/java/com/pahimar/ee3/client/handler/ItemTooltipEventHandler.java @@ -4,7 +4,7 @@ import com.pahimar.ee3.api.exchange.EnergyValue; import com.pahimar.ee3.api.exchange.EnergyValueRegistryProxy; import com.pahimar.ee3.api.knowledge.TransmutationKnowledgeRegistryProxy; import com.pahimar.ee3.exchange.WrappedStack; -import com.pahimar.ee3.inventory.ContainerAlchemicalTome; +import com.pahimar.ee3.inventory.ContainerAlchenomicon; import com.pahimar.ee3.inventory.ContainerResearchStation; import com.pahimar.ee3.inventory.ContainerTransmutationTablet; import com.pahimar.ee3.reference.Messages; @@ -38,7 +38,7 @@ public class ItemTooltipEventHandler @SubscribeEvent public void handleItemTooltipEvent(ItemTooltipEvent event) { - if (Keyboard.isKeyDown(Keyboard.KEY_LSHIFT) || Keyboard.isKeyDown(Keyboard.KEY_RSHIFT) || (event.entityPlayer != null && (event.entityPlayer.openContainer instanceof ContainerAlchemicalTome || event.entityPlayer.openContainer instanceof ContainerTransmutationTablet))) + if (Keyboard.isKeyDown(Keyboard.KEY_LSHIFT) || Keyboard.isKeyDown(Keyboard.KEY_RSHIFT) || (event.entityPlayer != null && (event.entityPlayer.openContainer instanceof ContainerAlchenomicon || event.entityPlayer.openContainer instanceof ContainerTransmutationTablet))) { WrappedStack wrappedItemStack = WrappedStack.wrap(event.itemStack); EnergyValue energyValue = EnergyValueRegistryProxy.getEnergyValue(wrappedItemStack); diff --git a/src/main/java/com/pahimar/ee3/client/renderer/tileentity/TileEntityRendererResearchStation.java b/src/main/java/com/pahimar/ee3/client/renderer/tileentity/TileEntityRendererResearchStation.java index 899ef804..4d9817e8 100644 --- a/src/main/java/com/pahimar/ee3/client/renderer/tileentity/TileEntityRendererResearchStation.java +++ b/src/main/java/com/pahimar/ee3/client/renderer/tileentity/TileEntityRendererResearchStation.java @@ -64,12 +64,12 @@ public class TileEntityRendererResearchStation extends TileEntitySpecialRenderer */ GL11.glPushMatrix(); - ItemStack tome = tileEntityResearchStation.getStackInSlot(TileEntityResearchStation.TOME_SLOT_INVENTORY_INDEX); - if (Minecraft.getMinecraft().gameSettings.fancyGraphics && tome != null) + ItemStack alchenomicon = tileEntityResearchStation.getStackInSlot(TileEntityResearchStation.ALCHENOMICON_SLOT_INVENTORY_INDEX); + if (Minecraft.getMinecraft().gameSettings.fancyGraphics && alchenomicon != null) { EntityItem ghostEntityItem = new EntityItem(tileEntityResearchStation.getWorldObj()); ghostEntityItem.hoverStart = 0.0F; - ghostEntityItem.setEntityItemStack(tome); + ghostEntityItem.setEntityItemStack(alchenomicon); GL11.glTranslated(x + 0.6F, y + 1.015625F, z + 0.35F); GL11.glRotatef(90F, 1.0F, 0.0F, 0.0F); diff --git a/src/main/java/com/pahimar/ee3/command/CommandAdmin.java b/src/main/java/com/pahimar/ee3/command/CommandAdmin.java new file mode 100644 index 00000000..3ca854b5 --- /dev/null +++ b/src/main/java/com/pahimar/ee3/command/CommandAdmin.java @@ -0,0 +1,38 @@ +package com.pahimar.ee3.command; + +import com.pahimar.ee3.EquivalentExchange3; +import com.pahimar.ee3.reference.GUIs; +import com.pahimar.ee3.reference.Messages; +import com.pahimar.ee3.reference.Names; +import net.minecraft.command.ICommandSender; +import net.minecraft.entity.player.EntityPlayer; + +public class CommandAdmin extends CommandEE +{ + + @Override + public String getCommandName() + { + return Names.Commands.ADMIN_PANEL; + } + + @Override + public int getRequiredPermissionLevel() + { + return 2; + } + + @Override + public String getCommandUsage(ICommandSender commandSender) + { + return Messages.Commands.ADMIN_USAGE; + } + + @Override + public void processCommand(ICommandSender commandSender, String[] args) + { + EntityPlayer entityPlayer = (EntityPlayer) commandSender; + + entityPlayer.openGui(EquivalentExchange3.instance, GUIs.ADMIN_PANEL.ordinal(), entityPlayer.worldObj, (int) entityPlayer.posX, (int) entityPlayer.posY, (int) entityPlayer.posZ); + } +} diff --git a/src/main/java/com/pahimar/ee3/command/CommandEE.java b/src/main/java/com/pahimar/ee3/command/CommandEE.java index b7936d7a..27584c4e 100644 --- a/src/main/java/com/pahimar/ee3/command/CommandEE.java +++ b/src/main/java/com/pahimar/ee3/command/CommandEE.java @@ -82,6 +82,7 @@ public class CommandEE extends CommandBase modCommands.add(new CommandSetItemNotRecoverable()); modCommands.add(new CommandRunTest()); modCommands.add(new CommandDebug()); + modCommands.add(new CommandAdmin()); for (CommandBase commandBase : modCommands) { diff --git a/src/main/java/com/pahimar/ee3/handler/CraftingHandler.java b/src/main/java/com/pahimar/ee3/handler/CraftingHandler.java index 67f67b14..7bdc6f19 100644 --- a/src/main/java/com/pahimar/ee3/handler/CraftingHandler.java +++ b/src/main/java/com/pahimar/ee3/handler/CraftingHandler.java @@ -19,8 +19,5 @@ public class CraftingHandler if (event.crafting.getItem() instanceof IOwnable) { ItemHelper.setOwner(event.crafting, event.player); } - - // TODO Conversion of deprecated alchemical dusts to shards of minium with appropriate energy values - // https://github.com/pahimar/Equivalent-Exchange-3/issues/1020 } } diff --git a/src/main/java/com/pahimar/ee3/handler/GuiHandler.java b/src/main/java/com/pahimar/ee3/handler/GuiHandler.java index 7bfabf76..7015a191 100644 --- a/src/main/java/com/pahimar/ee3/handler/GuiHandler.java +++ b/src/main/java/com/pahimar/ee3/handler/GuiHandler.java @@ -27,9 +27,9 @@ public class GuiHandler implements IGuiHandler { return new ContainerAlchemicalBag(entityPlayer, new InventoryAlchemicalBag(entityPlayer.getHeldItem())); } - else if (id == GUIs.ALCHEMICAL_TOME.ordinal()) + else if (id == GUIs.ALCHENOMICON.ordinal()) { - return new ContainerAlchemicalTome(entityPlayer, entityPlayer.getHeldItem()); + return new ContainerAlchenomicon(entityPlayer, entityPlayer.getHeldItem()); } else if (id == GUIs.CALCINATOR.ordinal()) { @@ -65,6 +65,10 @@ public class GuiHandler implements IGuiHandler { return new ContainerSymbolSelection(); } + else if (id == GUIs.ADMIN_PANEL.ordinal()) + { + return new ContainerAdminPanel(entityPlayer.inventory); + } return null; } @@ -86,9 +90,9 @@ public class GuiHandler implements IGuiHandler { return new GuiAlchemicalBag(entityPlayer, new InventoryAlchemicalBag(entityPlayer.getHeldItem())); } - else if (id == GUIs.ALCHEMICAL_TOME.ordinal()) + else if (id == GUIs.ALCHENOMICON.ordinal()) { - return new GuiAlchemicalTome(entityPlayer.inventory, entityPlayer.getHeldItem()); + return new GuiAlchenomicon(entityPlayer.inventory, entityPlayer.getHeldItem()); } else if (id == GUIs.CALCINATOR.ordinal()) { @@ -124,6 +128,10 @@ public class GuiHandler implements IGuiHandler { return new GuiSymbolSelection(); } + else if (id == GUIs.ADMIN_PANEL.ordinal()) + { + return new GuiAdminPanel(entityPlayer.inventory); + } return null; } diff --git a/src/main/java/com/pahimar/ee3/init/ModItems.java b/src/main/java/com/pahimar/ee3/init/ModItems.java index 33cee3c2..bb968ae4 100644 --- a/src/main/java/com/pahimar/ee3/init/ModItems.java +++ b/src/main/java/com/pahimar/ee3/init/ModItems.java @@ -18,7 +18,7 @@ public class ModItems public static final ItemEE alchemicalUpgrade = new ItemAlchemicalInventoryUpgrade(); public static final ItemEE chalk = new ItemChalk(); public static final ItemEE diviningRod = new ItemDiviningRod(); - public static final ItemEE alchemicalTome = new ItemAlchemicalTome(); + public static final ItemEE alchenomicon = new ItemAlchenomicon(); public static final ItemEE matter = new ItemMatter(); public static final ItemEE gem = new ItemGem(); public static final ItemEE lootBall = new ItemLootBall(); @@ -49,7 +49,7 @@ public class ModItems GameRegistry.registerItem(chalk, Names.Items.CHALK); GameRegistry.registerItem(alchemicalUpgrade, Names.Items.ALCHEMICAL_UPGRADE); GameRegistry.registerItem(diviningRod, Names.Items.DIVINING_ROD); - GameRegistry.registerItem(alchemicalTome, Names.Items.ALCHEMICAL_TOME); + GameRegistry.registerItem(alchenomicon, Names.Items.ALCHENOMICON, Names.Items.ALCHEMICAL_TOME); GameRegistry.registerItem(matter, Names.Items.MATTER); GameRegistry.registerItem(gem, Names.Items.GEM); GameRegistry.registerItem(lootBall, Names.Items.LOOT_BALL); diff --git a/src/main/java/com/pahimar/ee3/init/Recipes.java b/src/main/java/com/pahimar/ee3/init/Recipes.java index b4f343e6..c86980e8 100644 --- a/src/main/java/com/pahimar/ee3/init/Recipes.java +++ b/src/main/java/com/pahimar/ee3/init/Recipes.java @@ -18,9 +18,6 @@ public class Recipes private static void initModRecipes() { - GameRegistry.addShapelessRecipe(new ItemStack(ModItems.shardMinium, 1, 0), new ItemStack(ModItems.alchemicalDust, 1, 1)); - GameRegistry.addShapelessRecipe(new ItemStack(ModItems.shardMinium, 1, 0), new ItemStack(ModItems.alchemicalDust, 1, 2)); - GameRegistry.addShapedRecipe(new ItemStack(ModBlocks.alchemicalFuelBlock, 1, 0), "fff", "fff", "fff", 'f', new ItemStack(ModItems.alchemicalFuel, 1, 0)); GameRegistry.addShapedRecipe(new ItemStack(ModBlocks.alchemicalFuelBlock, 1, 1), "fff", "fff", "fff", 'f', new ItemStack(ModItems.alchemicalFuel, 1, 1)); GameRegistry.addShapedRecipe(new ItemStack(ModBlocks.alchemicalFuelBlock, 1, 2), "fff", "fff", "fff", 'f', new ItemStack(ModItems.alchemicalFuel, 1, 2)); @@ -88,8 +85,8 @@ public class Recipes // Minium Stone AludelRecipeManager.getInstance().addRecipe(new ItemStack(ModItems.stoneMinium), new ItemStack(ModItems.stoneInert), new ItemStack(ModItems.alchemicalDust, 8, 3)); - // Tome of Alchemical Knowledge - AludelRecipeManager.getInstance().addRecipe(new ItemStack(ModItems.alchemicalTome), new ItemStack(Items.book), new ItemStack(ModItems.alchemicalDust, 1, 3)); + // Alchenomicon + AludelRecipeManager.getInstance().addRecipe(new ItemStack(ModItems.alchenomicon), new ItemStack(Items.book), new ItemStack(ModItems.alchemicalDust, 1, 3)); // Alchemical bags AludelRecipeManager.getInstance().addRecipe(new ItemStack(ModItems.alchemicalBag, 1, 0), new ItemStack(Blocks.wool, 1, OreDictionary.WILDCARD_VALUE), new ItemStack(ModItems.alchemicalDust, 8, 1)); diff --git a/src/main/java/com/pahimar/ee3/inventory/ContainerAdminPanel.java b/src/main/java/com/pahimar/ee3/inventory/ContainerAdminPanel.java new file mode 100644 index 00000000..66586105 --- /dev/null +++ b/src/main/java/com/pahimar/ee3/inventory/ContainerAdminPanel.java @@ -0,0 +1,34 @@ +package com.pahimar.ee3.inventory; + +import com.pahimar.ee3.inventory.element.IElementButtonHandler; +import com.pahimar.ee3.inventory.element.IElementTextFieldHandler; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; + +public class ContainerAdminPanel extends ContainerEE implements IElementButtonHandler, IElementTextFieldHandler +{ + + public ContainerAdminPanel(InventoryPlayer inventoryPlayer) + { + + } + + @Override + public boolean canInteractWith(EntityPlayer entityPlayer) + { + // TODO Check if the player is Admin + return true; + } + + @Override + public void handleElementButtonClick(String elementName, int mouseButton) + { + + } + + @Override + public void handleElementTextFieldUpdate(String elementName, String updatedText) + { + + } +} diff --git a/src/main/java/com/pahimar/ee3/inventory/ContainerAlchemicalTome.java b/src/main/java/com/pahimar/ee3/inventory/ContainerAlchenomicon.java similarity index 84% rename from src/main/java/com/pahimar/ee3/inventory/ContainerAlchemicalTome.java rename to src/main/java/com/pahimar/ee3/inventory/ContainerAlchenomicon.java index 7f7f0741..2243b4a9 100644 --- a/src/main/java/com/pahimar/ee3/inventory/ContainerAlchemicalTome.java +++ b/src/main/java/com/pahimar/ee3/inventory/ContainerAlchenomicon.java @@ -2,7 +2,7 @@ package com.pahimar.ee3.inventory; import com.pahimar.ee3.inventory.element.IElementButtonHandler; import com.pahimar.ee3.inventory.element.IElementTextFieldHandler; -import com.pahimar.ee3.item.ItemAlchemicalTome; +import com.pahimar.ee3.item.ItemAlchenomicon; import com.pahimar.ee3.knowledge.TransmutationKnowledgeRegistry; import com.pahimar.ee3.reference.Comparators; import com.pahimar.ee3.util.FilterUtils; @@ -19,9 +19,9 @@ import java.util.List; import java.util.TreeSet; import java.util.UUID; -public class ContainerAlchemicalTome extends ContainerEE implements IElementButtonHandler, IElementTextFieldHandler +public class ContainerAlchenomicon extends ContainerEE implements IElementButtonHandler, IElementTextFieldHandler { - private final InventoryAlchemicalTome inventoryAlchemicalTome; + private final InventoryAlchenomicon inventoryAlchenomicon; private int pageOffset, maxPageOffset; private String searchTerm; private boolean requiresUpdate = false; @@ -29,17 +29,17 @@ public class ContainerAlchemicalTome extends ContainerEE implements IElementButt private final static int MAX_ROW_INDEX = 8; private final static int MAX_COLUMN_INDEX = 5; - public ContainerAlchemicalTome(EntityPlayer entityPlayer, ItemStack itemStack) + public ContainerAlchenomicon(EntityPlayer entityPlayer, ItemStack itemStack) { TreeSet knownTransmutations = new TreeSet(Comparators.displayNameComparator); - if (itemStack.getItem() instanceof ItemAlchemicalTome && ItemHelper.hasOwnerUUID(itemStack)) + if (itemStack.getItem() instanceof ItemAlchenomicon && ItemHelper.hasOwnerUUID(itemStack)) { UUID ownerUUID = ItemHelper.getOwnerUUID(itemStack); knownTransmutations.addAll(TransmutationKnowledgeRegistry.getInstance().getPlayersKnownTransmutations(ownerUUID)); } - inventoryAlchemicalTome = new InventoryAlchemicalTome(knownTransmutations); + inventoryAlchenomicon = new InventoryAlchenomicon(knownTransmutations); pageOffset = 0; maxPageOffset = knownTransmutations.size() / 80; @@ -48,7 +48,7 @@ public class ContainerAlchemicalTome extends ContainerEE implements IElementButt { for (int columnIndex = 0; columnIndex < MAX_COLUMN_INDEX; ++columnIndex) { - this.addSlotToContainer(new Slot(inventoryAlchemicalTome, i, 18 + columnIndex * 20, 18 + rowIndex * 19) + this.addSlotToContainer(new Slot(inventoryAlchenomicon, i, 18 + columnIndex * 20, 18 + rowIndex * 19) { @Override public boolean canTakeStack(EntityPlayer player) @@ -72,7 +72,7 @@ public class ContainerAlchemicalTome extends ContainerEE implements IElementButt { for (int columnIndex = 0; columnIndex < MAX_COLUMN_INDEX; ++columnIndex) { - this.addSlotToContainer(new Slot(inventoryAlchemicalTome, i, 140 + columnIndex * 20, 18 + rowIndex * 19) + this.addSlotToContainer(new Slot(inventoryAlchenomicon, i, 140 + columnIndex * 20, 18 + rowIndex * 19) { @Override public boolean canTakeStack(EntityPlayer player) @@ -139,12 +139,12 @@ public class ContainerAlchemicalTome extends ContainerEE implements IElementButt public int getInventorySize() { - return inventoryAlchemicalTome.getSizeInventory(); + return inventoryAlchenomicon.getSizeInventory(); } public int getKnownTransmutationsCount() { - return inventoryAlchemicalTome.getKnownTransmutations().size(); + return inventoryAlchenomicon.getKnownTransmutations().size(); } public int getPageOffset() @@ -188,7 +188,7 @@ public class ContainerAlchemicalTome extends ContainerEE implements IElementButt this.requiresUpdate = true; boolean shouldUpdateInventory = false; ItemStack[] newInventory = new ItemStack[80]; - List filteredList = new ArrayList(FilterUtils.filterByNameContains(inventoryAlchemicalTome.getKnownTransmutations(), searchTerm, Comparators.displayNameComparator)); + List filteredList = new ArrayList(FilterUtils.filterByNameContains(inventoryAlchenomicon.getKnownTransmutations(), searchTerm, Comparators.displayNameComparator)); maxPageOffset = filteredList.size() / 80; if (pageOffset > maxPageOffset) @@ -224,8 +224,8 @@ public class ContainerAlchemicalTome extends ContainerEE implements IElementButt { for (int i = 0; i < 80; i++) { - inventoryAlchemicalTome.setInventorySlotContents(i, newInventory[i]); - inventoryAlchemicalTome.markDirty(); + inventoryAlchenomicon.setInventorySlotContents(i, newInventory[i]); + inventoryAlchenomicon.markDirty(); } } } diff --git a/src/main/java/com/pahimar/ee3/inventory/ContainerResearchStation.java b/src/main/java/com/pahimar/ee3/inventory/ContainerResearchStation.java index 60138b86..c28cc7a9 100644 --- a/src/main/java/com/pahimar/ee3/inventory/ContainerResearchStation.java +++ b/src/main/java/com/pahimar/ee3/inventory/ContainerResearchStation.java @@ -1,6 +1,6 @@ package com.pahimar.ee3.inventory; -import com.pahimar.ee3.item.ItemAlchemicalTome; +import com.pahimar.ee3.item.ItemAlchenomicon; import com.pahimar.ee3.knowledge.AbilityRegistry; import com.pahimar.ee3.tileentity.TileEntityResearchStation; import cpw.mods.fml.relauncher.Side; @@ -36,7 +36,7 @@ public class ContainerResearchStation extends ContainerEE } }); - this.addSlotToContainer(new Slot(tileEntityResearchStation, TileEntityResearchStation.TOME_SLOT_INVENTORY_INDEX, 161, 84) + this.addSlotToContainer(new Slot(tileEntityResearchStation, TileEntityResearchStation.ALCHENOMICON_SLOT_INVENTORY_INDEX, 161, 84) { @Override public int getSlotStackLimit() @@ -47,7 +47,7 @@ public class ContainerResearchStation extends ContainerEE @Override public boolean isItemValid(ItemStack itemStack) { - return itemStack.getItem() instanceof ItemAlchemicalTome; + return itemStack.getItem() instanceof ItemAlchenomicon; } }); @@ -170,16 +170,16 @@ public class ContainerResearchStation extends ContainerEE * be merged into the fuel slot, try to put it in the input * slot. */ - if (slotItemStack.getItem() instanceof ItemAlchemicalTome) + if (slotItemStack.getItem() instanceof ItemAlchenomicon) { - if (!this.mergeItemStack(slotItemStack, TileEntityResearchStation.TOME_SLOT_INVENTORY_INDEX, TileEntityResearchStation.INVENTORY_SIZE, false)) + if (!this.mergeItemStack(slotItemStack, TileEntityResearchStation.ALCHENOMICON_SLOT_INVENTORY_INDEX, TileEntityResearchStation.INVENTORY_SIZE, false)) { return null; } } else { - if (!this.mergeItemStack(slotItemStack, TileEntityResearchStation.ITEM_SLOT_INVENTORY_INDEX, TileEntityResearchStation.TOME_SLOT_INVENTORY_INDEX, false)) + if (!this.mergeItemStack(slotItemStack, TileEntityResearchStation.ITEM_SLOT_INVENTORY_INDEX, TileEntityResearchStation.ALCHENOMICON_SLOT_INVENTORY_INDEX, false)) { return null; } diff --git a/src/main/java/com/pahimar/ee3/inventory/ContainerTransmutationTablet.java b/src/main/java/com/pahimar/ee3/inventory/ContainerTransmutationTablet.java index 7d7a59c2..b77b6f25 100644 --- a/src/main/java/com/pahimar/ee3/inventory/ContainerTransmutationTablet.java +++ b/src/main/java/com/pahimar/ee3/inventory/ContainerTransmutationTablet.java @@ -5,7 +5,7 @@ import com.pahimar.ee3.exchange.EnergyValueRegistry; import com.pahimar.ee3.inventory.element.IElementButtonHandler; import com.pahimar.ee3.inventory.element.IElementSliderHandler; import com.pahimar.ee3.inventory.element.IElementTextFieldHandler; -import com.pahimar.ee3.item.ItemAlchemicalTome; +import com.pahimar.ee3.item.ItemAlchenomicon; import com.pahimar.ee3.item.ItemMiniumStone; import com.pahimar.ee3.item.ItemPhilosophersStone; import com.pahimar.ee3.knowledge.AbilityRegistry; @@ -45,10 +45,10 @@ public class ContainerTransmutationTablet extends ContainerEE implements IElemen this.tileEntityTransmutationTablet = tileEntityTransmutationTablet; TreeSet knownTransmutations = new TreeSet(Comparators.displayNameComparator); - if (tileEntityTransmutationTablet.getStackInSlot(TileEntityTransmutationTablet.ALCHEMICAL_TOME_INDEX) != null) + if (tileEntityTransmutationTablet.getStackInSlot(TileEntityTransmutationTablet.ALCHENOMICON_INDEX) != null) { - ItemStack itemStack = tileEntityTransmutationTablet.getStackInSlot(TileEntityTransmutationTablet.ALCHEMICAL_TOME_INDEX); - if (itemStack.getItem() instanceof ItemAlchemicalTome && ItemHelper.hasOwnerUUID(itemStack)) + ItemStack itemStack = tileEntityTransmutationTablet.getStackInSlot(TileEntityTransmutationTablet.ALCHENOMICON_INDEX); + if (itemStack.getItem() instanceof ItemAlchenomicon && ItemHelper.hasOwnerUUID(itemStack)) { knownTransmutations.addAll(TransmutationKnowledgeRegistry.getInstance().getPlayersKnownTransmutations(ItemHelper.getOwnerUUID(itemStack))); } @@ -81,7 +81,7 @@ public class ContainerTransmutationTablet extends ContainerEE implements IElemen return itemStack.getItem() instanceof ItemMiniumStone || itemStack.getItem() instanceof ItemPhilosophersStone; } }); - this.addSlotToContainer(new SlotAlchemicalTome(this, tileEntityTransmutationTablet, TileEntityTransmutationTablet.ALCHEMICAL_TOME_INDEX, 152, 15)); + this.addSlotToContainer(new SlotAlchenomicon(this, tileEntityTransmutationTablet, TileEntityTransmutationTablet.ALCHENOMICON_INDEX, 152, 15)); for (int i = 0; i < 10; i++) { @@ -292,9 +292,9 @@ public class ContainerTransmutationTablet extends ContainerEE implements IElemen } else { - if (slotItemStack.getItem() instanceof ItemAlchemicalTome) + if (slotItemStack.getItem() instanceof ItemAlchenomicon) { - if (!this.mergeItemStack(slotItemStack, TileEntityTransmutationTablet.ALCHEMICAL_TOME_INDEX, TileEntityTransmutationTablet.INVENTORY_SIZE, false)) + if (!this.mergeItemStack(slotItemStack, TileEntityTransmutationTablet.ALCHENOMICON_INDEX, TileEntityTransmutationTablet.INVENTORY_SIZE, false)) { return null; } @@ -470,13 +470,13 @@ public class ContainerTransmutationTablet extends ContainerEE implements IElemen } return super.slotClick(slot, button, flag, player); } - - private class SlotAlchemicalTome extends Slot + + private class SlotAlchenomicon extends Slot { private ContainerTransmutationTablet containerTransmutationTablet; private TileEntityTransmutationTablet tileEntityTransmutationTablet; - public SlotAlchemicalTome(ContainerTransmutationTablet containerTransmutationTablet, IInventory iInventory, int slotIndex, int x, int y) + public SlotAlchenomicon(ContainerTransmutationTablet containerTransmutationTablet, IInventory iInventory, int slotIndex, int x, int y) { super(iInventory, slotIndex, x, y); this.containerTransmutationTablet = containerTransmutationTablet; @@ -492,7 +492,7 @@ public class ContainerTransmutationTablet extends ContainerEE implements IElemen @Override public boolean isItemValid(ItemStack itemStack) { - return itemStack.getItem() instanceof ItemAlchemicalTome; + return itemStack.getItem() instanceof ItemAlchenomicon; } @Override @@ -503,7 +503,7 @@ public class ContainerTransmutationTablet extends ContainerEE implements IElemen this.containerTransmutationTablet.inventoryTransmutationTablet = new InventoryTransmutationTablet(); this.containerTransmutationTablet.updateInventory(); - if (!this.tileEntityTransmutationTablet.getWorldObj().isRemote && itemStack != null && itemStack.getItem() instanceof ItemAlchemicalTome && ItemHelper.hasOwnerUUID(itemStack)) + if (!this.tileEntityTransmutationTablet.getWorldObj().isRemote && itemStack != null && itemStack.getItem() instanceof ItemAlchenomicon && ItemHelper.hasOwnerUUID(itemStack)) { PacketHandler.INSTANCE.sendToAllAround(new MessageTransmutationKnowledgeUpdate(this.containerTransmutationTablet.tileEntityTransmutationTablet, null), new NetworkRegistry.TargetPoint(this.tileEntityTransmutationTablet.getWorldObj().provider.dimensionId, (double) this.tileEntityTransmutationTablet.xCoord, (double) this.tileEntityTransmutationTablet.yCoord, (double) this.tileEntityTransmutationTablet.zCoord, 5d)); } @@ -514,7 +514,7 @@ public class ContainerTransmutationTablet extends ContainerEE implements IElemen { super.putStack(itemStack); - if (!this.tileEntityTransmutationTablet.getWorldObj().isRemote && itemStack != null && itemStack.getItem() instanceof ItemAlchemicalTome && ItemHelper.hasOwnerUUID(itemStack)) + if (!this.tileEntityTransmutationTablet.getWorldObj().isRemote && itemStack != null && itemStack.getItem() instanceof ItemAlchenomicon && ItemHelper.hasOwnerUUID(itemStack)) { Set knownTransmutations = TransmutationKnowledgeRegistry.getInstance().getPlayersKnownTransmutations(ItemHelper.getOwnerUUID(itemStack)); this.containerTransmutationTablet.inventoryTransmutationTablet = new InventoryTransmutationTablet(knownTransmutations); diff --git a/src/main/java/com/pahimar/ee3/inventory/InventoryAlchemicalTome.java b/src/main/java/com/pahimar/ee3/inventory/InventoryAlchenomicon.java similarity index 94% rename from src/main/java/com/pahimar/ee3/inventory/InventoryAlchemicalTome.java rename to src/main/java/com/pahimar/ee3/inventory/InventoryAlchenomicon.java index 7da12102..4a13140f 100644 --- a/src/main/java/com/pahimar/ee3/inventory/InventoryAlchemicalTome.java +++ b/src/main/java/com/pahimar/ee3/inventory/InventoryAlchenomicon.java @@ -9,12 +9,12 @@ import net.minecraft.item.ItemStack; import java.util.Set; import java.util.TreeSet; -public class InventoryAlchemicalTome implements IInventory +public class InventoryAlchenomicon implements IInventory { private ItemStack[] inventory; private Set knownTransmutations; - public InventoryAlchemicalTome(Set knownTransmutations) + public InventoryAlchenomicon(Set knownTransmutations) { inventory = new ItemStack[80]; if (knownTransmutations != null) @@ -95,7 +95,7 @@ public class InventoryAlchemicalTome implements IInventory @Override public String getInventoryName() { - return Names.Containers.ALCHEMICAL_TOME; + return Names.Containers.ALCHENOMICON; } @Override diff --git a/src/main/java/com/pahimar/ee3/item/ItemAlchemicalTome.java b/src/main/java/com/pahimar/ee3/item/ItemAlchenomicon.java similarity index 81% rename from src/main/java/com/pahimar/ee3/item/ItemAlchemicalTome.java rename to src/main/java/com/pahimar/ee3/item/ItemAlchenomicon.java index 9ce62000..94f1fc60 100644 --- a/src/main/java/com/pahimar/ee3/item/ItemAlchemicalTome.java +++ b/src/main/java/com/pahimar/ee3/item/ItemAlchenomicon.java @@ -15,12 +15,12 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.ChatComponentTranslation; import net.minecraft.world.World; -public class ItemAlchemicalTome extends ItemEE implements IOwnable, IEnergyValueProvider +public class ItemAlchenomicon extends ItemEE implements IOwnable, IEnergyValueProvider { - public ItemAlchemicalTome() + public ItemAlchenomicon() { super(); - this.setUnlocalizedName(Names.Items.ALCHEMICAL_TOME); + this.setUnlocalizedName(Names.Items.ALCHENOMICON); } @Override @@ -41,7 +41,7 @@ public class ItemAlchemicalTome extends ItemEE implements IOwnable, IEnergyValue } else { - entityPlayer.openGui(EquivalentExchange3.instance, GUIs.ALCHEMICAL_TOME.ordinal(), entityPlayer.worldObj, (int) entityPlayer.posX, (int) entityPlayer.posY, (int) entityPlayer.posZ); + entityPlayer.openGui(EquivalentExchange3.instance, GUIs.ALCHENOMICON.ordinal(), entityPlayer.worldObj, (int) entityPlayer.posX, (int) entityPlayer.posY, (int) entityPlayer.posZ); } } @@ -51,6 +51,6 @@ public class ItemAlchemicalTome extends ItemEE implements IOwnable, IEnergyValue @Override public EnergyValue getEnergyValue(ItemStack itemStack) { - return EnergyValueRegistryProxy.getEnergyValue(ModItems.alchemicalTome, true); + return EnergyValueRegistryProxy.getEnergyValue(ModItems.alchenomicon, true); } } diff --git a/src/main/java/com/pahimar/ee3/item/ItemMiniumShard.java b/src/main/java/com/pahimar/ee3/item/ItemMiniumShard.java index 7f1c6c32..0cf51371 100644 --- a/src/main/java/com/pahimar/ee3/item/ItemMiniumShard.java +++ b/src/main/java/com/pahimar/ee3/item/ItemMiniumShard.java @@ -16,9 +16,12 @@ public class ItemMiniumShard extends ItemEE implements IEnergyValueProvider @Override public EnergyValue getEnergyValue(ItemStack itemStack) { - if (itemStack != null && itemStack.hasTagCompound() && itemStack.getTagCompound().hasKey("energyValue")) { - if (Float.compare(itemStack.getTagCompound().getFloat("energyValue"), 0) > 0) - return new EnergyValue(itemStack.getTagCompound().getFloat("energyValue")); + if (itemStack != null && itemStack.hasTagCompound() && itemStack.getTagCompound().hasKey(Names.NBT.ENERGY_VALUE)) + { + if (Float.compare(itemStack.getTagCompound().getFloat(Names.NBT.ENERGY_VALUE), 0) > 0) + { + return new EnergyValue(itemStack.getTagCompound().getFloat(Names.NBT.ENERGY_VALUE)); + } } return null; } diff --git a/src/main/java/com/pahimar/ee3/network/message/MessageTileEntityResearchStation.java b/src/main/java/com/pahimar/ee3/network/message/MessageTileEntityResearchStation.java index 90ae7689..5e069c75 100644 --- a/src/main/java/com/pahimar/ee3/network/message/MessageTileEntityResearchStation.java +++ b/src/main/java/com/pahimar/ee3/network/message/MessageTileEntityResearchStation.java @@ -13,7 +13,7 @@ import net.minecraft.tileentity.TileEntity; public class MessageTileEntityResearchStation implements IMessage, IMessageHandler { public int x, y, z; - public ItemStack tomeItemStack; + public ItemStack alchenomiconItemStack; public MessageTileEntityResearchStation() { @@ -24,7 +24,7 @@ public class MessageTileEntityResearchStation implements IMessage, IMessageHandl this.x = tileEntityResearchStation.xCoord; this.y = tileEntityResearchStation.yCoord; this.z = tileEntityResearchStation.zCoord; - this.tomeItemStack = tileEntityResearchStation.getStackInSlot(TileEntityResearchStation.TOME_SLOT_INVENTORY_INDEX); + this.alchenomiconItemStack = tileEntityResearchStation.getStackInSlot(TileEntityResearchStation.ALCHENOMICON_SLOT_INVENTORY_INDEX); } @Override @@ -33,7 +33,7 @@ public class MessageTileEntityResearchStation implements IMessage, IMessageHandl this.x = buf.readInt(); this.y = buf.readInt(); this.z = buf.readInt(); - tomeItemStack = ByteBufUtils.readItemStack(buf); + alchenomiconItemStack = ByteBufUtils.readItemStack(buf); } @Override @@ -42,7 +42,7 @@ public class MessageTileEntityResearchStation implements IMessage, IMessageHandl buf.writeInt(x); buf.writeInt(y); buf.writeInt(z); - ByteBufUtils.writeItemStack(buf, tomeItemStack); + ByteBufUtils.writeItemStack(buf, alchenomiconItemStack); } @Override @@ -52,7 +52,7 @@ public class MessageTileEntityResearchStation implements IMessage, IMessageHandl if (tileEntity instanceof TileEntityResearchStation) { - ((TileEntityResearchStation) tileEntity).setInventorySlotContents(TileEntityResearchStation.TOME_SLOT_INVENTORY_INDEX, message.tomeItemStack); + ((TileEntityResearchStation) tileEntity).setInventorySlotContents(TileEntityResearchStation.ALCHENOMICON_SLOT_INVENTORY_INDEX, message.alchenomiconItemStack); } return null; @@ -61,6 +61,6 @@ public class MessageTileEntityResearchStation implements IMessage, IMessageHandl @Override public String toString() { - return String.format("MessageTileEntityResearchStation - x:%s, y:%s, z:%s, tome:%s", x, y, z, tomeItemStack.toString()); + return String.format("MessageTileEntityResearchStation - x:%s, y:%s, z:%s, tome:%s", x, y, z, alchenomiconItemStack.toString()); } } diff --git a/src/main/java/com/pahimar/ee3/reference/GUIs.java b/src/main/java/com/pahimar/ee3/reference/GUIs.java index 2fc575e9..c931ac5f 100644 --- a/src/main/java/com/pahimar/ee3/reference/GUIs.java +++ b/src/main/java/com/pahimar/ee3/reference/GUIs.java @@ -10,8 +10,9 @@ public enum GUIs GLASS_BELL, RESEARCH_STATION, AUGMENTATION_TABLE, - ALCHEMICAL_TOME, + ALCHENOMICON, TRANSMUTATION_TABLET, SYMBOL_SELECTION, - TRANSMUTATION_ARRAY + TRANSMUTATION_ARRAY, + ADMIN_PANEL } diff --git a/src/main/java/com/pahimar/ee3/reference/Messages.java b/src/main/java/com/pahimar/ee3/reference/Messages.java index 88dd18d9..44655a49 100644 --- a/src/main/java/com/pahimar/ee3/reference/Messages.java +++ b/src/main/java/com/pahimar/ee3/reference/Messages.java @@ -13,7 +13,7 @@ public final class Messages { private static final String GUI_PREFIX = "container.ee3:"; - public static final String NO_KNOWN_TRANSMUTATIONS = GUI_PREFIX + "alchemicalTome.noTransmutationsKnown"; + public static final String NO_KNOWN_TRANSMUTATIONS = GUI_PREFIX + "alchenomicon.noTransmutationsKnown"; } public static final class Tooltips { @@ -104,6 +104,8 @@ public final class Messages { public static final String RUN_TEST_USAGE = COMMAND_PREFIX + Names.Commands.RUN_TEST + ".usage"; public static final String RUN_TESTS_SUCCESS = COMMAND_PREFIX + Names.Commands.RUN_TEST + ".success"; public static final String RUN_TESTS_NOT_FOUND = COMMAND_PREFIX + Names.Commands.RUN_TEST + ".notfound"; + + public static final String ADMIN_USAGE = COMMAND_PREFIX + Names.Commands.ADMIN_PANEL + ".usage"; } public static final class Configuration { diff --git a/src/main/java/com/pahimar/ee3/reference/Names.java b/src/main/java/com/pahimar/ee3/reference/Names.java index 5621feed..beefba2e 100644 --- a/src/main/java/com/pahimar/ee3/reference/Names.java +++ b/src/main/java/com/pahimar/ee3/reference/Names.java @@ -38,6 +38,7 @@ public class Names public static final String ALCHEMICAL_UPGRADE = "alchemicalUpgrade"; public static final String[] ALCHEMICAL_UPGRADE_SUBTYPES = {"verdant", "azure", "minium"}; public static final String DIVINING_ROD = "diviningRod"; + public static final String ALCHENOMICON = "alchenomicon"; public static final String ALCHEMICAL_TOME = "alchemicalTome"; public static final String MATTER = "matter"; public static final String[] MATTER_SUBTYPES = {"Proto", "Dark", "Corporeal", "Kinetic", "Temporal", "Essentia", "Amorphous", "Void", "Omni"}; @@ -106,6 +107,7 @@ public class Names public static final String OWNER = "owner"; public static final String OWNER_UUID_MOST_SIG = "ownerUUIDMostSig"; public static final String OWNER_UUID_LEAST_SIG = "ownerUUIDLeastSig"; + public static final String ENERGY_VALUE = "energyValue"; } public static final class Containers @@ -119,7 +121,7 @@ public class Names public static final String RESEARCH_STATION = "container.ee3:" + Blocks.RESEARCH_STATION; public static final String GLASS_BELL = "container.ee3:" + Blocks.GLASS_BELL; public static final String AUGMENTATION_TABLE = "container.ee3:" + Blocks.AUGMENTATION_TABLE; - public static final String ALCHEMICAL_TOME = "container.ee3:" + Items.ALCHEMICAL_TOME; + public static final String ALCHENOMICON = "container.ee3:" + Items.ALCHENOMICON; public static final String TRANSMUTATION_TABLET = "container.ee3:" + Blocks.TRANSMUTATION_TABLET; } @@ -156,6 +158,7 @@ public class Names public static final String SET_ITEM_NOT_RECOVERABLE = "set-item-not-recoverable"; public static final String RUN_TEST = "run-tests"; public static final String DEBUG = "debug"; + public static final String ADMIN_PANEL = "admin"; } public static final class AlchemyArrays diff --git a/src/main/java/com/pahimar/ee3/reference/Textures.java b/src/main/java/com/pahimar/ee3/reference/Textures.java index 157cd633..95479284 100644 --- a/src/main/java/com/pahimar/ee3/reference/Textures.java +++ b/src/main/java/com/pahimar/ee3/reference/Textures.java @@ -44,11 +44,12 @@ public final class Textures public static final ResourceLocation RESEARCH_STATION_GYLPH_2 = ResourceLocationHelper.getResourceLocation(GUI_TEXTURE_LOCATION + "researchStation_Glyph2.png"); public static final ResourceLocation AUGMENTATION_TABLE = ResourceLocationHelper.getResourceLocation(GUI_TEXTURE_LOCATION + "augmentationTable.png"); public static final ResourceLocation PORTABLE_CRAFTING = new ResourceLocation("textures/gui/container/crafting_table.png"); - public static final ResourceLocation ALCHEMICAL_TOME = ResourceLocationHelper.getResourceLocation(GUI_TEXTURE_LOCATION + "alchemicalTome.png"); + public static final ResourceLocation ALCHENOMICON = ResourceLocationHelper.getResourceLocation(GUI_TEXTURE_LOCATION + "alchenomicon.png"); public static final ResourceLocation TRANSMUTATION_ARRAY_1 = ResourceLocationHelper.getResourceLocation(GUI_TEXTURE_LOCATION + "transmutationArray_1.png"); public static final ResourceLocation TRANSMUTATION_ARRAY_3 = ResourceLocationHelper.getResourceLocation(GUI_TEXTURE_LOCATION + "transmutationArray_3.png"); public static final ResourceLocation TRANSMUTATION_ARRAY_5 = ResourceLocationHelper.getResourceLocation(GUI_TEXTURE_LOCATION + "transmutationArray_5.png"); public static final ResourceLocation TRANSMUTATION_TABLET = ResourceLocationHelper.getResourceLocation(GUI_TEXTURE_LOCATION + "transmutationTablet.png"); + public static final ResourceLocation ADMIN_PANEL = ResourceLocationHelper.getResourceLocation(GUI_TEXTURE_LOCATION + "adminPanel.png"); public static final class Elements { @@ -62,6 +63,7 @@ public final class Textures public static final ResourceLocation BUTTON_HOVER = ResourceLocationHelper.getResourceLocation(ELEMENT_TEXTURE_LOCATION + "buttonHover.png"); public static final ResourceLocation BUTTON_SORT_OPTION = ResourceLocationHelper.getResourceLocation(ELEMENT_TEXTURE_LOCATION + "buttonSortOption.png"); public static final ResourceLocation BUTTON_SORT_ORDER = ResourceLocationHelper.getResourceLocation(ELEMENT_TEXTURE_LOCATION + "buttonSortOrder.png"); + public static final ResourceLocation BUTTON = ResourceLocationHelper.getResourceLocation(ELEMENT_TEXTURE_LOCATION + "button.png"); } } diff --git a/src/main/java/com/pahimar/ee3/tileentity/TileEntityResearchStation.java b/src/main/java/com/pahimar/ee3/tileentity/TileEntityResearchStation.java index 0c63d847..2bcffbaa 100644 --- a/src/main/java/com/pahimar/ee3/tileentity/TileEntityResearchStation.java +++ b/src/main/java/com/pahimar/ee3/tileentity/TileEntityResearchStation.java @@ -21,7 +21,7 @@ public class TileEntityResearchStation extends TileEntityEE implements IInventor { public static final int INVENTORY_SIZE = 2; public static final int ITEM_SLOT_INVENTORY_INDEX = 0; - public static final int TOME_SLOT_INVENTORY_INDEX = 1; + public static final int ALCHENOMICON_SLOT_INVENTORY_INDEX = 1; public int itemLearnTime; public boolean isItemKnown; @@ -210,10 +210,10 @@ public class TileEntityResearchStation extends TileEntityEE implements IInventor private boolean canLearnItemStack() { - ItemStack alchemicalTome = inventory[TOME_SLOT_INVENTORY_INDEX]; - UUID playerUUID = ItemHelper.getOwnerUUID(alchemicalTome); + ItemStack alchenomicon = inventory[ALCHENOMICON_SLOT_INVENTORY_INDEX]; + UUID playerUUID = ItemHelper.getOwnerUUID(alchenomicon); - if (alchemicalTome != null && playerUUID != null) + if (alchenomicon != null && playerUUID != null) { return TransmutationKnowledgeRegistryProxy.canPlayerLearn(playerUUID, inventory[ITEM_SLOT_INVENTORY_INDEX]); } @@ -223,10 +223,10 @@ public class TileEntityResearchStation extends TileEntityEE implements IInventor private boolean isItemStackKnown() { - ItemStack alchemicalTome = inventory[TOME_SLOT_INVENTORY_INDEX]; - UUID playerUUID = ItemHelper.getOwnerUUID(alchemicalTome); + ItemStack alchenomicon = inventory[ALCHENOMICON_SLOT_INVENTORY_INDEX]; + UUID playerUUID = ItemHelper.getOwnerUUID(alchenomicon); - if (alchemicalTome != null && playerUUID != null) + if (alchenomicon != null && playerUUID != null) { return TransmutationKnowledgeRegistryProxy.doesPlayerKnow(playerUUID, inventory[ITEM_SLOT_INVENTORY_INDEX]); } @@ -238,7 +238,7 @@ public class TileEntityResearchStation extends TileEntityEE implements IInventor { if (this.canLearnItemStack()) { - TransmutationKnowledgeRegistryProxy.teachPlayer(ItemHelper.getOwnerUUID(inventory[TOME_SLOT_INVENTORY_INDEX]), inventory[ITEM_SLOT_INVENTORY_INDEX]); + TransmutationKnowledgeRegistryProxy.teachPlayer(ItemHelper.getOwnerUUID(inventory[ALCHENOMICON_SLOT_INVENTORY_INDEX]), inventory[ITEM_SLOT_INVENTORY_INDEX]); this.inventory[ITEM_SLOT_INVENTORY_INDEX].stackSize--; diff --git a/src/main/java/com/pahimar/ee3/tileentity/TileEntityTransmutationTablet.java b/src/main/java/com/pahimar/ee3/tileentity/TileEntityTransmutationTablet.java index c4a3c60b..0e1d2ccb 100644 --- a/src/main/java/com/pahimar/ee3/tileentity/TileEntityTransmutationTablet.java +++ b/src/main/java/com/pahimar/ee3/tileentity/TileEntityTransmutationTablet.java @@ -4,7 +4,7 @@ import com.pahimar.ee3.api.exchange.EnergyValue; import com.pahimar.ee3.api.exchange.EnergyValueRegistryProxy; import com.pahimar.ee3.block.BlockAshInfusedStoneSlab; import com.pahimar.ee3.exchange.EnergyValueRegistry; -import com.pahimar.ee3.item.ItemAlchemicalTome; +import com.pahimar.ee3.item.ItemAlchenomicon; import com.pahimar.ee3.item.ItemMiniumStone; import com.pahimar.ee3.item.ItemPhilosophersStone; import com.pahimar.ee3.knowledge.AbilityRegistry; @@ -34,7 +34,7 @@ public class TileEntityTransmutationTablet extends TileEntityEE implements ISide public static final int ITEM_INPUT_7 = 6; public static final int ITEM_INPUT_8 = 7; public static final int STONE_INDEX = 8; - public static final int ALCHEMICAL_TOME_INDEX = 9; + public static final int ALCHENOMICON_INDEX = 9; private EnergyValue storedEnergyValue; private EnergyValue availableEnergyValue; @@ -322,7 +322,7 @@ public class TileEntityTransmutationTablet extends TileEntityEE implements ISide { return true; } - else if (slotIndex == ALCHEMICAL_TOME_INDEX && itemStack.getItem() instanceof ItemAlchemicalTome) + else if (slotIndex == ALCHENOMICON_INDEX && itemStack.getItem() instanceof ItemAlchenomicon) { return true; } diff --git a/src/main/resources/assets/ee3/lang/en_US.lang b/src/main/resources/assets/ee3/lang/en_US.lang index c5f5d196..4ab11adf 100644 --- a/src/main/resources/assets/ee3/lang/en_US.lang +++ b/src/main/resources/assets/ee3/lang/en_US.lang @@ -39,7 +39,7 @@ item.ee3:stonePhilosophers.name=Philosopher's Stone [WIP] item.ee3:alchemicalUpgrade.verdant.name=Verdant Upgrade [WIP] item.ee3:alchemicalUpgrade.azure.name=Azure Upgrade [WIP] item.ee3:alchemicalUpgrade.minium.name=Minium Upgrade [WIP] -item.ee3:alchemicalTome.name=Alchenomicon +item.ee3:alchenomicon.name=Alchenomicon item.ee3:matterProto.name=Proto Matter [WIP] item.ee3:matterDark.name=Dark Matter [WIP] item.ee3:matterOmni.name=Omni Matter [WIP] @@ -114,8 +114,8 @@ container.ee3:calcinator=Calcinator container.ee3:glassBell=Glass Bell container.ee3:researchStation=Research Station container.ee3:augmentationTable=Augmentation Table [WIP] -container.ee3:alchemicalTome=Alchenomicon -container.ee3:alchemicalTome.noTransmutationsKnown=No known transmutations +container.ee3:alchenomicon=Alchenomicon +container.ee3:alchenomicon.noTransmutationsKnown=No known transmutations container.ee3:transmutationAlchemyArray=Transmutation Square [WIP] # NEI @@ -167,6 +167,7 @@ commands.ee3.set-item-not-recoverable.success=%s set %s as not being able to hav commands.ee3.run-tests.usage=/ee3 run-tests commands.ee3.run-tests.success=Executed test file '%s', check server log for results commands.ee3.run-tests.notfound=Test file '%s' was not found! +commands.ee3.admin.usage=/ee3 admin # Tooltips tooltip.ee3:belongsTo=Belongs to %s diff --git a/src/main/resources/assets/ee3/textures/gui/adminPanel.png b/src/main/resources/assets/ee3/textures/gui/adminPanel.png new file mode 100644 index 0000000000000000000000000000000000000000..1786cad55a2787b06c4b089ac1aafe75b6e061f7 GIT binary patch literal 3849 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 Q`&9v496cPK!9uS87gkEJi2wiq literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ee3/textures/gui/elements/checkbox_16px.png b/src/main/resources/assets/ee3/textures/gui/elements/checkbox_16px.png new file mode 100644 index 0000000000000000000000000000000000000000..a19be6d19b242b123e83df84170648d2fc61b0a8 GIT binary patch literal 4502 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ee3/textures/gui/elements/checkbox_16px.xcf b/src/main/resources/assets/ee3/textures/gui/elements/checkbox_16px.xcf new file mode 100644 index 0000000000000000000000000000000000000000..63a891263c60081e8ffe876e8e35025b213ab0a4 GIT binary patch literal 11243 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 UjoaOeynB&%Z+2}PJ`VK%0p+)dF8}}l literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ee3/textures/items/alchemicalTome.png b/src/main/resources/assets/ee3/textures/items/alchenomicon.png similarity index 100% rename from src/main/resources/assets/ee3/textures/items/alchemicalTome.png rename to src/main/resources/assets/ee3/textures/items/alchenomicon.png diff --git a/src/main/resources/assets/ee3/textures/items/destructionCatalyst.png b/src/main/resources/assets/ee3/textures/items/destructionCatalyst.png new file mode 100644 index 0000000000000000000000000000000000000000..24d931448eefec3943c8500e6d37e601a74ee0ba GIT binary patch literal 19105 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 Ncka>7{>|yoe*qZ#cf9}r literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ee3/textures/xcf/gui/adminPanel.xcf b/src/main/resources/assets/ee3/textures/xcf/gui/adminPanel.xcf new file mode 100644 index 0000000000000000000000000000000000000000..d5a8dd938bac64aff6ccc8268837289520185ff4 GIT binary patch literal 27374 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 ZVA*QXpud24RvsR=nXVx?p->H>e**@ePzwM6 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ee3/textures/xcf/gui/elements/button.xcf b/src/main/resources/assets/ee3/textures/xcf/gui/elements/button.xcf new file mode 100644 index 0000000000000000000000000000000000000000..f6931a82d1378b1e4063c5685c8daa4f9da57628 GIT binary patch literal 12915 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