diff options
author | Jason Mitchell <mitchej@gmail.com> | 2018-09-03 00:57:51 -0700 |
---|---|---|
committer | Jason Mitchell <mitchej@gmail.com> | 2018-09-03 00:57:51 -0700 |
commit | 1698e57f729efb52e2b98e865a9671f0b50a5b2e (patch) | |
tree | 09b81c4c89478b2e392f7b482eedb064ac520eee /src/main/java/gregtech/common | |
parent | 9d530773035ad21cffb1f558fa8309a57021c3b2 (diff) | |
download | GT5-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.java | 10 | ||||
-rw-r--r-- | src/main/java/gregtech/common/covers/GT_Cover_Fluidfilter.java | 93 |
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) { |