diff --git a/src/main/java/refinedstorage/gui/GuiDetector.java b/src/main/java/refinedstorage/gui/GuiDetector.java index 71213c481..230fa761c 100755 --- a/src/main/java/refinedstorage/gui/GuiDetector.java +++ b/src/main/java/refinedstorage/gui/GuiDetector.java @@ -6,14 +6,13 @@ import refinedstorage.api.storage.CompareUtils; import refinedstorage.container.ContainerDetector; import refinedstorage.gui.sidebutton.SideButtonCompare; import refinedstorage.gui.sidebutton.SideButtonDetectorMode; -import refinedstorage.tile.TileDestructor; import refinedstorage.tile.TileDetector; import refinedstorage.tile.data.TileDataManager; import java.io.IOException; public class GuiDetector extends GuiBase { - private GuiTextField amountField; + public static GuiTextField AMOUNT; public GuiDetector(ContainerDetector container) { super(container, 176, 137); @@ -21,19 +20,18 @@ public class GuiDetector extends GuiBase { @Override public void init(int x, int y) { - addSideButton(new SideButtonCompare(TileDestructor.COMPARE, CompareUtils.COMPARE_DAMAGE)); - addSideButton(new SideButtonCompare(TileDestructor.COMPARE, CompareUtils.COMPARE_NBT)); + addSideButton(new SideButtonCompare(TileDetector.COMPARE, CompareUtils.COMPARE_DAMAGE)); + addSideButton(new SideButtonCompare(TileDetector.COMPARE, CompareUtils.COMPARE_NBT)); addSideButton(new SideButtonDetectorMode()); - amountField = new GuiTextField(0, fontRendererObj, x + 62 + 1, y + 23 + 1, 25, fontRendererObj.FONT_HEIGHT); - // @TODO: Change when the packet is received instead - amountField.setText(String.valueOf(TileDetector.AMOUNT.getValue())); - amountField.setEnableBackgroundDrawing(false); - amountField.setVisible(true); - amountField.setTextColor(16777215); - amountField.setCanLoseFocus(false); - amountField.setFocused(true); + AMOUNT = new GuiTextField(0, fontRendererObj, x + 62 + 1, y + 23 + 1, 25, fontRendererObj.FONT_HEIGHT); + AMOUNT.setText(String.valueOf(TileDetector.AMOUNT.getValue())); + AMOUNT.setEnableBackgroundDrawing(false); + AMOUNT.setVisible(true); + AMOUNT.setTextColor(16777215); + AMOUNT.setCanLoseFocus(false); + AMOUNT.setFocused(true); } @Override @@ -46,7 +44,7 @@ public class GuiDetector extends GuiBase { drawTexture(x, y, 0, 0, width, height); - amountField.drawTextBox(); + AMOUNT.drawTextBox(); } @Override @@ -57,8 +55,8 @@ public class GuiDetector extends GuiBase { @Override protected void keyTyped(char character, int keyCode) throws IOException { - if (!checkHotbarKeys(keyCode) && amountField.textboxKeyTyped(character, keyCode)) { - Integer result = Ints.tryParse(amountField.getText()); + if (!checkHotbarKeys(keyCode) && AMOUNT.textboxKeyTyped(character, keyCode)) { + Integer result = Ints.tryParse(AMOUNT.getText()); if (result != null) { TileDataManager.setParameter(TileDetector.AMOUNT, result); diff --git a/src/main/java/refinedstorage/tile/TileDetector.java b/src/main/java/refinedstorage/tile/TileDetector.java index 82aa9ef2b..e1785415f 100755 --- a/src/main/java/refinedstorage/tile/TileDetector.java +++ b/src/main/java/refinedstorage/tile/TileDetector.java @@ -1,19 +1,21 @@ package refinedstorage.tile; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiScreen; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.datasync.DataSerializers; +import net.minecraftforge.fml.common.FMLCommonHandler; +import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.items.IItemHandler; import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorageBlocks; import refinedstorage.api.network.INetworkMaster; +import refinedstorage.gui.GuiDetector; import refinedstorage.inventory.ItemHandlerBasic; import refinedstorage.tile.config.IComparable; import refinedstorage.tile.config.RedstoneMode; -import refinedstorage.tile.data.ITileDataConsumer; -import refinedstorage.tile.data.ITileDataProducer; -import refinedstorage.tile.data.TileDataManager; -import refinedstorage.tile.data.TileDataParameter; +import refinedstorage.tile.data.*; public class TileDetector extends TileNode implements IComparable { public static final TileDataParameter COMPARE = IComparable.createParameter(); @@ -34,7 +36,7 @@ public class TileDetector extends TileNode implements IComparable { } }); - public static final TileDataParameter AMOUNT = TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer() { + public static final TileDataParameter AMOUNT = TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer() { @Override public Integer getValue(TileDetector tile) { return tile.amount; @@ -46,6 +48,17 @@ public class TileDetector extends TileNode implements IComparable { tile.markDirty(); } + }, new ITileDataListener() { + @Override + public void onChanged() { + if (FMLCommonHandler.instance().getEffectiveSide() == Side.CLIENT) { + GuiScreen gui = Minecraft.getMinecraft().currentScreen; + + if (gui instanceof GuiDetector) { + ((GuiDetector) gui).AMOUNT.setText(String.valueOf(AMOUNT.getValue())); + } + } + } }); private static final int SPEED = 5; diff --git a/src/main/java/refinedstorage/tile/data/ITileDataListener.java b/src/main/java/refinedstorage/tile/data/ITileDataListener.java new file mode 100755 index 000000000..1786a5a60 --- /dev/null +++ b/src/main/java/refinedstorage/tile/data/ITileDataListener.java @@ -0,0 +1,5 @@ +package refinedstorage.tile.data; + +public interface ITileDataListener { + void onChanged(); +} diff --git a/src/main/java/refinedstorage/tile/data/TileDataManager.java b/src/main/java/refinedstorage/tile/data/TileDataManager.java index 9f1a80877..3a6c140f8 100755 --- a/src/main/java/refinedstorage/tile/data/TileDataManager.java +++ b/src/main/java/refinedstorage/tile/data/TileDataManager.java @@ -29,7 +29,11 @@ public class TileDataManager { } public static TileDataParameter createParameter(DataSerializer serializer, ITileDataProducer producer, ITileDataConsumer consumer) { - TileDataParameter parameter = new TileDataParameter(PARAMETER_ID++, serializer, producer, consumer); + return createParameter(serializer, producer, consumer, null); + } + + public static TileDataParameter createParameter(DataSerializer serializer, ITileDataProducer producer, ITileDataConsumer consumer, ITileDataListener listener) { + TileDataParameter parameter = new TileDataParameter(PARAMETER_ID++, serializer, producer, consumer, listener); PARAMETER_MAP.put(parameter.getId(), parameter); diff --git a/src/main/java/refinedstorage/tile/data/TileDataParameter.java b/src/main/java/refinedstorage/tile/data/TileDataParameter.java index 4a1a1bed7..b7e0911ca 100755 --- a/src/main/java/refinedstorage/tile/data/TileDataParameter.java +++ b/src/main/java/refinedstorage/tile/data/TileDataParameter.java @@ -2,18 +2,21 @@ package refinedstorage.tile.data; import net.minecraft.network.datasync.DataSerializer; +// @TODO: Annotate me better! public class TileDataParameter { private int id; private DataSerializer serializer; private ITileDataProducer valueProducer; private ITileDataConsumer valueConsumer; + private ITileDataListener listener; private T value; - public TileDataParameter(int id, DataSerializer serializer, ITileDataProducer producer, ITileDataConsumer consumer) { + public TileDataParameter(int id, DataSerializer serializer, ITileDataProducer producer, ITileDataConsumer consumer, ITileDataListener listener) { this.id = id; this.serializer = serializer; this.valueProducer = producer; this.valueConsumer = consumer; + this.listener = listener; } public int getId() { @@ -32,8 +35,16 @@ public class TileDataParameter { return valueConsumer; } + public ITileDataListener getListener() { + return listener; + } + public void setValue(T value) { this.value = value; + + if (listener != null) { + listener.onChanged(); + } } public T getValue() {