diff --git a/README.md b/README.md index fca3630..15cb527 100644 --- a/README.md +++ b/README.md @@ -6,4 +6,8 @@ 注意: 安装mod后会基于你当前的游戏语言,向GregTech.lang写入翻译条目,而写入后无法自动移除条目。 因此请先设置好游戏语言再安装此mod。 -如果在运行过mod之后想更改语言,且启用了UseThisFileAsLanguageFile=true,你需要删除GregTech.lang,或者恢复安装mod前的GregTech.lang的备份(若有)。 \ No newline at end of file +如果在运行过mod之后想更改语言,且启用了UseThisFileAsLanguageFile=true,你需要删除GregTech.lang,或者恢复安装mod前的GregTech.lang的备份(若有)。 + + +mod目前单文件适配GTNH整合包 2.5.1 2.6.0 2.6.1版本 不支持2.5.0及以下版本 +若最新版mod不能在支持的整合包版本运行,请提issue \ No newline at end of file diff --git a/dependencies.gradle b/dependencies.gradle index 27281f4..95c197a 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -47,7 +47,7 @@ api("com.github.GTNewHorizons:NotEnoughEnergistics:1.5.1:dev") api("com.github.GTNewHorizons:Avaritia:1.49:dev") - +api('com.github.GTNewHorizons:GigaGramFab:0.3.19:dev') api('com.github.GTNewHorizons:Angelica:1.0.0-alpha42:api') { transitive = false } api("com.github.GTNewHorizons:AppleCore:3.3.0:dev") { transitive = false } api("com.github.GTNewHorizons:BuildCraft:7.1.39:dev") { transitive = false } diff --git a/src/main/java/reobf/proghatches/eucrafting/InterfaceP2PEUData.java b/src/main/java/reobf/proghatches/eucrafting/InterfaceP2PEUData.java index 005d728..a329cc3 100644 --- a/src/main/java/reobf/proghatches/eucrafting/InterfaceP2PEUData.java +++ b/src/main/java/reobf/proghatches/eucrafting/InterfaceP2PEUData.java @@ -774,7 +774,7 @@ public boolean getRedstone() { @Override public void addUIWidgets(Builder builder, GT_CoverUIBuildContext ss) { - +if(2>1)return; builder.setBackground(ModularUITextures.VANILLA_BACKGROUND); if (ss.isAnotherWindow() == false) { int rgb = ss.getGuiColorization(); diff --git a/src/main/java/reobf/proghatches/eucrafting/PartEUP2PInterface.java b/src/main/java/reobf/proghatches/eucrafting/PartEUP2PInterface.java index 16c456e..0a5fd9c 100644 --- a/src/main/java/reobf/proghatches/eucrafting/PartEUP2PInterface.java +++ b/src/main/java/reobf/proghatches/eucrafting/PartEUP2PInterface.java @@ -528,7 +528,7 @@ public TickRateModulation tickingRequest(IGridNode node, int ticksSinceLastCall) - if (ok || redstoneticks > 0) { + if (ok || all.stream().map(s->s.redstoneticks>0).findAny().isPresent()) { all.forEach(s->s.resetIdleCheckStatus(false)); try { @@ -553,7 +553,9 @@ public TickRateModulation tickingRequest(IGridNode node, int ticksSinceLastCall) * * ((CraftingCPUCluster)cluster).addEmitable(AEItemStack * .create(blank_token.copy()).setStackSize(prevamp)); - */redstoneticks = 0; + */ + all.forEach(s->s.redstoneticks=0); + //redstoneticks = 0; amp = 0; break; } @@ -561,7 +563,14 @@ public TickRateModulation tickingRequest(IGridNode node, int ticksSinceLastCall) if (refund(store, store)) { amp = 0; - redstoneticks = 0; + //redstoneticks = 0; + all.forEach(s->s.redstoneticks=0); + } + + if(amp<-1){ + MyMod.LOG.error("inconsistance:"+amp+" "+Optional.ofNullable(this.getHost()).map(s->s.getTile()).map(s->s.toString()).orElse("")); + amp=0; + } } catch (GridAccessException e) { e.printStackTrace(); diff --git a/src/main/java/reobf/proghatches/eucrafting/TileFluidInterface_EU.java b/src/main/java/reobf/proghatches/eucrafting/TileFluidInterface_EU.java index 2e5365a..6e860a1 100644 --- a/src/main/java/reobf/proghatches/eucrafting/TileFluidInterface_EU.java +++ b/src/main/java/reobf/proghatches/eucrafting/TileFluidInterface_EU.java @@ -24,15 +24,20 @@ import appeng.api.AEApi; import appeng.api.config.Actionable; +import appeng.api.networking.IGridNode; import appeng.api.networking.crafting.ICraftingCPU; import appeng.api.networking.crafting.ICraftingMedium; import appeng.api.networking.crafting.ICraftingPatternDetails; import appeng.api.networking.crafting.ICraftingProviderHelper; import appeng.api.networking.events.MENetworkCraftingPatternChange; import appeng.api.networking.security.MachineSource; +import appeng.api.networking.ticking.IGridTickable; +import appeng.api.networking.ticking.TickRateModulation; +import appeng.api.networking.ticking.TickingRequest; import appeng.api.storage.IMEInventory; import appeng.api.storage.IMEMonitor; import appeng.api.storage.data.IAEItemStack; +import appeng.api.util.DimensionalCoord; import appeng.me.GridAccessException; import appeng.me.cluster.implementations.CraftingCPUCluster; import appeng.tile.TileEvent; @@ -42,7 +47,9 @@ import gregtech.api.GregTech_API; import gregtech.api.enums.GT_Values; import gregtech.api.gui.modularui.GT_UITextures; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IEnergyConnected; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.util.GT_Utility; import gregtech.common.gui.modularui.widget.CoverCycleButtonWidget; import ic2.api.energy.tile.IEnergySink; @@ -65,7 +72,10 @@ // TileFluidInterface_EU.class.getName().contains("TileFluidInterface")->true public class TileFluidInterface_EU extends TileFluidInterface - implements ITileWithModularUI, IInstantCompletable, IEnergyConnected, IDrain { + implements ITileWithModularUI, IInstantCompletable, IEnergyConnected, IDrain, + + IGridTickable + { static public IWailaDataProvider provider = new IWailaDataProvider() { @Override @@ -153,6 +163,8 @@ public void read(NBTTagCompound data) { averageamp = data.getDouble("averageamp"); redstoneticks = data.getInteger("redstoneticks"); expectedamp = data.getLong("expectedamp"); + fails=data.getInteger("fails"); + pass=data.getBoolean("pass"); is.clear(); IntStream.range(0, data.getInteger("pending_size")).forEach(s -> { @@ -205,6 +217,8 @@ public void write(NBTTagCompound data) { data.setDouble("averageamp", averageamp); data.setInteger("redstoneticks", redstoneticks); data.setLong("expectedamp", expectedamp); + data.setInteger("fails", fails); + data.setBoolean("pass", pass); for (int i = 0; i < is.size(); i++) { data.setTag("pending_" + i, is.get(i).writeToNBT(new NBTTagCompound())); } @@ -227,20 +241,79 @@ public void setPriority(int newValue) { public ArrayList is = new ArrayList<>(); boolean prevPower; - @TileEvent(TileEventType.TICK) - + public IMetaTileEntity getTargetTile(){ + + TileEntity te; + { + int x=getTile().xCoord; + int y=getTile().yCoord; + int z=getTile().zCoord; + ForgeDirection fd = this.getForward(); + if(fd==ForgeDirection.UNKNOWN)return null; + te=getTile().getWorldObj().getTileEntity( + x+fd.offsetX,y+fd.offsetY,z+fd.offsetZ); + } + if(te==null) + return null; + + if(te instanceof IGregTechTileEntity){ + + return ((IGregTechTileEntity) te).getMetaTileEntity(); + + + } + return null; + + } + private void resetIdleCheckStatus(boolean check) { + fails=0; + pass=false; + + } + boolean pass;int fails; + + @Override + public TickingRequest getTickingRequest(final IGridNode node) { + return new TickingRequest(1, 1, false, false); + //return super.tickingRequest(node, ticksSinceLastCall); + } + @Override + public TickRateModulation tickingRequest(IGridNode node, int ticksSinceLastCall) { + + tick(); + return TickRateModulation.SAME; + } + + //@TileEvent(TileEventType.TICK) public void tick() { if (this.worldObj.isRemote) { return; } returnItems(); - boolean pw = this.getWorldObj().isBlockIndirectlyGettingPowered(xCoord, yCoord, zCoord); + boolean ok=false; + + /* boolean pw = this.getWorldObj().isBlockIndirectlyGettingPowered(xCoord, yCoord, zCoord); boolean downedge = pw == false && prevPower == true; prevPower = pw; - if (downedge || redstoneticks > 0) { - + */ + + IMetaTileEntity t = getTargetTile(); + if(t!=null&&t instanceof IIdleStateProvider){ + if(pass)return; + if(((IIdleStateProvider) t).getIdle()==1){ + pass=true; + } + if(((IIdleStateProvider) t).failThisTick()){ + if(fails++==2){pass=true;};//fail 2 times, so assume no valid inputs, just pass it + } + {ok=true;} + } + + + if (ok || redstoneticks > 0) { + resetIdleCheckStatus(false); try { IMEMonitor store = getProxy().getStorage().getItemInventory(); @@ -335,6 +408,7 @@ public boolean pushPattern(ICraftingPatternDetails patternDetails, InventoryCraf boolean succ = super.pushPattern(p.original, table); if (succ) { amp = Math.max(amp, count[0]); + resetIdleCheckStatus(false); is.add(p.extraOut0); } diff --git a/src/main/java/reobf/proghatches/gt/cover/IProgrammer.java b/src/main/java/reobf/proghatches/gt/cover/IProgrammer.java new file mode 100644 index 0000000..0f0c5be --- /dev/null +++ b/src/main/java/reobf/proghatches/gt/cover/IProgrammer.java @@ -0,0 +1,7 @@ +package reobf.proghatches.gt.cover; + +import gregtech.api.interfaces.tileentity.ICoverable; + +public interface IProgrammer { + public void impl(ICoverable aTileEntity) ; +} diff --git a/src/main/java/reobf/proghatches/gt/cover/LastWorktimeCover.java b/src/main/java/reobf/proghatches/gt/cover/LastWorktimeCover.java index a561467..b286b65 100644 --- a/src/main/java/reobf/proghatches/gt/cover/LastWorktimeCover.java +++ b/src/main/java/reobf/proghatches/gt/cover/LastWorktimeCover.java @@ -6,6 +6,7 @@ import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import appeng.helpers.IPriorityHost; import gregtech.api.gui.modularui.GT_CoverUIBuildContext; import gregtech.api.gui.modularui.GT_UITextures; import gregtech.api.interfaces.ITexture; @@ -18,6 +19,7 @@ import gregtech.api.util.ISerializableObject; import gregtech.common.gui.modularui.widget.CoverDataControllerWidget; import gregtech.common.gui.modularui.widget.CoverDataFollower_CycleButtonWidget; +import gregtech.common.tileentities.machines.GT_MetaTileEntity_Hatch_CraftingInput_ME; import net.minecraft.item.ItemStack; import net.minecraft.util.StatCollector; import net.minecraftforge.common.util.ForgeDirection; diff --git a/src/main/java/reobf/proghatches/gt/cover/LinkedBusSlaveCover.java b/src/main/java/reobf/proghatches/gt/cover/LinkedBusSlaveCover.java new file mode 100644 index 0000000..fd4f4f8 --- /dev/null +++ b/src/main/java/reobf/proghatches/gt/cover/LinkedBusSlaveCover.java @@ -0,0 +1,62 @@ +package reobf.proghatches.gt.cover; + +import java.util.Optional; + +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.ICoverable; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.util.GT_CoverBehavior; +import gregtech.api.util.GT_CoverBehaviorBase; +import net.glease.ggfab.mte.MTE_LinkedInputBus; +import net.minecraft.item.ItemStack; +import net.minecraftforge.common.util.ForgeDirection; +import reobf.proghatches.gt.metatileentity.util.IProgrammingCoverBlacklisted; + +public class LinkedBusSlaveCover extends GT_CoverBehavior implements IProgrammer{ + + + @Override + public int getTickRate(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + + return 1; + } + + @Override + public void impl(ICoverable aTileEntity) { + if(aTileEntity instanceof IGregTechTileEntity){ + IMetaTileEntity x = ((IGregTechTileEntity) aTileEntity).getMetaTileEntity(); + if(x instanceof MTE_LinkedInputBus){ + MTE_LinkedInputBus bus=(MTE_LinkedInputBus) x; + try{ + ItemStack is=ProgrammingCover.sync(bus); + bus.setInventorySlotContents(bus.getCircuitSlot(), is); + }catch(RuntimeException e){ + //expected, do nothing + } + } + + } + + } + @Override + public boolean isCoverPlaceable(ForgeDirection side, ItemStack aStack, ICoverable aTileEntity) { + if (!Optional.of(aTileEntity).filter(s -> s instanceof IGregTechTileEntity) + .map(s -> ((IGregTechTileEntity) s).getMetaTileEntity()) + .filter(s -> s instanceof MTE_LinkedInputBus).isPresent()) + return false; + for(ForgeDirection d: ForgeDirection.VALID_DIRECTIONS){ + GT_CoverBehaviorBase beh = aTileEntity.getCoverBehaviorAtSideNew(d); + if(beh!=null&&beh.getClass()==ProgrammingCover.class){return false;} + } + return super.isCoverPlaceable(side, aStack, aTileEntity); + } + + @Override + public int doCoverThings(ForgeDirection side, byte aInputRedstone, int aCoverID, int aCoverVariable, + ICoverable aTileEntity, long aTimer) { + impl(aTileEntity); + + return aCoverVariable; + } + +} diff --git a/src/main/java/reobf/proghatches/gt/cover/ProgrammingCover.java b/src/main/java/reobf/proghatches/gt/cover/ProgrammingCover.java index 4eae6df..df29395 100644 --- a/src/main/java/reobf/proghatches/gt/cover/ProgrammingCover.java +++ b/src/main/java/reobf/proghatches/gt/cover/ProgrammingCover.java @@ -1,24 +1,37 @@ package reobf.proghatches.gt.cover; +import net.glease.ggfab.mte.MTE_LinkedInputBus; import net.minecraft.inventory.IInventory; import net.minecraft.inventory.ISidedInventory; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.util.ForgeDirection; +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; import java.util.Optional; +import java.util.UUID; +import java.util.WeakHashMap; + +import com.google.common.collect.ArrayListMultimap; +import com.google.common.collect.ListMultimap; import gregtech.api.interfaces.IConfigurationCircuitSupport; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.ICoverable; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.interfaces.tileentity.IMachineProgress; +import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_InputBus; import gregtech.api.util.GT_CoverBehavior; +import gregtech.api.util.GT_CoverBehaviorBase; import reobf.proghatches.gt.metatileentity.util.IProgrammingCoverBlacklisted; import reobf.proghatches.item.ItemProgrammingCircuit; import reobf.proghatches.main.MyMod; -public class ProgrammingCover extends GT_CoverBehavior { +public class ProgrammingCover extends GT_CoverBehavior implements IProgrammer { @Override public int getTickRate(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { @@ -85,6 +98,11 @@ public boolean isCoverPlaceable(ForgeDirection side, ItemStack aStack, ICoverabl .filter(s -> s instanceof IProgrammingCoverBlacklisted).isPresent()) return false; + for(ForgeDirection d: ForgeDirection.VALID_DIRECTIONS){ + GT_CoverBehaviorBase beh = aTileEntity.getCoverBehaviorAtSideNew(d); + if(beh!=null&&beh.getClass()==LinkedBusSlaveCover.class){return false;} + } + return super.isCoverPlaceable(side, aStack, aTileEntity); } @@ -92,8 +110,58 @@ public boolean isCoverPlaceable(ForgeDirection side, ItemStack aStack, ICoverabl public int doCoverThings(ForgeDirection side, byte aInputRedstone, int aCoverID, int aCoverVariable, ICoverable aTileEntity, long aTimer) { impl(aTileEntity); - + if(aTileEntity instanceof IGregTechTileEntity){ + IMetaTileEntity x = ((IGregTechTileEntity) aTileEntity).getMetaTileEntity(); + if(x instanceof MTE_LinkedInputBus){ + markOrUpdate((MTE_LinkedInputBus) x); + } + + } return aCoverVariable; } + public static class Data{ + String str; + ItemStack circuit; + public Data(String s,ItemStack i){ + str=s;circuit=i; + } + } + public static WeakHashMap ggfabLinkedBus=new WeakHashMap<>(); + + public static void markOrUpdate( + MTE_LinkedInputBus host + ){ + + Data bus = ggfabLinkedBus.get(host); + if(bus==null) + ggfabLinkedBus.put(host, new Data( + ggfabGetRealChannel(host), + host.getStackInSlot(host.getCircuitSlot()) + )); + else{ + + bus.str=ggfabGetRealChannel(host); + if(!ItemStack.areItemStacksEqual(bus.circuit,host.getStackInSlot(host.getCircuitSlot()))) + bus.circuit=host.getStackInSlot(host.getCircuitSlot()); + } + } + + private static RuntimeException RESUABLE_EXCEPTION=new RuntimeException("",null,false,false){ + private static final long serialVersionUID = 1L;}; + + public static ItemStack sync(MTE_LinkedInputBus host){ + String chan=ggfabGetRealChannel(host); + Data data = ggfabLinkedBus.values().stream().filter(s->Objects.equals(s.str,chan)).findAny().orElse(null); + if(data==null)throw RESUABLE_EXCEPTION; + return data.circuit.copy(); + } + + + private static String ggfabGetRealChannel(MTE_LinkedInputBus thiz) { + if (thiz.getChannel() == null) return null; + if (thiz.isPrivate()) return thiz.getBaseMetaTileEntity().getOwnerUuid() + thiz.getChannel(); + return new UUID(0, 0) + thiz.getChannel(); + } + } diff --git a/src/main/java/reobf/proghatches/gt/metatileentity/BufferedDualInputHatch.java b/src/main/java/reobf/proghatches/gt/metatileentity/BufferedDualInputHatch.java index 8201df8..fefed7d 100644 --- a/src/main/java/reobf/proghatches/gt/metatileentity/BufferedDualInputHatch.java +++ b/src/main/java/reobf/proghatches/gt/metatileentity/BufferedDualInputHatch.java @@ -206,8 +206,8 @@ public BufferedDualInputHatch(int id, String name, String nameRegional, int tier .put("bufferNum", bufferNum) .put("cap",format.format(fluidLimit(tier,mMultiFluid ))) .put("mMultiFluid", mMultiFluid) - .put("slots",itemLimit(tier)) - .put("stacksize",(int) (64 * Math.pow(2, Math.max(tier - 3, 0)))) + .put("slots",Math.min(16, (1 + tier) * (tier + 1))) + .put("stacksize",itemLimit(tier)) .put("fluidSlots", fluidSlots(tier)) //.put("supportFluid", fluid) .build()) @@ -407,7 +407,9 @@ private FluidTank[] initFluidTack(FluidTank[] t) { return t; } public boolean isAccessibleForMulti() { - + //System.out.println(tickFirstClassify); + // System.out.println(currentTick()); + // System.out.println("-----------"); return !isEmpty()&& tickFirstClassify+2 0) { @@ -559,6 +565,7 @@ public void classify(ListeningFluidTank[] fin, ItemStack[] iin) { mStoredItemInternal[ix].stackSize += mStoredItemInternalSingle[ix].stackSize; iin[ix] = null; } + tickFirstClassify=-1;//make it instantly accessible justHadNewItems = true; onClassify(); if (program) @@ -686,9 +693,9 @@ public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { super.onPostTick(aBaseMetaTileEntity, aTick); if (aBaseMetaTileEntity.getWorld().isRemote) return; - - - Optional.ofNullable(scheduled.peekLast()).filter(s->s==aTick).ifPresent(s->{ + //System.out.println(scheduled); + //System.out.println(aTick+" "+scheduled.peekLast()); + Optional.ofNullable(scheduled.peekLast()).filter(s->s{ scheduled.removeLast(); justHadNewItems=true; //inv0.forEach(st->System.out.println(st.isAccessibleForMulti())); @@ -1207,13 +1214,13 @@ public int compareTo(PiorityBuffer o) { - return (Optional) inv0.stream().filter(not(DualInvBuffer::isEmpty)) + return (Optional) inv0.stream().filter((DualInvBuffer::isAccessibleForMulti)) .map(s->new PiorityBuffer(s)) .sorted().map(s->{return s.buff;}) .findFirst(); }else{ - return (Optional) inv0.stream().filter(not(DualInvBuffer::isEmpty)) + return (Optional) inv0.stream().filter((DualInvBuffer::isAccessibleForMulti)) .findFirst(); diff --git a/src/main/java/reobf/proghatches/gt/metatileentity/SuperChestME.java b/src/main/java/reobf/proghatches/gt/metatileentity/SuperChestME.java index 96522d4..6b97f25 100644 --- a/src/main/java/reobf/proghatches/gt/metatileentity/SuperChestME.java +++ b/src/main/java/reobf/proghatches/gt/metatileentity/SuperChestME.java @@ -55,6 +55,7 @@ import appeng.api.util.AEColor; import appeng.api.util.DimensionalCoord; import appeng.client.texture.ExtraBlockTextures; +import appeng.helpers.IPriorityHost; import appeng.me.GridAccessException; import appeng.me.helpers.AENetworkProxy; import appeng.me.helpers.IGridProxyable; @@ -70,6 +71,7 @@ import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_InputBus; import gregtech.api.util.GT_Utility; @@ -90,9 +92,10 @@ import reobf.proghatches.lang.LangManager; import reobf.proghatches.main.registration.Registration; import reobf.proghatches.util.IIconTexture; +import reobf.proghatches.util.ProghatchesUtil; public class SuperChestME extends GT_MetaTileEntity_Hatch implements ICellContainer, IGridProxyable - +,IPriorityHost { public SuperChestME(String aName, int aTier, int aInvSlotCount, String[] aDescription, ITexture[][][] aTextures) { @@ -182,7 +185,7 @@ public List getCellArray(StorageChannel channel) { @Override public int getPriority() { - return 0; + return piority; } private ItemStack visualStack() { return new ItemStack(GregTech_API.sBlockMachines,1, getBaseMetaTileEntity().getMetaTileID()); @@ -462,7 +465,11 @@ public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { } @Override public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { - GT_UIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); + if(ProghatchesUtil.handleUse(aPlayer, (MetaTileEntity) aBaseMetaTileEntity.getMetaTileEntity())){ + return true; + } + + GT_UIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); return true; } @Override @@ -629,6 +636,11 @@ public void onColorChangeServer(byte aColor) { }catch(Exception e){} } +@Override +public void setPriority(int newValue) { +this.piority=newValue; + +} diff --git a/src/main/java/reobf/proghatches/gt/metatileentity/SuperTankME.java b/src/main/java/reobf/proghatches/gt/metatileentity/SuperTankME.java index f1aa142..13596ae 100644 --- a/src/main/java/reobf/proghatches/gt/metatileentity/SuperTankME.java +++ b/src/main/java/reobf/proghatches/gt/metatileentity/SuperTankME.java @@ -45,6 +45,7 @@ import appeng.api.networking.events.MENetworkEventSubscribe; import appeng.api.networking.events.MENetworkPowerStatusChange; import appeng.api.networking.security.BaseActionSource; +import appeng.api.networking.security.IActionHost; import appeng.api.storage.ICellContainer; import appeng.api.storage.IMEInventory; import appeng.api.storage.IMEInventoryHandler; @@ -56,6 +57,7 @@ import appeng.api.util.AEColor; import appeng.api.util.DimensionalCoord; import appeng.client.texture.ExtraBlockTextures; +import appeng.helpers.IPriorityHost; import appeng.me.GridAccessException; import appeng.me.helpers.AENetworkProxy; import appeng.me.helpers.IGridProxyable; @@ -72,6 +74,7 @@ import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_InputBus; import gregtech.api.util.GT_Utility; @@ -94,14 +97,16 @@ import reobf.proghatches.lang.LangManager; import reobf.proghatches.main.registration.Registration; import reobf.proghatches.util.IIconTexture; +import reobf.proghatches.util.ProghatchesUtil; public class SuperTankME extends GT_MetaTileEntity_Hatch implements ICellContainer, IGridProxyable - +,IPriorityHost { public SuperTankME(String aName, int aTier, int aInvSlotCount, String[] aDescription, ITexture[][][] aTextures) { super(aName, aTier, aInvSlotCount, aDescription, aTextures); content=new FluidTank(commonSizeCompute(aTier)); + } public SuperTankME(int aID, String aName, String aNameRegional, int aTier, int aInvSlotCount ) { @@ -120,6 +125,7 @@ public SuperTankME(int aID, String aName, String aNameRegional, int aTier, int a @MENetworkEventSubscribe public void channel(final MENetworkChannelsChanged c) { post(); + } private void post(){ @@ -166,7 +172,7 @@ public List getCellArray(StorageChannel channel) { @Override public int getPriority() { - return 0; + return piority; } private ItemStack visualStack() { return new ItemStack(GregTech_API.sBlockMachines,1, getBaseMetaTileEntity().getMetaTileID()); @@ -394,7 +400,10 @@ public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { } @Override public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { - GT_UIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); + if(ProghatchesUtil.handleUse(aPlayer, (MetaTileEntity) aBaseMetaTileEntity.getMetaTileEntity())){ + return true; + } + GT_UIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); return true; } @Override @@ -593,6 +602,12 @@ protected void fillStacksIntoFirstSlots() { slots.merge(sID, toSet, (a, b) -> a - b); } } +@Override +public void setPriority(int newValue) { +this.piority=newValue; + + +} } diff --git a/src/main/java/reobf/proghatches/item/ItemDedicatedCover.java b/src/main/java/reobf/proghatches/item/ItemDedicatedCover.java index a198aa0..cda4b2a 100644 --- a/src/main/java/reobf/proghatches/item/ItemDedicatedCover.java +++ b/src/main/java/reobf/proghatches/item/ItemDedicatedCover.java @@ -61,6 +61,7 @@ public void registerIcons(IIconRegister register) { icons[mark(1)] = register.registerIcon("proghatches:cover1"); icons[2] = register.registerIcon("proghatches:cover2");//disabled icons[mark(3)] = register.registerIcon("proghatches:cover2"); + icons[mark(4)] = register.registerIcon("proghatches:cover2"); icons[mark(32)] = register.registerIcon("proghatches:cover32"); icons[mark(33)] = register.registerIcon("proghatches:cover33"); icons[mark(34)] = register.registerIcon("proghatches:cover34"); diff --git a/src/main/java/reobf/proghatches/main/mixin/mixins/MixinHandleProgrammingOnRecipeStart.java b/src/main/java/reobf/proghatches/main/mixin/mixins/MixinHandleProgrammingOnRecipeStart.java index 56b5203..fece68a 100644 --- a/src/main/java/reobf/proghatches/main/mixin/mixins/MixinHandleProgrammingOnRecipeStart.java +++ b/src/main/java/reobf/proghatches/main/mixin/mixins/MixinHandleProgrammingOnRecipeStart.java @@ -12,6 +12,7 @@ import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_InputBus; import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_MultiBlockBase; +import reobf.proghatches.gt.cover.IProgrammer; import reobf.proghatches.gt.cover.ProgrammingCover; @Mixin(value = GT_MetaTileEntity_MultiBlockBase.class, remap = false) @@ -27,8 +28,8 @@ public GT_MetaTileEntity_Hatch_InputBus startRecipeProcessing(GT_MetaTileEntity_ GT_MetaTileEntity_Hatch_InputBus bus = (GT_MetaTileEntity_Hatch_InputBus) a; Arrays.stream(ForgeDirection.VALID_DIRECTIONS) .map(s -> bus.getBaseMetaTileEntity().getCoverBehaviorAtSideNew(s)).filter(Objects::nonNull) - .filter(s -> s instanceof ProgrammingCover) - .forEach(s -> ((ProgrammingCover) s).impl(bus.getBaseMetaTileEntity())); + .filter(s -> s instanceof IProgrammer) + .forEach(s -> ((IProgrammer) s).impl(bus.getBaseMetaTileEntity())); ; } catch (Exception e) { diff --git a/src/main/java/reobf/proghatches/main/mixin/mixins/eucrafting/MixinMachineIdle.java b/src/main/java/reobf/proghatches/main/mixin/mixins/eucrafting/MixinMachineIdle.java index 9cab60c..7c90836 100644 --- a/src/main/java/reobf/proghatches/main/mixin/mixins/eucrafting/MixinMachineIdle.java +++ b/src/main/java/reobf/proghatches/main/mixin/mixins/eucrafting/MixinMachineIdle.java @@ -32,7 +32,7 @@ public void onPreTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { public void check(CallbackInfoReturnable c){ if(hasJob&&!checkRecipeResult.wasSuccessful()){ - jobdone=10; + jobdone=4; } if(!checkRecipeResult.wasSuccessful()){ diff --git a/src/main/java/reobf/proghatches/main/registration/EUCraftingCreativeTab.java b/src/main/java/reobf/proghatches/main/registration/EUCraftingCreativeTab.java index 030c570..54164a9 100644 --- a/src/main/java/reobf/proghatches/main/registration/EUCraftingCreativeTab.java +++ b/src/main/java/reobf/proghatches/main/registration/EUCraftingCreativeTab.java @@ -36,6 +36,7 @@ public void displayAllReleventItems(List p_78018_1_) { // p_78018_1_.add(new ItemStack(MyMod.cover, 1, 2)); p_78018_1_.add(new ItemStack(MyMod.euinterface_p2p)); p_78018_1_.add(new ItemStack(MyMod.cover, 1, 3)); + p_78018_1_.add(new ItemStack(MyMod.cover, 1, 32)); p_78018_1_.add(new ItemStack(MyMod.cover, 1, 33)); p_78018_1_.add(new ItemStack(MyMod.cover, 1, 34)); diff --git a/src/main/java/reobf/proghatches/main/registration/ProgHatchCreativeTab.java b/src/main/java/reobf/proghatches/main/registration/ProgHatchCreativeTab.java index f2b075e..1a1dd66 100644 --- a/src/main/java/reobf/proghatches/main/registration/ProgHatchCreativeTab.java +++ b/src/main/java/reobf/proghatches/main/registration/ProgHatchCreativeTab.java @@ -38,7 +38,7 @@ public void displayAllReleventItems(List p_78018_1_) { for (int i = 0; i < 15; i++) { p_78018_1_.add(new ItemStack(MyMod.smartarm, 1, i)); } - + p_78018_1_.add(new ItemStack(MyMod.cover, 1, 4)); p_78018_1_.add(new ItemStack(MyMod.cover, 1, 0)); p_78018_1_.add(new ItemStack(MyMod.cover, 1, 1)); // p_78018_1_.add(new ItemStack(MyMod.cover, 1, 2)); diff --git a/src/main/java/reobf/proghatches/main/registration/Registration.java b/src/main/java/reobf/proghatches/main/registration/Registration.java index 4a5fcea..a6f22f1 100644 --- a/src/main/java/reobf/proghatches/main/registration/Registration.java +++ b/src/main/java/reobf/proghatches/main/registration/Registration.java @@ -25,6 +25,7 @@ import reobf.proghatches.eucrafting.InterfaceP2PEUData; import reobf.proghatches.eucrafting.InterfaceP2PNoFluidData; import reobf.proghatches.gt.cover.LastWorktimeCover; +import reobf.proghatches.gt.cover.LinkedBusSlaveCover; import reobf.proghatches.gt.cover.ProgrammingCover; import reobf.proghatches.gt.cover.SmartArmCover; @@ -164,6 +165,12 @@ public void run() { MACHINE_CASINGS[1][0], TextureFactory.of(gregtech.api.enums.Textures.BlockIcons.OVERLAY_SCREEN_GLOW)), new WirelessControlCover()); + GregTech_API.registerCover( + new ItemStack(MyMod.cover, 1, 4), + TextureFactory.of( + MACHINE_CASINGS[1][0], + TextureFactory.of(gregtech.api.enums.Textures.BlockIcons.OVERLAY_SCREEN_GLOW)), + new LinkedBusSlaveCover()); //WIP /*GregTech_API.registerCover( new ItemStack(MyMod.cover, 1, 15), diff --git a/src/main/java/reobf/proghatches/util/ProghatchesUtil.java b/src/main/java/reobf/proghatches/util/ProghatchesUtil.java index 0164a44..1061ecd 100644 --- a/src/main/java/reobf/proghatches/util/ProghatchesUtil.java +++ b/src/main/java/reobf/proghatches/util/ProghatchesUtil.java @@ -3,6 +3,8 @@ import static gregtech.api.util.GT_Utility.*; import java.io.IOException; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; import java.util.List; import java.util.Map; import java.util.Optional; @@ -16,6 +18,19 @@ import com.gtnewhorizons.modularui.api.widget.Widget; import com.gtnewhorizons.modularui.common.widget.SyncedWidget; +import appeng.api.config.PriorityCardMode; +import appeng.api.config.SecurityPermissions; +import appeng.api.config.Settings; +import appeng.api.networking.IGrid; +import appeng.api.networking.IGridNode; +import appeng.api.networking.security.IActionHost; +import appeng.api.networking.security.ISecurityGrid; +import appeng.core.AELog; +import appeng.core.localization.PlayerMessages; +import appeng.core.sync.GuiBridge; +import appeng.helpers.IPriorityHost; +import appeng.util.Platform; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; @@ -23,7 +38,12 @@ import net.minecraft.nbt.NBTTagList; import net.minecraft.nbt.NBTTagString; import net.minecraft.network.PacketBuffer; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.common.util.ForgeDirection; +import reobf.proghatches.gt.metatileentity.SuperChestME; +import reobf.proghatches.main.MyMod; import gregtech.api.GregTech_API; +import gregtech.api.metatileentity.MetaTileEntity; import gregtech.api.util.GT_Log; import gregtech.api.util.GT_Utility; import gregtech.common.covers.redstone.GT_Cover_AdvancedRedstoneReceiverBase; @@ -207,6 +227,56 @@ public static NBTTagCompound ser(NBTTagCompound tag, UUID id, String name) { tag.setLong(name + "_UUID_M", id.getMostSignificantBits()); tag.setLong(name + "_UUID_L", id.getLeastSignificantBits()); return tag; + } + + + + private static Method m; + + public static void handleUse(Object player, Object tile, Object priorityHost, + Object actionHost, Object stack, Object side) { + //dummy, for version that has no piority card } - + public static boolean handleUse(EntityPlayer player, /*SuperChestME*/MetaTileEntity te) { + if(player.getHeldItem()==null){return false;} + if(!player.getHeldItem().getItem().getClass().getName().equals("appeng.items.tools.ToolPriorityCard")){return false;} + + handleUse( + player, + (TileEntity)te.getBaseMetaTileEntity(), + (IPriorityHost)te, + (IActionHost)te, + player.getHeldItem(), + ForgeDirection.UP + );return true; + + } + public static void handleUse(EntityPlayer player, TileEntity tile, IPriorityHost priorityHost, + IActionHost actionHost, ItemStack stack, ForgeDirection side) { + if(m==null) + try { + Class z=Class.forName("appeng.items.tools.ToolPriorityCard"); + m = z.getDeclaredMethod("handleUse",EntityPlayer.class, TileEntity.class, IPriorityHost.class, IActionHost.class, ItemStack.class, ForgeDirection.class); + m.setAccessible(true); + + } catch (Exception e) { + MyMod.LOG.warn("PriorityCard not found, this is normal and safe to ignore if you're using pack v2.5.1."); + MyMod.LOG.catching(e); + //e.printStackTrace(); + try { + m=ProghatchesUtil.class.getDeclaredMethod("handleUse", Object.class, Object.class, Object.class, Object.class, Object.class, Object.class); + } catch (Exception e1) { + e1.printStackTrace(); + } + } + + try { + m.invoke(null, player, tile, priorityHost, + actionHost, stack, side); + } catch (Exception e) { + + e.printStackTrace(); + } + + } } diff --git a/src/main/resources/assets/proghatches/lang/en_US.lang b/src/main/resources/assets/proghatches/lang/en_US.lang index bac49a1..a59599e 100644 --- a/src/main/resources/assets/proghatches/lang/en_US.lang +++ b/src/main/resources/assets/proghatches/lang/en_US.lang @@ -207,7 +207,7 @@ proghatches.part.hint.1=Note:if requested Current > 0, better not modify the exp proghatches.part.onoff.false=Disallow Current Packet request proghatches.part.onoff.true=Allow Current Packet request item.proghatches.part.eu.source.name=EU Source -tile.proghatches.euinterface.name=EU Interface +tile.proghatches.euinterface.name=EU Interface(NYI) item.eu_token.name=Current packet item.eu_token.1.name=Current packet(Bound) proghatches.eu.interface.hint.amp=Instantaneous/Sample/Assigned Current @@ -275,7 +275,7 @@ item.proghatch.cover.dedicated.tooltips.36.0=No storage item.proghatch.cover.dedicated.tooltips.36.1=Interface in Cover from. The side of this cover will be connective to ME. item.proghatch.cover.dedicated.tooltips.36.2=RMB click with Memory Card to connect. Can only be P2P output. item.proghatch.cover.dedicated.tooltips.36.3=Busy Detecting Cover function intergrated. RMB click without Shift to configure. -item.proghatch.cover.dedicated.36=P2P - EU Interface Cover (WIP) +item.proghatch.cover.dedicated.36=P2P - EU Interface Cover (NYI) programmable_hatches.cover.ae.worksensitive.false=Busy Detecting Mode:OFF programmable_hatches.cover.ae.worksensitive.true=Busy Detecting Mode:ON programmable_hatches.cover.ae.delay.false=Instantly trun off signal @@ -361,3 +361,9 @@ programmable_hatches.gt.remotebus.tooltip.1=Only partially display slot #0 to #1 programmable_hatches.gt.remotebus.tooltip.2=Preview is updated every 5 sec for better server performance. No latency for multiblock. programmable_hatches.gt.remotebus.tooltip.3=If item is present but not shown, make sure the target item can be extracted from the same direction this hatch points to. programmable_hatches.gt.remotebus.tooltip=4 +item.proghatch.cover.dedicated.4=Linked Input Bus Slave Cover +item.proghatch.cover.dedicated.tooltips.4.0=Share the circuit slot among Linked Input Buses with same channel. +item.proghatch.cover.dedicated.tooltips.4.1=Choose §4one§7 Linked Input Bus as Master, and place a Programming Cover on it. +item.proghatch.cover.dedicated.tooltips.4.2=The others with same channel will be salves. Place this Cover on each of them. +item.proghatch.cover.dedicated.tooltips.4.3=Incompatable with Programming Cover. +item.proghatch.cover.dedicated.tooltips.4=4 diff --git a/src/main/resources/assets/proghatches/lang/zh_CN.lang b/src/main/resources/assets/proghatches/lang/zh_CN.lang index 9fe38d9..aa8bf01 100644 --- a/src/main/resources/assets/proghatches/lang/zh_CN.lang +++ b/src/main/resources/assets/proghatches/lang/zh_CN.lang @@ -217,7 +217,7 @@ proghatches.part.hint.1=注意:占用的安培数如果不为0时,应当避免 proghatches.part.onoff.false=暂停提供封包 proghatches.part.onoff.true=提供封包 item.proghatches.part.eu.source.name=EU源 -tile.proghatches.euinterface.name=EU接口 +tile.proghatches.euinterface.name=EU接口(NYI) item.eu_token.name=电流封包 item.eu_token.1.name=电流封包(绑定) proghatches.eu.interface.hint.amp=瞬时/采样/已分配到电流 @@ -312,7 +312,7 @@ item.proghatch.cover.dedicated.tooltips.36.0=不含存储 item.proghatch.cover.dedicated.tooltips.36.1=覆盖版形式的接口 直接连接覆盖版所在面以连入ME网络 item.proghatch.cover.dedicated.tooltips.36.2=使用内存卡右键以绑定 只能作为P2P输出端 item.proghatch.cover.dedicated.tooltips.36.3=集成忙碌检测覆盖版功能 不按shift右键以配置忙碌检测 -item.proghatch.cover.dedicated.36=P2P - EU接口覆盖板 (WIP) +item.proghatch.cover.dedicated.36=P2P - EU接口覆盖板 (NYI) programmable_hatches.cover.ae.worksensitive.false=忙碌检测:OFF programmable_hatches.cover.ae.worksensitive.true=忙碌检测:ON programmable_hatches.cover.ae.delay.false=立刻熄灭信号 @@ -398,3 +398,9 @@ programmable_hatches.gt.remotebus.tooltip.1=只显示前#0到#15号物品槽,以 programmable_hatches.gt.remotebus.tooltip.2=视觉上5秒更新一次以优化性能 实际使用时访问不存在延迟 programmable_hatches.gt.remotebus.tooltip.3=如果目标物品未能显示,请确认其是否能被从此仓指向的方向抽出 programmable_hatches.gt.remotebus.tooltip=4 +item.proghatch.cover.dedicated.4=共享输入总线镜像覆盖板 +item.proghatch.cover.dedicated.tooltips.4.0=在频道相同的共享输入总线之间共享虚拟电路板槽 +item.proghatch.cover.dedicated.tooltips.4.1=选择§4任意一个§7共享输入总线作为主机,贴编程器覆盖板 +item.proghatch.cover.dedicated.tooltips.4.2=其余使用相同频道的共享输入总线作为从机,贴此覆盖板 +item.proghatch.cover.dedicated.tooltips.4.3=无法和编程器覆盖板共存 +item.proghatch.cover.dedicated.tooltips.4=4