Pipe/cable overhaul; Fluidfilter fix, GC Energy Compat & Misc fixes (#1495)

* Pipe overhaul & Fluidfilter fix

* GC Energy Compat & Misc fixes

* Only connect on the server side.

* Work with subclassed GT cables (ie: gt++ cables) & provide default implementation for new methods

* Better GC Compat (shouldn't require GC loaded to work now)

* Bump source compat to 1.8 to support default methods.  (Other option is to remove the default methods, but then it's less backwards compatiable)

* Remove java 1.8 features
This commit is contained in:
Jason Mitchell 2019-04-27 14:35:26 -07:00 committed by Blood-Asp
parent cf57e09437
commit 73ee102b63
18 changed files with 724 additions and 396 deletions

View file

@ -62,6 +62,11 @@ repositories {
name 'tterrag Repo'
url "http://maven.tterrag.com"
}
maven { // TConstruct
name 'DVS1 Maven FS'
url 'http://dvs1.progwml6.com/files/maven'
}
maven { // AppleCore
url "http://www.ryanliptak.com/maven/"
}
@ -96,12 +101,16 @@ repositories {
}
dependencies {
// compile fileTree(dir: 'libs', include: '*.jar')
compile "tconstruct:TConstruct:${config.minecraft.version}-${config.tconstruct.version}:deobf"
provided ("appeng:appliedenergistics2:${config.ae2.version}:dev") {
exclude module: '*'
}
provided "codechicken:CodeChickenLib:${config.minecraft.version}-${config.codechickenlib.version}:dev"
provided "codechicken:CodeChickenCore:${config.minecraft.version}-${config.codechickencore.version}:dev"
provided "codechicken:NotEnoughItems:${config.minecraft.version}-${config.nei.version}:dev"
provided "codechicken:Translocator:${config.minecraft.version}-${config.translocators.version}:dev"
provided "net.industrial-craft:industrialcraft-2:${config.ic2.version}:dev"
provided "net.sengir.forestry:forestry_${config.minecraft.version}:${config.forestry.version}:dev"
provided "applecore:AppleCore:${config.applecore.version}:api"
@ -116,6 +125,10 @@ dependencies {
provided name: 'IC2NuclearControl', version: config.nc.version, ext: 'jar'
provided name: 'ImmersiveEngineering', version: config.immeng.version, ext: 'jar'
provided name: 'magneticraft', version: config.magneticraft.version, ext: 'jar'
// compile files("libs/Galacticraft-API-1.7-${config.gc.version}.jar")
// compile files("libs/GalacticraftCore-Dev-${config.gc.version}.jar")
provided name: "Galacticraft-API", version: config.gc.version, ext: 'jar'
provided name: "GalacticraftCore-Dev", version: config.gc.version, ext: 'jar'
}
processResources

View file

@ -15,6 +15,7 @@ enderio.cf=2219/296
enderio.version=1.7.10-2.3.0.417_beta
enderiocore.version=1.7.10-0.1.0.25_beta
forestry.version=4.2.10.58
gc.version=1.7-3.0.12.504
ic2.version=2.2.790-experimental
nei.version=1.0.3.57
railcraft.cf=2219/321
@ -25,3 +26,5 @@ immeng.cf=2299/20
immeng.version=0.7.7-deobf
magneticraft.cf=2276/268
magneticraft.version=0.6.1-final
tconstruct.version=1.8.4.build951
translocators.version=1.1.2.16

View file

@ -59,7 +59,7 @@ import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@Mod(modid = "gregtech", name = "GregTech", version = "MC1710", useMetadata = false, dependencies = "required-after:IC2; after:Forestry; after:PFAAGeologica; after:Thaumcraft; after:Railcraft; after:appliedenergistics2; after:ThermalExpansion; after:TwilightForest; after:harvestcraft; after:magicalcrops; after:BuildCraft|Transport; after:BuildCraft|Silicon; after:BuildCraft|Factory; after:BuildCraft|Energy; after:BuildCraft|Core; after:BuildCraft|Builders; after:GalacticraftCore; after:GalacticraftMars; after:GalacticraftPlanets; after:ThermalExpansion|Transport; after:ThermalExpansion|Energy; after:ThermalExpansion|Factory; after:RedPowerCore; after:RedPowerBase; after:RedPowerMachine; after:RedPowerCompat; after:RedPowerWiring; after:RedPowerLogic; after:RedPowerLighting; after:RedPowerWorld; after:RedPowerControl; after:UndergroundBiomes;")
@Mod(modid = "gregtech", name = "GregTech", version = "MC1710", useMetadata = false, dependencies = "required-after:IC2; after:Forestry; after:PFAAGeologica; after:Thaumcraft; after:Railcraft; after:appliedenergistics2; after:ThermalExpansion; after:TwilightForest; after:harvestcraft; after:magicalcrops; after:BuildCraft|Transport; after:BuildCraft|Silicon; after:BuildCraft|Factory; after:BuildCraft|Energy; after:BuildCraft|Core; after:BuildCraft|Builders; after:GalacticraftCore; after:GalacticraftMars; after:GalacticraftPlanets; after:ThermalExpansion|Transport; after:ThermalExpansion|Energy; after:ThermalExpansion|Factory; after:RedPowerCore; after:RedPowerBase; after:RedPowerMachine; after:RedPowerCompat; after:RedPowerWiring; after:RedPowerLogic; after:RedPowerLighting; after:RedPowerWorld; after:RedPowerControl; after:UndergroundBiomes; after:TConstruct; after:Translocator;")
public class GT_Mod implements IGT_Mod {
public static final int VERSION = 509, SUBVERSION = 31;
public static final int TOTAL_VERSION = calculateTotalGTVersion(VERSION, SUBVERSION);
@ -133,7 +133,10 @@ public class GT_Mod implements IGT_Mod {
GregTech_API.mIC2Classic = Loader.isModLoaded("IC2-Classic-Spmod");
GregTech_API.mMagneticraft = Loader.isModLoaded("Magneticraft");
GregTech_API.mImmersiveEngineering = Loader.isModLoaded("ImmersiveEngineering");
GregTech_API.mGTPlusPlus = Loader.isModLoaded("miscutils");
GregTech_API.mGTPlusPlus = Loader.isModLoaded("miscutils");
GregTech_API.mTranslocator = Loader.isModLoaded("Translocator");
GregTech_API.mTConstruct = Loader.isModLoaded("TConstruct");
GregTech_API.mGalacticraft = Loader.isModLoaded("GalacticraftCore");
GT_Log.mLogFile = new File(aEvent.getModConfigurationDirectory().getParentFile(), "logs/GregTech.log");
if (!GT_Log.mLogFile.exists()) {
try {
@ -180,6 +183,9 @@ public class GT_Mod implements IGT_Mod {
} catch (Throwable e) {
}
gregtechproxy.onPreLoad();
GT_Log.out.println("GT_Mod: Are you there Translocator? " + GregTech_API.mTranslocator);
GT_Log.out.println("GT_Mod: Are you there TConstruct? " + GregTech_API.mTConstruct);
GT_Log.out.println("GT_Mod: Are you there GalacticraftCore? " + GregTech_API.mGalacticraft);
GT_Log.out.println("GT_Mod: Setting Configs");
GT_Values.D1 = tMainConfig.get(aTextGeneral, "Debug", false).getBoolean(false);
@ -286,7 +292,8 @@ public class GT_Mod implements IGT_Mod {
gregtechproxy.enableGCOres = GregTech_API.sWorldgenFile.get("general", "enableGCOres", gregtechproxy.enableGCOres);
gregtechproxy.enableUBOres = GregTech_API.sWorldgenFile.get("general", "enableUBOres", gregtechproxy.enableUBOres);
gregtechproxy.gt6Pipe = tMainConfig.get("general", "GT6StyledPipesConnection", true).getBoolean(true);
gregtechproxy.gt6Cable = tMainConfig.get("general", "GT6StyledWiresConnection", false).getBoolean(false);
gregtechproxy.gt6Cable = tMainConfig.get("general", "GT6StyledWiresConnection", true).getBoolean(true);
gregtechproxy.ic2EnergySourceCompat = tMainConfig.get("general", "Ic2EnergySourceCompat", true).getBoolean(true);
gregtechproxy.costlyCableConnection = tMainConfig.get("general", "CableConnectionRequiresSolderingMaterial", false).getBoolean(false);
GT_LanguageManager.i18nPlaceholder = tMainConfig.get("general", "UsePlaceholderForMaterialNamesInLangFile", true).getBoolean(true);

View file

@ -204,6 +204,9 @@ public class GregTech_API {
public static boolean mMagneticraft = false;
public static boolean mImmersiveEngineering = false;
public static boolean mGTPlusPlus = false;
public static boolean mTranslocator = false;
public static boolean mTConstruct = false;
public static boolean mGalacticraft = false;
public static boolean mUseOnlyGoodSolderingMaterials = false;

View file

@ -3,7 +3,11 @@ package gregtech.api.interfaces.metatileentity;
import net.minecraft.tileentity.TileEntity;
import java.util.ArrayList;
import java.util.HashSet;
public interface IMetaTileEntityCable extends IMetaTileEntity {
@Deprecated
public long transferElectricity(byte aSide, long aVoltage, long aAmperage, ArrayList<TileEntity> aAlreadyPassedTileEntityList);
public long transferElectricity(byte aSide, long aVoltage, long aAmperage, HashSet<TileEntity> aAlreadyPassedSet);
}

View file

@ -35,16 +35,13 @@ public interface IEnergyConnected extends IColoredTileEntity, IHasWorldObjectAnd
* Sided Energy Input
*/
public boolean inputEnergyFrom(byte aSide);
public boolean inputEnergyFrom(byte aSide, boolean waitForActive);
/**
* Sided Energy Output
*/
public boolean outputsEnergyTo(byte aSide);
/**
* Are we ready for energy state?
*/
public boolean energyStateReady();
public boolean outputsEnergyTo(byte aSide, boolean waitForActive);
/**
* Utility for the Network
@ -67,10 +64,6 @@ public interface IEnergyConnected extends IColoredTileEntity, IHasWorldObjectAnd
if (tColor >= 0 && tColor != aEmitter.getColorization()) continue;
}
rUsedAmperes += ((IEnergyConnected) tTileEntity).injectEnergyUnits(j, aVoltage, aAmperage - rUsedAmperes);
// } else if (tTileEntity instanceof IEnergySink) {
// if (((IEnergySink)tTileEntity).acceptsEnergyFrom((TileEntity)aEmitter, ForgeDirection.getOrientation(j))) {
// while (aAmperage > rUsedAmperes && ((IEnergySink)tTileEntity).demandedEnergyUnits() > 0 && ((IEnergySink)tTileEntity).injectEnergyUnits(ForgeDirection.getOrientation(j), aVoltage) < aVoltage) rUsedAmperes++;
// }
} else if (tTileEntity instanceof IEnergySink) {
if (((IEnergySink) tTileEntity).acceptsEnergyFrom((TileEntity) aEmitter, ForgeDirection.getOrientation(j))) {
while (aAmperage > rUsedAmperes && ((IEnergySink) tTileEntity).getDemandedEnergy() > 0 && ((IEnergySink) tTileEntity).injectEnergy(ForgeDirection.getOrientation(j), aVoltage, aVoltage) < aVoltage)

View file

@ -9,7 +9,11 @@ import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.interfaces.tileentity.IPipeRenderedTileEntity;
import gregtech.api.net.GT_Packet_TileEntity;
import gregtech.api.objects.GT_ItemStack;
import gregtech.api.util.*;
import gregtech.api.util.GT_CoverBehavior;
import gregtech.api.util.GT_Log;
import gregtech.api.util.GT_ModHandler;
import gregtech.api.util.GT_OreDictUnificator;
import gregtech.api.util.GT_Utility;
import net.minecraft.block.Block;
import net.minecraft.entity.Entity;
import net.minecraft.entity.item.EntityItem;
@ -25,6 +29,7 @@ import net.minecraftforge.common.util.ForgeDirection;
import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.FluidTankInfo;
import net.minecraftforge.fluids.IFluidHandler;
import java.util.ArrayList;
import java.util.Arrays;
@ -44,6 +49,7 @@ public class BaseMetaPipeEntity extends BaseTileEntity implements IGregTechTileE
private byte[] mSidedRedstone = new byte[]{0, 0, 0, 0, 0, 0};
private int[] mCoverSides = new int[]{0, 0, 0, 0, 0, 0}, mCoverData = new int[]{0, 0, 0, 0, 0, 0}, mTimeStatistics = new int[GregTech_API.TICKS_FOR_LAG_AVERAGING];
private boolean mInventoryChanged = false, mWorkUpdate = false, mWorks = true, mNeedsUpdate = true, mNeedsBlockUpdate = true, mSendClientData = false;
private boolean mCheckConnections = false;
private byte mColor = 0, oColor = 0, mStrongRedstone = 0, oRedstoneData = 63, oTextureData = 0, oUpdateData = 0, mLagWarningCount = 0;
private int oX = 0, oY = 0, oZ = 0, mTimeStatisticsIndex = 0;
private short mID = 0;
@ -635,11 +641,21 @@ public class BaseMetaPipeEntity extends BaseTileEntity implements IGregTechTileE
return false;
}
@Override
public boolean inputEnergyFrom(byte aSide, boolean waitForActive) {
return false;
}
@Override
public boolean outputsEnergyTo(byte aSide) {
return false;
}
@Override
public boolean outputsEnergyTo(byte aSide, boolean waitForActive) {
return false;
}
@Override
public long getOutputAmperage() {
return 0;
@ -1177,7 +1193,9 @@ public class BaseMetaPipeEntity extends BaseTileEntity implements IGregTechTileE
if (aSide == ForgeDirection.UNKNOWN)
return true;
if (!mMetaTileEntity.isConnectedAtSide((byte) aSide.ordinal()))
IFluidHandler tTileEntity = getITankContainerAtSide((byte) aSide.ordinal());
// Only require a connection if there's something to connect to - Allows fluid cells & buckets to interact with the pipe
if (tTileEntity != null && !mMetaTileEntity.isConnectedAtSide((byte) aSide.ordinal()))
return false;
if(isFill && mMetaTileEntity.isLiquidInput((byte) aSide.ordinal())
@ -1275,8 +1293,9 @@ public class BaseMetaPipeEntity extends BaseTileEntity implements IGregTechTileE
@Override
public byte setColorization(byte aColor) {
if (aColor > 15 || aColor < -1) aColor = -1;
mColor = (byte) (aColor + 1);
if (canAccessData()) mMetaTileEntity.onColorChangeServer(aColor);
return mColor = (byte) (aColor + 1);
return mColor;
}
@Override
@ -1334,6 +1353,18 @@ public class BaseMetaPipeEntity extends BaseTileEntity implements IGregTechTileE
mInventoryChanged = true;
}
public void onNeighborBlockChange(int aX, int aY, int aZ) {
if (canAccessData()) {
final IMetaTileEntity meta = getMetaTileEntity();
if (meta instanceof MetaPipeEntity) {
// Trigger a checking of connections in case someone placed down a block that the pipe/wire shouldn't be connected to.
// However; don't do it immediately in case the world isn't finished loading
// (This caused issues with AE2 GTEU p2p connections.
((MetaPipeEntity) meta).setCheckConnections();
}
}
}
@Override
public int getLightOpacity() {
return mMetaTileEntity == null ? 0 : mMetaTileEntity.getLightOpacity();
@ -1353,9 +1384,4 @@ public class BaseMetaPipeEntity extends BaseTileEntity implements IGregTechTileE
public void onEntityCollidedWithBlock(World aWorld, int aX, int aY, int aZ, Entity collider) {
mMetaTileEntity.onEntityCollidedWithBlock(aWorld, aX, aY, aZ, collider);
}
@Override
public boolean energyStateReady() {
return true;
}
}

View file

@ -59,7 +59,6 @@ public class BaseMetaTileEntity extends BaseTileEntity implements IGregTechTileE
private byte[] mSidedRedstone = new byte[]{15, 15, 15, 15, 15, 15};
private int[] mCoverSides = new int[]{0, 0, 0, 0, 0, 0}, mCoverData = new int[]{0, 0, 0, 0, 0, 0}, mTimeStatistics = new int[GregTech_API.TICKS_FOR_LAG_AVERAGING];
private boolean mHasEnoughEnergy = true, mRunningThroughTick = false, mInputDisabled = false, mOutputDisabled = false, mMuffler = false, mLockUpgrade = false, mActive = false, mRedstone = false, mWorkUpdate = false, mSteamConverter = false, mInventoryChanged = false, mWorks = true, mNeedsUpdate = true, mNeedsBlockUpdate = true, mSendClientData = false, oRedstone = false;
private boolean mEnergyStateReady = false;
private byte mColor = 0, oColor = 0, mStrongRedstone = 0, oRedstoneData = 63, oTextureData = 0, oUpdateData = 0, oTexturePage=0, oLightValueClient = -1, oLightValue = -1, mLightValue = 0, mOtherUpgrades = 0, mFacing = 0, oFacing = 0, mWorkData = 0;
private int mDisplayErrorCode = 0, oX = 0, oY = 0, oZ = 0, mTimeStatisticsIndex = 0, mLagWarningCount = 0;
private short mID = 0;
@ -455,7 +454,6 @@ public class BaseMetaTileEntity extends BaseTileEntity implements IGregTechTileE
}
}
}
mEnergyStateReady = true;
}
if (!hasValidMetaTileEntity()) {
@ -971,15 +969,25 @@ public class BaseMetaTileEntity extends BaseTileEntity implements IGregTechTileE
@Override
public boolean inputEnergyFrom(byte aSide) {
return inputEnergyFrom(aSide, true);
}
@Override
public boolean inputEnergyFrom(byte aSide, boolean waitForActive) {
if (aSide == 6) return true;
if (isServerSide()) return (aSide >= 0 && aSide < 6 ? mActiveEUInputs[aSide] : false) && !mReleaseEnergy;
if (isServerSide() && waitForActive) return ((aSide >= 0 && aSide < 6) && mActiveEUInputs[aSide]) && !mReleaseEnergy;
return isEnergyInputSide(aSide);
}
@Override
public boolean outputsEnergyTo(byte aSide) {
return outputsEnergyTo(aSide, true);
}
@Override
public boolean outputsEnergyTo(byte aSide, boolean waitForActive) {
if (aSide == 6) return true;
if (isServerSide()) return (aSide >= 0 && aSide < 6 ? mActiveEUOutputs[aSide] : false) || mReleaseEnergy;
if (isServerSide() && waitForActive) return ((aSide >= 0 && aSide < 6) && mActiveEUOutputs[aSide]) || mReleaseEnergy;
return isEnergyOutputSide(aSide);
}
@ -1750,42 +1758,96 @@ public class BaseMetaTileEntity extends BaseTileEntity implements IGregTechTileE
@Override
public int fill(ForgeDirection aSide, FluidStack aFluid, boolean doFill) {
if (mTickTimer > 5 && canAccessData() && (mRunningThroughTick || !mInputDisabled) && (aSide == ForgeDirection.UNKNOWN || (mMetaTileEntity.isLiquidInput((byte) aSide.ordinal()) && getCoverBehaviorAtSide((byte) aSide.ordinal()).letsFluidIn((byte) aSide.ordinal(), getCoverIDAtSide((byte) aSide.ordinal()), getCoverDataAtSide((byte) aSide.ordinal()), aFluid == null ? null : aFluid.getFluid(), this))))
if (mTickTimer > 5 && canAccessData() &&
(mRunningThroughTick || !mInputDisabled) &&
(
aSide == ForgeDirection.UNKNOWN ||
(
mMetaTileEntity.isLiquidInput((byte) aSide.ordinal()) &&
getCoverBehaviorAtSide((byte) aSide.ordinal()).letsFluidIn((byte) aSide.ordinal(), getCoverIDAtSide((byte) aSide.ordinal()), getCoverDataAtSide((byte) aSide.ordinal()), aFluid == null ? null : aFluid.getFluid(), this)
)
)
)
return mMetaTileEntity.fill(aSide, aFluid, doFill);
return 0;
}
@Override
public FluidStack drain(ForgeDirection aSide, int maxDrain, boolean doDrain) {
if (mTickTimer > 5 && canAccessData() && (mRunningThroughTick || !mOutputDisabled) && (aSide == ForgeDirection.UNKNOWN || (mMetaTileEntity.isLiquidOutput((byte) aSide.ordinal()) && getCoverBehaviorAtSide((byte) aSide.ordinal()).letsFluidOut((byte) aSide.ordinal(), getCoverIDAtSide((byte) aSide.ordinal()), getCoverDataAtSide((byte) aSide.ordinal()), mMetaTileEntity.getFluid() == null ? null : mMetaTileEntity.getFluid().getFluid(), this))))
if (mTickTimer > 5 && canAccessData() &&
(mRunningThroughTick || !mOutputDisabled) &&
(
aSide == ForgeDirection.UNKNOWN ||
(
mMetaTileEntity.isLiquidOutput((byte) aSide.ordinal()) &&
getCoverBehaviorAtSide((byte) aSide.ordinal()).letsFluidOut((byte) aSide.ordinal(), getCoverIDAtSide((byte) aSide.ordinal()), getCoverDataAtSide((byte) aSide.ordinal()), mMetaTileEntity.getFluid() == null ? null : mMetaTileEntity.getFluid().getFluid(), this)
)
)
)
return mMetaTileEntity.drain(aSide, maxDrain, doDrain);
return null;
}
@Override
public FluidStack drain(ForgeDirection aSide, FluidStack aFluid, boolean doDrain) {
if (mTickTimer > 5 && canAccessData() && (mRunningThroughTick || !mOutputDisabled) && (aSide == ForgeDirection.UNKNOWN || (mMetaTileEntity.isLiquidOutput((byte) aSide.ordinal()) && getCoverBehaviorAtSide((byte) aSide.ordinal()).letsFluidOut((byte) aSide.ordinal(), getCoverIDAtSide((byte) aSide.ordinal()), getCoverDataAtSide((byte) aSide.ordinal()), aFluid == null ? null : aFluid.getFluid(), this))))
if (mTickTimer > 5 && canAccessData() &&
(mRunningThroughTick || !mOutputDisabled) &&
(
aSide == ForgeDirection.UNKNOWN ||
(
mMetaTileEntity.isLiquidOutput((byte) aSide.ordinal()) &&
getCoverBehaviorAtSide((byte) aSide.ordinal()).letsFluidOut((byte) aSide.ordinal(), getCoverIDAtSide((byte) aSide.ordinal()), getCoverDataAtSide((byte) aSide.ordinal()), aFluid == null ? null : aFluid.getFluid(), this)
)
)
)
return mMetaTileEntity.drain(aSide, aFluid, doDrain);
return null;
}
@Override
public boolean canFill(ForgeDirection aSide, Fluid aFluid) {
if (mTickTimer > 5 && canAccessData() && (mRunningThroughTick || !mInputDisabled) && (aSide == ForgeDirection.UNKNOWN || (mMetaTileEntity.isLiquidInput((byte) aSide.ordinal()) && getCoverBehaviorAtSide((byte) aSide.ordinal()).letsFluidIn((byte) aSide.ordinal(), getCoverIDAtSide((byte) aSide.ordinal()), getCoverDataAtSide((byte) aSide.ordinal()), aFluid, this))))
if (mTickTimer > 5 && canAccessData() &&
(mRunningThroughTick || !mInputDisabled) &&
(
aSide == ForgeDirection.UNKNOWN ||
(
mMetaTileEntity.isLiquidInput((byte) aSide.ordinal()) &&
getCoverBehaviorAtSide((byte) aSide.ordinal()).letsFluidIn((byte) aSide.ordinal(), getCoverIDAtSide((byte) aSide.ordinal()), getCoverDataAtSide((byte) aSide.ordinal()), aFluid, this)
)
)
)
return mMetaTileEntity.canFill(aSide, aFluid);
return false;
}
@Override
public boolean canDrain(ForgeDirection aSide, Fluid aFluid) {
if (mTickTimer > 5 && canAccessData() && (mRunningThroughTick || !mOutputDisabled) && (aSide == ForgeDirection.UNKNOWN || (mMetaTileEntity.isLiquidOutput((byte) aSide.ordinal()) && getCoverBehaviorAtSide((byte) aSide.ordinal()).letsFluidOut((byte) aSide.ordinal(), getCoverIDAtSide((byte) aSide.ordinal()), getCoverDataAtSide((byte) aSide.ordinal()), aFluid, this))))
if (mTickTimer > 5 && canAccessData() &&
(mRunningThroughTick || !mOutputDisabled) &&
(
aSide == ForgeDirection.UNKNOWN ||
(
mMetaTileEntity.isLiquidOutput((byte) aSide.ordinal()) &&
getCoverBehaviorAtSide((byte) aSide.ordinal()).letsFluidOut((byte) aSide.ordinal(), getCoverIDAtSide((byte) aSide.ordinal()), getCoverDataAtSide((byte) aSide.ordinal()), aFluid, this)
)
)
)
return mMetaTileEntity.canDrain(aSide, aFluid);
return false;
}
@Override
public FluidTankInfo[] getTankInfo(ForgeDirection aSide) {
if (canAccessData() && (aSide == ForgeDirection.UNKNOWN || (mMetaTileEntity.isLiquidInput((byte) aSide.ordinal()) && getCoverBehaviorAtSide((byte) aSide.ordinal()).letsFluidIn((byte) aSide.ordinal(), getCoverIDAtSide((byte) aSide.ordinal()), getCoverDataAtSide((byte) aSide.ordinal()), null, this)) || (mMetaTileEntity.isLiquidOutput((byte) aSide.ordinal()) && getCoverBehaviorAtSide((byte) aSide.ordinal()).letsFluidOut((byte) aSide.ordinal(), getCoverIDAtSide((byte) aSide.ordinal()), getCoverDataAtSide((byte) aSide.ordinal()), null, this))))
if (canAccessData() &&
(
aSide == ForgeDirection.UNKNOWN ||
(
mMetaTileEntity.isLiquidInput((byte) aSide.ordinal()) &&
getCoverBehaviorAtSide((byte) aSide.ordinal()).letsFluidIn((byte) aSide.ordinal(), getCoverIDAtSide((byte) aSide.ordinal()), getCoverDataAtSide((byte) aSide.ordinal()), null, this)) || (mMetaTileEntity.isLiquidOutput((byte) aSide.ordinal()) &&
getCoverBehaviorAtSide((byte) aSide.ordinal()).letsFluidOut((byte) aSide.ordinal(), getCoverIDAtSide((byte) aSide.ordinal()), getCoverDataAtSide((byte) aSide.ordinal()), null, this)
)
)
)
return mMetaTileEntity.getTankInfo(aSide);
return new FluidTankInfo[]{};
}
@ -1922,8 +1984,9 @@ public class BaseMetaTileEntity extends BaseTileEntity implements IGregTechTileE
@Override
public byte setColorization(byte aColor) {
if (aColor > 15 || aColor < -1) aColor = -1;
mColor = (byte) (aColor + 1);
if (canAccessData()) mMetaTileEntity.onColorChangeServer(aColor);
return mColor = (byte) (aColor + 1);
return mColor;
}
@Override
@ -2023,8 +2086,4 @@ public class BaseMetaTileEntity extends BaseTileEntity implements IGregTechTileE
return slotIndex + indexShift;
}
@Override
public boolean energyStateReady() {
return isClientSide() || mEnergyStateReady;
}
}

View file

@ -6,9 +6,12 @@ import gregtech.GT_Mod;
import gregtech.api.GregTech_API;
import gregtech.api.interfaces.metatileentity.IConnectable;
import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
import gregtech.api.interfaces.tileentity.IColoredTileEntity;
import gregtech.api.interfaces.tileentity.ICoverable;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.objects.GT_ItemStack;
import gregtech.api.util.GT_Config;
import gregtech.api.util.GT_CoverBehavior;
import gregtech.api.util.GT_LanguageManager;
import gregtech.api.util.GT_Utility;
import net.minecraft.block.Block;
@ -21,6 +24,7 @@ import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
@ -56,6 +60,7 @@ public abstract class MetaPipeEntity implements IMetaTileEntity, IConnectable {
* This variable tells, which directions the Block is connected to. It is a Bitmask.
*/
public byte mConnections = 0;
protected boolean mCheckConnections = false;
/**
* Only assigned for the MetaTileEntity in the List! Also only used to get the localized Name for the ItemStack and for getInvName.
*/
@ -326,12 +331,12 @@ public abstract class MetaPipeEntity implements IMetaTileEntity, IConnectable {
@Override
public boolean isLiquidInput(byte aSide) {
return true;
return false;
}
@Override
public boolean isLiquidOutput(byte aSide) {
return true;
return false;
}
/**
@ -635,12 +640,16 @@ public abstract class MetaPipeEntity implements IMetaTileEntity, IConnectable {
@Override
public void onColorChangeServer(byte aColor) {
//
setCheckConnections();
}
@Override
public void onColorChangeClient(byte aColor) {
//
// Do nothing apparently
}
public void setCheckConnections() {
mCheckConnections = true;
}
public long injectEnergyUnits(byte aSide, long aVoltage, long aAmperage) {
@ -715,18 +724,80 @@ public abstract class MetaPipeEntity implements IMetaTileEntity, IConnectable {
return GT_LanguageManager.addStringLocalization("Interaction_DESCRIPTION_Index_"+aKey, aEnglish, false);
}
private boolean connectableColor(TileEntity tTileEntity) {
// Determine if two entities are connectable based on their colorization:
// Uncolored can connect to anything
// If both are colored they must be the same color to connect.
if (tTileEntity instanceof IColoredTileEntity) {
if (getBaseMetaTileEntity().getColorization() >= 0) {
byte tColor = ((IColoredTileEntity) tTileEntity).getColorization();
if (tColor >= 0 && tColor != getBaseMetaTileEntity().getColorization()) return false;
}
}
return true;
}
@Override
public int connect(byte aSide) {
if (aSide >= 6) return 0;
mConnections |= (1 << aSide);
byte tSide = GT_Utility.getOppositeSide(aSide);
IGregTechTileEntity tTileEntity = getBaseMetaTileEntity().getIGregTechTileEntityAtSide(aSide);
IMetaTileEntity tPipe = tTileEntity instanceof IGregTechTileEntity ? ((IGregTechTileEntity) tTileEntity).getMetaTileEntity() : null;
if (this.getClass().isInstance(tPipe) && !((MetaPipeEntity) tPipe).isConnectedAtSide(tSide))
((MetaPipeEntity) tPipe).connect(tSide);
return 1;
final byte tSide = GT_Utility.getOppositeSide(aSide);
final IGregTechTileEntity baseMetaTile = getBaseMetaTileEntity();
if (baseMetaTile == null || !baseMetaTile.isServerSide()) return 0;
final GT_CoverBehavior coverBehavior = baseMetaTile.getCoverBehaviorAtSide(aSide);
final int coverId = baseMetaTile.getCoverIDAtSide(aSide),
coverData = baseMetaTile.getCoverDataAtSide(aSide);
boolean alwaysLookConnected = coverBehavior.alwaysLookConnected(aSide, coverId, coverData, baseMetaTile);
boolean letsIn = letsIn(coverBehavior, aSide, coverId, coverData, baseMetaTile);
boolean letsOut = letsOut(coverBehavior, aSide, coverId, coverData, baseMetaTile);
// Careful - tTileEntity might be null, and that's ok -- so handle it
TileEntity tTileEntity = baseMetaTile.getTileEntityAtSide(aSide);
if (!connectableColor(tTileEntity)) return 0;
if ((alwaysLookConnected || letsIn || letsOut)) {
// Are we trying to connect to a pipe? let's do it!
IMetaTileEntity tPipe = tTileEntity instanceof IGregTechTileEntity ? ((IGregTechTileEntity) tTileEntity).getMetaTileEntity() : null;
if (getClass().isInstance(tPipe) || (tPipe != null && tPipe.getClass().isInstance(this))) {
connectAtSide(aSide);
if (!((MetaPipeEntity) tPipe).isConnectedAtSide(tSide)) {
// Make sure pipes all get together -- connect back to us if we're connecting to a pipe
((MetaPipeEntity) tPipe).connect(tSide);
}
return 1;
}
else if((getGT6StyleConnection() && baseMetaTile.getAirAtSide(aSide)) || canConnect(aSide, tTileEntity)) {
// Allow open connections to Air, if the GT6 style pipe/cables are enabled, so that it'll connect to the next block placed down next to it
connectAtSide(aSide);
return 1;
}
if (!baseMetaTile.getWorld().getChunkProvider().chunkExists(baseMetaTile.getOffsetX(aSide, 1) >> 4, baseMetaTile.getOffsetZ(aSide, 1) >> 4)) {
// Target chunk unloaded
return -1;
}
}
return 0;
}
protected void checkConnections() {
// Verify connections around us. If GT6 style cables are not enabled then revert to old behavior and try
// connecting to everything around us
for (byte aSide = 0; aSide < 6; aSide++) {
if ((!getGT6StyleConnection() || isConnectedAtSide(aSide)) && connect(aSide) == 0) {
disconnect(aSide);
}
}
mCheckConnections = false;
}
private void connectAtSide(byte aSide) {
mConnections |= (1 << aSide);
}
@Override
public void disconnect(byte aSide) {
if (aSide >= 6) return;
@ -734,12 +805,18 @@ public abstract class MetaPipeEntity implements IMetaTileEntity, IConnectable {
byte tSide = GT_Utility.getOppositeSide(aSide);
IGregTechTileEntity tTileEntity = getBaseMetaTileEntity().getIGregTechTileEntityAtSide(aSide);
IMetaTileEntity tPipe = tTileEntity == null ? null : tTileEntity.getMetaTileEntity();
if (this.getClass().isInstance(tPipe) && (((MetaPipeEntity) tPipe).mConnections & (1 << tSide)) != 0)
if ((this.getClass().isInstance(tPipe) || (tPipe != null && tPipe.getClass().isInstance(this))) && ((MetaPipeEntity) tPipe).isConnectedAtSide(tSide))
((MetaPipeEntity) tPipe).disconnect(tSide);
}
@Override
public boolean isConnectedAtSide(int aSide) {
return (mConnections & (1 << aSide)) != 0;
}
public boolean letsIn(GT_CoverBehavior coverBehavior, byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { return false; }
public boolean letsOut(GT_CoverBehavior coverBehavior, byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { return false; }
public boolean canConnect(byte aSide, TileEntity tTileEntity) { return false; }
public boolean getGT6StyleConnection() { return false; }
}

View file

@ -832,12 +832,20 @@ public abstract class MetaTileEntity implements IMetaTileEntity {
@Override
public void onColorChangeServer(byte aColor) {
//
final IGregTechTileEntity meta = getBaseMetaTileEntity();
final int aX = meta.getXCoord(), aY = meta.getYCoord(), aZ = meta.getZCoord();
for (byte aSide = 0; aSide < 6 ; aSide++ ) {
// Flag surrounding pipes/cables to revaluate their connection with us if we got painted
final TileEntity tTileEntity = meta.getTileEntityAtSide(aSide);
if ((tTileEntity instanceof BaseMetaPipeEntity)) {
((BaseMetaPipeEntity) tTileEntity).onNeighborBlockChange(aX, aY, aZ);
}
}
}
@Override
public void onColorChangeClient(byte aColor) {
//
// Do nothing apparently
}
@Override

View file

@ -1,8 +1,8 @@
package gregtech.api.metatileentity.implementations;
import cofh.api.energy.IEnergyReceiver;
import com.google.common.collect.Sets;
import gregtech.GT_Mod;
import static gregtech.api.enums.GT_Values.D1;
import gregtech.api.GregTech_API;
import gregtech.api.enums.Dyes;
import gregtech.api.enums.Materials;
@ -11,21 +11,30 @@ import gregtech.api.enums.Textures;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
import gregtech.api.interfaces.metatileentity.IMetaTileEntityCable;
import gregtech.api.interfaces.tileentity.IColoredTileEntity;
import gregtech.api.interfaces.tileentity.ICoverable;
import gregtech.api.interfaces.tileentity.IEnergyConnected;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.metatileentity.BaseMetaPipeEntity;
import gregtech.api.metatileentity.MetaPipeEntity;
import gregtech.api.objects.GT_RenderedTexture;
import gregtech.api.util.GT_CoverBehavior;
import gregtech.api.util.GT_Log;
import gregtech.api.util.GT_ModHandler;
import gregtech.api.util.GT_Utility;
import gregtech.common.GT_Client;
import gregtech.common.covers.GT_Cover_SolarPanel;
import gregtech.loaders.postload.PartP2PGTPower;
import gregtech.loaders.postload.PartP2PGTPower;
import ic2.api.energy.EnergyNet;
import ic2.api.energy.tile.IEnergyEmitter;
import ic2.api.energy.tile.IEnergySink;
import ic2.api.energy.tile.IEnergySource;
import ic2.api.energy.tile.IEnergySource;
import ic2.api.energy.tile.IEnergyTile;
import ic2.api.reactor.IReactorChamber;
import micdoodle8.mods.galacticraft.api.power.EnergySource;
import micdoodle8.mods.galacticraft.api.power.EnergySource.EnergySourceAdjacent;
import micdoodle8.mods.galacticraft.api.power.IEnergyHandlerGC;
import micdoodle8.mods.galacticraft.api.transmission.NetworkType;
import micdoodle8.mods.galacticraft.api.transmission.tile.IConnector;
import micdoodle8.mods.galacticraft.core.energy.EnergyConfigHandler;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
@ -38,11 +47,11 @@ import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import appeng.api.parts.IPartHost;
import appeng.api.parts.IPartHost;
import static gregtech.api.enums.GT_Values.VN;
public class GT_MetaPipeEntity_Cable extends MetaPipeEntity implements IMetaTileEntityCable {
@ -146,213 +155,303 @@ public class GT_MetaPipeEntity_Cable extends MetaPipeEntity implements IMetaTile
return (int) mAmperage * 64;
}
private void pullFromIc2EnergySources(IGregTechTileEntity aBaseMetaTileEntity) {
if(!GT_Mod.gregtechproxy.ic2EnergySourceCompat) return;
for( byte aSide = 0 ; aSide < 6 ; aSide++) if(isConnectedAtSide(aSide)) {
final TileEntity tTileEntity = aBaseMetaTileEntity.getTileEntityAtSide(aSide);
final TileEntity tEmitter;
if (tTileEntity instanceof IReactorChamber)
tEmitter = (TileEntity) ((IReactorChamber) tTileEntity).getReactor();
else tEmitter = (tTileEntity == null || tTileEntity instanceof IEnergyTile || EnergyNet.instance == null) ? tTileEntity :
EnergyNet.instance.getTileEntity(tTileEntity.getWorldObj(), tTileEntity.xCoord, tTileEntity.yCoord, tTileEntity.zCoord);
if (tEmitter instanceof IEnergySource) {
final GT_CoverBehavior coverBehavior = aBaseMetaTileEntity.getCoverBehaviorAtSide(aSide);
final int coverId = aBaseMetaTileEntity.getCoverIDAtSide(aSide),
coverData = aBaseMetaTileEntity.getCoverDataAtSide(aSide);
final ForgeDirection tDirection = ForgeDirection.getOrientation(GT_Utility.getOppositeSide(aSide));
if (((IEnergySource) tEmitter).emitsEnergyTo((TileEntity) aBaseMetaTileEntity, tDirection) &&
coverBehavior.letsEnergyIn(aSide, coverId, coverData, aBaseMetaTileEntity)) {
final long tEU = (long) ((IEnergySource) tEmitter).getOfferedEnergy();
if (transferElectricity(aSide, tEU, 1, Sets.newHashSet((TileEntity) aBaseMetaTileEntity)) > 0)
((IEnergySource) tEmitter).drawEnergy(tEU);
}
}
}
}
@Override
public long injectEnergyUnits(byte aSide, long aVoltage, long aAmperage) {
if (!isConnectedAtSide(aSide) && aSide != 6)
return 0;
if (!getBaseMetaTileEntity().getCoverBehaviorAtSide(aSide).letsEnergyIn(aSide, getBaseMetaTileEntity().getCoverIDAtSide(aSide), getBaseMetaTileEntity().getCoverDataAtSide(aSide), getBaseMetaTileEntity()))
return 0;
return transferElectricity(aSide, aVoltage, aAmperage, new ArrayList<TileEntity>(Arrays.asList((TileEntity) getBaseMetaTileEntity())));
return transferElectricity(aSide, aVoltage, aAmperage, Sets.newHashSet((TileEntity) getBaseMetaTileEntity()));
}
@Override
@Deprecated
public long transferElectricity(byte aSide, long aVoltage, long aAmperage, ArrayList<TileEntity> aAlreadyPassedTileEntityList) {
if (!isConnectedAtSide(aSide) && aSide != 6)
return 0;
return transferElectricity(aSide, aVoltage, aAmperage, new HashSet<>(aAlreadyPassedTileEntityList));
}
@Override
public long transferElectricity(byte aSide, long aVoltage, long aAmperage, HashSet<TileEntity> aAlreadyPassedSet) {
if (!isConnectedAtSide(aSide) && aSide != 6) return 0;
long rUsedAmperes = 0;
final IGregTechTileEntity baseMetaTile = getBaseMetaTileEntity();
aVoltage -= mCableLossPerMeter;
if (aVoltage > 0) for (byte i = 0; i < 6 && aAmperage > rUsedAmperes; i++)
if (i != aSide && isConnectedAtSide(i) && getBaseMetaTileEntity().getCoverBehaviorAtSide(i).letsEnergyOut(i, getBaseMetaTileEntity().getCoverIDAtSide(i), getBaseMetaTileEntity().getCoverDataAtSide(i), getBaseMetaTileEntity())) {
TileEntity tTileEntity = getBaseMetaTileEntity().getTileEntityAtSide(i);
if (!aAlreadyPassedTileEntityList.contains(tTileEntity)) {
aAlreadyPassedTileEntityList.add(tTileEntity);
if (tTileEntity instanceof IEnergyConnected) {
if (getBaseMetaTileEntity().getColorization() >= 0) {
byte tColor = ((IEnergyConnected) tTileEntity).getColorization();
if (tColor >= 0 && tColor != getBaseMetaTileEntity().getColorization()) continue;
}
if (tTileEntity instanceof IGregTechTileEntity && ((IGregTechTileEntity) tTileEntity).getMetaTileEntity() instanceof IMetaTileEntityCable && ((IGregTechTileEntity) tTileEntity).getCoverBehaviorAtSide(GT_Utility.getOppositeSide(i)).letsEnergyIn(GT_Utility.getOppositeSide(i), ((IGregTechTileEntity) tTileEntity).getCoverIDAtSide(GT_Utility.getOppositeSide(i)), ((IGregTechTileEntity) tTileEntity).getCoverDataAtSide(GT_Utility.getOppositeSide(i)), ((IGregTechTileEntity) tTileEntity))) {
if (((IGregTechTileEntity) tTileEntity).getTimer() > 50)
rUsedAmperes += ((IMetaTileEntityCable) ((IGregTechTileEntity) tTileEntity).getMetaTileEntity()).transferElectricity(GT_Utility.getOppositeSide(i), aVoltage, aAmperage - rUsedAmperes, aAlreadyPassedTileEntityList);
} else {
rUsedAmperes += ((IEnergyConnected) tTileEntity).injectEnergyUnits(GT_Utility.getOppositeSide(i), aVoltage, aAmperage - rUsedAmperes);
}
// } else if (tTileEntity instanceof IEnergySink) {
// ForgeDirection tDirection = ForgeDirection.getOrientation(i).getOpposite();
// if (((IEnergySink)tTileEntity).acceptsEnergyFrom((TileEntity)getBaseMetaTileEntity(), tDirection)) {
// if (((IEnergySink)tTileEntity).demandedEnergyUnits() > 0 && ((IEnergySink)tTileEntity).injectEnergyUnits(tDirection, aVoltage) < aVoltage) rUsedAmperes++;
// }
} else if (tTileEntity instanceof IEnergySink) {
ForgeDirection tDirection = ForgeDirection.getOrientation(i).getOpposite();
if (((IEnergySink) tTileEntity).acceptsEnergyFrom((TileEntity) getBaseMetaTileEntity(), tDirection)) {
if (((IEnergySink) tTileEntity).getDemandedEnergy() > 0 && ((IEnergySink) tTileEntity).injectEnergy(tDirection, aVoltage, aVoltage) < aVoltage)
rUsedAmperes++;
}
} else if (GregTech_API.mOutputRF && tTileEntity instanceof IEnergyReceiver) {
ForgeDirection tDirection = ForgeDirection.getOrientation(i).getOpposite();
int rfOut = (int) (aVoltage * GregTech_API.mEUtoRF / 100);
if (((IEnergyReceiver) tTileEntity).receiveEnergy(tDirection, rfOut, true) == rfOut) {
((IEnergyReceiver) tTileEntity).receiveEnergy(tDirection, rfOut, false);
rUsedAmperes++;
} else if (((IEnergyReceiver) tTileEntity).receiveEnergy(tDirection, rfOut, true) > 0) {
if (mRestRF == 0) {
int RFtrans = ((IEnergyReceiver) tTileEntity).receiveEnergy(tDirection, (int) rfOut, false);
rUsedAmperes++;
mRestRF = rfOut - RFtrans;
} else {
int RFtrans = ((IEnergyReceiver) tTileEntity).receiveEnergy(tDirection, (int) mRestRF, false);
mRestRF = mRestRF - RFtrans;
}
}
if (GregTech_API.mRFExplosions && ((IEnergyReceiver) tTileEntity).getMaxEnergyStored(tDirection) < rfOut * 600) {
if (rfOut > 32 * GregTech_API.mEUtoRF / 100) this.doExplosion(rfOut);
if (i != aSide && isConnectedAtSide(i) && baseMetaTile.getCoverBehaviorAtSide(i).letsEnergyOut(i, baseMetaTile.getCoverIDAtSide(i), baseMetaTile.getCoverDataAtSide(i), baseMetaTile)) {
final TileEntity tTileEntity = baseMetaTile.getTileEntityAtSide(i);
if (tTileEntity != null && aAlreadyPassedSet.add(tTileEntity)) {
final byte tSide = GT_Utility.getOppositeSide(i);
final IGregTechTileEntity tBaseMetaTile = tTileEntity instanceof IGregTechTileEntity ? ((IGregTechTileEntity) tTileEntity) : null;
final IMetaTileEntity tMeta = tBaseMetaTile != null ? tBaseMetaTile.getMetaTileEntity() : null;
if (tMeta instanceof IMetaTileEntityCable) {
if (tBaseMetaTile.getCoverBehaviorAtSide(tSide).letsEnergyIn(tSide, tBaseMetaTile.getCoverIDAtSide(tSide), tBaseMetaTile.getCoverDataAtSide(tSide), tBaseMetaTile) && ((IGregTechTileEntity) tTileEntity).getTimer() > 50) {
rUsedAmperes += ((IMetaTileEntityCable) ((IGregTechTileEntity) tTileEntity).getMetaTileEntity()).transferElectricity(tSide, aVoltage, aAmperage - rUsedAmperes, aAlreadyPassedSet);
}
} else {
rUsedAmperes += insertEnergyInto(tTileEntity, tSide, aVoltage, aAmperage - rUsedAmperes);
}
}
}
mTransferredAmperage += rUsedAmperes;
mTransferredVoltageLast20 = Math.max(mTransferredVoltageLast20, aVoltage);
mTransferredAmperageLast20 = Math.max(mTransferredAmperageLast20, mTransferredAmperage);
if (aVoltage > mVoltage || mTransferredAmperage > mAmperage) {
if(mOverheat>GT_Mod.gregtechproxy.mWireHeatingTicks * 100){
getBaseMetaTileEntity().setToFire();}else{mOverheat +=100;}
if (mOverheat > GT_Mod.gregtechproxy.mWireHeatingTicks * 100) {
getBaseMetaTileEntity().setToFire();
} else {
mOverheat += 100;
}
return aAmperage;
}
return rUsedAmperes;
}
private long insertEnergyInto(TileEntity tTileEntity, byte tSide, long aVoltage, long aAmperage) {
if (aAmperage == 0 || tTileEntity == null) return 0;
final IGregTechTileEntity baseMetaTile = getBaseMetaTileEntity();
final ForgeDirection tDirection = ForgeDirection.getOrientation(tSide);
if (tTileEntity instanceof IEnergyConnected) {
return ((IEnergyConnected) tTileEntity).injectEnergyUnits(tSide, aVoltage, aAmperage);
}
// AE2 Compat
if (GT_Mod.gregtechproxy.mAE2Integration && tTileEntity instanceof appeng.tile.powersink.IC2) {
if (((appeng.tile.powersink.IC2) tTileEntity).acceptsEnergyFrom((TileEntity) baseMetaTile, tDirection)) {
long rUsedAmperes = 0;
while (aAmperage > rUsedAmperes && ((appeng.tile.powersink.IC2)tTileEntity).getDemandedEnergy() > 0 && ((appeng.tile.powersink.IC2)tTileEntity).injectEnergy(tDirection, aVoltage, aVoltage) <= aVoltage)
rUsedAmperes++;
return rUsedAmperes;
}
return 0;
}
// GC Compat
if (GregTech_API.mGalacticraft) {
if (tTileEntity instanceof IEnergyHandlerGC) {
if (!(tTileEntity instanceof IConnector) || ((IConnector) tTileEntity).canConnect(tDirection, NetworkType.POWER)) {
EnergySource eSource = (EnergySource) GT_Utility.callConstructor("micdoodle8.mods.galacticraft.api.power.EnergySource.EnergySourceAdjacent", 0, null, false, new Object[]{tDirection});
float tSizeToReceive = aVoltage * EnergyConfigHandler.IC2_RATIO, tStored = ((IEnergyHandlerGC) tTileEntity).getEnergyStoredGC(eSource);
if (tSizeToReceive >= tStored || tSizeToReceive <= ((IEnergyHandlerGC) tTileEntity).getMaxEnergyStoredGC(eSource) - tStored) {
float tReceived = ((IEnergyHandlerGC) tTileEntity).receiveEnergyGC(eSource, tSizeToReceive, false);
if (tReceived > 0) {
tSizeToReceive -= tReceived;
while (tSizeToReceive > 0) {
tReceived = ((IEnergyHandlerGC) tTileEntity).receiveEnergyGC(eSource, tSizeToReceive, false);
if (tReceived < 1) break;
tSizeToReceive -= tReceived;
}
return 1;
}
}
}
return 0;
}
}
// IC2 Compat
{
final TileEntity tIc2Acceptor = (tTileEntity instanceof IEnergyTile || EnergyNet.instance == null) ? tTileEntity :
EnergyNet.instance.getTileEntity(tTileEntity.getWorldObj(), tTileEntity.xCoord, tTileEntity.yCoord, tTileEntity.zCoord);
if (tIc2Acceptor instanceof IEnergySink && ((IEnergySink) tIc2Acceptor).acceptsEnergyFrom((TileEntity) baseMetaTile, tDirection)) {
long rUsedAmperes = 0;
while (aAmperage > rUsedAmperes && ((IEnergySink) tIc2Acceptor).getDemandedEnergy() > 0 && ((IEnergySink) tIc2Acceptor).injectEnergy(tDirection, aVoltage, aVoltage) <= aVoltage)
rUsedAmperes++;
return rUsedAmperes;
}
}
// RF Compat
if (GregTech_API.mOutputRF && tTileEntity instanceof IEnergyReceiver) {
final IEnergyReceiver rfReceiver = (IEnergyReceiver) tTileEntity;
long rfOUT = aVoltage * GregTech_API.mEUtoRF / 100, rUsedAmperes = 0;
int rfOut = rfOUT > Integer.MAX_VALUE ? Integer.MAX_VALUE : (int) rfOUT;
if (rfReceiver.receiveEnergy(tDirection, rfOut, true) == rfOut) {
rfReceiver.receiveEnergy(tDirection, rfOut, false);
rUsedAmperes++;
}
else if (rfReceiver.receiveEnergy(tDirection, rfOut, true) > 0) {
if (mRestRF == 0) {
int RFtrans = rfReceiver.receiveEnergy(tDirection, (int) rfOut, false);
rUsedAmperes++;
mRestRF = rfOut - RFtrans;
} else {
int RFtrans = rfReceiver.receiveEnergy(tDirection, (int) mRestRF, false);
mRestRF = mRestRF - RFtrans;
}
}
if (GregTech_API.mRFExplosions && rfReceiver.getMaxEnergyStored(tDirection) < rfOut * 600) {
if (rfOut > 32 * GregTech_API.mEUtoRF / 100) this.doExplosion(rfOut);
}
return rUsedAmperes;
}
return 0;
}
@Override
public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) {
if (aBaseMetaTileEntity.isServerSide()) {
if (GT_Mod.gregtechproxy.ic2EnergySourceCompat) pullFromIc2EnergySources(aBaseMetaTileEntity);
mTransferredAmperage = 0;
if(mOverheat>0)mOverheat--;
if (aTick % 20 == 0) {
mTransferredVoltageLast20 = 0;
mTransferredAmperageLast20 = 0;
for (byte tSide = 0; tSide < 6; tSide++) {
IGregTechTileEntity tBaseMetaTileEntity = aBaseMetaTileEntity.getIGregTechTileEntityAtSide(tSide);
byte uSide = GT_Utility.getOppositeSide(tSide);
if ((mCheckConnections || isConnectedAtSide(tSide)
|| aBaseMetaTileEntity.getCoverBehaviorAtSide(tSide).alwaysLookConnected(tSide, aBaseMetaTileEntity.getCoverIDAtSide(tSide), aBaseMetaTileEntity.getCoverDataAtSide(tSide), aBaseMetaTileEntity)
|| (tBaseMetaTileEntity != null && tBaseMetaTileEntity.getCoverBehaviorAtSide(uSide).alwaysLookConnected(uSide, tBaseMetaTileEntity.getCoverIDAtSide(uSide), tBaseMetaTileEntity.getCoverDataAtSide(uSide), tBaseMetaTileEntity)))
&& connect(tSide) == 0) {
disconnect(tSide);
}
}
if (GT_Mod.gregtechproxy.gt6Cable) mCheckConnections = false;
if (!GT_Mod.gregtechproxy.gt6Cable || mCheckConnections) checkConnections();
}
}else if(aBaseMetaTileEntity.isClientSide() && GT_Client.changeDetected==4) aBaseMetaTileEntity.issueTextureUpdate();
}
@Override
public boolean onWireCutterRightClick(byte aSide, byte aWrenchingSide, EntityPlayer aPlayer, float aX, float aY, float aZ) {
if (GT_Mod.gregtechproxy.gt6Cable && GT_ModHandler.damageOrDechargeItem(aPlayer.inventory.getCurrentItem(), 1, 500, aPlayer)) {
if(isConnectedAtSide(aWrenchingSide)) {
disconnect(aWrenchingSide);
GT_Utility.sendChatToPlayer(aPlayer, trans("215", "Disconnected"));
}else if(!GT_Mod.gregtechproxy.costlyCableConnection){
if (GT_Mod.gregtechproxy.gt6Cable && GT_ModHandler.damageOrDechargeItem(aPlayer.inventory.getCurrentItem(), 1, 500, aPlayer)) {
if(isConnectedAtSide(aWrenchingSide)) {
disconnect(aWrenchingSide);
GT_Utility.sendChatToPlayer(aPlayer, trans("215", "Disconnected"));
}else if(!GT_Mod.gregtechproxy.costlyCableConnection){
if (connect(aWrenchingSide) > 0)
GT_Utility.sendChatToPlayer(aPlayer, trans("214", "Connected"));
}
return true;
}
return false;
}
public boolean onSolderingToolRightClick(byte aSide, byte aWrenchingSide, EntityPlayer aPlayer, float aX, float aY, float aZ) {
if (GT_Mod.gregtechproxy.gt6Cable && GT_ModHandler.damageOrDechargeItem(aPlayer.inventory.getCurrentItem(), 1, 500, aPlayer)) {
if (isConnectedAtSide(aWrenchingSide)) {
return true;
}
return false;
}
public boolean onSolderingToolRightClick(byte aSide, byte aWrenchingSide, EntityPlayer aPlayer, float aX, float aY, float aZ) {
if (GT_Mod.gregtechproxy.gt6Cable && GT_ModHandler.damageOrDechargeItem(aPlayer.inventory.getCurrentItem(), 1, 500, aPlayer)) {
if (isConnectedAtSide(aWrenchingSide)) {
disconnect(aWrenchingSide);
GT_Utility.sendChatToPlayer(aPlayer, trans("215", "Disconnected"));
} else if (!GT_Mod.gregtechproxy.costlyCableConnection || GT_ModHandler.consumeSolderingMaterial(aPlayer)) {
if (connect(aWrenchingSide) > 0)
GT_Utility.sendChatToPlayer(aPlayer, trans("214", "Connected"));
} else if (!GT_Mod.gregtechproxy.costlyCableConnection || GT_ModHandler.consumeSolderingMaterial(aPlayer)) {
if (connect(aWrenchingSide) > 0)
GT_Utility.sendChatToPlayer(aPlayer, trans("214", "Connected"));
}
return true;
}
return false;
}
@Override
public int connect(byte aSide) {
int rConnect = 0;
if (aSide >= 6) return rConnect;
byte tSide = GT_Utility.getOppositeSide(aSide);
TileEntity tTileEntity = getBaseMetaTileEntity().getTileEntityAtSide(aSide);
GT_CoverBehavior coverBehavior = getBaseMetaTileEntity().getCoverBehaviorAtSide(aSide);
int coverId = getBaseMetaTileEntity().getCoverIDAtSide(aSide), coverData = getBaseMetaTileEntity().getCoverDataAtSide(aSide);
boolean sAlwaysLookConnected = coverBehavior.alwaysLookConnected(aSide, coverId, coverData, getBaseMetaTileEntity());
boolean sLetEnergyIn = coverBehavior.letsEnergyIn(aSide, coverId, coverData, getBaseMetaTileEntity());
boolean sLetEnergyOut = coverBehavior.letsEnergyOut(aSide, coverId, coverData, getBaseMetaTileEntity());
if (sAlwaysLookConnected || sLetEnergyIn || sLetEnergyOut) {
if (tTileEntity instanceof IColoredTileEntity) {
if (getBaseMetaTileEntity().getColorization() >= 0) {
byte tColor = ((IColoredTileEntity) tTileEntity).getColorization();
if (tColor >= 0 && tColor != getBaseMetaTileEntity().getColorization()) {
return rConnect;
}
@Override
public boolean letsIn(GT_CoverBehavior coverBehavior, byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
return coverBehavior.letsEnergyIn(aSide, aCoverID, aCoverVariable, aTileEntity);
}
@Override
public boolean letsOut(GT_CoverBehavior coverBehavior, byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
return coverBehavior.letsEnergyOut(aSide, aCoverID, aCoverVariable, aTileEntity);
}
@Override
public boolean canConnect(byte aSide, TileEntity tTileEntity) {
final IGregTechTileEntity baseMetaTile = getBaseMetaTileEntity();
final GT_CoverBehavior coverBehavior = baseMetaTile.getCoverBehaviorAtSide(aSide);
final byte tSide = GT_Utility.getOppositeSide(aSide);
final ForgeDirection tDir = ForgeDirection.getOrientation(tSide);
// GT Machine handling
if ((tTileEntity instanceof IEnergyConnected) &&
(((IEnergyConnected) tTileEntity).inputEnergyFrom(tSide, false) || ((IEnergyConnected) tTileEntity).outputsEnergyTo(tSide, false)))
return true;
// Solar Panel Compat
if (coverBehavior instanceof GT_Cover_SolarPanel) return true;
// ((tIsGregTechTileEntity && tIsTileEntityCable) && (tAlwaysLookConnected || tLetEnergyIn || tLetEnergyOut) ) --> Not needed
// GC Compat
if (GregTech_API.mGalacticraft) {
if (tTileEntity instanceof IEnergyHandlerGC && (!(tTileEntity instanceof IConnector) || ((IConnector) tTileEntity).canConnect(tDir, NetworkType.POWER)))
return true;
}
// AE2-p2p Compat
if (GT_Mod.gregtechproxy.mAE2Integration) {
if (tTileEntity instanceof IEnergySource && tTileEntity instanceof IPartHost && ((IPartHost)tTileEntity).getPart(tDir) instanceof PartP2PGTPower && ((IEnergySource) tTileEntity).emitsEnergyTo((TileEntity) baseMetaTile, tDir))
return true;
if (tTileEntity instanceof appeng.tile.powersink.IC2 && ((appeng.tile.powersink.IC2)tTileEntity).acceptsEnergyFrom((TileEntity)baseMetaTile, tDir))
return true;
}
// IC2 Compat
{
final TileEntity ic2Energy;
if (tTileEntity instanceof IReactorChamber)
ic2Energy = (TileEntity) ((IReactorChamber) tTileEntity).getReactor();
else
ic2Energy = (tTileEntity == null || tTileEntity instanceof IEnergyTile || EnergyNet.instance == null) ? tTileEntity :
EnergyNet.instance.getTileEntity(tTileEntity.getWorldObj(), tTileEntity.xCoord, tTileEntity.yCoord, tTileEntity.zCoord);
// IC2 Sink Compat
if ((ic2Energy instanceof IEnergySink) && ((IEnergySink) ic2Energy).acceptsEnergyFrom((TileEntity) baseMetaTile, tDir))
return true;
// IC2 Source Compat
if (GT_Mod.gregtechproxy.ic2EnergySourceCompat && (ic2Energy instanceof IEnergySource)) {
if (((IEnergySource) ic2Energy).emitsEnergyTo((TileEntity) baseMetaTile, tDir)) {
return true;
}
}
boolean sHasSolarPanel = coverBehavior instanceof GT_Cover_SolarPanel;
boolean tIsEnergyIsConnected = tTileEntity instanceof IEnergyConnected;
boolean tEnergyInOrOut = (tIsEnergyIsConnected && (((IEnergyConnected) tTileEntity).inputEnergyFrom(tSide) || ((IEnergyConnected) tTileEntity).outputsEnergyTo(tSide)));
boolean tIsGregTechTileEntity = tTileEntity instanceof IGregTechTileEntity;
boolean tIsTileEntityCable = tIsGregTechTileEntity && ((IGregTechTileEntity) tTileEntity).getMetaTileEntity() instanceof IMetaTileEntityCable;
boolean tAlwaysLookConnected = tIsGregTechTileEntity && ((IGregTechTileEntity) tTileEntity).getCoverBehaviorAtSide(tSide).alwaysLookConnected(tSide, ((IGregTechTileEntity) tTileEntity).getCoverIDAtSide(tSide), ((IGregTechTileEntity) tTileEntity).getCoverDataAtSide(tSide), ((IGregTechTileEntity) tTileEntity));
boolean tLetEnergyIn = tIsGregTechTileEntity && ((IGregTechTileEntity) tTileEntity).getCoverBehaviorAtSide(tSide).letsEnergyIn(tSide, ((IGregTechTileEntity) tTileEntity).getCoverIDAtSide(tSide), ((IGregTechTileEntity) tTileEntity).getCoverDataAtSide(tSide), ((IGregTechTileEntity) tTileEntity));
boolean tLetEnergyOut = tIsGregTechTileEntity && ((IGregTechTileEntity) tTileEntity).getCoverBehaviorAtSide(tSide).letsEnergyOut(tSide, ((IGregTechTileEntity) tTileEntity).getCoverIDAtSide(tSide), ((IGregTechTileEntity) tTileEntity).getCoverDataAtSide(tSide), ((IGregTechTileEntity) tTileEntity));
}
// RF Output Compat
if (GregTech_API.mOutputRF && tTileEntity instanceof IEnergyReceiver && ((IEnergyReceiver) tTileEntity).canConnectEnergy(tDir))
return true;
boolean tIsEnergySink = tTileEntity instanceof IEnergySink;
boolean tSinkAcceptsEnergyFromSide = tIsEnergySink && ((IEnergySink) tTileEntity).acceptsEnergyFrom((TileEntity) getBaseMetaTileEntity(), ForgeDirection.getOrientation(tSide));
// RF Input Compat
if (GregTech_API.mInputRF && (tTileEntity instanceof IEnergyEmitter && ((IEnergyEmitter) tTileEntity).emitsEnergyTo((TileEntity)baseMetaTile, tDir)))
return true;
boolean tIsGTp2pProvider = (GT_Mod.gregtechproxy.mAE2Integration && tTileEntity instanceof IEnergySource
&& tTileEntity instanceof IPartHost && ((IPartHost)tTileEntity).getPart(ForgeDirection.getOrientation(tSide)) instanceof PartP2PGTPower);
boolean tGTp2pProvidesEnergyToSide = tIsGTp2pProvider && ((IEnergySource) tTileEntity).emitsEnergyTo((TileEntity) getBaseMetaTileEntity(), ForgeDirection.getOrientation(tSide));
boolean tIsEnergyReceiver = tTileEntity instanceof IEnergyReceiver;
boolean tEnergyReceiverCanAcceptFromSide = tIsEnergyReceiver && ((IEnergyReceiver) tTileEntity).canConnectEnergy(ForgeDirection.getOrientation(tSide));
if ( (tIsEnergyIsConnected && tEnergyInOrOut)
|| sHasSolarPanel
|| ((tIsGregTechTileEntity && tIsTileEntityCable) && (tAlwaysLookConnected || tLetEnergyIn || tLetEnergyOut) )
|| (tIsEnergySink && tSinkAcceptsEnergyFromSide)
|| (tIsGTp2pProvider && tGTp2pProvidesEnergyToSide)
|| (GregTech_API.mOutputRF && tIsEnergyReceiver && tEnergyReceiverCanAcceptFromSide)
/*|| (tTileEntity instanceof IEnergyEmitter && ((IEnergyEmitter)tTileEntity).emitsEnergyTo((TileEntity)getBaseMetaTileEntity(), ForgeDirection.getOrientation(tSide)))*/)
{
rConnect = 1;
return false;
}
@Override
public boolean getGT6StyleConnection() {
// Yes if GT6 Cables are enabled
return GT_Mod.gregtechproxy.gt6Cable;
}
if(D1 && rConnect == 0) {
GT_Log.out.println("Gt6StyleCable - Debug: ");
GT_Log.out.println("\t AlwaysLookConnected:" + sAlwaysLookConnected + " LetEnergyIn:" + sLetEnergyIn + " LetEnergyOut:" + sLetEnergyOut);
GT_Log.out.println("\t sHasSolarPanel:" + sHasSolarPanel);
GT_Log.out.println("\t tIsEnergyIsConnected:" + tIsEnergyIsConnected + " tEnergyInOrOut:" +tEnergyInOrOut);
GT_Log.out.println("\t tIsGregTechTileEntity:" + tIsGregTechTileEntity + " tIsTileEntityCable:" + tIsTileEntityCable);
GT_Log.out.println("\t tIsEnergySink:" + tIsEnergySink + " tSinkAcceptsEnergyFromSide:" + tSinkAcceptsEnergyFromSide );
GT_Log.out.println("\t tIsGTp2pProvider:" + tIsGTp2pProvider + " tGTp2pProvidesEnergyToSide:" + tGTp2pProvidesEnergyToSide );
GT_Log.out.println("\t tIsEnergyReceiver:" + tIsEnergyReceiver + " tEnergyReceiverCanAcceptFromSide:" + tEnergyReceiverCanAcceptFromSide );
}
}
if (rConnect == 0) {
if (!getBaseMetaTileEntity().getWorld().getChunkProvider().chunkExists(getBaseMetaTileEntity().getOffsetX(aSide, 1) >> 4, getBaseMetaTileEntity().getOffsetZ(aSide, 1) >> 4)) { // if chunk unloaded
rConnect = -1;
}
if (tTileEntity instanceof IEnergyConnected && !((IEnergyConnected) tTileEntity).energyStateReady()) { //Not ready
rConnect = -1;
}
}
if (rConnect > 0) {
super.connect(aSide);
}
return rConnect;
}
@Override
public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack) {
@ -388,8 +487,6 @@ public class GT_MetaPipeEntity_Cable extends MetaPipeEntity implements IMetaTile
@Override
public void loadNBTData(NBTTagCompound aNBT) {
if (GT_Mod.gregtechproxy.gt6Cable) {
if (!aNBT.hasKey("mConnections"))
mCheckConnections = true;
mConnections = aNBT.getByte("mConnections");
}
}

View file

@ -10,15 +10,19 @@ import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.metatileentity.BaseMetaPipeEntity;
import gregtech.api.metatileentity.MetaPipeEntity;
import gregtech.api.objects.GT_RenderedTexture;
import gregtech.api.util.GT_CoverBehavior;
import gregtech.api.objects.XSTR;
import gregtech.api.util.GT_Log;
import gregtech.api.util.GT_Utility;
import gregtech.common.GT_Client;
import gregtech.common.covers.GT_Cover_Drain;
import gregtech.common.covers.GT_Cover_FluidRegulator;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.world.World;
@ -40,7 +44,6 @@ public class GT_MetaPipeEntity_Fluid extends MetaPipeEntity {
public final boolean mGasProof;
public final FluidStack[] mFluids;
public byte mLastReceivedFrom = 0, oLastReceivedFrom = 0;
private boolean mCheckConnections = !GT_Mod.gregtechproxy.gt6Pipe;
/**
* Bitmask for whether disable fluid input form each side.
*/
@ -196,8 +199,6 @@ public class GT_MetaPipeEntity_Fluid extends MetaPipeEntity {
mFluids[i] = FluidStack.loadFluidStackFromNBT(aNBT.getCompoundTag("mFluid"+(i==0?"":i)));
mLastReceivedFrom = aNBT.getByte("mLastReceivedFrom");
if (GT_Mod.gregtechproxy.gt6Pipe) {
if (!aNBT.hasKey("mConnections"))
mCheckConnections = false;
mConnections = aNBT.getByte("mConnections");
mDisableInput = aNBT.getByte("mDisableInput");
}
@ -227,15 +228,40 @@ public class GT_MetaPipeEntity_Fluid extends MetaPipeEntity {
mLastReceivedFrom = 0;
}
for (int i = 0; i < mFluids.length; i++) {
FluidStack tFluid = mFluids[i];
if (!GT_Mod.gregtechproxy.gt6Pipe || mCheckConnections) checkConnections();
boolean shouldDistribute = (oLastReceivedFrom == mLastReceivedFrom);
for (int i = 0, j = aBaseMetaTileEntity.getRandomNumber(mPipeAmount); i < mPipeAmount; i++) {
int index = (i + j) % mPipeAmount;
if (mFluids[index] != null && mFluids[index].amount <= 0) mFluids[index] = null;
if (mFluids[index] == null) continue;
if (checkEnvironment(index, aBaseMetaTileEntity)) return;
if (shouldDistribute) {
distributeFluid(index, aBaseMetaTileEntity);
mLastReceivedFrom = 0;
}
}
oLastReceivedFrom = mLastReceivedFrom;
} else if(aBaseMetaTileEntity.isClientSide() && GT_Client.changeDetected==4) aBaseMetaTileEntity.issueTextureUpdate();
}
private boolean checkEnvironment(int index, IGregTechTileEntity aBaseMetaTileEntity) {
// Check for hot liquids that melt the pipe or gasses that escape and burn/freeze people
final FluidStack tFluid = mFluids[index];
if (tFluid != null && tFluid.amount > 0) {
int tTemperature = tFluid.getFluid().getTemperature(tFluid);
if (tTemperature > mHeatResistance) {
if (aBaseMetaTileEntity.getRandomNumber(100) == 0) {
// Poof
aBaseMetaTileEntity.setToFire();
return;
return true;
}
// Mmhmm, Fire
aBaseMetaTileEntity.setOnFire();
}
if (!mGasProof && tFluid.getFluid().isGaseous(tFluid)) {
@ -258,69 +284,58 @@ public class GT_MetaPipeEntity_Fluid extends MetaPipeEntity {
if (D1) e.printStackTrace(GT_Log.err);
}
}
if (tFluid.amount <= 0) mFluids[i] = null;
}
if (tFluid.amount <= 0) mFluids[index] = null;
}
return false;
}
if (mLastReceivedFrom == oLastReceivedFrom) {
List<MutableTriple<IFluidHandler, ForgeDirection, Integer>> tanksList = new ArrayList<>();
private void distributeFluid(int index, IGregTechTileEntity aBaseMetaTileEntity) {
final FluidStack tFluid = mFluids[index];
if (tFluid == null) return;
for (byte tSide = 0; tSide < 6; tSide++) {
byte uSide = GT_Utility.getOppositeSide(tSide);
IFluidHandler tTank = aBaseMetaTileEntity.getITankContainerAtSide(tSide);
ICoverable tBaseMetaTileEntity = tTank instanceof ICoverable ? (ICoverable) tTank : null;
if (mCheckConnections || isConnectedAtSide(tSide)
|| aBaseMetaTileEntity.getCoverBehaviorAtSide(tSide).alwaysLookConnected(tSide, aBaseMetaTileEntity.getCoverIDAtSide(tSide), aBaseMetaTileEntity.getCoverDataAtSide(tSide), aBaseMetaTileEntity)
|| (tBaseMetaTileEntity != null && tBaseMetaTileEntity.getCoverBehaviorAtSide(uSide).alwaysLookConnected(uSide, tBaseMetaTileEntity.getCoverIDAtSide(uSide), tBaseMetaTileEntity.getCoverDataAtSide(uSide), tBaseMetaTileEntity))) {
switch (connect(tSide)) {
case 0:
disconnect(tSide);
break;
case 2:
if ((mLastReceivedFrom & (1 << tSide)) == 0) {
tanksList.add(new MutableTriple<>(tTank, ForgeDirection.getOrientation(uSide), 0));
// Tank, From, Amount to receive
List<MutableTriple<IFluidHandler, ForgeDirection, Integer>> tTanks = new ArrayList<>();
for (byte aSide, i = 0, j = (byte) aBaseMetaTileEntity.getRandomNumber(6); i < 6; i++) {
// Get a list of tanks accepting fluids, and what side they're on
aSide = (byte) ((i + j) % 6);
final byte tSide = GT_Utility.getOppositeSide(aSide);
final IFluidHandler tTank = aBaseMetaTileEntity.getITankContainerAtSide(aSide);
final IGregTechTileEntity gTank = tTank instanceof IGregTechTileEntity ? (IGregTechTileEntity) tTank : null;
if (isConnectedAtSide(aSide) && tTank != null && (mLastReceivedFrom & (1 << aSide)) == 0 &&
getBaseMetaTileEntity().getCoverBehaviorAtSide(aSide).letsFluidOut(aSide, getBaseMetaTileEntity().getCoverIDAtSide(aSide), getBaseMetaTileEntity().getCoverDataAtSide(aSide), tFluid.getFluid(), getBaseMetaTileEntity()) &&
(gTank == null || gTank.getCoverBehaviorAtSide(tSide).letsFluidIn(tSide, gTank.getCoverIDAtSide(tSide), gTank.getCoverDataAtSide(tSide), tFluid.getFluid(), gTank)))
{
if (tTank.fill(ForgeDirection.getOrientation(tSide), tFluid, false) > 0) {
tTanks.add(new MutableTriple<>(tTank, ForgeDirection.getOrientation(tSide), 0));
}
}
}
}
if (GT_Mod.gregtechproxy.gt6Pipe) mCheckConnections = false;
for (int i = 0, j = aBaseMetaTileEntity.getRandomNumber(mPipeAmount); i < mPipeAmount; i++) {
int index = (i + j) % mPipeAmount;
if (mFluids[index] == null) {
continue;
}
double amount = Math.max(1, Math.min(mCapacity * 10, mFluids[index].amount));
FluidStack s = mFluids[index].copy();
s.amount = Integer.MAX_VALUE;
double totalFreeAmount = 0;
// How much of this fluid is available for distribution?
double tAmount = Math.max(1, Math.min(mCapacity * 10, tFluid.amount)), tNumTanks = tTanks.size();
FluidStack maxFluid = tFluid.copy();
maxFluid.amount = Integer.MAX_VALUE;
// Calculating of amounts by fullness of consumers
for (MutableTriple<IFluidHandler, ForgeDirection, Integer> tank : tanksList) {
tank.right = tank.left.fill(tank.middle, s, false);
totalFreeAmount += tank.right;
}
// Filling and amount correction
for (MutableTriple<IFluidHandler, ForgeDirection, Integer> tank : tanksList) {
if (totalFreeAmount > amount) {
tank.right = (int) Math.floor(tank.right * amount / totalFreeAmount);
double availableCapacity = 0;
// Calculate available capacity for distribution from all tanks
for (MutableTriple<IFluidHandler, ForgeDirection, Integer> tEntry: tTanks) {
tEntry.right = tEntry.left.fill(tEntry.middle, maxFluid, false);
availableCapacity += tEntry.right;
}
if (tank.right <= 0) continue;
int tFilledAmount = tank.left.fill(tank.middle, drainFromIndex(tank.right, false, index), false);
if (tFilledAmount > 0) {
tank.left.fill(tank.middle, drainFromIndex(tFilledAmount, true, index), true);
}
}
}
// Now distribute
for (MutableTriple<IFluidHandler, ForgeDirection, Integer> tEntry: tTanks) {
if (availableCapacity > tAmount) tEntry.right = (int) Math.floor(tEntry.right * tAmount / availableCapacity);
if (tEntry.right <= 0) continue;
mLastReceivedFrom = 0;
int tFilledAmount = tEntry.left.fill(tEntry.middle, drainFromIndex(tEntry.right, false, index), false);
if (tFilledAmount > 0) tEntry.left.fill(tEntry.middle, drainFromIndex(tFilledAmount, true, index), true);
}
oLastReceivedFrom = mLastReceivedFrom;
} else if (aBaseMetaTileEntity.isClientSide() && GT_Client.changeDetected == 4)
aBaseMetaTileEntity.issueTextureUpdate();
}
@Override
@ -354,64 +369,51 @@ public class GT_MetaPipeEntity_Fluid extends MetaPipeEntity {
}
@Override
public int connect(byte aSide) {
int rConnect = 0;
if (aSide >= 6) return rConnect;
IFluidHandler tTileEntity = getBaseMetaTileEntity().getITankContainerAtSide(aSide);
GT_MetaPipeEntity_Fluid tFluidPipe = null;
byte tSide = GT_Utility.getOppositeSide(aSide);
if (tTileEntity != null) {
if (tTileEntity instanceof IGregTechTileEntity) {
if (getBaseMetaTileEntity().getColorization() >= 0) {
byte tColor = ((IGregTechTileEntity) tTileEntity).getColorization();
if (tColor >= 0 && (tColor & 15) != (getBaseMetaTileEntity().getColorization() & 15)) {
return rConnect;
}
public boolean letsIn(GT_CoverBehavior coverBehavior, byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
return coverBehavior.letsFluidIn(aSide, aCoverID, aCoverVariable, null, aTileEntity);
}
@Override
public boolean letsOut(GT_CoverBehavior coverBehavior, byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
return coverBehavior.letsFluidOut(aSide, aCoverID, aCoverVariable, null, aTileEntity);
}
if (((IGregTechTileEntity) tTileEntity).getMetaTileEntity() instanceof GT_MetaPipeEntity_Fluid) {
tFluidPipe = (GT_MetaPipeEntity_Fluid) ((IGregTechTileEntity) tTileEntity).getMetaTileEntity();
}
}
FluidTankInfo[] tInfo = tTileEntity.getTankInfo(ForgeDirection.getOrientation(aSide).getOpposite());
@Override
public boolean canConnect(byte aSide, TileEntity tTileEntity) {
if (tTileEntity == null) return false;
final byte tSide = (byte)ForgeDirection.getOrientation(aSide).getOpposite().ordinal();
final IGregTechTileEntity baseMetaTile = getBaseMetaTileEntity();
if (baseMetaTile == null) return false;
final GT_CoverBehavior coverBehavior = baseMetaTile.getCoverBehaviorAtSide(aSide);
final IGregTechTileEntity gTileEntity = (tTileEntity instanceof IGregTechTileEntity) ? (IGregTechTileEntity) tTileEntity : null;
if (coverBehavior instanceof GT_Cover_Drain) return true;
// Tinker Construct Faucets return a null tank info, so check the class
if (GregTech_API.mTConstruct && tTileEntity instanceof tconstruct.smeltery.logic.FaucetLogic) return true;
final IFluidHandler fTileEntity = (tTileEntity instanceof IFluidHandler) ? (IFluidHandler) tTileEntity : null;
if (fTileEntity != null) {
FluidTankInfo[] tInfo = fTileEntity.getTankInfo(ForgeDirection.getOrientation(tSide));
if (tInfo != null) {
if (tInfo.length > 0) {
if (getBaseMetaTileEntity().getCoverBehaviorAtSide(aSide).letsFluidIn(aSide, getBaseMetaTileEntity().getCoverIDAtSide(aSide), getBaseMetaTileEntity().getCoverDataAtSide(aSide), null, getBaseMetaTileEntity())) {
rConnect = 1;
}
if (getBaseMetaTileEntity().getCoverBehaviorAtSide(aSide).letsFluidOut(aSide, getBaseMetaTileEntity().getCoverIDAtSide(aSide), getBaseMetaTileEntity().getCoverDataAtSide(aSide), null, getBaseMetaTileEntity())) {
rConnect = 2;
}
} else if (tInfo.length == 0) {
IGregTechTileEntity tSideTile = getBaseMetaTileEntity().getIGregTechTileEntityAtSide(aSide);
if (tSideTile != null){
ItemStack tCover = tSideTile.getCoverItemAtSide(tSide);
if (tCover!=null &&(GT_Utility.areStacksEqual(tCover, ItemList.FluidRegulator_LV.get(1, new Object[]{},true)) ||
GT_Utility.areStacksEqual(tCover, ItemList.FluidRegulator_MV.get(1, new Object[]{},true)) ||
GT_Utility.areStacksEqual(tCover, ItemList.FluidRegulator_HV.get(1, new Object[]{},true)) ||
GT_Utility.areStacksEqual(tCover, ItemList.FluidRegulator_EV.get(1, new Object[]{},true)) ||
GT_Utility.areStacksEqual(tCover, ItemList.FluidRegulator_IV.get(1, new Object[]{},true)))) {
rConnect = 1;
}
}
}
if (tInfo.length > 0) return true;
// Translocators return a TankInfo, but it's of 0 length - so check the class if we see this pattern
if (GregTech_API.mTranslocator && tTileEntity instanceof codechicken.translocator.TileLiquidTranslocator) return true;
if (gTileEntity != null && gTileEntity.getCoverBehaviorAtSide(tSide) instanceof GT_Cover_FluidRegulator) return true;
}
}
if (rConnect == 0) {
if (!getBaseMetaTileEntity().getWorld().getChunkProvider().chunkExists(getBaseMetaTileEntity().getOffsetX(aSide, 1) >> 4, getBaseMetaTileEntity().getOffsetZ(aSide, 1) >> 4)) { // if chunk unloaded
rConnect = -1;
}
}
if (rConnect > 0) {
if (GT_Mod.gregtechproxy.gt6Pipe && tFluidPipe != null) {
if (!isInputDisabledAtSide(aSide) || !tFluidPipe.isInputDisabledAtSide(tSide)) {
mConnections |= (1 << aSide);
if (!tFluidPipe.isConnectedAtSide(tSide)) tFluidPipe.connect(tSide);
} else rConnect = 0;
} else {
mConnections |= (1 << aSide);
}
}
return rConnect;
return false;
}
@Override
public boolean getGT6StyleConnection() {
// Yes if GT6 pipes are enabled
return GT_Mod.gregtechproxy.gt6Pipe;
}
@Override

View file

@ -1,7 +1,6 @@
package gregtech.api.metatileentity.implementations;
import gregtech.GT_Mod;
import gregtech.api.GregTech_API;
import gregtech.api.enums.*;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
@ -11,6 +10,7 @@ import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.metatileentity.BaseMetaPipeEntity;
import gregtech.api.metatileentity.MetaPipeEntity;
import gregtech.api.objects.GT_RenderedTexture;
import gregtech.api.util.GT_CoverBehavior;
import gregtech.api.util.GT_Utility;
import gregtech.common.GT_Client;
import net.minecraft.entity.Entity;
@ -26,8 +26,6 @@ import net.minecraft.util.AxisAlignedBB;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
import static gregtech.api.enums.GT_Values.GT;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
@ -40,7 +38,6 @@ public class GT_MetaPipeEntity_Item extends MetaPipeEntity implements IMetaTileE
public int mTransferredItems = 0;
public byte mLastReceivedFrom = 0, oLastReceivedFrom = 0;
public boolean mIsRestrictive = false;
private boolean mCheckConnections = !GT_Mod.gregtechproxy.gt6Pipe;
public GT_MetaPipeEntity_Item(int aID, String aName, String aNameRegional, float aThickNess, Materials aMaterial, int aInvSlotCount, int aStepSize, boolean aIsRestrictive, int aTickTime) {
super(aID, aName, aNameRegional, aInvSlotCount, false);
@ -157,8 +154,6 @@ public class GT_MetaPipeEntity_Item extends MetaPipeEntity implements IMetaTileE
public void loadNBTData(NBTTagCompound aNBT) {
mLastReceivedFrom = aNBT.getByte("mLastReceivedFrom");
if (GT_Mod.gregtechproxy.gt6Pipe) {
if (!aNBT.hasKey("mConnections"))
mCheckConnections = true;
mConnections = aNBT.getByte("mConnections");
}
}
@ -168,17 +163,7 @@ public class GT_MetaPipeEntity_Item extends MetaPipeEntity implements IMetaTileE
if (aBaseMetaTileEntity.isServerSide() && aTick % 10 == 0) {
if (aTick % mTickTime == 0) mTransferredItems = 0;
for (byte tSide = 0; tSide < 6; tSide++) {
ICoverable tBaseMetaTileEntity = aBaseMetaTileEntity.getTileEntityAtSide(tSide) instanceof ICoverable ? (ICoverable) aBaseMetaTileEntity.getTileEntityAtSide(tSide) : null;
byte uSide = GT_Utility.getOppositeSide(tSide);
if ((mCheckConnections || isConnectedAtSide(tSide)
|| aBaseMetaTileEntity.getCoverBehaviorAtSide(tSide).alwaysLookConnected(tSide, aBaseMetaTileEntity.getCoverIDAtSide(tSide), aBaseMetaTileEntity.getCoverDataAtSide(tSide), aBaseMetaTileEntity)
|| (tBaseMetaTileEntity != null && tBaseMetaTileEntity.getCoverBehaviorAtSide(uSide).alwaysLookConnected(uSide, tBaseMetaTileEntity.getCoverIDAtSide(uSide), tBaseMetaTileEntity.getCoverDataAtSide(uSide), tBaseMetaTileEntity)))
&& connect(tSide) == 0) {
disconnect(tSide);
}
}
if (GT_Mod.gregtechproxy.gt6Pipe) mCheckConnections = false;
if (!GT_Mod.gregtechproxy.gt6Pipe || mCheckConnections) checkConnections();
if (oLastReceivedFrom == mLastReceivedFrom) {
doTickProfilingInThisTick = false;
@ -221,58 +206,48 @@ public class GT_MetaPipeEntity_Item extends MetaPipeEntity implements IMetaTileE
}
@Override
public int connect(byte aSide) {
int rConnect = 0;
if (aSide >= 6) return rConnect;
TileEntity tTileEntity = getBaseMetaTileEntity().getTileEntityAtSide(aSide);
byte tSide = GT_Utility.getOppositeSide(aSide);
if (tTileEntity != null) {
boolean temp = GT_Utility.isConnectableNonInventoryPipe(tTileEntity, tSide);
if (tTileEntity instanceof IGregTechTileEntity) {
temp = true;
if (((IGregTechTileEntity) tTileEntity).getMetaTileEntity() == null) return rConnect;
if (getBaseMetaTileEntity().getColorization() >= 0) {
byte tColor = ((IGregTechTileEntity) tTileEntity).getColorization();
if (tColor >= 0 && tColor != getBaseMetaTileEntity().getColorization()) {
return rConnect;
}
public boolean letsIn(GT_CoverBehavior coverBehavior, byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
return coverBehavior.letsItemsIn(aSide, aCoverID, aCoverVariable, -1, aTileEntity);
}
@Override
public boolean letsOut(GT_CoverBehavior coverBehavior, byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
return coverBehavior.letsItemsOut(aSide, aCoverID, aCoverVariable, -1, aTileEntity);
}
if (((IGregTechTileEntity) tTileEntity).getMetaTileEntity().connectsToItemPipe(tSide)) {
rConnect = 1;
@Override
public boolean canConnect(byte aSide, TileEntity tTileEntity) {
if (tTileEntity == null) return false;
final byte tSide = GT_Utility.getOppositeSide(aSide);
boolean connectable = GT_Utility.isConnectableNonInventoryPipe(tTileEntity, tSide);
final IGregTechTileEntity gTileEntity = (tTileEntity instanceof IGregTechTileEntity) ? (IGregTechTileEntity) tTileEntity : null;
if (gTileEntity != null) {
if (gTileEntity.getMetaTileEntity() == null) return false;
if (gTileEntity.getMetaTileEntity().connectsToItemPipe(tSide)) return true;
connectable = true;
}
}
if (rConnect == 0) {
if (tTileEntity instanceof IInventory) {
temp = true;
if (((IInventory) tTileEntity).getSizeInventory() <= 0) {
return rConnect;
}
if (((IInventory) tTileEntity).getSizeInventory() <= 0) return false;
connectable = true;
}
if (tTileEntity instanceof ISidedInventory) {
temp = true;
int[] tSlots = ((ISidedInventory) tTileEntity).getAccessibleSlotsFromSide(tSide);
if (tSlots == null || tSlots.length <= 0) {
return rConnect;
}
if (tSlots == null || tSlots.length <= 0) return false;
connectable = true;
}
if (temp) {
if (getBaseMetaTileEntity().getCoverBehaviorAtSide(aSide).letsItemsIn(aSide, getBaseMetaTileEntity().getCoverIDAtSide(aSide), getBaseMetaTileEntity().getCoverDataAtSide(aSide), -1, getBaseMetaTileEntity())
|| getBaseMetaTileEntity().getCoverBehaviorAtSide(aSide).letsItemsOut(aSide, getBaseMetaTileEntity().getCoverIDAtSide(aSide), getBaseMetaTileEntity().getCoverDataAtSide(aSide), -1, getBaseMetaTileEntity())) {
rConnect = 1;
}
}
}
}
if (rConnect == 0) {
if (!getBaseMetaTileEntity().getWorld().getChunkProvider().chunkExists(getBaseMetaTileEntity().getOffsetX(aSide, 1) >> 4, getBaseMetaTileEntity().getOffsetZ(aSide, 1) >> 4)) { // if chunk unloaded
rConnect = -1;
}
return connectable;
}
if (rConnect > 0) {
super.connect(aSide);
@Override
public boolean getGT6StyleConnection() {
// Yes if GT6 pipes are enabled
return GT_Mod.gregtechproxy.gt6Pipe;
}
return rConnect;
}
@Override
public boolean incrementTransferCounter(int aIncrement) {

View file

@ -364,9 +364,11 @@ public class GT_Utility {
public static boolean isConnectableNonInventoryPipe(Object aTileEntity, int aSide) {
if (aTileEntity == null) return false;
checkAvailabilities();
if (TE_CHECK) if (aTileEntity instanceof IItemDuct) return true;
if (BC_CHECK) if (aTileEntity instanceof buildcraft.api.transport.IPipeTile)
if (TE_CHECK && aTileEntity instanceof IItemDuct) return true;
if (BC_CHECK && aTileEntity instanceof buildcraft.api.transport.IPipeTile)
return ((buildcraft.api.transport.IPipeTile) aTileEntity).isPipeConnected(ForgeDirection.getOrientation(aSide));
if (GregTech_API.mTranslocator && aTileEntity instanceof codechicken.translocator.TileItemTranslocator) return true;
return false;
}
/**

View file

@ -212,7 +212,8 @@ public abstract class GT_Proxy implements IGT_Mod, IGuiHandler, IFuelHandler {
public boolean enableGCOres = true;
public boolean enableUBOres = true;
public boolean gt6Pipe = true;
public boolean gt6Cable = false;
public boolean gt6Cable = true;
public boolean ic2EnergySourceCompat = true;
public boolean costlyCableConnection = false;
public boolean mMoreComplicatedChemicalRecipes = false;

View file

@ -87,6 +87,13 @@ public class GT_Block_Machines
}
}
public void onNeighborBlockChange(World aWorld, int aX, int aY, int aZ, Block aBlock) {
TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ);
if ((tTileEntity instanceof BaseMetaPipeEntity)) {
((BaseMetaPipeEntity) tTileEntity).onNeighborBlockChange(aX, aY, aZ);
}
}
public void onBlockAdded(World aWorld, int aX, int aY, int aZ) {
super.onBlockAdded(aWorld, aX, aY, aZ);
if (GregTech_API.isMachineBlock(this, aWorld.getBlockMetadata(aX, aY, aZ))) {

View file

@ -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)) {

View file

@ -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;
@ -18,13 +28,19 @@ 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;}
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;
@ -32,12 +48,18 @@ public class GT_Cover_Fluidfilter
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)))))) {
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());
int aFluid = tFluid.getFluidID();
aCoverVariable = (aCoverVariable & 7) | (aFluid << 3);
aTileEntity.setCoverDataAtSide(aSide, aCoverVariable);
@ -53,7 +75,6 @@ public class GT_Cover_Fluidfilter
GT_Utility.sendChatToPlayer(aPlayer, trans("047", "Filter Fluid: ") + sFluid.getLocalizedName());
}
}
}
return true;
}
return false;
@ -61,16 +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) {