From 251fcc26b07c9409d1806438abe01de15f3fd22e Mon Sep 17 00:00:00 2001 From: Pilzinsel64 Date: Sun, 19 Mar 2023 10:35:42 +0100 Subject: [PATCH] Ultra Dense ME Conduits (#105) * basic MEConduit DenseUltra implementation * add assets for ME Conduit Dense Ultra * fix icon array count * fix previous commit * finalize ultra dense me conduits * add configu for Ultra Dense ME Conduits * edit texture a little bit more * adjust meConduitCoreDenseUltra.png * fix enableMEUltraDenseConduits * spottlessApply * fix texture * improve canConnectToExternal() --- .../enderio/conduit/ConduitRecipes.java | 7 +- .../enderio/conduit/me/IMEConduit.java | 2 + .../enderio/conduit/me/ItemMEConduit.java | 3 +- .../enderio/conduit/me/MEConduit.java | 66 +++++++++++++----- .../enderio/conduit/me/MEConduitGrid.java | 8 ++- .../crazypants/enderio/config/Config.java | 6 ++ .../crazypants/enderio/waila/WailaCompat.java | 4 +- .../resources/assets/enderio/lang/de_DE.lang | 1 + .../resources/assets/enderio/lang/en_US.lang | 1 + .../blocks/meConduitCoreDenseUltra.png | Bin 0 -> 731 bytes .../textures/blocks/meConduitDenseUltra.png | Bin 0 -> 298 bytes .../items/itemMeConduitDenseUltra.png | Bin 0 -> 1946 bytes 12 files changed, 78 insertions(+), 20 deletions(-) create mode 100644 src/main/resources/assets/enderio/textures/blocks/meConduitCoreDenseUltra.png create mode 100644 src/main/resources/assets/enderio/textures/blocks/meConduitDenseUltra.png create mode 100644 src/main/resources/assets/enderio/textures/items/itemMeConduitDenseUltra.png diff --git a/src/main/java/crazypants/enderio/conduit/ConduitRecipes.java b/src/main/java/crazypants/enderio/conduit/ConduitRecipes.java index 54be65e7..cb9f7e0c 100644 --- a/src/main/java/crazypants/enderio/conduit/ConduitRecipes.java +++ b/src/main/java/crazypants/enderio/conduit/ConduitRecipes.java @@ -682,6 +682,11 @@ public class ConduitRecipes { addShaped(res.copy(), "bbb", "fqf", "bbb", 'b', conduitBinder, 'f', pureFluix, 'q', quartzFiber); res.stackSize = 1; - addShaped(new ItemStack(EnderIO.itemMEConduit, 1, 1), "bCb", "CbC", "bCb", 'b', conduitBinder, 'C', res); + ItemStack resDense = new ItemStack(EnderIO.itemMEConduit, 1, 1); + ItemStack resUltra = new ItemStack(EnderIO.itemMEConduit, 1, 2); + addShaped(resDense, "bCb", "CbC", "bCb", 'b', conduitBinder, 'C', res); + if (Config.enableMEUltraDenseConduits) { + addShaped(resUltra, "bCb", "CbC", "bCb", 'b', conduitBinder, 'C', resDense); + } } } diff --git a/src/main/java/crazypants/enderio/conduit/me/IMEConduit.java b/src/main/java/crazypants/enderio/conduit/me/IMEConduit.java index 13294e7f..811dcfd0 100644 --- a/src/main/java/crazypants/enderio/conduit/me/IMEConduit.java +++ b/src/main/java/crazypants/enderio/conduit/me/IMEConduit.java @@ -14,5 +14,7 @@ public interface IMEConduit extends IConduit { boolean isDense(); + boolean isDenseUltra(); + int getChannelsInUse(); } diff --git a/src/main/java/crazypants/enderio/conduit/me/ItemMEConduit.java b/src/main/java/crazypants/enderio/conduit/me/ItemMEConduit.java index abbfff68..6514d15c 100644 --- a/src/main/java/crazypants/enderio/conduit/me/ItemMEConduit.java +++ b/src/main/java/crazypants/enderio/conduit/me/ItemMEConduit.java @@ -15,7 +15,8 @@ public class ItemMEConduit extends AbstractItemConduit { private static ItemConduitSubtype[] subtypes = new ItemConduitSubtype[] { new ItemConduitSubtype(ModObject.itemMEConduit.name(), "enderio:itemMeConduit"), - new ItemConduitSubtype(ModObject.itemMEConduit.name() + "Dense", "enderio:itemMeConduitDense") }; + new ItemConduitSubtype(ModObject.itemMEConduit.name() + "Dense", "enderio:itemMeConduitDense"), + new ItemConduitSubtype(ModObject.itemMEConduit.name() + "DenseUltra", "enderio:itemMeConduitDenseUltra") }; public static ItemMEConduit create() { ItemMEConduit result = new ItemMEConduit(); diff --git a/src/main/java/crazypants/enderio/conduit/me/MEConduit.java b/src/main/java/crazypants/enderio/conduit/me/MEConduit.java index f9b549d4..5e89bf6e 100644 --- a/src/main/java/crazypants/enderio/conduit/me/MEConduit.java +++ b/src/main/java/crazypants/enderio/conduit/me/MEConduit.java @@ -13,6 +13,7 @@ import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; import appeng.api.AEApi; +import appeng.api.networking.GridFlags; import appeng.api.networking.IGridConnection; import appeng.api.networking.IGridHost; import appeng.api.networking.IGridNode; @@ -44,6 +45,7 @@ public class MEConduit extends AbstractConduit implements IMEConduit { public static IIcon[] longTextures; private boolean isDense; + private boolean isDenseUltra; private int playerID = -1; public MEConduit() { @@ -51,6 +53,7 @@ public class MEConduit extends AbstractConduit implements IMEConduit { } public MEConduit(int itemDamage) { + isDenseUltra = itemDamage == 2; isDense = itemDamage == 1; } @@ -59,14 +62,16 @@ public class MEConduit extends AbstractConduit implements IMEConduit { @Override public void registerIcons(IIconRegister register) { - coreTextures = new IIcon[2]; - longTextures = new IIcon[2]; + coreTextures = new IIcon[3]; + longTextures = new IIcon[3]; coreTextures[0] = register.registerIcon(EnderIO.DOMAIN + ":meConduitCore"); coreTextures[1] = register.registerIcon(EnderIO.DOMAIN + ":meConduitCoreDense"); + coreTextures[2] = register.registerIcon(EnderIO.DOMAIN + ":meConduitCoreDenseUltra"); longTextures[0] = register.registerIcon(EnderIO.DOMAIN + ":meConduit"); longTextures[1] = register.registerIcon(EnderIO.DOMAIN + ":meConduitDense"); + longTextures[2] = register.registerIcon(EnderIO.DOMAIN + ":meConduitDenseUltra"); } @Override @@ -76,8 +81,14 @@ public class MEConduit extends AbstractConduit implements IMEConduit { }); } - public static int getDamageForState(boolean isDense) { - return isDense ? 1 : 0; + public static int getDamageForState(boolean isDense, boolean isDenseUltra) { + if (isDenseUltra) { + return 2; + } + if (isDense) { + return 1; + } + return 0; } @Override @@ -87,7 +98,7 @@ public class MEConduit extends AbstractConduit implements IMEConduit { @Override public ItemStack createItem() { - return new ItemStack(EnderIO.itemMEConduit, 1, getDamageForState(isDense)); + return new ItemStack(EnderIO.itemMEConduit, 1, getDamageForState(isDense, isDenseUltra)); } @Override @@ -105,6 +116,7 @@ public class MEConduit extends AbstractConduit implements IMEConduit { public void writeToNBT(NBTTagCompound nbtRoot) { super.writeToNBT(nbtRoot); nbtRoot.setBoolean("isDense", isDense); + nbtRoot.setBoolean("isDenseUltra", isDenseUltra); nbtRoot.setInteger("playerID", playerID); } @@ -117,6 +129,9 @@ public class MEConduit extends AbstractConduit implements IMEConduit { } else { playerID = -1; } + if (nbtRoot.hasKey("isDenseUltra")) { + isDenseUltra = nbtRoot.getBoolean("isDenseUltra"); + } } public void setPlayerID(int playerID) { @@ -148,26 +163,40 @@ public class MEConduit extends AbstractConduit implements IMEConduit { // because the AE2 API doesn't allow an easy query like "which side can connect to an ME cable" it needs this // mess + IGridNode node = null; if (te instanceof IPartHost) { IPart part = ((IPartHost) te).getPart(dir.getOpposite()); if (part == null) { part = ((IPartHost) te).getPart(ForgeDirection.UNKNOWN); - return part != null; } - if (part.getExternalFacingNode() != null) { - return true; + if (part != null) { + node = part.getExternalFacingNode(); + if (node == null) { + node = part.getGridNode(); + } } - String name = part.getClass().getSimpleName(); - return "PartP2PTunnelME".equals(name) || "PartQuartzFiber".endsWith(name) - || "PartToggleBus".equals(name) - || "PartInvertedToggleBus".equals(name); } else if (te instanceof IGridHost) { - IGridNode node = ((IGridHost) te).getGridNode(dir.getOpposite()); + node = ((IGridHost) te).getGridNode(dir.getOpposite()); if (node == null) { node = ((IGridHost) te).getGridNode(ForgeDirection.UNKNOWN); } - if (node != null) { - return node.getGridBlock().getConnectableSides().contains(dir.getOpposite()); + } + if (node != null) { + return canConnectToGridNode(node, dir); + } + return false; + } + + @Method(modid = "appliedenergistics2") + private Boolean canConnectToGridNode(IGridNode node, ForgeDirection dir) { + if (node.getGridBlock().getConnectableSides().contains(dir.getOpposite())) { + if (isDenseUltra()) { + return node.hasFlag(GridFlags.ULTRA_DENSE_CAPACITY) + || ((node.hasFlag(GridFlags.DENSE_CAPACITY)) && !node.hasFlag(GridFlags.CANNOT_CARRY)); + } else if (isDense()) { + return true; + } else { + return !node.hasFlag(GridFlags.ULTRA_DENSE_CAPACITY); } } return false; @@ -175,7 +204,7 @@ public class MEConduit extends AbstractConduit implements IMEConduit { @Override public IIcon getTextureForState(CollidableComponent component) { - int state = getDamageForState(isDense); + int state = getDamageForState(isDense, isDenseUltra); if (component.dir == ForgeDirection.UNKNOWN) { return coreTextures[state]; } else { @@ -343,4 +372,9 @@ public class MEConduit extends AbstractConduit implements IMEConduit { public boolean isDense() { return isDense; } + + @Override + public boolean isDenseUltra() { + return isDenseUltra; + } } diff --git a/src/main/java/crazypants/enderio/conduit/me/MEConduitGrid.java b/src/main/java/crazypants/enderio/conduit/me/MEConduitGrid.java index 0f076d4c..f052479a 100644 --- a/src/main/java/crazypants/enderio/conduit/me/MEConduitGrid.java +++ b/src/main/java/crazypants/enderio/conduit/me/MEConduitGrid.java @@ -43,7 +43,13 @@ public class MEConduitGrid implements IGridBlock { @Override public EnumSet getFlags() { - return conduit.isDense() ? EnumSet.of(GridFlags.DENSE_CAPACITY) : EnumSet.noneOf(GridFlags.class); + if (conduit.isDenseUltra()) { + return EnumSet.of(GridFlags.ULTRA_DENSE_CAPACITY); + } + if (conduit.isDense()) { + return EnumSet.of(GridFlags.DENSE_CAPACITY); + } + return EnumSet.noneOf(GridFlags.class); } @Override diff --git a/src/main/java/crazypants/enderio/config/Config.java b/src/main/java/crazypants/enderio/config/Config.java index e12ba7d2..93ddfe0c 100644 --- a/src/main/java/crazypants/enderio/config/Config.java +++ b/src/main/java/crazypants/enderio/config/Config.java @@ -438,6 +438,7 @@ public final class Config { public static boolean isGasConduitEnabled = true; public static boolean enableMEConduits = true; + public static boolean enableMEUltraDenseConduits = false; public static boolean enableOCConduits = true; public static boolean enableOCConduitsAnimatedTexture = true; @@ -2298,6 +2299,11 @@ public final class Config { sectionItems.name, enableMEConduits, "Allows ME conduits. Only has an effect with AE2 installed."); + enableMEUltraDenseConduits = config.getBoolean( + "enableMEUltraDenseConduits", + sectionItems.name, + enableMEUltraDenseConduits, + "Allows ME Ultra Dense conduits. Only has an effect with AE2 installed."); enableOCConduits = config.getBoolean( "enableOCConduits", sectionItems.name, diff --git a/src/main/java/crazypants/enderio/waila/WailaCompat.java b/src/main/java/crazypants/enderio/waila/WailaCompat.java index b36ec0c2..5543a3b0 100644 --- a/src/main/java/crazypants/enderio/waila/WailaCompat.java +++ b/src/main/java/crazypants/enderio/waila/WailaCompat.java @@ -353,13 +353,14 @@ public class WailaCompat implements IWailaDataProvider { } else if (itemStack.getItem() == EnderIO.itemMEConduit) { NBTTagCompound nbtRoot = _accessor.getNBTData(); if (nbtRoot.hasKey("isDense")) { + boolean isDenseUltra = nbtRoot.getBoolean("isDenseUltra"); boolean isDense = nbtRoot.getBoolean("isDense"); int channelsInUse = nbtRoot.getInteger("channelsInUse"); currenttip.add( MessageFormat.format( EnderIO.lang.localize("itemMEConduit.channelsUsed"), channelsInUse, - isDense ? 32 : 8)); + isDenseUltra ? 128 : (isDense ? 32 : 8))); } } } @@ -395,6 +396,7 @@ public class WailaCompat implements IWailaDataProvider { if (mec != null) { tag.setInteger("channelsInUse", mec.getChannelsInUse()); tag.setBoolean("isDense", mec.isDense()); + tag.setBoolean("isDenseUltra", mec.isDenseUltra()); } } else if (te instanceof IInternalPoweredTile) { IInternalPoweredTile ipte = (IInternalPoweredTile) te; diff --git a/src/main/resources/assets/enderio/lang/de_DE.lang b/src/main/resources/assets/enderio/lang/de_DE.lang index 69a5f1a9..77ad4d2c 100644 --- a/src/main/resources/assets/enderio/lang/de_DE.lang +++ b/src/main/resources/assets/enderio/lang/de_DE.lang @@ -130,6 +130,7 @@ enderio.itemGasConduit.tooltip.detailed.line1=Transportiert Mekanism-kompatible enderio.itemMEConduit.name=ME-Leitung enderio.itemMEConduitDense.name=Dichte ME-Leitung +enderio.itemMEConduitDenseUltra.name=Extrem Dichte ME-Leitungen enderio.itemMEConduit.channelsUsed={0,number} von {1,number} Kanälen enderio.itemOCConduit.name=Netzwerkleitung (OC) diff --git a/src/main/resources/assets/enderio/lang/en_US.lang b/src/main/resources/assets/enderio/lang/en_US.lang index fd53f599..e55e02d9 100644 --- a/src/main/resources/assets/enderio/lang/en_US.lang +++ b/src/main/resources/assets/enderio/lang/en_US.lang @@ -131,6 +131,7 @@ enderio.itemGasConduit.tooltip.detailed.line1=Transfers Mekanism-compatible gase enderio.itemMEConduit.name=ME Conduit enderio.itemMEConduitDense.name=Dense ME Conduit +enderio.itemMEConduitDenseUltra.name=Ultra Dense ME Conduit enderio.itemMEConduit.channelsUsed={0,number} of {1,number} Channels enderio.itemOCConduit.name=Network Conduit (OC) diff --git a/src/main/resources/assets/enderio/textures/blocks/meConduitCoreDenseUltra.png b/src/main/resources/assets/enderio/textures/blocks/meConduitCoreDenseUltra.png new file mode 100644 index 0000000000000000000000000000000000000000..72b484fe124bc0fc21ce50f9668a54033f24a1e5 GIT binary patch literal 731 zcmV<10wn#3P)Px#1ZP1_K>z@;j|==^1poj5(ojrPMJg&PEiElGGcz$UF)}hTEG#TeGjdNfb1yG1 zD=RBaGI1_0E=w?PDJdy1FfemUj&)3scTSQH7d8|gLMA3AC@3f=CnpsjLk}1?c1@8J z9YG5eGk8yvbW4v66*LwgL=qf84Hh*J7&uQeb6h=!b5xyiQk!y9oL)bO5g9pMK8I#R zlzdvMds(S{TdRLvtz|=#a8a5K6*LbRHV_y$eq5{&8aojhJQ5o{6dpqp9YPf!L~l@; zB_$D)y9|9{Ch@aUyUllyq@ za&L&3$ynzs23DK)BupgPU??Ii%EF2rWO$V+jRsfBP(rZ4l8i615nZ!fyO+)w3oy(i z1Q)U*cI+p45nhE5!%gY^#0ficDy|w=`838DLMUEW)y%S37}WZ@o-g7#WVx!U%BUg& zVXN}Z?RwL+?Pl{fd$%f$Fd{^4F}>No-|f4@Zg;m`PKyLjM#LfMvHS4x6LNG74woFs z5JJ;`{_+*NzQMsM8-mp!Y17?5d_#UjgorErhiW=_0`0K57|cJY?}zXhfYvuLL?`6P zq5?P__m43GZJ%-&M!8l;D7V=D*!BIP>+hb5>C!PSXhmI~m)ZLG+_vq{^=+Bw37#CY z^Oc_$r~tB<``HWy0Sea2*X06Qw6U1ilkxfHDXgwN+75k;ML9+jQ?E#e>WoVt7I2QA z@{ov5rwg5$NC&@(<yz*P4=4!FF_HV=r(`S^8pr#%3sw?B>tbd&)fh2 N002ovPDHLkV1mg&ApQUV literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/enderio/textures/blocks/meConduitDenseUltra.png b/src/main/resources/assets/enderio/textures/blocks/meConduitDenseUltra.png new file mode 100644 index 0000000000000000000000000000000000000000..ab1c82cb165ffe7a683c20d36a51142aeb58b107 GIT binary patch literal 298 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=Dh+L6~vJ#O${~!Tp{tjv*25Z>KwQ9aa!i+10Q;EwWZ(M?)gpJbli4 zQaK0rNWNG&WnFaZlvA0tdzbgE-tzdfVa~z-DF>?g&5qe@l1w(&sNqn&vw8p8%(d%p z&MD40_(U>ee&lnR8&TXxXxNRSW+sEB}0GDD1zOw3G7fLbbb zDYdjw(Xwi5*Y!e0q^(+8OV!i0O7U!2_t@6Uw%RT&c)?}GR(n>Eogmo#;pvZ^bH4fJ z{l4eDzt5RhaH(!(bJ6FtozQif_Z-jc3Je3~ybi16n)dZivD-ht{kG zfcJw_2I%pk{C!SVzH#2Xc`yuP7$%p?Q4~#0O;swDDwPUBkd%}ZsZ^>^Ce;Srbts;Jpbi2)}5Z*9p1b*S1fqNEMH^6cs~EFlC-** z*+z$P8>?@4zOebllGb(04^}NZP-@t^jC$#XqL%e5-mNY^l#q}xEtc{vd7I1G&gix* zSO3AeuyLh!qp*0FzhHM%?0k|WDT=~zyt({~K{44$o{VKY07QNoT4O%iTy`4(#@0LY z3xoo57G>vLQkvmxtTf>Ah-d&%rv*H;y^Iw=8|!eoHBevMDF}2j8fYnDmYF?zc9k=u z(#z&mX6M^0%j_frrOl6+tPW731s5yOV8B)G=Ba=N8a7Oc-=Sj!0*4_&nFi8^Jc0%0 z98k}BS&)ztuw5ocK_w|g37izW0m@}4hM+P;PQoZk;YtcsfFlnix&uMAmno&JhV&74 zqNIUV34(`05Wn9q^p)Pk9EePg$mOtzfcXlyKnGwqKj)E=5iG%r}$Ut@V9n$NHBu!xoA zIiJ_gitst3%3=+F+ffK8MnhS=PO&?5xq-9$T&!C#88nc1BW0WnWw+5b8>3XfG$~WT zB#JYzt(0b9gvYykxXZVxu1A zZD765wJekFFV4A>D*d`}Xm|#k25+h1WQPKvD=rjL! z1(D%F6hlKoL-RjF^k_hbPsIrhu>*NbkC613Vys)_l~*KCeDfVQ0E9K04BC8^1aiw=W8ck7zediNqf9Ay52PE>QvLA zztr71pH_%<%xp+%a%9dsvu{gyR#AVK_1uw$yfd8^WUIP;4%u_b@ZH4luoINV(O6Vc z1L@9P49H&E@JrOxoau{ZCOLPU{Cnb&ue z_&LJw>KSZa_{+~9SNIPuGXFHyxgq6S*WHt@2e0+5J9YW!eRJMPN&Niu2tci7_7_)Q ziVOz3+<~}b4}!%@{`k8qcC;~&m?oOIr2?wY#Bzp6EMy`*dA++k4mi z*IsQY2m^NKjJM+xC=vX)0`VAD^p