aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/common
diff options
context:
space:
mode:
authorJason Mitchell <mitchej@gmail.com>2018-09-03 00:57:51 -0700
committerJason Mitchell <mitchej@gmail.com>2018-09-03 00:57:51 -0700
commit1698e57f729efb52e2b98e865a9671f0b50a5b2e (patch)
tree09b81c4c89478b2e392f7b482eedb064ac520eee /src/main/java/gregtech/common
parent9d530773035ad21cffb1f558fa8309a57021c3b2 (diff)
downloadGT5-Unofficial-1698e57f729efb52e2b98e865a9671f0b50a5b2e.tar.gz
GT5-Unofficial-1698e57f729efb52e2b98e865a9671f0b50a5b2e.tar.bz2
GT5-Unofficial-1698e57f729efb52e2b98e865a9671f0b50a5b2e.zip
Pipe/Cable overhaul & Add filter output on fluid filters
* Unified connect() method for pipes/wires - each subclass has it's own canConnect(), letsIn(), and letsOut() methods that map to the specifics for that implementation * Shift Clicking while placing a GT machine will now try connecting to the cable/pipe it is placed on * You can open a connection to the air for pipes & wires, allowing the next thing you place down to auto connect (ie: a JABBA barrel) * Distribute Fluids - Modeled after several of the upstream PRs * Fluid regulators on pipes should stop spazzing out now * Fluid filter covers - Now work with filtering output BUG/TODO: * Spray paint doesn't seem to keep wires/pipes from connecting properly * Spray paint on wires/pipes should force a disconnection check
Diffstat (limited to 'src/main/java/gregtech/common')
-rw-r--r--src/main/java/gregtech/common/blocks/GT_Item_Machines.java10
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_Fluidfilter.java93
2 files changed, 76 insertions, 27 deletions
diff --git a/src/main/java/gregtech/common/blocks/GT_Item_Machines.java b/src/main/java/gregtech/common/blocks/GT_Item_Machines.java
index a742994ddc..1fa33e2a1d 100644
--- a/src/main/java/gregtech/common/blocks/GT_Item_Machines.java
+++ b/src/main/java/gregtech/common/blocks/GT_Item_Machines.java
@@ -158,8 +158,16 @@ public class GT_Item_Machines
tTileEntity.setOwnerName(aPlayer.getDisplayName());
}
tTileEntity.getMetaTileEntity().initDefaultModes(aStack.getTagCompound());
+ final byte aSide = GT_Utility.getOppositeSide(side);
if (tTileEntity.getMetaTileEntity() instanceof IConnectable) {
- ((IConnectable) tTileEntity.getMetaTileEntity()).connect(GT_Utility.getOppositeSide(side));
+ // If we're connectable, try connecting to whatever we're up against
+ ((IConnectable) tTileEntity.getMetaTileEntity()).connect(aSide);
+ } else if (aPlayer != null && aPlayer.isSneaking()) {
+ // If we're being placed against something that is connectable, try telling it to connect to us
+ IGregTechTileEntity aTileEntity = tTileEntity.getIGregTechTileEntityAtSide(aSide);
+ if (aTileEntity != null && aTileEntity.getMetaTileEntity() instanceof IConnectable) {
+ ((IConnectable) aTileEntity.getMetaTileEntity()).connect((byte)side);
+ }
}
}
} else if (!aWorld.setBlock(aX, aY, aZ, this.field_150939_a, tDamage, 3)) {
diff --git a/src/main/java/gregtech/common/covers/GT_Cover_Fluidfilter.java b/src/main/java/gregtech/common/covers/GT_Cover_Fluidfilter.java
index 46ac0b42a3..b5ac8191f4 100644
--- a/src/main/java/gregtech/common/covers/GT_Cover_Fluidfilter.java
+++ b/src/main/java/gregtech/common/covers/GT_Cover_Fluidfilter.java
@@ -8,8 +8,18 @@ import net.minecraft.item.ItemStack;
import net.minecraftforge.fluids.*;
-public class GT_Cover_Fluidfilter
- extends GT_CoverBehavior {
+public class GT_Cover_Fluidfilter extends GT_CoverBehavior {
+
+ // Uses the lower 3 bits of the cover variable, so we have 8 options to work with (0-7)
+ private final int FILTER_INPUT_DENY_OUTPUT = 0;
+ private final int INVERT_INPUT_DENY_OUTPUT = 1;
+ private final int FILTER_INPUT_ANY_OUTPUT = 2;
+ private final int INVERT_INPUT_ANY_OUTPUT = 3;
+ private final int DENY_INPUT_FILTER_OUTPUT = 4;
+ private final int DENY_INPUT_INVERT_OUTPUT = 5;
+ private final int ANY_INPUT_FILTER_OUTPUT = 6;
+ private final int ANY_INPUT_INVERT_OUTPUT = 7;
+
public int doCoverThings(byte aSide, byte aInputRedstone, int aCoverID, int aCoverVariable, ICoverable aTileEntity, long aTimer) {
return aCoverVariable;
@@ -17,43 +27,54 @@ public class GT_Cover_Fluidfilter
public int onCoverScrewdriverclick(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity, EntityPlayer aPlayer, float aX, float aY, float aZ) {
int aFilterMode = aCoverVariable & 7;
- aCoverVariable ^=aFilterMode;
- aFilterMode = (aFilterMode + (aPlayer.isSneaking()? -1 : 1)) % 4;
- if(aFilterMode < 0){aFilterMode = 3;}
+ aCoverVariable ^= aFilterMode;
+ aFilterMode = (aFilterMode + (aPlayer.isSneaking()? -1 : 1)) % 8;
+ if (aFilterMode < 0) {
+ aFilterMode = 7;
+ }
switch(aFilterMode) {
- case 0: GT_Utility.sendChatToPlayer(aPlayer, trans("043", "Allow input, no output")); break;
- case 1: GT_Utility.sendChatToPlayer(aPlayer, trans("044", "Deny input, no output")); break;
- case 2: GT_Utility.sendChatToPlayer(aPlayer, trans("045", "Allow input, permit any output")); break;
- case 3: GT_Utility.sendChatToPlayer(aPlayer, trans("046", "Deny input, permit any output")); break;
+ case FILTER_INPUT_DENY_OUTPUT: GT_Utility.sendChatToPlayer(aPlayer, trans("043", "Filter input, Deny output")); break;
+ case INVERT_INPUT_DENY_OUTPUT: GT_Utility.sendChatToPlayer(aPlayer, trans("044", "Invert input, Deny output")); break;
+ case FILTER_INPUT_ANY_OUTPUT: GT_Utility.sendChatToPlayer(aPlayer, trans("045", "Filter input, Permit any output")); break;
+ case INVERT_INPUT_ANY_OUTPUT: GT_Utility.sendChatToPlayer(aPlayer, trans("046", "Invert input, Permit any output")); break;
+ case DENY_INPUT_FILTER_OUTPUT: GT_Utility.sendChatToPlayer(aPlayer, trans("219", "Deny input, Filter output")); break;
+ case DENY_INPUT_INVERT_OUTPUT: GT_Utility.sendChatToPlayer(aPlayer, trans("220", "Deny input, Invert output")); break;
+ case ANY_INPUT_FILTER_OUTPUT: GT_Utility.sendChatToPlayer(aPlayer, trans("221", "Permit any input, Filter output")); break;
+ case ANY_INPUT_INVERT_OUTPUT: GT_Utility.sendChatToPlayer(aPlayer, trans("222", "Permit any input, Invert output")); break;
}
aCoverVariable|=aFilterMode;
return aCoverVariable;
}
-
+
public boolean onCoverRightclick(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity, EntityPlayer aPlayer, float aX, float aY, float aZ) {
- //System.out.println("rightclick");
- if (((aX > 0.375D) && (aX < 0.625D)) || ((aSide > 3) && (((aY > 0.375D) && (aY < 0.625D)) || ((aSide < 2) && (((aZ > 0.375D) && (aZ < 0.625D)) || (aSide == 2) || (aSide == 3)))))) {
+ //System.out.println("rightclick");
+ if (
+ ((aX > 0.375D) && (aX < 0.625D)) ||
+ ((aSide > 3) && ((aY > 0.375D) && (aY < 0.625D))) ||
+ ((aSide < 2) && ((aZ > 0.375D) && (aZ < 0.625D))) ||
+ (aSide == 2) ||
+ (aSide == 3)
+ ) {
ItemStack tStack = aPlayer.inventory.getCurrentItem();
- if(tStack!=null){
+ if (tStack == null) return true;
+
FluidStack tFluid = FluidContainerRegistry.getFluidForFilledItem(tStack);
- if(tFluid!=null){
- //System.out.println(tFluid.getLocalizedName()+" "+tFluid.getFluidID());
+ if (tFluid != null) {
int aFluid = tFluid.getFluidID();
aCoverVariable = (aCoverVariable & 7) | (aFluid << 3);
aTileEntity.setCoverDataAtSide(aSide, aCoverVariable);
- FluidStack sFluid = new FluidStack(FluidRegistry.getFluid(aFluid),1000);
+ FluidStack sFluid = new FluidStack(FluidRegistry.getFluid(aFluid), 1000);
GT_Utility.sendChatToPlayer(aPlayer, trans("047", "Filter Fluid: ") + sFluid.getLocalizedName());
- }else if(tStack.getItem() instanceof IFluidContainerItem){
- IFluidContainerItem tContainer = (IFluidContainerItem)tStack.getItem();
- if(tContainer.getFluid(tStack) != null) {
+ } else if (tStack.getItem() instanceof IFluidContainerItem) {
+ IFluidContainerItem tContainer = (IFluidContainerItem) tStack.getItem();
+ if (tContainer.getFluid(tStack) != null) {
int aFluid = tContainer.getFluid(tStack).getFluidID();
aCoverVariable = (aCoverVariable & 7) | (aFluid << 3);
aTileEntity.setCoverDataAtSide(aSide, aCoverVariable);
- FluidStack sFluid = new FluidStack(FluidRegistry.getFluid(aFluid),1000);
+ FluidStack sFluid = new FluidStack(FluidRegistry.getFluid(aFluid), 1000);
GT_Utility.sendChatToPlayer(aPlayer, trans("047", "Filter Fluid: ") + sFluid.getLocalizedName());
}
}
- }
return true;
}
return false;
@@ -61,18 +82,38 @@ public class GT_Cover_Fluidfilter
@Override
public boolean letsFluidIn(byte aSide, int aCoverID, int aCoverVariable, Fluid aFluid, ICoverable aTileEntity) {
- if(aFluid==null){
- return true;
- }
+ if (aFluid == null) return true;
+
int aFilterMode = aCoverVariable & 7;
int aFilterFluid = aCoverVariable >>> 3;
- return aFluid.getID() == aFilterFluid ? aFilterMode == 0 || aFilterMode == 2 : aFilterMode == 1 || aFilterMode == 3;
+
+ if (aFilterMode == DENY_INPUT_FILTER_OUTPUT || aFilterMode == DENY_INPUT_INVERT_OUTPUT)
+ return false;
+ else if (aFilterMode == ANY_INPUT_FILTER_OUTPUT || aFilterMode == ANY_INPUT_INVERT_OUTPUT)
+ return true;
+ else if (aFluid.getID() == aFilterFluid)
+ return aFilterMode == FILTER_INPUT_DENY_OUTPUT || aFilterMode == FILTER_INPUT_ANY_OUTPUT;
+ else
+ return aFilterMode == INVERT_INPUT_DENY_OUTPUT || aFilterMode == INVERT_INPUT_ANY_OUTPUT;
+
}
@Override
public boolean letsFluidOut(byte aSide, int aCoverID, int aCoverVariable, Fluid aFluid, ICoverable aTileEntity) {
+ if (aFluid == null) return true;
+
int aFilterMode = aCoverVariable & 7;
- return aFilterMode != 0 && aFilterMode != 1;
+ int aFilterFluid = aCoverVariable >>> 3;
+
+ if (aFilterMode == FILTER_INPUT_DENY_OUTPUT || aFilterMode == INVERT_INPUT_DENY_OUTPUT)
+ return false;
+ else if (aFilterMode == FILTER_INPUT_ANY_OUTPUT || aFilterMode == INVERT_INPUT_ANY_OUTPUT)
+ return true;
+ else if (aFluid.getID() == aFilterFluid)
+ return aFilterMode == DENY_INPUT_FILTER_OUTPUT || aFilterMode == ANY_INPUT_FILTER_OUTPUT;
+ else
+ return aFilterMode == DENY_INPUT_INVERT_OUTPUT || aFilterMode == ANY_INPUT_INVERT_OUTPUT;
+
}
public boolean alwaysLookConnected(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {