From ddba45006823162ad57fa089af7ae1323b50410a Mon Sep 17 00:00:00 2001 From: reobf <2215595288@qq.com> Date: Thu, 4 Jul 2024 21:43:37 +0800 Subject: [PATCH] update --- build.gradle | 2 +- .../reobf/proghatches/eucrafting/EUUtil.java | 12 + .../reobf/proghatches/eucrafting/ILazer.java | 9 + .../eucrafting/ItemPartEUSource.java | 17 ++ .../eucrafting/PartEUP2PInterface.java | 12 +- .../proghatches/eucrafting/PartEUSource.java | 287 ++++++++++++++++-- .../eucrafting/TileFluidInterface_EU.java | 11 +- .../reobf/proghatches/fmp/LazerLayer.java | 40 +++ .../gt/metatileentity/DualInputHatch.java | 10 + .../reobf/proghatches/item/ItemFixer.java | 27 +- .../java/reobf/proghatches/main/MyMod.java | 31 +- .../proghatches/main/mixin/MixinPlugin.java | 2 + .../mixin/mixins/MixinFixPipeCoverBug.java | 33 ++ .../mixin/mixins/MixinFixPipeCoverBug2.java | 38 +++ .../registration/EUCraftingCreativeTab.java | 4 +- .../assets/proghatches/lang/en_US.lang | 2 + .../assets/proghatches/lang/zh_CN.lang | 30 +- .../assets/proghatches/textures/blocks/eu.png | Bin 203 -> 179 bytes .../proghatches/textures/blocks/eu_back.png | Bin 0 -> 541 bytes .../proghatches/textures/blocks/eu_back2.png | Bin 0 -> 380 bytes .../proghatches/textures/blocks/eu_back3.png | Bin 0 -> 459 bytes 21 files changed, 519 insertions(+), 48 deletions(-) create mode 100644 src/main/java/reobf/proghatches/eucrafting/ILazer.java create mode 100644 src/main/java/reobf/proghatches/fmp/LazerLayer.java create mode 100644 src/main/java/reobf/proghatches/main/mixin/mixins/MixinFixPipeCoverBug.java create mode 100644 src/main/java/reobf/proghatches/main/mixin/mixins/MixinFixPipeCoverBug2.java create mode 100644 src/main/resources/assets/proghatches/textures/blocks/eu_back.png create mode 100644 src/main/resources/assets/proghatches/textures/blocks/eu_back2.png create mode 100644 src/main/resources/assets/proghatches/textures/blocks/eu_back3.png diff --git a/build.gradle b/build.gradle index 4ea18bc..40bf8d4 100644 --- a/build.gradle +++ b/build.gradle @@ -373,7 +373,7 @@ catch (Exception ignored) { // Pulls version first from the VERSION env and then git tag String identifiedVersion = null -String versionOverride = '0.0.17p3' +String versionOverride = '0.0.17p4' try { // Produce a version based on the tag, or for branches something like 0.2.2-configurable-maven-and-extras.38+43090270b6-dirty if (versionOverride == null) { diff --git a/src/main/java/reobf/proghatches/eucrafting/EUUtil.java b/src/main/java/reobf/proghatches/eucrafting/EUUtil.java index fd1b4de..a42b9af 100644 --- a/src/main/java/reobf/proghatches/eucrafting/EUUtil.java +++ b/src/main/java/reobf/proghatches/eucrafting/EUUtil.java @@ -21,6 +21,7 @@ import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.server.MinecraftServer; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; import net.minecraftforge.common.util.FakePlayer; @@ -76,10 +77,16 @@ public static void open(EntityPlayer player, World world, int x, int y, int z, F if (NetworkUtils.isClient() || player instanceof FakePlayer) { return; } + + NBTTagCompound tag = player.getEntityData(); tag.setInteger(key, dir.ordinal()); + MyMod.scheduled.addFirst(()-> + { MyMod.net.sendTo(new OpenPartGuiMessage(x, y, z, dir), (EntityPlayerMP) player); EUUtil.PART_MODULAR_UI.open(player, player.worldObj, x, y, z); + } + ); } public static void open(EntityPlayer player, World world, int x, int y, int z, ForgeDirection dir, boolean isout) { @@ -89,8 +96,13 @@ public static void open(EntityPlayer player, World world, int x, int y, int z, F NBTTagCompound tag = player.getEntityData(); tag.setInteger(key, dir.ordinal()); tag.setBoolean("extraarg", isout); + MyMod.scheduled.addFirst(()-> + { MyMod.net.sendTo(new OpenPartGuiMessage(x, y, z, dir).mark(isout), (EntityPlayerMP) player); EUUtil.PART_MODULAR_UI.open(player, player.worldObj, x, y, z); + } + ); + } public static final UIInfo PART_MODULAR_UI = UIBuilder.of().container((player, world, x, y, z) -> { diff --git a/src/main/java/reobf/proghatches/eucrafting/ILazer.java b/src/main/java/reobf/proghatches/eucrafting/ILazer.java new file mode 100644 index 0000000..e74361e --- /dev/null +++ b/src/main/java/reobf/proghatches/eucrafting/ILazer.java @@ -0,0 +1,9 @@ +package reobf.proghatches.eucrafting; + +import com.github.technus.tectech.mechanics.pipe.IConnectsToEnergyTunnel; + +import gregtech.api.interfaces.tileentity.IColoredTileEntity; + +public interface ILazer extends IConnectsToEnergyTunnel,IColoredTileEntity{ + +} diff --git a/src/main/java/reobf/proghatches/eucrafting/ItemPartEUSource.java b/src/main/java/reobf/proghatches/eucrafting/ItemPartEUSource.java index 71dee47..b9c640a 100644 --- a/src/main/java/reobf/proghatches/eucrafting/ItemPartEUSource.java +++ b/src/main/java/reobf/proghatches/eucrafting/ItemPartEUSource.java @@ -6,18 +6,24 @@ import appeng.api.parts.IPartItem; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.enums.GT_Values; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraft.util.StatCollector; import net.minecraft.world.World; public class ItemPartEUSource extends Item implements IPartItem { + /** + * + */ public ItemPartEUSource() { this.setMaxStackSize(64); // this.setUnlocalizedName(NameConst.ITEM_PART_FLUID_EXPORT); AEApi.instance().partHelper().setItemBusRenderer(this); + setHasSubtypes(true); } @Nullable @@ -25,6 +31,17 @@ public ItemPartEUSource() { public PartEUSource createPartFromItemStack(ItemStack is) { return new PartEUSource(is); } + @Override + public String getItemStackDisplayName(ItemStack stack) { + int damage=stack.getItemDamage(); + if(damage>=1&&damage<=15){ + return StatCollector.translateToLocalFormatted("item.proghatches.part.eu.source.superconduct.name",GT_Values.VN[damage-1]); + } + if(damage>=16&&damage<=30){ + return StatCollector.translateToLocalFormatted("item.proghatches.part.eu.source.normal.name",GT_Values.VN[damage-16]); + } + return super.getItemStackDisplayName(stack); + } @Override public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, diff --git a/src/main/java/reobf/proghatches/eucrafting/PartEUP2PInterface.java b/src/main/java/reobf/proghatches/eucrafting/PartEUP2PInterface.java index 50f1576..735cdc4 100644 --- a/src/main/java/reobf/proghatches/eucrafting/PartEUP2PInterface.java +++ b/src/main/java/reobf/proghatches/eucrafting/PartEUP2PInterface.java @@ -127,7 +127,8 @@ public static class WailaDataProvider extends BasePartWailaDataProvider { @Override public NBTTagCompound getNBTData(EntityPlayerMP player, IPart part, TileEntity te, NBTTagCompound tag, World world, int x, int y, int z) { - if (PartEUP2PInterface.class.isInstance(part)) { + if (PartEUP2PInterface.class.isInstance(part)==false) {return super.getNBTData(player, part, te, tag, world, x, y, z);} + PartEUP2PInterface pt = PartEUP2PInterface.class.cast(part); @@ -185,7 +186,7 @@ public NBTTagCompound getNBTData(EntityPlayerMP player, IPart part, TileEntity t s.append(suc[0]); tag.setString("io_pass", s.toString()); } - } + return tag; } @@ -193,8 +194,8 @@ public NBTTagCompound getNBTData(EntityPlayerMP player, IPart part, TileEntity t @Override public List getWailaBody(IPart part, List currentToolTip, IWailaDataAccessor accessor, IWailaConfigHandler config) { - if (PartEUP2PInterface.class.isInstance(part)) { - currentToolTip.add(StatCollector.translateToLocalFormatted("proghatches.eu.interface.waila.V", + if (PartEUP2PInterface.class.isInstance(part)==false) {return super.getWailaBody(part, currentToolTip, accessor, config);} + currentToolTip.add(StatCollector.translateToLocalFormatted("proghatches.eu.interface.waila.V", accessor.getNBTData().getLong("V"))); currentToolTip.add(StatCollector.translateToLocalFormatted("proghatches.eu.interface.waila.EA", accessor.getNBTData().getLong("EA"))); @@ -266,7 +267,7 @@ public List getWailaBody(IPart part, List currentToolTip, IWaila StatCollector.translateToLocalFormatted("proghatches.eu.interface.waila.pass.p2p")+ accessor.getNBTData().getString("io_pass")); } - } + return super.getWailaBody(part, currentToolTip, accessor, config); } @@ -540,6 +541,7 @@ public TickRateModulation tickingRequest(IGridNode node, int ticksSinceLastCall) returnItems(); duality.tickingRequest(node, ticksSinceLastCall); + dualityFluid.tickingRequest(node, ticksSinceLastCall); boolean ok = false; /* if (!this.isOutput()) { diff --git a/src/main/java/reobf/proghatches/eucrafting/PartEUSource.java b/src/main/java/reobf/proghatches/eucrafting/PartEUSource.java index 9fd791a..877334d 100644 --- a/src/main/java/reobf/proghatches/eucrafting/PartEUSource.java +++ b/src/main/java/reobf/proghatches/eucrafting/PartEUSource.java @@ -2,6 +2,7 @@ import java.lang.reflect.Field; import java.util.ArrayList; +import java.util.EnumSet; import java.util.List; import java.util.Optional; import java.util.concurrent.atomic.AtomicBoolean; @@ -21,6 +22,7 @@ import com.gtnewhorizons.modularui.common.widget.textfield.BaseTextFieldWidget; import com.gtnewhorizons.modularui.common.widget.textfield.TextFieldWidget; +import appeng.api.AEApi; import appeng.api.config.Actionable; import appeng.api.networking.IGridNode; import appeng.api.networking.crafting.ICraftingPatternDetails; @@ -36,6 +38,10 @@ import appeng.api.parts.IPartRenderHelper; import appeng.api.storage.IMEMonitor; import appeng.api.storage.data.IAEItemStack; +import appeng.block.AEBaseBlock; +import appeng.client.render.BaseBlockRender; +import appeng.client.render.BusRenderHelper; + import appeng.client.texture.CableBusTextures; import appeng.integration.modules.waila.part.BasePartWailaDataProvider; import appeng.me.GridAccessException; @@ -46,11 +52,14 @@ import appeng.util.item.AEItemStack; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.GregTech_API; import gregtech.api.enums.GT_Values; import gregtech.api.gui.modularui.GT_UITextures; +import gregtech.api.util.GT_Utility; import gregtech.common.gui.modularui.widget.CoverCycleButtonWidget; import mcp.mobius.waila.api.IWailaConfigHandler; import mcp.mobius.waila.api.IWailaDataAccessor; +import net.minecraft.block.Block; import net.minecraft.client.renderer.RenderBlocks; import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.texture.IIconRegister; @@ -72,28 +81,29 @@ import reobf.proghatches.util.ProghatchesUtil; public class PartEUSource extends AEBasePart - implements IGuiProvidingPart, ICraftingProvider, IGridTickable, IInstantCompletable, IPartGT5Power, ISource { + implements IGuiProvidingPart, ICraftingProvider, IGridTickable, IInstantCompletable, IPartGT5Power, ISource,ILazer { public static class WailaDataProvider extends BasePartWailaDataProvider { @Override public NBTTagCompound getNBTData(EntityPlayerMP player, IPart part, TileEntity te, NBTTagCompound tag, World world, int x, int y, int z) { - if (PartEUSource.class.isInstance(part)) { + if (PartEUSource.class.isInstance(part)==false) {return super.getNBTData(player, part, te, tag, world, x, y, z);} PartEUSource pt = (PartEUSource) part; tag.setLong("V", pt.voltage); tag.setLong("A", pt.amp); tag.setLong("AC", pt.consumed); tag.setDouble("AA", pt.averageamp); - } + return super.getNBTData(player, part, te, tag, world, x, y, z); } @Override public List getWailaBody(IPart part, List currentToolTip, IWailaDataAccessor accessor, IWailaConfigHandler config) { - if (PartEUSource.class.isInstance(part)) { + if (PartEUSource.class.isInstance(part)==false) {return super.getWailaBody(part, currentToolTip, accessor, config);} + currentToolTip.add(StatCollector.translateToLocalFormatted("proghatches.eu.source.waila.V", accessor.getNBTData().getLong("V"))); @@ -104,7 +114,7 @@ public List getWailaBody(IPart part, List currentToolTip, IWaila currentToolTip.add(StatCollector.translateToLocalFormatted("proghatches.eu.source.waila.AA", String.format("%.2f", accessor.getNBTData().getDouble("AA")))); - } + return super.getWailaBody(part, currentToolTip, accessor, config); } @@ -143,18 +153,170 @@ public void renderInventory(final IPartRenderHelper rh, final RenderBlocks rende // rh.setInvColor(this.getColor().whiteVariant); // rh.renderInventoryFace(this.getFrontBright(), ForgeDirection.SOUTH, // renderer); - - rh.setInvColor(this.getColor().mediumVariant); + int []col =getCol(maxWorkingVoltageTier()); + int color= col[2]| + (col[1]<<8)| + (col[0]<<16); + rh.setInvColor( + 0xffffff + ); + rh.renderInventoryFace(this.getFrontBright(), ForgeDirection.SOUTH, renderer); - + renderInventoryHover(rh,getBackIcon(maxWorkingVoltageTier()), ForgeDirection.SOUTH, renderer,color); + + + rh.setInvColor(this.getColor().blackVariant); // rh.setInvColor(this.getColor().blackVariant); // rh.renderInventoryFace(this.getFrontColored(), ForgeDirection.SOUTH, // renderer); + final IIcon sideStatusTexture = CableBusTextures.PartMonitorSidesStatus.getIcon(); + + rh.setTexture(sideStatusTexture, sideStatusTexture, backTexture, this.getItemStack().getIconIndex(), + sideStatusTexture, sideStatusTexture); rh.setBounds(4, 4, 13, 12, 12, 14); rh.renderInventoryBox(renderer); - } - + } + + + @SideOnly(Side.CLIENT) static Field[] sidef; + @SideOnly(Side.CLIENT) + public void renderFaceHover(BusRenderHelper thiz,final int x, final int y, final int z, final IIcon ico, ForgeDirection face, + final RenderBlocks renderer) { + + if(sidef==null){ + try { + Field xx=thiz.getClass().getDeclaredField("ax"); + Field yy=thiz.getClass().getDeclaredField("ay"); + Field zz=thiz.getClass().getDeclaredField("az"); + xx.setAccessible(true); + yy.setAccessible(true); + zz.setAccessible(true); + sidef=new Field[]{xx,yy,zz}; + } catch (NoSuchFieldException | SecurityException e) { + e.printStackTrace(); + } + } + + + + + ForgeDirection ax=null,ay=null,az=null;; + try { + ax = (ForgeDirection) sidef[0].get(thiz); + ay = (ForgeDirection) sidef[1].get(thiz); + az = (ForgeDirection) sidef[2].get(thiz); + + } catch (Exception e) { + e.printStackTrace(); + } + + + thiz.prepareBounds(renderer); + switch (face) { + case DOWN: + face = ay.getOpposite(); + break; + case EAST: + face = ax; + break; + case NORTH: + face = az.getOpposite(); + break; + case SOUTH: + face = az; + break; + case UP: + face = ay; + break; + case WEST: + face = ax.getOpposite(); + break; + case UNKNOWN: + break; + default: + break; + } + + + com.google.common.base.Optional maybeBlock = AEApi.instance().definitions().blocks().multiPart().maybeBlock(); + for (final Block block : maybeBlock.asSet()) { + switch (face) { + case NORTH : renderer.renderFaceZNeg(block, x, y, z+0.05, ico);break; + case SOUTH : renderer.renderFaceZPos(block, x, y, z-0.05, ico);break; + case EAST : renderer.renderFaceXPos(block, x-0.05, y, z, ico);break; + case WEST : renderer.renderFaceXNeg(block, x+0.05, y, z, ico);break; + case UP : renderer.renderFaceYPos(block, x, y-0.05, z, ico);break; + case DOWN : renderer.renderFaceYNeg(block, x, y+0.05, z, ico);break; + + } + + } + } + @SideOnly(Side.CLIENT) + public void renderInventoryHover(IPartRenderHelper thiz,final IIcon icon, final ForgeDirection face, final RenderBlocks renderer,int col) { + renderer.setRenderBounds( + 2 / 16.0, + 2 / 16.0, + 14 / 16.0, + 14 / 16.0, + 14 / 16.0, + 15.5 / 16.0); + thiz.setTexture(icon); + com.google.common.base.Optional maybeBlock = AEApi.instance().definitions().blocks().multiPart().maybeBlock(); + BaseBlockRender bbr = new BaseBlockRender<>(); + for (final Block baseBlock : maybeBlock.asSet()) { + bbr.renderInvBlock(EnumSet.of(face), (AEBaseBlock) baseBlock, null, Tessellator.instance, col, renderer); + } + + + } + private int[] getCol(int i){ + /*if(i==14){ + + + double time=(System.currentTimeMillis()%2000)/2000.0; + double angle=time*3.14159*2; + double diff=3.14159*0.666666; + return new int[]{ + (int) (Math.cos(angle-diff)*127+128), + + (int) (Math.cos(angle+diff)*127+128), + (int) (Math.cos(angle)*127+128) + + }; + } + */ + + return col[i]; + } + + static int[][] col={ + {105,116,125}, + {105,116,125}, + {209,82,28}, + {174,119,37}, + {47,47,47}, + {151,151,151}, + {189,113,113}, + {106,195,196}, + {126,176,126}, + {183,106,184}, + {0,69,208}, + {72,135,72}, + {58,51,81}, + {255,255,255}, + {255,255,255}, + + + {255,255,255}, + {255,255,255}, + }; + + + + + @Override public boolean onPartActivate(EntityPlayer player, Vec3 pos) { @@ -164,7 +326,8 @@ public boolean onPartActivate(EntityPlayer player, Vec3 pos) { TileEntity t = this.getTile(); // System.out.println(getSide()); EUUtil.open(player, player.getEntityWorld(), t.xCoord, t.yCoord, t.zCoord, getSide()); - return true; + System.out.println(player.getHeldItem()); + return false; } @Override @@ -193,10 +356,26 @@ public void renderStatic(final int x, final int y, final int z, final IPartRende // Tessellator.instance.setColorOpaque_I(this.getColor().whiteVariant); // rh.renderFace(x, y, z, this.getFrontBright(), ForgeDirection.SOUTH, // renderer); - - Tessellator.instance.setColorOpaque_I(this.getColor().whiteVariant); + int []col =getCol(maxWorkingVoltageTier()); + int color= col[2]| + (col[1]<<8)| + (col[0]<<16); + rh.setInvColor( + 0xffffff + ); + + /*rh.renderInventoryFace(this.getFrontBright(), ForgeDirection.SOUTH, renderer); + renderInventoryHover(rh,b, ForgeDirection.SOUTH, renderer,color); + + + rh.setInvColor(this.getColor().blackVariant); + */ + //Tessellator.instance.setColorOpaque_I(this.getColor().whiteVariant);4 + Tessellator.instance.setColorOpaque_I(0xffffff); rh.renderFace(x, y, z, this.getFrontBright(), ForgeDirection.SOUTH, renderer); - + Tessellator.instance.setColorOpaque_I(color); + renderFaceHover((BusRenderHelper) rh,x, y, z, getBackIcon(maxWorkingVoltageTier()), ForgeDirection.SOUTH, renderer); + // Tessellator.instance.setColorOpaque_I(this.getColor().blackVariant); // rh.renderFace(x, y, z, this.getFrontColored(), ForgeDirection.SOUTH, // renderer); @@ -246,7 +425,9 @@ public void renderStatic(final int x, final int y, final int z, final IPartRende static IIcon a; - + static IIcon b; + static IIcon b2; + static IIcon b3; private IIcon getFrontBright() { return a; @@ -256,11 +437,19 @@ private int getSpin() { return 0; } - + @SideOnly(value = Side.CLIENT) + static IIcon getBackIcon(int t){ + if(t==14)return b3; + if(t==13)return b2; + return b; + } @SideOnly(value = Side.CLIENT) public static void registerIcons(IIconRegister _iconRegister) { a = _iconRegister.registerIcon("proghatches:eu"); + b=_iconRegister.registerIcon("proghatches:eu_back"); + b2=_iconRegister.registerIcon("proghatches:eu_back2"); + b3=_iconRegister.registerIcon("proghatches:eu_back3"); } public ModularWindow createWindow(UIBuildContext buildContext) { @@ -362,18 +551,60 @@ public ModularWindow createWindow(UIBuildContext buildContext) { return builder.build(); } +public long maxWorkingVoltage(){ + int damage=this.is.getItemDamage(); + if(damage>=1&&damage<=15){ + return GT_Values.V[damage-1]; + } + if(damage>=16&&damage<=30){ + return GT_Values.V[damage-16]; + } + return Long.MAX_VALUE; +} +public int maxWorkingVoltageTier(){ + int damage=this.is.getItemDamage(); + if(damage>=1&&damage<=15){ + return damage-1; + } + if(damage>=16&&damage<=30){ + return damage-16; + } + return 15; +} +public double taxPercentage(){ + int damage=this.is.getItemDamage(); + if(damage>=16&&damage<=30){ + return 0.95d; + } + + return 1; +} + @Override public long injectEnergyUnits(long aVoltage, long aAmperage) { // if(getVoltage()==0)return 0; + + if (consumed <= ampInjectedthisTick) return 0; try { long actual = Math.min(consumed - ampInjectedthisTick, aAmperage); - long consumed = ((IEUManager) getProxy().getGrid().getCache(IEUManager.class)).inject(this, actual, - aVoltage); + long consumed = ((IEUManager) getProxy().getGrid().getCache(IEUManager.class)).inject(this, + actual, + (long) (aVoltage*taxPercentage())); ampInjectedthisTick += consumed; + if(consumed>0){ + + if(aVoltage>maxWorkingVoltage()){ + TileEntity t = this.host.getTile(); + t.getWorldObj().createExplosion(null, t.xCoord+0.5,t.yCoord+0.5,t.zCoord+0.5, 2, true); + GT_Utility.sendSoundToPlayers(t.getWorldObj(), GregTech_API.sSoundList.get(209), 1.0F, -1.0F, t.xCoord,t.yCoord,t.zCoord); + this.host.removePart(side, false); + } + + } return consumed; } catch (GridAccessException e) { @@ -427,6 +658,7 @@ public void readFromNBT(NBTTagCompound data) { voltage = data.getLong("voltage"); amp = data.getLong("amp"); consumed = data.getLong("consumed"); + toReturn.clear(); int[] count = new int[1]; NBTTagCompound c; @@ -441,6 +673,7 @@ public void writeToNBT(NBTTagCompound data) { data.setLong("voltage", voltage); data.setLong("amp", amp); data.setLong("consumed", consumed); + int[] count = new int[1]; toReturn.forEach(s -> data.setTag("toReturn" + (count[0]++), s.writeToNBT(new NBTTagCompound()))); @@ -707,4 +940,22 @@ public long request(long packets) { return actual; } + @Override + public boolean canConnect(ForgeDirection side) { + // TODO Auto-generated method stub + return true; + } + + @Override + public byte getColorization() { + + return 11; + } + + @Override + public byte setColorization(byte aColor) { + + return 11; + } + } diff --git a/src/main/java/reobf/proghatches/eucrafting/TileFluidInterface_EU.java b/src/main/java/reobf/proghatches/eucrafting/TileFluidInterface_EU.java index ccf1854..4f77b6d 100644 --- a/src/main/java/reobf/proghatches/eucrafting/TileFluidInterface_EU.java +++ b/src/main/java/reobf/proghatches/eucrafting/TileFluidInterface_EU.java @@ -25,6 +25,7 @@ import appeng.api.AEApi; import appeng.api.config.Actionable; +import appeng.api.networking.IGridHost; import appeng.api.networking.IGridNode; import appeng.api.networking.crafting.ICraftingCPU; import appeng.api.networking.crafting.ICraftingMedium; @@ -76,7 +77,7 @@ public class TileFluidInterface_EU extends TileFluidInterface implements ITileWithModularUI, IInstantCompletable, IEnergyConnected, IDrain, - IGridTickable + IGridTickable,IGridHost { static public IWailaDataProvider provider = new IWailaDataProvider() { @@ -308,7 +309,7 @@ public TickingRequest getTickingRequest(final IGridNode node) { } @Override public TickRateModulation tickingRequest(IGridNode node, int ticksSinceLastCall) { - + super.tickingRequest(node, ticksSinceLastCall); tick(); return TickRateModulation.SAME; } @@ -328,7 +329,9 @@ public void tick() { */ boolean ok=false; - IMetaTileEntity t = getTargetTile(); + IMetaTileEntity t = null; + try{ + t = getTargetTile(); if(t!=null&&t instanceof IIdleStateProvider){ //if(pass)return; @@ -341,7 +344,7 @@ public void tick() { if(pass&&>0){ok=true;} } - + }catch(Exception e){e.printStackTrace();;} if (ok || redstoneticks > 0) { //resetIdleCheckStatus(false); diff --git a/src/main/java/reobf/proghatches/fmp/LazerLayer.java b/src/main/java/reobf/proghatches/fmp/LazerLayer.java new file mode 100644 index 0000000..f970627 --- /dev/null +++ b/src/main/java/reobf/proghatches/fmp/LazerLayer.java @@ -0,0 +1,40 @@ +package reobf.proghatches.fmp; + +import appeng.api.parts.IPart; +import appeng.api.parts.LayerBase; +import gregtech.api.interfaces.tileentity.IColoredTileEntity; +import net.minecraft.inventory.ISidedInventory; +import net.minecraftforge.common.util.ForgeDirection; +import reobf.proghatches.eucrafting.ILazer; + +public class LazerLayer extends LayerBase implements ILazer ,IColoredTileEntity{ + + @Override + public boolean canConnect(ForgeDirection side) { + IPart pt = getPart(side); + if(pt instanceof ILazer){return ((ILazer) pt).canConnect(side);} + return false; + } + + @Override + public byte getColorization() { + for(ForgeDirection side:ForgeDirection.VALID_DIRECTIONS){ + IPart pt = getPart(side); + if(pt instanceof ILazer){return ((ILazer) pt).getColorization();} + } + + return -1; + } + + @Override + public byte setColorization(byte aColor) { + + for(ForgeDirection side:ForgeDirection.VALID_DIRECTIONS){ + IPart pt = getPart(side); + if(pt instanceof ILazer){return ((ILazer) pt).setColorization(aColor);} + } + + return -1; + } + +} diff --git a/src/main/java/reobf/proghatches/gt/metatileentity/DualInputHatch.java b/src/main/java/reobf/proghatches/gt/metatileentity/DualInputHatch.java index be0ee26..f8c4d03 100644 --- a/src/main/java/reobf/proghatches/gt/metatileentity/DualInputHatch.java +++ b/src/main/java/reobf/proghatches/gt/metatileentity/DualInputHatch.java @@ -1163,4 +1163,14 @@ public void readOnServer(int id, PacketBuffer buf) throws IOException { .setPos(new Pos2d(getGUIWidth() - 18 - 3, 30)).setSize(16, 16); } +@Override +public boolean canInsertItem(int aIndex, ItemStack aStack, int ordinalSide) { + // TODO Auto-generated method stub + return super.canInsertItem(aIndex, aStack, ordinalSide); +} +@Override +public boolean canExtractItem(int aIndex, ItemStack aStack, int ordinalSide) { + // TODO Auto-generated method stub + return super.canExtractItem(aIndex, aStack, ordinalSide); +} } diff --git a/src/main/java/reobf/proghatches/item/ItemFixer.java b/src/main/java/reobf/proghatches/item/ItemFixer.java index 114dea5..42823ba 100644 --- a/src/main/java/reobf/proghatches/item/ItemFixer.java +++ b/src/main/java/reobf/proghatches/item/ItemFixer.java @@ -1,9 +1,11 @@ package reobf.proghatches.item; +import java.util.Arrays; import java.util.List; import org.spongepowered.libraries.com.google.common.base.Optional; +import com.github.technus.tectech.mechanics.pipe.IConnectsToEnergyTunnel; import com.glodblock.github.common.item.ItemFluidEncodedPattern; import appeng.api.implementations.ICraftingPatternItem; @@ -52,6 +54,29 @@ public boolean onItemUse(ItemStack p_77648_1_, EntityPlayer p_77648_2_, World w, if(w.isRemote)return true; TileEntity te = w.getTileEntity(x, y, z); + /*System.out.println(te instanceof IConnectsToEnergyTunnel); + if(te instanceof IConnectsToEnergyTunnel) + System.out.println(((IConnectsToEnergyTunnel) te).canConnect(ForgeDirection.UP)); + + + if(te!=null){ + Class c = te.getClass(); + + while(c!=null){ + System.out.println(c); + System.out.println(Arrays.toString( + + c.getInterfaces()) + + );;c=(Class) c.getSuperclass();} + } + + + + */ + + + IGrid g = null; if(te instanceof IGridProxyable){ @@ -149,7 +174,7 @@ public ItemStack fix(ItemStack is,Runnable succ){ encodedValue.getTagList("in", 10).copy()); } - System.out.println(is.getTagCompound()); + // System.out.println(is.getTagCompound()); return is.copy(); } diff --git a/src/main/java/reobf/proghatches/main/MyMod.java b/src/main/java/reobf/proghatches/main/MyMod.java index 7702ac7..287a583 100644 --- a/src/main/java/reobf/proghatches/main/MyMod.java +++ b/src/main/java/reobf/proghatches/main/MyMod.java @@ -1,7 +1,10 @@ package reobf.proghatches.main; import java.lang.reflect.Field; +import java.util.ArrayDeque; import java.util.ArrayList; +import java.util.Collection; +import java.util.Deque; import java.util.Optional; import javax.annotation.Nullable; @@ -34,6 +37,7 @@ import com.glodblock.github.common.parts.PartFluidP2PInterface; import com.glodblock.github.inventory.FluidConvertingInventoryAdaptor; +import appeng.api.AEApi; import appeng.api.config.FuzzyMode; import appeng.api.config.Upgrades; import appeng.api.implementations.IUpgradeableHost; @@ -46,6 +50,7 @@ import appeng.container.slot.SlotNormal; import appeng.core.features.registries.InterfaceTerminalRegistry; import appeng.core.localization.GuiText; +import appeng.helpers.BlockingModeIgnoreList; import appeng.helpers.DualityInterface; import appeng.helpers.IInterfaceHost; import appeng.helpers.IPriorityHost; @@ -55,6 +60,7 @@ import appeng.tile.inventory.AppEngInternalInventory; import appeng.util.item.AEItemStack; import appeng.util.item.ItemList; +import codechicken.multipart.MultipartGenerator; import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.SidedProxy; @@ -65,12 +71,15 @@ import cpw.mods.fml.common.eventhandler.EventPriority; import cpw.mods.fml.common.eventhandler.SubscribeEvent; import cpw.mods.fml.common.gameevent.PlayerEvent.PlayerLoggedInEvent; +import cpw.mods.fml.common.gameevent.TickEvent; import cpw.mods.fml.common.network.IGuiHandler; import cpw.mods.fml.common.network.NetworkRegistry; import cpw.mods.fml.common.network.simpleimpl.SimpleNetworkWrapper; +import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.relauncher.Side; import gregtech.api.enums.GT_Values; import gregtech.api.interfaces.tileentity.ICoverable; +import gregtech.api.metatileentity.BaseMetaPipeEntity; import gregtech.api.metatileentity.BaseMetaTileEntity; import gregtech.api.net.GT_Packet_SendCoverData; import gregtech.api.util.shutdown.ShutDownReason; @@ -85,11 +94,13 @@ import reobf.proghatches.eucrafting.InterfaceData; import reobf.proghatches.eucrafting.PartEUP2PInterface; import reobf.proghatches.eucrafting.TileFluidInterface_EU; + import reobf.proghatches.gt.metatileentity.PatternDualInputHatch; import reobf.proghatches.gt.metatileentity.ProgrammingCircuitProviderPrefabricated; import reobf.proghatches.item.ItemBookTutorial; import reobf.proghatches.item.ItemProgrammingCircuit; import reobf.proghatches.lang.LangManager; +import reobf.proghatches.main.mixin.mixins.MixinFixPipeCoverBug; import reobf.proghatches.net.OpenPartGuiMessage; import reobf.proghatches.net.PriorityMessage; import reobf.proghatches.net.RenameMessage; @@ -106,10 +117,10 @@ public class MyMod { public static MyMod instance; { - + BaseMetaPipeEntity.class.getDeclaredFields(); instance = this; } - + public static Deque scheduled=new ArrayDeque(); //public static ShutDownReason ACCESS_LOOP=new SimpleShutDownReason("proghatch.access_loop", true){public String getID() {return "proghatch.access_loop";};}; public static SimpleNetworkWrapper net = new SimpleNetworkWrapper(Tags.MODID); public static Item progcircuit; @@ -153,6 +164,8 @@ public void preInit(FMLPreInitializationEvent event) { public void init(FMLInitializationEvent event) { proxy.init(event); + AEApi.instance().partHelper().registerNewLayer("reobf.proghatches.fmp.LazerLayer", "reobf.proghatches.eucrafting.ILazer"); + FMLCommonHandler.instance().bus().register(this); MinecraftForge.EVENT_BUS.register(this); } @@ -227,13 +240,23 @@ public void postInit(FMLPostInitializationEvent event) { InterfaceTerminalRegistry.instance().register(PartFluidP2PInterface.class); InterfaceTerminalRegistry.instance().register(TileFluidInterface_EU.class); InterfaceTerminalRegistry.instance().register(PatternDualInputHatch.Inst.class); - + {try{ + Field f=BlockingModeIgnoreList.class.getDeclaredField("IgnoredItems"); + f.setAccessible(true); + Collection IgnoredItems =(Collection) f.get(null); + IgnoredItems.add(GameRegistry.findItem("gregtech", "gt.integrated_circuit")); + }catch(Exception e){ e.printStackTrace();} + } ItemList list=new ItemList(); list.add(AEItemStack.create(ItemProgrammingCircuit.wrap(new ItemStack(Blocks.cactus)))); list.findFuzzy(AEItemStack.create(ItemProgrammingCircuit.wrap(new ItemStack(Blocks.bed))), FuzzyMode.IGNORE_ALL); } - + @SubscribeEvent(priority = EventPriority.HIGH, receiveCanceled = false) + public void tick(final TickEvent.ServerTickEvent event) { + while(scheduled.isEmpty()==false) + scheduled.removeLast().run(); + } @SubscribeEvent(priority = EventPriority.HIGH, receiveCanceled = false) public void playerInteract(final PlayerInteractEvent event) { diff --git a/src/main/java/reobf/proghatches/main/mixin/MixinPlugin.java b/src/main/java/reobf/proghatches/main/mixin/MixinPlugin.java index 1b40257..b106740 100644 --- a/src/main/java/reobf/proghatches/main/mixin/MixinPlugin.java +++ b/src/main/java/reobf/proghatches/main/mixin/MixinPlugin.java @@ -149,6 +149,8 @@ public List getMixins() { } retLate.add("eucrafting." + "MixinInvTracker"); + retLate.add("MixinFixPipeCoverBug"); + retLate.add("MixinFixPipeCoverBug2"); retLate.add("MixinAEAdaptorSkipStackSizeCheck"); retLate.add("MixinAwarenessForDualHatch"); diff --git a/src/main/java/reobf/proghatches/main/mixin/mixins/MixinFixPipeCoverBug.java b/src/main/java/reobf/proghatches/main/mixin/mixins/MixinFixPipeCoverBug.java new file mode 100644 index 0000000..54688ff --- /dev/null +++ b/src/main/java/reobf/proghatches/main/mixin/mixins/MixinFixPipeCoverBug.java @@ -0,0 +1,33 @@ +package reobf.proghatches.main.mixin.mixins; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.ModifyArg; +import org.spongepowered.asm.mixin.injection.At.Shift; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +import gregtech.api.metatileentity.BaseMetaPipeEntity; +import gregtech.api.util.GT_Utility; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraftforge.common.util.ForgeDirection; + +@Mixin(value=BaseMetaPipeEntity.class,remap=false,priority=999) +public class MixinFixPipeCoverBug { + + + ForgeDirection realSide; + + @Inject(remap=false,method="onRightclick",at=@At(value="INVOKE",target = + "onPlayerAttach")) + public void onRightclick0(EntityPlayer aPlayer, ForgeDirection side, float aX, float aY, float aZ,CallbackInfoReturnable cc) { + + realSide=GT_Utility.determineWrenchingSide(side, aX, aY, aZ); + + } + + + + + +} diff --git a/src/main/java/reobf/proghatches/main/mixin/mixins/MixinFixPipeCoverBug2.java b/src/main/java/reobf/proghatches/main/mixin/mixins/MixinFixPipeCoverBug2.java new file mode 100644 index 0000000..8062ab5 --- /dev/null +++ b/src/main/java/reobf/proghatches/main/mixin/mixins/MixinFixPipeCoverBug2.java @@ -0,0 +1,38 @@ +package reobf.proghatches.main.mixin.mixins; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.ModifyArg; +import org.spongepowered.asm.mixin.injection.At.Shift; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +import gregtech.api.metatileentity.BaseMetaPipeEntity; +import gregtech.api.util.GT_Utility; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraftforge.common.util.ForgeDirection; + +@Mixin(value=BaseMetaPipeEntity.class,remap=false,priority=1000) +public class MixinFixPipeCoverBug2 { + + + @ModifyArg(remap=false,method="onRightclick", require = 1,at = @At(value="INVOKE",target = + "onPlayerAttach" +,remap=false) ) + public ForgeDirection onRightclick( ForgeDirection sd) { + + try{ + return realSide; + }finally{ + + //realSide=null;//set to null? + } + } + + ForgeDirection realSide; + + + + + +} diff --git a/src/main/java/reobf/proghatches/main/registration/EUCraftingCreativeTab.java b/src/main/java/reobf/proghatches/main/registration/EUCraftingCreativeTab.java index 54164a9..c617e06 100644 --- a/src/main/java/reobf/proghatches/main/registration/EUCraftingCreativeTab.java +++ b/src/main/java/reobf/proghatches/main/registration/EUCraftingCreativeTab.java @@ -31,7 +31,9 @@ public Item getTabIconItem() { @Override public void displayAllReleventItems(List p_78018_1_) { p_78018_1_.addAll(Registration.items_eucrafting); - p_78018_1_.add(new ItemStack(MyMod.eu_source_part)); + for(int i=0;i<=30;i++) + p_78018_1_.add(new ItemStack(MyMod.eu_source_part,1,i)); + p_78018_1_.add(new ItemStack(MyMod.block_euinterface)); // p_78018_1_.add(new ItemStack(MyMod.cover, 1, 2)); p_78018_1_.add(new ItemStack(MyMod.euinterface_p2p)); diff --git a/src/main/resources/assets/proghatches/lang/en_US.lang b/src/main/resources/assets/proghatches/lang/en_US.lang index 5ce6052..8a5f5a5 100644 --- a/src/main/resources/assets/proghatches/lang/en_US.lang +++ b/src/main/resources/assets/proghatches/lang/en_US.lang @@ -379,3 +379,5 @@ proghatches.eu.interface.waila.is_machine.dir=Use wrench to specify target machi item.proghatch_circuit_fixer.name.tooltip=Right click a ME Network to fix all legacy pattens(encoded in version 0.0.16 or below) in this network. proghatches.eu.interface.waila.pass=Refund Check:%s proghatches.eu.interface.waila.pass.p2p=Network Refund Check:%s +item.proghatches.part.eu.source.superconduct.name=EU Source(%s Superconducting) +item.proghatches.part.eu.source.normal.name=EU Source(%s) diff --git a/src/main/resources/assets/proghatches/lang/zh_CN.lang b/src/main/resources/assets/proghatches/lang/zh_CN.lang index 2bc4984..d7cb24a 100644 --- a/src/main/resources/assets/proghatches/lang/zh_CN.lang +++ b/src/main/resources/assets/proghatches/lang/zh_CN.lang @@ -256,15 +256,15 @@ programmable_hatches.eucreafting.tutorial.pages.14=不用理会合成计算器 programmable_hatches.eucreafting.tutorial.pages.15=提高效率--让渡封包\n\n如果一个样板的输入依赖另一个很慢的配方,那么发配一次后空闲时占据的电流封包就被浪费了。因此,为了解决这个问题,对EU接口产生一个红石信号下降沿就能使其让渡电流封包使用权。无需担心,输入材料再次就绪后会重新自动申请封包。 programmable_hatches.eucreafting.tutorial.pages.16=P2P - EU接口\n\n升级版的P2P - 二合一接口 兼 面板形式的EU接口\n就像一个EU接口的每个面被单独拆开使用一样。需要用内存卡指定一个输出以及多个输出。输出端共享输入端的样板,也能和输入端一样输出电流。与P2P-ME接口一样,只能合成获取,无法被"调谐"。 programmable_hatches.eucreafting.tutorial.pages.17=P2P-EU接口将输入端和所有输出端红石信号取 或运算 后的下降沿作为让渡信号,也就是说,只会在所有P2P的红石信号都下降后再让渡,可以同时与多台机器同时运作。 -programmable_hatches.eucreafting.tutorial.pages.18=忙碌检测覆盖版\n\n特化版的机器活跃检测覆盖版\n检测频率为1tick,机器完成工作时产生红石下降沿送给EU接口,即使让渡封包。 +programmable_hatches.eucreafting.tutorial.pages.18=忙碌检测覆盖板\n\n特化版的机器活跃检测覆盖板\n检测频率为1tick,机器完成工作时产生红石下降沿送给EU接口,即使让渡封包。 programmable_hatches.eucreafting.tutorial.pages.19=如果使用单个EU接口(或者一组配对的P2P - EU接口)同时为多个独立的多方块机器提供合成,需要注意:大机器并不是每tick都查找配方,因此当某个大机器先查找了配方并立刻做完,会导致触发下降沿提前让渡电流,导致其他大机器开机跳电。 -programmable_hatches.eucreafting.tutorial.pages.20=解决方法1是开启忙碌检测覆盖版的"检测输入是否非空",那么实际红石信号将是(输入仓不为空||输入总线不为空||机器在工作),从而在机器不检测的tick也能补上红石信号,缺点是如果有实体电路/透镜则无法工作 -programmable_hatches.eucreafting.tutorial.pages.21=解决方法2是开启忙碌检测覆盖版的"保持信号5s",因为大机器检测间隔最大5s,将信号延时5s就能补齐不检测的真空期,缺点是速度慢,因为让渡也延时了5s +programmable_hatches.eucreafting.tutorial.pages.20=解决方法1是开启忙碌检测覆盖板的"检测输入是否非空",那么实际红石信号将是(输入仓不为空||输入总线不为空||机器在工作),从而在机器不检测的tick也能补上红石信号,缺点是如果有实体电路/透镜则无法工作 +programmable_hatches.eucreafting.tutorial.pages.21=解决方法2是开启忙碌检测覆盖板的"保持信号5s",因为大机器检测间隔最大5s,将信号延时5s就能补齐不检测的真空期,缺点是速度慢,因为让渡也延时了5s programmable_hatches.eucreafting.tutorial.pages.22=提醒:这些信号的最小频率是1tick,而非1红石刻(2tick),1tick的红石信号无法被原版红石元件传递!试试红石导管,红石p2p或者project red的红石合金丝吧,这些的响应速度都是1tick的 -programmable_hatches.eucreafting.tutorial.pages.23=ME接口覆盖板/ME二合一接口覆盖板\n\n覆盖板版本的ME接口,贴上覆盖板后,这个面就能连接ME线缆接入网络。每个面的覆盖版所属的网络是独立的,如果一个GT机器贴了两个覆盖版,网络也不会穿过这个机器。\n发配的原料会进入被贴的机器,而不是覆盖版对面的机器。 -programmable_hatches.eucreafting.tutorial.pages.24=使用方法与面板形式的接口无异,但阉割了物品栏/流体栏,类似高版本的样板供应器。发配的物品会直接进入所贴的GT机器,但返还物品需要另想办法--因为覆盖版没有物品栏。 +programmable_hatches.eucreafting.tutorial.pages.23=ME接口覆盖板/ME二合一接口覆盖板\n\n覆盖板版本的ME接口,贴上覆盖板后,这个面就能连接ME线缆接入网络。每个面的覆盖板所属的网络是独立的,如果一个GT机器贴了两个覆盖板,网络也不会穿过这个机器。\n发配的原料会进入被贴的机器,而不是覆盖板对面的机器。 +programmable_hatches.eucreafting.tutorial.pages.24=使用方法与面板形式的接口无异,但阉割了物品栏/流体栏,类似高版本的样板供应器。发配的物品会直接进入所贴的GT机器,但返还物品需要另想办法--因为覆盖板没有物品栏。 programmable_hatches.eucreafting.tutorial.pages.25=P2P - ME接口覆盖板/ME二合一接口覆盖板\n\n这是它们的P2P版本\n它们可以和面板形式的P2P使用内存卡互联,但不能作为输入端,也就是说你至少要用一个面板形式的P2P。PS:从技术上说并不是不能做输入,但万一出bug了里面存的样板就会直接弄丢... -programmable_hatches.eucreafting.tutorial.pages.26=P2P - EU接口覆盖板\n\n顾名思义\n它还集成了活跃检测覆盖版功能,就是说你可以直接把它贴在机器主控上,它的配置界面需要不按shift的情况下右键打开。 +programmable_hatches.eucreafting.tutorial.pages.26=P2P - EU接口覆盖板\n\n顾名思义\n它还集成了活跃检测覆盖板功能,就是说你可以直接把它贴在机器主控上,它的配置界面需要不按shift的情况下右键打开。 programmable_hatches.eucreafting.tutorial.pages.27=ME覆盖板\n\n允许ME频道穿过所贴的方块。\n自身可以连接ME线缆,安装后该方块上其余接口覆盖板也会被连入同一个ME网络。\n两个方块的相接面贴上ME覆盖板也能传递频道。\n最多传递8频道。 programmable_hatches.eucreafting.tutorial.pages=28 programmable_hatches.eucreafting.tutorial=EU合成套件(WIP) @@ -273,7 +273,7 @@ proghatches.eu.interface.waila.UUID.out.0=输入P2P信息: proghatches.eu.interface.waila.UUID.out.1= UUID: %1$s proghatches.eu.interface.waila.UUID.out.2= 坐标:[%2$d,%3$d,%4$d] proghatches.eu.interface.waila.UUID.out.3= 所在维度:%5$d -item.proghatch.cover.dedicated.3=忙碌检测覆盖版 +item.proghatch.cover.dedicated.3=忙碌检测覆盖板 item.proghatch.cover.dedicated.tooltips.3=0 item.proghatch.cover.dedicated.3.tooltips.5sec.true=保持信号5s item.proghatch.cover.dedicated.3.tooltips.5sec.false=立刻熄灭信号 @@ -291,27 +291,27 @@ proghatches.eu.interface.waila.inputmissing=无法定位输入端 proghatches.provider.waila=提供电路: item.proghatch.cover.dedicated.tooltips.32=2 item.proghatch.cover.dedicated.tooltips.32.0=不含存储 -item.proghatch.cover.dedicated.tooltips.32.1=覆盖版形式的接口 直接连接覆盖版所在面以连入ME网络 +item.proghatch.cover.dedicated.tooltips.32.1=覆盖板形式的接口 直接连接覆盖板所在面以连入ME网络 item.proghatch.cover.dedicated.32=ME接口覆盖板 (WIP) item.proghatch.cover.dedicated.tooltips.33=2 item.proghatch.cover.dedicated.tooltips.33.0=不含存储 -item.proghatch.cover.dedicated.tooltips.33.1=覆盖版形式的接口 直接连接覆盖版所在面以连入ME网络 +item.proghatch.cover.dedicated.tooltips.33.1=覆盖板形式的接口 直接连接覆盖板所在面以连入ME网络 item.proghatch.cover.dedicated.33=ME二合一接口覆盖板 (WIP) item.proghatch.cover.dedicated.tooltips.34=3 item.proghatch.cover.dedicated.tooltips.34.0=不含存储 -item.proghatch.cover.dedicated.tooltips.34.1=覆盖版形式的接口 直接连接覆盖版所在面以连入ME网络 +item.proghatch.cover.dedicated.tooltips.34.1=覆盖板形式的接口 直接连接覆盖板所在面以连入ME网络 item.proghatch.cover.dedicated.tooltips.34.2=使用内存卡右键以绑定 只能作为P2P输出端 item.proghatch.cover.dedicated.34=P2P - ME接口覆盖板 (WIP) item.proghatch.cover.dedicated.tooltips.35=3 item.proghatch.cover.dedicated.tooltips.35.0=不含存储 -item.proghatch.cover.dedicated.tooltips.35.1=覆盖版形式的接口 直接连接覆盖版所在面以连入ME网络 +item.proghatch.cover.dedicated.tooltips.35.1=覆盖板形式的接口 直接连接覆盖板所在面以连入ME网络 item.proghatch.cover.dedicated.tooltips.35.2=使用内存卡右键以绑定 只能作为P2P输出端 item.proghatch.cover.dedicated.35=P2P - ME二合一接口覆盖板 (WIP) item.proghatch.cover.dedicated.tooltips.36=4 item.proghatch.cover.dedicated.tooltips.36.0=不含存储 -item.proghatch.cover.dedicated.tooltips.36.1=覆盖版形式的接口 直接连接覆盖版所在面以连入ME网络 +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.tooltips.36.3=集成忙碌检测覆盖板功能 不按shift右键以配置忙碌检测 item.proghatch.cover.dedicated.36=P2P - EU接口覆盖板 (NYI) programmable_hatches.cover.ae.worksensitive.false=忙碌检测:OFF programmable_hatches.cover.ae.worksensitive.true=忙碌检测:ON @@ -327,7 +327,7 @@ proghatches.eu.interface.hint.input.title=P2P输出端 只读 item.proghatch.cover.dedicated.37=ME覆盖板 (WIP) item.proghatch.cover.dedicated.tooltips.37=3 item.proghatch.cover.dedicated.tooltips.37.0=允许ME频道直接穿透仓室 -item.proghatch.cover.dedicated.tooltips.37.1=将所有仓室上的覆盖版连入同一个ME网络 +item.proghatch.cover.dedicated.tooltips.37.1=将所有仓室上的覆盖板连入同一个ME网络 item.proghatch.cover.dedicated.tooltips.37.2=最多传递8个频道 buffer.ingredientbuffer.name.0=原材料缓存仓 (T0) buffer.ingredientbuffer.name.1=原材料缓存仓 (T1) @@ -416,3 +416,5 @@ proghatches.eu.interface.waila.is_machine.dir=使用扳手指向目标机器 item.proghatch_circuit_fixer.name.tooltip=右击一个ME网络以修复这个网络中所有含旧版编程器电路的样板(0.0.16版本以及以下编写的样板). proghatches.eu.interface.waila.pass=归还检查:%s proghatches.eu.interface.waila.pass.p2p=网络归还检查:%s +item.proghatches.part.eu.source.superconduct.name=EU源(%s超导) +item.proghatches.part.eu.source.normal.name=EU源(%s) diff --git a/src/main/resources/assets/proghatches/textures/blocks/eu.png b/src/main/resources/assets/proghatches/textures/blocks/eu.png index 72cbb1863d40e743068356463e99b22abc712dc4..8cb2e2922e7b4fea9d596762c19320070183983b 100644 GIT binary patch delta 114 zcmV-&0FD340kZ*+NNWzm000id0mpBsWB>pFNJ&INR5(v#82sS>Cx-t}CRV@%rO5_( z4IpGYUI5ZewgIGQW`xox0H0j(&p-iSg3@FIf(FcA z0cGF-v~>X?+d%-Q0Wi&p5fB;|z-j=onn3_-G~#nQx}g{@AVo6>5S5Vdd5K^&5(*EZ tq7h$U5_ADR%^*O~0777(b0Y%-0Q?ph2#?uppa1{>07*qoLPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0kTO%K~y+TEt2VW z>mUq-&5pOG@BfDRk#pTRw($o2R4&O$1R9M-1M2m9#Tci5lTxabqO>x`SZmpC+txIV zv(8xKoLiQKLw%lS#g(Rz&Ue1=`#6s4zBuQM)OB63gb*OokH;hDEH#aMSo}%1T;xyv zZJ*~wrqu~%S+JFOHXAm2d>iP~|6zcc; z4GsjcXv_2W3ocow{ai}O06L_h%%kZ#+SEsF7)7%qlE1ya{_rCQUgvQkZY-*=H= zEtXHy1Y%v*s$$zWjL~xK)&OF(5CaJw2V%Goh&dIhC0EVdhQ2QuRNhi9pU;O=tk{oT zZvD?6>N;PB!5nFh fX-1rt=h&!U40t;|S}(s{00000NkvXXu0mjfpLO!v literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/proghatches/textures/blocks/eu_back2.png b/src/main/resources/assets/proghatches/textures/blocks/eu_back2.png new file mode 100644 index 0000000000000000000000000000000000000000..1743c5a195a232453ce205f9ebfe579c24f1f78f GIT binary patch literal 380 zcmV-?0fYXDP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0TD?=K~y+T&63Sd zgFqNX&rn*y_>-7g_L{hG>ub38(R>A;!@Y|xG&OC~g^{F9qd{80mYH#e40engyYu8` zfXqF>M-bfQ>_Xso=08E9HMO>D7a}-8 zB<$@Io68nokSNKj(GH;xmjqWF59lAbhT+!?fuX+cf+XOgmB>!D&d+ zV-SfX?wobP3%76Z1f@`B28GmSoNYvt7EgH3m}NXK85NAyHcu6gB~xiW*EgOZB^ya8 zDHNr)u_uZOK3&D&3HPr&ESO0$SYg)*43Tft#%b|{bj7@+(Dr^CSX)Og&=tCN6~n*# a`QQt=x_0M&G?;h*0000Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0bof)K~y+TmC{YF zoG=UkVA}~vcmusa)hl<~Lv-7FwGTQ&{%qHQ8FfAA!?FN_WrN>;J^&zse8ozji+1Bh z6YHd)N0vth5!wr|*pp=ETL&R388ULl0iB>@pl;B0u>2VrfBgDmbqVF0JFKM@c!3Vm zi4W8cr9ifp6!!}KY{`4MOj9@BVqhN{gskC!aA3@sGR8BBnE>?#PG?Rhv^T45RxY#ImN?qsLK8`*=c)lA+yTpydu5MR9SV6r|VjKmfe>}`t@R!rh(QM*B)otee zvFgl5l9WlRnW5dNE!b9UUo1kuNneChm6*+|VCFh;2~v|4;IP7Y`r7X