aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlkalus <3060479+draknyte1@users.noreply.github.com>2019-03-14 04:01:09 +0000
committerAlkalus <3060479+draknyte1@users.noreply.github.com>2019-03-14 04:01:09 +0000
commit9149228fcabcb4080054a5e02bfbce6bc71bea26 (patch)
treefa833173c96e2957a6cc8d8954b47b897bc2811c
parentbd05cb931933a8c2475dc77e394d3db83d8b109b (diff)
downloadGT5-Unofficial-9149228fcabcb4080054a5e02bfbce6bc71bea26.tar.gz
GT5-Unofficial-9149228fcabcb4080054a5e02bfbce6bc71bea26.tar.bz2
GT5-Unofficial-9149228fcabcb4080054a5e02bfbce6bc71bea26.zip
+ Added Biocomposite Collector.
% Updated en_US.lang. $ Fixed recipe for Agricultural Sewer.
-rw-r--r--src/Java/gtPlusPlus/core/block/machine/Machine_PooCollector.java39
-rw-r--r--src/Java/gtPlusPlus/core/recipe/RECIPES_Machines.java2
-rw-r--r--src/Java/gtPlusPlus/core/recipe/common/CI.java5
-rw-r--r--src/Java/gtPlusPlus/core/tileentities/ModTileEntities.java1
-rw-r--r--src/Java/gtPlusPlus/core/tileentities/machines/TileEntityAdvPooCollector.java152
-rw-r--r--src/Java/gtPlusPlus/core/tileentities/machines/TileEntityBaseFluidCollector.java234
-rw-r--r--src/Java/gtPlusPlus/core/tileentities/machines/TileEntityPooCollector.java295
-rw-r--r--src/resources/assets/miscutils/lang/en_US.lang7
8 files changed, 524 insertions, 211 deletions
diff --git a/src/Java/gtPlusPlus/core/block/machine/Machine_PooCollector.java b/src/Java/gtPlusPlus/core/block/machine/Machine_PooCollector.java
index 7bb7ad51b9..bdeef2dd40 100644
--- a/src/Java/gtPlusPlus/core/block/machine/Machine_PooCollector.java
+++ b/src/Java/gtPlusPlus/core/block/machine/Machine_PooCollector.java
@@ -1,19 +1,26 @@
package gtPlusPlus.core.block.machine;
+import java.util.List;
+
import cpw.mods.fml.common.registry.GameRegistry;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import gtPlusPlus.core.creative.AddToCreativeTab;
+import gtPlusPlus.core.item.base.itemblock.ItemBlockMeta;
import gtPlusPlus.core.lib.CORE;
+import gtPlusPlus.core.tileentities.machines.TileEntityAdvPooCollector;
+import gtPlusPlus.core.tileentities.machines.TileEntityBaseFluidCollector;
import gtPlusPlus.core.tileentities.machines.TileEntityPooCollector;
-import gtPlusPlus.core.util.data.StringUtils;
+import gtPlusPlus.core.util.Utils;
import gtPlusPlus.core.util.minecraft.ItemUtils;
import gtPlusPlus.core.util.minecraft.PlayerUtils;
import net.minecraft.block.BlockContainer;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IIconRegister;
+import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.IIcon;
import net.minecraft.world.World;
@@ -29,7 +36,7 @@ public class Machine_PooCollector extends BlockContainer {
super(Material.iron);
this.setBlockName("blockPooCollector");
this.setCreativeTab(AddToCreativeTab.tabMachines);
- GameRegistry.registerBlock(this, "blockPooCollector");
+ GameRegistry.registerBlock(this, ItemBlockMeta.class,"blockPooCollector");
}
/**
@@ -57,7 +64,7 @@ public class Machine_PooCollector extends BlockContainer {
if (world.isRemote) {
return true;
} else {
- TileEntityPooCollector tank = (TileEntityPooCollector) world.getTileEntity(x, y, z);
+ TileEntityBaseFluidCollector tank = (TileEntityBaseFluidCollector) world.getTileEntity(x, y, z);
if (tank != null) {
Item handItem;
try {
@@ -121,8 +128,8 @@ public class Machine_PooCollector extends BlockContainer {
}
@Override
- public TileEntity createNewTileEntity(final World world, final int p_149915_2_) {
- return new TileEntityPooCollector();
+ public TileEntity createNewTileEntity(final World world, final int aMeta) {
+ return aMeta <= 7 ? new TileEntityPooCollector() : new TileEntityAdvPooCollector();
}
@Override
@@ -130,4 +137,26 @@ public class Machine_PooCollector extends BlockContainer {
super.onBlockAdded(world, x, y, z);
}
+ @Override
+ public int getBlockColor() {
+ // TODO Auto-generated method stub
+ return super.getBlockColor();
+ }
+
+ @Override
+ public int getRenderColor(int aMeta) {
+ if (aMeta <= 7) {
+ return super.getRenderColor(aMeta);
+ }
+ else {
+ return Utils.rgbtoHexValue(128, 45, 45);
+ }
+ }
+
+ @Override
+ public void getSubBlocks(Item aItem, CreativeTabs aTab, List aList) {
+ aList.add(new ItemStack(aItem, 1, 0));
+ aList.add(new ItemStack(aItem, 1, 8));
+ }
+
}
diff --git a/src/Java/gtPlusPlus/core/recipe/RECIPES_Machines.java b/src/Java/gtPlusPlus/core/recipe/RECIPES_Machines.java
index 1f7097afc9..d9b5f5dad2 100644
--- a/src/Java/gtPlusPlus/core/recipe/RECIPES_Machines.java
+++ b/src/Java/gtPlusPlus/core/recipe/RECIPES_Machines.java
@@ -360,7 +360,7 @@ public class RECIPES_Machines {
new ItemStack[] {
CI.machineHull_MV,
CI.getTieredComponent(OrePrefixes.circuit, 2, GTNH ? 4 : 2),
- CI.getTieredComponent(OrePrefixes.pipe, 2, GTNH ? 4 : 2),
+ CI.getTieredComponent(OrePrefixes.pipeMedium, 2, GTNH ? 4 : 2),
CI.getElectricPump(2, GTNH ? 4 : 2),
ALLOY.EGLIN_STEEL.getPlate(GTNH ? 8 : 4),
ALLOY.POTIN.getScrew(GTNH ? 12 : 6)
diff --git a/src/Java/gtPlusPlus/core/recipe/common/CI.java b/src/Java/gtPlusPlus/core/recipe/common/CI.java
index 42cb075400..35de9263c3 100644
--- a/src/Java/gtPlusPlus/core/recipe/common/CI.java
+++ b/src/Java/gtPlusPlus/core/recipe/common/CI.java
@@ -718,6 +718,11 @@ public class CI {
}
if (aPrefix == OrePrefixes.pipeTiny || aPrefix == OrePrefixes.pipeSmall || aPrefix == OrePrefixes.pipe || aPrefix == OrePrefixes.pipeMedium || aPrefix == OrePrefixes.pipeLarge || aPrefix == OrePrefixes.pipeHuge) {
+
+ if (aPrefix == OrePrefixes.pipe) {
+ aPrefix = OrePrefixes.pipeMedium;
+ }
+
if (aTier == 0) {
return ItemUtils.getOrePrefixStack(aPrefix, Materials.Lead, aAmount);
}
diff --git a/src/Java/gtPlusPlus/core/tileentities/ModTileEntities.java b/src/Java/gtPlusPlus/core/tileentities/ModTileEntities.java
index 8b6aa7c208..bb7004350d 100644
--- a/src/Java/gtPlusPlus/core/tileentities/ModTileEntities.java
+++ b/src/Java/gtPlusPlus/core/tileentities/ModTileEntities.java
@@ -15,6 +15,7 @@ public class ModTileEntities {
public static void init() {
Logger.INFO("Registering Tile Entities.");
GameRegistry.registerTileEntity(TileEntityPooCollector.class, "TileEntityPooCollector");
+ GameRegistry.registerTileEntity(TileEntityAdvPooCollector.class, "TileEntityAdvPooCollector");
GameRegistry.registerTileEntity(TileEntityWorkbench.class, "TileWorkbench");
GameRegistry.registerTileEntity(TileEntityWorkbenchAdvanced.class, "TileWorkbenchAdvanced");
GameRegistry.registerTileEntity(TileEntityFishTrap.class, "TileFishTrap");
diff --git a/src/Java/gtPlusPlus/core/tileentities/machines/TileEntityAdvPooCollector.java b/src/Java/gtPlusPlus/core/tileentities/machines/TileEntityAdvPooCollector.java
new file mode 100644
index 0000000000..237ea54e4c
--- /dev/null
+++ b/src/Java/gtPlusPlus/core/tileentities/machines/TileEntityAdvPooCollector.java
@@ -0,0 +1,152 @@
+package gtPlusPlus.core.tileentities.machines;
+
+import gtPlusPlus.api.objects.data.AutoMap;
+import gtPlusPlus.core.item.chemistry.AgriculturalChem;
+import gtPlusPlus.core.util.math.MathUtils;
+import gtPlusPlus.core.util.minecraft.ItemUtils;
+import net.minecraft.entity.item.EntityItem;
+import net.minecraft.entity.passive.EntityAnimal;
+import net.minecraft.entity.passive.EntityChicken;
+import net.minecraft.entity.passive.EntityCow;
+import net.minecraft.entity.passive.EntityHorse;
+import net.minecraft.entity.passive.EntityMooshroom;
+import net.minecraft.entity.passive.EntitySheep;
+import net.minecraft.entity.passive.EntityVillager;
+import net.minecraft.entity.passive.IAnimals;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraftforge.common.util.ForgeDirection;
+import net.minecraftforge.fluids.Fluid;
+
+public class TileEntityAdvPooCollector extends TileEntityBaseFluidCollector {
+
+ public TileEntityAdvPooCollector() {
+ super(18, 128000);
+ }
+
+
+ @Override
+ public boolean canFill(ForgeDirection from, Fluid fluid) {
+ return false;
+ }
+
+ @Override
+ public boolean canDrain(ForgeDirection from, Fluid fluid) {
+ return true;
+ }
+
+ public void onPreLogicTick() {
+
+ }
+
+ public <V> boolean addDrop(V aPooMaker) {
+ int aChance = MathUtils.randInt(0, 50000);
+ if (aChance > 0) {
+ ItemStack aPoop;
+ if (aChance<= 200) {
+ aPoop = ItemUtils.getItemStackOfAmountFromOreDict("dustManureByproducts", 1);
+ }
+ else if (aChance <= 1000) {
+ aPoop = ItemUtils.getItemStackOfAmountFromOreDict("dustSmallManureByproducts", 1);
+ }
+ else if (aChance <= 2000) {
+ aPoop = ItemUtils.getItemStackOfAmountFromOreDict("dustTinyManureByproducts", 1);
+ }
+ else {
+ return false;
+ }
+
+ //Add to inventory if not full, else espawn in world
+ if (!this.mInventory.addItemStack(aPoop)) {
+ EntityItem entity = new EntityItem(worldObj, xCoord, yCoord+1.5, zCoord, aPoop);
+ worldObj.spawnEntityInWorld(entity);
+ }
+
+ }
+
+
+ return false;
+ }
+
+ private static AutoMap<Class> aEntityToDrain = new AutoMap<Class>();
+
+ @Override
+ public AutoMap<Class> aThingsToLookFor() {
+ if (aEntityToDrain.isEmpty()) {
+ aEntityToDrain.add(EntityAnimal.class);
+ aEntityToDrain.add(IAnimals.class);
+ aEntityToDrain.add(EntityVillager.class);
+ aEntityToDrain.add(EntityPlayer.class);
+ }
+ return aEntityToDrain;
+ }
+
+ @Override
+ public <V> int onPostTick(V aPooMaker) {
+ if (this.tank.getFluidAmount() < this.tank.getCapacity()) {
+ int aPooAmount = 0;
+ // Vanilla Animals
+ if (aPooMaker instanceof EntityChicken) {
+ aPooAmount = MathUtils.randInt(1, 40);
+ }
+ else if (aPooMaker instanceof EntityHorse) {
+ aPooAmount = MathUtils.randInt(20, 40);
+ }
+ else if (aPooMaker instanceof EntityCow) {
+ aPooAmount = MathUtils.randInt(18, 45);
+ }
+ else if (aPooMaker instanceof EntityMooshroom) {
+ aPooAmount = 17;
+ }
+ else if (aPooMaker instanceof EntitySheep) {
+ aPooAmount = MathUtils.randInt(8, 30);
+ }
+
+ else {
+ if (aPooMaker instanceof EntityAnimal || aPooMaker instanceof IAnimals) {
+ aPooAmount = MathUtils.randInt(5, 35);
+ }
+ else if (aPooMaker instanceof EntityVillager) {
+ aPooAmount = MathUtils.randInt(25, 30);
+ }
+ else if (aPooMaker instanceof EntityPlayer) {
+ aPooAmount = MathUtils.randInt(1, 3);
+ }
+ else {
+ aPooAmount = MathUtils.randInt(1, 10);
+ }
+ }
+ aPooAmount = Math.max(Math.min(this.tank.getCapacity()-this.tank.getFluidAmount(), aPooAmount), 1);
+ return aPooAmount * 4;
+ }
+ else {
+ return 0;
+ }
+ }
+
+ @Override
+ public Fluid fluidToProvide() {
+ return AgriculturalChem.PoopJuice;
+ }
+
+ @Override
+ public Item itemToSpawnInWorldIfTankIsFull() {
+ int a = MathUtils.randInt(0, 75);
+ Item aItem = null;
+ if (a <= 30) {
+ aItem = AgriculturalChem.dustDirt;
+ }
+ else if (a <= 40) {
+ aItem = ItemUtils.getItemStackOfAmountFromOreDict("dustManureByproducts", 1).getItem();
+ }
+ else if (a <= 55) {
+ aItem = ItemUtils.getItemStackOfAmountFromOreDict("dustSmallManureByproducts", 1).getItem();
+ }
+ return aItem;
+ }
+
+
+
+
+}
diff --git a/src/Java/gtPlusPlus/core/tileentities/machines/TileEntityBaseFluidCollector.java b/src/Java/gtPlusPlus/core/tileentities/machines/TileEntityBaseFluidCollector.java
new file mode 100644
index 0000000000..0435c0a591
--- /dev/null
+++ b/src/Java/gtPlusPlus/core/tileentities/machines/TileEntityBaseFluidCollector.java
@@ -0,0 +1,234 @@
+package gtPlusPlus.core.tileentities.machines;
+
+import java.util.List;
+
+import gtPlusPlus.api.objects.data.AutoMap;
+import gtPlusPlus.api.objects.minecraft.BTF_FluidTank;
+import gtPlusPlus.api.objects.minecraft.BlockPos;
+import gtPlusPlus.core.tileentities.base.TileEntityBase;
+import gtPlusPlus.core.util.math.MathUtils;
+import gtPlusPlus.core.util.minecraft.FluidUtils;
+import gtPlusPlus.core.util.minecraft.ItemUtils;
+import net.minecraft.entity.item.EntityItem;
+import net.minecraft.entity.passive.EntityAnimal;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.network.NetworkManager;
+import net.minecraft.network.Packet;
+import net.minecraft.network.play.server.S35PacketUpdateTileEntity;
+import net.minecraft.util.AxisAlignedBB;
+import net.minecraft.world.World;
+import net.minecraft.world.chunk.Chunk;
+import net.minecraftforge.common.util.ForgeDirection;
+import net.minecraftforge.fluids.Fluid;
+import net.minecraftforge.fluids.FluidEvent;
+import net.minecraftforge.fluids.FluidStack;
+import net.minecraftforge.fluids.FluidTank;
+import net.minecraftforge.fluids.FluidTankInfo;
+import net.minecraftforge.fluids.IFluidHandler;
+
+public abstract class TileEntityBaseFluidCollector extends TileEntityBase implements IFluidHandler {
+
+ public final FluidTank tank;
+ private boolean needsUpdate = false;
+ private int updateTimer = 0;
+ private long internalTickCounter = 0;
+ private BlockPos internalBlockLocation;
+
+ public TileEntityBaseFluidCollector(int aInvSlotCount, int aTankCapcity) {
+ super(aInvSlotCount);
+ tank = new BTF_FluidTank(aTankCapcity);
+ }
+
+ @Override
+ public final int fill(ForgeDirection from, FluidStack resource, boolean doFill) {
+ needsUpdate = true;
+ return this.tank.fill(resource, doFill);
+ }
+
+ @Override
+ public final FluidStack drain(ForgeDirection from, FluidStack resource, boolean doDrain) {
+ needsUpdate = true;
+ return this.tank.drain(resource.amount, doDrain);
+ }
+
+ @Override
+ public final FluidStack drain(ForgeDirection from, int maxDrain, boolean doDrain) {
+ needsUpdate = true;
+ FluidStack fluid = this.tank.getFluid();
+ // return this.tank.drain(maxDrain, doDrain);
+ if (fluid == null) {
+ return null;
+ }
+
+ int drained = maxDrain;
+ if (fluid.amount < drained) {
+ drained = fluid.amount;
+ }
+
+ FluidStack stack = new FluidStack(fluid, drained);
+ if (doDrain) {
+ fluid.amount -= drained;
+ if (fluid.amount <= 0) {
+ fluid = null;
+ }
+
+ if (this != null) {
+ FluidEvent.fireEvent(new FluidEvent.FluidDrainingEvent(fluid, this.getWorldObj(), this.xCoord,
+ this.yCoord, this.zCoord, this.tank, 0));
+ }
+ }
+ return stack;
+ }
+
+ @Override
+ public boolean canFill(ForgeDirection from, Fluid fluid) {
+ return false;
+ }
+
+ @Override
+ public boolean canDrain(ForgeDirection from, Fluid fluid) {
+ return true;
+ }
+
+ @Override
+ public final FluidTankInfo[] getTankInfo(ForgeDirection from) {
+ return new FluidTankInfo[] { this.tank.getInfo() };
+ }
+
+ @Override
+ public final void updateEntity() {
+
+ onPreLogicTick();
+ logicTick();
+
+ if (needsUpdate) {
+ if (updateTimer == 0) {
+ updateTimer = 10; // every 10 ticks it will send an update
+ } else {
+ --updateTimer;
+ if (updateTimer == 0) {
+ worldObj.markBlockForUpdate(xCoord, yCoord, zCoord);
+ needsUpdate = false;
+ }
+ }
+ }
+ }
+
+ @Override
+ public void readFromNBT(NBTTagCompound tag) {
+ tank.readFromNBT(tag);
+ super.readFromNBT(tag);
+ }
+
+ @Override
+ public void writeToNBT(NBTTagCompound tag) {
+ tank.writeToNBT(tag);
+ super.writeToNBT(tag);
+ }
+
+ @Override
+ public final Packet getDescriptionPacket() {
+ NBTTagCompound tag = new NBTTagCompound();
+ writeToNBT(tag);
+ return new S35PacketUpdateTileEntity(this.xCoord, this.yCoord, this.zCoord, this.blockMetadata, tag);
+ }
+
+ @Override
+ public final void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt) {
+ NBTTagCompound tag = pkt.func_148857_g();
+ readFromNBT(tag);
+ }
+
+ public abstract AutoMap<Class> aThingsToLookFor();
+
+ public abstract void onPreLogicTick();
+
+ public final void logicTick() {
+
+ if (this.worldObj == null || this.worldObj.isRemote) {
+ return;
+ }
+ if (internalTickCounter % MathUtils.randInt(200, 300) == 0) {
+ if (internalBlockLocation == null) {
+ internalBlockLocation = new BlockPos(this);
+ }
+ BlockPos p = internalBlockLocation;
+ if (p != null) {
+ if (p.world != null) {
+ World w = this.worldObj;
+ if (w == null) {
+ return;
+ }
+ Chunk c = w.getChunkFromBlockCoords(p.xPos, p.zPos);
+ if (c != null) {
+ if (c.isChunkLoaded) {
+ int startX = p.xPos - 2;
+ int startY = p.yPos;
+ int startZ = p.zPos - 2;
+ int endX = p.xPos + 3;
+ int endY = p.yPos + 5;
+ int endZ = p.zPos + 3;
+ AxisAlignedBB box = AxisAlignedBB.getBoundingBox(startX, startY, startZ, endX, endY, endZ);
+ if (box != null) {
+ for (Class c2 : aThingsToLookFor()) {
+ tickEntityType(w, box, c2);
+ }
+ } else {
+ return;
+ }
+ }
+ }
+ }
+ }
+
+ }
+
+ internalTickCounter++;
+ }
+
+ @SuppressWarnings("unchecked")
+ public final void tickEntityType(World w, AxisAlignedBB box, Class aClassToFind) {
+ List<EntityAnimal> entities = w.getEntitiesWithinAABB(aClassToFind, box);
+ if (entities != null && !entities.isEmpty()) {
+ onPostTick(entities);
+ }
+ }
+
+ public final <V> void interactWithEntities(List<V> entities) {
+ for (V aEntity : entities) {
+ addDrop(aEntity);
+ if (this.tank.getFluidAmount() < this.tank.getCapacity()) {
+ int aFluidAmount = onPostTick(aEntity);
+ aFluidAmount = Math.max(Math.min(this.tank.getCapacity()-this.tank.getFluidAmount(), aFluidAmount), 1);
+ this.tank.fill(FluidUtils.getFluidStack(fluidToProvide(), aFluidAmount), true);
+ }
+ else {
+ ItemStack aDirtStack = ItemUtils.getSimpleStack(itemToSpawnInWorldIfTankIsFull());
+ if (!this.mInventory.addItemStack(aDirtStack)) {
+ EntityItem entity = new EntityItem(worldObj, xCoord, yCoord+1.5, zCoord, aDirtStack);
+ worldObj.spawnEntityInWorld(entity);
+ }
+ }
+ }
+ }
+
+
+ /**
+ * Return the amount of fluid for this entity type
+ * @param aEntity
+ * @return
+ */
+ public abstract <V> int onPostTick(V aEntity);
+
+ public abstract <V> boolean addDrop(V aPooMaker);
+
+ public abstract Fluid fluidToProvide();
+
+ public abstract Item itemToSpawnInWorldIfTankIsFull();
+
+
+
+
+}
diff --git a/src/Java/gtPlusPlus/core/tileentities/machines/TileEntityPooCollector.java b/src/Java/gtPlusPlus/core/tileentities/machines/TileEntityPooCollector.java
index 9c6dc580b6..b14e7d80b1 100644
--- a/src/Java/gtPlusPlus/core/tileentities/machines/TileEntityPooCollector.java
+++ b/src/Java/gtPlusPlus/core/tileentities/machines/TileEntityPooCollector.java
@@ -1,14 +1,8 @@
package gtPlusPlus.core.tileentities.machines;
-import java.util.List;
-
-import gtPlusPlus.api.objects.Logger;
-import gtPlusPlus.api.objects.minecraft.BTF_FluidTank;
-import gtPlusPlus.api.objects.minecraft.BlockPos;
+import gtPlusPlus.api.objects.data.AutoMap;
import gtPlusPlus.core.item.chemistry.AgriculturalChem;
-import gtPlusPlus.core.tileentities.base.TileEntityBase;
import gtPlusPlus.core.util.math.MathUtils;
-import gtPlusPlus.core.util.minecraft.FluidUtils;
import gtPlusPlus.core.util.minecraft.ItemUtils;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.passive.EntityAnimal;
@@ -17,75 +11,20 @@ import net.minecraft.entity.passive.EntityCow;
import net.minecraft.entity.passive.EntityHorse;
import net.minecraft.entity.passive.EntityMooshroom;
import net.minecraft.entity.passive.EntitySheep;
+import net.minecraft.entity.passive.EntityVillager;
+import net.minecraft.entity.passive.IAnimals;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
-import net.minecraft.nbt.NBTTagCompound;
-import net.minecraft.network.NetworkManager;
-import net.minecraft.network.Packet;
-import net.minecraft.network.play.server.S35PacketUpdateTileEntity;
-import net.minecraft.util.AxisAlignedBB;
-import net.minecraft.world.World;
-import net.minecraft.world.chunk.Chunk;
import net.minecraftforge.common.util.ForgeDirection;
import net.minecraftforge.fluids.Fluid;
-import net.minecraftforge.fluids.FluidEvent;
-import net.minecraftforge.fluids.FluidStack;
-import net.minecraftforge.fluids.FluidTank;
-import net.minecraftforge.fluids.FluidTankInfo;
-import net.minecraftforge.fluids.IFluidHandler;
-
-public class TileEntityPooCollector extends TileEntityBase implements IFluidHandler {
- public FluidTank tank = new BTF_FluidTank(64000);
- private boolean needsUpdate = false;
- private int updateTimer = 0;
- private boolean hasRegistered = false;
- private long internalTickCounter = 0;
- private BlockPos internalBlockLocation;
+public class TileEntityPooCollector extends TileEntityBaseFluidCollector {
public TileEntityPooCollector() {
- super(9);
- }
-
- @Override
- public int fill(ForgeDirection from, FluidStack resource, boolean doFill) {
- needsUpdate = true;
- return this.tank.fill(resource, doFill);
- }
-
- @Override
- public FluidStack drain(ForgeDirection from, FluidStack resource, boolean doDrain) {
- needsUpdate = true;
- return this.tank.drain(resource.amount, doDrain);
+ super(9, 64000);
}
- @Override
- public FluidStack drain(ForgeDirection from, int maxDrain, boolean doDrain) {
- needsUpdate = true;
- FluidStack fluid = this.tank.getFluid();
- // return this.tank.drain(maxDrain, doDrain);
- if (fluid == null) {
- return null;
- }
-
- int drained = maxDrain;
- if (fluid.amount < drained) {
- drained = fluid.amount;
- }
-
- FluidStack stack = new FluidStack(fluid, drained);
- if (doDrain) {
- fluid.amount -= drained;
- if (fluid.amount <= 0) {
- fluid = null;
- }
-
- if (this != null) {
- FluidEvent.fireEvent(new FluidEvent.FluidDrainingEvent(fluid, this.getWorldObj(), this.xCoord,
- this.yCoord, this.zCoord, this.tank, 0));
- }
- }
- return stack;
- }
@Override
public boolean canFill(ForgeDirection from, Fluid fluid) {
@@ -96,144 +35,12 @@ public class TileEntityPooCollector extends TileEntityBase implements IFluidHand
public boolean canDrain(ForgeDirection from, Fluid fluid) {
return true;
}
-
- @Override
- public FluidTankInfo[] getTankInfo(ForgeDirection from) {
- return new FluidTankInfo[] { this.tank.getInfo() };
- }
-
- @Override
- public void updateEntity() {
- onPreTick();
- onTick();
- }
-
- @Override
- public void readFromNBT(NBTTagCompound tag) {
- tank.readFromNBT(tag);
- super.readFromNBT(tag);
- }
-
- @Override
- public void writeToNBT(NBTTagCompound tag) {
- tank.writeToNBT(tag);
- super.writeToNBT(tag);
- }
-
- @Override
- public Packet getDescriptionPacket() {
- NBTTagCompound tag = new NBTTagCompound();
- writeToNBT(tag);
- return new S35PacketUpdateTileEntity(this.xCoord, this.yCoord, this.zCoord, this.blockMetadata, tag);
- }
-
- @Override
- public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt) {
- NBTTagCompound tag = pkt.func_148857_g();
- readFromNBT(tag);
- }
- public void onPreTick() {
- if (needsUpdate) {
- if (updateTimer == 0) {
- updateTimer = 10; // every 10 ticks it will send an update
- } else {
- --updateTimer;
- if (updateTimer == 0) {
- worldObj.markBlockForUpdate(xCoord, yCoord, zCoord);
- needsUpdate = false;
- }
- }
- }
- }
-
- public void onTick() {
-
- if (this.worldObj == null || this.worldObj.isRemote) {
- return;
- }
- if (internalTickCounter % MathUtils.randInt(200, 300) == 0) {
- if (internalBlockLocation == null) {
- internalBlockLocation = new BlockPos(this);
- }
- BlockPos p = internalBlockLocation;
- if (p != null) {
- if (p.world != null) {
- World w = this.worldObj;
- if (w == null) {
- return;
- }
- Chunk c = w.getChunkFromBlockCoords(p.xPos, p.zPos);
- if (c != null) {
- if (c.isChunkLoaded) {
- int startX = p.xPos - 2;
- int startY = p.yPos;
- int startZ = p.zPos - 2;
- int endX = p.xPos + 3;
- int endY = p.yPos + 5;
- int endZ = p.zPos + 3;
- AxisAlignedBB box = AxisAlignedBB.getBoundingBox(startX, startY, startZ, endX, endY, endZ);
- if (box != null) {
- @SuppressWarnings("unchecked")
- List<EntityAnimal> animals = w.getEntitiesWithinAABB(EntityAnimal.class, box);
- if (animals != null && !animals.isEmpty()) {
- onPostTick(animals);
- }
- } else {
- return;
- }
- }
- }
- }
- }
-
- }
-
- internalTickCounter++;
- }
-
- public void onPostTick(List<EntityAnimal> animals) {
- for (EntityAnimal aPooMaker : animals) {
- //Logger.INFO("Sewer found "+aPooMaker.getCommandSenderName());
- addDrop(aPooMaker);
- if (this.tank.getFluidAmount() < this.tank.getCapacity()) {
-
- int aPooAmount = 0;
- if (aPooMaker instanceof EntityChicken) {
- aPooAmount = MathUtils.randInt(1, 40);
- }
- else if (aPooMaker instanceof EntityHorse) {
- aPooAmount = MathUtils.randInt(20, 40);
- }
- else if (aPooMaker instanceof EntityCow) {
- aPooAmount = MathUtils.randInt(18, 45);
- }
- else if (aPooMaker instanceof EntityMooshroom) {
- aPooAmount = 17;
- }
- else if (aPooMaker instanceof EntitySheep) {
- aPooAmount = MathUtils.randInt(8, 30);
- }
- else {
- aPooAmount = MathUtils.randInt(5, 35);
- }
-
- aPooAmount = Math.max(Math.min(this.tank.getCapacity()-this.tank.getFluidAmount(), aPooAmount), 1);
-
- this.tank.fill(FluidUtils.getFluidStack(AgriculturalChem.PoopJuice, aPooAmount), true);
- }
- else {
- ItemStack aDirtStack = ItemUtils.getSimpleStack(AgriculturalChem.dustDirt);
- if (!this.mInventory.addItemStack(aDirtStack)) {
- EntityItem entity = new EntityItem(worldObj, xCoord, yCoord+1.5, zCoord, aDirtStack);
- worldObj.spawnEntityInWorld(entity);
- }
- }
- }
+ public void onPreLogicTick() {
}
-
- public boolean addDrop(EntityAnimal aAnimal) {
+
+ public <V> boolean addDrop(V aPooMaker) {
int aChance = MathUtils.randInt(0, 50000);
if (aChance > 0) {
ItemStack aPoop;
@@ -250,7 +57,7 @@ public class TileEntityPooCollector extends TileEntityBase implements IFluidHand
return false;
}
//Add poop to world
- Logger.INFO("Adding animal waste for "+aAnimal.getCommandSenderName());
+ //Logger.INFO("Adding animal waste for "+aPooMaker.getCommandSenderName());
//Add to inventory if not full, else espawn in world
if (!this.mInventory.addItemStack(aPoop)) {
@@ -264,4 +71,84 @@ public class TileEntityPooCollector extends TileEntityBase implements IFluidHand
return false;
}
+ private static AutoMap<Class> aEntityToDrain = new AutoMap<Class>();
+
+ @Override
+ public AutoMap<Class> aThingsToLookFor() {
+ if (aEntityToDrain.isEmpty()) {
+ aEntityToDrain.add(EntityAnimal.class);
+ aEntityToDrain.add(IAnimals.class);
+ aEntityToDrain.add(EntityVillager.class);
+ aEntityToDrain.add(EntityPlayer.class);
+ }
+ return aEntityToDrain;
+ }
+
+ @Override
+ public <V> int onPostTick(V aPooMaker) {
+ if (this.tank.getFluidAmount() < this.tank.getCapacity()) {
+ int aPooAmount = 0;
+ // Vanilla Animals
+ if (aPooMaker instanceof EntityChicken) {
+ aPooAmount = MathUtils.randInt(1, 40);
+ }
+ else if (aPooMaker instanceof EntityHorse) {
+ aPooAmount = MathUtils.randInt(20, 40);
+ }
+ else if (aPooMaker instanceof EntityCow) {
+ aPooAmount = MathUtils.randInt(18, 45);
+ }
+ else if (aPooMaker instanceof EntityMooshroom) {
+ aPooAmount = 17;
+ }
+ else if (aPooMaker instanceof EntitySheep) {
+ aPooAmount = MathUtils.randInt(8, 30);
+ }
+
+ else {
+ if (aPooMaker instanceof EntityAnimal || aPooMaker instanceof IAnimals) {
+ aPooAmount = MathUtils.randInt(5, 35);
+ }
+ else if (aPooMaker instanceof EntityVillager) {
+ aPooAmount = MathUtils.randInt(25, 30);
+ }
+ else if (aPooMaker instanceof EntityPlayer) {
+ aPooAmount = MathUtils.randInt(1, 3);
+ }
+ else {
+ aPooAmount = MathUtils.randInt(1, 10);
+ }
+ }
+ aPooAmount = Math.max(Math.min(this.tank.getCapacity()-this.tank.getFluidAmount(), aPooAmount), 1);
+ return aPooAmount;
+ }
+ else {
+ return 0;
+ }
+ }
+
+ @Override
+ public Fluid fluidToProvide() {
+ return AgriculturalChem.PoopJuice;
+ }
+
+ @Override
+ public Item itemToSpawnInWorldIfTankIsFull() {
+ int a = MathUtils.randInt(0, 100);
+ Item aItem = null;
+ if (a <= 30) {
+ aItem = AgriculturalChem.dustDirt;
+ }
+ else if (a <= 40) {
+ aItem = ItemUtils.getItemStackOfAmountFromOreDict("dustSmallManureByproducts", 1).getItem();
+ }
+ else if (a <= 55) {
+ aItem = ItemUtils.getItemStackOfAmountFromOreDict("dustTinyManureByproducts", 1).getItem();
+ }
+ return aItem;
+ }
+
+
+
+
}
diff --git a/src/resources/assets/miscutils/lang/en_US.lang b/src/resources/assets/miscutils/lang/en_US.lang
index ffb78859ff..acc772031e 100644
--- a/src/resources/assets/miscutils/lang/en_US.lang
+++ b/src/resources/assets/miscutils/lang/en_US.lang
@@ -2725,4 +2725,9 @@ item.FertileManureSlurry.name=Cell of Fertile Slurry
item.itemDustTinyDemicheleiteBr.name=Tiny Pile of Demicheleite (Br)
item.itemDustSmallDemicheleiteBr.name=Small Pile of Demicheleite (Br)
tile.blockPooCollector.name=Agricultural Sewer
-tile.Block of Lithium 7.name=Block of Lithium 7 \ No newline at end of file
+tile.Block of Lithium 7.name=Block of Lithium 7
+
+//Added 14/3/19
+item.blood.name=Cell of Blood
+tile.blockPooCollector.0.name=Agricultural Sewer
+tile.blockPooCollector.8.name=Biocomposite Collector \ No newline at end of file