aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorlordIcocain <62835225+lordIcocain@users.noreply.github.com>2023-09-23 18:31:15 +0300
committerGitHub <noreply@github.com>2023-09-23 17:31:15 +0200
commit6599b089a7d259ddf0313b10e26e00ab116d3699 (patch)
tree3c5cc263f4a92f0c201d865a9e924581eda6edd4 /src
parent66bd6b92334dae185c7fb42d04cae838db77ae1d (diff)
downloadGT5-Unofficial-6599b089a7d259ddf0313b10e26e00ab116d3699.tar.gz
GT5-Unofficial-6599b089a7d259ddf0313b10e26e00ab116d3699.tar.bz2
GT5-Unofficial-6599b089a7d259ddf0313b10e26e00ab116d3699.zip
ME hatch`s additional connection mode and small fixes (#2291)
* ME hatch`s improvements (?) * ForgeDirection.UNKNOWN not allowed Better description No check before getBoolean * Add description in tooltip Chat message using localization Stocking bus data stick will copy/paste connection mode * Chinese localization * Another method localization * code style
Diffstat (limited to 'src')
-rw-r--r--src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java1
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_CraftingInput_ME.java26
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_InputBus_ME.java28
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_OutputBus_ME.java33
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_Output_ME.java34
-rw-r--r--src/main/resources/assets/gregtech/lang/en_US.lang2
-rw-r--r--src/main/resources/assets/gregtech/lang/zh_CN.lang2
7 files changed, 115 insertions, 11 deletions
diff --git a/src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java b/src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java
index b42e7a1a82..57a55fc17e 100644
--- a/src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java
+++ b/src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java
@@ -2386,7 +2386,6 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity
@Override
public IGridNode getGridNode(ForgeDirection forgeDirection) {
- if (mFacing != forgeDirection) return null;
final AENetworkProxy gp = getProxy();
return gp != null ? gp.getNode() : null;
}
diff --git a/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_CraftingInput_ME.java b/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_CraftingInput_ME.java
index e7af09ef90..d0e56853ad 100644
--- a/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_CraftingInput_ME.java
+++ b/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_CraftingInput_ME.java
@@ -17,6 +17,7 @@ import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ChatComponentText;
+import net.minecraft.util.ChatComponentTranslation;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.world.World;
import net.minecraftforge.common.util.Constants;
@@ -325,6 +326,7 @@ public class GT_MetaTileEntity_Hatch_CraftingInput_ME extends GT_MetaTileEntity_
private String customName = null;
private boolean supportFluids;
+ private boolean additionalConnection = false;
public GT_MetaTileEntity_Hatch_CraftingInput_ME(int aID, String aName, String aNameRegional,
boolean supportFluids) {
@@ -336,7 +338,8 @@ public class GT_MetaTileEntity_Hatch_CraftingInput_ME extends GT_MetaTileEntity_
MAX_INV_COUNT,
new String[] { "Advanced item input for Multiblocks", "Processes patterns directly from ME",
supportFluids ? "It supports patterns including fluids"
- : "It does not support patterns including fluids" });
+ : "It does not support patterns including fluids",
+ "Change ME connection behavior by right-clicking with wire cutter" });
disableSort = true;
this.supportFluids = supportFluids;
}
@@ -389,14 +392,33 @@ public class GT_MetaTileEntity_Hatch_CraftingInput_ME extends GT_MetaTileEntity_
return isOutputFacing(forgeDirection) ? AECableType.SMART : AECableType.NONE;
}
+ public void setAdditionalConnectionOption() {
+ if (additionalConnection) {
+ gridProxy.setValidSides(EnumSet.complementOf(EnumSet.of(ForgeDirection.UNKNOWN)));
+ } else {
+ gridProxy.setValidSides(EnumSet.of(getBaseMetaTileEntity().getFrontFacing()));
+ }
+ }
+
@Override
public void securityBreak() {}
@Override
+ public boolean onWireCutterRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer,
+ float aX, float aY, float aZ) {
+ additionalConnection = !additionalConnection;
+ setAdditionalConnectionOption();
+ aPlayer.addChatComponentMessage(
+ new ChatComponentTranslation("GT5U.hatch.additionalConnection." + additionalConnection));
+ return true;
+ }
+
+ @Override
public AENetworkProxy getProxy() {
if (gridProxy == null) {
gridProxy = new AENetworkProxy(this, "proxy", ItemList.Hatch_CraftingInput_Bus_ME.get(1), true);
gridProxy.setFlags(GridFlags.REQUIRE_CHANNEL);
+ setAdditionalConnectionOption();
if (getBaseMetaTileEntity().getWorld() != null) gridProxy.setOwner(
getBaseMetaTileEntity().getWorld()
.getPlayerEntityByName(getBaseMetaTileEntity().getOwnerName()));
@@ -484,6 +506,7 @@ public class GT_MetaTileEntity_Hatch_CraftingInput_ME extends GT_MetaTileEntity_
}
aNBT.setTag("internalInventory", internalInventoryNBT);
if (customName != null) aNBT.setString("customName", customName);
+ aNBT.setBoolean("additionalConnection", additionalConnection);
getProxy().writeToNBT(aNBT);
}
@@ -533,6 +556,7 @@ public class GT_MetaTileEntity_Hatch_CraftingInput_ME extends GT_MetaTileEntity_
}
if (aNBT.hasKey("customName")) customName = aNBT.getString("customName");
+ additionalConnection = aNBT.getBoolean("additionalConnection");
getProxy().readFromNBT(aNBT);
}
diff --git a/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_InputBus_ME.java b/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_InputBus_ME.java
index 39fd457647..34f038b2ea 100644
--- a/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_InputBus_ME.java
+++ b/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_InputBus_ME.java
@@ -4,6 +4,7 @@ import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_ME_INPUT_HATCH;
import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_ME_INPUT_HATCH_ACTIVE;
import java.util.ArrayList;
+import java.util.EnumSet;
import java.util.Iterator;
import java.util.List;
@@ -16,6 +17,7 @@ import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ChatComponentText;
+import net.minecraft.util.ChatComponentTranslation;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
@@ -77,6 +79,7 @@ public class GT_MetaTileEntity_Hatch_InputBus_ME extends GT_MetaTileEntity_Hatch
private boolean autoPullItemList = false;
private int minAutoPullStackSize = 1;
private static final int CONFIG_WINDOW_ID = 10;
+ private boolean additionalConnection = false;
public GT_MetaTileEntity_Hatch_InputBus_ME(int aID, String aName, String aNameRegional) {
super(
@@ -90,6 +93,7 @@ public class GT_MetaTileEntity_Hatch_InputBus_ME extends GT_MetaTileEntity_Hatch
"Auto-Pull from ME mode will automatically stock the first 16 items in the ME system, updated every 5 seconds.",
"Toggle by right-clicking with screwdriver, or use the GUI.",
"Use the GUI to limit the minimum stack size for Auto-Pulling.",
+ "Change ME connection behavior by right-clicking with wire cutter",
"Configuration data can be copy+pasted using a data stick." });
disableSort = true;
}
@@ -134,6 +138,24 @@ public class GT_MetaTileEntity_Hatch_InputBus_ME extends GT_MetaTileEntity_Hatch
return isOutputFacing(forgeDirection) ? AECableType.SMART : AECableType.NONE;
}
+ public void setAdditionalConnectionOption() {
+ if (additionalConnection) {
+ gridProxy.setValidSides(EnumSet.complementOf(EnumSet.of(ForgeDirection.UNKNOWN)));
+ } else {
+ gridProxy.setValidSides(EnumSet.of(getBaseMetaTileEntity().getFrontFacing()));
+ }
+ }
+
+ @Override
+ public boolean onWireCutterRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer,
+ float aX, float aY, float aZ) {
+ additionalConnection = !additionalConnection;
+ setAdditionalConnectionOption();
+ aPlayer.addChatComponentMessage(
+ new ChatComponentTranslation("GT5U.hatch.additionalConnection." + additionalConnection));
+ return true;
+ }
+
@Override
public AENetworkProxy getProxy() {
if (gridProxy == null) {
@@ -144,6 +166,7 @@ public class GT_MetaTileEntity_Hatch_InputBus_ME extends GT_MetaTileEntity_Hatch
ItemList.Hatch_Output_Bus_ME.get(1),
true);
gridProxy.setFlags(GridFlags.REQUIRE_CHANNEL);
+ setAdditionalConnectionOption();
if (getBaseMetaTileEntity().getWorld() != null) gridProxy.setOwner(
getBaseMetaTileEntity().getWorld()
.getPlayerEntityByName(getBaseMetaTileEntity().getOwnerName()));
@@ -173,6 +196,7 @@ public class GT_MetaTileEntity_Hatch_InputBus_ME extends GT_MetaTileEntity_Hatch
aNBT.setIntArray("sizes", sizes);
aNBT.setBoolean("autoStock", autoPullItemList);
aNBT.setInteger("minAutoPullStackSize", minAutoPullStackSize);
+ aNBT.setBoolean("additionalConnection", additionalConnection);
getProxy().writeToNBT(aNBT);
}
@@ -205,6 +229,7 @@ public class GT_MetaTileEntity_Hatch_InputBus_ME extends GT_MetaTileEntity_Hatch
}
autoPullItemList = aNBT.getBoolean("autoStock");
minAutoPullStackSize = aNBT.getInteger("minAutoPullStackSize");
+ additionalConnection = aNBT.getBoolean("additionalConnection");
getProxy().readFromNBT(aNBT);
}
@@ -261,6 +286,7 @@ public class GT_MetaTileEntity_Hatch_InputBus_ME extends GT_MetaTileEntity_Hatch
if (GT_Utility.isStackInvalid(circuit)) circuit = null;
setAutoPullItemList(nbt.getBoolean("autoPull"));
minAutoPullStackSize = nbt.getInteger("minStackSize");
+ additionalConnection = nbt.getBoolean("additionalConnection");
if (!autoPullItemList) {
NBTTagList stockingItems = nbt.getTagList("itemsToStock", 10);
for (int i = 0; i < stockingItems.tagCount(); i++) {
@@ -268,6 +294,7 @@ public class GT_MetaTileEntity_Hatch_InputBus_ME extends GT_MetaTileEntity_Hatch
}
}
setInventorySlotContents(getCircuitSlot(), circuit);
+ setAdditionalConnectionOption();
aPlayer.addChatMessage(new ChatComponentText("Loaded Config From Data Stick"));
return true;
}
@@ -283,6 +310,7 @@ public class GT_MetaTileEntity_Hatch_InputBus_ME extends GT_MetaTileEntity_Hatch
tag.setString("type", "stockingBus");
tag.setBoolean("autoPull", autoPullItemList);
tag.setInteger("minStackSize", minAutoPullStackSize);
+ tag.setBoolean("additionalConnection", additionalConnection);
tag.setTag("circuit", GT_Utility.saveItem(getStackInSlot(getCircuitSlot())));
NBTTagList stockingItems = new NBTTagList();
diff --git a/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_OutputBus_ME.java b/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_OutputBus_ME.java
index ff284015ea..6b127c827d 100644
--- a/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_OutputBus_ME.java
+++ b/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_OutputBus_ME.java
@@ -4,6 +4,7 @@ import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_ME_HATCH;
import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_ME_HATCH_ACTIVE;
import java.util.ArrayList;
+import java.util.EnumSet;
import java.util.List;
import javax.annotation.Nullable;
@@ -13,8 +14,8 @@ import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTBase;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
+import net.minecraft.util.ChatComponentTranslation;
import net.minecraft.util.EnumChatFormatting;
-import net.minecraft.util.StatCollector;
import net.minecraftforge.common.util.ForgeDirection;
import appeng.api.AEApi;
@@ -55,6 +56,7 @@ public class GT_MetaTileEntity_Hatch_OutputBus_ME extends GT_MetaTileEntity_Hatc
long tickCounter = 0;
boolean lastOutputFailed = false;
boolean infiniteCache = true;
+ boolean additionalConnection = false;
public GT_MetaTileEntity_Hatch_OutputBus_ME(int aID, String aName, String aNameRegional) {
super(
@@ -63,7 +65,8 @@ public class GT_MetaTileEntity_Hatch_OutputBus_ME extends GT_MetaTileEntity_Hatc
aNameRegional,
1,
new String[] { "Item Output for Multiblocks", "Stores directly into ME",
- "Can cache infinite amount of items.", "Change cache behavior by right-clicking with screwdriver." },
+ "Can cache infinite amount of items.", "Change cache behavior by right-clicking with screwdriver.",
+ "Change ME connection behavior by right-clicking with wire cutter" },
0);
}
@@ -124,6 +127,14 @@ public class GT_MetaTileEntity_Hatch_OutputBus_ME extends GT_MetaTileEntity_Hatc
return isOutputFacing(forgeDirection) ? AECableType.SMART : AECableType.NONE;
}
+ public void setAdditionalConnectionOption() {
+ if (additionalConnection) {
+ gridProxy.setValidSides(EnumSet.complementOf(EnumSet.of(ForgeDirection.UNKNOWN)));
+ } else {
+ gridProxy.setValidSides(EnumSet.of(getBaseMetaTileEntity().getFrontFacing()));
+ }
+ }
+
@Override
public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) {
return false;
@@ -134,8 +145,17 @@ public class GT_MetaTileEntity_Hatch_OutputBus_ME extends GT_MetaTileEntity_Hatc
if (!getBaseMetaTileEntity().getCoverInfoAtSide(side)
.isGUIClickable()) return;
infiniteCache = !infiniteCache;
- GT_Utility
- .sendChatToPlayer(aPlayer, StatCollector.translateToLocal("GT5U.hatch.infiniteCache." + infiniteCache));
+ aPlayer.addChatComponentMessage(new ChatComponentTranslation("GT5U.hatch.infiniteCache." + infiniteCache));
+ }
+
+ @Override
+ public boolean onWireCutterRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer,
+ float aX, float aY, float aZ) {
+ additionalConnection = !additionalConnection;
+ setAdditionalConnectionOption();
+ aPlayer.addChatComponentMessage(
+ new ChatComponentTranslation("GT5U.hatch.additionalConnection." + additionalConnection));
+ return true;
}
@Override
@@ -148,6 +168,7 @@ public class GT_MetaTileEntity_Hatch_OutputBus_ME extends GT_MetaTileEntity_Hatc
ItemList.Hatch_Output_Bus_ME.get(1),
true);
gridProxy.setFlags(GridFlags.REQUIRE_CHANNEL);
+ setAdditionalConnectionOption();
if (getBaseMetaTileEntity().getWorld() != null) gridProxy.setOwner(
getBaseMetaTileEntity().getWorld()
.getPlayerEntityByName(getBaseMetaTileEntity().getOwnerName()));
@@ -216,6 +237,8 @@ public class GT_MetaTileEntity_Hatch_OutputBus_ME extends GT_MetaTileEntity_Hatc
tag.setLong("size", s.getStackSize());
items.appendTag(tag);
}
+ aNBT.setBoolean("infiniteCache", infiniteCache);
+ aNBT.setBoolean("additionalConnection", additionalConnection);
aNBT.setTag("cachedItems", items);
getProxy().writeToNBT(aNBT);
}
@@ -254,6 +277,8 @@ public class GT_MetaTileEntity_Hatch_OutputBus_ME extends GT_MetaTileEntity_Hatc
}
}
}
+ infiniteCache = aNBT.getBoolean("infiniteCache");
+ additionalConnection = aNBT.getBoolean("additionalConnection");
getProxy().readFromNBT(aNBT);
}
diff --git a/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_Output_ME.java b/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_Output_ME.java
index 000af7c8de..e2287ef7fa 100644
--- a/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_Output_ME.java
+++ b/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_Output_ME.java
@@ -4,6 +4,7 @@ import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_ME_FLUID_HATCH;
import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_ME_FLUID_HATCH_ACTIVE;
import java.util.ArrayList;
+import java.util.EnumSet;
import java.util.List;
import javax.annotation.Nullable;
@@ -12,8 +13,8 @@ import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.nbt.NBTBase;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
+import net.minecraft.util.ChatComponentTranslation;
import net.minecraft.util.EnumChatFormatting;
-import net.minecraft.util.StatCollector;
import net.minecraftforge.common.util.ForgeDirection;
import net.minecraftforge.fluids.FluidStack;
@@ -59,6 +60,7 @@ public class GT_MetaTileEntity_Hatch_Output_ME extends GT_MetaTileEntity_Hatch_O
long tickCounter = 0;
boolean lastOutputFailed = false;
boolean infiniteCache = true;
+ boolean additionalConnection = false;
public GT_MetaTileEntity_Hatch_Output_ME(int aID, String aName, String aNameRegional) {
super(
@@ -67,7 +69,8 @@ public class GT_MetaTileEntity_Hatch_Output_ME extends GT_MetaTileEntity_Hatch_O
aNameRegional,
1,
new String[] { "Fluid Output for Multiblocks", "Stores directly into ME",
- "Can cache infinite amount of fluids.", "Change cache behavior by right-clicking with screwdriver." },
+ "Can cache infinite amount of fluids.", "Change cache behavior by right-clicking with screwdriver.",
+ "Change ME connection behavior by right-clicking with wire cutter" },
0);
}
@@ -136,6 +139,14 @@ public class GT_MetaTileEntity_Hatch_Output_ME extends GT_MetaTileEntity_Hatch_O
return isOutputFacing(side) ? AECableType.SMART : AECableType.NONE;
}
+ public void setAdditionalConnectionOption() {
+ if (additionalConnection) {
+ gridProxy.setValidSides(EnumSet.complementOf(EnumSet.of(ForgeDirection.UNKNOWN)));
+ } else {
+ gridProxy.setValidSides(EnumSet.of(getBaseMetaTileEntity().getFrontFacing()));
+ }
+ }
+
@Override
public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) {
return false;
@@ -157,9 +168,17 @@ public class GT_MetaTileEntity_Hatch_Output_ME extends GT_MetaTileEntity_Hatch_O
if (!getBaseMetaTileEntity().getCoverInfoAtSide(side)
.isGUIClickable()) return;
infiniteCache = !infiniteCache;
- GT_Utility.sendChatToPlayer(
- aPlayer,
- StatCollector.translateToLocal("GT5U.hatch.infiniteCacheFluid." + infiniteCache));
+ aPlayer.addChatComponentMessage(new ChatComponentTranslation("GT5U.hatch.infiniteCacheFluid." + infiniteCache));
+ }
+
+ @Override
+ public boolean onWireCutterRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer,
+ float aX, float aY, float aZ) {
+ additionalConnection = !additionalConnection;
+ setAdditionalConnectionOption();
+ aPlayer.addChatComponentMessage(
+ new ChatComponentTranslation("GT5U.hatch.additionalConnection." + additionalConnection));
+ return true;
}
@Override
@@ -172,6 +191,7 @@ public class GT_MetaTileEntity_Hatch_Output_ME extends GT_MetaTileEntity_Hatch_O
ItemList.Hatch_Output_ME.get(1),
true);
gridProxy.setFlags(GridFlags.REQUIRE_CHANNEL);
+ setAdditionalConnectionOption();
if (getBaseMetaTileEntity().getWorld() != null) gridProxy.setOwner(
getBaseMetaTileEntity().getWorld()
.getPlayerEntityByName(getBaseMetaTileEntity().getOwnerName()));
@@ -244,6 +264,8 @@ public class GT_MetaTileEntity_Hatch_Output_ME extends GT_MetaTileEntity_Hatch_O
fluids.appendTag(tag);
}
aNBT.setTag("cachedFluids", fluids);
+ aNBT.setBoolean("infiniteCache", infiniteCache);
+ aNBT.setBoolean("additionalConnection", additionalConnection);
getProxy().writeToNBT(aNBT);
}
@@ -268,6 +290,8 @@ public class GT_MetaTileEntity_Hatch_Output_ME extends GT_MetaTileEntity_Hatch_O
}
}
}
+ infiniteCache = aNBT.getBoolean("infiniteCache");
+ additionalConnection = aNBT.getBoolean("additionalConnection");
getProxy().readFromNBT(aNBT);
}
diff --git a/src/main/resources/assets/gregtech/lang/en_US.lang b/src/main/resources/assets/gregtech/lang/en_US.lang
index 810145245c..03afafc0ee 100644
--- a/src/main/resources/assets/gregtech/lang/en_US.lang
+++ b/src/main/resources/assets/gregtech/lang/en_US.lang
@@ -438,6 +438,8 @@ GT5U.hatch.infiniteCache.true=ME Output bus will infinitely cache item, until yo
GT5U.hatch.infiniteCache.false=ME Output bus will stop accepting items when offline for more than 2 seconds
GT5U.hatch.infiniteCacheFluid.true=ME Output hatch will infinitely cache fluid, until you connect it to ME
GT5U.hatch.infiniteCacheFluid.false=ME Output hatch will stop accepting fluid when offline for more than 2 seconds
+GT5U.hatch.additionalConnection.true=ME channels connect to any side
+GT5U.hatch.additionalConnection.false=ME channels connect to front side only
GT5U.multiblock.pollution=Pollution reduced to
GT5U.multiblock.energy=Stored Energy
diff --git a/src/main/resources/assets/gregtech/lang/zh_CN.lang b/src/main/resources/assets/gregtech/lang/zh_CN.lang
index 6416d536b8..f86709e96a 100644
--- a/src/main/resources/assets/gregtech/lang/zh_CN.lang
+++ b/src/main/resources/assets/gregtech/lang/zh_CN.lang
@@ -217,6 +217,8 @@ GT5U.hatch.disableLimited.true=限制模式:§c关闭§r
GT5U.hatch.disableLimited.false=限制模式:§c开启§r
GT5U.hatch.infiniteCache.true=ME输出总线将无限缓存物品,直到连接上ME网络
GT5U.hatch.infiniteCache.false=ME输出总线离线超过2秒后将停止接收物品
+GT5U.hatch.additionalConnection.true=可从任意方向连入ME网络
+GT5U.hatch.additionalConnection.false=仅可从正面连入ME网络
GT5U.multiblock.pollution=污染减少到
GT5U.multiblock.energy=存储能量