From 22ba3bc38a77c3eedae4b1172a484b172abf0b75 Mon Sep 17 00:00:00 2001 From: reobf <2215595288@qq.com> Date: Sat, 22 Feb 2025 18:19:56 +0800 Subject: [PATCH] update --- .../proghatches/ae/BlockAutoFillerMKII.java | 3 +- .../ae/TileCyclicPatternSubmitter.java | 2 +- .../proghatches/ae/part2/RequestTunnel.java | 8 +- .../gt/metatileentity/RemoteInputBus.java | 10 +- .../gt/metatileentity/RemoteInputHatch.java | 6 +- .../gt/metatileentity/SuperChestME.java | 2038 ++++++++--------- .../oc/TileWirelessPeripheralStation.java | 14 +- .../textures/blocks/pstation_0.png | Bin 536 -> 621 bytes ...ion_1.png.mcmeta => pstation_0.png.mcmeta} | 0 .../textures/blocks/pstation_1.png | Bin 621 -> 536 bytes 10 files changed, 1032 insertions(+), 1049 deletions(-) rename src/main/resources/assets/proghatches/textures/blocks/{pstation_1.png.mcmeta => pstation_0.png.mcmeta} (100%) diff --git a/src/main/java/reobf/proghatches/ae/BlockAutoFillerMKII.java b/src/main/java/reobf/proghatches/ae/BlockAutoFillerMKII.java index 8566da3..c951879 100644 --- a/src/main/java/reobf/proghatches/ae/BlockAutoFillerMKII.java +++ b/src/main/java/reobf/proghatches/ae/BlockAutoFillerMKII.java @@ -4,6 +4,7 @@ import java.util.HashMap; import java.util.List; +import net.bdew.ae2stuff.machines.wireless.TileWireless; import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; import net.minecraft.entity.EntityLivingBase; @@ -41,7 +42,7 @@ public BlockAutoFillerMKII() { @Override public TileEntity createNewTileEntity(World worldIn, int meta) { - + return new TileAutoFillerMKII(); } diff --git a/src/main/java/reobf/proghatches/ae/TileCyclicPatternSubmitter.java b/src/main/java/reobf/proghatches/ae/TileCyclicPatternSubmitter.java index 6e0ff90..afd3ec7 100644 --- a/src/main/java/reobf/proghatches/ae/TileCyclicPatternSubmitter.java +++ b/src/main/java/reobf/proghatches/ae/TileCyclicPatternSubmitter.java @@ -326,7 +326,7 @@ public void updateEntity() { job.times = howmany; } last = getProxy().getCrafting() - .submitJob(job, this, null, true, source); + .submitJob(job, this, null, false, source); } submitfail = last == null; diff --git a/src/main/java/reobf/proghatches/ae/part2/RequestTunnel.java b/src/main/java/reobf/proghatches/ae/part2/RequestTunnel.java index f0b6bd3..6e3dcd5 100644 --- a/src/main/java/reobf/proghatches/ae/part2/RequestTunnel.java +++ b/src/main/java/reobf/proghatches/ae/part2/RequestTunnel.java @@ -321,7 +321,8 @@ public void jobStateChange(ICraftingLink link) { Future job; // @TileEvent(TileEventType.TICK) - public void update() { + @SuppressWarnings("unchecked") + public void update() { tick++; if (getWorldObj().isRemote) return; @@ -386,6 +387,7 @@ public void update() { if (last == null) { if (job == null) { if (req != null) { + if(cd>=-100)cd--;//5 charges if (cd-- <= 0) { job = getProxy().getCrafting() .beginCraftingJob( @@ -394,12 +396,12 @@ public void update() { new MachineSource(this), req, null); - cd = 40; + cd += 20; } } } else if (job.isDone() && !job.isCancelled()) { last = getProxy().getCrafting() - .submitJob(job.get(), this, null, true, new MachineSource(this)); + .submitJob(job.get(), this, null, false, new MachineSource(this)); job = null; } else if (job.isCancelled()) { last = null; diff --git a/src/main/java/reobf/proghatches/gt/metatileentity/RemoteInputBus.java b/src/main/java/reobf/proghatches/gt/metatileentity/RemoteInputBus.java index dd2eefc..6a486b7 100644 --- a/src/main/java/reobf/proghatches/gt/metatileentity/RemoteInputBus.java +++ b/src/main/java/reobf/proghatches/gt/metatileentity/RemoteInputBus.java @@ -22,6 +22,7 @@ import net.minecraft.util.StatCollector; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; import com.google.common.collect.ImmutableMap; import com.gtnewhorizons.modularui.api.ModularUITextures; @@ -346,12 +347,13 @@ public Optional getTile() { return Optional.empty(); } } - + ArrayList arr; public List filterTakable(TileEntity e) { + // if (processingRecipe == false) return new ArrayList(); if (e == null || (e instanceof IInventory == false)) return new ArrayList(); IInventory inv = (IInventory) e; - - ArrayList arr = new ArrayList(); + if(arr!=null)return arr; + arr = new ArrayList(); // boolean b=e instanceof ISidedInventory; int size = inv.getSizeInventory(); @@ -622,7 +624,7 @@ public CheckRecipeResult endRecipeProcessing(MTEMultiBlockBase controller) { using.remove(new DimensionalCoord((TileEntity) this.getBaseMetaTileEntity())); } processingRecipe = false; - blocked = false; + blocked = false;arr=null; removePhantom(); return CheckRecipeResultRegistry.SUCCESSFUL; } diff --git a/src/main/java/reobf/proghatches/gt/metatileentity/RemoteInputHatch.java b/src/main/java/reobf/proghatches/gt/metatileentity/RemoteInputHatch.java index 84fd849..7a7d137 100644 --- a/src/main/java/reobf/proghatches/gt/metatileentity/RemoteInputHatch.java +++ b/src/main/java/reobf/proghatches/gt/metatileentity/RemoteInputHatch.java @@ -456,7 +456,11 @@ public List filterTakable(TileEntity e) { if (processingRecipe == false) return new ArrayList(); try { - if (tmp != null) endRecipeProcessing(null); + if (tmp != null) { + return (List) (Object)tmp; + } + + //endRecipeProcessing(null); // this means this method is called twice during recipe check? // remove consumed fluid } catch (Exception ex) { diff --git a/src/main/java/reobf/proghatches/gt/metatileentity/SuperChestME.java b/src/main/java/reobf/proghatches/gt/metatileentity/SuperChestME.java index 7e11da3..20bf3e1 100644 --- a/src/main/java/reobf/proghatches/gt/metatileentity/SuperChestME.java +++ b/src/main/java/reobf/proghatches/gt/metatileentity/SuperChestME.java @@ -77,6 +77,7 @@ import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.metatileentity.MetaTileEntity; import gregtech.api.metatileentity.implementations.MTEHatch; +import gregtech.api.util.GTUtil; import gregtech.api.util.GTUtility; import reobf.proghatches.gt.metatileentity.util.BaseSlotPatched; import reobf.proghatches.gt.metatileentity.util.IStoageCellUpdate; @@ -87,1038 +88,1009 @@ public class SuperChestME extends MTEHatch implements ICellContainer, IGridProxyable, IPriorityHost, IStoageCellUpdate { - public SuperChestME(String aName, int aTier, int aInvSlotCount, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aTier, aInvSlotCount, aDescription, aTextures); - - } - - public SuperChestME(int aID, String aName, String aNameRegional, int aTier, int aInvSlotCount) { - super( - aID, - aName, - aNameRegional, - aTier, - aInvSlotCount, - reobf.proghatches.main.Config.get("SCME", ImmutableMap.of("items", commonSizeCompute(aTier)) - - ), - new ITexture[0]); - Registration.items.add(new ItemStack(GregTechAPI.sBlockMachines, 1, aID)); - } - - int capOverride; - - @Override - public int getInventoryStackLimit() { - - return cap(); - } - - public int cap() { - if (capOverride >= 64) { - - return - - Math.max(64, Math.min(capOverride, commonSizeCompute(mTier))); - } - return commonSizeCompute(mTier); - } - - protected static int commonSizeCompute(int tier) { - switch (tier) { - case 1: - return 4000000; - case 2: - return 8000000; - case 3: - return 16000000; - case 4: - return 32000000; - case 5: - return 64000000; - case 6: - return 128000000; - case 7: - return 256000000; - case 8: - return 512000000; - case 9: - return 1024000000; - case 10: - return 2147483640; - default: - return 0; - } - } - /* - * @MENetworkEventSubscribe - * public void channel(final MENetworkChannelsChanged c) { - * post(); - * } - */ - - static Field m; - static { - try { - m = MEMonitorHandler.class.getDeclaredField("hasChanged"); - } catch (Exception e) { - e.printStackTrace(); - } - m.setAccessible(true); - } - - public static void forceUpdate(MEMonitorHandler thiz) { - - try { - m.setBoolean(thiz, true); - } catch (Exception e) { - e.printStackTrace(); - } - } - - private AEItemStack last; - - private void post() { - - try { - - // this.getProxy().getGrid().postEvent(new MENetworkCellArrayUpdate()); - // this.getProxy().getGrid().postEvent(new MENetworkStorageEvent(handler0, StorageChannel.ITEMS)); - try { - - if (last != null) { - if (mInventory[0] != null) { - if (last.equals(mInventory[0])) { - if (last.getStackSize() == mInventory[0].stackSize) { - return; - } else { - - this.getProxy() - .getStorage() - .postAlterationOfStoredItems( - StorageChannel.ITEMS, - ImmutableList.of( - last.copy() - .setStackSize(mInventory[0].stackSize - last.getStackSize())), - new MachineSource(this)); - last = AEItemStack.create(mInventory[0]); - return; - } - } - - } ; - - this.getProxy() - .getStorage() - .postAlterationOfStoredItems( - StorageChannel.ITEMS, - ImmutableList.of( - last.copy() - .setStackSize(-last.getStackSize())), - new MachineSource(this)); - } - last = AEItemStack.create(mInventory[0]); - if (last != null) { - this.getProxy() - .getStorage() - .postAlterationOfStoredItems( - StorageChannel.ITEMS, - ImmutableList.of( - last.copy() - .setStackSize(last.getStackSize())), - new MachineSource(this)); - } - - } catch (final GridAccessException ignore) {} - } catch (Exception e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - - }/* - * @MENetworkEventSubscribe - * public void power(final MENetworkPowerStatusChange c) { - * post(); - * } - */ - - @Override - public IGridNode getActionableNode() { - - return getProxy().getNode(); - } - - @Override - public IGridNode getGridNode(ForgeDirection dir) { - - return getProxy().getNode(); - } - - @Override - public void securityBreak() { - - } - - static interface SilentCloseable extends Closeable { - - @Override - void close(); - } - - boolean freezeFlag;// - - @Override - public List getCellArray(StorageChannel channel) { - if (freezeFlag) return ImmutableList.of(); - if (channel == StorageChannel.ITEMS) return ImmutableList.of(handler); - else return ImmutableList.of(); - - } - - @Override - public int getPriority() { - - return piority; - } - - private ItemStack visualStack() { - return new ItemStack(GregTechAPI.sBlockMachines, 1, getBaseMetaTileEntity().getMetaTileID()); - } - - AENetworkProxy gridProxy; - - private void updateValidGridProxySides() { - /* - * if (disabled) { - * getProxy().setValidSides(EnumSet.noneOf(ForgeDirection.class)); - * return; - * } - */ - getProxy().setValidSides(EnumSet.complementOf(EnumSet.of(getBaseMetaTileEntity().getFrontFacing()))); - - } - - @Override - public AENetworkProxy getProxy() { - - if (gridProxy == null) { - gridProxy = new AENetworkProxy(this, "proxy", visualStack(), true); - gridProxy.setFlags(GridFlags.REQUIRE_CHANNEL); - updateValidGridProxySides(); - if (getBaseMetaTileEntity().getWorld() != null) gridProxy.setOwner( - getBaseMetaTileEntity().getWorld() - .getPlayerEntityByName(getBaseMetaTileEntity().getOwnerName())); - } - - return this.gridProxy; - } - - @Override - public void saveChanges(IMEInventory cellInventory) { - - markDirty(); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - - return new SuperChestME(mName, mTier, mInventory.length, mDescriptionArray, mTextures); - } - - @Override - public void blinkCell(int slot) { - - post(); - } - - @Override - public ITexture[] getTexturesActive(ITexture aBaseTexture) { - - return new ITexture[] { aBaseTexture, new IIconTexture(ExtraBlockTextures.MEChest.getIcon(), 0xD7BBEC), - new IIconTexture(ExtraBlockTextures.BlockMEChestItems_Light.getIcon(), 0xffffff) - - }; - } - - @Override - public ITexture[] getTexturesInactive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, new IIconTexture(ExtraBlockTextures.MEChest.getIcon(), 0xD7BBEC) - /* - * , new IIconTexture - * (ExtraBlockTextures.BlockMEChestItems_Light.getIcon(), - * 0xffffff) - */ - - }; - } - - @Override - public DimensionalCoord getLocation() { - - return new DimensionalCoord((TileEntity) this.getBaseMetaTileEntity()); - } - - public Consumer updateFilter; - ItemStack[] cachedFilter = new ItemStack[1]; - - public void updateFilter(ItemStack fs) { - cachedFilter[0] = fs; - ItemList fl = new ItemList(); - fl.add(AEItemStack.create(fs)); - updateFilter.accept(fl); - post(); - } - - @SuppressWarnings({ "unchecked", "rawtypes" }) - IMEInventoryHandler handler = new MEInventoryHandler(new UnlimitedWrapper(), StorageChannel.ITEMS) { - - public boolean getSticky() { - return sticky && !suppressSticky; - }; - - public int getPriority() { - return piority; - }; - - { - updateFilter = s -> this.setPartitionList(new PrecisePriorityList(s)); - } - }; - - IMEMonitor handler0x = new MEMonitorHandler(handler); - /* - * IMEMonitor handler0= new MEMonitorHandler(handler - * ); - */ - boolean sticky; - int piority; - - @Override - public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { - - super.onFirstTick(aBaseMetaTileEntity); - getProxy().onReady(); - onColorChangeServer(aBaseMetaTileEntity.getColorization()); - post(); - } - - public class UnlimitedWrapper implements IMEInventory { - - public UnlimitedWrapper() { - - } - - @Override - public IAEItemStack injectItems(IAEItemStack input, Actionable type, BaseActionSource src) { - if (type != Actionable.SIMULATE)post(); - try { - long l = input.getStackSize(); - long compl = 0; - if (l > Integer.MAX_VALUE) { - compl = l - Integer.MAX_VALUE; - } - ItemStack in = input.getItemStack(); - ItemStack thiz = mInventory[0]; - if (thiz != null && !Platform.isSameItem(in, thiz)) return input; - if (thiz == null) { - thiz = in.copy(); - thiz.stackSize = 0; - } - int space = Math.max(0, cap() - thiz.stackSize); - int transfer = Math.min(space, in.stackSize); - if (type == Actionable.SIMULATE) { - in.stackSize -= transfer; - if (in.stackSize <= 0 && compl == 0) in = null; - AEItemStack ret = AEItemStack.create(in); - if (ret != null) ret.incStackSize(compl); - return ret; - } - if (type == Actionable.MODULATE) { - thiz.stackSize += transfer; - mInventory[0] = thiz; - in.stackSize -= transfer; - if (in.stackSize <= 0 && compl == 0) in = null; - AEItemStack ret = AEItemStack.create(in); - if (ret != null) ret.incStackSize(compl); - return ret; - - } - - return null; - } finally { - last = AEItemStack.create(mInventory[0]); - if (voidOverflow - && (mInventory[0] != null && ItemStack.areItemStackTagsEqual(mInventory[0], input.getItemStack()) - && mInventory[0].getItem() == input.getItem() - && mInventory[0].getItemDamage() == input.getItemDamage())) { - return null; - } - } - } - - @Override - public IAEItemStack extractItems(IAEItemStack input, Actionable type, BaseActionSource src) { - try { - - if (type != Actionable.SIMULATE) post(); - - ItemStack in = input.getItemStack(); - ItemStack thiz = mInventory[0]; - if (thiz != null && !Platform.isSameItem(in, thiz)) return null; - if (thiz == null) { - return null; - } // thiz=in.copy(); } - int transfer = Math.min(in.stackSize, thiz.stackSize); - if (transfer == 0) return null; - if (type == Actionable.SIMULATE) { - in.stackSize = transfer; - return AEItemStack.create(in); - - } - if (type == Actionable.MODULATE) { - thiz.stackSize -= transfer; - if (thiz.stackSize <= 0) thiz = null; - mInventory[0] = thiz; - in.stackSize = transfer; - return AEItemStack.create(in); - } - - return null; - } finally { - - last = AEItemStack.create(mInventory[0]); - } - } - - @Override - public IItemList getAvailableItems(IItemList out) { - if (mInventory[0] != null) out.addStorage(AEItemStack.create(mInventory[0])); - return out; - } - - @Override - public StorageChannel getChannel() { - - return StorageChannel.ITEMS; - } - } - - @Override - public boolean isValidSlot(int aIndex) { - - return true; - } - - public int getMaxItemCount() { - - return super.getMaxItemCount(); - } - - @Override - public boolean isFacingValid(ForgeDirection facing) { - - return true; - } - - @Override - public boolean isAccessAllowed(EntityPlayer aPlayer) { - - return true; - } - - @Override - public boolean isItemValidForSlot(int aIndex, ItemStack aStack) { - if (aIndex == 0) return true; - if (mInventory[0] == null || mInventory[0].stackSize == 0) { - return true; - } - return Platform.isSameItem(mInventory[0], aStack); - } - - @Override - public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - - return true; - } - - @Override - public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - - return aIndex != 0; - } - - protected void fillStacksIntoFirstSlots() { - final int L = mInventory.length; - HashMap slots = new HashMap<>(L); - HashMap stacks = new HashMap<>(L); - List order = new ArrayList<>(L); - List validSlots = new ArrayList<>(L); - for (int i = 1; i < L; i++) { - if (!isValidSlot(i)) continue; - validSlots.add(i); - ItemStack s = mInventory[i]; - if (s == null) continue; - GTUtility.ItemId sID = GTUtility.ItemId.createNoCopy(s); - slots.merge(sID, s.stackSize, Integer::sum); - if (!stacks.containsKey(sID)) stacks.put(sID, s); - order.add(sID); - mInventory[i] = null; - } - int slotindex = 0; - for (GTUtility.ItemId sID : order) { - int toSet = slots.get(sID); - if (toSet == 0) continue; - int slot = validSlots.get(slotindex); - slotindex++; - mInventory[slot] = stacks.get(sID) - .copy(); - toSet = Math.min(toSet, mInventory[slot].getMaxStackSize()); - mInventory[slot].stackSize = toSet; - slots.merge(sID, toSet, (a, b) -> a - b); - } - } - - boolean autoUnlock; - boolean suppressSticky; - - boolean wasActive; - int rep; - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - - boolean active = this.getProxy() - .isActive(); - if (!aBaseMetaTileEntity.getWorld().isRemote) { - if (aTick % 40 == 1) { - post(); - } - - if (rep > 0) { - rep--; - update = true; - } - if (this.getBaseMetaTileEntity() - .hasInventoryBeenModified()) { - update = true; - rep = 1; - } ; - - if (update) { - update = false; - updateStatus(); - } - if (wasActive != active) { - wasActive = active; - - try { - this.getProxy() - .getGrid() - .postEvent(new MENetworkCellArrayUpdate()); - } catch (GridAccessException e) { - - } - post(); - } - if (voidFull) { - voidOverflow = false; - mInventory[0] = null; - } - if (mInventory[0] != null && voidOverflow) { - - if (mInventory[0] != null) mInventory[0].stackSize = Math.min(cap(), mInventory[0].stackSize); - } - - if (!aBaseMetaTileEntity.getWorld().isRemote && (aTick & 16) != 0) { - this.getBaseMetaTileEntity() - .setActive( - this.getProxy() - .isPowered() && active); - - } - - if ((!suppressSticky) && ((mInventory[0] == null) && autoUnlock)) { - - suppressSticky = true; - post(); - - } - if (suppressSticky && ((mInventory[0] != null) || (!autoUnlock))) { - - suppressSticky = false; - post(); - - } - - } - super.onPostTick(aBaseMetaTileEntity, aTick); - - if (aBaseMetaTileEntity.getWorld().isRemote) { - return; - } - - boolean needToSort = false; - for (int i = 1; i < mInventory.length; i++) { - ItemStack is = mInventory[i]; - if (is == null) continue; - markDirty(); - if (mInventory[0] == null) { - mInventory[0] = is.copy(); - mInventory[i] = null; - } else if (cap() - is.stackSize >= mInventory[0].stackSize) { - mInventory[0].stackSize += is.stackSize; - mInventory[i] = null; - } else { - int to = Math.min(cap() - mInventory[0].stackSize, is.stackSize); - mInventory[0].stackSize += to; - mInventory[i].stackSize -= to; - needToSort = true; - } - } - if (needToSort) fillStacksIntoFirstSlots(); - - } - - // use in try-finally - public SilentCloseable freeze() { - freezeFlag = true; - post(); - try { - this.getProxy() - .getGrid() - .postEvent(new MENetworkCellArrayUpdate()); - } catch (GridAccessException e) {} - return new SilentCloseable() { - - @Override - public void close() { - freezeFlag = false; - try { - getProxy().getGrid() - .postEvent(new MENetworkCellArrayUpdate()); - } catch (GridAccessException e) {} - } - }; - - } - - ButtonWidget createRefundButton(IWidgetBuilder builder) { - - Widget button = new ButtonWidget().setOnClick((clickData, widget) -> { - - refund(); - }) - .setPlayClickSound(true) - .setBackground(GTUITextures.BUTTON_STANDARD, GTUITextures.OVERLAY_BUTTON_EXPORT) - - .addTooltips(ImmutableList.of("Return all internally stored items back to AE")) - - .setPos(new Pos2d(getGUIWidth() - 18 - 3, 5 + 16 + 2)) - .setSize(16, 16); - return (ButtonWidget) button; - } - - public void refund() { - try (SilentCloseable __ = freeze()) { - if (mInventory[0] != null) { - IAEItemStack left = getProxy().getStorage() - .getItemInventory() - .injectItems(AEItemStack.create(mInventory[0]), Actionable.MODULATE, new MachineSource(this)); - mInventory[0] = left == null ? null : left.getItemStack(); - } - } catch (GridAccessException e) {} finally {} - markDirty(); - } - - @Override - public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { - if (ProghatchesUtil.handleUse(aPlayer, (MetaTileEntity) aBaseMetaTileEntity.getMetaTileEntity())) { - return true; - } - - GTUIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); - return true; - } - - // @Override - public boolean useModularUI() { - return true; - } - - @Override - public boolean isUseableByPlayer(EntityPlayer entityplayer) { - - return true; - } - - ItemStackHandler uihandler = new ItemStackHandler(mInventory) { - - public boolean isItemValid(int slot, ItemStack stack) { - return isItemValidForSlot(slot, stack); - }; - - }; - - @Override - public ItemStackHandler getInventoryHandler() { - - return uihandler; - } - - @Override - public void addUIWidgets(Builder builder, UIBuildContext buildContext) { - builder.widget( - new SlotWidget(new BaseSlotPatched(this.getInventoryHandler(), 0)) - - .setPos(3, 3)); - builder.widget( - new DrawableWidget().setDrawable(ModularUITextures.ARROW_LEFT) - - .setPos(3 + 18, 3) - .setSize(18, 18)); - builder.widget(new SlotWidget(new BaseSlotPatched(this.getInventoryHandler(), 1)).setPos(3 + 18 * 2, 3)); - builder.widget(new SlotWidget(new BaseSlotPatched(this.getInventoryHandler(), 2)).setPos(3 + 18 * 3, 3)); - builder.widget(createRefundButton(builder)); - Widget w; - builder.widget( - w = new DrawableWidget().setDrawable(ModularUITextures.ICON_INFO) - - .setPos(3 + 18 * 4 + 1, 3 + 1) - .setSize(16, 16) - // .addTooltip("xxxxxxx") - ); - - IntStream.range(0, Integer.valueOf(StatCollector.translateToLocal("programmable_hatches.gt.mechest.tooltip"))) - .forEach(s -> w.addTooltip(LangManager.translateToLocal("programmable_hatches.gt.mechest.tooltip." + +s))); - - builder.widget(createButton(() -> sticky, val -> { - sticky = val; - post(); - // updateSlots(); - }, - new ItemDrawable(new ItemStack(Items.slime_ball)), - ImmutableList.of(StatCollector.translateToLocal("programmable_hatches.gt.sticky") - - ) - - , - 0).setPos(3, 3 + 18 * 2)); - - builder.widget(createButton(() -> autoUnlock, val -> { - - cachedFilter[0] = null; - updateFilter(cachedFilter[0]); - autoUnlock = val; - post(); - // updateSlots(); - }, - GTUITextures.OVERLAY_BUTTON_RECIPE_UNLOCKED, - - // new ItemDrawable(new ItemStack(Items.slime_ball)), - ImmutableList.of(StatCollector.translateToLocal("programmable_hatches.gt.sticky.autounlock") - - ) - - , - 0).setPos(3 + 18, 3 + 18 * 2)); - builder.widget( - SlotWidget.phantom( - - new ItemStackHandler(cachedFilter) { - - public void setStackInSlot(int slot, ItemStack stack) { - super.setStackInSlot(slot, stack); - updateFilter(cachedFilter[0]); - autoUnlock = false; - post(); - }; - }, - 0 - - ) - .setPos(3 + 18 * 2, 3 + 18 * 2) - .addTooltip(StatCollector.translateToLocal("programmable_hatches.gt.phantom.filter")) - - ); - - builder.widget( - new TextFieldWidget().setPattern(BaseTextFieldWidget.WHOLE_NUMS) - .setGetter(() -> piority + "") - .setSetter(s -> { - try { - piority = Integer.parseInt(s); - } catch (Exception e) { - piority = 0; - } ; - post(); - }) - .setSynced(true, true) - - .setFocusOnGuiOpen(true) - .setTextColor(Color.WHITE.dark(1)) - - .setBackground(GTUITextures.BACKGROUND_TEXT_FIELD.withOffset(-1, -1, 2, 2)) - .addTooltip(StatCollector.translateToLocal("programmable_hatches.gt.piority")) - .setPos(3 + 2, 18 * 3 + 3 + 1) - .setSize(16 * 8, 16)) - .widget( - new TextFieldWidget().setPattern(BaseTextFieldWidget.WHOLE_NUMS) - .setGetter(() -> capOverride + "") - .setSetter(s -> { - try { - capOverride = Integer.parseInt(s); - } catch (Exception e) { - capOverride = 0; - } ; - if (capOverride < 64) capOverride = 0; - post(); - }) - .setSynced(true, true) - - .setTextColor(Color.WHITE.dark(1)) - - .setBackground(GTUITextures.BACKGROUND_TEXT_FIELD.withOffset(-1, -1, 2, 2)) - .addTooltip(StatCollector.translateToLocal("programmable_hatches.gt.capOverride.64")) - .setPos(3 + 18 * 5 + 1, 3 + 1) - .setSize(16 * 4, 16)) - .widget(new CycleButtonWidget().setToggle(() -> voidFull, val -> { - voidFull = val; - - if (!voidFull) { - GTUtility - .sendChatToPlayer(buildContext.getPlayer(), GTUtility.trans("269", "Void Full Mode Disabled")); - } else { - GTUtility - .sendChatToPlayer(buildContext.getPlayer(), GTUtility.trans("270", "Void Full Mode Enabled")); - } - }) - .setVariableBackground(GTUITextures.BUTTON_STANDARD_TOGGLE) - .setStaticTexture(GTUITextures.OVERLAY_BUTTON_TANK_VOID_ALL) - .setGTTooltip(() -> mTooltipCache.getData("GT5U.machines.digitaltank.voidfull.tooltip")) - .setTooltipShowUpDelay(TOOLTIP_DELAY) - .setPos(3 + 18 * 3, 3 + 18 * 2) - .setSize(18, 18)) - - .widget(new CycleButtonWidget().setToggle(() -> voidOverflow, val -> { - voidOverflow = val; - - if (!voidOverflow) { - GTUtility.sendChatToPlayer( - buildContext.getPlayer(), - GTUtility.trans("267", "Overflow Voiding Mode Disabled")); - } else { - GTUtility.sendChatToPlayer( - buildContext.getPlayer(), - GTUtility.trans("268", "Overflow Voiding Mode Enabled")); - } - }) - .setVariableBackground(GTUITextures.BUTTON_STANDARD_TOGGLE) - .setStaticTexture(GTUITextures.OVERLAY_BUTTON_TANK_VOID_EXCESS) - .setGTTooltip(() -> mTooltipCache.getData("GT5U.machines.digitaltank.voidoverflow.tooltip")) - .setTooltipShowUpDelay(TOOLTIP_DELAY) - .setPos(3 + 18 * 4, 3 + 18 * 2) - .setSize(18, 18)); - - } - - private Widget createButton(Supplier getter, Consumer setter, IDrawable picture, - List tooltip, int offset) { - return new CycleButtonWidget() - - .setToggle(getter, setter) - .setTextureGetter(__ -> picture) - .setVariableBackground(GTUITextures.BUTTON_STANDARD_TOGGLE) - .setTooltipShowUpDelay(TOOLTIP_DELAY) - .setPos(7 + offset * 18, 62) - .setSize(18, 18) - .addTooltips(tooltip); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - - if (aNBT.hasKey("proxy")) getProxy().readFromNBT(aNBT); - super.loadNBTData(aNBT); - piority = aNBT.getInteger("piority"); - sticky = aNBT.getBoolean("sticky"); - autoUnlock = aNBT.getBoolean("autoUnlock"); - suppressSticky = aNBT.getBoolean("suppressSticky"); - NBTTagCompound tag = (NBTTagCompound) aNBT.getTag("cahcedFilter"); - if (tag != null) { - cachedFilter[0] = ItemStack.loadItemStackFromNBT(tag); - updateFilter(cachedFilter[0]); - } - voidFull = aNBT.getBoolean("voidFull"); - voidOverflow = aNBT.getBoolean("voidOverflow"); - last = AEItemStack.create(mInventory[0]); - capOverride = aNBT.getInteger("capOverride"); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - getProxy().writeToNBT(aNBT); - super.saveNBTData(aNBT); - NBTTagList greggy = aNBT.getTagList("Inventory", 10); - for (int i = 0; i < mInventory.length; i++) { - - if (mInventory[i] != null) { - NBTTagCompound t; - t = ((NBTTagCompound) greggy.getCompoundTagAt(i)); - if (t != null) t.setInteger("Count", mInventory[i].stackSize); - } - - } - aNBT.setInteger("piority", piority); - aNBT.setBoolean("sticky", sticky); - aNBT.setBoolean("autoUnlock", autoUnlock); - aNBT.setBoolean("suppressSticky", suppressSticky); - if (cachedFilter[0] != null) { - NBTTagCompound tag = new NBTTagCompound(); - cachedFilter[0].writeToNBT(tag); - aNBT.setTag("cahcedFilter", tag); - } - aNBT.setBoolean("voidFull", voidFull); - aNBT.setBoolean("voidOverflow", voidOverflow); - if (capOverride != 0) aNBT.setInteger("capOverride", capOverride); - } - - @Override - public void onFacingChange() { - updateValidGridProxySides(); - } - - @Override - public void setItemNBT(NBTTagCompound aNBT) { - - final NBTTagList tItemList = new NBTTagList(); - for (int i = 0; i < getRealInventory().length; i++) { - final ItemStack tStack = getRealInventory()[i]; - if (tStack != null) { - final NBTTagCompound tTag = new NBTTagCompound(); - tTag.setInteger("IntSlot", i); - tStack.writeToNBT(tTag); - tTag.setInteger("Count", tStack.stackSize); - tItemList.appendTag(tTag); - } - } - aNBT.setTag("Inventory", tItemList); - - aNBT.setInteger("piority", piority); - aNBT.setBoolean("sticky", sticky); - aNBT.setBoolean("autoUnlock", autoUnlock); - aNBT.setBoolean("suppressSticky", suppressSticky); - if (cachedFilter[0] != null) { - NBTTagCompound tag = new NBTTagCompound(); - cachedFilter[0].writeToNBT(tag); - aNBT.setTag("cahcedFilter", tag); - } - aNBT.setBoolean("voidFull", voidFull); - aNBT.setBoolean("voidOverflow", voidOverflow); - if (capOverride != 0) aNBT.setInteger("capOverride", capOverride); - /* - * if(cachedFilter[0]!=null){ - * NBTTagCompound tag=new NBTTagCompound(); - * cachedFilter[0].writeToNBT(tag); - * aNBT.setTag("cahcedFilter", tag); - * } - * if(piority!=0)aNBT.setInteger("piority", piority); - * if(sticky)aNBT.setBoolean("sticky", sticky); - * if(voidFull)aNBT.setBoolean("voidFull", voidFull); - * if(voidOverflow)aNBT.setBoolean("voidOverflow", voidOverflow); - * if(capOverride!=0)aNBT.setInteger("capOverride", capOverride); - */ - } - - @Override - public boolean shouldDropItemAt(int index) { - - return false; - } - - public static String name(int t) { - - return StatCollector.translateToLocalFormatted("mesuperchest.name." + (t >= 6), suffix[t - 1]); - } - - public static String[] suffix = { "I", "II", "III", "IV", "V", "I", "II", "III", "IV", "V" }; - - @Override - public void onColorChangeServer(byte aColor) { - - super.onColorChangeServer(aColor); - AEColor c; - if (aColor == -1) { - c = (AEColor.Transparent); - } else c = (AEColor.values()[15 - aColor]); - - try { - getProxy().setColor(c); - getGridNode(null).updateState(); - } catch (Exception e) {} - - } - - @Override - public void setPriority(int newValue) { - this.piority = newValue; - - } - - /* - * @MENetworkEventSubscribe - * public void powerRender(final MENetworkPowerStatusChange c) { - * this.updateStatus(); - * } - * @MENetworkEventSubscribe - * public void chanRender(final MENetworkChannelsChanged changedChannels) { - * this.updateStatus(); - * } - * @MENetworkEventSubscribe - * public void updateChannels(final MENetworkChannelsChanged changedChannels) { - * this.updateStatus(); - * } - */ - boolean update; - - public void updateStatus() { - - post(); - - } - - @Override - public void setInventorySlotContents(int aIndex, ItemStack aStack) { - super.setInventorySlotContents(aIndex, aStack); - post(); - } - - @Override - public ItemStack decrStackSize(int aIndex, int aAmount) { - try { - return super.decrStackSize(aIndex, aAmount); - } finally { - post(); - } - } - - boolean voidFull; - boolean voidOverflow; - - @MENetworkEventSubscribe - public void powerRender(final MENetworkPowerStatusChange c) { - this.updateStatus(); - } - - public void updateChannels(final MENetworkChannelsChanged changedChannels) { - this.updateStatus(); - } - - @Override - public void cellUpdate() { - update = true; - - } + public SuperChestME(String aName, int aTier, int aInvSlotCount, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aInvSlotCount, aDescription, aTextures); + + } + + public SuperChestME(int aID, String aName, String aNameRegional, int aTier, int aInvSlotCount) { + super(aID, aName, aNameRegional, aTier, aInvSlotCount, + reobf.proghatches.main.Config.get("SCME", ImmutableMap.of("items", commonSizeCompute(aTier)) + + ), new ITexture[0]); + Registration.items.add(new ItemStack(GregTechAPI.sBlockMachines, 1, aID)); + } + + int capOverride; + + @Override + public int getInventoryStackLimit() { + + return cap(); + } + + public int cap() { + if (capOverride >= 64) { + + return + + Math.max(64, Math.min(capOverride, commonSizeCompute(mTier))); + } + return commonSizeCompute(mTier); + } + + protected static int commonSizeCompute(int tier) { + switch (tier) { + case 1: + return 4000000; + case 2: + return 8000000; + case 3: + return 16000000; + case 4: + return 32000000; + case 5: + return 64000000; + case 6: + return 128000000; + case 7: + return 256000000; + case 8: + return 512000000; + case 9: + return 1024000000; + case 10: + return 2147483640; + default: + return 0; + } + } + /* + * @MENetworkEventSubscribe public void channel(final + * MENetworkChannelsChanged c) { post(); } + */ + + static Field m; + static { + try { + m = MEMonitorHandler.class.getDeclaredField("hasChanged"); + } catch (Exception e) { + e.printStackTrace(); + } + m.setAccessible(true); + } + + public static void forceUpdate(MEMonitorHandler thiz) { + + try { + m.setBoolean(thiz, true); + } catch (Exception e) { + e.printStackTrace(); + } + } + + private AEItemStack last; + + private void post() { + + try { + + // this.getProxy().getGrid().postEvent(new + // MENetworkCellArrayUpdate()); + // this.getProxy().getGrid().postEvent(new + // MENetworkStorageEvent(handler0, StorageChannel.ITEMS)); + try { + + if (last != null) { + if (mInventory[0] != null) { + if (last.equals(mInventory[0])) { + if (last.getStackSize() == mInventory[0].stackSize) { + return; + } else { + + this.getProxy().getStorage().postAlterationOfStoredItems(StorageChannel.ITEMS, + ImmutableList.of(last.copy() + .setStackSize(mInventory[0].stackSize - last.getStackSize())), + new MachineSource(this)); + last = AEItemStack.create(mInventory[0]); + return; + } + } + + } + ; + + this.getProxy().getStorage().postAlterationOfStoredItems(StorageChannel.ITEMS, + ImmutableList.of(last.copy().setStackSize(-last.getStackSize())), new MachineSource(this)); + } + last = AEItemStack.create(mInventory[0]); + if (last != null) { + this.getProxy().getStorage().postAlterationOfStoredItems(StorageChannel.ITEMS, + ImmutableList.of(last.copy().setStackSize(last.getStackSize())), new MachineSource(this)); + } + + } catch (final GridAccessException ignore) { + } + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + }/* + * @MENetworkEventSubscribe public void power(final + * MENetworkPowerStatusChange c) { post(); } + */ + + @Override + public IGridNode getActionableNode() { + + return getProxy().getNode(); + } + + @Override + public IGridNode getGridNode(ForgeDirection dir) { + + return getProxy().getNode(); + } + + @Override + public void securityBreak() { + + } + + static interface SilentCloseable extends Closeable { + + @Override + void close(); + } + + boolean freezeFlag;// + + @Override + public List getCellArray(StorageChannel channel) { + if (freezeFlag) + return ImmutableList.of(); + if (channel == StorageChannel.ITEMS) + return ImmutableList.of(handler); + else + return ImmutableList.of(); + + } + + @Override + public int getPriority() { + + return piority; + } + + private ItemStack visualStack() { + return new ItemStack(GregTechAPI.sBlockMachines, 1, getBaseMetaTileEntity().getMetaTileID()); + } + + AENetworkProxy gridProxy; + + private void updateValidGridProxySides() { + /* + * if (disabled) { + * getProxy().setValidSides(EnumSet.noneOf(ForgeDirection.class)); + * return; } + */ + getProxy().setValidSides(EnumSet.complementOf(EnumSet.of(getBaseMetaTileEntity().getFrontFacing()))); + + } + + @Override + public AENetworkProxy getProxy() { + + if (gridProxy == null) { + gridProxy = new AENetworkProxy(this, "proxy", visualStack(), true); + gridProxy.setFlags(GridFlags.REQUIRE_CHANNEL); + updateValidGridProxySides(); + if (getBaseMetaTileEntity().getWorld() != null) + gridProxy.setOwner(getBaseMetaTileEntity().getWorld() + .getPlayerEntityByName(getBaseMetaTileEntity().getOwnerName())); + } + + return this.gridProxy; + } + + @Override + public void saveChanges(IMEInventory cellInventory) { + + markDirty(); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + + return new SuperChestME(mName, mTier, mInventory.length, mDescriptionArray, mTextures); + } + + @Override + public void blinkCell(int slot) { + + post(); + } + + @Override + public ITexture[] getTexturesActive(ITexture aBaseTexture) { + + return new ITexture[] { aBaseTexture, new IIconTexture(ExtraBlockTextures.MEChest.getIcon(), 0xD7BBEC), + new IIconTexture(ExtraBlockTextures.BlockMEChestItems_Light.getIcon(), 0xffffff) + + }; + } + + @Override + public ITexture[] getTexturesInactive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, new IIconTexture(ExtraBlockTextures.MEChest.getIcon(), 0xD7BBEC) + /* + * , new IIconTexture + * (ExtraBlockTextures.BlockMEChestItems_Light.getIcon(), + * 0xffffff) + */ + + }; + } + + @Override + public DimensionalCoord getLocation() { + + return new DimensionalCoord((TileEntity) this.getBaseMetaTileEntity()); + } + + public Consumer updateFilter; + ItemStack[] cachedFilter = new ItemStack[1]; + + public void updateFilter(ItemStack fs) { + cachedFilter[0] = fs; + ItemList fl = new ItemList(); + fl.add(AEItemStack.create(fs)); + updateFilter.accept(fl); + post(); + } + + @SuppressWarnings({ "unchecked", "rawtypes" }) + IMEInventoryHandler handler = new MEInventoryHandler(new UnlimitedWrapper(), StorageChannel.ITEMS) { + + public boolean getSticky() { + return sticky && !suppressSticky; + }; + + public int getPriority() { + return piority; + }; + + { + updateFilter = s -> this.setPartitionList(new PrecisePriorityList(s)); + } + }; + + IMEMonitor handler0x = new MEMonitorHandler(handler); + /* + * IMEMonitor handler0= new MEMonitorHandler(handler ); + */ + boolean sticky; + int piority; + + @Override + public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { + + super.onFirstTick(aBaseMetaTileEntity); + getProxy().onReady(); + onColorChangeServer(aBaseMetaTileEntity.getColorization()); + post(); + } + + public class UnlimitedWrapper implements IMEInventory { + + public UnlimitedWrapper() { + + } + + @Override + public IAEItemStack injectItems(IAEItemStack input, Actionable type, BaseActionSource src) { + if (type != Actionable.SIMULATE) + post(); + try { + long l = input.getStackSize(); + long compl = 0; + if (l > Integer.MAX_VALUE) { + compl = l - Integer.MAX_VALUE; + } + ItemStack in = input.getItemStack(); + ItemStack thiz = mInventory[0]; + if (thiz != null && !Platform.isSameItem(in, thiz)) + return input; + if (thiz == null) { + thiz = in.copy(); + thiz.stackSize = 0; + } + int space = Math.max(0, cap() - thiz.stackSize); + int transfer = Math.min(space, in.stackSize); + if (type == Actionable.SIMULATE) { + in.stackSize -= transfer; + if (in.stackSize <= 0 && compl == 0) + in = null; + AEItemStack ret = AEItemStack.create(in); + if (ret != null) + ret.incStackSize(compl); + return ret; + } + if (type == Actionable.MODULATE) { + thiz.stackSize += transfer; + mInventory[0] = thiz; + in.stackSize -= transfer; + if (in.stackSize <= 0 && compl == 0) + in = null; + AEItemStack ret = AEItemStack.create(in); + if (ret != null) + ret.incStackSize(compl); + return ret; + + } + + return null; + } finally { + last = AEItemStack.create(mInventory[0]); + if (voidOverflow && (mInventory[0] != null + && ItemStack.areItemStackTagsEqual(mInventory[0], input.getItemStack()) + && mInventory[0].getItem() == input.getItem() + && mInventory[0].getItemDamage() == input.getItemDamage())) { + return null; + } + } + } + + @Override + public IAEItemStack extractItems(IAEItemStack input, Actionable type, BaseActionSource src) { + try { + + if (type != Actionable.SIMULATE) + post(); + + ItemStack in = input.getItemStack(); + ItemStack thiz = mInventory[0]; + if (thiz != null && !Platform.isSameItem(in, thiz)) + return null; + if (thiz == null) { + return null; + } // thiz=in.copy(); } + int transfer = Math.min(in.stackSize, thiz.stackSize); + if (transfer == 0) + return null; + if (type == Actionable.SIMULATE) { + in.stackSize = transfer; + return AEItemStack.create(in); + + } + if (type == Actionable.MODULATE) { + thiz.stackSize -= transfer; + if (thiz.stackSize <= 0) + thiz = null; + mInventory[0] = thiz; + in.stackSize = transfer; + return AEItemStack.create(in); + } + + return null; + } finally { + + last = AEItemStack.create(mInventory[0]); + } + } + + @Override + public IItemList getAvailableItems(IItemList out) { + if (mInventory[0] != null) + out.addStorage(AEItemStack.create(mInventory[0])); + return out; + } + + @Override + public StorageChannel getChannel() { + + return StorageChannel.ITEMS; + } + } + + @Override + public boolean isValidSlot(int aIndex) { + + return true; + } + + public int getMaxItemCount() { + + return super.getMaxItemCount(); + } + + @Override + public boolean isFacingValid(ForgeDirection facing) { + + return true; + } + + @Override + public boolean isAccessAllowed(EntityPlayer aPlayer) { + + return true; + } + + @Override + public boolean isItemValidForSlot(int aIndex, ItemStack aStack) { + if (aIndex == 0) + return true; + if (mInventory[0] == null || mInventory[0].stackSize == 0) { + return true; + } + return Platform.isSameItem(mInventory[0], aStack); + } + + @Override + public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + + return true; + } + + @Override + public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + + if(mInventory[0]!=null&& + aStack!=null&&(!Platform.isSameItem(mInventory[0], aStack))){ + return false; + } + return aIndex != 0; + } + + protected void fillStacksIntoFirstSlots() { + final int L = mInventory.length; + HashMap slots = new HashMap<>(L); + HashMap stacks = new HashMap<>(L); + List order = new ArrayList<>(L); + List validSlots = new ArrayList<>(L); + for (int i = 1; i < L; i++) { + if (!isValidSlot(i)) + continue; + validSlots.add(i); + ItemStack s = mInventory[i]; + if (s == null) + continue; + GTUtility.ItemId sID = GTUtility.ItemId.createNoCopy(s); + slots.merge(sID, s.stackSize, Integer::sum); + if (!stacks.containsKey(sID)) + stacks.put(sID, s); + order.add(sID); + mInventory[i] = null; + } + int slotindex = 0; + for (GTUtility.ItemId sID : order) { + int toSet = slots.get(sID); + if (toSet == 0) + continue; + int slot = validSlots.get(slotindex); + slotindex++; + mInventory[slot] = stacks.get(sID).copy(); + toSet = Math.min(toSet, mInventory[slot].getMaxStackSize()); + mInventory[slot].stackSize = toSet; + slots.merge(sID, toSet, (a, b) -> a - b); + } + } + + boolean autoUnlock; + boolean suppressSticky; + + boolean wasActive; + int rep; + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + + boolean active = this.getProxy().isActive(); + if (!aBaseMetaTileEntity.getWorld().isRemote) { + if (aTick % 40 == 1) { + post(); + } + + if (rep > 0) { + rep--; + update = true; + } + if (this.getBaseMetaTileEntity().hasInventoryBeenModified()) { + update = true; + rep = 1; + } + ; + + if (update) { + update = false; + updateStatus(); + } + if (wasActive != active) { + wasActive = active; + + try { + this.getProxy().getGrid().postEvent(new MENetworkCellArrayUpdate()); + } catch (GridAccessException e) { + + } + post(); + } + if (voidFull) { + voidOverflow = false; + mInventory[0] = null; + } + if (mInventory[0] != null && voidOverflow) { + + if (mInventory[0] != null) + mInventory[0].stackSize = Math.min(cap(), mInventory[0].stackSize); + } + + if (!aBaseMetaTileEntity.getWorld().isRemote && (aTick & 16) != 0) { + this.getBaseMetaTileEntity().setActive(this.getProxy().isPowered() && active); + + } + + if ((!suppressSticky) && ((mInventory[0] == null) && autoUnlock)) { + + suppressSticky = true; + post(); + + } + if (suppressSticky && ((mInventory[0] != null) || (!autoUnlock))) { + + suppressSticky = false; + post(); + + } + + } + super.onPostTick(aBaseMetaTileEntity, aTick); + + if (aBaseMetaTileEntity.getWorld().isRemote) { + return; + } + + boolean needToSort = false; + for (int i = 1; i < mInventory.length; i++) { + ItemStack is = mInventory[i]; + if (is == null) + continue; + if (mInventory[0] != null) { + if (mInventory[0].getItem() != is.getItem() || mInventory[0].getItemDamage() != is.getItemDamage() ||(!ItemStack.areItemStackTagsEqual(mInventory[0], is))) +{ + //System.out.println("xx"); + continue;} + } + markDirty(); + if (mInventory[0] == null) { + mInventory[0] = is.copy(); + mInventory[i] = null; + } else if (cap() - is.stackSize >= mInventory[0].stackSize) { + mInventory[0].stackSize += is.stackSize; + mInventory[i] = null; + } else { + int to = Math.min(cap() - mInventory[0].stackSize, is.stackSize); + mInventory[0].stackSize += to; + mInventory[i].stackSize -= to; + needToSort = true; + } + } + if (needToSort) + fillStacksIntoFirstSlots(); + + } + + // use in try-finally + public SilentCloseable freeze() { + freezeFlag = true; + post(); + try { + this.getProxy().getGrid().postEvent(new MENetworkCellArrayUpdate()); + } catch (GridAccessException e) { + } + return new SilentCloseable() { + + @Override + public void close() { + freezeFlag = false; + try { + getProxy().getGrid().postEvent(new MENetworkCellArrayUpdate()); + } catch (GridAccessException e) { + } + } + }; + + } + + ButtonWidget createRefundButton(IWidgetBuilder builder) { + + Widget button = new ButtonWidget().setOnClick((clickData, widget) -> { + + refund(); + }).setPlayClickSound(true).setBackground(GTUITextures.BUTTON_STANDARD, GTUITextures.OVERLAY_BUTTON_EXPORT) + + .addTooltips(ImmutableList.of("Return all internally stored items back to AE")) + + .setPos(new Pos2d(getGUIWidth() - 18 - 3, 5 + 16 + 2)).setSize(16, 16); + return (ButtonWidget) button; + } + + public void refund() { + try (SilentCloseable __ = freeze()) { + if (mInventory[0] != null) { + IAEItemStack left = getProxy().getStorage().getItemInventory() + .injectItems(AEItemStack.create(mInventory[0]), Actionable.MODULATE, new MachineSource(this)); + mInventory[0] = left == null ? null : left.getItemStack(); + } + } catch (GridAccessException e) { + } finally { + } + markDirty(); + } + + @Override + public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { + if (ProghatchesUtil.handleUse(aPlayer, (MetaTileEntity) aBaseMetaTileEntity.getMetaTileEntity())) { + return true; + } + + GTUIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); + return true; + } + + // @Override + public boolean useModularUI() { + return true; + } + + @Override + public boolean isUseableByPlayer(EntityPlayer entityplayer) { + + return true; + } + + ItemStackHandler uihandler = new ItemStackHandler(mInventory) { + + public boolean isItemValid(int slot, ItemStack stack) { + return isItemValidForSlot(slot, stack); + }; + + }; + + @Override + public ItemStackHandler getInventoryHandler() { + + return uihandler; + } + + @Override + public void addUIWidgets(Builder builder, UIBuildContext buildContext) { + builder.widget(new SlotWidget(new BaseSlotPatched(this.getInventoryHandler(), 0)) + + .setPos(3, 3)); + builder.widget(new DrawableWidget().setDrawable(ModularUITextures.ARROW_LEFT) + + .setPos(3 + 18, 3).setSize(18, 18)); + builder.widget(new SlotWidget(new BaseSlotPatched(this.getInventoryHandler(), 1)).setPos(3 + 18 * 2, 3)); + builder.widget(new SlotWidget(new BaseSlotPatched(this.getInventoryHandler(), 2)).setPos(3 + 18 * 3, 3)); + builder.widget(createRefundButton(builder)); + Widget w; + builder.widget(w = new DrawableWidget().setDrawable(ModularUITextures.ICON_INFO) + + .setPos(3 + 18 * 4 + 1, 3 + 1).setSize(16, 16) + // .addTooltip("xxxxxxx") + ); + + IntStream.range(0, Integer.valueOf(StatCollector.translateToLocal("programmable_hatches.gt.mechest.tooltip"))) + .forEach(s -> w + .addTooltip(LangManager.translateToLocal("programmable_hatches.gt.mechest.tooltip." + +s))); + + builder.widget(createButton(() -> sticky, val -> { + sticky = val; + post(); + // updateSlots(); + }, new ItemDrawable(new ItemStack(Items.slime_ball)), + ImmutableList.of(StatCollector.translateToLocal("programmable_hatches.gt.sticky") + + ) + + , 0).setPos(3, 3 + 18 * 2)); + + builder.widget(createButton(() -> autoUnlock, val -> { + + cachedFilter[0] = null; + updateFilter(cachedFilter[0]); + autoUnlock = val; + post(); + // updateSlots(); + }, GTUITextures.OVERLAY_BUTTON_RECIPE_UNLOCKED, + + // new ItemDrawable(new ItemStack(Items.slime_ball)), + ImmutableList.of(StatCollector.translateToLocal("programmable_hatches.gt.sticky.autounlock") + + ) + + , 0).setPos(3 + 18, 3 + 18 * 2)); + builder.widget(SlotWidget.phantom( + + new ItemStackHandler(cachedFilter) { + + public void setStackInSlot(int slot, ItemStack stack) { + super.setStackInSlot(slot, stack); + updateFilter(cachedFilter[0]); + autoUnlock = false; + post(); + }; + }, 0 + + ).setPos(3 + 18 * 2, 3 + 18 * 2) + .addTooltip(StatCollector.translateToLocal("programmable_hatches.gt.phantom.filter")) + + ); + + builder.widget(new TextFieldWidget().setPattern(BaseTextFieldWidget.WHOLE_NUMS).setGetter(() -> piority + "") + .setSetter(s -> { + try { + piority = Integer.parseInt(s); + } catch (Exception e) { + piority = 0; + } + ; + post(); + }).setSynced(true, true) + + .setFocusOnGuiOpen(true).setTextColor(Color.WHITE.dark(1)) + + .setBackground(GTUITextures.BACKGROUND_TEXT_FIELD.withOffset(-1, -1, 2, 2)) + .addTooltip( + StatCollector + .translateToLocal( + "programmable_hatches.gt.piority")) + .setPos(3 + 2, 18 * 3 + 3 + 1).setSize(16 * 8, 16)) + .widget(new TextFieldWidget().setPattern(BaseTextFieldWidget.WHOLE_NUMS) + .setGetter(() -> capOverride + "").setSetter(s -> { + try { + capOverride = Integer.parseInt(s); + } catch (Exception e) { + capOverride = 0; + } + ; + if (capOverride < 64) + capOverride = 0; + post(); + }).setSynced(true, true) + + .setTextColor(Color.WHITE.dark(1)) + + .setBackground(GTUITextures.BACKGROUND_TEXT_FIELD.withOffset(-1, -1, 2, 2)) + .addTooltip(StatCollector.translateToLocal("programmable_hatches.gt.capOverride.64")) + .setPos(3 + 18 * 5 + 1, 3 + 1).setSize(16 * 4, 16)) + .widget(new CycleButtonWidget().setToggle(() -> voidFull, val -> { + voidFull = val; + + if (!voidFull) { + GTUtility.sendChatToPlayer(buildContext.getPlayer(), + GTUtility.trans("269", "Void Full Mode Disabled")); + } else { + GTUtility.sendChatToPlayer(buildContext.getPlayer(), + GTUtility.trans("270", "Void Full Mode Enabled")); + } + }).setVariableBackground(GTUITextures.BUTTON_STANDARD_TOGGLE) + .setStaticTexture(GTUITextures.OVERLAY_BUTTON_TANK_VOID_ALL) + .setGTTooltip(() -> mTooltipCache.getData("GT5U.machines.digitaltank.voidfull.tooltip")) + .setTooltipShowUpDelay(TOOLTIP_DELAY).setPos(3 + 18 * 3, 3 + 18 * 2).setSize(18, 18)) + + .widget(new CycleButtonWidget().setToggle(() -> voidOverflow, val -> { + voidOverflow = val; + + if (!voidOverflow) { + GTUtility.sendChatToPlayer(buildContext.getPlayer(), + GTUtility.trans("267", "Overflow Voiding Mode Disabled")); + } else { + GTUtility.sendChatToPlayer(buildContext.getPlayer(), + GTUtility.trans("268", "Overflow Voiding Mode Enabled")); + } + }).setVariableBackground(GTUITextures.BUTTON_STANDARD_TOGGLE) + .setStaticTexture(GTUITextures.OVERLAY_BUTTON_TANK_VOID_EXCESS) + .setGTTooltip(() -> mTooltipCache.getData("GT5U.machines.digitaltank.voidoverflow.tooltip")) + .setTooltipShowUpDelay(TOOLTIP_DELAY).setPos(3 + 18 * 4, 3 + 18 * 2).setSize(18, 18)); + + } + + private Widget createButton(Supplier getter, Consumer setter, IDrawable picture, + List tooltip, int offset) { + return new CycleButtonWidget() + + .setToggle(getter, setter).setTextureGetter(__ -> picture) + .setVariableBackground(GTUITextures.BUTTON_STANDARD_TOGGLE).setTooltipShowUpDelay(TOOLTIP_DELAY) + .setPos(7 + offset * 18, 62).setSize(18, 18).addTooltips(tooltip); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + + if (aNBT.hasKey("proxy")) + getProxy().readFromNBT(aNBT); + super.loadNBTData(aNBT); + piority = aNBT.getInteger("piority"); + sticky = aNBT.getBoolean("sticky"); + autoUnlock = aNBT.getBoolean("autoUnlock"); + suppressSticky = aNBT.getBoolean("suppressSticky"); + NBTTagCompound tag = (NBTTagCompound) aNBT.getTag("cahcedFilter"); + if (tag != null) { + cachedFilter[0] = ItemStack.loadItemStackFromNBT(tag); + updateFilter(cachedFilter[0]); + } + voidFull = aNBT.getBoolean("voidFull"); + voidOverflow = aNBT.getBoolean("voidOverflow"); + last = AEItemStack.create(mInventory[0]); + capOverride = aNBT.getInteger("capOverride"); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + getProxy().writeToNBT(aNBT); + super.saveNBTData(aNBT); + NBTTagList greggy = aNBT.getTagList("Inventory", 10); + for (int i = 0; i < mInventory.length; i++) { + + if (mInventory[i] != null) { + NBTTagCompound t; + t = ((NBTTagCompound) greggy.getCompoundTagAt(i)); + if (t != null) + t.setInteger("Count", mInventory[i].stackSize); + } + + } + aNBT.setInteger("piority", piority); + aNBT.setBoolean("sticky", sticky); + aNBT.setBoolean("autoUnlock", autoUnlock); + aNBT.setBoolean("suppressSticky", suppressSticky); + if (cachedFilter[0] != null) { + NBTTagCompound tag = new NBTTagCompound(); + cachedFilter[0].writeToNBT(tag); + aNBT.setTag("cahcedFilter", tag); + } + aNBT.setBoolean("voidFull", voidFull); + aNBT.setBoolean("voidOverflow", voidOverflow); + if (capOverride != 0) + aNBT.setInteger("capOverride", capOverride); + } + + @Override + public void onFacingChange() { + updateValidGridProxySides(); + } + + @Override + public void setItemNBT(NBTTagCompound aNBT) { + + final NBTTagList tItemList = new NBTTagList(); + for (int i = 0; i < getRealInventory().length; i++) { + final ItemStack tStack = getRealInventory()[i]; + if (tStack != null) { + final NBTTagCompound tTag = new NBTTagCompound(); + tTag.setInteger("IntSlot", i); + tStack.writeToNBT(tTag); + tTag.setInteger("Count", tStack.stackSize); + tItemList.appendTag(tTag); + } + } + aNBT.setTag("Inventory", tItemList); + + aNBT.setInteger("piority", piority); + aNBT.setBoolean("sticky", sticky); + aNBT.setBoolean("autoUnlock", autoUnlock); + aNBT.setBoolean("suppressSticky", suppressSticky); + if (cachedFilter[0] != null) { + NBTTagCompound tag = new NBTTagCompound(); + cachedFilter[0].writeToNBT(tag); + aNBT.setTag("cahcedFilter", tag); + } + aNBT.setBoolean("voidFull", voidFull); + aNBT.setBoolean("voidOverflow", voidOverflow); + if (capOverride != 0) + aNBT.setInteger("capOverride", capOverride); + /* + * if(cachedFilter[0]!=null){ NBTTagCompound tag=new NBTTagCompound(); + * cachedFilter[0].writeToNBT(tag); aNBT.setTag("cahcedFilter", tag); } + * if(piority!=0)aNBT.setInteger("piority", piority); + * if(sticky)aNBT.setBoolean("sticky", sticky); + * if(voidFull)aNBT.setBoolean("voidFull", voidFull); + * if(voidOverflow)aNBT.setBoolean("voidOverflow", voidOverflow); + * if(capOverride!=0)aNBT.setInteger("capOverride", capOverride); + */ + } + + @Override + public boolean shouldDropItemAt(int index) { + + return false; + } + + public static String name(int t) { + + return StatCollector.translateToLocalFormatted("mesuperchest.name." + (t >= 6), suffix[t - 1]); + } + + public static String[] suffix = { "I", "II", "III", "IV", "V", "I", "II", "III", "IV", "V" }; + + @Override + public void onColorChangeServer(byte aColor) { + + super.onColorChangeServer(aColor); + AEColor c; + if (aColor == -1) { + c = (AEColor.Transparent); + } else + c = (AEColor.values()[15 - aColor]); + + try { + getProxy().setColor(c); + getGridNode(null).updateState(); + } catch (Exception e) { + } + + } + + @Override + public void setPriority(int newValue) { + this.piority = newValue; + + } + + /* + * @MENetworkEventSubscribe public void powerRender(final + * MENetworkPowerStatusChange c) { this.updateStatus(); } + * + * @MENetworkEventSubscribe public void chanRender(final + * MENetworkChannelsChanged changedChannels) { this.updateStatus(); } + * + * @MENetworkEventSubscribe public void updateChannels(final + * MENetworkChannelsChanged changedChannels) { this.updateStatus(); } + */ + boolean update; + + public void updateStatus() { + + post(); + + } + + @Override + public void setInventorySlotContents(int aIndex, ItemStack aStack) { + super.setInventorySlotContents(aIndex, aStack); + post(); + } + + @Override + public ItemStack decrStackSize(int aIndex, int aAmount) { + try { + return super.decrStackSize(aIndex, aAmount); + } finally { + post(); + } + } + + boolean voidFull; + boolean voidOverflow; + + @MENetworkEventSubscribe + public void powerRender(final MENetworkPowerStatusChange c) { + this.updateStatus(); + } + + public void updateChannels(final MENetworkChannelsChanged changedChannels) { + this.updateStatus(); + } + + @Override + public void cellUpdate() { + update = true; + + } } diff --git a/src/main/java/reobf/proghatches/oc/TileWirelessPeripheralStation.java b/src/main/java/reobf/proghatches/oc/TileWirelessPeripheralStation.java index 642091c..203b1fc 100644 --- a/src/main/java/reobf/proghatches/oc/TileWirelessPeripheralStation.java +++ b/src/main/java/reobf/proghatches/oc/TileWirelessPeripheralStation.java @@ -143,10 +143,10 @@ public static class Block extends net.minecraft.block.BlockContainer { @SideOnly(value = Side.CLIENT) public void registerBlockIcons(IIconRegister reg) { super.registerBlockIcons(reg); - a = reg.registerIcon("proghatches:pstation"); - d = reg.registerIcon("proghatches:pstation_on"); - b = reg.registerIcon("proghatches:pstation_0"); - c = reg.registerIcon("proghatches:pstation_1"); + a = reg.registerIcon("proghatches:pstation_on"); + d = reg.registerIcon("proghatches:pstation"); + b = reg.registerIcon("proghatches:pstation_1"); + c = reg.registerIcon("proghatches:pstation_0"); } IIcon a, b, c; @@ -154,12 +154,14 @@ public void registerBlockIcons(IIconRegister reg) { @Override @SideOnly(value = Side.CLIENT) public IIcon getIcon(int side, int meta) { - if (side <= 1) return a;// top bottom + if (meta == 0) { if(side == 1)return d; return b; - } + } + + if (side <= 1) return a;// top bottom else return c; } diff --git a/src/main/resources/assets/proghatches/textures/blocks/pstation_0.png b/src/main/resources/assets/proghatches/textures/blocks/pstation_0.png index c92ce9368a71a866e51b457c99d4ae20d7795798..9f215a073c7f613154ddf6f13443dd94dde72188 100644 GIT binary patch delta 573 zcmV-D0>b^61nmTn7YZN<1^@s68;SVLks&C5!T8Ow3BHZt`c}d|hrtGBA}9uepn`!4-klkBoYP+oEra1^=Wq(j z>bm`P>9L)1xg5zGIgTUG=TltQl_-jo?fKp3R4SFIUaxCnCX-PkM4**n7%D^QbXrn> zsg!~Y1_N<95R}X16cs1T8OBEv=h0{+!{JaSlZgW2bNR{V^NJoCFasx{X#)9-;xlAp z{{8r=oua=+C=?2EzuzUB&1%p)(Is>^9OUosU-IYbY4YiGiUB&Ej;z<~*W7klNm{K| z((m`RI^#4N4e9lIF+jWB7T@=^5&_|VGnABT78NmwBjz4de>@&BngIvC+wI0nq?Orh zCb!#77K?=hejwB7R6Nt_a=BD}KA)?fIN$TcGYpw-T)A8>x_S0M2L!TtBzp;hKn_!gHc^j03ZMdN&Ed?=S0W1*=#gy!%>CACHBG=q5`@kkl0>}z7pm2&DkSW7J9XNtw2~rFu~^iuu(4nT zFsugK76HjNtxgdLJ7d2-Bo;^o7$-Vp6Bz?LJ3(5o*9f*v7(%yXZGbT%jNk4?uQ8cu z!ICnWXy>=_pYT0sHk;b%f4>JPtyW9MD0j)_yK~y+TO_IB6 z0#Oi#&)MUx5$se18%rSpA$ft6c??_M$``Q;b|MHC8w4*{*oe1vSKYJuW=Dd5G5%-f zpX+KHjfQ!Fwbpwd1VNTV$*a>go6T;wi?moQ^41)+X%2XyP;kzXGnq^Reu$OJWeVVb z1rUG}9b`6}O{dfOd`>b>2~;W-%A}+kn`Q>y;LfR<(aM5>y1VuN$B_caU4^RK z9EUaNK$zoTSt&^pJXoT~D0j)_yK~y+TO_IB6 z0#Oi#&)MUx5$se18%rSpA$ft6c??_M$``Q;b|MHC8w4*{*oe1vSKYJuW=Dd5G5%-f zpX+KHjfQ!Fwbpwd1VNTV$*a>go6T;wi?moQ^41)+X%2XyP;kzXGnq^Reu$OJWeVVb z1rUG}9b`6}O{dfOd`>b>2~;W-%A}+kn`Q>y;LfR<(aM5>y1VuN$B_caU4^RK z9EUaNK$zoTSt&^pJXoT~b^61nmTn7YZN<1^@s68;SVLks&C5!T8Ow3BHZt`c}d|hrtGBA}9uepn`!4-klkBoYP+oEra1^=Wq(j z>bm`P>9L)1xg5zGIgTUG=TltQl_-jo?fKp3R4SFIUaxCnCX-PkM4**n7%D^QbXrn> zsg!~Y1_N<95R}X16cs1T8OBEv=h0{+!{JaSlZgW2bNR{V^NJoCFasx{X#)9-;xlAp z{{8r=oua=+C=?2EzuzUB&1%p)(Is>^9OUosU-IYbY4YiGiUB&Ej;z<~*W7klNm{K| z((m`RI^#4N4e9lIF+jWB7T@=^5&_|VGnABT78NmwBjz4de>@&BngIvC+wI0nq?Orh zCb!#77K?=hejwB7R6Nt_a=BD}KA)?fIN$TcGYpw-T)A8>x_S0M2L!TtBzp;hKn_!gHc^j03ZMdN&Ed?=S0W1*=#gy!%>CACHBG=q5`@kkl0>}z7pm2&DkSW7J9XNtw2~rFu~^iuu(4nT zFsugK76HjNtxgdLJ7d2-Bo;^o7$-Vp6Bz?LJ3(5o*9f*v7(%yXZGbT%jNk4?uQ8cu z!ICnWXy>=_pYT0sHk;b%f4>JPtyW9M