diff options
Diffstat (limited to 'src/main/java/gregtech/common/covers/GT_Cover_ItemMeter.java')
-rw-r--r-- | src/main/java/gregtech/common/covers/GT_Cover_ItemMeter.java | 384 |
1 files changed, 0 insertions, 384 deletions
diff --git a/src/main/java/gregtech/common/covers/GT_Cover_ItemMeter.java b/src/main/java/gregtech/common/covers/GT_Cover_ItemMeter.java deleted file mode 100644 index 46be8daddd..0000000000 --- a/src/main/java/gregtech/common/covers/GT_Cover_ItemMeter.java +++ /dev/null @@ -1,384 +0,0 @@ -package gregtech.common.covers; - -import java.text.FieldPosition; - -import javax.annotation.Nonnull; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTBase; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.Fluid; - -import com.google.common.io.ByteArrayDataInput; -import com.gtnewhorizons.modularui.api.NumberFormatMUI; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.common.widget.TextWidget; - -import gregtech.api.gui.modularui.GT_CoverUIBuildContext; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.ICoverable; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.util.GT_CoverBehaviorBase; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.ISerializableObject; -import gregtech.common.gui.modularui.widget.CoverDataControllerWidget; -import gregtech.common.gui.modularui.widget.CoverDataFollower_NumericWidget; -import gregtech.common.gui.modularui.widget.CoverDataFollower_ToggleButtonWidget; -import gregtech.common.gui.modularui.widget.ItemWatcherSlotWidget; -import gregtech.common.tileentities.machines.GT_MetaTileEntity_Hatch_OutputBus_ME; -import gregtech.common.tileentities.storage.GT_MetaTileEntity_DigitalChestBase; -import io.netty.buffer.ByteBuf; - -public class GT_Cover_ItemMeter extends GT_CoverBehaviorBase<GT_Cover_ItemMeter.ItemMeterData> { - - // Legacy data format - private static final int SLOT_MASK = 0x3FFFFFFF; // 0 = all, 1 = 0 ... - private static final int CONVERTED_BIT = 0x80000000; - private static final int INVERT_BIT = 0x40000000; - - public GT_Cover_ItemMeter(ITexture coverTexture) { - super(ItemMeterData.class, coverTexture); - } - - @Override - public ItemMeterData createDataObject(int aLegacyData) { - // Convert from ver. 5.09.33.50 - if ((CONVERTED_BIT & aLegacyData) == 0) if (aLegacyData == 0) aLegacyData = CONVERTED_BIT; - else if (aLegacyData == 1) aLegacyData = CONVERTED_BIT | INVERT_BIT; - else if (aLegacyData > 1) aLegacyData = CONVERTED_BIT | Math.min((aLegacyData - 2), SLOT_MASK); - - boolean invert = (aLegacyData & INVERT_BIT) == INVERT_BIT; - int slot = (aLegacyData & SLOT_MASK) - 1; - - return new ItemMeterData(invert, slot, 0); - } - - @Override - public ItemMeterData createDataObject() { - return new ItemMeterData(); - } - - @Override - protected boolean isRedstoneSensitiveImpl(ForgeDirection side, int aCoverID, ItemMeterData aCoverVariable, - ICoverable aTileEntity, long aTimer) { - return false; - } - - public static byte computeSignalBasedOnItems(ICoverable tileEntity, boolean inverted, int threshold, int slot, - int ordinalSide) { - long max = 0; - long used = 0; - final IMetaTileEntity mte = ((IGregTechTileEntity) tileEntity).getMetaTileEntity(); - if (mte instanceof GT_MetaTileEntity_DigitalChestBase dc) { - max = dc.getMaxItemCount(); - used = dc.getProgresstime(); - } else if (mte instanceof GT_MetaTileEntity_Hatch_OutputBus_ME) { - if (((GT_MetaTileEntity_Hatch_OutputBus_ME) mte).canAcceptItem()) { - max = 64; - used = 0; - } - } else { - final int[] slots = slot >= 0 ? new int[] { slot } : tileEntity.getAccessibleSlotsFromSide(ordinalSide); - - for (int i : slots) { - if (i >= 0 && i < tileEntity.getSizeInventory()) { - max += 64; - final ItemStack stack = tileEntity.getStackInSlot(i); - if (stack != null) used += ((long) stack.stackSize << 6) / stack.getMaxStackSize(); - } - } - } - - return GT_Utility.convertRatioToRedstone(used, max, threshold, inverted); - } - - @Override - protected ItemMeterData doCoverThingsImpl(ForgeDirection side, byte aInputRedstone, int aCoverID, - ItemMeterData aCoverVariable, ICoverable aTileEntity, long aTimer) { - byte signal = computeSignalBasedOnItems( - aTileEntity, - aCoverVariable.inverted, - aCoverVariable.threshold, - aCoverVariable.slot, - side.ordinal()); - aTileEntity.setOutputRedstoneSignal(side, signal); - - return aCoverVariable; - } - - @Override - protected ItemMeterData onCoverScrewdriverClickImpl(ForgeDirection side, int aCoverID, ItemMeterData aCoverVariable, - ICoverable aTileEntity, EntityPlayer aPlayer, float aX, float aY, float aZ) { - if (aPlayer.isSneaking()) { - if (aCoverVariable.inverted) { - aCoverVariable.inverted = false; - GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("055", "Normal")); - } else { - aCoverVariable.inverted = true; - GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("054", "Inverted")); - } - } else { - aCoverVariable.slot++; - if (aCoverVariable.slot > aTileEntity.getSizeInventory()) aCoverVariable.slot = -1; - - if (aCoverVariable.slot == -1) GT_Utility - .sendChatToPlayer(aPlayer, GT_Utility.trans("053", "Slot: ") + GT_Utility.trans("ALL", "All")); - else GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("053", "Slot: ") + aCoverVariable.slot); - } - - return aCoverVariable; - } - - @Override - protected boolean letsEnergyInImpl(ForgeDirection side, int aCoverID, ItemMeterData aCoverVariable, - ICoverable aTileEntity) { - return true; - } - - @Override - protected boolean letsEnergyOutImpl(ForgeDirection side, int aCoverID, ItemMeterData aCoverVariable, - ICoverable aTileEntity) { - return true; - } - - @Override - protected boolean letsFluidInImpl(ForgeDirection side, int aCoverID, ItemMeterData aCoverVariable, Fluid aFluid, - ICoverable aTileEntity) { - return true; - } - - @Override - protected boolean letsFluidOutImpl(ForgeDirection side, int aCoverID, ItemMeterData aCoverVariable, Fluid aFluid, - ICoverable aTileEntity) { - return true; - } - - @Override - protected boolean letsItemsInImpl(ForgeDirection side, int aCoverID, ItemMeterData aCoverVariable, int aSlot, - ICoverable aTileEntity) { - return true; - } - - @Override - protected boolean letsItemsOutImpl(ForgeDirection side, int aCoverID, ItemMeterData aCoverVariable, int aSlot, - ICoverable aTileEntity) { - return true; - } - - @Override - protected boolean manipulatesSidedRedstoneOutputImpl(ForgeDirection side, int aCoverID, - ItemMeterData aCoverVariable, ICoverable aTileEntity) { - return true; - } - - @Override - protected int getTickRateImpl(ForgeDirection side, int aCoverID, ItemMeterData aCoverVariable, - ICoverable aTileEntity) { - return 5; - } - - // GUI stuff - - @Override - public boolean hasCoverGUI() { - return true; - } - - @Override - public ModularWindow createWindow(GT_CoverUIBuildContext buildContext) { - return new ItemMeterUIFactory(buildContext).createWindow(); - } - - private class ItemMeterUIFactory extends UIFactory { - - private static final int startX = 10; - private static final int startY = 25; - private static final int spaceX = 18; - private static final int spaceY = 18; - - /** - * Display the text "All" instead of a number when the slot is set to -1. - */ - protected static final NumberFormatMUI numberFormatAll = new NumberFormatMUI() { - - @Override - public StringBuffer format(double number, StringBuffer toAppendTo, FieldPosition pos) { - if (number < 0) { - return toAppendTo.append(GT_Utility.trans("ALL", "All")); - } else { - return super.format(number, toAppendTo, pos); - } - } - }; - - private int maxSlot; - private int maxThreshold; - - public ItemMeterUIFactory(GT_CoverUIBuildContext buildContext) { - super(buildContext); - } - - @Override - protected void addUIWidgets(ModularWindow.Builder builder) { - final String INVERTED = GT_Utility.trans("INVERTED", "Inverted"); - final String NORMAL = GT_Utility.trans("NORMAL", "Normal"); - - setMaxSlot(); - setMaxThreshold(); - - builder.widget( - new CoverDataControllerWidget<>(this::getCoverData, this::setCoverData, GT_Cover_ItemMeter.this) - .addFollower( - CoverDataFollower_ToggleButtonWidget.ofRedstone(), - coverData -> coverData.inverted, - (coverData, state) -> { - coverData.inverted = state; - return coverData; - }, - widget -> widget.addTooltip(0, NORMAL) - .addTooltip(1, INVERTED) - .setPos(0, 0)) - .addFollower( - new CoverDataFollower_NumericWidget<>(), - coverData -> (double) coverData.threshold, - (coverData, state) -> { - coverData.threshold = state.intValue(); - return coverData; - }, - widget -> widget.setBounds(0, maxThreshold) - .setScrollValues(1, 64, 1000) - .setFocusOnGuiOpen(true) - .setPos(0, 2 + spaceY) - .setSize(spaceX * 4 + 5, 12)) - .addFollower( - new CoverDataFollower_NumericWidget<>(), - coverData -> (double) coverData.slot, - (coverData, state) -> { - coverData.slot = state.intValue(); - return coverData; - }, - widget -> widget.setBounds(-1, maxSlot) - .setDefaultValue(-1) - .setScrollValues(1, 100, 10) - .setNumberFormat(numberFormatAll) - .setPos(0, 2 + spaceY * 2) - .setSize(spaceX * 3 + 1, 12)) - .setPos(startX, startY)) - .widget( - new ItemWatcherSlotWidget().setGetter(this::getTargetItem) - .setPos(startX + spaceX * 3 + 8, startY + spaceY * 2)) - .widget( - new TextWidget() - .setStringSupplier( - () -> getCoverData() != null ? getCoverData().inverted ? INVERTED : NORMAL : "") - .setDefaultColor(COLOR_TEXT_GRAY.get()) - .setPos(startX + spaceX, 4 + startY)) - .widget( - new TextWidget(GT_Utility.trans("254", "Detect slot #")).setDefaultColor(COLOR_TEXT_GRAY.get()) - .setPos(startX + spaceX * 4 + 9, 4 + startY + spaceY * 2)) - .widget( - new TextWidget(GT_Utility.trans("221", "Item threshold")).setDefaultColor(COLOR_TEXT_GRAY.get()) - .setPos(startX + spaceX * 4 + 9, 4 + startY + spaceY)); - } - - private void setMaxSlot() { - final ICoverable tile = getUIBuildContext().getTile(); - if (!tile.isDead() && tile instanceof IGregTechTileEntity gtTile - && !(gtTile.getMetaTileEntity() instanceof GT_MetaTileEntity_DigitalChestBase)) { - maxSlot = Math.min(tile.getSizeInventory() - 1, SLOT_MASK - 1); - } else { - maxSlot = -1; - } - } - - private void setMaxThreshold() { - final ICoverable tile = getUIBuildContext().getTile(); - if (!tile.isDead() && tile instanceof IGregTechTileEntity gtTile - && gtTile.getMetaTileEntity() instanceof GT_MetaTileEntity_DigitalChestBase) { - maxThreshold = gtTile.getMaxItemCount(); - } else { - maxThreshold = maxSlot > 0 ? maxSlot * 64 : Integer.MAX_VALUE; - } - } - - private ItemStack getTargetItem() { - ItemMeterData coverVariable = getCoverData(); - if (coverVariable == null || coverVariable.slot < 0) { - return null; - } - ICoverable tile = getUIBuildContext().getTile(); - if (tile instanceof TileEntity && !tile.isDead()) { - if (tile.getSizeInventory() >= coverVariable.slot) { - return tile.getStackInSlot(coverVariable.slot); - } - } - return null; - } - } - - public static class ItemMeterData implements ISerializableObject { - - private boolean inverted; - /** The special value {@code -1} means all slots. */ - private int slot; - /** The special value {@code 0} means threshold check is disabled. */ - private int threshold; - - public ItemMeterData() { - inverted = false; - slot = -1; - threshold = 0; - } - - public ItemMeterData(boolean inverted, int slot, int threshold) { - this.inverted = inverted; - this.slot = slot; - this.threshold = threshold; - } - - @Nonnull - @Override - public ISerializableObject copy() { - return new ItemMeterData(inverted, slot, threshold); - } - - @Nonnull - @Override - public NBTBase saveDataToNBT() { - NBTTagCompound tag = new NBTTagCompound(); - tag.setBoolean("invert", inverted); - tag.setInteger("slot", slot); - tag.setInteger("threshold", threshold); - return tag; - } - - @Override - public void writeToByteBuf(ByteBuf aBuf) { - aBuf.writeBoolean(inverted); - aBuf.writeInt(slot); - aBuf.writeInt(threshold); - } - - @Override - public void loadDataFromNBT(NBTBase aNBT) { - NBTTagCompound tag = (NBTTagCompound) aNBT; - inverted = tag.getBoolean("invert"); - slot = tag.getInteger("slot"); - threshold = tag.getInteger("threshold"); - } - - @Nonnull - @Override - public ISerializableObject readFromPacket(ByteArrayDataInput aBuf, EntityPlayerMP aPlayer) { - inverted = aBuf.readBoolean(); - slot = aBuf.readInt(); - threshold = aBuf.readInt(); - return this; - } - } -} |