From 3df2868fe33c581bc674746a5ec18282759c7396 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Thu, 21 Jul 2016 18:35:38 +0200 Subject: [PATCH] Added the ability to change between RF and Tesla display modes in machines --- .../mod/event/ClientEvents.java | 11 +++- .../mod/inventory/gui/EnergyDisplay.java | 56 ++++++++++++++++-- .../mod/inventory/gui/GuiCanolaPress.java | 6 ++ .../mod/inventory/gui/GuiCoalGenerator.java | 7 +++ .../mod/inventory/gui/GuiCoffeeMachine.java | 7 +++ .../inventory/gui/GuiDirectionalBreaker.java | 7 +++ .../mod/inventory/gui/GuiEnergizer.java | 7 +++ .../mod/inventory/gui/GuiEnervator.java | 7 +++ .../mod/inventory/gui/GuiFurnaceDouble.java | 7 +++ .../mod/inventory/gui/GuiGrinder.java | 7 +++ .../mod/inventory/gui/GuiOilGenerator.java | 7 +++ .../mod/inventory/gui/GuiRepairer.java | 7 +++ .../textures/gui/guiInventory.png | Bin 5023 -> 6503 bytes 13 files changed, 127 insertions(+), 9 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/ClientEvents.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/ClientEvents.java index fe3c88ca0..8741a756e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/ClientEvents.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/ClientEvents.java @@ -46,7 +46,7 @@ public class ClientEvents{ private static final String ADVANCED_INFO_TEXT_PRE = TextFormatting.DARK_GRAY+" "; private static final String ADVANCED_INFO_HEADER_PRE = TextFormatting.GRAY+" -"; - private static final EnergyDisplay ENERGY_DISPLAY = new EnergyDisplay(0, 0, null); + private static EnergyDisplay energyDisplay; public ClientEvents(){ MinecraftForge.EVENT_BUS.register(this); @@ -175,8 +175,13 @@ public class ClientEvents{ IEnergyDisplay display = (IEnergyDisplay)tileHit; if(!display.needsHoldShift() || player.isSneaking()){ profiler.startSection("EnergyDisplay"); - ENERGY_DISPLAY.setData(2, event.getResolution().getScaledHeight()-96, display.getEnergyStorage(), true, true); - ENERGY_DISPLAY.draw(); + + if(energyDisplay == null){ + energyDisplay = new EnergyDisplay(0, 0, null); + } + energyDisplay.setData(2, event.getResolution().getScaledHeight()-96, display.getEnergyStorage(), true, true); + energyDisplay.draw(); + profiler.endSection(); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/EnergyDisplay.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/EnergyDisplay.java index 7a757339a..9bfd27cbf 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/EnergyDisplay.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/EnergyDisplay.java @@ -11,13 +11,20 @@ package de.ellpeck.actuallyadditions.mod.inventory.gui; import cofh.api.energy.EnergyStorage; +import de.ellpeck.actuallyadditions.mod.data.PlayerData; +import de.ellpeck.actuallyadditions.mod.network.PacketClientToServer; +import de.ellpeck.actuallyadditions.mod.network.PacketHandler; +import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase; import de.ellpeck.actuallyadditions.mod.util.AssetUtil; import de.ellpeck.actuallyadditions.mod.util.StringUtil; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Gui; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.text.TextFormatting; import net.minecraftforge.fml.client.config.GuiUtils; -import java.util.Collections; +import java.util.ArrayList; +import java.util.List; public class EnergyDisplay extends Gui{ @@ -26,6 +33,7 @@ public class EnergyDisplay extends Gui{ private int y; private boolean outline; private boolean drawTextNextTo; + private boolean displayTesla; public EnergyDisplay(int x, int y, EnergyStorage rfReference, boolean outline, boolean drawTextNextTo){ this.setData(x, y, rfReference, outline, drawTextNextTo); @@ -41,6 +49,10 @@ public class EnergyDisplay extends Gui{ this.rfReference = rfReference; this.outline = outline; this.drawTextNextTo = drawTextNextTo; + + if(TileEntityBase.teslaLoaded){ + this.displayTesla = PlayerData.getDataFromPlayer(Minecraft.getMinecraft().thePlayer).theCompound.getBoolean("DisplayTesla"); + } } public void draw(){ @@ -49,6 +61,7 @@ public class EnergyDisplay extends Gui{ int barX = this.x; int barY = this.y; + int vOffset = this.displayTesla ? 85 : 0; if(this.outline){ this.drawTexturedModalRect(this.x, this.y, 52, 163, 26, 93); @@ -56,11 +69,11 @@ public class EnergyDisplay extends Gui{ barX += 4; barY += 4; } - this.drawTexturedModalRect(barX, barY, 18, 171, 18, 85); + this.drawTexturedModalRect(barX, barY, 18, 171-vOffset, 18, 85); if(this.rfReference.getEnergyStored() > 0){ int i = this.rfReference.getEnergyStored()*83/this.rfReference.getMaxEnergyStored(); - this.drawTexturedModalRect(barX+1, barY+84-i, 36, 172, 16, i); + this.drawTexturedModalRect(barX+1, barY+84-i, 36, 172-vOffset, 16, i); } if(this.drawTextNextTo){ @@ -69,13 +82,44 @@ public class EnergyDisplay extends Gui{ } public void drawOverlay(int mouseX, int mouseY){ - if(mouseX >= this.x && mouseY >= this.y && mouseX < this.x+(this.outline ? 26 : 18) && mouseY < this.y+(this.outline ? 93 : 85)){ + if(this.isMouseOver(mouseX, mouseY)){ Minecraft mc = Minecraft.getMinecraft(); - GuiUtils.drawHoveringText(Collections.singletonList(this.getOverlayText()), mouseX, mouseY, mc.displayWidth, mc.displayHeight, -1, mc.fontRendererObj); + + List text = new ArrayList(); + text.add(this.getOverlayText()); + if(TileEntityBase.teslaLoaded){ + text.add(TextFormatting.GRAY+""+TextFormatting.ITALIC+"Click to change mode!"); + } + GuiUtils.drawHoveringText(text, mouseX, mouseY, mc.displayWidth, mc.displayHeight, -1, mc.fontRendererObj); } } + public void onMouseClick(int mouseX, int mouseY, int mouseButton){ + if(mouseButton == 0 && this.isMouseOver(mouseX, mouseY)){ + this.changeDisplayMode(); + } + } + + private boolean isMouseOver(int mouseX, int mouseY){ + return mouseX >= this.x && mouseY >= this.y && mouseX < this.x+(this.outline ? 26 : 18) && mouseY < this.y+(this.outline ? 93 : 85); + } + private String getOverlayText(){ - return this.rfReference.getEnergyStored()+"/"+this.rfReference.getMaxEnergyStored()+" RF"; + return this.rfReference.getEnergyStored()+"/"+this.rfReference.getMaxEnergyStored()+(this.displayTesla ? " Tesla" : " RF"); + } + + private void changeDisplayMode(){ + if(TileEntityBase.teslaLoaded){ + NBTTagCompound data = new NBTTagCompound(); + + this.displayTesla = !this.displayTesla; + data.setBoolean("DisplayTesla", this.displayTesla); + + NBTTagCompound dataToSend = new NBTTagCompound(); + dataToSend.setTag("Data", data); + dataToSend.setInteger("WorldID", Minecraft.getMinecraft().theWorld.provider.getDimension()); + dataToSend.setInteger("PlayerID", Minecraft.getMinecraft().thePlayer.getEntityId()); + PacketHandler.theNetwork.sendToServer(new PacketClientToServer(dataToSend, PacketHandler.CHANGE_PLAYER_DATA_HANDLER)); + } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCanolaPress.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCanolaPress.java index 3e2c0e1c9..ef88091d0 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCanolaPress.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCanolaPress.java @@ -22,6 +22,7 @@ import net.minecraft.util.ResourceLocation; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import java.io.IOException; import java.util.Collections; @SideOnly(Side.CLIENT) @@ -46,6 +47,11 @@ public class GuiCanolaPress extends GuiContainer{ this.fluid = new FluidDisplay(this.guiLeft+116, this.guiTop+5, this.press.tank); } + @Override + protected void mouseClicked(int mouseX, int mouseY, int mouseButton) throws IOException{ + this.energy.onMouseClick(mouseX, mouseY, mouseButton); + } + @Override public void drawScreen(int x, int y, float f){ super.drawScreen(x, y, f); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCoalGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCoalGenerator.java index c28d3cff5..224608a50 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCoalGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCoalGenerator.java @@ -21,6 +21,7 @@ import net.minecraft.util.ResourceLocation; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import java.io.IOException; import java.util.Collections; @SideOnly(Side.CLIENT) @@ -43,6 +44,12 @@ public class GuiCoalGenerator extends GuiContainer{ this.energy = new EnergyDisplay(this.guiLeft+42, this.guiTop+5, this.generator.storage); } + @Override + protected void mouseClicked(int mouseX, int mouseY, int mouseButton) throws IOException{ + this.energy.onMouseClick(mouseX, mouseY, mouseButton); + } + + @Override public void drawScreen(int x, int y, float f){ super.drawScreen(x, y, f); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCoffeeMachine.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCoffeeMachine.java index 6db2da248..0dd95f74a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCoffeeMachine.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCoffeeMachine.java @@ -29,6 +29,7 @@ import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import java.io.IOException; import java.util.Collections; @SideOnly(Side.CLIENT) @@ -55,6 +56,12 @@ public class GuiCoffeeMachine extends GuiContainer{ this.world = world; } + @Override + protected void mouseClicked(int mouseX, int mouseY, int mouseButton) throws IOException{ + this.energy.onMouseClick(mouseX, mouseY, mouseButton); + } + + @Override public void initGui(){ super.initGui(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiDirectionalBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiDirectionalBreaker.java index 445ad6ca8..ea9acc07a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiDirectionalBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiDirectionalBreaker.java @@ -21,6 +21,7 @@ import net.minecraft.util.ResourceLocation; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import java.io.IOException; import java.util.Collections; @SideOnly(Side.CLIENT) @@ -43,6 +44,12 @@ public class GuiDirectionalBreaker extends GuiContainer{ this.energy = new EnergyDisplay(this.guiLeft+42, this.guiTop+5, this.breaker.storage); } + @Override + protected void mouseClicked(int mouseX, int mouseY, int mouseButton) throws IOException{ + this.energy.onMouseClick(mouseX, mouseY, mouseButton); + } + + @Override public void drawScreen(int x, int y, float f){ super.drawScreen(x, y, f); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiEnergizer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiEnergizer.java index 1bf92db29..4217b5c52 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiEnergizer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiEnergizer.java @@ -21,6 +21,7 @@ import net.minecraft.util.ResourceLocation; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import java.io.IOException; import java.util.Collections; @SideOnly(Side.CLIENT) @@ -43,6 +44,12 @@ public class GuiEnergizer extends GuiContainer{ this.energy = new EnergyDisplay(this.guiLeft+56, this.guiTop+5, this.energizer.storage); } + @Override + protected void mouseClicked(int mouseX, int mouseY, int mouseButton) throws IOException{ + this.energy.onMouseClick(mouseX, mouseY, mouseButton); + } + + @Override public void drawScreen(int x, int y, float f){ super.drawScreen(x, y, f); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiEnervator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiEnervator.java index c2b2cfcec..1a9b1fe48 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiEnervator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiEnervator.java @@ -21,6 +21,7 @@ import net.minecraft.util.ResourceLocation; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import java.io.IOException; import java.util.Collections; @SideOnly(Side.CLIENT) @@ -43,6 +44,12 @@ public class GuiEnervator extends GuiContainer{ this.energy = new EnergyDisplay(this.guiLeft+56, this.guiTop+5, this.enervator.storage); } + @Override + protected void mouseClicked(int mouseX, int mouseY, int mouseButton) throws IOException{ + this.energy.onMouseClick(mouseX, mouseY, mouseButton); + } + + @Override public void drawScreen(int x, int y, float f){ super.drawScreen(x, y, f); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFurnaceDouble.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFurnaceDouble.java index 1a4aea4dd..44c1f94e0 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFurnaceDouble.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFurnaceDouble.java @@ -21,6 +21,7 @@ import net.minecraft.util.ResourceLocation; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import java.io.IOException; import java.util.Collections; @SideOnly(Side.CLIENT) @@ -43,6 +44,12 @@ public class GuiFurnaceDouble extends GuiContainer{ this.energy.drawOverlay(x, y); } + @Override + protected void mouseClicked(int mouseX, int mouseY, int mouseButton) throws IOException{ + this.energy.onMouseClick(mouseX, mouseY, mouseButton); + } + + @Override public void initGui(){ super.initGui(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiGrinder.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiGrinder.java index 09ab6115e..6e5794667 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiGrinder.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiGrinder.java @@ -21,6 +21,7 @@ import net.minecraft.util.ResourceLocation; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import java.io.IOException; import java.util.Collections; @SideOnly(Side.CLIENT) @@ -50,6 +51,12 @@ public class GuiGrinder extends GuiContainer{ this.energy = new EnergyDisplay(this.guiLeft+(this.isDouble ? 13 : 42), this.guiTop+5, this.tileGrinder.storage); } + @Override + protected void mouseClicked(int mouseX, int mouseY, int mouseButton) throws IOException{ + this.energy.onMouseClick(mouseX, mouseY, mouseButton); + } + + @Override public void drawScreen(int x, int y, float f){ super.drawScreen(x, y, f); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiOilGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiOilGenerator.java index 87312e248..19de9b116 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiOilGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiOilGenerator.java @@ -22,6 +22,7 @@ import net.minecraft.util.ResourceLocation; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import java.io.IOException; import java.util.Collections; @SideOnly(Side.CLIENT) @@ -47,6 +48,12 @@ public class GuiOilGenerator extends GuiContainer{ this.fluid = new FluidDisplay(this.guiLeft+116, this.guiTop+5, this.generator.tank); } + @Override + protected void mouseClicked(int mouseX, int mouseY, int mouseButton) throws IOException{ + this.energy.onMouseClick(mouseX, mouseY, mouseButton); + } + + @Override public void drawScreen(int x, int y, float f){ super.drawScreen(x, y, f); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiRepairer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiRepairer.java index 526112be5..ca8eb7435 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiRepairer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiRepairer.java @@ -21,6 +21,7 @@ import net.minecraft.util.ResourceLocation; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import java.io.IOException; import java.util.Collections; @SideOnly(Side.CLIENT) @@ -37,6 +38,12 @@ public class GuiRepairer extends GuiContainer{ this.ySize = 93+86; } + @Override + protected void mouseClicked(int mouseX, int mouseY, int mouseButton) throws IOException{ + this.energy.onMouseClick(mouseX, mouseY, mouseButton); + } + + @Override public void initGui(){ super.initGui(); diff --git a/src/main/resources/assets/actuallyadditions/textures/gui/guiInventory.png b/src/main/resources/assets/actuallyadditions/textures/gui/guiInventory.png index 7cd1d705c12c47c77effab7f8d2985e0759b4f2d..88eb3156b9ce792f64c4029fccfa693b279055ec 100644 GIT binary patch literal 6503 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 JC#R^s`%gT?iVy$* literal 5023 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 N&RaM)ceZrv-vN!xVqX9N