flash! bam! alakazam!

This commit is contained in:
Bob 2024-03-17 17:31:50 +01:00
parent 2a9ee72cc4
commit 9cf673206a
23 changed files with 651 additions and 429 deletions

View File

@ -2,6 +2,10 @@
* More axes
* Bismuth, volcanic, chlorophyte and mese tool materials now have axes
* Axes also double as offensive weapons, being a lot more powerful than their pickaxe counterparts
* Drainage pipe
* Spills fluid, allowing to void up to 1.000mB per tick
* Might slightly alter the landscape, depending on whether the fluid was poisonous
* Viscous, flammable liquids cause oil spill blocks to appear
## Changed
* After three quarters of a decade, three separate models, countless rebalances and hours of senseless yapping, the industrial generator has finally met its end. Suddenly, yet not unsurprisingly, on this here day the industrial generator has closed its eyes for the final time. It was a long and eventful journey, but as with all things in life, it too had to come to an end.
@ -29,3 +33,5 @@
* Fixed the "Hold shift for more info" line appearing on fluid info when shift is held, and disappearing otherwise
* Fixed smokestacks being able to void any fluid under certain conditions
* Fixed the hydrotreater only using half as much crude oil per operation as it should
* Fixed the old launchpad printing the wrong message when successfully launched via detonator
* Oil spills should no longer save, fixing an issue where chunkloaded derricks would constantly spill oil entities into unloaded chunks, causing them to get stuck

View File

@ -806,6 +806,7 @@ public class ModBlocks {
public static Block fluid_duct_exhaust;
public static Block fluid_valve;
public static Block fluid_switch;
public static Block machine_drain;
public static Block radio_torch_sender;
public static Block radio_torch_receiver;
public static Block radio_torch_counter;
@ -952,7 +953,6 @@ public class ModBlocks {
public static Block dfc_core;
public static Block machine_converter_he_rf;
public static final int guiID_converter_he_rf = 28;
public static Block machine_converter_rf_he;
public static Block machine_schrabidium_transmutator;
@ -1972,6 +1972,7 @@ public class ModBlocks {
fluid_duct_gauge = new FluidDuctGauge().setBlockName("fluid_duct_gauge").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab);
fluid_valve = new FluidValve(Material.iron).setBlockName("fluid_valve").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab);
fluid_switch = new FluidSwitch(Material.iron).setBlockName("fluid_switch").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab);
machine_drain = new MachineDrain(Material.iron).setBlockName("machine_drain").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":concrete");
radio_torch_sender = new RadioTorchSender().setBlockName("radio_torch_sender").setHardness(0.1F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab);
radio_torch_receiver = new RadioTorchReceiver().setBlockName("radio_torch_receiver").setHardness(0.1F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab);
radio_torch_counter = new RadioTorchCounter().setBlockName("radio_torch_counter").setHardness(0.1F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":rtty_counter");
@ -3262,6 +3263,7 @@ public class ModBlocks {
GameRegistry.registerBlock(fluid_duct_solid, fluid_duct_solid.getUnlocalizedName());
register(fluid_valve);
register(fluid_switch);
register(machine_drain);
register(radio_torch_sender);
register(radio_torch_receiver);
register(radio_torch_counter);

View File

@ -101,6 +101,8 @@ public class BlockLayering extends Block {
public boolean isReplaceable(IBlockAccess world, int x, int y, int z) {
if(this == ModBlocks.leaves_layer) return true;
if(this == ModBlocks.oil_spill) return true;
if(this == ModBlocks.foam_layer) return true;
int meta = world.getBlockMetadata(x, y, z);
return meta >= 7 ? false : blockMaterial.isReplaceable();
}

View File

@ -0,0 +1,86 @@
package com.hbm.blocks.machine;
import java.util.ArrayList;
import java.util.List;
import com.hbm.blocks.BlockDummyable;
import com.hbm.blocks.ILookOverlay;
import com.hbm.inventory.fluid.FluidType;
import com.hbm.items.machine.IItemFluidIdentifier;
import com.hbm.tileentity.machine.TileEntityMachineDrain;
import com.hbm.util.I18nUtil;
import net.minecraft.block.material.Material;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ChatComponentText;
import net.minecraft.util.ChatComponentTranslation;
import net.minecraft.util.ChatStyle;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.world.World;
import net.minecraftforge.client.event.RenderGameOverlayEvent.Pre;
public class MachineDrain extends BlockDummyable implements ILookOverlay {
public MachineDrain(Material mat) {
super(mat);
}
@Override
public TileEntity createNewTileEntity(World world, int meta) {
if(meta >= 12) return new TileEntityMachineDrain();
return null;
}
@Override
public int[] getDimensions() {
return new int[] {0, 0, 2, 0, 0, 0};
}
@Override
public int getOffset() {
return 0;
}
@Override
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) {
if(!world.isRemote && !player.isSneaking()) {
if(player.getHeldItem() != null && player.getHeldItem().getItem() instanceof IItemFluidIdentifier) {
int[] pos = this.findCore(world, x, y, z);
if(pos == null) return false;
TileEntity te = world.getTileEntity(pos[0], pos[1], pos[2]);
if(!(te instanceof TileEntityMachineDrain)) return false;
TileEntityMachineDrain drain = (TileEntityMachineDrain) te;
FluidType type = ((IItemFluidIdentifier) player.getHeldItem().getItem()).getType(world, pos[0], pos[1], pos[2], player.getHeldItem());
drain.tank.setTankType(type);
drain.markDirty();
player.addChatComponentMessage(new ChatComponentText("Changed type to ").setChatStyle(new ChatStyle().setColor(EnumChatFormatting.YELLOW)).appendSibling(new ChatComponentTranslation(type.getConditionalName())).appendSibling(new ChatComponentText("!")));
return true;
}
return false;
} else {
return true;
}
}
@Override
public void printHook(Pre event, World world, int x, int y, int z) {
int[] pos = this.findCore(world, x, y, z);
if(pos == null) return;
TileEntity te = world.getTileEntity(pos[0], pos[1], pos[2]);
if(!(te instanceof TileEntityMachineDrain)) return;
TileEntityMachineDrain drain = (TileEntityMachineDrain) te;
List<String> text = new ArrayList();
text.add(EnumChatFormatting.GREEN + "-> " + EnumChatFormatting.RESET + drain.tank.getTankType().getLocalizedName() + ": " + drain.tank.getFill() + "/" + drain.tank.getMaxFill() + "mB");
ILookOverlay.printGeneric(event, I18nUtil.resolveKey(getUnlocalizedName() + ".name"), 0xffff00, 0x404000, text);
}
}

View File

@ -1,81 +0,0 @@
package com.hbm.blocks.network;
import com.hbm.tileentity.conductor.TileEntityRFDuct;
import net.minecraft.block.BlockContainer;
import net.minecraft.block.material.Material;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
public class BlockRFCable extends BlockContainer {
public BlockRFCable(Material p_i45386_1_) {
super(p_i45386_1_);
float p = 1F/16F;
this.setBlockBounds(11 * p / 2, 11 * p / 2, 11 * p / 2, 1 - 11 * p / 2, 1 - 11 * p / 2, 1 - 11 * p / 2);
this.useNeighborBrightness = true;
}
@Override
public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int x, int y, int z) {
if(world.getTileEntity(x, y, z) instanceof TileEntityRFDuct) {
TileEntityRFDuct cable = (TileEntityRFDuct)world.getTileEntity(x, y, z);
if(cable != null)
{
float p = 1F/16F;
float minX = 11 * p / 2 - (cable.connections[5] != null ? (11 * p / 2) : 0);
float minY = 11 * p / 2 - (cable.connections[1] != null ? (11 * p / 2) : 0);
float minZ = 11 * p / 2 - (cable.connections[2] != null ? (11 * p / 2) : 0);
float maxX = 1 - 11 * p / 2 + (cable.connections[3] != null ? (11 * p / 2) : 0);
float maxY = 1 - 11 * p / 2 + (cable.connections[0] != null ? (11 * p / 2) : 0);
float maxZ = 1 - 11 * p / 2 + (cable.connections[4] != null ? (11 * p / 2) : 0);
this.setBlockBounds(minX, minY, minZ, maxX, maxY, maxZ);
}
}
return AxisAlignedBB.getBoundingBox(x + this.minX, y + this.minY, z + this.minZ, x + this.maxX, y + this.maxY, z + this.maxZ);
}
@Override
public void setBlockBoundsBasedOnState(IBlockAccess world, int x, int y, int z) {
if(world.getTileEntity(x, y, z) instanceof TileEntityRFDuct) {
TileEntityRFDuct cable = (TileEntityRFDuct)world.getTileEntity(x, y, z);
if(cable != null)
{
float p = 1F/16F;
float minX = 11 * p / 2 - (cable.connections[5] != null ? (11 * p / 2) : 0);
float minY = 11 * p / 2 - (cable.connections[1] != null ? (11 * p / 2) : 0);
float minZ = 11 * p / 2 - (cable.connections[2] != null ? (11 * p / 2) : 0);
float maxX = 1 - 11 * p / 2 + (cable.connections[3] != null ? (11 * p / 2) : 0);
float maxY = 1 - 11 * p / 2 + (cable.connections[0] != null ? (11 * p / 2) : 0);
float maxZ = 1 - 11 * p / 2 + (cable.connections[4] != null ? (11 * p / 2) : 0);
this.setBlockBounds(minX, minY, minZ, maxX, maxY, maxZ);
}
}
}
@Override
public TileEntity createNewTileEntity(World p_149915_1_, int p_149915_2_) {
return new TileEntityRFDuct(10000);
}
@Override
public int getRenderType(){
return -1;
}
@Override
public boolean isOpaqueCube() {
return false;
}
@Override
public boolean renderAsNormalBlock() {
return false;
}
}

View File

@ -3,47 +3,54 @@ package com.hbm.entity.projectile;
import com.hbm.entity.particle.EntityOilSpillFX;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.projectile.EntityThrowable;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.world.World;
public class EntityOilSpill extends EntityThrowable {
public EntityOilSpill(World p_i1773_1_)
{
super(p_i1773_1_);
}
public EntityOilSpill(World p_i1773_1_) {
super(p_i1773_1_);
}
public EntityOilSpill(World p_i1774_1_, EntityLivingBase p_i1774_2_)
{
super(p_i1774_1_, p_i1774_2_);
}
public EntityOilSpill(World p_i1774_1_, EntityLivingBase p_i1774_2_) {
super(p_i1774_1_, p_i1774_2_);
}
@Override
public void entityInit() {
}
@Override
public void entityInit() { }
public EntityOilSpill(World p_i1775_1_, double p_i1775_2_, double p_i1775_4_, double p_i1775_6_)
{
super(p_i1775_1_, p_i1775_2_, p_i1775_4_, p_i1775_6_);
}
@Override
public void onUpdate() {
super.onUpdate();
if(!worldObj.isRemote) {
worldObj.spawnEntityInWorld(new EntityOilSpillFX(worldObj, this.posX, this.posY, this.posZ, 0.0, 0.0, 0.0));
if(this.isBurning()) {
this.setDead();
worldObj.createExplosion(null, posX, posY, posZ, 1.5F, true);
}
}
}
public EntityOilSpill(World p_i1775_1_, double p_i1775_2_, double p_i1775_4_, double p_i1775_6_) {
super(p_i1775_1_, p_i1775_2_, p_i1775_4_, p_i1775_6_);
}
@Override
protected void onImpact(MovingObjectPosition p_70184_1_)
{
if(this.ticksExisted > 5) {
this.setDead();
}
}
@Override
public void onUpdate() {
super.onUpdate();
if(!worldObj.isRemote) {
worldObj.spawnEntityInWorld(new EntityOilSpillFX(worldObj, this.posX, this.posY, this.posZ, 0.0, 0.0, 0.0));
if(this.isBurning()) {
this.setDead();
worldObj.createExplosion(null, posX, posY, posZ, 1.5F, true);
}
}
}
@Override
protected void onImpact(MovingObjectPosition p_70184_1_) {
if(this.ticksExisted > 5) {
this.setDead();
}
}
@Override
public boolean writeToNBTOptional(NBTTagCompound nbt) {
return false;
}
@Override
public void readEntityFromNBT(NBTTagCompound nbt) {
super.readEntityFromNBT(nbt);
this.setDead();
}
}

View File

@ -202,7 +202,11 @@ public class Fluids {
/* Original baseline for leaded fuels */
public static final float LEAD_FUEL = PollutionHandler.HEAVY_METAL_PER_SECOND * 0.025F;
/* Poison stat for most petrochemicals */
public static final float POISON_OIL = PollutionHandler.POISON_PER_SECOND * 0.025F;
public static final float POISON_OIL = PollutionHandler.POISON_PER_SECOND * 0.0025F;
/* Poison stat for horrible chemicals like red mud or phosgene */
public static final float POISON_EXTREME = PollutionHandler.POISON_PER_SECOND * 0.025F;
/* Poison stat for mostly inert things like carbon dioxide */
public static final float POISON_MINOR = PollutionHandler.POISON_PER_SECOND * 0.001F;
public static final FT_Polluting P_OIL = new FT_Polluting().burn(PollutionType.SOOT, SOOT_UNREFINED_OIL).release(PollutionType.POISON, POISON_OIL);
public static final FT_Polluting P_FUEL = new FT_Polluting().burn(PollutionType.SOOT, SOOT_REFINED_OIL).release(PollutionType.POISON, POISON_OIL);
@ -261,7 +265,7 @@ public class Fluids {
AMAT = new FluidType("AMAT", 0x010101, 5, 0, 5, EnumSymbol.ANTIMATTER).addTraits(ANTI, GASEOUS);
ASCHRAB = new FluidType("ASCHRAB", 0xb50000, 5, 0, 5, EnumSymbol.ANTIMATTER).addTraits(ANTI, GASEOUS);
ACID = new FluidType("ACID", 0xfff7aa, 3, 0, 3, EnumSymbol.OXIDIZER).addTraits(new FT_Corrosive(40), LIQUID);
WATZ = new FluidType("WATZ", 0x86653E, 4, 0, 3, EnumSymbol.ACID).addTraits(new FT_Corrosive(60), new FT_VentRadiation(0.1F), LIQUID, VISCOUS);
WATZ = new FluidType("WATZ", 0x86653E, 4, 0, 3, EnumSymbol.ACID).addTraits(new FT_Corrosive(60), new FT_VentRadiation(0.1F), LIQUID, VISCOUS, new FT_Polluting().release(PollutionType.POISON, POISON_EXTREME));
CRYOGEL = new FluidType("CRYOGEL", 0x32ffff, 2, 0, 0, EnumSymbol.CROYGENIC).setTemp(-170).addTraits(LIQUID, VISCOUS);
HYDROGEN = new FluidType("HYDROGEN", 0x4286f4, 3, 4, 0, EnumSymbol.CROYGENIC).setTemp(-260).addContainers(new CD_Gastank(0x4286f4, 0xffffff)).addTraits(new FT_Flammable(5_000), new FT_Combustible(FuelGrade.HIGH, 10_000), LIQUID, EVAP);
OXYGEN = new FluidType("OXYGEN", 0x98bdf9, 3, 0, 0, EnumSymbol.CROYGENIC).setTemp(-100).addContainers(new CD_Gastank(0x98bdf9, 0xffffff)).addTraits(LIQUID, EVAP);
@ -280,7 +284,7 @@ public class Fluids {
PLASMA_HT = new FluidType("PLASMA_HT", 0xD1ABF2, 0, 4, 0, EnumSymbol.RADIATION).setTemp(3000).addTraits(NOCON, NOID, PLASMA);
PLASMA_XM = new FluidType("PLASMA_XM", 0xC6A5FF, 0, 4, 1, EnumSymbol.RADIATION).setTemp(4250).addTraits(NOCON, NOID, PLASMA);
PLASMA_BF = new FluidType("PLASMA_BF", 0xA7F1A3, 4, 5, 4, EnumSymbol.ANTIMATTER).setTemp(8500).addTraits(NOCON, NOID, PLASMA);
CARBONDIOXIDE = new FluidType("CARBONDIOXIDE", 0x404040, 3, 0, 0, EnumSymbol.ASPHYXIANT).addTraits(GASEOUS);
CARBONDIOXIDE = new FluidType("CARBONDIOXIDE", 0x404040, 3, 0, 0, EnumSymbol.ASPHYXIANT).addTraits(GASEOUS, new FT_Polluting().release(PollutionType.POISON, POISON_MINOR));
PLASMA_DH3 = new FluidType("PLASMA_DH3", 0xFF83AA, 0, 4, 0, EnumSymbol.RADIATION).setTemp(3480).addTraits(NOCON, NOID, PLASMA);
HELIUM3 = new FluidType("HELIUM3", 0xFCF0C4, 0, 0, 0, EnumSymbol.ASPHYXIANT).addTraits(GASEOUS);
DEATH = new FluidType("DEATH", 0x717A88, 2, 0, 1, EnumSymbol.ACID).setTemp(300).addTraits(new FT_Corrosive(80), new FT_Poison(true, 4), LEADCON, LIQUID, VISCOUS);
@ -307,7 +311,7 @@ public class Fluids {
WOODOIL = new FluidType("WOODOIL", 0x847D54, 2, 2, 0, EnumSymbol.NONE).addContainers(new CD_Canister(0xBF7E4F)).addTraits(LIQUID, VISCOUS, P_OIL);
COALCREOSOTE = new FluidType("COALCREOSOTE", 0x51694F, 3, 2, 0, EnumSymbol.NONE).addContainers(new CD_Canister(0x285A3F)).addTraits(LIQUID, VISCOUS, P_OIL);
SEEDSLURRY = new FluidType("SEEDSLURRY", 0x7CC35E, 0, 0, 0, EnumSymbol.NONE).addContainers(new CD_Canister(0x7CC35E)).addTraits(LIQUID, VISCOUS);
NITRIC_ACID = new FluidType("NITRIC_ACID", 0xBB7A1E, 3, 0, 2, EnumSymbol.OXIDIZER).addTraits(LIQUID, new FT_Corrosive(60));
NITRIC_ACID = new FluidType("NITRIC_ACID", 0xBB7A1E, 3, 0, 2, EnumSymbol.OXIDIZER).addTraits(LIQUID, new FT_Corrosive(60), new FT_Polluting().release(PollutionType.POISON, POISON_EXTREME));
SOLVENT = new FluidType("SOLVENT", 0xE4E3EF, 2, 3, 0, EnumSymbol.NONE).addContainers(new CD_Canister(0xE4E3EF)).addTraits(LIQUID, new FT_Corrosive(30));
BLOOD = new FluidType("BLOOD", 0xB22424, 0, 0, 0, EnumSymbol.NONE).addTraits(LIQUID, VISCOUS, DELICIOUS);
BLOOD_HOT = new FluidType("BLOOD_HOT", 0xF22419, 3, 0, 0, EnumSymbol.NONE).addTraits(LIQUID, VISCOUS).setTemp(666); //it's funny because it's the satan number
@ -326,8 +330,8 @@ public class Fluids {
KEROSENE_REFORM = new FluidType("KEROSENE_REFORM", 0xFFA5F3, 1, 2, 0, EnumSymbol.NONE).addTraits(LIQUID, P_FUEL).addContainers(new CD_Canister(0xFF377D));
REFORMGAS = new FluidType("REFORMGAS", 0x6362AE, 1, 4, 1, EnumSymbol.NONE).addContainers(new CD_Gastank(0x9392FF, 0xFFB992)).addTraits(GASEOUS, P_GAS);
COLLOID = new FluidType("COLLOID", 0x787878, 0, 0, 0, EnumSymbol.NONE).addTraits(LIQUID, VISCOUS);
PHOSGENE = new FluidType("PHOSGENE", 0xCFC4A4, 4, 0, 1, EnumSymbol.NONE).addContainers(new CD_Gastank(0xCFC4A4, 0x361414)).addTraits(GASEOUS);
MUSTARDGAS = new FluidType("MUSTARDGAS", 0xBAB572, 4, 1, 1, EnumSymbol.NONE).addContainers(new CD_Gastank(0xBAB572, 0x361414)).addTraits(GASEOUS);
PHOSGENE = new FluidType("PHOSGENE", 0xCFC4A4, 4, 0, 1, EnumSymbol.NONE).addContainers(new CD_Gastank(0xCFC4A4, 0x361414)).addTraits(GASEOUS, new FT_Polluting().release(PollutionType.POISON, POISON_EXTREME));
MUSTARDGAS = new FluidType("MUSTARDGAS", 0xBAB572, 4, 1, 1, EnumSymbol.NONE).addContainers(new CD_Gastank(0xBAB572, 0x361414)).addTraits(GASEOUS, new FT_Polluting().release(PollutionType.POISON, POISON_EXTREME));
IONGEL = new FluidType("IONGEL", 0xB8FFFF, 1, 0, 4, EnumSymbol.NONE).addTraits(LIQUID, VISCOUS);
OIL_COKER = new FluidType("OIL_COKER", 0x001802, 2, 1, 0, EnumSymbol.NONE).addTraits(LIQUID, VISCOUS, P_OIL);
NAPHTHA_COKER = new FluidType("NAPHTHA_COKER", 0x495944, 2, 1, 0, EnumSymbol.NONE).addTraits(LIQUID, VISCOUS, P_OIL);
@ -338,7 +342,7 @@ public class Fluids {
FISHOIL = new FluidType("FISHOIL", 0x4B4A45, 0, 1, 0, EnumSymbol.NONE).addTraits(LIQUID, P_FUEL);
SUNFLOWEROIL = new FluidType("SUNFLOWEROIL", 0xCBAD45, 0, 1, 0, EnumSymbol.NONE).addTraits(LIQUID, P_FUEL);
NITROGLYCERIN = new FluidType("NITROGLYCERIN", 0x92ACA6, 0, 4, 0, EnumSymbol.NONE).addTraits(LIQUID);
REDMUD = new FluidType("REDMUD", 0xD85638, 3, 0, 4, EnumSymbol.NONE).addTraits(LIQUID, VISCOUS, LEADCON, new FT_Corrosive(60), new FT_Flammable(1_000));
REDMUD = new FluidType("REDMUD", 0xD85638, 3, 0, 4, EnumSymbol.NONE).addTraits(LIQUID, VISCOUS, LEADCON, new FT_Corrosive(60), new FT_Flammable(1_000), new FT_Polluting().release(PollutionType.POISON, POISON_EXTREME));
CHLOROCALCITE_SOLUTION = new FluidType("CHLOROCALCITE_SOLUTION", 0x808080, 0, 0, 0, EnumSymbol.NONE).addTraits(LIQUID, NOCON, new FT_Corrosive(60));
CHLOROCALCITE_MIX = new FluidType("CHLOROCALCITE_MIX", 0x808080, 0, 0, 0, EnumSymbol.NONE).addTraits(LIQUID, NOCON, new FT_Corrosive(60));
CHLOROCALCITE_CLEANED = new FluidType("CHLOROCALCITE_CLEANED", 0x808080, 0, 0, 0, EnumSymbol.NONE).addTraits(LIQUID, NOCON, new FT_Corrosive(60));
@ -355,7 +359,7 @@ public class Fluids {
THORIUM_SALT = new FluidType("THORIUM_SALT", 0x7A5542, 2, 0, 3, EnumSymbol.NONE).setTemp(800).addTraits(LIQUID, VISCOUS, new FT_Corrosive(65));
THORIUM_SALT_HOT = new FluidType("THORIUM_SALT_HOT", 0x3E3627, 2, 0, 3, EnumSymbol.NONE).setTemp(1600).addTraits(LIQUID, VISCOUS, new FT_Corrosive(65));
THORIUM_SALT_DEPLETED = new FluidType("THORIUM_SALT_DEPLETED", 0x302D1C, 2, 0, 3, EnumSymbol.NONE).setTemp(800).addTraits(LIQUID, VISCOUS, new FT_Corrosive(65));
FULLERENE = new FluidType("FULLERENE", 0xFF7FED, 3, 3, 3, EnumSymbol.NONE).addTraits(LIQUID, new FT_Corrosive(65));
FULLERENE = new FluidType("FULLERENE", 0xFF7FED, 3, 3, 3, EnumSymbol.NONE).addTraits(LIQUID, new FT_Corrosive(65), new FT_Polluting().release(PollutionType.POISON, POISON_MINOR));
PHEROMONE = new FluidType("PHEROMONE", 0x5FA6E8, 0, 0, 0, EnumSymbol.NONE).addTraits(LIQUID, new FT_Pheromone(1));
PHEROMONE_M = new FluidType("PHEROMONE_M", 0x48C9B0 , 0, 0, 0, EnumSymbol.NONE).addTraits(LIQUID, new FT_Pheromone(2));
OIL_DS = new FluidType("OIL_DS", 0x121212, 2, 1, 0, EnumSymbol.NONE).addContainers(new CD_Canister(0x424242)).addTraits(LIQUID, VISCOUS, P_OIL);

View File

@ -274,6 +274,7 @@ public class ClientProxy extends ServerProxy {
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineLiquefactor.class, new RenderLiquefactor());
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineSolidifier.class, new RenderSolidifier());
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineCompressor.class, new RenderCompressor());
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineDrain.class, new RenderDrain());
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineRadiolysis.class, new RenderRadiolysis());
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityElectrolyser.class, new RenderElectrolyser());
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityFurnaceIron.class, new RenderFurnaceIron());
@ -337,7 +338,6 @@ public class ClientProxy extends ServerProxy {
ClientRegistry.bindTileEntitySpecialRenderer(TileEntitySoyuzCapsule.class, new RenderCapsule());
//network
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityFluidDuct.class, new RenderFluidDuct());
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityRFDuct.class, new RenderRFCable());
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityPylon.class, new RenderPylon());
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityConnector.class, new RenderConnector());
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityPylonLarge.class, new RenderPylonLarge());
@ -1764,6 +1764,20 @@ public class ClientProxy extends ServerProxy {
}
}
if("splash".equals(type)) {
if(particleSetting == 0 || (particleSetting == 1 && rand.nextBoolean())) {
ParticleSplash fx = new ParticleSplash(man, world, x, y, z);
if(data.hasKey("color")) {
Color color = new Color(data.getInteger("color"));
float f = 1F - rand.nextFloat() * 0.2F;
fx.setRBGColorF(color.getRed() / 255F * f, color.getGreen() / 255F * f, color.getBlue() / 255F * f);
}
Minecraft.getMinecraft().effectRenderer.addEffect(fx);
}
}
if("deadleaf".equals(type)) {
if(particleSetting == 0 || (particleSetting == 1 && rand.nextBoolean()))
Minecraft.getMinecraft().effectRenderer.addEffect(new ParticleDeadLeaf(man, world, x, y, z));

View File

@ -1056,6 +1056,8 @@ public class CraftingManager {
addRecipeAuto(new ItemStack(ModItems.mold_base), new Object[] { " B ", "BIB", " B ", 'B', ModItems.ingot_firebrick, 'I', IRON.ingot() });
addRecipeAuto(new ItemStack(ModBlocks.brick_fire), new Object[] { "BB", "BB", 'B', ModItems.ingot_firebrick });
addShapelessAuto(new ItemStack(ModItems.ingot_firebrick, 4), new Object[] { ModBlocks.brick_fire });
addRecipeAuto(new ItemStack(ModBlocks.machine_drain), new Object[] { "PPP", "T ", "PPP", 'P', STEEL.plateCast(), 'T', ModItems.tank_steel });
addRecipeAuto(new ItemStack(ModBlocks.filing_cabinet, 1, DecoCabinetEnum.STEEL.ordinal()), new Object[] { " P ", "PIP", " P ", 'P', STEEL.plate(), 'I', ModItems.plate_polymer });

View File

@ -1251,6 +1251,7 @@ public class ModEventHandlerClient {
public static IIcon particleBase;
public static IIcon particleLeaf;
public static IIcon particleSplash;
@SubscribeEvent
public void onTextureStitch(TextureStitchEvent.Pre event) {
@ -1258,6 +1259,7 @@ public class ModEventHandlerClient {
if(event.map.getTextureType() == 0) {
particleBase = event.map.registerIcon(RefStrings.MODID + ":particle/particle_base");
particleLeaf = event.map.registerIcon(RefStrings.MODID + ":particle/dead_leaf");
particleSplash = event.map.registerIcon(RefStrings.MODID + ":particle/particle_splash");
}
}

View File

@ -301,6 +301,9 @@ public class ResourceManager {
public static final IModelCustom solar_boiler = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/solar_boiler.obj"));
public static final IModelCustom solar_mirror = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/machines/solar_mirror.obj"));
//Drain
public static final IModelCustom drain = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/machines/drain.obj"));
//Vault Door
public static final IModelCustom vault_cog = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/vault_cog.obj"));
public static final IModelCustom vault_frame = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/vault_frame.obj"));
@ -738,6 +741,9 @@ public class ResourceManager {
public static final ResourceLocation solar_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/solar_boiler.png");
public static final ResourceLocation solar_mirror_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/solar_mirror.png");
//Drain
public static final ResourceLocation drain_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/drain.png");
//Blast Door
public static final ResourceLocation blast_door_base_tex = new ResourceLocation(RefStrings.MODID, "textures/models/blast_door_base.png");
public static final ResourceLocation blast_door_tooth_tex = new ResourceLocation(RefStrings.MODID, "textures/models/blast_door_tooth.png");

View File

@ -0,0 +1,68 @@
package com.hbm.particle;
import com.hbm.main.ModEventHandlerClient;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.client.particle.EntityFX;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.renderer.texture.TextureManager;
import net.minecraft.world.World;
@SideOnly(Side.CLIENT)
public class ParticleSplash extends EntityFX {
public ParticleSplash(TextureManager texman, World world, double x, double y, double z) {
super(world, x, y, z);
particleIcon = ModEventHandlerClient.particleSplash;
this.particleRed = this.particleGreen = this.particleBlue = 1F - world.rand.nextFloat() * 0.2F;
this.particleAlpha = 0.5F;
this.particleScale = 0.4F;
this.particleMaxAge = 200 + world.rand.nextInt(50);
this.particleGravity = 0.4F;
}
public int getFXLayer() {
return 1;
}
public void onUpdate() {
super.onUpdate();
if(!this.onGround) {
this.motionX += rand.nextGaussian() * 0.002D;
this.motionZ += rand.nextGaussian() * 0.002D;
if(this.motionY < -0.5D)
this.motionY = -0.5D;
} else {
this.setDead();
}
}
@Override
public void renderParticle(Tessellator tess, float interp, float fX, float fY, float fZ, float sX, float sZ) {
tess.setNormal(0.0F, 1.0F, 0.0F);
tess.setColorRGBA_F(this.particleRed, this.particleGreen, this.particleBlue, this.particleAlpha);
float scale = this.particleScale;
float pX = (float) (this.prevPosX + (this.posX - this.prevPosX) * (double) interp - interpPosX);
float pY = (float) (this.prevPosY + (this.posY - this.prevPosY) * (double) interp - interpPosY);
float pZ = (float) (this.prevPosZ + (this.posZ - this.prevPosZ) * (double) interp - interpPosZ);
boolean flipU = this.getEntityId() % 2 == 0;
boolean flipV = this.getEntityId() % 4 < 2;
double minU = flipU ? particleIcon.getMaxU() : particleIcon.getMinU();
double maxU = flipU ? particleIcon.getMinU() : particleIcon.getMaxU();
double minV = flipV ? particleIcon.getMaxV() : particleIcon.getMinV();
double maxV = flipV ? particleIcon.getMinV() : particleIcon.getMaxV();
tess.addVertexWithUV((double) (pX - fX * scale - sX * scale), (double) (pY - fY * scale), (double) (pZ - fZ * scale - sZ * scale), maxU, maxV);
tess.addVertexWithUV((double) (pX - fX * scale + sX * scale), (double) (pY + fY * scale), (double) (pZ - fZ * scale + sZ * scale), maxU, minV);
tess.addVertexWithUV((double) (pX + fX * scale + sX * scale), (double) (pY + fY * scale), (double) (pZ + fZ * scale + sZ * scale), minU, minV);
tess.addVertexWithUV((double) (pX + fX * scale - sX * scale), (double) (pY - fY * scale), (double) (pZ + fZ * scale - sZ * scale), minU, maxV);
}
}

View File

@ -0,0 +1,58 @@
package com.hbm.render.tileentity;
import org.lwjgl.opengl.GL11;
import com.hbm.blocks.BlockDummyable;
import com.hbm.blocks.ModBlocks;
import com.hbm.main.ResourceManager;
import com.hbm.render.item.ItemRenderBase;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
import net.minecraft.item.Item;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.client.IItemRenderer;
public class RenderDrain extends TileEntitySpecialRenderer implements IItemRendererProvider {
@Override
public void renderTileEntityAt(TileEntity te, double x, double y, double z, float interp) {
GL11.glPushMatrix();
GL11.glTranslated(x + 0.5D, y, z + 0.5D);
GL11.glEnable(GL11.GL_LIGHTING);
GL11.glEnable(GL11.GL_CULL_FACE);
switch(te.getBlockMetadata() - BlockDummyable.offset) {
case 4: GL11.glRotatef(180, 0F, 1F, 0F); break;
case 3: GL11.glRotatef(270, 0F, 1F, 0F); break;
case 5: GL11.glRotatef(0, 0F, 1F, 0F); break;
case 2: GL11.glRotatef(90, 0F, 1F, 0F); break;
}
bindTexture(ResourceManager.drain_tex);
ResourceManager.drain.renderAll();
GL11.glPopMatrix();
}
@Override
public Item getItemForRenderer() {
return Item.getItemFromBlock(ModBlocks.machine_drain);
}
@Override
public IItemRenderer getRenderer() {
return new ItemRenderBase( ) {
public void renderInventory() {
GL11.glTranslated(-1, -1, 0);
GL11.glScaled(5, 5, 5);
}
public void renderCommon() {
GL11.glRotatef(180, 0F, 1F, 0F);
GL11.glTranslated(0.75, 0, 0);
bindTexture(ResourceManager.drain_tex); ResourceManager.drain.renderAll();
}
};
}
}

View File

@ -1,159 +0,0 @@
package com.hbm.render.tileentity;
import org.lwjgl.opengl.GL11;
import com.hbm.lib.RefStrings;
import com.hbm.tileentity.conductor.TileEntityRFDuct;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.common.util.ForgeDirection;
public class RenderRFCable extends TileEntitySpecialRenderer {
public ResourceLocation texture = new ResourceLocation(RefStrings.MODID, "textures/blocks/rf_cable.png");
float pixel = 1F/16F;
float textureP = 1F / 32F;
@Override
public void renderTileEntityAt(TileEntity tileentity, double offsetX, double offsetY, double offsetZ, float f) {
GL11.glTranslated(offsetX, offsetY, offsetZ);
GL11.glDisable(GL11.GL_LIGHTING);
this.bindTexture(texture);
drawCore(tileentity);
TileEntityRFDuct cable = (TileEntityRFDuct) tileentity;
for(int i = 0; i < cable.connections.length; i++)
{
if(cable.connections[i] != null)
{
drawConnection(cable.connections[i]);
}
}
GL11.glTranslated(-offsetX, -offsetY, -offsetZ);
GL11.glEnable(GL11.GL_LIGHTING);
}
public void drawCore(TileEntity tileentity) {
Tessellator tesseract = Tessellator.instance;
tesseract.startDrawingQuads();
tesseract.addVertexWithUV(1 - 11 * pixel / 2, 11 * pixel / 2, 1 - 11 * pixel / 2, 5 * textureP, 5 * textureP);
tesseract.addVertexWithUV(1 - 11 * pixel / 2, 1 - 11 * pixel / 2, 1 - 11 * pixel / 2, 5 * textureP, 0 * textureP);
tesseract.addVertexWithUV(11 * pixel / 2, 1 - 11 * pixel / 2, 1 - 11 * pixel / 2, 0 * textureP, 0 * textureP);
tesseract.addVertexWithUV(11 * pixel / 2, 11 * pixel / 2, 1 - 11 * pixel / 2, 0 * textureP, 5 * textureP);
tesseract.addVertexWithUV(1 - 11 * pixel / 2, 11 * pixel / 2, 11 * pixel / 2, 5 * textureP, 5 * textureP);
tesseract.addVertexWithUV(1 - 11 * pixel / 2, 1 - 11 * pixel / 2, 11 * pixel / 2, 5 * textureP, 0 * textureP);
tesseract.addVertexWithUV(1 - 11 * pixel / 2, 1 - 11 * pixel / 2, 1 - 11 * pixel / 2, 0 * textureP, 0 * textureP);
tesseract.addVertexWithUV(1 - 11 * pixel / 2, 11 * pixel / 2, 1 - 11 * pixel / 2, 0 * textureP, 5 * textureP);
tesseract.addVertexWithUV(11 * pixel / 2, 11 * pixel / 2, 11 * pixel / 2, 5 * textureP, 5 * textureP);
tesseract.addVertexWithUV(11 * pixel / 2, 1 - 11 * pixel / 2, 11 * pixel / 2, 5 * textureP, 0 * textureP);
tesseract.addVertexWithUV(1 - 11 * pixel / 2, 1 - 11 * pixel / 2, 11 * pixel / 2, 0 * textureP, 0 * textureP);
tesseract.addVertexWithUV(1 - 11 * pixel / 2, 11 * pixel / 2, 11 * pixel / 2, 0 * textureP, 5 * textureP);
tesseract.addVertexWithUV(11 * pixel / 2, 11 * pixel / 2, 1 - 11 * pixel / 2, 5 * textureP, 5 * textureP);
tesseract.addVertexWithUV(11 * pixel / 2, 1 - 11 * pixel / 2, 1 - 11 * pixel / 2, 5 * textureP, 0 * textureP);
tesseract.addVertexWithUV(11 * pixel / 2, 1 - 11 * pixel / 2, 11 * pixel / 2, 0 * textureP, 0 * textureP);
tesseract.addVertexWithUV(11 * pixel / 2, 11 * pixel / 2, 11 * pixel / 2, 0 * textureP, 5 * textureP);
tesseract.addVertexWithUV(1 - 11 * pixel / 2, 1 - 11 * pixel / 2, 1 - 11 * pixel / 2, 5 * textureP, 5 * textureP);
tesseract.addVertexWithUV(1 - 11 * pixel / 2, 1 - 11 * pixel / 2, 11 * pixel / 2, 5 * textureP, 0 * textureP);
tesseract.addVertexWithUV(11 * pixel / 2, 1 - 11 * pixel / 2, 11 * pixel / 2, 0 * textureP, 0 * textureP);
tesseract.addVertexWithUV(11 * pixel / 2, 1 - 11 * pixel / 2, 1 - 11 * pixel / 2, 0 * textureP, 5 * textureP);
tesseract.addVertexWithUV(11 * pixel / 2, 11 * pixel / 2, 1 - 11 * pixel / 2, 5 * textureP, 5 * textureP);
tesseract.addVertexWithUV(11 * pixel / 2, 11 * pixel / 2, 11 * pixel / 2, 5 * textureP, 0 * textureP);
tesseract.addVertexWithUV(1 - 11 * pixel / 2, 11 * pixel / 2, 11 * pixel / 2, 0 * textureP, 0 * textureP);
tesseract.addVertexWithUV(1 - 11 * pixel / 2, 11 * pixel / 2, 1 - 11 * pixel / 2, 0 * textureP, 5 * textureP);
tesseract.draw();
// Muehsam muss ich hier im BSH meine genialen Mods schreiben, obwohl ich die Zeit eigentlich doch besser nutzen koennte.
// Da mir das aber Spass macht, wird auch in Zukunft gutes Zeug von mir geben (und damit meine ich NICHT Drogen, etc.)
// Danke.
//I didn't write this, but I'm gonna leave it there.
}
public void drawConnection(ForgeDirection direction)
{
Tessellator tesseract = Tessellator.instance;
tesseract.startDrawingQuads();
GL11.glTranslatef(0.5F, 0.5F, 0.5F);
if(direction.equals(ForgeDirection.UP))
{
}
if(direction.equals(ForgeDirection.DOWN))
{
GL11.glRotatef(180, 1, 0, 0);
}
if(direction.equals(ForgeDirection.NORTH))
{
GL11.glRotatef(270, 1, 0, 0);
}
if(direction.equals(ForgeDirection.SOUTH))
{
GL11.glRotatef(90, 1, 0, 0);
}
if(direction.equals(ForgeDirection.EAST))
{
GL11.glRotatef(270, 0, 0, 1);
}
if(direction.equals(ForgeDirection.WEST))
{
GL11.glRotatef(90, 0, 0, 1);
}
GL11.glTranslatef(-0.5F, -0.5F, -0.5F);
tesseract.addVertexWithUV(1 - 11 * pixel / 2, 1 - 11 * pixel / 2, 1 - 11 * pixel / 2, 5 * textureP, 5 * textureP);
tesseract.addVertexWithUV(1 - 11 * pixel / 2, 1, 1 - 11 * pixel / 2, 10 * textureP, 5 * textureP);
tesseract.addVertexWithUV(11 * pixel / 2, 1, 1 - 11 * pixel / 2, 10 * textureP, 0 * textureP);
tesseract.addVertexWithUV(11 * pixel / 2, 1 - 11 * pixel / 2, 1 - 11 * pixel / 2, 5 * textureP, 0 * textureP);
tesseract.addVertexWithUV(11 * pixel / 2, 1 - 11 * pixel / 2, 11 * pixel / 2, 5 * textureP, 5 * textureP);
tesseract.addVertexWithUV(11 * pixel / 2, 1, 11 * pixel / 2, 10 * textureP, 5 * textureP);
tesseract.addVertexWithUV(1 - 11 * pixel / 2, 1, 11 * pixel / 2, 10 * textureP, 0 * textureP);
tesseract.addVertexWithUV(1 - 11 * pixel / 2, 1 - 11 * pixel / 2, 11 * pixel / 2, 5 * textureP, 0 * textureP);
tesseract.addVertexWithUV(1 - 11 * pixel / 2, 1 - 11 * pixel / 2, 11 * pixel / 2, 5 * textureP, 5 * textureP);
tesseract.addVertexWithUV(1 - 11 * pixel / 2, 1, 11 * pixel / 2, 10 * textureP, 5 * textureP);
tesseract.addVertexWithUV(1 - 11 * pixel / 2, 1, 1 - 11 * pixel / 2, 10 * textureP, 0 * textureP);
tesseract.addVertexWithUV(1 - 11 * pixel / 2, 1 - 11 * pixel / 2, 1 - 11 * pixel / 2, 5 * textureP, 0 * textureP);
tesseract.addVertexWithUV(11 * pixel / 2, 1 - 11 * pixel / 2, 1 - 11 * pixel / 2, 5 * textureP, 5 * textureP);
tesseract.addVertexWithUV(11 * pixel / 2, 1, 1 - 11 * pixel / 2, 10 * textureP, 5 * textureP);
tesseract.addVertexWithUV(11 * pixel / 2, 1, 11 * pixel / 2, 10 * textureP, 0 * textureP);
tesseract.addVertexWithUV(11 * pixel / 2, 1 - 11 * pixel / 2, 11 * pixel / 2, 5 * textureP, 0 * textureP);
tesseract.draw();
GL11.glTranslatef(0.5F, 0.5F, 0.5F);
if(direction.equals(ForgeDirection.UP))
{
}
if(direction.equals(ForgeDirection.DOWN))
{
GL11.glRotatef(-180, 1, 0, 0);
}
if(direction.equals(ForgeDirection.NORTH))
{
GL11.glRotatef(-270, 1, 0, 0);
}
if(direction.equals(ForgeDirection.SOUTH))
{
GL11.glRotatef(-90, 1, 0, 0);
}
if(direction.equals(ForgeDirection.EAST))
{
GL11.glRotatef(-270, 0, 0, 1);
}
if(direction.equals(ForgeDirection.WEST))
{
GL11.glRotatef(-90, 0, 0, 1);
}
GL11.glTranslatef(-0.5F, -0.5F, -0.5F);
}
}

View File

@ -97,6 +97,7 @@ public class TileMappings {
put(TileEntityMachineExcavator.class, "tileentity_ntm_excavator");
put(TileEntityFluidDuctSimple.class, "tileentity_universal_duct_simple");
put(TileEntityFluidDuct.class, "tileentity_universal_duct");
put(TileEntityMachineDrain.class, "tileentity_fluid_drain");
put(TileEntityMachineFluidTank.class, "tileentity_fluid_tank");
put(TileEntityMachineTurbofan.class, "tileentity_machine_turbofan");
put(TileEntityMachineTurbineGas.class, "tileentity_machine_gasturbine");
@ -136,7 +137,6 @@ public class TileMappings {
put(TileEntityFF.class, "tileentity_forcefield");
put(TileEntityForceField.class, "tileentity_machine_field");
put(TileEntityMachineShredderLarge.class, "tileentity_machine_big_shredder");
put(TileEntityRFDuct.class, "tileentity_hbm_rfduct");
put(TileEntityReactorControl.class, "tileentity_reactor_remote_control");
put(TileEntityWasteDrum.class, "tileentity_waste_drum");
put(TileEntityDecon.class, "tileentity_decon");

View File

@ -110,6 +110,8 @@ public class TileEntityLaunchPadRusted extends TileEntityMachineBase implements
this.missileLoaded = false;
this.decrStackSize(1, 1);
this.markDirty();
return BombReturnCode.LAUNCHED;
}
}
}

View File

@ -1,144 +0,0 @@
package com.hbm.tileentity.conductor;
import cofh.api.energy.EnergyStorage;
import cofh.api.energy.IEnergyConnection;
import cofh.api.energy.IEnergyHandler;
import cofh.api.energy.IEnergyReceiver;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.util.ForgeDirection;
public class TileEntityRFDuct extends TileEntity implements IEnergyHandler {
public ForgeDirection[] connections = new ForgeDirection[6];
protected EnergyStorage storage;
public int output;
public TileEntityRFDuct(int output) {
this.output = output;
this.storage = new EnergyStorage(200);
storage.setMaxReceive(output);
storage.setMaxExtract(output);
storage.setMaxTransfer(output);
}
public void updateEntity() {
this.updateConnections();
if (storage.getEnergyStored() > 0) {
for (int i = 0; i < 6; i++) {
int targetX = xCoord + ForgeDirection.getOrientation(i).offsetX;
int targetY = yCoord + ForgeDirection.getOrientation(i).offsetY;
int targetZ = zCoord + ForgeDirection.getOrientation(i).offsetZ;
TileEntity tile = worldObj.getTileEntity(targetX, targetY, targetZ);
if (tile instanceof IEnergyReceiver) {
int maxExtract = storage.getMaxExtract();
int maxAvailable = storage.extractEnergy(maxExtract, true);
int energyTransferred = ((IEnergyReceiver) tile)
.receiveEnergy(ForgeDirection.getOrientation(i).getOpposite(), maxAvailable, false);
storage.extractEnergy(energyTransferred, false);
}
}
}
}
public void updateConnections() {
if (this.worldObj.getTileEntity(xCoord, yCoord + 1, zCoord) instanceof IEnergyConnection)
connections[0] = ForgeDirection.UP;
else
connections[0] = null;
if (this.worldObj.getTileEntity(xCoord, yCoord - 1, zCoord) instanceof IEnergyConnection)
connections[1] = ForgeDirection.DOWN;
else
connections[1] = null;
if (this.worldObj.getTileEntity(xCoord, yCoord, zCoord - 1) instanceof IEnergyConnection)
connections[2] = ForgeDirection.NORTH;
else
connections[2] = null;
if (this.worldObj.getTileEntity(xCoord, yCoord, zCoord + 1) instanceof IEnergyConnection)
connections[3] = ForgeDirection.SOUTH;
else
connections[3] = null;
if (this.worldObj.getTileEntity(xCoord + 1, yCoord, zCoord) instanceof IEnergyConnection)
connections[4] = ForgeDirection.EAST;
else
connections[4] = null;
if (this.worldObj.getTileEntity(xCoord - 1, yCoord, zCoord) instanceof IEnergyConnection)
connections[5] = ForgeDirection.WEST;
else
connections[5] = null;
}
public boolean onlyOneOpposite(ForgeDirection[] directions) {
ForgeDirection mainDirection = null;
boolean isOpposite = false;
for (int i = 0; i < directions.length; i++) {
if (mainDirection == null && directions[i] != null)
mainDirection = directions[i];
if (directions[i] != null && mainDirection != directions[i]) {
if (!isOpposite(mainDirection, directions[i]))
return false;
else
isOpposite = true;
}
}
return isOpposite;
}
public boolean isOpposite(ForgeDirection firstDirection, ForgeDirection secondDirection) {
if ((firstDirection.equals(ForgeDirection.NORTH) && secondDirection.equals(ForgeDirection.SOUTH))
|| firstDirection.equals(ForgeDirection.SOUTH) && secondDirection.equals(ForgeDirection.NORTH))
return true;
if ((firstDirection.equals(ForgeDirection.EAST) && secondDirection.equals(ForgeDirection.WEST))
|| firstDirection.equals(ForgeDirection.WEST) && secondDirection.equals(ForgeDirection.EAST))
return true;
if ((firstDirection.equals(ForgeDirection.UP) && secondDirection.equals(ForgeDirection.DOWN))
|| firstDirection.equals(ForgeDirection.DOWN) && secondDirection.equals(ForgeDirection.UP))
return true;
return false;
}
@Override
public boolean canConnectEnergy(ForgeDirection from) {
return true;
}
@Override
public int receiveEnergy(ForgeDirection from, int maxReceive, boolean simulate) {
return this.storage.receiveEnergy(Math.min(output, maxReceive), simulate);
}
@Override
public int extractEnergy(ForgeDirection from, int maxExtract, boolean simulate) {
return storage.extractEnergy(storage.getMaxExtract(), simulate);
}
@Override
public int getEnergyStored(ForgeDirection from) {
return storage.getEnergyStored();
}
@Override
public int getMaxEnergyStored(ForgeDirection from) {
return storage.getMaxEnergyStored();
}
}

View File

@ -0,0 +1,155 @@
package com.hbm.tileentity.machine;
import com.hbm.blocks.ModBlocks;
import com.hbm.inventory.fluid.FluidType;
import com.hbm.inventory.fluid.Fluids;
import com.hbm.inventory.fluid.tank.FluidTank;
import com.hbm.inventory.fluid.trait.FT_Flammable;
import com.hbm.inventory.fluid.trait.FT_Polluting;
import com.hbm.inventory.fluid.trait.FluidTrait.FluidReleaseType;
import com.hbm.inventory.fluid.trait.FluidTraitSimple.FT_Gaseous;
import com.hbm.inventory.fluid.trait.FluidTraitSimple.FT_Liquid;
import com.hbm.inventory.fluid.trait.FluidTraitSimple.FT_Viscous;
import com.hbm.main.MainRegistry;
import com.hbm.packet.BufPacket;
import com.hbm.packet.PacketDispatcher;
import com.hbm.tileentity.IBufPacketReceiver;
import com.hbm.tileentity.TileEntityLoadedBase;
import com.hbm.util.fauxpointtwelve.DirPos;
import api.hbm.fluid.IFluidStandardReceiver;
import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import io.netty.buffer.ByteBuf;
import net.minecraft.block.Block;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.util.Vec3;
import net.minecraftforge.common.util.ForgeDirection;
public class TileEntityMachineDrain extends TileEntityLoadedBase implements IFluidStandardReceiver, IBufPacketReceiver {
public FluidTank tank;
public TileEntityMachineDrain() {
this.tank = new FluidTank(Fluids.NONE, 2_000);
}
@Override
public void updateEntity() {
if(!worldObj.isRemote) {
if(worldObj.getTotalWorldTime() % 20 == 0) {
for(DirPos pos : getConPos()) this.trySubscribe(tank.getTankType(), worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir());
}
PacketDispatcher.wrapper.sendToAllAround(new BufPacket(xCoord, yCoord, zCoord, this), new TargetPoint(this.worldObj.provider.dimensionId, xCoord, yCoord, zCoord, 50));
if(tank.getFill() > 0) {
int toSpill = Math.max(tank.getFill() / 2, 1);
tank.setFill(tank.getFill() - toSpill);
FT_Polluting.pollute(worldObj, xCoord, yCoord, zCoord, tank.getTankType(), FluidReleaseType.SPILL, toSpill);
if(toSpill >= 100 && worldObj.rand.nextInt(20) == 0 && tank.getTankType().hasTrait(FT_Liquid.class) && tank.getTankType().hasTrait(FT_Viscous.class) && tank.getTankType().hasTrait(FT_Flammable.class)) {
ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - 10);
Vec3 start = Vec3.createVectorHelper(xCoord + 0.5 - dir.offsetX * 3, yCoord + 0.5, zCoord + 0.5 - dir.offsetZ * 3);
Vec3 end = start.addVector(worldObj.rand.nextGaussian() * 5, -25, worldObj.rand.nextGaussian() * 5);
MovingObjectPosition mop = worldObj.func_147447_a(start, end, false, true, false);
if(mop != null && mop.typeOfHit == mop.typeOfHit.BLOCK && mop.sideHit == 1) {
Block block = worldObj.getBlock(mop.blockX, mop.blockY + 1, mop.blockZ);
if(!block.getMaterial().isLiquid() && block.isReplaceable(worldObj, mop.blockX, mop.blockY + 1, mop.blockZ) && ModBlocks.oil_spill.canPlaceBlockAt(worldObj, mop.blockX, mop.blockY + 1, mop.blockZ)) {
worldObj.setBlock(mop.blockX, mop.blockY + 1, mop.blockZ, ModBlocks.oil_spill);
}
}
}
}
} else {
if(tank.getFill() > 0 && MainRegistry.proxy.me().getDistance(xCoord, yCoord, zCoord) < 100) {
ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - 10);
NBTTagCompound data = new NBTTagCompound();
if(tank.getTankType().hasTrait(FT_Gaseous.class)) {
data.setString("type", "tower");
data.setFloat("lift", 0.5F);
data.setFloat("base", 0.375F);
data.setFloat("max", 3F);
data.setInteger("life", 100 + worldObj.rand.nextInt(50));
} else {
data.setString("type", "splash");
}
data.setInteger("color", tank.getTankType().getColor());
data.setDouble("posX", xCoord + 0.5 - dir.offsetX * 2.5);
data.setDouble("posZ", zCoord + 0.5 - dir.offsetZ * 2.5);
data.setDouble("posY", yCoord + 0.5);
MainRegistry.proxy.effectNT(data);
}
}
}
public DirPos[] getConPos() {
ForgeDirection dir0 = ForgeDirection.getOrientation(this.getBlockMetadata() - 10);
ForgeDirection dir1 = dir0.getRotation(ForgeDirection.UP);
ForgeDirection dir2 = dir0.getRotation(ForgeDirection.DOWN);
return new DirPos[] {
new DirPos(xCoord + dir0.offsetX, yCoord, zCoord + dir0.offsetZ, dir0),
new DirPos(xCoord + dir1.offsetX, yCoord, zCoord + dir1.offsetZ, dir1),
new DirPos(xCoord + dir2.offsetX, yCoord, zCoord + dir2.offsetZ, dir2)
};
}
@Override
public void readFromNBT(NBTTagCompound nbt) {
super.readFromNBT(nbt);
this.tank.readFromNBT(nbt, "t");
}
@Override
public void writeToNBT(NBTTagCompound nbt) {
super.writeToNBT(nbt);
this.tank.writeToNBT(nbt, "t");
}
@Override public void serialize(ByteBuf buf) { tank.serialize(buf); }
@Override public void deserialize(ByteBuf buf) { tank.deserialize(buf); }
@Override public FluidTank[] getAllTanks() { return new FluidTank[] {tank}; }
@Override public FluidTank[] getReceivingTanks() { return new FluidTank[] {tank}; }
@Override
public boolean canConnect(FluidType type, ForgeDirection dir) {
return dir != ForgeDirection.UP && dir != ForgeDirection.DOWN;
}
AxisAlignedBB bb = null;
@Override
public AxisAlignedBB getRenderBoundingBox() {
if(bb == null) {
bb = AxisAlignedBB.getBoundingBox(
xCoord - 2,
yCoord,
zCoord - 2,
xCoord + 3,
yCoord + 1,
zCoord + 3
);
}
return bb;
}
@Override
@SideOnly(Side.CLIENT)
public double getMaxRenderDistanceSquared() {
return 65536.0D;
}
}

View File

@ -4145,6 +4145,7 @@ tile.machine_difurnace_on.name=Hochofen
tile.machine_difurnace_rtg_off.name=Atomarer Hochofen
tile.machine_difurnace_rtg_on.name=Atomarer Hochofen
tile.machine_dineutronium_battery.name=Spark Energiespeicherblock
tile.machine_drain.name=Ausgussrohr
tile.machine_drill.name=Automatischer Minenbohrer
tile.machine_electric_furnace_off.name=Elektrischer Ofen
tile.machine_electric_furnace_on.name=Elektrischer Ofen

View File

@ -5159,6 +5159,7 @@ tile.machine_difurnace_on.name=Blast Furnace
tile.machine_difurnace_rtg_off.name=Nuclear Blast Furnace
tile.machine_difurnace_rtg_on.name=Nuclear Blast Furnace
tile.machine_dineutronium_battery.name=Spark Energy Storage Block
tile.machine_drain.name=Drainage Pipe
tile.machine_drill.name=Automatic Mining Drill
tile.machine_electric_furnace_off.name=Electric Furnace
tile.machine_electric_furnace_on.name=Electric Furnace

View File

@ -0,0 +1,190 @@
# Blender v2.79 (sub 0) OBJ File: 'drain.blend'
# www.blender.org
o Cube_Cube.001
v -0.500000 0.000000 0.500000
v -0.500000 1.000000 0.500000
v -0.500000 0.000000 -0.500000
v -0.500000 1.000000 -0.500000
v 0.500000 0.000000 0.500000
v 0.500000 1.000000 0.500000
v 0.500000 0.000000 -0.500000
v 0.500000 1.000000 -0.500000
v -0.500000 0.500000 -0.500000
v -0.500000 0.853553 -0.353553
v -0.500000 1.000000 0.000000
v -0.500000 0.853553 0.353553
v -0.500000 0.500000 0.500000
v -0.500000 0.146447 0.353553
v -0.500000 0.000000 -0.000000
v -0.500000 0.146447 -0.353553
v -2.500000 0.500000 -0.500000
v -2.500000 0.853553 -0.353553
v -2.500000 1.000000 0.000000
v -2.500000 0.853553 0.353553
v -2.500000 0.500000 0.500000
v -2.500000 0.146447 0.353553
v -2.500000 0.000000 -0.000000
v -2.500000 0.146447 -0.353553
v -2.500000 0.500000 -0.437500
v -2.500000 0.809359 -0.309359
v -2.500000 0.937500 0.000000
v -2.500000 0.809359 0.309359
v -2.500000 0.500000 0.437500
v -2.500000 0.190641 0.309359
v -2.500000 0.062500 -0.000000
v -2.500000 0.190641 -0.309359
v -1.500000 0.500000 -0.437500
v -1.500000 0.809359 -0.309359
v -1.500000 0.937500 0.000000
v -1.500000 0.809359 0.309359
v -1.500000 0.500000 0.437500
v -1.500000 0.190641 0.309359
v -1.500000 0.062500 -0.000000
v -1.500000 0.190641 -0.309359
vt 0.250000 0.326531
vt 0.000000 0.000000
vt 0.250000 0.000000
vt 0.250000 0.326531
vt 0.000000 0.000000
vt 0.250000 0.000000
vt 0.250000 0.326531
vt 0.000000 0.000000
vt 0.250000 0.000000
vt 0.250000 0.326531
vt 0.000000 0.000000
vt 0.250000 0.000000
vt 0.250000 0.653061
vt 0.000000 0.326531
vt 0.250000 0.326531
vt 0.250000 0.653061
vt 0.000000 0.326531
vt 0.437500 0.653061
vt 0.343750 0.000000
vt 0.437500 0.000000
vt 0.625000 0.653061
vt 0.531250 -0.000000
vt 0.625000 0.000000
vt 0.812500 0.653061
vt 0.718750 0.000000
vt 0.812500 0.000000
vt 0.906250 0.653061
vt 0.906250 -0.000000
vt 0.343750 0.653061
vt 0.250000 0.000000
vt 0.531250 0.653061
vt 0.718750 0.653061
vt 1.000000 0.653061
vt 1.000000 -0.000000
vt 0.812500 0.673469
vt 0.250000 0.653061
vt 0.343750 0.673469
vt 0.250000 0.673469
vt 0.437500 0.673469
vt 0.625000 0.673469
vt 0.906250 0.673469
vt 0.531250 0.673469
vt 0.718750 0.673469
vt 0.531250 1.000000
vt 0.718750 1.000000
vt 0.812500 1.000000
vt 0.250000 1.000000
vt 0.437500 1.000000
vt 0.625000 1.000000
vt 1.000000 0.673469
vt 0.906250 1.000000
vt 0.343750 1.000000
vt 0.249819 0.795918
vt 0.217837 0.896766
vt 0.140625 0.938539
vt 0.000000 0.326531
vt 0.000000 0.326531
vt 0.000000 0.326531
vt 0.000000 0.653061
vt 0.000000 0.653061
vt 1.000000 1.000000
vt 0.063413 0.896766
vt 0.031431 0.795918
vt 0.063413 0.695070
vt 0.140625 0.653298
vt 0.217837 0.695070
vn -1.0000 0.0000 0.0000
vn 0.0000 0.0000 -1.0000
vn 1.0000 0.0000 0.0000
vn 0.0000 0.0000 1.0000
vn 0.0000 -1.0000 0.0000
vn 0.0000 1.0000 0.0000
vn 0.0000 -0.3827 0.9239
vn 0.0000 0.9239 0.3827
vn 0.0000 0.3827 -0.9239
vn 0.0000 -0.3827 -0.9239
vn 0.0000 -0.9239 0.3827
vn 0.0000 0.3827 0.9239
vn 0.0000 0.9239 -0.3827
vn 0.0000 -0.9239 -0.3827
s off
f 2/1/1 3/2/1 1/3/1
f 4/4/2 7/5/2 3/6/2
f 8/7/3 5/8/3 7/9/3
f 6/10/4 1/11/4 5/12/4
f 7/13/5 1/14/5 3/15/5
f 4/16/6 6/17/6 8/7/6
f 21/18/7 14/19/7 13/20/7
f 19/21/8 12/22/8 11/23/8
f 17/24/9 10/25/9 9/26/9
f 24/27/10 9/26/10 16/28/10
f 22/29/11 15/30/11 14/19/11
f 20/31/12 13/20/12 12/22/12
f 18/32/13 11/23/13 10/25/13
f 23/33/14 16/28/14 15/34/14
f 24/27/1 25/35/1 17/24/1
f 23/36/1 30/37/1 31/38/1
f 20/31/1 29/39/1 21/18/1
f 18/32/1 27/40/1 19/21/1
f 23/33/1 32/41/1 24/27/1
f 21/18/1 30/37/1 22/29/1
f 19/21/1 28/42/1 20/31/1
f 17/24/1 26/43/1 18/32/1
f 27/40/14 36/44/14 28/42/14
f 25/35/7 34/45/7 26/43/7
f 32/41/12 33/46/12 25/35/12
f 30/37/13 39/47/13 31/38/13
f 28/42/10 37/48/10 29/39/10
f 26/43/11 35/49/11 27/40/11
f 31/50/8 40/51/8 32/41/8
f 29/39/9 38/52/9 30/37/9
f 37/53/1 36/54/1 35/55/1
f 2/1/1 4/56/1 3/2/1
f 4/4/2 8/57/2 7/5/2
f 8/7/3 6/17/3 5/8/3
f 6/10/4 2/58/4 1/11/4
f 7/13/5 5/59/5 1/14/5
f 4/16/6 2/60/6 6/17/6
f 21/18/7 22/29/7 14/19/7
f 19/21/8 20/31/8 12/22/8
f 17/24/9 18/32/9 10/25/9
f 24/27/10 17/24/10 9/26/10
f 22/29/11 23/36/11 15/30/11
f 20/31/12 21/18/12 13/20/12
f 18/32/13 19/21/13 11/23/13
f 23/33/14 24/27/14 16/28/14
f 24/27/1 32/41/1 25/35/1
f 23/36/1 22/29/1 30/37/1
f 20/31/1 28/42/1 29/39/1
f 18/32/1 26/43/1 27/40/1
f 23/33/1 31/50/1 32/41/1
f 21/18/1 29/39/1 30/37/1
f 19/21/1 27/40/1 28/42/1
f 17/24/1 25/35/1 26/43/1
f 27/40/14 35/49/14 36/44/14
f 25/35/7 33/46/7 34/45/7
f 32/41/12 40/51/12 33/46/12
f 30/37/13 38/52/13 39/47/13
f 28/42/10 36/44/10 37/48/10
f 26/43/11 34/45/11 35/49/11
f 31/50/8 39/61/8 40/51/8
f 29/39/9 37/48/9 38/52/9
f 35/55/1 34/62/1 33/63/1
f 33/63/1 40/64/1 35/55/1
f 40/64/1 39/65/1 35/55/1
f 39/65/1 38/66/1 35/55/1
f 38/66/1 37/53/1 35/55/1

Binary file not shown.

After

Width:  |  Height:  |  Size: 151 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB