Merge branch 'pr603' into master

This commit is contained in:
HbmMods 2022-06-23 08:10:17 +02:00 committed by GitHub
commit aa9cd95681
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
435 changed files with 46209 additions and 6976 deletions

View File

@ -0,0 +1,10 @@
package api.hbm.conveyor;
import net.minecraft.util.Vec3;
import net.minecraft.world.World;
public interface IConveyorBelt {
public Vec3 getTravelLocation(World world, int x, int y, int z, Vec3 itemPos, double speed);
public Vec3 getClosestSnappingPosition(World world, int x, int y, int z, Vec3 itemPos);
}

View File

@ -0,0 +1,8 @@
package api.hbm.conveyor;
import net.minecraft.item.ItemStack;
public interface IConveyorItem {
public ItemStack getItemStack();
}

View File

@ -0,0 +1,20 @@
package api.hbm.conveyor;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
public interface IEnterableBlock {
/**
* Returns true of the moving item can enter from the given side. When this happens, the IConveyorItem will call onEnter and despawn
* @param world
* @param x
* @param y
* @param z
* @param dir
* @param entity
* @return
*/
public boolean canEnter(World world, int x, int y, int z, ForgeDirection dir, IConveyorItem entity);
public void onEnter(World world, int x, int y, int z, ForgeDirection dir, IConveyorItem entity);
}

View File

@ -74,11 +74,17 @@ public interface IEnergyConnector extends ILoadedTile {
red = true;
}
if(particleDebug) {
if(particleDebug) {//
NBTTagCompound data = new NBTTagCompound();
data.setString("type", "vanillaExt");
data.setString("mode", red ? "reddust" : "bluedust");
PacketDispatcher.wrapper.sendToAllAround(new AuxParticlePacketNT(data, x + world.rand.nextDouble(), y + world.rand.nextDouble(), z + world.rand.nextDouble()), new TargetPoint(world.provider.dimensionId, x + 0.5, y + 0.5, z + 0.5, 25));
data.setString("type", "network");
data.setString("mode", "power");
double posX = x + 0.5 + dir.offsetX * 0.5 + world.rand.nextDouble() * 0.5 - 0.25;
double posY = y + 0.5 + dir.offsetY * 0.5 + world.rand.nextDouble() * 0.5 - 0.25;
double posZ = z + 0.5 + dir.offsetZ * 0.5 + world.rand.nextDouble() * 0.5 - 0.25;
data.setDouble("mX", -dir.offsetX * (red ? 0.025 : 0.1));
data.setDouble("mY", -dir.offsetY * (red ? 0.025 : 0.1));
data.setDouble("mZ", -dir.offsetZ * (red ? 0.025 : 0.1));
PacketDispatcher.wrapper.sendToAllAround(new AuxParticlePacketNT(data, posX, posY, posZ), new TargetPoint(world.provider.dimensionId, posX, posY, posZ, 25));
}
}

View File

@ -87,9 +87,15 @@ public interface IEnergyUser extends IEnergyConnector {
if(particleDebug) {
NBTTagCompound data = new NBTTagCompound();
data.setString("type", "vanillaExt");
data.setString("mode", red ? "reddust" : "greendust");
PacketDispatcher.wrapper.sendToAllAround(new AuxParticlePacketNT(data, x + world.rand.nextDouble(), y + world.rand.nextDouble(), z + world.rand.nextDouble()), new TargetPoint(world.provider.dimensionId, x + 0.5, y + 0.5, z + 0.5, 25));
data.setString("type", "network");
data.setString("mode", "power");
double posX = x + 0.5 - dir.offsetX * 0.5 + world.rand.nextDouble() * 0.5 - 0.25;
double posY = y + 0.5 - dir.offsetY * 0.5 + world.rand.nextDouble() * 0.5 - 0.25;
double posZ = z + 0.5 - dir.offsetZ * 0.5 + world.rand.nextDouble() * 0.5 - 0.25;
data.setDouble("mX", dir.offsetX * (red ? 0.025 : 0.1));
data.setDouble("mY", dir.offsetY * (red ? 0.025 : 0.1));
data.setDouble("mZ", dir.offsetZ * (red ? 0.025 : 0.1));
PacketDispatcher.wrapper.sendToAllAround(new AuxParticlePacketNT(data, posX, posY, posZ), new TargetPoint(world.provider.dimensionId, posX, posY, posZ, 25));
}
}

View File

@ -62,9 +62,16 @@ public interface IFluidConnector {
if(particleDebug) {
NBTTagCompound data = new NBTTagCompound();
data.setString("type", "vanillaExt");
data.setString("mode", red ? "reddust" : "bluedust");
PacketDispatcher.wrapper.sendToAllAround(new AuxParticlePacketNT(data, x + world.rand.nextDouble(), y + world.rand.nextDouble(), z + world.rand.nextDouble()), new TargetPoint(world.provider.dimensionId, x + 0.5, y + 0.5, z + 0.5, 25));
data.setString("type", "network");
data.setString("mode", "fluid");
data.setInteger("color", type.getColor());
double posX = x + 0.5 + dir.offsetX * 0.5 + world.rand.nextDouble() * 0.5 - 0.25;
double posY = y + 0.5 + dir.offsetY * 0.5 + world.rand.nextDouble() * 0.5 - 0.25;
double posZ = z + 0.5 + dir.offsetZ * 0.5 + world.rand.nextDouble() * 0.5 - 0.25;
data.setDouble("mX", -dir.offsetX * (red ? 0.025 : 0.1));
data.setDouble("mY", -dir.offsetY * (red ? 0.025 : 0.1));
data.setDouble("mZ", -dir.offsetZ * (red ? 0.025 : 0.1));
PacketDispatcher.wrapper.sendToAllAround(new AuxParticlePacketNT(data, posX, posY, posZ), new TargetPoint(world.provider.dimensionId, posX, posY, posZ, 25));
}
}

View File

@ -48,9 +48,16 @@ public interface IFluidUser extends IFluidConnector {
if(particleDebug) {
NBTTagCompound data = new NBTTagCompound();
data.setString("type", "vanillaExt");
data.setString("mode", red ? "reddust" : "greendust");
PacketDispatcher.wrapper.sendToAllAround(new AuxParticlePacketNT(data, x + world.rand.nextDouble(), y + world.rand.nextDouble(), z + world.rand.nextDouble()), new TargetPoint(world.provider.dimensionId, x + 0.5, y + 0.5, z + 0.5, 25));
data.setString("type", "network");
data.setString("mode", "fluid");
data.setInteger("color", type.getColor());
double posX = x + 0.5 - dir.offsetX * 0.5 + world.rand.nextDouble() * 0.5 - 0.25;
double posY = y + 0.5 - dir.offsetY * 0.5 + world.rand.nextDouble() * 0.5 - 0.25;
double posZ = z + 0.5 - dir.offsetZ * 0.5 + world.rand.nextDouble() * 0.5 - 0.25;
data.setDouble("mX", dir.offsetX * (red ? 0.025 : 0.1));
data.setDouble("mY", dir.offsetY * (red ? 0.025 : 0.1));
data.setDouble("mZ", dir.offsetZ * (red ? 0.025 : 0.1));
PacketDispatcher.wrapper.sendToAllAround(new AuxParticlePacketNT(data, posX, posY, posZ), new TargetPoint(world.provider.dimensionId, posX, posY, posZ, 25));
}
}

View File

@ -1,8 +1,6 @@
package com.hbm.blocks;
import cpw.mods.fml.client.registry.RenderingRegistry;
import net.minecraft.util.IIcon;
import net.minecraft.world.IBlockAccess;
public interface IBlockMultiPass {

View File

@ -0,0 +1,14 @@
package com.hbm.blocks;
import cpw.mods.fml.client.registry.RenderingRegistry;
import net.minecraft.world.IBlockAccess;
public interface IBlockSideRotation {
public int getRotationFromSide(IBlockAccess world, int x, int y, int z, int side);
public static int renderID = RenderingRegistry.getNextAvailableRenderId();
public static int getRenderType() {
return renderID;
}
}

View File

@ -583,16 +583,11 @@ public class ModBlocks {
public static final int guiID_capsule = 93;
public static Block crate_iron;
public static final int guiID_crate_iron = 46;
public static Block crate_steel;
public static final int guiID_crate_steel = 47;
public static Block crate_desh;
public static Block crate_tungsten;
public static final int guiID_crate_tungsten = 103;
public static Block safe;
public static final int guiID_safe = 70;
public static Block mass_storage;
public static Block nuke_gadget;
public static final int guiID_nuke_gadget = 3;
@ -627,6 +622,8 @@ public class ModBlocks {
public static Block cel_prime_battery;
public static Block cel_prime_port;
public static Block cel_prime_tanks;
public static Block furnace_iron;
public static Block machine_difurnace_off;
public static Block machine_difurnace_on;
@ -751,6 +748,12 @@ public class ModBlocks {
public static Block fluid_duct_neo;
public static Block conveyor;
public static Block conveyor_double;
public static Block conveyor_triple;
public static Block conveyor_chute;
public static Block conveyor_lift;
public static Block crane_extractor;
public static Block crane_inserter;
public static Block chain;
@ -1052,6 +1055,8 @@ public class ModBlocks {
public static Block machine_storage_drum;
public static final int guiID_storage_drum = 118;
public static Block machine_autocrafter;
public static Block anvil_iron;
public static Block anvil_lead;
public static Block anvil_steel;
@ -1093,6 +1098,7 @@ public class ModBlocks {
public static final int guiID_fritz = 122;
public static Block turret_brandon;
public static final int guiID_brandon = 122;
public static Block turret_arty;
public static Block rbmk_rod;
public static Block rbmk_rod_mod;
@ -1782,6 +1788,8 @@ public class ModBlocks {
semtex = new BlockSemtex().setBlockName("semtex").setStepSound(Block.soundTypeGrass).setCreativeTab(MainRegistry.nukeTab).setHardness(0.0F).setBlockTextureName(RefStrings.MODID + ":semtex");
c4 = new BlockC4().setBlockName("c4").setStepSound(Block.soundTypeGrass).setCreativeTab(MainRegistry.nukeTab).setHardness(0.0F).setBlockTextureName(RefStrings.MODID + ":c4");
furnace_iron = new FurnaceIron().setBlockName("furnace_iron").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_aluminium");
machine_difurnace_off = new MachineDiFurnace(false).setBlockName("machine_difurnace_off").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab);
machine_difurnace_on = new MachineDiFurnace(true).setBlockName("machine_difurnace_on").setHardness(5.0F).setLightLevel(1.0F).setResistance(10.0F);
machine_difurnace_rtg_off = new MachineDiFurnaceRTG(false).setBlockName("machine_difurnace_rtg_off").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab);
@ -1896,9 +1904,16 @@ public class ModBlocks {
gas_duct = new BlockGasDuct(Material.iron).setBlockName("gas_duct").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":gas_duct_icon");
fluid_duct = new BlockFluidDuct(Material.iron).setBlockName("fluid_duct").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":fluid_duct_icon");
fluid_duct_solid = new BlockFluidDuctSolid(Material.iron).setBlockName("fluid_duct_solid").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":fluid_duct_solid");
conveyor = new BlockConveyor(Material.iron).setBlockName("conveyor").setHardness(0.0F).setResistance(2.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":conveyor");
fluid_duct_neo = new FluidDuctStandard(Material.iron).setBlockName("fluid_duct_neo").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":pipe_neo");
conveyor = new BlockConveyor().setBlockName("conveyor").setHardness(2.0F).setResistance(2.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":conveyor");
conveyor_double = new BlockConveyorDouble().setBlockName("conveyor_double").setHardness(2.0F).setResistance(2.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":conveyor_double");
conveyor_triple = new BlockConveyorTriple().setBlockName("conveyor_triple").setHardness(2.0F).setResistance(2.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":conveyor_triple");
conveyor_chute = new BlockConveyorChute().setBlockName("conveyor_chute").setHardness(2.0F).setResistance(2.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":conveyor");
conveyor_lift = new BlockConveyorLift().setBlockName("conveyor_lift").setHardness(2.0F).setResistance(2.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":conveyor");
crane_extractor = new CraneExtractor().setBlockName("crane_extractor").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab);
crane_inserter = new CraneInserter().setBlockName("crane_inserter").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab);
chain = new BlockChain(Material.iron).setBlockName("dungeon_chain").setHardness(0.25F).setResistance(2.0F).setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":chain");
ladder_sturdy = new BlockNTMLadder().setBlockName("ladder_sturdy").setHardness(0.25F).setResistance(2.0F).setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":ladder_sturdy");
@ -2067,6 +2082,7 @@ public class ModBlocks {
turret_maxwell = new TurretMaxwell(Material.iron).setBlockName("turret_maxwell").setHardness(5.0F).setResistance(600.0F).setCreativeTab(MainRegistry.weaponTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
turret_fritz = new TurretFritz(Material.iron).setBlockName("turret_fritz").setHardness(5.0F).setResistance(600.0F).setCreativeTab(MainRegistry.weaponTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
turret_brandon = new TurretBrandon(Material.iron).setBlockName("turret_brandon").setHardness(5.0F).setResistance(600.0F).setCreativeTab(MainRegistry.weaponTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
turret_arty = new TurretArty(Material.iron).setBlockName("turret_arty").setHardness(5.0F).setResistance(600.0F).setCreativeTab(MainRegistry.weaponTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
rbmk_rod = new RBMKRod(false).setBlockName("rbmk_rod").setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":rbmk/rbmk_element");
rbmk_rod_mod = new RBMKRod(true).setBlockName("rbmk_rod_mod").setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":rbmk/rbmk_element_mod");
@ -2112,8 +2128,10 @@ public class ModBlocks {
crate_jungle = new BlockJungleCrate(Material.rock).setBlockName("crate_jungle").setStepSound(Block.soundTypeStone).setHardness(1.0F).setResistance(2.5F).setCreativeTab(MainRegistry.consumableTab).setBlockTextureName(RefStrings.MODID + ":crate_jungle");
crate_iron = new BlockStorageCrate(Material.iron).setBlockName("crate_iron").setStepSound(Block.soundTypeMetal).setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab);
crate_steel = new BlockStorageCrate(Material.iron).setBlockName("crate_steel").setStepSound(Block.soundTypeMetal).setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab);
crate_tungsten = new BlockStorageCrate(Material.iron).setBlockName("crate_tungsten").setStepSound(Block.soundTypeMetal).setHardness(7.5F).setResistance(60.0F).setCreativeTab(MainRegistry.machineTab);
crate_desh = new BlockStorageCrate(Material.iron).setBlockName("crate_desh").setStepSound(Block.soundTypeMetal).setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab);
crate_tungsten = new BlockStorageCrate(Material.iron).setBlockName("crate_tungsten").setStepSound(Block.soundTypeMetal).setHardness(7.5F).setResistance(300.0F).setCreativeTab(MainRegistry.machineTab);
safe = new BlockStorageCrate(Material.iron).setBlockName("safe").setStepSound(Block.soundTypeMetal).setHardness(7.5F).setResistance(10000.0F).setCreativeTab(MainRegistry.machineTab);
mass_storage = new BlockMassStorage().setBlockName("mass_storage").setStepSound(Block.soundTypeMetal).setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab);
boxcar = new DecoBlock(Material.iron).setBlockName("boxcar").setStepSound(Block.soundTypeMetal).setHardness(10.0F).setResistance(10.0F).setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":boxcar");
boat = new DecoBlock(Material.iron).setBlockName("boat").setStepSound(Block.soundTypeMetal).setHardness(10.0F).setResistance(10.0F).setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":boat");
@ -2123,7 +2141,7 @@ public class ModBlocks {
machine_pumpjack = new MachinePumpjack().setBlockName("machine_pumpjack").setHardness(5.0F).setResistance(60.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":machine_pumpjack");
machine_fracking_tower = new MachineFrackingTower().setBlockName("machine_fracking_tower").setHardness(5.0F).setResistance(60.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
oil_pipe = new BlockNoDrop(Material.iron).setBlockName("oil_pipe").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":oil_pipe");
machine_flare = new MachineGasFlare(Material.iron).setBlockName("machine_flare").setHardness(5.0F).setResistance(100.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":machine_flare");
machine_flare = new MachineGasFlare(Material.iron).setBlockName("machine_flare").setHardness(5.0F).setResistance(100.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
machine_refinery = new MachineRefinery(Material.iron).setBlockName("machine_refinery").setHardness(5.0F).setResistance(100.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":machine_refinery");
machine_fraction_tower = new MachineFractionTower(Material.iron).setBlockName("machine_fraction_tower").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
fraction_spacer = new FractionSpacer(Material.iron).setBlockName("fraction_spacer").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
@ -2169,6 +2187,8 @@ public class ModBlocks {
machine_electrolyser = new MachineElectrolyser().setBlockName("machine_electrolyser").setHardness(10.0F).setResistance(20.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel_machine");
machine_autocrafter = new MachineAutocrafter().setBlockName("machine_autocrafter").setCreativeTab(MainRegistry.machineTab);
anvil_iron = new NTMAnvil(Material.iron, 1).setBlockName("anvil_iron").setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":anvil_iron");
anvil_lead = new NTMAnvil(Material.iron, 1).setBlockName("anvil_lead").setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":anvil_lead");
anvil_steel = new NTMAnvil(Material.iron, 2).setBlockName("anvil_steel").setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":anvil_steel");
@ -2818,6 +2838,7 @@ public class ModBlocks {
GameRegistry.registerBlock(turret_maxwell, turret_maxwell.getUnlocalizedName());
GameRegistry.registerBlock(turret_fritz, turret_fritz.getUnlocalizedName());
GameRegistry.registerBlock(turret_brandon, turret_brandon.getUnlocalizedName());
GameRegistry.registerBlock(turret_arty, turret_arty.getUnlocalizedName());
//Wall-mounted Explosives
GameRegistry.registerBlock(charge_dynamite, ItemBlockBase.class, charge_dynamite.getUnlocalizedName());
@ -2906,8 +2927,10 @@ public class ModBlocks {
//Crates
GameRegistry.registerBlock(crate_iron, crate_iron.getUnlocalizedName());
GameRegistry.registerBlock(crate_steel, crate_steel.getUnlocalizedName());
GameRegistry.registerBlock(crate_desh, crate_desh.getUnlocalizedName());
GameRegistry.registerBlock(crate_tungsten, crate_tungsten.getUnlocalizedName());
GameRegistry.registerBlock(safe, safe.getUnlocalizedName());
GameRegistry.registerBlock(mass_storage, mass_storage.getUnlocalizedName());
//Junk
GameRegistry.registerBlock(boxcar, boxcar.getUnlocalizedName());
@ -2918,6 +2941,8 @@ public class ModBlocks {
//GameRegistry.registerBlock(observer_off, observer_off.getUnlocalizedName());
//GameRegistry.registerBlock(observer_on, observer_on.getUnlocalizedName());
GameRegistry.registerBlock(machine_autocrafter, ItemBlockBase.class, machine_autocrafter.getUnlocalizedName());
GameRegistry.registerBlock(anvil_iron, ItemBlockBase.class, anvil_iron.getUnlocalizedName());
GameRegistry.registerBlock(anvil_lead, ItemBlockBase.class, anvil_lead.getUnlocalizedName());
GameRegistry.registerBlock(anvil_steel, ItemBlockBase.class, anvil_steel.getUnlocalizedName());
@ -2933,6 +2958,7 @@ public class ModBlocks {
GameRegistry.registerBlock(press_preheater, press_preheater.getUnlocalizedName());
GameRegistry.registerBlock(machine_press, machine_press.getUnlocalizedName());
GameRegistry.registerBlock(machine_epress, machine_epress.getUnlocalizedName());
GameRegistry.registerBlock(furnace_iron, furnace_iron.getUnlocalizedName());
GameRegistry.registerBlock(machine_difurnace_off, machine_difurnace_off.getUnlocalizedName());
GameRegistry.registerBlock(machine_difurnace_on, machine_difurnace_on.getUnlocalizedName());
GameRegistry.registerBlock(machine_difurnace_rtg_off, machine_difurnace_rtg_off.getUnlocalizedName());
@ -3043,9 +3069,16 @@ public class ModBlocks {
GameRegistry.registerBlock(fluid_duct, fluid_duct.getUnlocalizedName());
GameRegistry.registerBlock(fluid_duct_neo, ItemBlockBase.class, fluid_duct_neo.getUnlocalizedName());
GameRegistry.registerBlock(fluid_duct_solid, fluid_duct_solid.getUnlocalizedName());
GameRegistry.registerBlock(conveyor, conveyor.getUnlocalizedName());
GameRegistry.registerBlock(chain, chain.getUnlocalizedName());
GameRegistry.registerBlock(crane_extractor, crane_extractor.getUnlocalizedName());
GameRegistry.registerBlock(crane_inserter, crane_inserter.getUnlocalizedName());
GameRegistry.registerBlock(conveyor, conveyor.getUnlocalizedName());
GameRegistry.registerBlock(conveyor_double, conveyor_double.getUnlocalizedName());
GameRegistry.registerBlock(conveyor_triple, conveyor_triple.getUnlocalizedName());
GameRegistry.registerBlock(conveyor_chute, conveyor_chute.getUnlocalizedName());
GameRegistry.registerBlock(conveyor_lift, conveyor_lift.getUnlocalizedName());
GameRegistry.registerBlock(chain, chain.getUnlocalizedName());
GameRegistry.registerBlock(ladder_sturdy, ladder_sturdy.getUnlocalizedName());
GameRegistry.registerBlock(ladder_iron, ladder_iron.getUnlocalizedName());
GameRegistry.registerBlock(ladder_gold, ladder_gold.getUnlocalizedName());
@ -3111,7 +3144,7 @@ public class ModBlocks {
GameRegistry.registerBlock(machine_well, machine_well.getUnlocalizedName());
GameRegistry.registerBlock(machine_pumpjack, machine_pumpjack.getUnlocalizedName());
GameRegistry.registerBlock(machine_fracking_tower, machine_fracking_tower.getUnlocalizedName());
GameRegistry.registerBlock(machine_flare, machine_flare.getUnlocalizedName());
GameRegistry.registerBlock(machine_flare, ItemBlockBase.class, machine_flare.getUnlocalizedName());
GameRegistry.registerBlock(machine_refinery, machine_refinery.getUnlocalizedName());
GameRegistry.registerBlock(machine_fraction_tower, machine_fraction_tower.getUnlocalizedName());
GameRegistry.registerBlock(fraction_spacer, fraction_spacer.getUnlocalizedName());

View File

@ -54,5 +54,4 @@ public class DetMiner extends BlockPillar implements IBomb {
this.explode(world, x, y, z);
}
}
}

View File

@ -277,8 +277,6 @@ public class LaunchPad extends BlockContainer implements IBomb {
MainRegistry.logger.log(Level.INFO, "[MISSILE] Tried to launch missile at " + x + " / " + y + " / " + z + " to " + xCoord + " / " + zCoord + "!");
return BombReturnCode.LAUNCHED;
}
return BombReturnCode.ERROR_MISSING_COMPONENT;
}
if(entity.slots[0] != null && entity.slots[0].getItem() == ModItems.missile_carrier && entity.power >= 75000) {

View File

@ -2,6 +2,7 @@ package com.hbm.blocks.generic;
import java.util.Random;
import com.hbm.blocks.machine.ZirnoxDestroyed;
import com.hbm.blocks.machine.rbmk.RBMKDebris;
import cpw.mods.fml.relauncher.Side;
@ -55,7 +56,7 @@ public class BlockLayering extends Block {
public boolean canPlaceBlockAt(World world, int x, int y, int z) {
Block block = world.getBlock(x, y - 1, z);
if(block instanceof RBMKDebris)
if(block instanceof RBMKDebris || block instanceof ZirnoxDestroyed)
return true;
return block != Blocks.ice && block != Blocks.packed_ice ? (block.isLeaves(world, x, y - 1, z) ? true : (block == this && (world.getBlockMetadata(x, y - 1, z) & 7) == 7 ? true : block.isOpaqueCube() && block.getMaterial().blocksMovement())) : false;

View File

@ -1,11 +1,13 @@
package com.hbm.blocks.generic;
import java.util.List;
import java.util.Random;
import com.hbm.blocks.BlockEnumMulti;
import com.hbm.blocks.ITooltipProvider;
import net.minecraft.block.Block;
import net.minecraft.block.IGrowable;
import net.minecraft.block.material.Material;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
@ -17,7 +19,7 @@ import net.minecraftforge.common.EnumPlantType;
import net.minecraftforge.common.IPlantable;
import net.minecraftforge.common.util.ForgeDirection;
public class BlockNTMFlower extends BlockEnumMulti implements IPlantable, ITooltipProvider {
public class BlockNTMFlower extends BlockEnumMulti implements IPlantable, IGrowable, ITooltipProvider {
public BlockNTMFlower() {
super(Material.plants, EnumFlowerType.class, true, true);
@ -97,6 +99,24 @@ public class BlockNTMFlower extends BlockEnumMulti implements IPlantable, IToolt
return meta;
}
/* grow condition */
@Override
public boolean func_149851_a(World world, int x, int y, int z, boolean b) {
return true;
}
/* chance */
@Override
public boolean func_149852_a(World p_149852_1_, Random p_149852_2_, int p_149852_3_, int p_149852_4_, int p_149852_5_) {
return true;
}
/* grow */
@Override
public void func_149853_b(World world, Random rand, int x, int y, int z) {
this.dropBlockAsItem(world, x, y, z, world.getBlockMetadata(x, y, z), 0);
}
@Override
public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) { }
}

View File

@ -143,7 +143,7 @@ public class BlockOre extends Block {
case 31:
return ModItems.ammo_nuke_low;
case 32:
return ModItems.gun_mirv_ammo;
return ModItems.ammo_mirv;
case 33:
return ModItems.gun_defabricator_ammo;
case 34:

View File

@ -8,6 +8,8 @@ import com.hbm.items.tool.ItemLock;
import com.hbm.lib.RefStrings;
import com.hbm.main.MainRegistry;
import com.hbm.tileentity.machine.TileEntityLockableBase;
import com.hbm.tileentity.machine.storage.TileEntityCrateBase;
import com.hbm.tileentity.machine.storage.TileEntityCrateDesh;
import com.hbm.tileentity.machine.storage.TileEntityCrateIron;
import com.hbm.tileentity.machine.storage.TileEntityCrateSteel;
import com.hbm.tileentity.machine.storage.TileEntityCrateTungsten;
@ -56,10 +58,18 @@ public class BlockStorageCrate extends BlockContainer {
this.iconTop = iconRegister.registerIcon(RefStrings.MODID + ":crate_tungsten_top");
this.blockIcon = iconRegister.registerIcon(RefStrings.MODID + ":crate_tungsten_side");
}
if(this == ModBlocks.crate_desh) {
this.iconTop = iconRegister.registerIcon(RefStrings.MODID + ":crate_desh_top");
this.blockIcon = iconRegister.registerIcon(RefStrings.MODID + ":crate_desh_side");
}
if(this == ModBlocks.safe) {
this.iconTop = iconRegister.registerIcon(RefStrings.MODID + ":safe_front");
this.blockIcon = iconRegister.registerIcon(RefStrings.MODID + ":safe_side");
}
if(this == ModBlocks.mass_storage) {
this.iconTop = iconRegister.registerIcon(RefStrings.MODID + ":mass_storage_top");
this.blockIcon = iconRegister.registerIcon(RefStrings.MODID + ":mass_storage_side");
}
}
@Override
@ -74,14 +84,11 @@ public class BlockStorageCrate extends BlockContainer {
@Override
public TileEntity createNewTileEntity(World p_149915_1_, int p_149915_2_) {
if(this == ModBlocks.crate_iron)
return new TileEntityCrateIron();
if(this == ModBlocks.crate_steel)
return new TileEntityCrateSteel();
if(this == ModBlocks.crate_tungsten)
return new TileEntityCrateTungsten();
if(this == ModBlocks.safe)
return new TileEntitySafe();
if(this == ModBlocks.crate_iron) return new TileEntityCrateIron();
if(this == ModBlocks.crate_steel) return new TileEntityCrateSteel();
if(this == ModBlocks.crate_desh) return new TileEntityCrateDesh();
if(this == ModBlocks.crate_tungsten) return new TileEntityCrateTungsten();
if(this == ModBlocks.safe) return new TileEntitySafe();
return null;
}
@ -143,17 +150,8 @@ public class BlockStorageCrate extends BlockContainer {
} else if(!player.isSneaking()) {
TileEntity entity = world.getTileEntity(x, y, z);
if(entity instanceof TileEntityCrateIron && ((TileEntityCrateIron) entity).canAccess(player)) {
FMLNetworkHandler.openGui(player, MainRegistry.instance, ModBlocks.guiID_crate_iron, world, x, y, z);
}
if(entity instanceof TileEntityCrateSteel && ((TileEntityCrateSteel) entity).canAccess(player)) {
FMLNetworkHandler.openGui(player, MainRegistry.instance, ModBlocks.guiID_crate_steel, world, x, y, z);
}
if(entity instanceof TileEntityCrateTungsten && ((TileEntityCrateTungsten) entity).canAccess(player)) {
FMLNetworkHandler.openGui(player, MainRegistry.instance, ModBlocks.guiID_crate_tungsten, world, x, y, z);
}
if(entity instanceof TileEntitySafe && ((TileEntitySafe) entity).canAccess(player)) {
FMLNetworkHandler.openGui(player, MainRegistry.instance, ModBlocks.guiID_safe, world, x, y, z);
if(entity instanceof TileEntityCrateBase && ((TileEntityCrateBase) entity).canAccess(player)) {
FMLNetworkHandler.openGui(player, MainRegistry.instance, 0, world, x, y, z);
}
return true;
} else {

View File

@ -0,0 +1,214 @@
package com.hbm.blocks.machine;
import java.util.Random;
import com.hbm.blocks.ModBlocks;
import com.hbm.items.ModItems;
import com.hbm.items.tool.ItemLock;
import com.hbm.lib.RefStrings;
import com.hbm.main.MainRegistry;
import com.hbm.tileentity.machine.TileEntityLockableBase;
import com.hbm.tileentity.machine.storage.TileEntityMassStorage;
import cpw.mods.fml.common.network.internal.FMLNetworkHandler;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.block.Block;
import net.minecraft.block.BlockContainer;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.ISidedInventory;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.IIcon;
import net.minecraft.world.World;
public class BlockMassStorage extends BlockContainer {
@SideOnly(Side.CLIENT)
private IIcon iconTop;
public BlockMassStorage() {
super(Material.iron);
}
@Override
@SideOnly(Side.CLIENT)
public void registerBlockIcons(IIconRegister iconRegister) {
this.iconTop = iconRegister.registerIcon(RefStrings.MODID + ":mass_storage_top");
this.blockIcon = iconRegister.registerIcon(RefStrings.MODID + ":mass_storage_side");
}
@Override
@SideOnly(Side.CLIENT)
public IIcon getIcon(int side, int metadata) {
if(this == ModBlocks.safe)
return metadata == 0 && side == 3 ? this.iconTop : (side == metadata ? this.iconTop : this.blockIcon);
return side == 1 ? this.iconTop : (side == 0 ? this.iconTop : this.blockIcon);
}
@Override
public TileEntity createNewTileEntity(World world, int meta) {
return new TileEntityMassStorage();
}
@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) {
return true;
} else if(player.getHeldItem() != null && (player.getHeldItem().getItem() instanceof ItemLock || player.getHeldItem().getItem() == ModItems.key_kit)) {
return false;
} else if(!player.isSneaking()) {
TileEntity entity = world.getTileEntity(x, y, z);
if(entity instanceof TileEntityMassStorage && ((TileEntityMassStorage) entity).canAccess(player)) {
FMLNetworkHandler.openGui(player, MainRegistry.instance, 0, world, x, y, z);
}
return true;
} else {
return false;
}
}
private static boolean dropInv = true;
@Override
public boolean removedByPlayer(World world, EntityPlayer player, int x, int y, int z, boolean willHarvest) {
if(!player.capabilities.isCreativeMode && !world.isRemote && willHarvest) {
ItemStack drop = new ItemStack(this);
ISidedInventory inv = (ISidedInventory)world.getTileEntity(x, y, z);
NBTTagCompound nbt = new NBTTagCompound();
if(inv != null) {
for(int i = 0; i < inv.getSizeInventory(); i++) {
ItemStack stack = inv.getStackInSlot(i);
if(stack == null)
continue;
NBTTagCompound slot = new NBTTagCompound();
stack.writeToNBT(slot);
nbt.setTag("slot" + i, slot);
}
}
if(inv instanceof TileEntityLockableBase) {
TileEntityLockableBase lockable = (TileEntityLockableBase) inv;
if(lockable.isLocked()) {
nbt.setInteger("lock", lockable.getPins());
nbt.setDouble("lockMod", lockable.getMod());
}
}
if(inv instanceof TileEntityMassStorage) {
TileEntityMassStorage storage = (TileEntityMassStorage) inv;
nbt.setInteger("stack", storage.getStockpile());
}
if(!nbt.hasNoTags()) {
drop.stackTagCompound = nbt;
}
world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, drop));
}
dropInv = false;
boolean flag = world.setBlockToAir(x, y, z);
dropInv = true;
return flag;
}
@Override
public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase player, ItemStack stack) {
ISidedInventory inv = (ISidedInventory)world.getTileEntity(x, y, z);
if(inv != null && stack.hasTagCompound()) {
for(int i = 0; i < inv.getSizeInventory(); i++) {
inv.setInventorySlotContents(i, ItemStack.loadItemStackFromNBT(stack.stackTagCompound.getCompoundTag("slot" + i)));
}
if(inv instanceof TileEntityMassStorage) {
TileEntityMassStorage storage = (TileEntityMassStorage) inv;
if(stack.stackTagCompound.hasKey("lock")) {
storage.setPins(stack.stackTagCompound.getInteger("lock"));
storage.setMod(stack.stackTagCompound.getDouble("lockMod"));
storage.lock();
}
storage.setStockpile(stack.stackTagCompound.getInteger("stack"));
}
}
super.onBlockPlacedBy(world, x, y, z, player, stack);
}
@Override
public void breakBlock(World world, int x, int y, int z, Block block, int meta) {
if(dropInv) {
ISidedInventory sided = (ISidedInventory) world.getTileEntity(x, y, z);
Random rand = world.rand;
if(sided != null) {
for(int i1 = 0; i1 < sided.getSizeInventory(); ++i1) {
if(i1 == 1) continue; //do NOT drop the filter item
ItemStack itemstack = sided.getStackInSlot(i1);
if(itemstack != null) {
float f = rand.nextFloat() * 0.8F + 0.1F;
float f1 = rand.nextFloat() * 0.8F + 0.1F;
float f2 = rand.nextFloat() * 0.8F + 0.1F;
while(itemstack.stackSize > 0) {
int j1 = rand.nextInt(21) + 10;
if(j1 > itemstack.stackSize) {
j1 = itemstack.stackSize;
}
itemstack.stackSize -= j1;
EntityItem entityitem = new EntityItem(world, x + f, y + f1, z + f2, new ItemStack(itemstack.getItem(), j1, itemstack.getItemDamage()));
if(itemstack.hasTagCompound()) {
entityitem.getEntityItem().setTagCompound((NBTTagCompound) itemstack.getTagCompound().copy());
}
float f3 = 0.05F;
entityitem.motionX = (float) rand.nextGaussian() * f3;
entityitem.motionY = (float) rand.nextGaussian() * f3 + 0.2F;
entityitem.motionZ = (float) rand.nextGaussian() * f3;
world.spawnEntityInWorld(entityitem);
}
}
}
world.func_147453_f(x, y, z, block);
}
}
super.breakBlock(world, x, y, z, block, meta);
}
@Override
public Item getItemDropped(int i, Random rand, int j) {
return null;
}
}

View File

@ -74,7 +74,7 @@ public class DeuteriumTower extends BlockDummyable implements ILookOverlay {
TileEntityDeuteriumTower tower = (TileEntityDeuteriumTower) te;
List<String> text = new ArrayList();
text.add((tower.power < tower.maxPower / 10 ? EnumChatFormatting.RED : EnumChatFormatting.GREEN) + "Power: " + BobMathUtil.getShortNumber(tower.power) + "HE");
text.add((tower.power < tower.getMaxPower() / 20 ? EnumChatFormatting.RED : EnumChatFormatting.GREEN) + "Power: " + BobMathUtil.getShortNumber(tower.power) + "HE");
for(int i = 0; i < tower.tanks.length; i++)
text.add((i < 1 ? (EnumChatFormatting.GREEN + "-> ") : (EnumChatFormatting.RED + "<- ")) + EnumChatFormatting.RESET + I18nUtil.resolveKey("hbmfluid." + tower.tanks[i].getTankType().getName().toLowerCase()) + ": " + tower.tanks[i].getFill() + "/" + tower.tanks[i].getMaxFill() + "mB");

View File

@ -0,0 +1,38 @@
package com.hbm.blocks.machine;
import com.hbm.blocks.BlockDummyable;
import com.hbm.tileentity.TileEntityProxyCombo;
import com.hbm.tileentity.machine.TileEntityFurnaceIron;
import net.minecraft.block.material.Material;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
public class FurnaceIron extends BlockDummyable {
public FurnaceIron() {
super(Material.iron);
}
@Override
public TileEntity createNewTileEntity(World world, int meta) {
if(meta >= 12) return new TileEntityFurnaceIron();
return new TileEntityProxyCombo(true, false, false);
}
@Override
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) {
return this.standardOpenBehavior(world, x, y, z, player, 0);
}
@Override
public int[] getDimensions() {
return new int[] {1, 0, 1, 0, 1, 0};
}
@Override
public int getOffset() {
return 0;
}
}

View File

@ -8,6 +8,7 @@ import net.minecraft.block.material.Material;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
public class MachineAssemfac extends BlockDummyable {
@ -36,4 +37,27 @@ public class MachineAssemfac extends BlockDummyable {
public int getOffset() {
return 3;
}
@Override
public void fillSpace(World world, int x, int y, int z, ForgeDirection dir, int o) {
super.fillSpace(world, x, y, z, dir, o);
x += dir.offsetX * o;
z += dir.offsetZ * o;
ForgeDirection rot = dir.getRotation(ForgeDirection.DOWN);
this.safeRem = true;
this.makeExtra(world, x + dir.offsetX * 3 + rot.offsetX * 2, y, z + dir.offsetZ * 3 + rot.offsetZ * 2);
this.makeExtra(world, x + dir.offsetX * 3 - rot.offsetX * 3, y, z + dir.offsetZ * 3 - rot.offsetZ * 3);
this.makeExtra(world, x - dir.offsetX * 4 + rot.offsetX * 2, y, z - dir.offsetZ * 4 + rot.offsetZ * 2);
this.makeExtra(world, x - dir.offsetX * 4 - rot.offsetX * 3, y, z - dir.offsetZ * 4 - rot.offsetZ * 3);
this.makeExtra(world, x + rot.offsetX * 3 + dir.offsetX * 2, y, z + rot.offsetZ * 3 + dir.offsetZ * 2);
this.makeExtra(world, x + rot.offsetX * 3 - dir.offsetX * 3, y, z + rot.offsetZ * 3 - dir.offsetZ * 3);
this.makeExtra(world, x - rot.offsetX * 4 + dir.offsetX * 2, y, z - rot.offsetZ * 4 + dir.offsetZ * 2);
this.makeExtra(world, x - rot.offsetX * 4 - dir.offsetX * 3, y, z - rot.offsetZ * 4 - dir.offsetZ * 3);
this.safeRem = false;
}
}

View File

@ -0,0 +1,114 @@
package com.hbm.blocks.machine;
import java.util.Random;
import com.hbm.lib.RefStrings;
import com.hbm.main.MainRegistry;
import com.hbm.tileentity.machine.TileEntityMachineAutocrafter;
import cpw.mods.fml.common.network.internal.FMLNetworkHandler;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.block.Block;
import net.minecraft.block.BlockContainer;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.ISidedInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.IIcon;
import net.minecraft.world.World;
public class MachineAutocrafter extends BlockContainer {
@SideOnly(Side.CLIENT)
private IIcon iconTop;
@SideOnly(Side.CLIENT)
private IIcon iconBottom;
public MachineAutocrafter() {
super(Material.iron);
}
@Override
@SideOnly(Side.CLIENT)
public void registerBlockIcons(IIconRegister iconRegister) {
this.iconTop = iconRegister.registerIcon(RefStrings.MODID + ":machine_autocrafter_top");
this.blockIcon = iconRegister.registerIcon(RefStrings.MODID + ":machine_autocrafter_side");
this.iconBottom = iconRegister.registerIcon(RefStrings.MODID + ":machine_autocrafter_bottom");
}
@Override
@SideOnly(Side.CLIENT)
public IIcon getIcon(int side, int metadata) {
return side == 1 ? this.iconTop : (side == 0 ? this.iconBottom : this.blockIcon);
}
@Override
public TileEntity createNewTileEntity(World world, int meta) {
return new TileEntityMachineAutocrafter();
}
@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) {
return true;
} else if(!player.isSneaking()) {
TileEntity entity = world.getTileEntity(x, y, z);
if(entity instanceof TileEntityMachineAutocrafter) {
FMLNetworkHandler.openGui(player, MainRegistry.instance, 0, world, x, y, z);
}
return true;
} else {
return false;
}
}
private final Random field_149933_a = new Random();
@Override
public void breakBlock(World p_149749_1_, int p_149749_2_, int p_149749_3_, int p_149749_4_, Block p_149749_5_, int p_149749_6_) {
ISidedInventory tileentityfurnace = (ISidedInventory) p_149749_1_.getTileEntity(p_149749_2_, p_149749_3_, p_149749_4_);
if(tileentityfurnace != null) {
for(int i1 = 10; i1 < tileentityfurnace.getSizeInventory(); ++i1) {
ItemStack itemstack = tileentityfurnace.getStackInSlot(i1);
if(itemstack != null) {
float f = this.field_149933_a.nextFloat() * 0.8F + 0.1F;
float f1 = this.field_149933_a.nextFloat() * 0.8F + 0.1F;
float f2 = this.field_149933_a.nextFloat() * 0.8F + 0.1F;
while(itemstack.stackSize > 0) {
int j1 = this.field_149933_a.nextInt(21) + 10;
if(j1 > itemstack.stackSize) {
j1 = itemstack.stackSize;
}
itemstack.stackSize -= j1;
EntityItem entityitem = new EntityItem(p_149749_1_, p_149749_2_ + f, p_149749_3_ + f1, p_149749_4_ + f2, new ItemStack(itemstack.getItem(), j1, itemstack.getItemDamage()));
if(itemstack.hasTagCompound()) {
entityitem.getEntityItem().setTagCompound((NBTTagCompound) itemstack.getTagCompound().copy());
}
float f3 = 0.05F;
entityitem.motionX = (float) this.field_149933_a.nextGaussian() * f3;
entityitem.motionY = (float) this.field_149933_a.nextGaussian() * f3 + 0.2F;
entityitem.motionZ = (float) this.field_149933_a.nextGaussian() * f3;
p_149749_1_.spawnEntityInWorld(entityitem);
}
}
}
p_149749_1_.func_147453_f(p_149749_2_, p_149749_3_, p_149749_4_, p_149749_5_);
}
super.breakBlock(p_149749_1_, p_149749_2_, p_149749_3_, p_149749_4_, p_149749_5_, p_149749_6_);
}
}

View File

@ -7,8 +7,7 @@ import com.hbm.blocks.BlockDummyable;
import com.hbm.blocks.ILookOverlay;
import com.hbm.handler.MultiblockHandlerXR;
import com.hbm.inventory.fluid.FluidType;
import com.hbm.inventory.fluid.Fluids;
import com.hbm.items.ModItems;
import com.hbm.items.machine.IItemFluidIdentifier;
import com.hbm.tileentity.TileEntityProxyCombo;
import com.hbm.tileentity.machine.oil.TileEntityMachineCatalyticCracker;
import com.hbm.util.I18nUtil;
@ -56,7 +55,7 @@ public class MachineCatalyticCracker extends BlockDummyable implements ILookOver
if(!world.isRemote && !player.isSneaking()) {
if(player.getHeldItem() != null && player.getHeldItem().getItem() == ModItems.fluid_identifier) {
if(player.getHeldItem() != null && player.getHeldItem().getItem() instanceof IItemFluidIdentifier) {
int[] pos = this.findCore(world, x, y, z);
if(pos == null)
@ -68,7 +67,7 @@ public class MachineCatalyticCracker extends BlockDummyable implements ILookOver
return false;
TileEntityMachineCatalyticCracker cracker = (TileEntityMachineCatalyticCracker) te;
FluidType type = Fluids.fromID(player.getHeldItem().getItemDamage());
FluidType type = ((IItemFluidIdentifier) player.getHeldItem().getItem()).getType(world, pos[0], pos[1], pos[2], player.getHeldItem());
cracker.tanks[0].setTankType(type);
cracker.markDirty();
player.addChatComponentMessage(new ChatComponentText("Changed type to ").setChatStyle(new ChatStyle().setColor(EnumChatFormatting.YELLOW)).appendSibling(new ChatComponentTranslation("hbmfluid." + type.getName().toLowerCase())).appendSibling(new ChatComponentText("!")));

View File

@ -1,13 +1,20 @@
package com.hbm.blocks.machine;
import java.util.ArrayList;
import java.util.List;
import com.hbm.blocks.ILookOverlay;
import com.hbm.tileentity.machine.TileEntityCondenser;
import com.hbm.util.I18nUtil;
import net.minecraft.block.BlockContainer;
import net.minecraft.block.material.Material;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.world.World;
import net.minecraftforge.client.event.RenderGameOverlayEvent.Pre;
public class MachineCondenser extends BlockContainer {
public class MachineCondenser extends BlockContainer implements ILookOverlay {
public MachineCondenser(Material mat) {
super(mat);
@ -17,4 +24,22 @@ public class MachineCondenser extends BlockContainer {
public TileEntity createNewTileEntity(World world, int meta) {
return new TileEntityCondenser();
}
@Override
public void printHook(Pre event, World world, int x, int y, int z) {
TileEntity te = world.getTileEntity(x, y, z);
if(!(te instanceof TileEntityCondenser))
return;
TileEntityCondenser condenser = (TileEntityCondenser) te;
List<String> text = new ArrayList();
for(int i = 0; i < condenser.tanks.length; i++)
text.add((i < 1 ? (EnumChatFormatting.GREEN + "-> ") : (EnumChatFormatting.RED + "<- ")) + EnumChatFormatting.RESET + I18nUtil.resolveKey("hbmfluid." + condenser.tanks[i].getTankType().getName().toLowerCase()) + ": " + condenser.tanks[i].getFill() + "/" + condenser.tanks[i].getMaxFill() + "mB");
ILookOverlay.printGeneric(event, I18nUtil.resolveKey(getUnlocalizedName() + ".name"), 0xffff00, 0x404000, text);
}
}

View File

@ -63,7 +63,7 @@ public class MachineDeuteriumExtractor extends BlockContainer implements ILookOv
TileEntityDeuteriumExtractor extractor = (TileEntityDeuteriumExtractor) te;
List<String> text = new ArrayList();
text.add((extractor.power < extractor.maxPower / 10 ? EnumChatFormatting.RED : EnumChatFormatting.GREEN) + "Power: " + BobMathUtil.getShortNumber(extractor.power) + "HE");
text.add((extractor.power < extractor.getMaxPower() / 20 ? EnumChatFormatting.RED : EnumChatFormatting.GREEN) + "Power: " + BobMathUtil.getShortNumber(extractor.power) + "HE");
for(int i = 0; i < extractor.tanks.length; i++)
text.add((i < 1 ? (EnumChatFormatting.GREEN + "-> ") : (EnumChatFormatting.RED + "<- ")) + EnumChatFormatting.RESET + I18nUtil.resolveKey("hbmfluid." + extractor.tanks[i].getTankType().getName().toLowerCase()) + ": " + extractor.tanks[i].getFill() + "/" + extractor.tanks[i].getMaxFill() + "mB");

View File

@ -5,7 +5,7 @@ import java.util.Random;
import com.hbm.blocks.ITooltipProvider;
import com.hbm.blocks.ModBlocks;
import com.hbm.inventory.fluid.FluidTypeCombustible.FuelGrade;
import com.hbm.inventory.fluid.types.FluidTypeCombustible.FuelGrade;
import com.hbm.lib.RefStrings;
import com.hbm.main.MainRegistry;
import com.hbm.tileentity.machine.TileEntityMachineDiesel;

View File

@ -6,8 +6,7 @@ import java.util.List;
import com.hbm.blocks.BlockDummyable;
import com.hbm.blocks.ILookOverlay;
import com.hbm.inventory.fluid.FluidType;
import com.hbm.inventory.fluid.Fluids;
import com.hbm.items.ModItems;
import com.hbm.items.machine.IItemFluidIdentifier;
import com.hbm.tileentity.TileEntityProxyCombo;
import com.hbm.tileentity.machine.oil.TileEntityMachineFractionTower;
import com.hbm.util.I18nUtil;
@ -55,7 +54,7 @@ public class MachineFractionTower extends BlockDummyable implements ILookOverlay
if(!world.isRemote && !player.isSneaking()) {
if(player.getHeldItem() != null && player.getHeldItem().getItem() == ModItems.fluid_identifier) {
if(player.getHeldItem() != null && player.getHeldItem().getItem() instanceof IItemFluidIdentifier) {
int[] pos = this.findCore(world, x, y, z);
if(pos == null)
@ -71,7 +70,7 @@ public class MachineFractionTower extends BlockDummyable implements ILookOverlay
if(world.getTileEntity(pos[0], pos[1] - 3, pos[2]) instanceof TileEntityMachineFractionTower) {
player.addChatComponentMessage(new ChatComponentText(EnumChatFormatting.RED + "You can only change the type in the bottom segment!"));
} else {
FluidType type = Fluids.fromID(player.getHeldItem().getItemDamage());
FluidType type = ((IItemFluidIdentifier) player.getHeldItem().getItem()).getType(world, pos[0], pos[1], pos[2], player.getHeldItem());
frac.tanks[0].setTankType(type);
frac.markDirty();
player.addChatComponentMessage(new ChatComponentText("Changed type to ").setChatStyle(new ChatStyle().setColor(EnumChatFormatting.YELLOW)).appendSibling(new ChatComponentTranslation("hbmfluid." + type.getName().toLowerCase())).appendSibling(new ChatComponentText("!")));

View File

@ -1,176 +1,68 @@
package com.hbm.blocks.machine;
import java.util.Random;
import java.util.List;
import com.hbm.blocks.BlockDummyable;
import com.hbm.blocks.ITooltipProvider;
import com.hbm.blocks.ModBlocks;
import com.hbm.handler.MultiblockHandler;
import com.hbm.interfaces.IMultiblock;
import com.hbm.main.MainRegistry;
import com.hbm.tileentity.machine.TileEntityDummy;
import com.hbm.tileentity.TileEntityProxyCombo;
import com.hbm.tileentity.machine.oil.TileEntityMachineGasFlare;
import cpw.mods.fml.common.network.internal.FMLNetworkHandler;
import net.minecraft.block.Block;
import net.minecraft.block.BlockContainer;
import net.minecraft.block.material.Material;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
public class MachineGasFlare extends BlockContainer implements IMultiblock {
public class MachineGasFlare extends BlockDummyable implements ITooltipProvider {
private final Random field_149933_a = new Random();
private Random rand;
private static boolean keepInventory;
public MachineGasFlare(Material p_i45386_1_) {
super(p_i45386_1_);
rand = new Random();
}
@Override
public Item getItemDropped(int p_149650_1_, Random p_149650_2_, int p_149650_3_)
{
return Item.getItemFromBlock(ModBlocks.machine_flare);
}
@Override
public int getRenderType() {
return -1;
public MachineGasFlare(Material mat) {
super(mat);
}
@Override
public boolean isOpaqueCube() {
return false;
}
@Override
public boolean renderAsNormalBlock() {
return false;
public TileEntity createNewTileEntity(World world, int meta) {
if(meta >= 12) return new TileEntityMachineGasFlare();
if(meta >= 6) return new TileEntityProxyCombo(false, true, true);
return null;
}
@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)
{
return true;
} else if(!player.isSneaking())
{
TileEntityMachineGasFlare entity = (TileEntityMachineGasFlare) world.getTileEntity(x, y, z);
if(entity != null)
{
FMLNetworkHandler.openGui(player, MainRegistry.instance, ModBlocks.guiID_machine_flare, world, x, y, z);
}
return true;
} else {
return false;
}
return this.standardOpenBehavior(world, x, y, z, player, ModBlocks.guiID_machine_flare);
}
@Override
public TileEntity createNewTileEntity(World p_149915_1_, int p_149915_2_) {
return new TileEntityMachineGasFlare();
public int[] getDimensions() {
return new int[] {11, 0, 1, 1, 1, 1};
}
@Override
public void breakBlock(World p_149749_1_, int p_149749_2_, int p_149749_3_, int p_149749_4_, Block p_149749_5_, int p_149749_6_)
{
if (!keepInventory)
{
TileEntityMachineGasFlare tileentityfurnace = (TileEntityMachineGasFlare)p_149749_1_.getTileEntity(p_149749_2_, p_149749_3_, p_149749_4_);
if (tileentityfurnace != null)
{
for (int i1 = 0; i1 < tileentityfurnace.getSizeInventory(); ++i1)
{
ItemStack itemstack = tileentityfurnace.getStackInSlot(i1);
if (itemstack != null)
{
float f = this.field_149933_a.nextFloat() * 0.8F + 0.1F;
float f1 = this.field_149933_a.nextFloat() * 0.8F + 0.1F;
float f2 = this.field_149933_a.nextFloat() * 0.8F + 0.1F;
while (itemstack.stackSize > 0)
{
int j1 = this.field_149933_a.nextInt(21) + 10;
if (j1 > itemstack.stackSize)
{
j1 = itemstack.stackSize;
}
itemstack.stackSize -= j1;
EntityItem entityitem = new EntityItem(p_149749_1_, p_149749_2_ + f, p_149749_3_ + f1, p_149749_4_ + f2, new ItemStack(itemstack.getItem(), j1, itemstack.getItemDamage()));
if (itemstack.hasTagCompound())
{
entityitem.getEntityItem().setTagCompound((NBTTagCompound)itemstack.getTagCompound().copy());
}
float f3 = 0.05F;
entityitem.motionX = (float)this.field_149933_a.nextGaussian() * f3;
entityitem.motionY = (float)this.field_149933_a.nextGaussian() * f3 + 0.2F;
entityitem.motionZ = (float)this.field_149933_a.nextGaussian() * f3;
p_149749_1_.spawnEntityInWorld(entityitem);
}
}
}
p_149749_1_.func_147453_f(p_149749_2_, p_149749_3_, p_149749_4_, p_149749_5_);
}
}
super.breakBlock(p_149749_1_, p_149749_2_, p_149749_3_, p_149749_4_, p_149749_5_, p_149749_6_);
}
@Override
public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase player, ItemStack itemStack) {
public int getOffset() {
return 1;
}
if(MultiblockHandler.checkSpace(world, x, y, z, MultiblockHandler.flareDimension)) {
MultiblockHandler.fillUp(world, x, y, z, MultiblockHandler.flareDimension, ModBlocks.dummy_block_flare);
@Override
public void fillSpace(World world, int x, int y, int z, ForgeDirection dir, int o) {
super.fillSpace(world, x, y, z, dir, o);
this.makeExtra(world, x + dir.offsetX * o + 1, y, z + dir.offsetZ * o);
this.makeExtra(world, x + dir.offsetX * o - 1, y, z + dir.offsetZ * o);
this.makeExtra(world, x + dir.offsetX * o, y, z + dir.offsetZ * o + 1);
this.makeExtra(world, x + dir.offsetX * o, y, z + dir.offsetZ * o - 1);
}
DummyBlockFlare.safeBreak = true;
world.setBlock(x, y, z + 1, ModBlocks.dummy_port_flare);
TileEntity te = world.getTileEntity(x, y, z + 1);
if(te instanceof TileEntityDummy) {
TileEntityDummy dummy = (TileEntityDummy)te;
dummy.targetX = x;
dummy.targetY = y;
dummy.targetZ = z;
}
world.setBlock(x, y, z - 1, ModBlocks.dummy_port_flare);
TileEntity te2 = world.getTileEntity(x, y, z - 1);
if(te instanceof TileEntityDummy) {
TileEntityDummy dummy = (TileEntityDummy)te2;
dummy.targetX = x;
dummy.targetY = y;
dummy.targetZ = z;
}
world.setBlock(x + 1, y, z, ModBlocks.dummy_port_flare);
TileEntity te3 = world.getTileEntity(x + 1, y, z);
if(te3 instanceof TileEntityDummy) {
TileEntityDummy dummy = (TileEntityDummy)te3;
dummy.targetX = x;
dummy.targetY = y;
dummy.targetZ = z;
}
world.setBlock(x - 1, y, z, ModBlocks.dummy_port_flare);
TileEntity te4 = world.getTileEntity(x - 1, y, z);
if(te4 instanceof TileEntityDummy) {
TileEntityDummy dummy = (TileEntityDummy)te4;
dummy.targetX = x;
dummy.targetY = y;
dummy.targetZ = z;
}
DummyBlockFlare.safeBreak = false;
} else
world.func_147480_a(x, y, z, true);
@Override
public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) {
list.add(EnumChatFormatting.GOLD + "Can burn fluids and vent gasses");
list.add(EnumChatFormatting.GOLD + "Burns up to " + EnumChatFormatting.RED + "10mB/t");
list.add(EnumChatFormatting.GOLD + "Vents up to " + EnumChatFormatting.RED + "50mB/t");
list.add("");
list.add(EnumChatFormatting.YELLOW + "Fuel efficiency:");
list.add(EnumChatFormatting.YELLOW + "-Flammable Gasses: " + EnumChatFormatting.RED + "50%");
list.add(EnumChatFormatting.YELLOW + "-Flammable Liquids: " + EnumChatFormatting.RED + "10%");
}
}

View File

@ -5,7 +5,7 @@ import java.util.Random;
import com.hbm.blocks.ITooltipProvider;
import com.hbm.blocks.ModBlocks;
import com.hbm.inventory.fluid.FluidTypeCombustible.FuelGrade;
import com.hbm.inventory.fluid.types.FluidTypeCombustible.FuelGrade;
import com.hbm.main.MainRegistry;
import com.hbm.tileentity.machine.TileEntityMachineSeleniumEngine;

View File

@ -1,15 +1,23 @@
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.tileentity.TileEntityProxyCombo;
import com.hbm.tileentity.machine.TileEntityTowerLarge;
import com.hbm.tileentity.machine.TileEntityTowerSmall;
import com.hbm.util.I18nUtil;
import net.minecraft.block.material.Material;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.world.World;
import net.minecraftforge.client.event.RenderGameOverlayEvent.Pre;
import net.minecraftforge.common.util.ForgeDirection;
public class MachineTowerLarge extends BlockDummyable {
public class MachineTowerLarge extends BlockDummyable implements ILookOverlay {
public MachineTowerLarge(Material mat) {
super(mat);
@ -52,4 +60,26 @@ public class MachineTowerLarge extends BlockDummyable {
this.makeExtra(world, x + dr2.offsetX * 4 + rot.offsetX * -3, y, z + dr2.offsetZ * 4 + rot.offsetZ * -3);
}
}
@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 TileEntityTowerLarge))
return;
TileEntityTowerLarge tower = (TileEntityTowerLarge) te;
List<String> text = new ArrayList();
for(int i = 0; i < tower.tanks.length; i++)
text.add((i < 1 ? (EnumChatFormatting.GREEN + "-> ") : (EnumChatFormatting.RED + "<- ")) + EnumChatFormatting.RESET + I18nUtil.resolveKey("hbmfluid." + tower.tanks[i].getTankType().getName().toLowerCase()) + ": " + tower.tanks[i].getFill() + "/" + tower.tanks[i].getMaxFill() + "mB");
ILookOverlay.printGeneric(event, I18nUtil.resolveKey(getUnlocalizedName() + ".name"), 0xffff00, 0x404000, text);
}
}

View File

@ -1,15 +1,22 @@
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.tileentity.TileEntityProxyCombo;
import com.hbm.tileentity.machine.TileEntityTowerSmall;
import com.hbm.util.I18nUtil;
import net.minecraft.block.material.Material;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.world.World;
import net.minecraftforge.client.event.RenderGameOverlayEvent.Pre;
import net.minecraftforge.common.util.ForgeDirection;
public class MachineTowerSmall extends BlockDummyable {
public class MachineTowerSmall extends BlockDummyable implements ILookOverlay {
public MachineTowerSmall(Material mat) {
super(mat);
@ -49,4 +56,26 @@ public class MachineTowerSmall extends BlockDummyable {
this.makeExtra(world, x + dr2.offsetX * 2, y, z + dr2.offsetZ * 2);
}
}
@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 TileEntityTowerSmall))
return;
TileEntityTowerSmall tower = (TileEntityTowerSmall) te;
List<String> text = new ArrayList();
for(int i = 0; i < tower.tanks.length; i++)
text.add((i < 1 ? (EnumChatFormatting.GREEN + "-> ") : (EnumChatFormatting.RED + "<- ")) + EnumChatFormatting.RESET + I18nUtil.resolveKey("hbmfluid." + tower.tanks[i].getTankType().getName().toLowerCase()) + ": " + tower.tanks[i].getFill() + "/" + tower.tanks[i].getMaxFill() + "mB");
ILookOverlay.printGeneric(event, I18nUtil.resolveKey(getUnlocalizedName() + ".name"), 0xffff00, 0x404000, text);
}
}

View File

@ -7,11 +7,10 @@ import com.hbm.blocks.ITooltipProvider;
import com.hbm.blocks.ModBlocks;
import com.hbm.handler.MultiblockHandler;
import com.hbm.interfaces.IMultiblock;
import com.hbm.inventory.fluid.FluidTypeCombustible.FuelGrade;
import com.hbm.inventory.fluid.types.FluidTypeCombustible.FuelGrade;
import com.hbm.items.ModItems;
import com.hbm.main.MainRegistry;
import com.hbm.tileentity.machine.TileEntityDummy;
import com.hbm.tileentity.machine.TileEntityMachineDiesel;
import com.hbm.tileentity.machine.TileEntityMachineTurbofan;
import cpw.mods.fml.common.network.internal.FMLNetworkHandler;
@ -73,32 +72,32 @@ public class MachineTurbofan extends BlockContainer implements IMultiblock, IToo
//
DummyBlockTurbofan.safeBreak = true;
world.setBlock(x + 1, y + 1, z + 1, ModBlocks.dummy_port_turbofan);
TileEntity te = world.getTileEntity(x + 1, y + 1, z + 1);
world.setBlock(x, y, z + 1, ModBlocks.dummy_port_turbofan);
TileEntity te = world.getTileEntity(x, y, z + 1);
if(te instanceof TileEntityDummy) {
TileEntityDummy dummy = (TileEntityDummy)te;
dummy.targetX = x;
dummy.targetY = y;
dummy.targetZ = z;
}
world.setBlock(x - 1, y + 1, z - 1, ModBlocks.dummy_port_turbofan);
TileEntity te2 = world.getTileEntity(x - 1, y + 1, z - 1);
world.setBlock(x - 1, y, z - 1, ModBlocks.dummy_port_turbofan);
TileEntity te2 = world.getTileEntity(x - 1, y, z - 1);
if(te instanceof TileEntityDummy) {
TileEntityDummy dummy = (TileEntityDummy)te2;
dummy.targetX = x;
dummy.targetY = y;
dummy.targetZ = z;
}
world.setBlock(x + 1, y + 1, z - 1, ModBlocks.dummy_port_turbofan);
TileEntity te3 = world.getTileEntity(x + 1, y + 1, z - 1);
world.setBlock(x, y, z - 1, ModBlocks.dummy_port_turbofan);
TileEntity te3 = world.getTileEntity(x, y, z - 1);
if(te3 instanceof TileEntityDummy) {
TileEntityDummy dummy = (TileEntityDummy)te3;
dummy.targetX = x;
dummy.targetY = y;
dummy.targetZ = z;
}
world.setBlock(x - 1, y + 1, z + 1, ModBlocks.dummy_port_turbofan);
TileEntity te4 = world.getTileEntity(x - 1, y + 1, z + 1);
world.setBlock(x - 1, y, z + 1, ModBlocks.dummy_port_turbofan);
TileEntity te4 = world.getTileEntity(x - 1, y, z + 1);
if(te4 instanceof TileEntityDummy) {
TileEntityDummy dummy = (TileEntityDummy)te4;
dummy.targetX = x;
@ -118,32 +117,32 @@ public class MachineTurbofan extends BlockContainer implements IMultiblock, IToo
//
DummyBlockTurbofan.safeBreak = true;
world.setBlock(x + 1, y + 1, z + 1, ModBlocks.dummy_port_turbofan);
TileEntity te = world.getTileEntity(x + 1, y + 1, z + 1);
world.setBlock(x + 1, y, z, ModBlocks.dummy_port_turbofan);
TileEntity te = world.getTileEntity(x + 1, y, z);
if(te instanceof TileEntityDummy) {
TileEntityDummy dummy = (TileEntityDummy)te;
dummy.targetX = x;
dummy.targetY = y;
dummy.targetZ = z;
}
world.setBlock(x - 1, y + 1, z - 1, ModBlocks.dummy_port_turbofan);
TileEntity te2 = world.getTileEntity(x - 1, y + 1, z - 1);
world.setBlock(x - 1, y, z - 1, ModBlocks.dummy_port_turbofan);
TileEntity te2 = world.getTileEntity(x - 1, y, z - 1);
if(te instanceof TileEntityDummy) {
TileEntityDummy dummy = (TileEntityDummy)te2;
dummy.targetX = x;
dummy.targetY = y;
dummy.targetZ = z;
}
world.setBlock(x + 1, y + 1, z - 1, ModBlocks.dummy_port_turbofan);
TileEntity te3 = world.getTileEntity(x + 1, y + 1, z - 1);
world.setBlock(x + 1, y, z - 1, ModBlocks.dummy_port_turbofan);
TileEntity te3 = world.getTileEntity(x + 1, y, z - 1);
if(te3 instanceof TileEntityDummy) {
TileEntityDummy dummy = (TileEntityDummy)te3;
dummy.targetX = x;
dummy.targetY = y;
dummy.targetZ = z;
}
world.setBlock(x - 1, y + 1, z + 1, ModBlocks.dummy_port_turbofan);
TileEntity te4 = world.getTileEntity(x - 1, y + 1, z + 1);
world.setBlock(x - 1, y, z, ModBlocks.dummy_port_turbofan);
TileEntity te4 = world.getTileEntity(x - 1, y, z);
if(te4 instanceof TileEntityDummy) {
TileEntityDummy dummy = (TileEntityDummy)te4;
dummy.targetX = x;
@ -163,32 +162,32 @@ public class MachineTurbofan extends BlockContainer implements IMultiblock, IToo
//
DummyBlockTurbofan.safeBreak = true;
world.setBlock(x + 1, y + 1, z + 1, ModBlocks.dummy_port_turbofan);
TileEntity te = world.getTileEntity(x + 1, y + 1, z + 1);
world.setBlock(x + 1, y, z + 1, ModBlocks.dummy_port_turbofan);
TileEntity te = world.getTileEntity(x + 1, y, z + 1);
if(te instanceof TileEntityDummy) {
TileEntityDummy dummy = (TileEntityDummy)te;
dummy.targetX = x;
dummy.targetY = y;
dummy.targetZ = z;
}
world.setBlock(x - 1, y + 1, z - 1, ModBlocks.dummy_port_turbofan);
TileEntity te2 = world.getTileEntity(x - 1, y + 1, z - 1);
world.setBlock(x, y, z - 1, ModBlocks.dummy_port_turbofan);
TileEntity te2 = world.getTileEntity(x, y, z - 1);
if(te instanceof TileEntityDummy) {
TileEntityDummy dummy = (TileEntityDummy)te2;
dummy.targetX = x;
dummy.targetY = y;
dummy.targetZ = z;
}
world.setBlock(x + 1, y + 1, z - 1, ModBlocks.dummy_port_turbofan);
TileEntity te3 = world.getTileEntity(x + 1, y + 1, z - 1);
world.setBlock(x + 1, y, z - 1, ModBlocks.dummy_port_turbofan);
TileEntity te3 = world.getTileEntity(x + 1, y, z - 1);
if(te3 instanceof TileEntityDummy) {
TileEntityDummy dummy = (TileEntityDummy)te3;
dummy.targetX = x;
dummy.targetY = y;
dummy.targetZ = z;
}
world.setBlock(x - 1, y + 1, z + 1, ModBlocks.dummy_port_turbofan);
TileEntity te4 = world.getTileEntity(x - 1, y + 1, z + 1);
world.setBlock(x, y, z + 1, ModBlocks.dummy_port_turbofan);
TileEntity te4 = world.getTileEntity(x, y, z + 1);
if(te4 instanceof TileEntityDummy) {
TileEntityDummy dummy = (TileEntityDummy)te4;
dummy.targetX = x;
@ -208,32 +207,32 @@ public class MachineTurbofan extends BlockContainer implements IMultiblock, IToo
//
DummyBlockTurbofan.safeBreak = true;
world.setBlock(x + 1, y + 1, z + 1, ModBlocks.dummy_port_turbofan);
TileEntity te = world.getTileEntity(x + 1, y + 1, z + 1);
world.setBlock(x + 1, y, z + 1, ModBlocks.dummy_port_turbofan);
TileEntity te = world.getTileEntity(x + 1, y, z + 1);
if(te instanceof TileEntityDummy) {
TileEntityDummy dummy = (TileEntityDummy)te;
dummy.targetX = x;
dummy.targetY = y;
dummy.targetZ = z;
}
world.setBlock(x - 1, y + 1, z - 1, ModBlocks.dummy_port_turbofan);
TileEntity te2 = world.getTileEntity(x - 1, y + 1, z - 1);
world.setBlock(x - 1, y, z, ModBlocks.dummy_port_turbofan);
TileEntity te2 = world.getTileEntity(x - 1, y, z);
if(te instanceof TileEntityDummy) {
TileEntityDummy dummy = (TileEntityDummy)te2;
dummy.targetX = x;
dummy.targetY = y;
dummy.targetZ = z;
}
world.setBlock(x + 1, y + 1, z - 1, ModBlocks.dummy_port_turbofan);
TileEntity te3 = world.getTileEntity(x + 1, y + 1, z - 1);
world.setBlock(x + 1, y, z, ModBlocks.dummy_port_turbofan);
TileEntity te3 = world.getTileEntity(x + 1, y, z);
if(te3 instanceof TileEntityDummy) {
TileEntityDummy dummy = (TileEntityDummy)te3;
dummy.targetX = x;
dummy.targetY = y;
dummy.targetZ = z;
}
world.setBlock(x - 1, y + 1, z + 1, ModBlocks.dummy_port_turbofan);
TileEntity te4 = world.getTileEntity(x - 1, y + 1, z + 1);
world.setBlock(x - 1, y, z + 1, ModBlocks.dummy_port_turbofan);
TileEntity te4 = world.getTileEntity(x - 1, y, z + 1);
if(te4 instanceof TileEntityDummy) {
TileEntityDummy dummy = (TileEntityDummy)te4;
dummy.targetX = x;

View File

@ -13,6 +13,7 @@ import com.hbm.tileentity.TileEntityProxyCombo;
import com.hbm.tileentity.machine.TileEntityZirnoxDestroyed;
import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
@ -47,13 +48,29 @@ public class ZirnoxDestroyed extends BlockDummyable {
@Override
public void updateTick(World world, int x, int y, int z, Random rand) {
ForgeDirection dir = ForgeDirection.getOrientation(rand.nextInt(6));
if(rand.nextInt(4) == 0 && world.getBlock(x + dir.offsetX, y + dir.offsetY + 1, z + dir.offsetZ) == Blocks.air) {
world.setBlock(x + dir.offsetX, y + dir.offsetY + 1, z + dir.offsetZ, ModBlocks.gas_meltdown);
Block block = world.getBlock(x, y + 1, z);
if(block == Blocks.air) {
if(rand.nextInt(10) == 0)
world.setBlock(x, y + 1, z, ModBlocks.gas_meltdown);
} else if(block == ModBlocks.foam_layer || block == ModBlocks.block_foam) {
if(rand.nextInt(25) == 0) {
int pos[] = this.findCore(world, x, y, z);
if(pos != null) {
TileEntity te = world.getTileEntity(pos[0], pos[1], pos[2]);
if(te instanceof TileEntityZirnoxDestroyed)
((TileEntityZirnoxDestroyed)te).onFire = false;
}
}
}
if(rand.nextInt(10) == 0 && world.getBlock(x, y + 1, z) == Blocks.air)
world.setBlock(x, y + 1, z, ModBlocks.gas_meltdown);
super.updateTick(world, x, y, z, rand);
}

View File

@ -8,6 +8,7 @@ import com.hbm.packet.AuxParticlePacketNT;
import com.hbm.packet.PacketDispatcher;
import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint;
import net.minecraft.block.Block;
import net.minecraft.init.Blocks;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.world.World;
@ -36,12 +37,17 @@ public class RBMKDebrisBurning extends RBMKDebris {
}
ForgeDirection dir = ForgeDirection.getOrientation(rand.nextInt(6));
Block block = world.getBlock(x + dir.offsetX, y + dir.offsetY, z + dir.offsetZ);
if(rand.nextInt(7) == 0 && world.getBlock(x + dir.offsetX, y + dir.offsetY, z + dir.offsetZ) == Blocks.air) {
if(rand.nextInt(10) == 0 && block == Blocks.air) {
world.setBlock(x + dir.offsetX, y + dir.offsetY, z + dir.offsetZ, ModBlocks.gas_meltdown);
}
if(rand.nextInt(100) == 0) {
//Foam helps stop the fire; Boron smothers it. 1.66% chance every 100-120 seconds for one side
int chance = block == ModBlocks.foam_layer || block == ModBlocks.block_foam ||
block == ModBlocks.sand_boron_layer || block == ModBlocks.sand_boron ? 10 : 100;
if(rand.nextInt(chance) == 0) {
world.setBlock(x, y, z, ModBlocks.pribris);
} else {
world.scheduleBlockUpdate(x, y, z, this, this.tickRate(world));

View File

@ -13,6 +13,7 @@ import com.hbm.util.ContaminationUtil.ContaminationType;
import com.hbm.util.ContaminationUtil.HazardType;
import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint;
import net.minecraft.block.Block;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
@ -49,12 +50,16 @@ public class RBMKDebrisRadiating extends RBMKDebrisBurning {
}
ForgeDirection dir = ForgeDirection.getOrientation(rand.nextInt(6));
if(rand.nextInt(5) == 0 && world.getBlock(x + dir.offsetX, y + dir.offsetY, z + dir.offsetZ) == Blocks.air) {
Block block = world.getBlock(x + dir.offsetX, y + dir.offsetY, z + dir.offsetZ);
if(rand.nextInt(10) == 0 && block == Blocks.air) {
world.setBlock(x + dir.offsetX, y + dir.offsetY, z + dir.offsetZ, ModBlocks.gas_meltdown);
}
if(rand.nextInt(1000) == 0) {
//Boron sand helps stop the fission reaction; 0.66% chance every 20-40 ticks for one side
int chance = block == ModBlocks.sand_boron_layer || block == ModBlocks.sand_boron ? 25 : 1000;
if(rand.nextInt(chance) == 0) {
int meta = world.getBlockMetadata(x, y, z);

View File

@ -1,43 +1,116 @@
package com.hbm.blocks.network;
import com.hbm.entity.item.EntityMovingItem;
import com.hbm.lib.RefStrings;
import api.hbm.conveyor.IConveyorBelt;
import cpw.mods.fml.client.registry.RenderingRegistry;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.item.ItemStack;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.IIcon;
import net.minecraft.util.MathHelper;
import net.minecraft.util.Vec3;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
public class BlockConveyor extends Block {
public class BlockConveyor extends Block implements IConveyorBelt {
public BlockConveyor(Material p_i45394_1_) {
super(p_i45394_1_);
@SideOnly(Side.CLIENT)
protected IIcon sideIcon;
public BlockConveyor() {
super(Material.iron);
}
@Override
public void onEntityCollidedWithBlock(World world, int x, int y, int z, Entity entity) {
@SideOnly(Side.CLIENT)
public void registerBlockIcons(IIconRegister iconRegister) {
super.registerBlockIcons(iconRegister);
this.sideIcon = iconRegister.registerIcon(RefStrings.MODID + ":conveyor_side");
}
@Override
@SideOnly(Side.CLIENT)
public IIcon getIcon(int side, int metadata) {
if((metadata == 2 || metadata == 3) && (side == 4 || side == 5))
return this.sideIcon;
if((metadata == 4 || metadata == 5) && (side == 2 || side == 3))
return this.sideIcon;
return super.getIcon(side, metadata);
}
@Override
public Vec3 getTravelLocation(World world, int x, int y, int z, Vec3 itemPos, double speed) {
ForgeDirection dir = getTravelDirection(world, x, y, z, itemPos, speed);
//snapping point
Vec3 snap = this.getClosestSnappingPosition(world, x, y, z, itemPos);
//snapping point + speed
Vec3 dest = Vec3.createVectorHelper(snap.xCoord - dir.offsetX * speed, snap.yCoord - dir.offsetY * speed, snap.zCoord - dir.offsetZ * speed);
//delta to get to that point
Vec3 motion = Vec3.createVectorHelper((dest.xCoord - itemPos.xCoord), (dest.yCoord - itemPos.yCoord), (dest.zCoord - itemPos.zCoord));
double len = motion.lengthVector();
//the effective destination towards "dest" after taking speed into consideration
Vec3 ret = Vec3.createVectorHelper(itemPos.xCoord + motion.xCoord / len * speed, itemPos.yCoord + motion.yCoord / len * speed, itemPos.zCoord + motion.zCoord / len * speed);
return ret;
}
public ForgeDirection getTravelDirection(World world, int x, int y, int z, Vec3 itemPos, double speed) {
return ForgeDirection.getOrientation(world.getBlockMetadata(x, y, z));
}
@Override
public Vec3 getClosestSnappingPosition(World world, int x, int y, int z, Vec3 itemPos) {
ForgeDirection dir = ForgeDirection.getOrientation(world.getBlockMetadata(x, y, z));
itemPos.xCoord = MathHelper.clamp_double(itemPos.xCoord, x, x + 1);
itemPos.zCoord = MathHelper.clamp_double(itemPos.zCoord, z, z + 1);
double posX = x + 0.5;
double posZ = z + 0.5;
if(dir.offsetX != 0) {
posX = itemPos.xCoord;
}
if(dir.offsetZ != 0) {
posZ = itemPos.zCoord;
}
return Vec3.createVectorHelper(posX, y + 0.25, posZ);
}
@Override
public void onEntityCollidedWithBlock(World world, int x, int y, int z, Entity entity) {
if(!world.isRemote) {
if(entity instanceof EntityItem && entity.ticksExisted > 10 && !entity.isDead) {
EntityMovingItem item = new EntityMovingItem(world);
item.setItemStack(((EntityItem)entity).getEntityItem());
item.setPositionAndRotation(x + 0.5, y + 0.125, z + 0.5, 0, 0);
item.setItemStack(((EntityItem) entity).getEntityItem().copy());
Vec3 pos = Vec3.createVectorHelper(entity.posX, entity.posY, entity.posZ);
Vec3 snap = this.getClosestSnappingPosition(world, x, y, z, pos);
item.setPositionAndRotation(snap.xCoord, snap.yCoord, snap.zCoord, 0, 0);
world.spawnEntityInWorld(item);
entity.setDead();
}
}
}
public static int renderID = RenderingRegistry.getNextAvailableRenderId();
public static int renderID = RenderingRegistry.getNextAvailableRenderId();
@Override
public int getRenderType() {
@ -53,37 +126,32 @@ public class BlockConveyor extends Block {
public boolean renderAsNormalBlock() {
return false;
}
@Override
public void setBlockBoundsBasedOnState(IBlockAccess world, int x, int y, int z) {
this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.125F, 1.0F);
}
this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.25F, 1.0F);
}
@Override
public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int x, int y, int z) {
return AxisAlignedBB.getBoundingBox(x, y, z, x + 1, y, z + 1);
}
public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int x, int y, int z) {
return AxisAlignedBB.getBoundingBox(x, y, z, x + 1, y + 0.25, z + 1);
}
@Override
public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase player, ItemStack itemStack) {
int i = MathHelper.floor_double(player.rotationYaw * 4.0F / 360.0F + 0.5D) & 3;
if(i == 0)
{
if(i == 0) {
world.setBlockMetadataWithNotify(x, y, z, 2, 2);
}
if(i == 1)
{
if(i == 1) {
world.setBlockMetadataWithNotify(x, y, z, 5, 2);
}
if(i == 2)
{
if(i == 2) {
world.setBlockMetadataWithNotify(x, y, z, 3, 2);
}
if(i == 3)
{
if(i == 3) {
world.setBlockMetadataWithNotify(x, y, z, 4, 2);
}
}
}

View File

@ -0,0 +1,67 @@
package com.hbm.blocks.network;
import api.hbm.conveyor.IConveyorBelt;
import cpw.mods.fml.client.registry.RenderingRegistry;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.Vec3;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
public class BlockConveyorChute extends BlockConveyor {
@Override
public Vec3 getTravelLocation(World world, int x, int y, int z, Vec3 itemPos, double speed) {
if(world.getBlock(x, y - 1, z) instanceof IConveyorBelt) {
speed *= 5;
} else if(itemPos.yCoord > y + 0.25) {
speed *= 3;
}
return super.getTravelLocation(world, x, y, z, itemPos, speed);
}
@Override
public ForgeDirection getTravelDirection(World world, int x, int y, int z, Vec3 itemPos, double speed) {
if(world.getBlock(x, y - 1, z) instanceof IConveyorBelt || itemPos.yCoord > y + 0.25) {
return ForgeDirection.UP;
}
return ForgeDirection.getOrientation(world.getBlockMetadata(x, y, z));
}
@Override
public Vec3 getClosestSnappingPosition(World world, int x, int y, int z, Vec3 itemPos) {
if(world.getBlock(x, y - 1, z) instanceof IConveyorBelt || itemPos.yCoord > y + 0.25) {
return Vec3.createVectorHelper(x + 0.5, itemPos.yCoord, z + 0.5);
} else {
return super.getClosestSnappingPosition(world, x, y, z, itemPos);
}
}
public static int renderID = RenderingRegistry.getNextAvailableRenderId();
@Override
public int getRenderType() {
return renderID;
}
@Override
public void setBlockBoundsBasedOnState(IBlockAccess world, int x, int y, int z) { }
@Override
public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int x, int y, int z) {
return AxisAlignedBB.getBoundingBox(x, y, z, x + 1, y + 1, z + 1);
}
@Override
@SideOnly(Side.CLIENT)
public boolean shouldSideBeRendered(IBlockAccess p_149646_1_, int p_149646_2_, int p_149646_3_, int p_149646_4_, int p_149646_5_) {
return true;
}
}

View File

@ -0,0 +1,32 @@
package com.hbm.blocks.network;
import net.minecraft.util.MathHelper;
import net.minecraft.util.Vec3;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
public class BlockConveyorDouble extends BlockConveyor {
@Override
public Vec3 getClosestSnappingPosition(World world, int x, int y, int z, Vec3 itemPos) {
ForgeDirection dir = ForgeDirection.getOrientation(world.getBlockMetadata(x, y, z));
itemPos.xCoord = MathHelper.clamp_double(itemPos.xCoord, x, x + 1);
itemPos.zCoord = MathHelper.clamp_double(itemPos.zCoord, z, z + 1);
double posX = x + 0.5;
double posZ = z + 0.5;
if(dir.offsetX != 0) {
posX = itemPos.xCoord;
posZ += itemPos.zCoord > posZ ? 0.25 : -0.25;
}
if(dir.offsetZ != 0) {
posZ = itemPos.zCoord;
posX += itemPos.xCoord > posX ? 0.25 : -0.25;
}
return Vec3.createVectorHelper(posX, y + 0.25, posZ);
}
}

View File

@ -0,0 +1,77 @@
package com.hbm.blocks.network;
import api.hbm.conveyor.IConveyorBelt;
import cpw.mods.fml.client.registry.RenderingRegistry;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.Vec3;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
public class BlockConveyorLift extends BlockConveyor {
@Override
public ForgeDirection getTravelDirection(World world, int x, int y, int z, Vec3 itemPos, double speed) {
boolean bottom = !(world.getBlock(x, y - 1, z) instanceof IConveyorBelt);
boolean top = !(world.getBlock(x, y + 1, z) instanceof IConveyorBelt) && !bottom;
if(!top) {
return ForgeDirection.DOWN;
}
return ForgeDirection.getOrientation(world.getBlockMetadata(x, y, z));
}
@Override
public Vec3 getClosestSnappingPosition(World world, int x, int y, int z, Vec3 itemPos) {
boolean bottom = !(world.getBlock(x, y - 1, z) instanceof IConveyorBelt);
boolean top = !(world.getBlock(x, y + 1, z) instanceof IConveyorBelt) && !bottom;
if(!top) {
return Vec3.createVectorHelper(x + 0.5, itemPos.yCoord, z + 0.5);
} else {
return super.getClosestSnappingPosition(world, x, y, z, itemPos);
}
}
@Override
public void setBlockBoundsBasedOnState(IBlockAccess world, int x, int y, int z) {
boolean bottom = !(world.getBlock(x, y - 1, z) instanceof IConveyorBelt);
boolean top = !(world.getBlock(x, y + 1, z) instanceof IConveyorBelt) && !bottom;
if(top)
this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.5F, 1.0F);
else
this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
}
@Override
public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int x, int y, int z) {
boolean bottom = !(world.getBlock(x, y - 1, z) instanceof IConveyorBelt);
boolean top = !(world.getBlock(x, y + 1, z) instanceof IConveyorBelt) && !bottom;
if(top)
return AxisAlignedBB.getBoundingBox(x, y, z, x + 1, y + 0.5, z + 1);
else
return AxisAlignedBB.getBoundingBox(x, y, z, x + 1, y + 1, z + 1);
}
public static int renderID = RenderingRegistry.getNextAvailableRenderId();
@Override
public int getRenderType() {
return renderID;
}
@Override
@SideOnly(Side.CLIENT)
public boolean shouldSideBeRendered(IBlockAccess p_149646_1_, int p_149646_2_, int p_149646_3_, int p_149646_4_, int p_149646_5_) {
return true;
}
}

View File

@ -0,0 +1,32 @@
package com.hbm.blocks.network;
import net.minecraft.util.MathHelper;
import net.minecraft.util.Vec3;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
public class BlockConveyorTriple extends BlockConveyor {
@Override
public Vec3 getClosestSnappingPosition(World world, int x, int y, int z, Vec3 itemPos) {
ForgeDirection dir = ForgeDirection.getOrientation(world.getBlockMetadata(x, y, z));
itemPos.xCoord = MathHelper.clamp_double(itemPos.xCoord, x, x + 1);
itemPos.zCoord = MathHelper.clamp_double(itemPos.zCoord, z, z + 1);
double posX = x + 0.5;
double posZ = z + 0.5;
if(dir.offsetX != 0) {
posX = itemPos.xCoord;
posZ += (itemPos.zCoord > posZ + 0.15 ? 0.3125 : itemPos.zCoord < posZ - 0.15 ? -0.3125 : 0);
}
if(dir.offsetZ != 0) {
posZ = itemPos.zCoord;
posX += (itemPos.xCoord > posX + 0.15 ? 0.3125 : itemPos.xCoord < posX - 0.15 ? -0.3125 : 0);
}
return Vec3.createVectorHelper(posX, y + 0.25, posZ);
}
}

View File

@ -0,0 +1,154 @@
package com.hbm.blocks.network;
import java.util.Random;
import com.hbm.blocks.IBlockSideRotation;
import com.hbm.blocks.ModBlocks;
import com.hbm.blocks.test.TestConductor;
import com.hbm.lib.RefStrings;
import com.hbm.main.MainRegistry;
import cpw.mods.fml.client.registry.RenderingRegistry;
import cpw.mods.fml.common.network.internal.FMLNetworkHandler;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.block.Block;
import net.minecraft.block.BlockContainer;
import net.minecraft.block.BlockPistonBase;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.ISidedInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.IIcon;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
public abstract class BlockCraneBase extends BlockContainer implements IBlockSideRotation {
@SideOnly(Side.CLIENT) protected IIcon iconSide;
@SideOnly(Side.CLIENT) protected IIcon iconIn;
@SideOnly(Side.CLIENT) protected IIcon iconSideIn;
@SideOnly(Side.CLIENT) protected IIcon iconOut;
@SideOnly(Side.CLIENT) protected IIcon iconSideOut;
@SideOnly(Side.CLIENT) protected IIcon iconDirectional;
@SideOnly(Side.CLIENT) protected IIcon iconDirectionalUp;
@SideOnly(Side.CLIENT) protected IIcon iconDirectionalDown;
public BlockCraneBase(Material mat) {
super(mat);
}
@Override
@SideOnly(Side.CLIENT)
public void registerBlockIcons(IIconRegister iconRegister) {
this.blockIcon = iconRegister.registerIcon(RefStrings.MODID + ":crane_top");
this.iconSide = iconRegister.registerIcon(RefStrings.MODID + ":crane_side");
this.iconIn = iconRegister.registerIcon(RefStrings.MODID + ":crane_in");
this.iconSideIn = iconRegister.registerIcon(RefStrings.MODID + ":crane_side_in");
this.iconOut = iconRegister.registerIcon(RefStrings.MODID + ":crane_out");
this.iconSideOut = iconRegister.registerIcon(RefStrings.MODID + ":crane_side_out");
}
@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) {
return true;
} else if(!player.isSneaking()) {
FMLNetworkHandler.openGui(player, MainRegistry.instance, 0, world, x, y, z);
return true;
} else {
return false;
}
}
public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase player, ItemStack stack) {
int l = BlockPistonBase.determineOrientation(world, x, y, z, player);
world.setBlockMetadataWithNotify(x, y, z, l, 2);
}
@Override
public IIcon getIcon(int side, int metadata) {
if(side == 0 || side == 1) {
if(side == metadata) {
return this.iconOut;
}
if(side == ForgeDirection.getOrientation(metadata).getOpposite().ordinal()) {
return this.iconIn;
}
return side == 1 ? this.iconDirectional : this.blockIcon;
}
if(side == metadata) {
return this.iconSideOut;
}
if(side == ForgeDirection.getOrientation(metadata).getOpposite().ordinal()) {
return this.iconSideIn;
}
if(metadata == 0) {
return this.iconDirectionalUp;
}
if(metadata == 1) {
return this.iconDirectionalDown;
}
return this.iconSide;
}
public static int renderIDClassic = RenderingRegistry.getNextAvailableRenderId();
@Override
public int getRenderType() {
return IBlockSideRotation.getRenderType();
}
private final Random rand = new Random();
public void dropContents(World world, int x, int y, int z, Block block, int meta, int start, int end) {
ISidedInventory tileentityfurnace = (ISidedInventory) world.getTileEntity(x, y, z);
if(tileentityfurnace != null) {
for(int i1 = start; i1 < end; ++i1) {
ItemStack itemstack = tileentityfurnace.getStackInSlot(i1);
if(itemstack != null) {
float f = this.rand.nextFloat() * 0.8F + 0.1F;
float f1 = this.rand.nextFloat() * 0.8F + 0.1F;
float f2 = this.rand.nextFloat() * 0.8F + 0.1F;
while(itemstack.stackSize > 0) {
int j1 = this.rand.nextInt(21) + 10;
if(j1 > itemstack.stackSize) {
j1 = itemstack.stackSize;
}
itemstack.stackSize -= j1;
EntityItem entityitem = new EntityItem(world, x + f, y + f1, z + f2, new ItemStack(itemstack.getItem(), j1, itemstack.getItemDamage()));
if(itemstack.hasTagCompound()) {
entityitem.getEntityItem().setTagCompound((NBTTagCompound) itemstack.getTagCompound().copy());
}
float f3 = 0.05F;
entityitem.motionX = (float) this.rand.nextGaussian() * f3;
entityitem.motionY = (float) this.rand.nextGaussian() * f3 + 0.2F;
entityitem.motionZ = (float) this.rand.nextGaussian() * f3;
world.spawnEntityInWorld(entityitem);
}
}
}
world.func_147453_f(x, y, z, block);
}
super.breakBlock(world, x, y, z, block, meta);
}
}

View File

@ -0,0 +1,59 @@
package com.hbm.blocks.network;
import com.hbm.lib.RefStrings;
import com.hbm.tileentity.network.TileEntityCraneExtractor;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
public class CraneExtractor extends BlockCraneBase {
public CraneExtractor() {
super(Material.iron);
}
@Override
public TileEntity createNewTileEntity(World world, int meta) {
return new TileEntityCraneExtractor();
}
@Override
@SideOnly(Side.CLIENT)
public void registerBlockIcons(IIconRegister iconRegister) {
super.registerBlockIcons(iconRegister);
this.iconDirectional = iconRegister.registerIcon(RefStrings.MODID + ":crane_out_top");
this.iconDirectionalUp = iconRegister.registerIcon(RefStrings.MODID + ":crane_out_side_down");
this.iconDirectionalDown = iconRegister.registerIcon(RefStrings.MODID + ":crane_out_side_up");
}
@Override
public int getRotationFromSide(IBlockAccess world, int x, int y, int z, int side) {
int meta = world.getBlockMetadata(x, y, z);
if(meta > 1 && side == 1) {
if(meta == 2) return 0;
if(meta == 3) return 3;
if(meta == 4) return 2;
if(meta == 5) return 1;
}
return 0;
}
@Override
public boolean canConnectRedstone(IBlockAccess world, int x, int y, int z, int side) {
return true;
}
@Override
public void breakBlock(World world, int x, int y, int z, Block block, int meta) {
this.dropContents(world, x, y, z, block, meta, 9, 20);
super.breakBlock(world, x, y, z, block, meta);
}
}

View File

@ -0,0 +1,201 @@
package com.hbm.blocks.network;
import com.hbm.lib.RefStrings;
import com.hbm.tileentity.network.TileEntityCraneInserter;
import api.hbm.conveyor.IConveyorItem;
import api.hbm.conveyor.IEnterableBlock;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.inventory.Container;
import net.minecraft.inventory.IInventory;
import net.minecraft.inventory.ISidedInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
public class CraneInserter extends BlockCraneBase implements IEnterableBlock {
public CraneInserter() {
super(Material.iron);
}
@Override
public TileEntity createNewTileEntity(World world, int meta) {
return new TileEntityCraneInserter();
}
@Override
@SideOnly(Side.CLIENT)
public void registerBlockIcons(IIconRegister iconRegister) {
super.registerBlockIcons(iconRegister);
this.iconDirectional = iconRegister.registerIcon(RefStrings.MODID + ":crane_in_top");
this.iconDirectionalUp = iconRegister.registerIcon(RefStrings.MODID + ":crane_in_side_up");
this.iconDirectionalDown = iconRegister.registerIcon(RefStrings.MODID + ":crane_in_side_down");
}
@Override
public boolean canEnter(World world, int x, int y, int z, ForgeDirection dir, IConveyorItem entity) {
ForgeDirection orientation = ForgeDirection.getOrientation(world.getBlockMetadata(x, y, z));
return orientation == dir;
}
@Override
public void onEnter(World world, int x, int y, int z, ForgeDirection dir, IConveyorItem entity) {
TileEntity te = world.getTileEntity(x - dir.offsetX, y - dir.offsetY, z - dir.offsetZ);
if(entity == null || entity.getItemStack() == null || entity.getItemStack().stackSize <= 0) {
return;
}
ItemStack toAdd = entity.getItemStack().copy();
int[] access = null;
if(te instanceof ISidedInventory) {
ISidedInventory sided = (ISidedInventory) te;
access = sided.getAccessibleSlotsFromSide(dir.ordinal());
}
if(te instanceof IInventory) {
IInventory inv = (IInventory) te;
addToInventory(inv, access, toAdd, dir.ordinal());
/*int limit = inv.getInventoryStackLimit();
int size = access == null ? inv.getSizeInventory() : access.length;
for(int i = 0; i < size; i++) {
int index = access == null ? i : access[i];
ItemStack stack = inv.getStackInSlot(index);
if(stack != null && toAdd.isItemEqual(stack) && ItemStack.areItemStackTagsEqual(toAdd, stack) && stack.stackSize < Math.min(stack.getMaxStackSize(), limit)) {
int stackLimit = Math.min(stack.getMaxStackSize(), limit);
int amount = Math.min(toAdd.stackSize, stackLimit - stack.stackSize);
stack.stackSize += amount;
toAdd.stackSize -= amount;
if(toAdd.stackSize == 0) {
return;
}
}
}
for(int i = 0; i < size; i++) {
int index = access == null ? i : access[i];
ItemStack stack = inv.getStackInSlot(index);
if(stack == null && inv.isItemValidForSlot(index, stack)) {
int amount = Math.min(toAdd.stackSize, limit);
ItemStack newStack = toAdd.copy();
newStack.stackSize = amount;
inv.setInventorySlotContents(index, newStack);
toAdd.stackSize -= amount;
if(toAdd.stackSize == 0) {
return;
}
}
}*/
}
if(toAdd != null && toAdd.stackSize > 0) {
addToInventory((TileEntityCraneInserter) world.getTileEntity(x, y, z), null, toAdd, dir.ordinal());
}
if(toAdd != null && toAdd.stackSize > 0) {
EntityItem drop = new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, toAdd.copy());
world.spawnEntityInWorld(drop);
}
}
public static ItemStack addToInventory(IInventory inv, int[] access, ItemStack toAdd, int side) {
ISidedInventory sided = inv instanceof ISidedInventory ? (ISidedInventory) inv : null;
int limit = inv.getInventoryStackLimit();
int size = access == null ? inv.getSizeInventory() : access.length;
for(int i = 0; i < size; i++) {
int index = access == null ? i : access[i];
ItemStack stack = inv.getStackInSlot(index);
if(stack != null && toAdd.isItemEqual(stack) && ItemStack.areItemStackTagsEqual(toAdd, stack) && stack.stackSize < Math.min(stack.getMaxStackSize(), limit)
&& ((sided == null || sided.canInsertItem(index, toAdd, side)) && inv.isItemValidForSlot(index, toAdd))) {
int stackLimit = Math.min(stack.getMaxStackSize(), limit);
int amount = Math.min(toAdd.stackSize, stackLimit - stack.stackSize);
stack.stackSize += amount;
toAdd.stackSize -= amount;
inv.markDirty();
if(toAdd.stackSize == 0) {
return null;
}
}
}
for(int i = 0; i < size; i++) {
int index = access == null ? i : access[i];
ItemStack stack = inv.getStackInSlot(index);
if(stack == null && ((sided == null || sided.canInsertItem(index, toAdd, side)) && inv.isItemValidForSlot(index, toAdd))) {
int amount = Math.min(toAdd.stackSize, limit);
ItemStack newStack = toAdd.copy();
newStack.stackSize = amount;
inv.setInventorySlotContents(index, newStack);
toAdd.stackSize -= amount;
inv.markDirty();
if(toAdd.stackSize == 0) {
return null;
}
}
}
return toAdd;
}
@Override
public int getRotationFromSide(IBlockAccess world, int x, int y, int z, int side) {
int meta = world.getBlockMetadata(x, y, z);
if(meta > 1 && side == 1) {
if(meta == 2) return 3;
if(meta == 3) return 0;
if(meta == 4) return 1;
if(meta == 5) return 2;
}
return 0;
}
@Override
public boolean hasComparatorInputOverride() {
return true;
}
@Override
public int getComparatorInputOverride(World world, int x, int y, int z, int side) {
return Container.calcRedstoneFromInventory((TileEntityCraneInserter)world.getTileEntity(x, y, z));
}
@Override
public void breakBlock(World world, int x, int y, int z, Block block, int meta) {
this.dropContents(world, x, y, z, block, meta, 0, 21);
super.breakBlock(world, x, y, z, block, meta);
}
}

View File

@ -0,0 +1,41 @@
package com.hbm.blocks.turret;
import com.hbm.blocks.BlockDummyable;
import com.hbm.tileentity.TileEntityProxyCombo;
import com.hbm.tileentity.turret.TileEntityTurretArty;
import net.minecraft.block.material.Material;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
public class TurretArty extends BlockDummyable {
public TurretArty(Material mat) {
super(mat);
}
@Override
public TileEntity createNewTileEntity(World world, int meta) {
if(meta >= 12)
return new TileEntityTurretArty();
return new TileEntityProxyCombo(true, true, false);
}
@Override
public int[] getDimensions() {
return new int[] { 1, 0, 2, 1, 2, 1 };
}
@Override
public int getOffset() {
return 1;
}
@Override
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) {
return this.standardOpenBehavior(world, x, y, z, player, 0);
}
}

View File

@ -3,7 +3,6 @@ package com.hbm.blocks.turret;
import java.util.List;
import com.hbm.config.WeaponConfig;
import com.hbm.entity.particle.EntityGasFlameFX;
import com.hbm.lib.ModDamageSource;
import com.hbm.tileentity.turret.TileEntityTurretCIWS;
@ -50,22 +49,6 @@ public class TurretCIWS extends TurretBase {
Math.cos(yaw / 180.0F * (float) Math.PI) * Math.cos(pitch / 180.0F * (float) Math.PI));
vector.normalize();
if(!world.isRemote) {
rayShot(world, vector, x + vector.xCoord * 2.5 + 0.5, y + vector.yCoord * 2.5 + 0.5, z + vector.zCoord * 2.5 + 0.5, 100, 10.0F, WeaponConfig.ciwsHitrate);
EntityGasFlameFX smoke = new EntityGasFlameFX(world);
smoke.posX = x + vector.xCoord * 2.5 + 0.5;
smoke.posY = y + vector.yCoord * 2.5 + 1.5;
smoke.posZ = z + vector.zCoord * 2.5 + 0.5;
smoke.motionX = vector.xCoord * 0.25;
smoke.motionY = vector.yCoord * 0.25;
smoke.motionZ = vector.zCoord * 0.25;
world.spawnEntityInWorld(smoke);
}
world.playSoundEffect(x, y, z, "hbm:weapon.ciwsFiringLoop", 1.0F, 1.25F);

View File

@ -25,7 +25,11 @@ public class TurretChekhov extends BlockDummyable {
if(meta >= 12)
return new TileEntityTurretChekhov();
return new TileEntityProxyCombo(true, true, false);
if(meta >= 6)
return new TileEntityProxyCombo(true, true, false);
return null;
}
@Override

View File

@ -1,6 +1,5 @@
package com.hbm.blocks.turret;
import com.hbm.entity.particle.EntityGasFlameFX;
import com.hbm.entity.projectile.EntityBullet;
import com.hbm.tileentity.turret.TileEntityTurretHeavy;
@ -51,12 +50,6 @@ public class TurretHeavy extends TurretBase {
bullet.damage = rand.nextInt(26) + 15;
world.spawnEntityInWorld(bullet);
EntityGasFlameFX fx = new EntityGasFlameFX(world);
fx.posX = x + vector.xCoord * 2.2 + 0.5;
fx.posY = y + vector.yCoord * 2.2 + 1;
fx.posZ = z + vector.zCoord * 2.2 + 0.5;
world.spawnEntityInWorld(fx);
}
world.playSoundEffect(x, y, z, "hbm:weapon.defabShoot", 1.0F, 0.75F);

View File

@ -1,6 +1,5 @@
package com.hbm.blocks.turret;
import com.hbm.entity.particle.EntityGasFlameFX;
import com.hbm.entity.projectile.EntityRocket;
import com.hbm.tileentity.turret.TileEntityTurretRocket;
@ -49,12 +48,6 @@ public class TurretRocket extends TurretBase {
bullet.motionZ = vector.zCoord * 3;
world.spawnEntityInWorld(bullet);
EntityGasFlameFX fx = new EntityGasFlameFX(world);
fx.posX = x + vector.xCoord * 1 + 0.5;
fx.posY = y + vector.yCoord * 1 + 1;
fx.posZ = z + vector.zCoord * 1 + 0.5;
world.spawnEntityInWorld(fx);
}
world.playSoundEffect(x, y, z, "hbm:weapon.rpgShoot", 1.0F, 0.75F);

View File

@ -1,6 +1,5 @@
package com.hbm.blocks.turret;
import com.hbm.entity.particle.EntityGasFlameFX;
import com.hbm.entity.projectile.EntityAAShell;
import com.hbm.tileentity.turret.TileEntityTurretSpitfire;
@ -51,17 +50,6 @@ public class TurretSpitfire extends TurretBase {
bullet.speedOverride = 3;
world.spawnEntityInWorld(bullet);
EntityGasFlameFX smoke = new EntityGasFlameFX(world);
smoke.posX = x + vector.xCoord * 4 + 0.5;
smoke.posY = y + vector.yCoord * 4 + 1;
smoke.posZ = z + vector.zCoord * 4 + 0.5;
smoke.motionX = vector.xCoord * 0.25;
smoke.motionY = vector.yCoord * 0.25;
smoke.motionZ = vector.zCoord * 0.25;
world.spawnEntityInWorld(smoke);
}
world.playSoundEffect(x, y, z, "hbm:entity.oldExplosion", 1.0F, 0.5F);

View File

@ -93,7 +93,7 @@ public class GeneralConfig {
final String CATEGORY_LBSM = CommonConfig.CATEGORY_LBSM;
config.addCustomCategoryComment(CATEGORY_528,
config.addCustomCategoryComment(CATEGORY_LBSM,
"Will most likely break standard progression!\n"
+ "However, the game gets generally easier and more enjoyable for casual players.\n"
+ "Progression-braking recipes are usually not too severe, so the mode is generally server-friendly!");
@ -109,7 +109,7 @@ public class GeneralConfig {
enableLBSMUnlockAnvil = CommonConfig.createConfigBool(config, CATEGORY_LBSM, "LBSM_recipeUnlockAnvil", "When enabled, all anvil recipes are available at tier 1", true);
enableLBSMSimpleCrafting = CommonConfig.createConfigBool(config, CATEGORY_LBSM, "LBSM_recipeSimpleCrafting", "When enabled, some uncraftable or more expansive items get simple crafting recipes. Scorched uranium also becomes washable", true);
enableLBSMSimpleMedicineRecipes = CommonConfig.createConfigBool(config, CATEGORY_LBSM, "LBSM_recipeSimpleMedicine", "When enabled, makes some medicine recipes (line ones that require bismuth) much more affordable", true);
schrabRate = CommonConfig.createConfigInt(config, CATEGORY_528, "LBSM_schrabOreRate", "Changes the amount of uranium ore needed on average to create one schrabidium ore using nukes. Standard mode value is 100", 20);
schrabRate = CommonConfig.createConfigInt(config, CATEGORY_LBSM, "LBSM_schrabOreRate", "Changes the amount of uranium ore needed on average to create one schrabidium ore using nukes. Standard mode value is 100", 20);
if(enable528) enableLBSM = false;
}

View File

@ -101,6 +101,10 @@ public class ArmorRecipes {
CraftingManager.addRecipeAuto(new ItemStack(ModItems.steamsuit_plate, 1), new Object[] { "C C", "DXD", "CFC", 'D', DESH.ingot(), 'C', CU.plate(), 'X', ModItems.steel_plate, 'F', ModItems.tank_steel });
CraftingManager.addRecipeAuto(new ItemStack(ModItems.steamsuit_legs, 1), new Object[] { "CCC", "DXD", "C C", 'D', DESH.ingot(), 'C', CU.plate(), 'X', ModItems.steel_legs });
CraftingManager.addRecipeAuto(new ItemStack(ModItems.steamsuit_boots, 1), new Object[] { "C C", "DXD", 'D', DESH.ingot(), 'C', CU.plate(), 'X', ModItems.steel_boots });
CraftingManager.addRecipeAuto(new ItemStack(ModItems.dieselsuit_helmet, 1), new Object[] { "W W", "W W", "SCS", 'W', new ItemStack(Blocks.wool, 1, 14), 'S', STEEL.ingot(), 'C', ModItems.circuit_targeting_tier3 });
CraftingManager.addRecipeAuto(new ItemStack(ModItems.dieselsuit_plate, 1), new Object[] { "W W", "CDC", "SWS", 'W', new ItemStack(Blocks.wool, 1, 14), 'S', STEEL.ingot(), 'C', ModItems.circuit_targeting_tier3, 'D', ModBlocks.machine_diesel });
CraftingManager.addRecipeAuto(new ItemStack(ModItems.dieselsuit_legs, 1), new Object[] { "M M", "S S", "W W", 'W', new ItemStack(Blocks.wool, 1, 14), 'S', STEEL.ingot(), 'M', ModItems.motor });
CraftingManager.addRecipeAuto(new ItemStack(ModItems.dieselsuit_boots, 1), new Object[] { "W W", "S S", 'W', new ItemStack(Blocks.wool, 1, 14), 'S', STEEL.ingot() });
//Bismuth fursui- I mean armor
CraftingManager.addRecipeAuto(new ItemStack(ModItems.bismuth_helmet, 1), new Object[] { "GPP", "P ", "FPP", 'G', Items.gold_ingot, 'P', ModItems.plate_bismuth, 'F', ModItems.rag });

View File

@ -136,9 +136,9 @@ public class MineralRecipes {
addBillet(ModItems.billet_zirconium, ModItems.ingot_zirconium, ModItems.nugget_zirconium, ZR.nugget());
addBillet(ModItems.billet_bismuth, ModItems.ingot_bismuth, ModItems.nugget_bismuth);
GameRegistry.addShapelessRecipe(new ItemStack(ModItems.billet_thorium_fuel, 3), new Object[] { ModItems.billet_th232, ModItems.billet_th232, ModItems.billet_u233 });
GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(ModItems.billet_thorium_fuel, 1), new Object[] { "nuggetThorium232", "nuggetThorium232", "nuggetThorium232", "nuggetThorium232", "nuggetUranium233", "nuggetUranium233" }));
GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(ModItems.billet_thorium_fuel, 1), new Object[] { "tinyTh232", "tinyTh232", "tinyTh232", "tinyTh232", "tinyU233", "tinyU233" }));
GameRegistry.addShapelessRecipe(new ItemStack(ModItems.billet_thorium_fuel, 6), new Object[] { ModItems.billet_th232, ModItems.billet_th232, ModItems.billet_th232, ModItems.billet_th232, ModItems.billet_th232, ModItems.billet_u233 });
GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(ModItems.billet_thorium_fuel, 1), new Object[] { "nuggetThorium232", "nuggetThorium232", "nuggetThorium232", "nuggetThorium232", "nuggetThorium232", "nuggetUranium233" }));
GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(ModItems.billet_thorium_fuel, 1), new Object[] { "tinyTh232", "tinyTh232", "tinyTh232", "tinyTh232", "tinyTh232", "tinyU233" }));
GameRegistry.addShapelessRecipe(new ItemStack(ModItems.billet_uranium_fuel, 6), new Object[] { ModItems.billet_u238, ModItems.billet_u238, ModItems.billet_u238, ModItems.billet_u238, ModItems.billet_u238, ModItems.billet_u235 });
GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(ModItems.billet_uranium_fuel, 1), new Object[] { "nuggetUranium238", "nuggetUranium238", "nuggetUranium238", "nuggetUranium238", "nuggetUranium238", "nuggetUranium235" }));
GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(ModItems.billet_uranium_fuel, 1), new Object[] { "tinyU238", "tinyU238", "tinyU238", "tinyU238", "tinyU238", "tinyU235" }));

View File

@ -7,6 +7,8 @@ import com.hbm.inventory.fluid.Fluids;
import static com.hbm.inventory.OreDictManager.*;
import com.hbm.items.ModItems;
import com.hbm.items.machine.ItemBattery;
import com.hbm.items.tool.ItemModMinecart;
import com.hbm.items.tool.ItemModMinecart.EnumCartBase;
import com.hbm.items.tool.ItemModMinecart.EnumMinecart;
import com.hbm.main.CraftingManager;
@ -115,7 +117,6 @@ public class ToolRecipes {
CraftingManager.addRecipeAuto(new ItemStack(ModItems.linker, 1), new Object[] { "I I", "ICI", "GGG", 'I', IRON.plate(), 'G', GOLD.plate(), 'C', ModItems.circuit_gold });
CraftingManager.addRecipeAuto(new ItemStack(ModItems.oil_detector, 1), new Object[] { "W I", "WCI", "PPP", 'W', ModItems.wire_gold, 'I', CU.ingot(), 'C', ModItems.circuit_red_copper, 'P', STEEL.plate() });
CraftingManager.addRecipeAuto(new ItemStack(ModItems.turret_chip, 1), new Object[] { "WWW", "CPC", "WWW", 'W', ModItems.wire_gold, 'P', POLYMER.ingot(), 'C', ModItems.circuit_gold, });
CraftingManager.addRecipeAuto(new ItemStack(ModItems.turret_biometry, 1), new Object[] { "CC ", "GGS", "SSS", 'C', ModItems.circuit_copper, 'S', STEEL.plate(), 'G', GOLD.plate(), 'I', PB.plate() });
CraftingManager.addRecipeAuto(new ItemStack(ModItems.survey_scanner, 1), new Object[] { "SWS", " G ", "PCP", 'W', ModItems.wire_gold, 'P', POLYMER.ingot(), 'C', ModItems.circuit_gold, 'S', STEEL.plate(), 'G', GOLD.ingot() });
CraftingManager.addRecipeAuto(new ItemStack(ModItems.geiger_counter, 1), new Object[] { "GPP", "WCS", "WBB", 'W', ModItems.wire_gold, 'P', ModItems.plate_polymer, 'C', ModItems.circuit_red_copper, 'G', GOLD.ingot(), 'S', STEEL.plate(), 'B', ModItems.ingot_beryllium });
CraftingManager.addRecipeAuto(new ItemStack(ModItems.dosimeter, 1), new Object[] { "WGW", "WCW", "WBW", 'W', KEY_PLANKS, 'G', KEY_ANYPANE, 'C', ModItems.circuit_aluminium, 'B', BE.ingot() });
@ -147,8 +148,16 @@ public class ToolRecipes {
CraftingManager.addShapelessAuto(new ItemStack(ModItems.bobmazon_tools), new Object[] { Items.book, Items.gold_nugget, KEY_GREEN });
//Carts
CraftingManager.addRecipeAuto(DictFrame.fromOne(ModItems.cart, EnumMinecart.EMPTY), new Object[] { "P P", "IPI", 'P', STEEL.plate(), 'I', STEEL.ingot() });
CraftingManager.addRecipeAuto(DictFrame.fromOne(ModItems.cart, EnumMinecart.DESTROYER), new Object[] { "S S", "BLB", "SCS", 'S', STEEL.ingot(), 'B', ModItems.blades_steel, 'L', Fluids.LAVA.getDict(1000), 'C', DictFrame.fromOne(ModItems.cart, EnumMinecart.EMPTY) });
CraftingManager.addRecipeAuto(ItemModMinecart.createCartItem(EnumCartBase.WOOD, EnumMinecart.EMPTY), new Object[] { "P P", "WPW", 'P',KEY_SLAB, 'W', KEY_PLANKS });
CraftingManager.addRecipeAuto(ItemModMinecart.createCartItem(EnumCartBase.STEEL, EnumMinecart.EMPTY), new Object[] { "P P", "IPI", 'P', STEEL.plate(), 'I', STEEL.ingot() });
CraftingManager.addShapelessAuto(ItemModMinecart.createCartItem(EnumCartBase.PAINTED, EnumMinecart.EMPTY), new Object[] { ItemModMinecart.createCartItem(EnumCartBase.STEEL, EnumMinecart.EMPTY), KEY_RED });
for(EnumCartBase base : EnumCartBase.values()) {
if(EnumMinecart.DESTROYER.supportsBase(base)) CraftingManager.addRecipeAuto(ItemModMinecart.createCartItem(base, EnumMinecart.DESTROYER), new Object[] { "S S", "BLB", "SCS", 'S', STEEL.ingot(), 'B', ModItems.blades_steel, 'L', Fluids.LAVA.getDict(1000), 'C', ItemModMinecart.createCartItem(base, EnumMinecart.EMPTY) });
if(EnumMinecart.POWDER.supportsBase(base)) CraftingManager.addRecipeAuto(ItemModMinecart.createCartItem(base, EnumMinecart.POWDER), new Object[] { "PPP", "PCP", "PPP", 'P', Items.gunpowder, 'C', ItemModMinecart.createCartItem(base, EnumMinecart.EMPTY) });
if(EnumMinecart.SEMTEX.supportsBase(base)) CraftingManager.addRecipeAuto(ItemModMinecart.createCartItem(base, EnumMinecart.SEMTEX), new Object[] { "S", "C", 'S', ModBlocks.semtex, 'C', ItemModMinecart.createCartItem(base, EnumMinecart.EMPTY) });
}
net.minecraft.item.crafting.CraftingManager.getInstance().addRecipe(DictFrame.fromOne(ModItems.cart, EnumMinecart.CRATE), new Object[] { "C", "S", 'C', ModBlocks.crate_steel, 'S', Items.minecart }).func_92100_c();
//Configged

View File

@ -150,21 +150,6 @@ public class WeaponRecipes {
CraftingManager.addRecipeAuto(new ItemStack(ModItems.gun_fireext, 1), new Object[] { "HB", " T", 'H', ModItems.hull_small_steel, 'B', ModItems.bolt_tungsten, 'T', ModItems.tank_steel });
CraftingManager.addRecipeAuto(new ItemStack(ModItems.gun_spas12, 1), new Object[] { "TPS", "HHR", " L", 'T', ModItems.bolt_tungsten, 'P', STEEL.plate(), 'S', STEEL.ingot(), 'H', ModItems.hull_small_steel, 'R', ModItems.mechanism_rifle_1, 'L', ANY_PLASTIC.ingot()});
//Legacy ammo recycling
CraftingManager.addShapelessAuto(new ItemStack(ModItems.ammo_44, 1), new Object[] { ModItems.gun_revolver_nopip_ammo });
CraftingManager.addShapelessAuto(new ItemStack(ModItems.ammo_44_pip, 1), new Object[] { ModItems.gun_revolver_pip_ammo });
CraftingManager.addShapelessAuto(new ItemStack(ModItems.ammo_50bmg, 1), new Object[] { ModItems.gun_calamity_ammo });
CraftingManager.addShapelessAuto(new ItemStack(ModItems.ammo_5mm, 1), new Object[] { ModItems.gun_lacunae_ammo });
CraftingManager.addShapelessAuto(new ItemStack(ModItems.ammo_rocket, 1), new Object[] { ModItems.gun_rpg_ammo });
CraftingManager.addShapelessAuto(new ItemStack(ModItems.ammo_9mm, 1), new Object[] { ModItems.gun_mp40_ammo });
CraftingManager.addShapelessAuto(new ItemStack(ModItems.ammo_22lr, 1), new Object[] { ModItems.gun_uzi_ammo });
CraftingManager.addShapelessAuto(new ItemStack(ModItems.ammo_12gauge, 1), new Object[] { ModItems.gun_uboinik_ammo });
CraftingManager.addShapelessAuto(new ItemStack(ModItems.ammo_20gauge, 1), new Object[] { ModItems.gun_lever_action_ammo });
CraftingManager.addShapelessAuto(new ItemStack(ModItems.ammo_20gauge_slug, 1), new Object[] { ModItems.gun_bolt_action_ammo });
CraftingManager.addShapelessAuto(new ItemStack(ModItems.ammo_nuke_high, 1), new Object[] { ModItems.gun_fatman_ammo });
CraftingManager.addShapelessAuto(new ItemStack(ModItems.ammo_mirv_high, 1), new Object[] { ModItems.gun_mirv_ammo });
CraftingManager.addShapelessAuto(new ItemStack(ModItems.ammo_stinger_rocket, 1), new Object[] { ModItems.gun_stinger_ammo });
//Ammo assemblies
CraftingManager.addRecipeAuto(new ItemStack(ModItems.pellet_flechette, 1), new Object[] { " L ", " L ", "LLL", 'L', PB.nugget() });
CraftingManager.addRecipeAuto(new ItemStack(ModItems.pellet_claws, 1), new Object[] { " X ", "X X", " XX", 'X', STEEL.plate() });
@ -395,8 +380,6 @@ public class WeaponRecipes {
CraftingManager.addRecipeAuto(new ItemStack(ModBlocks.mine_fat, 1), new Object[] { "CDN", 'C', ModItems.circuit_targeting_tier2, 'D', ModItems.ducttape, 'N', ModItems.ammo_nuke });
//Nuke parts
CraftingManager.addRecipeAuto(new ItemStack(ModItems.gadget_explosive8, 1), new Object[] { "EEE", "EPE", "EEE", 'E', ModItems.gadget_explosive, 'P', AL.plate() });
CraftingManager.addRecipeAuto(new ItemStack(ModItems.man_explosive8, 1), new Object[] { "EEE", "ESE", "EEE", 'E', ModItems.man_explosive, 'S', STEEL.plate() });
CraftingManager.addRecipeAuto(new ItemStack(ModItems.n2_charge, 1), new Object[] { " D ", "ERE", " D ", 'D', ModItems.ducttape, 'E', ModBlocks.det_charge, 'R', REDSTONE.block() });
//Custom nuke rods

View File

@ -1,6 +1,7 @@
package com.hbm.entity.cart;
import net.minecraft.entity.item.EntityMinecart;
import com.hbm.items.tool.ItemModMinecart.EnumCartBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
@ -14,16 +15,16 @@ import net.minecraft.world.World;
* @author hbm
*
*/
public abstract class EntityMinecartContainerBase extends EntityMinecart implements IInventory {
public abstract class EntityMinecartContainerBase extends EntityMinecartNTM implements IInventory {
protected ItemStack[] slots = new ItemStack[this.getSizeInventory()];
public EntityMinecartContainerBase(World p_i1712_1_) {
super(p_i1712_1_);
public EntityMinecartContainerBase(World world) {
super(world);
}
public EntityMinecartContainerBase(World world, double x, double y, double z) {
super(world, x, y, z);
public EntityMinecartContainerBase(World world, double x, double y, double z, EnumCartBase type) {
super(world, x, y, z, type);
}
@Override
@ -102,11 +103,6 @@ public abstract class EntityMinecartContainerBase extends EntityMinecart impleme
public boolean isItemValidForSlot(int slot, ItemStack stack) {
return true;
}
@Override
public int getMinecartType() {
return -1;
}
@Override
protected void writeEntityToNBT(NBTTagCompound nbt) {

View File

@ -1,11 +1,11 @@
package com.hbm.entity.cart;
import com.hbm.blocks.ModBlocks;
import com.hbm.inventory.OreDictManager.DictFrame;
import com.hbm.items.ModItems;
import com.hbm.items.tool.ItemModMinecart;
import com.hbm.items.tool.ItemModMinecart.EnumCartBase;
import com.hbm.items.tool.ItemModMinecart.EnumMinecart;
import com.hbm.main.MainRegistry;
import com.hbm.tileentity.machine.TileEntityLockableBase;
import cpw.mods.fml.common.network.internal.FMLNetworkHandler;
import net.minecraft.block.Block;
@ -21,8 +21,8 @@ public class EntityMinecartCrate extends EntityMinecartContainerBase {
super(world);
}
public EntityMinecartCrate(World world, double x, double y, double z, ItemStack stack) {
super(world, x, y, z);
public EntityMinecartCrate(World world, double x, double y, double z, EnumCartBase type, ItemStack stack) {
super(world, x, y, z, type);
if(stack.hasTagCompound()) {
for(int i = 0; i < getSizeInventory(); i++) {
setInventorySlotContents(i, ItemStack.loadItemStackFromNBT(stack.stackTagCompound.getCompoundTag("slot" + i)));
@ -54,7 +54,7 @@ public class EntityMinecartCrate extends EntityMinecartContainerBase {
@Override
public void killMinecart(DamageSource p_94095_1_) {
this.setDead();
ItemStack itemstack = DictFrame.fromOne(ModItems.cart, EnumMinecart.CRATE);
ItemStack itemstack = ItemModMinecart.createCartItem(EnumCartBase.VANILLA, EnumMinecart.CRATE);
NBTTagCompound nbt = new NBTTagCompound();
@ -82,6 +82,6 @@ public class EntityMinecartCrate extends EntityMinecartContainerBase {
@Override
public ItemStack getCartItem() {
return DictFrame.fromOne(ModItems.cart, EnumMinecart.CRATE);
return ItemModMinecart.createCartItem(EnumCartBase.VANILLA, EnumMinecart.CRATE);
}
}

View File

@ -3,29 +3,33 @@ package com.hbm.entity.cart;
import java.util.List;
import com.hbm.blocks.ModBlocks;
import com.hbm.inventory.OreDictManager.DictFrame;
import com.hbm.items.ModItems;
import com.hbm.items.tool.ItemModMinecart;
import com.hbm.items.tool.ItemModMinecart.EnumCartBase;
import com.hbm.items.tool.ItemModMinecart.EnumMinecart;
import com.hbm.main.MainRegistry;
import com.hbm.main.ResourceManager;
import com.hbm.render.entity.item.RenderNeoCart;
import cpw.mods.fml.common.network.internal.FMLNetworkHandler;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.block.Block;
import net.minecraft.entity.Entity;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.DamageSource;
import net.minecraft.world.World;
public class EntityMinecartDestroyer extends EntityMinecartContainerBase {
public EntityMinecartDestroyer(World p_i1712_1_) {
super(p_i1712_1_);
public EntityMinecartDestroyer(World world) {
super(world);
}
public EntityMinecartDestroyer(World world, double x, double y, double z) {
super(world, x, y, z);
public EntityMinecartDestroyer(World world, double x, double y, double z, EnumCartBase type) {
super(world, x, y, z, type);
}
@Override
@ -121,19 +125,14 @@ public class EntityMinecartDestroyer extends EntityMinecartContainerBase {
}
@Override
public void killMinecart(DamageSource p_94095_1_) {
this.setDead();
ItemStack itemstack = DictFrame.fromOne(ModItems.cart, EnumMinecart.DESTROYER);
if(this.func_95999_t() != null) {
itemstack.setStackDisplayName(this.func_95999_t());
}
this.entityDropItem(itemstack, 0.0F);
public ItemStack getCartItem() {
return ItemModMinecart.createCartItem(this.getBase(), EnumMinecart.DESTROYER);
}
@Override
public ItemStack getCartItem() {
return DictFrame.fromOne(ModItems.cart, EnumMinecart.DESTROYER);
@SideOnly(Side.CLIENT)
public void renderSpecialContent(RenderNeoCart renderer) {
renderer.bindTexture(ResourceManager.cart_destroyer_tex);
ResourceManager.cart_destroyer.renderAll();
}
}

View File

@ -0,0 +1,89 @@
package com.hbm.entity.cart;
import com.hbm.items.tool.ItemModMinecart.EnumCartBase;
import com.hbm.render.entity.item.RenderNeoCart;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.entity.Entity;
import net.minecraft.entity.item.EntityMinecart;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.DamageSource;
import net.minecraft.world.World;
public abstract class EntityMinecartNTM extends EntityMinecart {
public static final int cart_base_id = 23;
public EntityMinecartNTM(World p_i1712_1_) {
super(p_i1712_1_);
}
public EntityMinecartNTM(World world, double x, double y, double z, EnumCartBase type) {
super(world, x, y, z);
this.setBase(type);
}
@Override
protected void entityInit() {
super.entityInit();
this.dataWatcher.addObject(cart_base_id, new Integer(0)); //EnumCartBase
}
public void setBase(EnumCartBase type) {
this.dataWatcher.updateObject(cart_base_id, type.ordinal());
}
public EnumCartBase getBase() {
return EnumCartBase.values()[this.dataWatcher.getWatchableObjectInt(cart_base_id)];
}
@Override
public int getMinecartType() {
return -1;
}
@Override
public boolean canBeCollidedWith() {
return true;
}
@Override
public AxisAlignedBB getCollisionBox(Entity entity) {
return entity.boundingBox;
}
@Override
public AxisAlignedBB getBoundingBox() {
return this.boundingBox;
}
@Override
public void killMinecart(DamageSource p_94095_1_) {
this.setDead();
ItemStack itemstack = getCartItem();
if(this.func_95999_t() != null) {
itemstack.setStackDisplayName(this.func_95999_t());
}
this.entityDropItem(itemstack, 0.0F);
}
@Override
protected void writeEntityToNBT(NBTTagCompound nbt) {
super.writeEntityToNBT(nbt);
nbt.setInteger("base", this.dataWatcher.getWatchableObjectInt(cart_base_id));
}
@Override
protected void readEntityFromNBT(NBTTagCompound nbt) {
super.readEntityFromNBT(nbt);
this.dataWatcher.updateObject(23, nbt.getInteger("base"));
}
@SideOnly(Side.CLIENT)
public void renderSpecialContent(RenderNeoCart renderer) { }
}

View File

@ -1,60 +1,24 @@
package com.hbm.entity.cart;
import com.hbm.inventory.OreDictManager.DictFrame;
import com.hbm.items.ModItems;
import com.hbm.items.tool.ItemModMinecart;
import com.hbm.items.tool.ItemModMinecart.EnumCartBase;
import com.hbm.items.tool.ItemModMinecart.EnumMinecart;
import net.minecraft.entity.Entity;
import net.minecraft.entity.item.EntityMinecart;
import net.minecraft.item.ItemStack;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.DamageSource;
import net.minecraft.world.World;
public class EntityMinecartOre extends EntityMinecart {
public class EntityMinecartOre extends EntityMinecartNTM {
public EntityMinecartOre(World p_i1712_1_) {
super(p_i1712_1_);
}
public EntityMinecartOre(World world, double x, double y, double z) {
super(world, x, y, z);
}
@Override
public int getMinecartType() {
return -1;
}
@Override
public boolean canBeCollidedWith() {
return true;
}
@Override
public AxisAlignedBB getCollisionBox(Entity entity) {
return entity.boundingBox;
}
@Override
public AxisAlignedBB getBoundingBox() {
return this.boundingBox;
}
@Override
public void killMinecart(DamageSource p_94095_1_) {
this.setDead();
ItemStack itemstack = DictFrame.fromOne(ModItems.cart, EnumMinecart.EMPTY);
if(this.func_95999_t() != null) {
itemstack.setStackDisplayName(this.func_95999_t());
}
this.entityDropItem(itemstack, 0.0F);
public EntityMinecartOre(World world, double x, double y, double z, EnumCartBase type) {
super(world, x, y, z, type);
}
@Override
public ItemStack getCartItem() {
return DictFrame.fromOne(ModItems.cart, EnumMinecart.EMPTY);
return ItemModMinecart.createCartItem(this.getBase(), EnumMinecart.EMPTY);
}
}

View File

@ -0,0 +1,35 @@
package com.hbm.entity.cart;
import com.hbm.items.tool.ItemModMinecart;
import com.hbm.items.tool.ItemModMinecart.EnumCartBase;
import com.hbm.items.tool.ItemModMinecart.EnumMinecart;
import com.hbm.main.ResourceManager;
import com.hbm.render.entity.item.RenderNeoCart;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
public class EntityMinecartPowder extends EntityMinecartNTM {
public EntityMinecartPowder(World world) {
super(world);
}
public EntityMinecartPowder(World world, double x, double y, double z, EnumCartBase type) {
super(world, x, y, z, type);
}
@Override
public ItemStack getCartItem() {
return ItemModMinecart.createCartItem(this.getBase(), EnumMinecart.POWDER);
}
@Override
@SideOnly(Side.CLIENT)
public void renderSpecialContent(RenderNeoCart renderer) {
renderer.bindTexture(ResourceManager.cart_powder_tex);
ResourceManager.cart_powder.renderPart("Powder");
}
}

View File

@ -0,0 +1,37 @@
package com.hbm.entity.cart;
import com.hbm.items.tool.ItemModMinecart;
import com.hbm.items.tool.ItemModMinecart.EnumCartBase;
import com.hbm.items.tool.ItemModMinecart.EnumMinecart;
import com.hbm.main.ResourceManager;
import com.hbm.render.entity.item.RenderNeoCart;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
public class EntityMinecartSemtex extends EntityMinecartNTM {
public EntityMinecartSemtex(World world) {
super(world);
}
public EntityMinecartSemtex(World world, double x, double y, double z, EnumCartBase type) {
super(world, x, y, z, type);
}
@Override
public ItemStack getCartItem() {
return ItemModMinecart.createCartItem(this.getBase(), EnumMinecart.SEMTEX);
}
@Override
@SideOnly(Side.CLIENT)
public void renderSpecialContent(RenderNeoCart renderer) {
renderer.bindTexture(ResourceManager.cart_semtex_top);
ResourceManager.cart_powder.renderPart("SemtexTop");
renderer.bindTexture(ResourceManager.cart_semtex_side);
ResourceManager.cart_powder.renderPart("SemtexSide");
}
}

View File

@ -0,0 +1,294 @@
package com.hbm.entity.effect;
import java.util.ArrayList;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.entity.Entity;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.MathHelper;
import net.minecraft.util.Vec3;
import net.minecraft.world.World;
/*
* Toroidial Convection Simulation Explosion Effect
* Tor Ex
*/
public class EntityNukeTorex extends Entity {
public double coreHeight = 3;
public double convectionHeight = 3;
public double torusWidth = 3;
public double rollerSize = 1;
public double heat = 1;
public ArrayList<Cloudlet> cloudlets = new ArrayList();
public static int cloudletLife = 200;
public EntityNukeTorex(World world) {
super(world);
this.ignoreFrustumCheck = true;
}
@Override
protected void entityInit() { }
@Override
public void onUpdate() {
this.ticksExisted++;
int maxAge = 90 * 20;
if(worldObj.isRemote) {
double range = (torusWidth - rollerSize) * 0.25;
if(this.ticksExisted + cloudletLife * 2 < maxAge) {
int toSpawn = (int) Math.ceil(10 * getSimulationSpeed());
for(int i = 0; i < toSpawn; i++) {
double y = posY + rand.nextGaussian() - 3; //this.ticksExisted < 60 ? this.posY + this.coreHeight : posY + rand.nextGaussian() - 3;
Cloudlet cloud = new Cloudlet(posX + rand.nextGaussian() * range, y, posZ + rand.nextGaussian() * range, (float)(rand.nextDouble() * 2D * Math.PI), 0);
cloud.setScale(1F + this.ticksExisted * 0.001F, 5F);
cloudlets.add(cloud);
}
}
int cloudCount = ticksExisted * 3;
if(ticksExisted < 200) {
for(int i = 0; i < cloudCount; i++) {
Vec3 vec = Vec3.createVectorHelper((ticksExisted + rand.nextDouble()) * 2, 0, 0);
float rot = (float) (Math.PI * 2 * rand.nextDouble());
vec.rotateAroundY(rot);
this.cloudlets.add(new Cloudlet(vec.xCoord + posX, worldObj.getHeightValue((int) (vec.xCoord + posX) + 1, (int) (vec.zCoord + posZ)), vec.zCoord + posZ, rot, 0)
.setScale(5F, 2F)
.setMotion(0));
}
}
for(Cloudlet cloud : cloudlets) {
cloud.update();
}
coreHeight += 0.15;
torusWidth += 0.05;
rollerSize = torusWidth * 0.35;
convectionHeight = coreHeight + rollerSize;
int maxHeat = 50;
heat = maxHeat - Math.pow((maxHeat * this.ticksExisted) / maxAge, 1);
cloudlets.removeIf(x -> x.isDead);
}
if(!worldObj.isRemote && this.ticksExisted > maxAge) {
this.setDead();
}
}
public double getSimulationSpeed() {
if(EntityNukeTorex.this.ticksExisted > 45 * 20) {
int timeLeft = 1600 - EntityNukeTorex.this.ticksExisted;
return MathHelper.clamp_double((double) timeLeft / 900D, 0, 1);
}
return 1.0D;
}
public class Cloudlet {
public double posX;
public double posY;
public double posZ;
public double prevPosX;
public double prevPosY;
public double prevPosZ;
public double motionX;
public double motionY;
public double motionZ;
public int age;
public float angle;
public boolean isDead = false;
float rangeMod = 1.0F;
public float colorMod = 1.0F;
public Vec3 color;
public Vec3 prevColor;
public Cloudlet(double posX, double posY, double posZ, float angle, int age) {
this.posX = posX;
this.posY = posY;
this.posZ = posZ;
this.age = age;
this.angle = angle;
this.rangeMod = 0.3F + rand.nextFloat() * 0.7F;
this.colorMod = 0.8F + rand.nextFloat() * 0.2F;
this.updateColor();
}
private void update() {
age++;
if(age > cloudletLife) {
this.isDead = true;
}
this.prevPosX = this.posX;
this.prevPosY = this.posY;
this.prevPosZ = this.posZ;
Vec3 simPos = Vec3.createVectorHelper(EntityNukeTorex.this.posX - this.posX, 0, EntityNukeTorex.this.posZ - this.posZ);
double simPosX = EntityNukeTorex.this.posX + simPos.lengthVector();
double simPosZ = EntityNukeTorex.this.posZ + 0D;
Vec3 convection = getConvectionMotion(simPosX, simPosZ);
Vec3 lift = getLiftMotion(simPosX, simPosZ);
double factor = MathHelper.clamp_double((this.posY - EntityNukeTorex.this.posY) / EntityNukeTorex.this.coreHeight, 0, 1);
this.motionX = convection.xCoord * factor + lift.xCoord * (1D - factor);
this.motionY = convection.yCoord * factor + lift.yCoord * (1D - factor);
this.motionZ = convection.zCoord * factor + lift.zCoord * (1D - factor);
double mult = this.motionMult * getSimulationSpeed();
this.posX += this.motionX * mult;
this.posY += this.motionY * mult;
this.posZ += this.motionZ * mult;
this.updateColor();
}
/* simulated on a 2D-plane along the X/Y axis */
private Vec3 getConvectionMotion(double simPosX, double simPosZ) {
if(simPosX > EntityNukeTorex.this.posX + torusWidth * 2)
return Vec3.createVectorHelper(0, 0, 0);
/* the position of the torus' outer ring center */
Vec3 torusPos = Vec3.createVectorHelper(
(EntityNukeTorex.this.posX + torusWidth),
(EntityNukeTorex.this.posY + coreHeight),
EntityNukeTorex.this.posZ);
/* the difference between the cloudlet and the torus' ring center */
Vec3 delta = Vec3.createVectorHelper(torusPos.xCoord - simPosX, torusPos.yCoord - this.posY, torusPos.zCoord - simPosZ);
/* the distance this cloudlet wants to achieve to the torus' ring center */
double roller = EntityNukeTorex.this.rollerSize * this.rangeMod;
/* the distance between this cloudlet and the torus' outer ring perimeter */
double dist = delta.lengthVector() / roller - 1D;
/* euler function based on how far the cloudlet is away from the perimeter */
double func = 1D - Math.pow(Math.E, -dist); // [0;1]
/* just an approximation, but it's good enough */
float angle = (float) (func * Math.PI * 0.5D); // [0;90°]
/* vector going from the ring center in the direction of the cloudlet, stopping at the perimeter */
Vec3 rot = Vec3.createVectorHelper(-delta.xCoord / dist, -delta.yCoord / dist, -delta.zCoord / dist);
/* rotate by the approximate angle */
rot.rotateAroundZ(angle);
/* the direction from the cloudlet to the target position on the perimeter */
Vec3 motion = Vec3.createVectorHelper(
torusPos.xCoord + rot.xCoord - simPosX,
torusPos.yCoord + rot.yCoord - this.posY,
torusPos.zCoord + rot.zCoord - simPosZ);
motion = motion.normalize();
motion.rotateAroundY(this.angle);
return motion;
}
private Vec3 getLiftMotion(double simPosX, double simPosZ) {
double scale = MathHelper.clamp_double(1D - (simPosX - (EntityNukeTorex.this.posX + torusWidth)), 0, 1);
Vec3 motion = Vec3.createVectorHelper(EntityNukeTorex.this.posX - this.posX, (EntityNukeTorex.this.posY + convectionHeight) - this.posY, EntityNukeTorex.this.posZ - this.posZ);
motion = motion.normalize();
motion.xCoord *= scale;
motion.yCoord *= scale;
motion.zCoord *= scale;
return motion;
}
private void updateColor() {
this.prevColor = this.color;
double exX = EntityNukeTorex.this.posX;
double exY = EntityNukeTorex.this.posY + EntityNukeTorex.this.coreHeight;
double exZ = EntityNukeTorex.this.posZ;
double distX = exX - posX;
double distY = exY - posY;
double distZ = exZ - posZ;
double distSq = distX * distX + distY * distY + distZ * distZ;
distSq /= EntityNukeTorex.this.heat;
double dist = Math.sqrt(distSq);
dist = Math.max(dist, 1);
double col = 2D / dist;
this.color = Vec3.createVectorHelper(
Math.max(col * 2, 0.25),
Math.max(col * 1.5, 0.25),
Math.max(col * 0.5, 0.25)
);
}
public Vec3 getInterpPos(float interp) {
return Vec3.createVectorHelper(
prevPosX + (posX - prevPosX) * interp,
prevPosY + (posY - prevPosY) * interp,
prevPosZ + (posZ - prevPosZ) * interp);
}
public Vec3 getInterpColor(float interp) {
return Vec3.createVectorHelper(
prevColor.xCoord + (color.xCoord - prevColor.xCoord) * interp,
prevColor.yCoord + (color.yCoord - prevColor.yCoord) * interp,
prevColor.zCoord + (color.zCoord - prevColor.zCoord) * interp);
}
public float getAlpha() {
return 1F - ((float)age / (float)cloudletLife);
}
private float startingScale = 1;
private float growingScale = 5F;
public float getScale() {
return startingScale + ((float)age / (float)cloudletLife) * growingScale;
}
public Cloudlet setScale(float start, float grow) {
this.startingScale = start;
this.growingScale = grow;
return this;
}
private double motionMult = 1F;
public Cloudlet setMotion(double mult) {
this.motionMult = mult;
return this;
}
}
@Override
protected void readEntityFromNBT(NBTTagCompound nbt) { }
@Override
protected void writeEntityToNBT(NBTTagCompound nbt) { }
@Override
@SideOnly(Side.CLIENT)
public boolean isInRangeToRenderDist(double distance) {
return distance < 25000;
}
}

View File

@ -5,17 +5,17 @@ import net.minecraft.item.ItemStack;
import net.minecraft.util.DamageSource;
import net.minecraft.world.World;
public class EntitytemWaste extends EntityItem {
public class EntityItemWaste extends EntityItem {
public EntitytemWaste(World world) {
public EntityItemWaste(World world) {
super(world);
}
public EntitytemWaste(World world, double x, double y, double z) {
public EntityItemWaste(World world, double x, double y, double z) {
super(world, x, y, z);
}
public EntitytemWaste(World world, double x, double y, double z, ItemStack stack) {
public EntityItemWaste(World world, double x, double y, double z, ItemStack stack) {
super(world, x, y, z, stack);
}

View File

@ -1,7 +1,14 @@
package com.hbm.entity.item;
import com.hbm.blocks.ModBlocks;
import com.hbm.lib.Library;
import com.hbm.util.fauxpointtwelve.BlockPos;
import api.hbm.conveyor.IConveyorBelt;
import api.hbm.conveyor.IConveyorItem;
import api.hbm.conveyor.IEnterableBlock;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.block.Block;
import net.minecraft.entity.Entity;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.player.EntityPlayer;
@ -9,145 +16,237 @@ import net.minecraft.init.Blocks;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.DamageSource;
import net.minecraft.util.Vec3;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
public class EntityMovingItem extends Entity {
public class EntityMovingItem extends Entity implements IConveyorItem {
private int turnProgress;
private double syncPosX;
private double syncPosY;
private double syncPosZ;
@SideOnly(Side.CLIENT)
private double velocityX;
@SideOnly(Side.CLIENT)
private double velocityY;
@SideOnly(Side.CLIENT)
private double velocityZ;
public EntityMovingItem(World p_i1582_1_) {
super(p_i1582_1_);
this.setSize(0.5F, 0.25F);
this.noClip = true;
this.setSize(0.375F, 0.375F);
this.noClip = true;
}
public void setItemStack(ItemStack stack) {
this.getDataWatcher().updateObject(10, stack);
this.getDataWatcher().setObjectWatched(10);
}
public ItemStack getItemStack() {
ItemStack stack = this.getDataWatcher().getWatchableObjectItemStack(10);
return stack == null ? new ItemStack(Blocks.stone) : stack;
}
public boolean canBeCollidedWith() {
return true;
}
public boolean interactFirst(EntityPlayer player) {
public void setItemStack(ItemStack stack) {
this.getDataWatcher().updateObject(10, stack);
this.getDataWatcher().setObjectWatched(10);
}
public ItemStack getItemStack() {
ItemStack stack = this.getDataWatcher().getWatchableObjectItemStack(10);
return stack == null ? new ItemStack(Blocks.stone) : stack;
}
public boolean canBeCollidedWith() {
return true;
}
public boolean interactFirst(EntityPlayer player) {
if(!worldObj.isRemote && player.inventory.addItemStackToInventory(this.getItemStack().copy())) {
this.setDead();
}
return false;
}
public boolean attackEntityFrom(DamageSource source, float amount) {
if(!worldObj.isRemote) {
this.setDead();
worldObj.spawnEntityInWorld(new EntityItem(worldObj, posX, posY, posZ, this.getItemStack()));
}
return true;
}
public boolean canAttackWithItem() {
return true;
}
public boolean hitByEntity(Entity attacker) {
if(attacker instanceof EntityPlayer) {
}
this.setDead();
return false;
}
protected boolean canTriggerWalking() {
return true;
}
private int schedule = 0;
public void onUpdate() {
if(!worldObj.isRemote) {
if(worldObj.getBlock((int)Math.floor(posX), (int)Math.floor(posY), (int)Math.floor(posZ)) != ModBlocks.conveyor) {
this.setDead();
EntityItem item = new EntityItem(worldObj, posX, posY, posZ, this.getItemStack());
item.motionX = this.motionX * 3;
item.motionY = 0.1;
item.motionZ = this.motionZ * 3;
item.velocityChanged = true;
worldObj.spawnEntityInWorld(item);
return;
}
}
if(worldObj.getBlock((int)Math.floor(posX), (int)Math.floor(posY), (int)Math.floor(posZ)) == ModBlocks.conveyor) {
if(schedule <= 0) {
ForgeDirection dir = ForgeDirection.getOrientation(worldObj.getBlockMetadata((int)Math.floor(posX), (int)Math.floor(posY), (int)Math.floor(posZ)));
if(worldObj.getBlock((int)Math.floor(posX), (int)Math.floor(posY) + 1, (int)Math.floor(posZ)) == ModBlocks.conveyor && motionY >= 0) {
dir = ForgeDirection.DOWN;
}
if(worldObj.getBlock((int)Math.floor(posX), (int)Math.floor(posY) - 1, (int)Math.floor(posZ)) == ModBlocks.conveyor && motionY <= 0) {
dir = ForgeDirection.UP;
}
double speed = 0.1;
schedule = (int) (1 / speed);
motionX = -speed * dir.offsetX;
motionY = -speed * dir.offsetY;
motionZ = -speed * dir.offsetZ;
this.velocityChanged = true;
}
this.lastTickPosX = this.prevPosX = this.posX;
this.lastTickPosY = this.prevPosY = this.posY;
this.lastTickPosZ = this.prevPosZ = this.posZ;
this.setPosition(posX + motionX, posY + motionY, posZ + motionZ);
schedule--;
}
}
return false;
}
public boolean attackEntityFrom(DamageSource source, float amount) {
if(!worldObj.isRemote) {
this.setDead();
worldObj.spawnEntityInWorld(new EntityItem(worldObj, posX, posY, posZ, this.getItemStack()));
}
return true;
}
public boolean canAttackWithItem() {
return true;
}
public boolean hitByEntity(Entity attacker) {
if(attacker instanceof EntityPlayer) {
}
this.setDead();
return false;
}
protected boolean canTriggerWalking() {
return true;
}
private int schedule = 0;
public void onUpdate() {
if(worldObj.isRemote) {
if(this.turnProgress > 0) {
double interpX = this.posX + (this.syncPosX - this.posX) / (double) this.turnProgress;
double interpY = this.posY + (this.syncPosY - this.posY) / (double) this.turnProgress;
double interpZ = this.posZ + (this.syncPosZ - this.posZ) / (double) this.turnProgress;
--this.turnProgress;
this.setPosition(interpX, interpY, interpZ);
} else {
this.setPosition(this.posX, this.posY, this.posZ);
}
}
if(!worldObj.isRemote) {
int blockX = (int) Math.floor(posX);
int blockY = (int) Math.floor(posY);
int blockZ = (int) Math.floor(posZ);
Block b = worldObj.getBlock(blockX, blockY, blockZ);
if(!(b instanceof IConveyorBelt)) {
this.setDead();
EntityItem item = new EntityItem(worldObj, posX + motionX * 2, posY + motionY * 2, posZ + motionZ * 2, this.getItemStack());
item.motionX = this.motionX * 2;
item.motionY = 0.1;
item.motionZ = this.motionZ * 2;
item.velocityChanged = true;
worldObj.spawnEntityInWorld(item);
return;
} else {
Vec3 target = ((IConveyorBelt) b).getTravelLocation(worldObj, blockX, blockY, blockZ, Vec3.createVectorHelper(posX, posY, posZ), 0.0625);
//this.worldObj.spawnParticle("reddust", target.xCoord, target.yCoord, target.zCoord, 0, 0, 0);
this.motionX = target.xCoord - posX;
this.motionY = target.yCoord - posY;
this.motionZ = target.zCoord - posZ;
}
/*if(worldObj.getBlock((int) Math.floor(posX), (int) Math.floor(posY), (int) Math.floor(posZ)) == ModBlocks.conveyor) {
if(schedule <= 0) {
ForgeDirection dir = ForgeDirection.getOrientation(worldObj.getBlockMetadata((int) Math.floor(posX), (int) Math.floor(posY), (int) Math.floor(posZ)));
if(worldObj.getBlock((int) Math.floor(posX), (int) Math.floor(posY) + 1, (int) Math.floor(posZ)) == ModBlocks.conveyor && motionY >= 0) {
dir = ForgeDirection.DOWN;
}
if(worldObj.getBlock((int) Math.floor(posX), (int) Math.floor(posY) - 1, (int) Math.floor(posZ)) == ModBlocks.conveyor && motionY <= 0) {
dir = ForgeDirection.UP;
}
double speed = 0.0625;
schedule = (int) (1 / speed);
motionX = -speed * dir.offsetX;
motionY = -speed * dir.offsetY;
motionZ = -speed * dir.offsetZ;
this.velocityChanged = true;
}
schedule--;
}*/
BlockPos lastPos = new BlockPos(posX, posY, posZ);
this.moveEntity(motionX, motionY, motionZ);
BlockPos newPos = new BlockPos(posX, posY, posZ);
if(!lastPos.equals(newPos)) {
Block newBlock = worldObj.getBlock(newPos.getX(), newPos.getY(), newPos.getZ());
if(newBlock instanceof IEnterableBlock) {
ForgeDirection dir = ForgeDirection.UNKNOWN;
if(lastPos.getX() > newPos.getX() && lastPos.getY() == newPos.getY() && lastPos.getZ() == newPos.getZ()) dir = Library.POS_X;
else if(lastPos.getX() < newPos.getX() && lastPos.getY() == newPos.getY() && lastPos.getZ() == newPos.getZ()) dir = Library.NEG_X;
else if(lastPos.getX() == newPos.getX() && lastPos.getY() > newPos.getY() && lastPos.getZ() == newPos.getZ()) dir = Library.POS_Y;
else if(lastPos.getX() == newPos.getX() && lastPos.getY() < newPos.getY() && lastPos.getZ() == newPos.getZ()) dir = Library.NEG_Y;
else if(lastPos.getX() == newPos.getX() && lastPos.getY() == newPos.getY() && lastPos.getZ() > newPos.getZ()) dir = Library.POS_Z;
else if(lastPos.getX() == newPos.getX() && lastPos.getY() == newPos.getY() && lastPos.getZ() < newPos.getZ()) dir = Library.NEG_Z;
IEnterableBlock enterable = (IEnterableBlock) newBlock;
if(enterable.canEnter(worldObj, newPos.getX(), newPos.getY(), newPos.getZ(), dir, this)) {
enterable.onEnter(worldObj, newPos.getX(), newPos.getY(), newPos.getZ(), dir, this);
this.setDead();
}
} else {
if(!newBlock.getMaterial().isSolid()) {
newBlock = worldObj.getBlock(newPos.getX(), newPos.getY() - 1, newPos.getZ());
if(newBlock instanceof IEnterableBlock) {
IEnterableBlock enterable = (IEnterableBlock) newBlock;
if(enterable.canEnter(worldObj, newPos.getX(), newPos.getY() - 1, newPos.getZ(), ForgeDirection.UP, this)) {
enterable.onEnter(worldObj, newPos.getX(), newPos.getY() - 1, newPos.getZ(), ForgeDirection.UP, this);
this.setDead();
}
}
}
}
}
}
}
@SideOnly(Side.CLIENT)
public void setVelocity(double p_70016_1_, double p_70016_3_, double p_70016_5_) {
this.velocityX = this.motionX = p_70016_1_;
this.velocityY = this.motionY = p_70016_3_;
this.velocityZ = this.motionZ = p_70016_5_;
}
@SideOnly(Side.CLIENT)
public void setPositionAndRotation2(double x, double y, double z, float yaw, float pitch, int theNumberThree) {
this.syncPosX = x;
this.syncPosY = y;
this.syncPosZ = z;
this.turnProgress = theNumberThree + 2; //use 4-ply for extra smoothness
this.motionX = this.velocityX;
this.motionY = this.velocityY;
this.motionZ = this.velocityZ;
}
@Override
protected void entityInit() {
this.getDataWatcher().addObjectByDataType(10, 5);
}
protected void entityInit() {
this.getDataWatcher().addObjectByDataType(10, 5);
}
@Override
protected void readEntityFromNBT(NBTTagCompound nbt) {
NBTTagCompound compound = nbt.getCompoundTag("Item");
this.setItemStack(ItemStack.loadItemStackFromNBT(compound));
NBTTagCompound compound = nbt.getCompoundTag("Item");
this.setItemStack(ItemStack.loadItemStackFromNBT(compound));
ItemStack stack = getDataWatcher().getWatchableObjectItemStack(10);
schedule = nbt.getInteger("schedule");
ItemStack stack = getDataWatcher().getWatchableObjectItemStack(10);
if (stack == null || stack.stackSize <= 0)
this.setDead();
schedule = nbt.getInteger("schedule");
if(stack == null || stack.stackSize <= 0)
this.setDead();
}
@Override
protected void writeEntityToNBT(NBTTagCompound nbt) {
if (this.getItemStack() != null)
nbt.setTag("Item", this.getItemStack().writeToNBT(new NBTTagCompound()));
nbt.setInteger("schedule", schedule);
}
if(this.getItemStack() != null)
nbt.setTag("Item", this.getItemStack().writeToNBT(new NBTTagCompound()));
nbt.setInteger("schedule", schedule);
}
}

View File

@ -4,7 +4,6 @@ import java.util.ArrayList;
import java.util.List;
import com.hbm.config.GeneralConfig;
import com.hbm.entity.particle.EntityGasFlameFX;
import com.hbm.entity.projectile.EntityBombletZeta;
import com.hbm.entity.projectile.EntityBoxcar;
import com.hbm.entity.projectile.EntityRocketHoming;
@ -14,6 +13,7 @@ import com.hbm.lib.ModDamageSource;
import com.hbm.main.MainRegistry;
import com.hbm.packet.LoopedEntitySoundPacket;
import com.hbm.packet.PacketDispatcher;
import com.hbm.util.ParticleUtil;
import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint;
import cpw.mods.fml.relauncher.Side;
@ -106,8 +106,8 @@ public class EntityBomber extends Entity implements IChunkLoader {
if(this.health <= 0) {
motionY -= 0.025;
for(int i = 0; i < 10; i++)
this.worldObj.spawnEntityInWorld(new EntityGasFlameFX(this.worldObj, this.posX + rand.nextGaussian() * 0.5 - motionX * 2, this.posY + rand.nextGaussian() * 0.5 - motionY * 2, this.posZ + rand.nextGaussian() * 0.5 - motionZ * 2, 0.0, 0.1, 0.0));
for(int i = 0; i < 10; i++)
ParticleUtil.spawnGasFlame(this.worldObj, this.posX + rand.nextGaussian() * 0.5 - motionX * 2, this.posY + rand.nextGaussian() * 0.5 - motionY * 2, this.posZ + rand.nextGaussian() * 0.5 - motionZ * 2, 0.0, 0.1, 0.0);
if(worldObj.getBlock((int)posX, (int)posY, (int)posZ).isNormalCube() && !worldObj.isRemote) {
this.setDead();

View File

@ -1,17 +1,20 @@
package com.hbm.entity.missile;
import com.hbm.entity.particle.EntityGasFlameFX;
import com.hbm.explosion.ExplosionLarge;
import com.hbm.items.ModItems;
import com.hbm.items.machine.ItemSatChip;
import com.hbm.main.MainRegistry;
import com.hbm.packet.AuxParticlePacketNT;
import com.hbm.packet.PacketDispatcher;
import com.hbm.saveddata.satellites.Satellite;
import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.projectile.EntityThrowable;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.world.World;
@ -41,48 +44,33 @@ public class EntityCarrier extends EntityThrowable {
if(!worldObj.isRemote) {
for(int i = 0; i < 10; i++) {
EntityGasFlameFX fx = new EntityGasFlameFX(worldObj);
fx.posY = posY - 0.25D;
fx.posX = posX + rand.nextGaussian() * 0.75D;
fx.posZ = posZ + rand.nextGaussian() * 0.75D;
fx.motionY = -0.2D;
worldObj.spawnEntityInWorld(fx);
NBTTagCompound data = new NBTTagCompound();
data.setString("type", "gasfire");
data.setDouble("mY", -0.2D);
PacketDispatcher.wrapper.sendToAllAround(new AuxParticlePacketNT(data, posX + rand.nextGaussian() * 0.75D, posY - 0.25D, posZ + rand.nextGaussian() * 0.75D), new TargetPoint(worldObj.provider.dimensionId, posX, posY, posZ, 200));
}
if(this.dataWatcher.getWatchableObjectInt(8) == 1)
for(int i = 0; i < 2; i++) {
EntityGasFlameFX fx1 = new EntityGasFlameFX(worldObj);
fx1.posY = posY - 0.25D;
fx1.posX = posX + rand.nextGaussian() * 0.15D + 2.5D;
fx1.posZ = posZ + rand.nextGaussian() * 0.15D;
fx1.motionY = -0.2D;
NBTTagCompound d1 = new NBTTagCompound();
d1.setString("type", "gasfire");
d1.setDouble("mY", -0.2D);
PacketDispatcher.wrapper.sendToAllAround(new AuxParticlePacketNT(d1, posX + rand.nextGaussian() * 0.75D + 2.5, posY - 0.25D, posZ + rand.nextGaussian() * 0.75D), new TargetPoint(worldObj.provider.dimensionId, posX, posY, posZ, 200));
worldObj.spawnEntityInWorld(fx1);
EntityGasFlameFX fx2 = new EntityGasFlameFX(worldObj);
fx2.posY = posY - 0.25D;
fx2.posX = posX + rand.nextGaussian() * 0.15D - 2.5D;
fx2.posZ = posZ + rand.nextGaussian() * 0.15D;
fx2.motionY = -0.2D;
NBTTagCompound d2 = new NBTTagCompound();
d2.setString("type", "gasfire");
d2.setDouble("mY", -0.2D);
PacketDispatcher.wrapper.sendToAllAround(new AuxParticlePacketNT(d2, posX + rand.nextGaussian() * 0.75D - 2.5, posY - 0.25D, posZ + rand.nextGaussian() * 0.75D), new TargetPoint(worldObj.provider.dimensionId, posX, posY, posZ, 200));
worldObj.spawnEntityInWorld(fx2);
EntityGasFlameFX fx3 = new EntityGasFlameFX(worldObj);
fx3.posY = posY - 0.25D;
fx3.posX = posX + rand.nextGaussian() * 0.15D;
fx3.posZ = posZ + rand.nextGaussian() * 0.15D + 2.5D;
fx3.motionY = -0.2D;
NBTTagCompound d3 = new NBTTagCompound();
d3.setString("type", "gasfire");
d3.setDouble("mY", -0.2D);
PacketDispatcher.wrapper.sendToAllAround(new AuxParticlePacketNT(d3, posX + rand.nextGaussian() * 0.75D, posY - 0.25D, posZ + rand.nextGaussian() * 0.75D + 2.5), new TargetPoint(worldObj.provider.dimensionId, posX, posY, posZ, 200));
worldObj.spawnEntityInWorld(fx3);
EntityGasFlameFX fx4 = new EntityGasFlameFX(worldObj);
fx4.posY = posY - 0.25D;
fx4.posX = posX + rand.nextGaussian() * 0.15D;
fx4.posZ = posZ + rand.nextGaussian() * 0.15D - 2.5D;
fx4.motionY = -0.2D;
worldObj.spawnEntityInWorld(fx4);
NBTTagCompound d4 = new NBTTagCompound();
d4.setString("type", "gasfire");
d4.setDouble("mY", -0.2D);
PacketDispatcher.wrapper.sendToAllAround(new AuxParticlePacketNT(d4, posX + rand.nextGaussian() * 0.75D, posY - 0.25D, posZ + rand.nextGaussian() * 0.75D - 2.5), new TargetPoint(worldObj.provider.dimensionId, posX, posY, posZ, 200));
}

View File

@ -1,8 +1,8 @@
package com.hbm.entity.missile;
import com.hbm.blocks.ModBlocks;
import com.hbm.entity.particle.EntityGasFlameFX;
import com.hbm.explosion.ExplosionLarge;
import com.hbm.util.ParticleUtil;
import net.minecraft.block.material.Material;
import net.minecraft.entity.Entity;
@ -66,17 +66,8 @@ public class EntityMinerRocket extends Entity {
}
}
if(dataWatcher.getWatchableObjectInt(16) != 1) {
if(ticksExisted % 2 == 0) {
EntityGasFlameFX fx = new EntityGasFlameFX(worldObj);
fx.posY = posY - 0.5D;
fx.posX = posX;
fx.posZ = posZ;
fx.motionY = -1D;
worldObj.spawnEntityInWorld(fx);
}
if(dataWatcher.getWatchableObjectInt(16) != 1 && !worldObj.isRemote && ticksExisted % 2 == 0) {
ParticleUtil.spawnGasFlame(worldObj, posX, posY - 0.5, posZ, 0.0, -1.0, 0.0);
}
if(dataWatcher.getWatchableObjectInt(16) == 2 && posY > 300)

View File

@ -1,85 +0,0 @@
package com.hbm.entity.particle;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.world.World;
public class EntityGasFlameFX extends EntityModFX
{
float smokeParticleScale;
public int particleAge;
public int maxAge;
private static final String __OBFID = "CL_00000924";
public EntityGasFlameFX(World world) {
super(world, 0, 0, 0);
}
public EntityGasFlameFX(World p_i1225_1_, double p_i1225_2_, double p_i1225_4_, double p_i1225_6_, double p_i1225_8_, double p_i1225_10_, double p_i1225_12_)
{
this(p_i1225_1_, p_i1225_2_, p_i1225_4_, p_i1225_6_, p_i1225_8_, p_i1225_10_, p_i1225_12_, 1.0F);
}
public EntityGasFlameFX(World p_i1226_1_, double p_i1226_2_, double p_i1226_4_, double p_i1226_6_, double p_i1226_8_, double p_i1226_10_, double p_i1226_12_, float p_i1226_14_)
{
super(p_i1226_1_, p_i1226_2_, p_i1226_4_, p_i1226_6_, 0.0D, 0.0D, 0.0D);
this.motionX *= 0.10000000149011612D;
this.motionY *= 0.10000000149011612D;
this.motionZ *= 0.10000000149011612D;
this.motionX += p_i1226_8_;
this.motionY += p_i1226_10_;
this.motionZ += p_i1226_12_;
this.particleRed = this.particleGreen = this.particleBlue = (float)(Math.random() * 0.30000001192092896D);
this.particleScale *= 0.75F;
this.particleScale *= p_i1226_14_;
this.smokeParticleScale = this.particleScale;
//this.particleMaxAge = (int)(8.0D / (Math.random() * 0.8D + 0.2D));
//this.particleMaxAge = (int)((float)this.particleMaxAge * p_i1226_14_);
this.noClip = false;
}
/**
* Called to update the entity's position/logic.
*/
@Override
public void onUpdate()
{
this.prevPosX = this.posX;
this.prevPosY = this.posY;
this.prevPosZ = this.posZ;
if(maxAge < 30)
{
maxAge = rand.nextInt(13) + 30;
}
this.particleAge++;
if (this.particleAge >= maxAge)
{
this.setDead();
}
this.motionX *= 0.7599999785423279D;
this.motionY += 0.0075D;
this.motionZ *= 0.7599999785423279D;
if (this.onGround)
{
this.motionX *= 0.699999988079071D;
this.motionZ *= 0.699999988079071D;
}
this.posX += this.motionX;
this.posY += this.motionY;
this.posZ += this.motionZ;
}
@Override
@SideOnly(Side.CLIENT)
public int getBrightnessForRender(float p_70070_1_)
{
return 15728880;
}
}

View File

@ -0,0 +1,176 @@
package com.hbm.entity.projectile;
import com.hbm.entity.logic.IChunkLoader;
import com.hbm.items.weapon.ItemAmmoArty;
import com.hbm.items.weapon.ItemAmmoArty.ArtilleryShell;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.MathHelper;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.world.ChunkCoordIntPair;
import net.minecraft.world.World;
import net.minecraftforge.common.ForgeChunkManager;
import net.minecraftforge.common.ForgeChunkManager.Ticket;
public class EntityArtilleryShell extends EntityThrowableNT implements IChunkLoader {
private Ticket loaderTicket;
private int turnProgress;
private double syncPosX;
private double syncPosY;
private double syncPosZ;
private double syncYaw;
private double syncPitch;
@SideOnly(Side.CLIENT)
private double velocityX;
@SideOnly(Side.CLIENT)
private double velocityY;
@SideOnly(Side.CLIENT)
private double velocityZ;
private double targetX;
private double targetY;
private double targetZ;
private boolean shouldWhistle = false;
private boolean didWhistle = false;
public EntityArtilleryShell(World world) {
super(world);
this.ignoreFrustumCheck = true;
}
@Override
protected void entityInit() {
this.dataWatcher.addObject(10, new Integer(0));
}
@Override
@SideOnly(Side.CLIENT)
public boolean isInRangeToRenderDist(double distance) {
return true;
}
public EntityArtilleryShell setType(int type) {
this.dataWatcher.updateObject(10, type);
return this;
}
public ArtilleryShell getType() {
try {
return ItemAmmoArty.types[this.dataWatcher.getWatchableObjectInt(10)];
} catch(Exception ex) {
return ItemAmmoArty.types[0];
}
}
public void setTarget(int x, int y, int z) {
this.targetX = x;
this.targetY = y;
this.targetZ = z;
}
public void setWhistle(boolean whistle) {
this.shouldWhistle = whistle;
}
@Override
public void onUpdate() {
if(!worldObj.isRemote) {
super.onUpdate();
if(!didWhistle && this.shouldWhistle) {
double speed = Math.sqrt(this.motionX * this.motionX + this.motionZ * this.motionZ);
double deltaX = this.posX - this.targetX;
double deltaZ = this.posZ - this.targetZ;
double dist = Math.sqrt(deltaX * deltaX + deltaZ * deltaZ);
if(speed * 18 > dist) {
worldObj.playSoundEffect(this.targetX, this.targetY, this.targetZ, "hbm:turret.mortarWhistle", 5.0F, 1.0F);
this.didWhistle = true;
}
}
} else {
if(this.turnProgress > 0) {
double interpX = this.posX + (this.syncPosX - this.posX) / (double) this.turnProgress;
double interpY = this.posY + (this.syncPosY - this.posY) / (double) this.turnProgress;
double interpZ = this.posZ + (this.syncPosZ - this.posZ) / (double) this.turnProgress;
double d = MathHelper.wrapAngleTo180_double(this.syncYaw - (double) this.rotationYaw);
this.rotationYaw = (float) ((double) this.rotationYaw + d / (double) this.turnProgress);
this.rotationPitch = (float)((double)this.rotationPitch + (this.syncPitch - (double)this.rotationPitch) / (double)this.turnProgress);
--this.turnProgress;
this.setPosition(interpX, interpY, interpZ);
} else {
this.setPosition(this.posX, this.posY, this.posZ);
}
}
}
@SideOnly(Side.CLIENT)
public void setVelocity(double p_70016_1_, double p_70016_3_, double p_70016_5_) {
this.velocityX = this.motionX = p_70016_1_;
this.velocityY = this.motionY = p_70016_3_;
this.velocityZ = this.motionZ = p_70016_5_;
}
@SideOnly(Side.CLIENT)
public void setPositionAndRotation2(double x, double y, double z, float yaw, float pitch, int theNumberThree) {
this.syncPosX = x;
this.syncPosY = y;
this.syncPosZ = z;
this.syncYaw = yaw;
this.syncPitch = pitch;
this.turnProgress = theNumberThree;
this.motionX = this.velocityX;
this.motionY = this.velocityY;
this.motionZ = this.velocityZ;
}
@Override
protected void onImpact(MovingObjectPosition mop) {
if(!worldObj.isRemote) {
/*Vec3 vec = Vec3.createVectorHelper(motionX, motionY, motionZ).normalize();
this.worldObj.newExplosion(this, mop.hitVec.xCoord - vec.xCoord, mop.hitVec.yCoord - vec.yCoord, mop.hitVec.zCoord - vec.zCoord, 15F, false, false);
this.setDead();*/
this.getType().onImpact(this, mop);
}
}
@Override
public void init(Ticket ticket) {
if(!worldObj.isRemote && ticket != null) {
if(loaderTicket == null) {
loaderTicket = ticket;
loaderTicket.bindEntity(this);
loaderTicket.getModData();
}
ForgeChunkManager.forceChunk(loaderTicket, new ChunkCoordIntPair(chunkCoordX, chunkCoordZ));
}
}
@Override
public void writeEntityToNBT(NBTTagCompound nbt) {
super.writeEntityToNBT(nbt);
}
@Override
public void readEntityFromNBT(NBTTagCompound nbt) {
super.readEntityFromNBT(nbt);
}
@Override
protected float getAirDrag() {
return 1.0F;
}
@Override
public double getGravityVelocity() {
return 9.81 * 0.05;
}
}

View File

@ -762,11 +762,6 @@ public class EntityBullet extends Entity implements IProjectile {
if (!this.worldObj.isRemote && this.inGround && this.arrowShake <= 0) {
boolean flag = this.canBePickedUp == 1 || this.canBePickedUp == 2 && p_70100_1_.capabilities.isCreativeMode;
if (this.canBePickedUp == 1
&& !p_70100_1_.inventory.addItemStackToInventory(new ItemStack(ModItems.gun_rpg_ammo, 1))) {
flag = false;
}
if (flag) {
p_70100_1_.onItemPickup(this, 1);
this.setDead();

View File

@ -483,11 +483,6 @@ public class EntityCombineBall extends Entity implements IProjectile
{
boolean flag = this.canBePickedUp == 1 || this.canBePickedUp == 2 && p_70100_1_.capabilities.isCreativeMode;
if (this.canBePickedUp == 1 && !p_70100_1_.inventory.addItemStackToInventory(new ItemStack(ModItems.gun_rpg_ammo, 1)))
{
flag = false;
}
if (flag)
{
p_70100_1_.onItemPickup(this, 1);

View File

@ -507,11 +507,6 @@ public class EntityDischarge extends Entity implements IProjectile
{
boolean flag = this.canBePickedUp == 1 || this.canBePickedUp == 2 && p_70100_1_.capabilities.isCreativeMode;
if (this.canBePickedUp == 1 && !p_70100_1_.inventory.addItemStackToInventory(new ItemStack(ModItems.gun_rpg_ammo, 1)))
{
flag = false;
}
if (flag)
{
p_70100_1_.onItemPickup(this, 1);

View File

@ -484,11 +484,6 @@ public class EntityFire extends Entity implements IProjectile
{
boolean flag = this.canBePickedUp == 1 || this.canBePickedUp == 2 && p_70100_1_.capabilities.isCreativeMode;
if (this.canBePickedUp == 1 && !p_70100_1_.inventory.addItemStackToInventory(new ItemStack(ModItems.gun_rpg_ammo, 1)))
{
flag = false;
}
if (flag)
{
p_70100_1_.onItemPickup(this, 1);

View File

@ -481,11 +481,6 @@ public class EntityLN2 extends Entity implements IProjectile
{
boolean flag = this.canBePickedUp == 1 || this.canBePickedUp == 2 && p_70100_1_.capabilities.isCreativeMode;
if (this.canBePickedUp == 1 && !p_70100_1_.inventory.addItemStackToInventory(new ItemStack(ModItems.gun_rpg_ammo, 1)))
{
flag = false;
}
if (flag)
{
p_70100_1_.onItemPickup(this, 1);

View File

@ -121,11 +121,12 @@ public class EntityRBMKDebris extends EntityDebrisBase {
}
}
if(this.getType() == DebrisType.FUEL) {
List<EntityLivingBase> entities = worldObj.getEntitiesWithinAABB(EntityLivingBase.class, this.boundingBox.expand(10, 10, 10));
if(this.getType() == DebrisType.FUEL || this.getType() == DebrisType.GRAPHITE) {
List<EntityLivingBase> entities = worldObj.getEntitiesWithinAABB(EntityLivingBase.class, this.boundingBox.expand(2.5, 2.5, 2.5));
int level = this.getType() == DebrisType.FUEL ? 9 : 4;
for(EntityLivingBase e : entities) {
e.addPotionEffect(new PotionEffect(HbmPotion.radiation.id, 60 * 20, 9));
e.addPotionEffect(new PotionEffect(HbmPotion.radiation.id, 60 * 20, level));
}
}

View File

@ -559,11 +559,6 @@ public class EntityRocket extends Entity implements IProjectile
{
boolean flag = this.canBePickedUp == 1 || this.canBePickedUp == 2 && p_70100_1_.capabilities.isCreativeMode;
if (this.canBePickedUp == 1 && !p_70100_1_.inventory.addItemStackToInventory(new ItemStack(ModItems.gun_rpg_ammo, 1)))
{
flag = false;
}
if (flag)
{
p_70100_1_.onItemPickup(this, 1);

View File

@ -557,11 +557,6 @@ public class EntitySchrab extends Entity implements IProjectile
{
boolean flag = this.canBePickedUp == 1 || this.canBePickedUp == 2 && p_70100_1_.capabilities.isCreativeMode;
if (this.canBePickedUp == 1 && !p_70100_1_.inventory.addItemStackToInventory(new ItemStack(ModItems.gun_rpg_ammo, 1)))
{
flag = false;
}
if (flag)
{
this.playSound("random.pop", 0.2F, ((this.rand.nextFloat() - this.rand.nextFloat()) * 0.7F + 1.0F) * 2.0F);

View File

@ -0,0 +1,311 @@
package com.hbm.entity.projectile;
import java.util.List;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.block.Block;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.IProjectile;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.MathHelper;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.util.Vec3;
import net.minecraft.world.World;
/**
* Near-identical copy of EntityThrowable but deobfuscated & untangled
* @author hbm
*
*/
public abstract class EntityThrowableNT extends Entity implements IProjectile {
private int stuckBlockX = -1;
private int stuckBlockY = -1;
private int stuckBlockZ = -1;
private Block stuckBlock;
protected boolean inGround;
public int throwableShake;
private EntityLivingBase thrower;
private String throwerName;
private int ticksInGround;
private int ticksInAir;
public EntityThrowableNT(World world) {
super(world);
this.setSize(0.25F, 0.25F);
}
@Override
protected void entityInit() { }
@Override
@SideOnly(Side.CLIENT)
public boolean isInRangeToRenderDist(double dist) {
double perimeter = this.boundingBox.getAverageEdgeLength() * 4.0D;
perimeter *= 64.0D;
return dist < perimeter * perimeter;
}
public EntityThrowableNT(World world, EntityLivingBase thrower) {
super(world);
this.thrower = thrower;
this.setSize(0.25F, 0.25F);
this.setLocationAndAngles(thrower.posX, thrower.posY + (double) thrower.getEyeHeight(), thrower.posZ, thrower.rotationYaw, thrower.rotationPitch);
this.posX -= (double) (MathHelper.cos(this.rotationYaw / 180.0F * (float) Math.PI) * 0.16F);
this.posY -= 0.1D;
this.posZ -= (double) (MathHelper.sin(this.rotationYaw / 180.0F * (float) Math.PI) * 0.16F);
this.setPosition(this.posX, this.posY, this.posZ);
this.yOffset = 0.0F;
float velocity = 0.4F;
this.motionX = (double) (-MathHelper.sin(this.rotationYaw / 180.0F * (float) Math.PI) * MathHelper.cos(this.rotationPitch / 180.0F * (float) Math.PI) * velocity);
this.motionZ = (double) (MathHelper.cos(this.rotationYaw / 180.0F * (float) Math.PI) * MathHelper.cos(this.rotationPitch / 180.0F * (float) Math.PI) * velocity);
this.motionY = (double) (-MathHelper.sin((this.rotationPitch + this.throwAngle()) / 180.0F * (float) Math.PI) * velocity);
this.setThrowableHeading(this.motionX, this.motionY, this.motionZ, this.throwForce(), 1.0F);
}
public EntityThrowableNT(World world, double x, double y, double z) {
super(world);
this.ticksInGround = 0;
this.setSize(0.25F, 0.25F);
this.setPosition(x, y, z);
this.yOffset = 0.0F;
}
protected float throwForce() {
return 1.5F;
}
protected float throwAngle() {
return 0.0F;
}
@Override
public void setThrowableHeading(double motionX, double motionY, double motionZ, float velocity, float inaccuracy) {
float throwLen = MathHelper.sqrt_double(motionX * motionX + motionY * motionY + motionZ * motionZ);
motionX /= (double) throwLen;
motionY /= (double) throwLen;
motionZ /= (double) throwLen;
motionX += this.rand.nextGaussian() * 0.0075D * (double) inaccuracy;
motionY += this.rand.nextGaussian() * 0.0075D * (double) inaccuracy;
motionZ += this.rand.nextGaussian() * 0.0075D * (double) inaccuracy;
motionX *= (double) velocity;
motionY *= (double) velocity;
motionZ *= (double) velocity;
this.motionX = motionX;
this.motionY = motionY;
this.motionZ = motionZ;
float hyp = MathHelper.sqrt_double(motionX * motionX + motionZ * motionZ);
this.prevRotationYaw = this.rotationYaw = (float) (Math.atan2(motionX, motionZ) * 180.0D / Math.PI);
this.prevRotationPitch = this.rotationPitch = (float) (Math.atan2(motionY, (double) hyp) * 180.0D / Math.PI);
this.ticksInGround = 0;
}
@Override
@SideOnly(Side.CLIENT)
public void setVelocity(double x, double y, double z) {
this.motionX = x;
this.motionY = y;
this.motionZ = z;
if(this.prevRotationPitch == 0.0F && this.prevRotationYaw == 0.0F) {
float hyp = MathHelper.sqrt_double(x * x + z * z);
this.prevRotationYaw = this.rotationYaw = (float) (Math.atan2(x, z) * 180.0D / Math.PI);
this.prevRotationPitch = this.rotationPitch = (float) (Math.atan2(y, (double) hyp) * 180.0D / Math.PI);
}
}
@Override
public void onUpdate() {
this.lastTickPosX = this.posX;
this.lastTickPosY = this.posY;
this.lastTickPosZ = this.posZ;
super.onUpdate();
if(this.throwableShake > 0) {
--this.throwableShake;
}
if(this.inGround) {
if(this.worldObj.getBlock(this.stuckBlockX, this.stuckBlockY, this.stuckBlockZ) == this.stuckBlock) {
++this.ticksInGround;
if(this.groundDespawn() > 0 && this.ticksInGround == this.groundDespawn()) {
this.setDead();
}
return;
}
this.inGround = false;
this.motionX *= (double) (this.rand.nextFloat() * 0.2F);
this.motionY *= (double) (this.rand.nextFloat() * 0.2F);
this.motionZ *= (double) (this.rand.nextFloat() * 0.2F);
this.ticksInGround = 0;
this.ticksInAir = 0;
} else {
++this.ticksInAir;
}
Vec3 pos = Vec3.createVectorHelper(this.posX, this.posY, this.posZ);
Vec3 nextPos = Vec3.createVectorHelper(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ);
MovingObjectPosition mop = this.worldObj.rayTraceBlocks(pos, nextPos);
pos = Vec3.createVectorHelper(this.posX, this.posY, this.posZ);
nextPos = Vec3.createVectorHelper(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ);
if(mop != null) {
nextPos = Vec3.createVectorHelper(mop.hitVec.xCoord, mop.hitVec.yCoord, mop.hitVec.zCoord);
}
if(!this.worldObj.isRemote) {
Entity hitEntity = null;
List list = this.worldObj.getEntitiesWithinAABBExcludingEntity(this, this.boundingBox.addCoord(this.motionX, this.motionY, this.motionZ).expand(1.0D, 1.0D, 1.0D));
double nearest = 0.0D;
EntityLivingBase thrower = this.getThrower();
for(int j = 0; j < list.size(); ++j) {
Entity entity = (Entity) list.get(j);
if(entity.canBeCollidedWith() && (entity != thrower || this.ticksInAir >= 5)) {
double hitbox = 0.3F;
AxisAlignedBB aabb = entity.boundingBox.expand(hitbox, hitbox, hitbox);
MovingObjectPosition hitMop = aabb.calculateIntercept(pos, nextPos);
if(hitMop != null) {
double dist = pos.distanceTo(hitMop.hitVec);
if(dist < nearest || nearest == 0.0D) {
hitEntity = entity;
nearest = dist;
}
}
}
}
if(hitEntity != null) {
mop = new MovingObjectPosition(hitEntity);
}
}
if(mop != null) {
if(mop.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK && this.worldObj.getBlock(mop.blockX, mop.blockY, mop.blockZ) == Blocks.portal) {
this.setInPortal();
} else {
this.onImpact(mop);
}
}
this.posX += this.motionX;
this.posY += this.motionY;
this.posZ += this.motionZ;
float hyp = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionZ * this.motionZ);
this.rotationYaw = (float) (Math.atan2(this.motionX, this.motionZ) * 180.0D / Math.PI);
for(this.rotationPitch = (float) (Math.atan2(this.motionY, (double) hyp) * 180.0D / Math.PI); this.rotationPitch - this.prevRotationPitch < -180.0F; this.prevRotationPitch -= 360.0F) {
;
}
while(this.rotationPitch - this.prevRotationPitch >= 180.0F) {
this.prevRotationPitch += 360.0F;
}
while(this.rotationYaw - this.prevRotationYaw < -180.0F) {
this.prevRotationYaw -= 360.0F;
}
while(this.rotationYaw - this.prevRotationYaw >= 180.0F) {
this.prevRotationYaw += 360.0F;
}
this.rotationPitch = this.prevRotationPitch + (this.rotationPitch - this.prevRotationPitch) * 0.2F;
this.rotationYaw = this.prevRotationYaw + (this.rotationYaw - this.prevRotationYaw) * 0.2F;
float drag = this.getAirDrag();
double gravity = this.getGravityVelocity();
if(this.isInWater()) {
for(int i = 0; i < 4; ++i) {
float f = 0.25F;
this.worldObj.spawnParticle("bubble", this.posX - this.motionX * (double) f, this.posY - this.motionY * (double) f, this.posZ - this.motionZ * (double) f, this.motionX, this.motionY, this.motionZ);
}
drag = this.getWaterDrag();
}
this.motionX *= (double) drag;
this.motionY *= (double) drag;
this.motionZ *= (double) drag;
this.motionY -= gravity;
this.setPosition(this.posX, this.posY, this.posZ);
}
public double getGravityVelocity() {
return 0.03D;
}
protected abstract void onImpact(MovingObjectPosition mop);
@Override
public void writeEntityToNBT(NBTTagCompound nbt) {
nbt.setShort("xTile", (short) this.stuckBlockX);
nbt.setShort("yTile", (short) this.stuckBlockY);
nbt.setShort("zTile", (short) this.stuckBlockZ);
nbt.setByte("inTile", (byte) Block.getIdFromBlock(this.stuckBlock));
nbt.setByte("shake", (byte) this.throwableShake);
nbt.setByte("inGround", (byte) (this.inGround ? 1 : 0));
if((this.throwerName == null || this.throwerName.length() == 0) && this.thrower != null && this.thrower instanceof EntityPlayer) {
this.throwerName = this.thrower.getCommandSenderName();
}
nbt.setString("ownerName", this.throwerName == null ? "" : this.throwerName);
}
@Override
public void readEntityFromNBT(NBTTagCompound nbt) {
this.stuckBlockX = nbt.getShort("xTile");
this.stuckBlockY = nbt.getShort("yTile");
this.stuckBlockZ = nbt.getShort("zTile");
this.stuckBlock = Block.getBlockById(nbt.getByte("inTile") & 255);
this.throwableShake = nbt.getByte("shake") & 255;
this.inGround = nbt.getByte("inGround") == 1;
this.throwerName = nbt.getString("ownerName");
if(this.throwerName != null && this.throwerName.length() == 0) {
this.throwerName = null;
}
}
@Override
@SideOnly(Side.CLIENT)
public float getShadowSize() {
return 0.0F;
}
public EntityLivingBase getThrower() {
if(this.thrower == null && this.throwerName != null && this.throwerName.length() > 0) {
this.thrower = this.worldObj.getPlayerEntityByName(this.throwerName);
}
return this.thrower;
}
/* ================================== Additional Getters =====================================*/
protected float getAirDrag() {
return 0.99F;
}
protected float getWaterDrag() {
return 0.8F;
}
protected int groundDespawn() {
return 1200;
}
}

View File

@ -116,10 +116,11 @@ public class EntityZirnoxDebris extends EntityDebrisBase {
}
if(this.getType() == DebrisType.ELEMENT || this.getType() == DebrisType.GRAPHITE) {
List<EntityLivingBase> entities = worldObj.getEntitiesWithinAABB(EntityLivingBase.class, this.boundingBox.expand(10, 10, 10));
List<EntityLivingBase> entities = worldObj.getEntitiesWithinAABB(EntityLivingBase.class, this.boundingBox.expand(2.5, 2.5, 2.5));
int level = this.getType() == DebrisType.ELEMENT ? 7 : 4;
for(EntityLivingBase e : entities) {
e.addPotionEffect(new PotionEffect(HbmPotion.radiation.id, 60 * 20, 4));
e.addPotionEffect(new PotionEffect(HbmPotion.radiation.id, 60 * 20, level));
}
}

View File

@ -3,12 +3,12 @@ package com.hbm.explosion;
import java.util.List;
import java.util.Random;
import com.hbm.entity.particle.EntityGasFlameFX;
import com.hbm.entity.projectile.EntityOilSpill;
import com.hbm.entity.projectile.EntityRubble;
import com.hbm.entity.projectile.EntityShrapnel;
import com.hbm.packet.AuxParticlePacketNT;
import com.hbm.packet.PacketDispatcher;
import com.hbm.util.ParticleUtil;
import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint;
import net.minecraft.entity.Entity;
@ -57,11 +57,7 @@ public class ExplosionLarge {
vec.rotateAroundY(rand.nextInt(360));
for(int i = 0; i < count; i++) {
EntityGasFlameFX fx = new EntityGasFlameFX(world, x, y, z, 0.0, 0.0, 0.0);
fx.motionY = 0;
fx.motionX = vec.xCoord;
fx.motionZ = vec.zCoord;
world.spawnEntityInWorld(fx);
ParticleUtil.spawnGasFlame(world, x, y, z, vec.xCoord, 0.0, vec.zCoord);
vec.rotateAroundY(360 / count);
}

View File

@ -2,50 +2,197 @@ package com.hbm.explosion;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import com.hbm.interfaces.Untested;
import net.minecraft.init.Blocks;
import net.minecraft.util.Vec3;
import net.minecraft.world.World;
public class ExplosionNukeRay {
List<FloatTriplet> affectedBlocks = new ArrayList();
List<FloatTriplet> affectedBlocks = new ArrayList<>();
int posX;
int posY;
int posZ;
Random rand = new Random();
World world;
int strength;
int length;
int processed;
int gspNumMax;
int gspNum;
double gspX;
double gspY;
public boolean isAusf3Complete = false;
/*[[unused]]
int count;
int speed;
int processed;
int length;
int startY;
int startCir;
public boolean isAusf3Complete = false;
Random rand = new Random();
private double overrideRange = 0;
*/
public ExplosionNukeRay(World world, int x, int y, int z, int strength, int count, int speed, int length) {
this.world = world;
this.posX = x;
this.posY = y;
this.posZ = z;
this.strength = strength;
this.count = count;
this.speed = speed;
this.length = length;
//Ausf3, must be double
//this.startY = strength;
//Mk 4.5, must be int32
// Total number of points
this.gspNumMax = (int)(2.5 * Math.PI * Math.pow(this.strength,2));
this.gspNum = 1;
// The beginning of the generalized spiral points
this.gspX = Math.PI;
this.gspY = 0.0;
/*[[unused]]
// this.startY = strength;
this.startY = 0;
this.startCir = 0;
this.count = count;
this.speed = speed;
//starts at around 80, becomes 8 at length 500
this.overrideRange = Math.max((Math.log(length) * 4 - 2.5D) * 10, 0);
*/
}
// Raise one generalized spiral points
private void generateGspUp(){
if (this.gspNum < this.gspNumMax) {
int k = this.gspNum + 1;
double hk = -1.0 + 2.0 * (k - 1.0) / (this.gspNumMax - 1.0);
this.gspX = Math.acos(hk);
double prev_lon = this.gspY;
double lon = prev_lon + 3.6 / Math.sqrt(this.gspNumMax) / Math.sqrt(1.0 - hk * hk);
this.gspY = lon % (Math.PI * 2);
} else {
this.gspX = 0.0;
this.gspY = 0.0;
}
this.gspNum++;
}
// Get Cartesian coordinates for spherical coordinates
private Vec3 getSpherical2cartesian(){
double dx = Math.sin(this.gspX) * Math.cos(this.gspY);
double dz = Math.sin(this.gspX) * Math.sin(this.gspY);
double dy = Math.cos(this.gspX);
return Vec3.createVectorHelper(dx, dy, dz);
}
//currently used by mk4
public void collectTipMk4_5(int count) {
int amountProcessed = 0;
while (this.gspNumMax >= this.gspNum){
// Get Cartesian coordinates for spherical coordinates
Vec3 vec = this.getSpherical2cartesian();
int length = (int)Math.ceil(strength);
float res = strength;
FloatTriplet lastPos = null;
for(int i = 0; i < length; i ++) {
if(i > this.length)
break;
float x0 = (float) (posX + (vec.xCoord * i));
float y0 = (float) (posY + (vec.yCoord * i));
float z0 = (float) (posZ + (vec.zCoord * i));
double fac = 100 - ((double) i) / ((double) length) * 100;
fac *= 0.07D;
if(!world.getBlock((int)x0, (int)y0, (int)z0).getMaterial().isLiquid())
res -= Math.pow(world.getBlock((int)x0, (int)y0, (int)z0).getExplosionResistance(null), 7.5D - fac);
else
res -= Math.pow(Blocks.air.getExplosionResistance(null), 7.5D - fac);
if(res > 0 && world.getBlock((int)x0, (int)y0, (int)z0) != Blocks.air) {
lastPos = new FloatTriplet(x0, y0, z0);
}
if(res <= 0 || i + 1 >= this.length) {
if(affectedBlocks.size() < Integer.MAX_VALUE - 100 && lastPos != null) {
affectedBlocks.add(lastPos);
}
break;
}
}
// Raise one generalized spiral points
this.generateGspUp();
amountProcessed++;
if(amountProcessed >= count) {
return;
}
}
isAusf3Complete = true;
}
public void processTip(int count) {
int processedBlocks = 0;
int braker = 0;
for(int l = 0; l < Integer.MAX_VALUE; l++) {
if(processedBlocks >= count)
return;
if(braker >= count * 50)
return;
if(l > affectedBlocks.size() - 1)
break;
if(affectedBlocks.isEmpty())
return;
int in = affectedBlocks.size() - 1;
float x = affectedBlocks.get(in).xCoord;
float y = affectedBlocks.get(in).yCoord;
float z = affectedBlocks.get(in).zCoord;
world.setBlock((int)x, (int)y, (int)z, Blocks.air);
Vec3 vec = Vec3.createVectorHelper(x - this.posX, y - this.posY, z - this.posZ);
double pX = vec.xCoord / vec.lengthVector();
double pY = vec.yCoord / vec.lengthVector();
double pZ = vec.zCoord / vec.lengthVector();
for(int i = 0; i < vec.lengthVector(); i ++) {
int x0 = (int)(posX + pX * i);
int y0 = (int)(posY + pY * i);
int z0 = (int)(posZ + pZ * i);
if(!world.isAirBlock(x0, y0, z0)) {
world.setBlock(x0, y0, z0, Blocks.air);
processedBlocks++;
}
braker++;
}
affectedBlocks.remove(in);
}
processed += count;
}
/*public void processBunch(int count) {
@ -102,58 +249,7 @@ public class ExplosionNukeRay {
}
}
}*/
public void processTip(int count) {
int processedBlocks = 0;
int braker = 0;
for(int l = 0; l < Integer.MAX_VALUE; l++) {
if(processedBlocks >= count)
return;
if(braker >= count * 50)
return;
if(l > affectedBlocks.size() - 1)
break;
if(affectedBlocks.isEmpty())
return;
int in = affectedBlocks.size() - 1;
float x = affectedBlocks.get(in).xCoord;
float y = affectedBlocks.get(in).yCoord;
float z = affectedBlocks.get(in).zCoord;
world.setBlock((int)x, (int)y, (int)z, Blocks.air);
Vec3 vec = Vec3.createVectorHelper(x - this.posX, y - this.posY, z - this.posZ);
double pX = vec.xCoord / vec.lengthVector();
double pY = vec.yCoord / vec.lengthVector();
double pZ = vec.zCoord / vec.lengthVector();
for(int i = 0; i < vec.lengthVector(); i ++) {
int x0 = (int)(posX + pX * i);
int y0 = (int)(posY + pY * i);
int z0 = (int)(posZ + pZ * i);
if(!world.isAirBlock(x0, y0, z0)) {
world.setBlock(x0, y0, z0, Blocks.air);
processedBlocks++;
}
braker++;
}
affectedBlocks.remove(in);
}
processed += count;
}
/*
@Untested //override range
public void collectTip(int count) {
@ -169,7 +265,7 @@ public class ExplosionNukeRay {
int length = (int)Math.ceil(strength);
float res = strength;
FloatTriplet lastPos = null;
for(int i = 0; i < length; i ++) {
@ -185,21 +281,19 @@ public class ExplosionNukeRay {
res -= Math.pow(world.getBlock((int)x0, (int)y0, (int)z0).getExplosionResistance(null), 1.25);
else
res -= Math.pow(Blocks.air.getExplosionResistance(null), 1.25);
/*
* Blast resistance calculations are still done to preserve the general shape,
* but if the blast were to be stopped within this range we go through with it anyway.
* There is currently no blast resistance limit on this, could change in the future.
*/
//Blast resistance calculations are still done to preserve the general shape,
//but if the blast were to be stopped within this range we go through with it anyway.
//There is currently no blast resistance limit on this, could change in the future.
boolean inOverrideRange = this.overrideRange >= length;
if((res > 0 || inOverrideRange) && world.getBlock((int)x0, (int)y0, (int)z0) != Blocks.air) {
lastPos = new FloatTriplet(x0, y0, z0);
}
/*
* Only stop if we are either out of range or if the remaining strength is 0 while being outside the override range
*/
// Only stop if we are either out of range or if the remaining strength is 0 while being outside the override range
if((res <= 0 && !inOverrideRange) || i + 1 >= this.length) {
if(affectedBlocks.size() < Integer.MAX_VALUE - 100 && lastPos != null)
affectedBlocks.add(new FloatTriplet(lastPos.xCoord, lastPos.yCoord, lastPos.zCoord));
@ -208,7 +302,8 @@ public class ExplosionNukeRay {
}
}
}
*/
/*
public void collectTipExperimental(int count) {
for(int k = 0; k < count; k++) {
@ -223,7 +318,7 @@ public class ExplosionNukeRay {
int length = (int)Math.ceil(strength);
float res = strength;
FloatTriplet lastPos = null;
for(int i = 0; i < length; i ++) {
@ -246,7 +341,7 @@ public class ExplosionNukeRay {
if(res > 0 && world.getBlock((int)x0, (int)y0, (int)z0) != Blocks.air) {
lastPos = new FloatTriplet(x0, y0, z0);
}
if(res <= 0 || i + 1 >= this.length) {
if(affectedBlocks.size() < Integer.MAX_VALUE - 100 && lastPos != null)
affectedBlocks.add(new FloatTriplet(lastPos.xCoord, lastPos.yCoord, lastPos.zCoord));
@ -255,7 +350,7 @@ public class ExplosionNukeRay {
}
}
}
*/
/*public void collectTipAusf3(int count) {
int amountProcessed = 0;
@ -328,94 +423,6 @@ public class ExplosionNukeRay {
isAusf3Complete = true;
}*/
//currently used by mk4
public void collectTipMk4_5(int count) {
int amountProcessed = 0;
double bow = Math.PI * this.strength;
double bowCount = Math.ceil(bow);
//Axial
//StartY starts at this.length
for(int v = startY; v <= bowCount; v++) {
float part = (float) (Math.PI/bow);
float rot = part * -v;
Vec3 heightVec = Vec3.createVectorHelper(0, -strength, 0);
heightVec.rotateAroundZ(rot);
double y = heightVec.yCoord;
double sectionRad = Math.sqrt(Math.pow(strength, 2) - Math.pow(y, 2));
double circumference = 2 * Math.PI * sectionRad;
//if(y < 2 && y > -2)
// circumference *= 1.25D;
//circumference = Math.ceil(circumference);
//Radial
//StartCir starts at circumference
for(int r = startCir; r < circumference; r ++) {
Vec3 vec = Vec3.createVectorHelper(sectionRad, y, 0);
vec = vec.normalize();
/*if(y > 0)
vec.rotateAroundZ((float) (y / sectionRad) * 0.15F);*/
/*if(y < 0)
vec.rotateAroundZ((float) (y / sectionRad) * 0.15F);*/
vec.rotateAroundY((float) (360 / circumference * r));
int length = (int)Math.ceil(strength);
float res = strength;
FloatTriplet lastPos = null;
for(int i = 0; i < length; i ++) {
if(i > this.length)
break;
float x0 = (float) (posX + (vec.xCoord * i));
float y0 = (float) (posY + (vec.yCoord * i));
float z0 = (float) (posZ + (vec.zCoord * i));
double fac = 100 - ((double) i) / ((double) length) * 100;
fac *= 0.07D;
if(!world.getBlock((int)x0, (int)y0, (int)z0).getMaterial().isLiquid())
res -= Math.pow(world.getBlock((int)x0, (int)y0, (int)z0).getExplosionResistance(null), 7.5D - fac);
else
res -= Math.pow(Blocks.air.getExplosionResistance(null), 7.5D - fac);
if(res > 0 && world.getBlock((int)x0, (int)y0, (int)z0) != Blocks.air) {
lastPos = new FloatTriplet(x0, y0, z0);
}
if(res <= 0 || i + 1 >= this.length) {
if(affectedBlocks.size() < Integer.MAX_VALUE - 100 && lastPos != null) {
affectedBlocks.add(new FloatTriplet(lastPos.xCoord, lastPos.yCoord, lastPos.zCoord));
}
break;
}
}
amountProcessed++;
if(amountProcessed >= count) {
startY = v;
startCir = startCir + 1;
return;
}
}
}
isAusf3Complete = true;
}
//Dysfunctional, punches hole into ground
/*public void collectTipAusf3(int count) {

View File

@ -28,6 +28,9 @@ public class HbmPlayerProps implements IExtendedEntityProperties {
public int totalDashCount = 0;
public int stamina = 0;
public static final int plinkCooldownLength = 10;
public int plinkCooldown = 0;
public HbmPlayerProps(EntityPlayer player) {
this.player = player;
}
@ -103,6 +106,15 @@ public class HbmPlayerProps implements IExtendedEntityProperties {
public int getDashCount() {
return this.totalDashCount;
}
public static void plink(EntityPlayer player, String sound, float volume, float pitch) {
HbmPlayerProps props = HbmPlayerProps.getData(player);
if(props.plinkCooldown <= 0) {
player.worldObj.playSoundAtEntity(player, sound, volume, pitch);
props.plinkCooldown = props.plinkCooldownLength;
}
}
@Override
public void init(Entity entity, World world) { }

View File

@ -110,7 +110,6 @@ public class BobmazonOfferFactory {
weapons.add(new Offer(new ItemStack(ModItems.turret_cheapo_ammo), Requirement.ASSEMBLY, 20 * inflation));
weapons.add(new Offer(new ItemStack(ModItems.turret_control), Requirement.CHEMICS, 35 * inflation));
weapons.add(new Offer(new ItemStack(ModItems.turret_chip), Requirement.CHEMICS, 80 * inflation));
weapons.add(new Offer(new ItemStack(ModItems.turret_biometry), Requirement.CHEMICS, 15 * inflation));
weapons.add(new Offer(new ItemStack(ModBlocks.mine_ap, 4), Requirement.ASSEMBLY, 25 * inflation));
weapons.add(new Offer(new ItemStack(ModBlocks.emp_bomb), Requirement.CHEMICS, 90 * inflation));
weapons.add(new Offer(new ItemStack(ModBlocks.det_cord, 16), Requirement.ASSEMBLY, 50 * inflation));
@ -247,7 +246,7 @@ public class BobmazonOfferFactory {
new ItemStack(Items.dye, 64)
), Requirement.HIDDEN, 64));
special.add(new Offer(ItemKitCustom.create("Maid's Cleaning Utensils", "For the heard to reach spots", 0x00ff00, 0x008000,
special.add(new Offer(ItemKitCustom.create("Maid's Cleaning Utensils", "For the hard to reach spots", 0x00ff00, 0x008000,
new ItemStack(ModItems.gun_calamity),
new ItemStack(ModItems.ammo_50bmg_chlorophyte, 64),
new ItemStack(ModItems.ammo_50bmg_chlorophyte, 64),

View File

@ -83,8 +83,9 @@ public class EntityEffectHandler {
handleRadiation(entity);
handleDigamma(entity);
handleLungDisease(entity);
handleDashing(entity);
handlePlinking(entity);
}
private static void handleContamination(EntityLivingBase entity) {
@ -517,4 +518,15 @@ public class EntityEffectHandler {
}
}
private static void handlePlinking(Entity entity) {
if(entity instanceof EntityPlayer) {
EntityPlayer player = (EntityPlayer)entity;
HbmPlayerProps props = HbmPlayerProps.getData(player);
if(props.plinkCooldown > 0)
props.plinkCooldown--;
}
}
}

View File

@ -14,12 +14,11 @@ public class FuelHandler implements IFuelHandler {
int single = 200;
if(fuel.getItem().equals(ModItems.solid_fuel))
return single * 16;
if(fuel.getItem().equals(ModItems.solid_fuel_presto))
return single * 40;
if(fuel.getItem().equals(ModItems.solid_fuel_presto_triplet))
return single * 200;
if(fuel.getItem().equals(ModItems.solid_fuel)) return single * 16;
if(fuel.getItem().equals(ModItems.solid_fuel_presto)) return single * 40;
if(fuel.getItem().equals(ModItems.solid_fuel_presto_triplet)) return single * 200;
if(fuel.getItem().equals(ModItems.rocket_fuel)) return single * 32;
if(fuel.getItem().equals(ModItems.biomass))
return 800;
if(fuel.getItem().equals(ModItems.biomass_compressed))

View File

@ -10,6 +10,7 @@ import com.hbm.inventory.container.*;
import com.hbm.inventory.gui.*;
import com.hbm.inventory.inv.InventoryLeadBox;
import com.hbm.items.ModItems;
import com.hbm.tileentity.IGUIProvider;
import com.hbm.tileentity.bomb.*;
import com.hbm.tileentity.machine.*;
import com.hbm.tileentity.machine.oil.*;
@ -17,6 +18,7 @@ import com.hbm.tileentity.machine.rbmk.*;
import com.hbm.tileentity.machine.storage.*;
import com.hbm.tileentity.turret.*;
import net.minecraft.block.Block;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
@ -28,15 +30,39 @@ public class GUIHandler implements IGuiHandler {
@Override
public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) {
TileEntity entity = world.getTileEntity(x, y, z);
if(entity instanceof IGUIProvider) {
return ((IGUIProvider) entity).provideContainer(ID, player, world, x, y, z);
}
Block block = world.getBlock(x, y, z);
if(block instanceof IGUIProvider) {
return ((IGUIProvider) block).provideContainer(ID, player, world, x, y, z);
}
//notice: stop doing this, unless you absolutely have to \/
if(entity instanceof TileEntityCrateIron) { return new ContainerCrateIron(player.inventory, (TileEntityCrateIron) entity); }
if(entity instanceof TileEntityCrateSteel) { return new ContainerCrateSteel(player.inventory, (TileEntityCrateSteel) entity); }
if(entity instanceof TileEntityCrateDesh) { return new ContainerCrateDesh(player.inventory, (TileEntityCrateDesh) entity); }
if(entity instanceof TileEntityCrateTungsten) { return new ContainerCrateTungsten(player.inventory, (TileEntityCrateTungsten) entity); }
if(entity instanceof TileEntitySafe) { return new ContainerSafe(player.inventory, (TileEntitySafe) entity); }
if(entity instanceof TileEntityMassStorage) { return new ContainerMassStorage(player.inventory, (TileEntityMassStorage) entity); }
if(entity instanceof TileEntityMachineAutocrafter) { return new ContainerAutocrafter(player.inventory, (TileEntityMachineAutocrafter) entity); }
if(entity instanceof TileEntityMachineLiquefactor) { return new ContainerLiquefactor(player.inventory, (TileEntityMachineLiquefactor) entity); }
if(entity instanceof TileEntityMachineSolidifier) { return new ContainerSolidifier(player.inventory, (TileEntityMachineSolidifier) entity); }
if(entity instanceof TileEntityMachineRadiolysis) { return new ContainerRadiolysis(player.inventory, (TileEntityMachineRadiolysis) entity); }
if(entity instanceof TileEntityMachineAssemfac) { return new ContainerAssemfac(player.inventory, (TileEntityMachineAssemfac) entity); }
if(entity instanceof TileEntityMachineChemfac) { return new ContainerChemfac(player.inventory, (TileEntityMachineChemfac) entity); }
if(entity instanceof TileEntityElectrolyser) { return new ContainerElectrolyser(player.inventory, (TileEntityElectrolyser) entity); }
if(entity instanceof TileEntityRBMKHeater) { return new ContainerRBMKHeater(player.inventory, (TileEntityRBMKHeater) entity); }
//notice: stop doing this completely, period \/
switch(ID) {
case ModBlocks.guiID_test_difurnace: {
if(entity instanceof TileEntityDiFurnace) {
@ -353,20 +379,6 @@ public class GUIHandler implements IGuiHandler {
return null;
}
case ModBlocks.guiID_crate_iron: {
if(entity instanceof TileEntityCrateIron) {
return new ContainerCrateIron(player.inventory, (TileEntityCrateIron) entity);
}
return null;
}
case ModBlocks.guiID_crate_steel: {
if(entity instanceof TileEntityCrateSteel) {
return new ContainerCrateSteel(player.inventory, (TileEntityCrateSteel) entity);
}
return null;
}
case ModBlocks.guiID_machine_press: {
if(entity instanceof TileEntityMachinePress) {
return new ContainerMachinePress(player.inventory, (TileEntityMachinePress) entity);
@ -486,13 +498,6 @@ public class GUIHandler implements IGuiHandler {
return null;
}
case ModBlocks.guiID_safe: {
if(entity instanceof TileEntitySafe) {
return new ContainerSafe(player.inventory, (TileEntitySafe) entity);
}
return null;
}
case ModBlocks.guiID_gascent: {
if(entity instanceof TileEntityMachineGasCent) {
return new ContainerMachineGasCent(player.inventory, (TileEntityMachineGasCent) entity);
@ -710,13 +715,6 @@ public class GUIHandler implements IGuiHandler {
return null;
}
case ModBlocks.guiID_crate_tungsten: {
if(entity instanceof TileEntityCrateTungsten) {
return new ContainerCrateTungsten(player.inventory, (TileEntityCrateTungsten) entity);
}
return null;
}
case ModBlocks.guiID_chekhov: {
if(entity instanceof TileEntityTurretChekhov) {
return new ContainerTurretBase(player.inventory, (TileEntityTurretChekhov) entity);
@ -873,14 +871,38 @@ public class GUIHandler implements IGuiHandler {
public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) {
TileEntity entity = world.getTileEntity(x, y, z);
if(entity instanceof IGUIProvider) {
return ((IGUIProvider) entity).provideGUI(ID, player, world, x, y, z);
}
Block block = world.getBlock(x, y, z);
if(block instanceof IGUIProvider) {
return ((IGUIProvider) block).provideGUI(ID, player, world, x, y, z);
}
//stop doing this unless you absolutely have to \/
if(entity instanceof TileEntityCrateIron) { return new GUICrateIron(player.inventory, (TileEntityCrateIron) entity); }
if(entity instanceof TileEntityCrateSteel) { return new GUICrateSteel(player.inventory, (TileEntityCrateSteel) entity); }
if(entity instanceof TileEntityCrateDesh) { return new GUICrateDesh(player.inventory, (TileEntityCrateDesh) entity); }
if(entity instanceof TileEntityCrateTungsten) { return new GUICrateTungsten(player.inventory, (TileEntityCrateTungsten) entity); }
if(entity instanceof TileEntitySafe) { return new GUISafe(player.inventory, (TileEntitySafe) entity); }
if(entity instanceof TileEntityMassStorage) { return new GUIMassStorage(player.inventory, (TileEntityMassStorage) entity); }
if(entity instanceof TileEntityMachineAutocrafter) { return new GUIAutocrafter(player.inventory, (TileEntityMachineAutocrafter) entity); }
if(entity instanceof TileEntityMachineLiquefactor) { return new GUILiquefactor(player.inventory, (TileEntityMachineLiquefactor) entity); }
if(entity instanceof TileEntityMachineSolidifier) { return new GUISolidifier(player.inventory, (TileEntityMachineSolidifier) entity); }
if(entity instanceof TileEntityMachineRadiolysis) { return new GUIRadiolysis(player.inventory, (TileEntityMachineRadiolysis) entity); }
if(entity instanceof TileEntityMachineAssemfac) { return new GUIAssemfac(player.inventory, (TileEntityMachineAssemfac) entity); }
if(entity instanceof TileEntityMachineChemfac) { return new GUIChemfac(player.inventory, (TileEntityMachineChemfac) entity); }
if(entity instanceof TileEntityElectrolyser) { return new GUIElectrolyser(player.inventory, (TileEntityElectrolyser) entity); }
if(entity instanceof TileEntityRBMKHeater) { return new GUIRBMKHeater(player.inventory, (TileEntityRBMKHeater) entity); }
//stop doing this, period \/
switch(ID) {
case ModBlocks.guiID_test_difurnace: {
if(entity instanceof TileEntityDiFurnace) {
@ -1197,20 +1219,6 @@ public class GUIHandler implements IGuiHandler {
return null;
}
case ModBlocks.guiID_crate_iron: {
if(entity instanceof TileEntityCrateIron) {
return new GUICrateIron(player.inventory, (TileEntityCrateIron) entity);
}
return null;
}
case ModBlocks.guiID_crate_steel: {
if(entity instanceof TileEntityCrateSteel) {
return new GUICrateSteel(player.inventory, (TileEntityCrateSteel) entity);
}
return null;
}
case ModBlocks.guiID_machine_press: {
if(entity instanceof TileEntityMachinePress) {
return new GUIMachinePress(player.inventory, (TileEntityMachinePress) entity);
@ -1323,13 +1331,6 @@ public class GUIHandler implements IGuiHandler {
return null;
}
case ModBlocks.guiID_safe: {
if(entity instanceof TileEntitySafe) {
return new GUISafe(player.inventory, (TileEntitySafe) entity);
}
return null;
}
case ModBlocks.guiID_gascent: {
if(entity instanceof TileEntityMachineGasCent) {
return new GUIMachineGasCent(player.inventory, (TileEntityMachineGasCent) entity);
@ -1547,13 +1548,6 @@ public class GUIHandler implements IGuiHandler {
return null;
}
case ModBlocks.guiID_crate_tungsten: {
if(entity instanceof TileEntityCrateTungsten) {
return new GUICrateTungsten(player.inventory, (TileEntityCrateTungsten) entity);
}
return null;
}
case ModBlocks.guiID_chekhov: {
if(entity instanceof TileEntityTurretChekhov) {
return new GUITurretChekhov(player.inventory, (TileEntityTurretChekhov) entity);

View File

@ -63,10 +63,10 @@ public class MultiblockHandler {
public static final int[] pumpjackDimensionEast = new int[] { 0, 6, 4, 0, 1, 1 };
public static final int[] pumpjackDimensionSouth = new int[] { 1, 1, 4, 0, 0, 6 };
public static final int[] pumpjackDimensionWest = new int[] { 6, 0, 4, 0, 1, 1 };
public static final int[] turbofanDimensionNorth = new int[] { 1, 1, 2, 0, 4, 4 };
public static final int[] turbofanDimensionEast = new int[] { 4, 4, 2, 0, 1, 1 };
public static final int[] turbofanDimensionSouth = new int[] { 1, 1, 2, 0, 4, 4 };
public static final int[] turbofanDimensionWest = new int[] { 4, 4, 2, 0, 1, 1 };
public static final int[] turbofanDimensionNorth = new int[] { 1, 1, 2, 0, 3, 3 };
public static final int[] turbofanDimensionEast = new int[] { 3, 3, 2, 0, 1, 1 };
public static final int[] turbofanDimensionSouth = new int[] { 1, 1, 2, 0, 3, 3 };
public static final int[] turbofanDimensionWest = new int[] { 3, 3, 2, 0, 1, 1 };
public static final int[] AMSLimiterDimensionNorth = new int[] { 0, 0, 5, 0, 2, 2 };
public static final int[] AMSLimiterDimensionEast = new int[] { 2, 2, 5, 0, 0, 0 };
public static final int[] AMSLimiterDimensionSouth = new int[] { 0, 0, 5, 0, 2, 2 };

View File

@ -97,7 +97,7 @@ public abstract class ToolAbility {
int meta = world.getBlockMetadata(x, y, z);
int refMeta = world.getBlockMetadata(refX, refY, refZ);
if(b != ref)
if(!isSameBlock(b, ref))
return;
if(meta != refMeta)
@ -122,6 +122,14 @@ public abstract class ToolAbility {
}
}
}
private boolean isSameBlock(Block b1, Block b2) {
if(b1 == b2) return true;
if((b1 == Blocks.redstone_ore && b2 == Blocks.lit_redstone_ore) || (b1 == Blocks.lit_redstone_ore && b2 == Blocks.redstone_ore)) return true;
return false;
}
@Override
public String getName() {

View File

@ -523,7 +523,6 @@ public class GunFatmanFactory {
.addAttrib(ExAttrib.NOPARTICLE)
.addAttrib(ExAttrib.NOSOUND)
.addAttrib(ExAttrib.NODROP)
.addAttrib(ExAttrib.NOHURT)
.overrideResolution(64);
exp.doExplosionA();
exp.doExplosionB(false);

View File

@ -10,6 +10,7 @@ import com.hbm.inventory.RecipesCommon.ComparableStack;
import com.hbm.inventory.gui.GUIMachineAssembler;
import com.hbm.inventory.recipes.AssemblerRecipes;
import com.hbm.items.ModItems;
import com.hbm.items.machine.ItemAssemblyTemplate;
import com.hbm.lib.RefStrings;
import codechicken.nei.NEIServerUtils;
@ -35,7 +36,7 @@ public class AssemblerRecipeHandler extends TemplateRecipeHandler {
input = new ArrayList();
ComparableStack comp = new ComparableStack(result);
ItemStack template = new ItemStack(ModItems.assembly_template, 1, AssemblerRecipes.recipeList.indexOf(comp));
ItemStack template = ItemAssemblyTemplate.writeType(new ItemStack(ModItems.assembly_template), comp);
for(int i = 0; i < Math.min(in.size(), 12); i++) {
input.add(new PositionedStack(in.get(i), 30 + (i % 4) * 18, 6 + (i / 4) * 18));

View File

@ -1,18 +1,27 @@
package com.hbm.handler.nei;
import static codechicken.lib.gui.GuiDraw.drawTexturedModalRect;
import java.awt.Rectangle;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import com.hbm.handler.nei.AnvilRecipeHandler.RecipeSet;
import com.hbm.inventory.gui.GUIMachineGasCent;
import com.hbm.inventory.recipes.GasCentrifugeRecipes;
import com.hbm.inventory.recipes.MachineRecipes;
import com.hbm.lib.RefStrings;
import codechicken.nei.NEIServerUtils;
import codechicken.nei.PositionedStack;
import codechicken.nei.recipe.TemplateRecipeHandler;
import codechicken.nei.recipe.TemplateRecipeHandler.RecipeTransferRect;
import codechicken.nei.recipe.TemplateRecipeHandler.RecipeTransferRectHandler;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.FontRenderer;
import net.minecraft.client.gui.inventory.GuiContainer;
import net.minecraft.item.ItemStack;
@ -22,16 +31,19 @@ public class GasCentrifugeRecipeHandler extends TemplateRecipeHandler {
public class SmeltingSet extends TemplateRecipeHandler.CachedRecipe {
PositionedStack input;
PositionedStack result1;
PositionedStack result2;
PositionedStack result3;
List<PositionedStack> output = new ArrayList();
boolean isHighSpeed;
int centNumber;
public SmeltingSet(ItemStack input, ItemStack result1, ItemStack result2, ItemStack result3) {
public SmeltingSet(ItemStack input, ItemStack[] results, boolean isHighSpeed, int centNumber) {
input.stackSize = 1;
this.input = new PositionedStack(input, 25, 35 - 11);
this.result1 = new PositionedStack(result1, 128, 26 - 11);
this.result2 = new PositionedStack(result2, 128, 44 - 11);
this.result3 = new PositionedStack(result3, 146, 35 - 11);
this.input = new PositionedStack(input, 52 - 5, 35 - 11);
this.isHighSpeed = isHighSpeed;
this.centNumber = centNumber;
for(byte i = 0; i < results.length; i++) {
this.output.add(new PositionedStack(results[i], i % 2 == 0 ? 134 - 5 : 152 - 5, i < 2 ? 26 - 11 : 44 - 11 ));
}
}
@Override
@ -43,14 +55,13 @@ public class GasCentrifugeRecipeHandler extends TemplateRecipeHandler {
public List<PositionedStack> getOtherStacks() {
List<PositionedStack> stacks = new ArrayList<PositionedStack>();
stacks.add(fuels.get((cycleticks / 48) % fuels.size()).stack);
stacks.add(result2);
stacks.add(result3);
stacks.addAll(output);
return stacks;
}
@Override
public PositionedStack getResult() {
return result1;
return output.get(0);
}
}
@ -70,12 +81,7 @@ public class GasCentrifugeRecipeHandler extends TemplateRecipeHandler {
@Override
public String getGuiTexture() {
return GUIMachineGasCent.texture.toString();
}
@Override
public Class<? extends GuiContainer> getGuiClass() {
return GUIMachineGasCent.class;
return RefStrings.MODID + ":textures/gui/nei/gui_nei_centrifuge_gas.png";
}
@Override
@ -93,7 +99,7 @@ public class GasCentrifugeRecipeHandler extends TemplateRecipeHandler {
if((outputId.equals("gascentprocessing")) && getClass() == GasCentrifugeRecipeHandler.class) {
Map<Object, Object[]> recipes = GasCentrifugeRecipes.getGasCentrifugeRecipes();
for(Map.Entry<Object, Object[]> recipe : recipes.entrySet()) {
this.arecipes.add(new SmeltingSet((ItemStack) recipe.getKey(), (ItemStack) recipe.getValue()[0], (ItemStack) recipe.getValue()[1], (ItemStack) recipe.getValue()[2]));
this.arecipes.add(new SmeltingSet((ItemStack) recipe.getKey(), (ItemStack[]) recipe.getValue()[0], (boolean) recipe.getValue()[1], (int) recipe.getValue()[2]));
}
} else {
super.loadCraftingRecipes(outputId, results);
@ -104,9 +110,9 @@ public class GasCentrifugeRecipeHandler extends TemplateRecipeHandler {
public void loadCraftingRecipes(ItemStack result) {
Map<Object, Object[]> recipes = GasCentrifugeRecipes.getGasCentrifugeRecipes();
for(Map.Entry<Object, Object[]> recipe : recipes.entrySet()) {
if(NEIServerUtils.areStacksSameType((ItemStack) recipe.getValue()[0], result) || NEIServerUtils.areStacksSameType((ItemStack) recipe.getValue()[1], result)
|| NEIServerUtils.areStacksSameType((ItemStack) recipe.getValue()[2], result))
this.arecipes.add(new SmeltingSet((ItemStack) recipe.getKey(), (ItemStack) recipe.getValue()[0], (ItemStack) recipe.getValue()[1], (ItemStack) recipe.getValue()[2]));
if(NEIServerUtils.areStacksSameType(((ItemStack[]) recipe.getValue()[0])[0], result) || NEIServerUtils.areStacksSameType(((ItemStack[]) recipe.getValue()[0])[1], result)
|| NEIServerUtils.areStacksSameType(((ItemStack[]) recipe.getValue()[0])[2], result) || NEIServerUtils.areStacksSameType(((ItemStack[]) recipe.getValue()[0])[3], result))
this.arecipes.add(new SmeltingSet((ItemStack) recipe.getKey(), (ItemStack[]) recipe.getValue()[0], (boolean) recipe.getValue()[1], (int) recipe.getValue()[2]));
}
}
@ -124,7 +130,7 @@ public class GasCentrifugeRecipeHandler extends TemplateRecipeHandler {
Map<Object, Object[]> recipes = GasCentrifugeRecipes.getGasCentrifugeRecipes();
for(Map.Entry<Object, Object[]> recipe : recipes.entrySet()) {
if(compareFluidStacks(ingredient, (ItemStack) recipe.getKey()))
this.arecipes.add(new SmeltingSet((ItemStack) recipe.getKey(), (ItemStack) recipe.getValue()[0], (ItemStack) recipe.getValue()[1], (ItemStack) recipe.getValue()[2]));
this.arecipes.add(new SmeltingSet((ItemStack) recipe.getKey(), (ItemStack[]) recipe.getValue()[0], (boolean) recipe.getValue()[1], (int) recipe.getValue()[2]));
}
}
@ -135,11 +141,42 @@ public class GasCentrifugeRecipeHandler extends TemplateRecipeHandler {
@Override
public void drawExtras(int recipe) {
drawProgressBar(3, 51 - 45, 176, 0, 16, 34, 480, 7);
drawProgressBar(69, 26, 208, 0, 33, 12, 200, 0);
SmeltingSet set = (SmeltingSet) this.arecipes.get(recipe);
drawProgressBar(79 - 5, 28 - 11, 208, 0, 44, 37, set.isHighSpeed ? 150 - 70 : 150, 0);
FontRenderer fontRenderer = Minecraft.getMinecraft().fontRenderer;
String centrifuges = set.centNumber + " G. Cents";
fontRenderer.drawString(centrifuges, (50 - fontRenderer.getStringWidth(centrifuges) / 2), 21 - 11, 65280);
}
public LinkedList<RecipeTransferRect> transferRectsRec = new LinkedList<RecipeTransferRect>();
public LinkedList<RecipeTransferRect> transferRectsGui = new LinkedList<RecipeTransferRect>();
public LinkedList<Class<? extends GuiContainer>> guiRec = new LinkedList<Class<? extends GuiContainer>>();
public LinkedList<Class<? extends GuiContainer>> guiGui = new LinkedList<Class<? extends GuiContainer>>();
@Override
public void loadTransferRects() {
transferRects.add(new RecipeTransferRect(new Rectangle(69, 26, 32, 12), "gascentprocessing"));
transferRectsGui = new LinkedList<RecipeTransferRect>();
guiGui = new LinkedList<Class<? extends GuiContainer>>();
transferRects.add(new RecipeTransferRect(new Rectangle(79 - 5, 26 - 11, 44, 40), "gascentprocessing"));
transferRectsGui.add(new RecipeTransferRect(new Rectangle(70 - 5, 36 - 11, 36, 12), "gascentprocessing"));
guiGui.add(GUIMachineGasCent.class);
RecipeTransferRectHandler.registerRectsToGuis(getRecipeTransferRectGuis(), transferRects);
RecipeTransferRectHandler.registerRectsToGuis(guiGui, transferRectsGui);
}
@Override
public void drawBackground(int recipe) {
super.drawBackground(recipe);
SmeltingSet set = (SmeltingSet) this.arecipes.get(recipe);
if(set.isHighSpeed)
drawTexturedModalRect(30 - 5, 35 - 11, 192, 0, 16, 16);
}
}

View File

@ -336,7 +336,7 @@ public class HazardRegistry {
HazardSystem.register(pile_rod_uranium, makeData(RADIATION, u * billet * 3));
HazardSystem.register(pile_rod_pu239, makeData(RADIATION, !GeneralConfig.enable528 ? purg * billet + pu239 * billet + u * billet : purg * billet + pu239 * billet + wst * billet));
HazardSystem.register(pile_rod_plutonium, makeData(RADIATION, !GeneralConfig.enable528 ? purg * billet * 3 : purg * billet * 2 + wst * billet));
HazardSystem.register(pile_rod_plutonium, makeData(RADIATION, !GeneralConfig.enable528 ? purg * billet * 2 + u * billet : purg * billet * 2 + wst * billet));
HazardSystem.register(pile_rod_source, makeData(RADIATION, rabe * billet * 3));
registerBreedingRodRadiation(BreedingRodType.TRITIUM, 0.001F);
@ -442,12 +442,7 @@ public class HazardRegistry {
HazardSystem.register(ModItems.crystal_trixite, makeData(RADIATION, trx * crystal));
//nuke parts
HazardSystem.register(gadget_explosive, makeData(EXPLOSIVE, 1F));
HazardSystem.register(gadget_explosive8, makeData(EXPLOSIVE, 8F));
HazardSystem.register(boy_propellant, makeData(EXPLOSIVE, 2F));
HazardSystem.register(boy_igniter, makeData(EXPLOSIVE, 1F));
HazardSystem.register(man_explosive, makeData(EXPLOSIVE, 2F));
HazardSystem.register(man_explosive8, makeData(EXPLOSIVE, 16F));
HazardSystem.register(gadget_core, makeData(RADIATION, pu239 * nugget * 10));
HazardSystem.register(boy_target, makeData(RADIATION, u235 * ingot * 2));

View File

@ -10,6 +10,7 @@ import static com.hbm.items.ModItems.*;
import static com.hbm.blocks.ModBlocks.*;
import static com.hbm.inventory.OreDictManager.DictFrame.*;
import com.hbm.blocks.ModBlocks;
import com.hbm.blocks.BlockEnums.EnumStoneType;
import com.hbm.config.GeneralConfig;
import com.hbm.hazard.HazardData;
@ -294,33 +295,33 @@ public class OreDictManager {
/*
* RADIOACTIVE
*/
U .rad(HazardRegistry.u) .nugget(nugget_uranium) .billet(billet_uranium) .ingot(ingot_uranium) .dust(powder_uranium) .block(block_uranium) .ore(ore_uranium, ore_uranium_scorched, ore_gneiss_uranium, ore_gneiss_uranium_scorched, ore_nether_uranium, ore_nether_uranium_scorched, ore_meteor_uranium) .oreNether(ore_nether_uranium, ore_nether_uranium_scorched);
U233 .rad(HazardRegistry.u233) .nugget(nugget_u233) .billet(billet_u233) .ingot(ingot_u233) .block(block_u233);
U235 .rad(HazardRegistry.u235) .nugget(nugget_u235) .billet(billet_u235) .ingot(ingot_u235) .block(block_u235);
U238 .rad(HazardRegistry.u238) .nugget(nugget_u238) .billet(billet_u238) .ingot(ingot_u238) .block(block_u238);
TH232 .rad(HazardRegistry.th232) .nugget(nugget_th232) .billet(billet_th232) .ingot(ingot_th232) .dust(powder_thorium) .block(block_thorium) .ore(ore_thorium, ore_meteor_thorium);
PU .rad(HazardRegistry.pu) .nugget(nugget_plutonium) .billet(billet_plutonium) .ingot(ingot_plutonium) .dust(powder_plutonium) .block(block_plutonium) .ore(ore_nether_plutonium) .oreNether(ore_nether_plutonium);
PURG .rad(HazardRegistry.purg) .nugget(nugget_pu_mix) .billet(billet_pu_mix) .ingot(ingot_pu_mix) .block(block_pu_mix);
PU238 .rad(HazardRegistry.pu238) .hot(3F) .nugget(nugget_pu238) .billet(billet_pu238) .ingot(ingot_pu238) .block(block_pu238);
PU239 .rad(HazardRegistry.pu239) .nugget(nugget_pu239) .billet(billet_pu239) .ingot(ingot_pu239) .block(block_pu239);
PU240 .rad(HazardRegistry.pu240) .nugget(nugget_pu240) .billet(billet_pu240) .ingot(ingot_pu240) .block(block_pu240);
PU241 .rad(HazardRegistry.pu241) .nugget(nugget_pu241) .billet(billet_pu241) .ingot(ingot_pu241); //.block(block_pu241);
AM241 .rad(HazardRegistry.am241) .nugget(nugget_am241) .billet(billet_am241) .ingot(ingot_am241);
AM242 .rad(HazardRegistry.am242) .nugget(nugget_am242) .billet(billet_am242) .ingot(ingot_am242);
AMRG .rad(HazardRegistry.amrg) .nugget(nugget_am_mix) .billet(billet_am_mix) .ingot(ingot_am_mix);
NP237 .rad(HazardRegistry.np237) .nugget(nugget_neptunium) .billet(billet_neptunium) .ingot(ingot_neptunium) .dust(powder_neptunium) .block(block_neptunium);
PO210 .rad(HazardRegistry.po210) .hot(3) .nugget(nugget_polonium) .billet(billet_polonium) .ingot(ingot_polonium) .dust(powder_polonium) .block(block_polonium);
TC99 .rad(HazardRegistry.tc99) .nugget(nugget_technetium) .billet(billet_technetium) .ingot(ingot_technetium);
RA226 .rad(HazardRegistry.ra226) .nugget(nugget_ra226) .billet(billet_ra226) .ingot(ingot_ra226) .dust(powder_ra226) .block(block_ra226);
AC227 .rad(HazardRegistry.ac227) .nugget(nugget_actinium) .billet(billet_actinium) .ingot(ingot_actinium) .dust(powder_actinium) .block(block_actinium) .dustSmall(powder_actinium_tiny);
CO60 .rad(HazardRegistry.co60) .hot(1) .nugget(nugget_co60) .billet(billet_co60) .ingot(ingot_co60) .dust(powder_co60);
AU198 .rad(HazardRegistry.au198) .hot(5) .nugget(nugget_au198) .billet(billet_au198) .ingot(ingot_au198) .dust(powder_au198);
PB209 .rad(HazardRegistry.pb209) .blinding(50F) .hot(7) .nugget(nugget_pb209) .billet(billet_pb209) .ingot(ingot_pb209);
SA326 .rad(HazardRegistry.sa326) .blinding(50F) .nugget(nugget_schrabidium) .billet(billet_schrabidium) .ingot(ingot_schrabidium) .dust(powder_schrabidium) .plate(plate_schrabidium) .block(block_schrabidium) .ore(ore_schrabidium, ore_gneiss_schrabidium, ore_nether_schrabidium) .oreNether(ore_nether_schrabidium);
SA327 .rad(HazardRegistry.sa327) .blinding(50F) .nugget(nugget_solinium) .billet(billet_solinium) .ingot(ingot_solinium) .block(block_solinium);
SBD .rad(HazardRegistry.sb) .blinding(50F) .ingot(ingot_schrabidate) .dust(powder_schrabidate) .block(block_schrabidate);
SRN .rad(HazardRegistry.sr) .blinding(50F) .ingot(ingot_schraranium) .block(block_schraranium);
GH336 .rad(HazardRegistry.gh336) .nugget(nugget_gh336) .billet(billet_gh336) .ingot(ingot_gh336);
U .rad(HazardRegistry.u) .nugget(nugget_uranium) .billet(billet_uranium) .ingot(ingot_uranium) .dust(powder_uranium) .block(block_uranium) .ore(ore_uranium, ore_uranium_scorched, ore_gneiss_uranium, ore_gneiss_uranium_scorched, ore_nether_uranium, ore_nether_uranium_scorched, ore_meteor_uranium) .oreNether(ore_nether_uranium, ore_nether_uranium_scorched);
U233 .rad(HazardRegistry.u233) .nugget(nugget_u233) .billet(billet_u233) .ingot(ingot_u233) .block(block_u233);
U235 .rad(HazardRegistry.u235) .nugget(nugget_u235) .billet(billet_u235) .ingot(ingot_u235) .block(block_u235);
U238 .rad(HazardRegistry.u238) .nugget(nugget_u238) .billet(billet_u238) .ingot(ingot_u238) .block(block_u238);
TH232 .rad(HazardRegistry.th232) .nugget(nugget_th232) .billet(billet_th232) .ingot(ingot_th232) .dust(powder_thorium) .block(block_thorium) .ore(ore_thorium, ore_meteor_thorium);
PU .rad(HazardRegistry.pu) .nugget(nugget_plutonium) .billet(billet_plutonium) .ingot(ingot_plutonium) .dust(powder_plutonium) .block(block_plutonium) .ore(ore_nether_plutonium) .oreNether(ore_nether_plutonium);
PURG .rad(HazardRegistry.purg) .nugget(nugget_pu_mix) .billet(billet_pu_mix) .ingot(ingot_pu_mix) .block(block_pu_mix);
PU238 .rad(HazardRegistry.pu238) .hot(3F) .nugget(nugget_pu238) .billet(billet_pu238) .ingot(ingot_pu238) .block(block_pu238);
PU239 .rad(HazardRegistry.pu239) .nugget(nugget_pu239) .billet(billet_pu239) .ingot(ingot_pu239) .block(block_pu239);
PU240 .rad(HazardRegistry.pu240) .nugget(nugget_pu240) .billet(billet_pu240) .ingot(ingot_pu240) .block(block_pu240);
PU241 .rad(HazardRegistry.pu241) .nugget(nugget_pu241) .billet(billet_pu241) .ingot(ingot_pu241); //.block(block_pu241);
AM241 .rad(HazardRegistry.am241) .nugget(nugget_am241) .billet(billet_am241) .ingot(ingot_am241);
AM242 .rad(HazardRegistry.am242) .nugget(nugget_am242) .billet(billet_am242) .ingot(ingot_am242);
AMRG .rad(HazardRegistry.amrg) .nugget(nugget_am_mix) .billet(billet_am_mix) .ingot(ingot_am_mix);
NP237 .rad(HazardRegistry.np237) .nugget(nugget_neptunium) .billet(billet_neptunium) .ingot(ingot_neptunium) .dust(powder_neptunium) .block(block_neptunium);
PO210 .rad(HazardRegistry.po210) .hot(3) .nugget(nugget_polonium) .billet(billet_polonium) .ingot(ingot_polonium) .dust(powder_polonium) .block(block_polonium);
TC99 .rad(HazardRegistry.tc99) .nugget(nugget_technetium) .billet(billet_technetium) .ingot(ingot_technetium);
RA226 .rad(HazardRegistry.ra226) .nugget(nugget_ra226) .billet(billet_ra226) .ingot(ingot_ra226) .dust(powder_ra226) .block(block_ra226);
AC227 .rad(HazardRegistry.ac227) .nugget(nugget_actinium) .billet(billet_actinium) .ingot(ingot_actinium) .dust(powder_actinium) .block(block_actinium) .dustSmall(powder_actinium_tiny);
CO60 .rad(HazardRegistry.co60) .hot(1) .nugget(nugget_co60) .billet(billet_co60) .ingot(ingot_co60) .dust(powder_co60);
AU198 .rad(HazardRegistry.au198) .hot(5) .nugget(nugget_au198) .billet(billet_au198) .ingot(ingot_au198) .dust(powder_au198);
PB209 .rad(HazardRegistry.pb209) .blinding(50F) .hot(7) .nugget(nugget_pb209) .billet(billet_pb209) .ingot(ingot_pb209);
SA326 .rad(HazardRegistry.sa326) .blinding(50F) .nugget(nugget_schrabidium) .billet(billet_schrabidium) .ingot(ingot_schrabidium) .dust(powder_schrabidium) .plate(plate_schrabidium) .block(block_schrabidium) .ore(ore_schrabidium, ore_gneiss_schrabidium, ore_nether_schrabidium) .oreNether(ore_nether_schrabidium);
SA327 .rad(HazardRegistry.sa327) .blinding(50F) .nugget(nugget_solinium) .billet(billet_solinium) .ingot(ingot_solinium) .block(block_solinium);
SBD .rad(HazardRegistry.sb) .blinding(50F) .ingot(ingot_schrabidate) .dust(powder_schrabidate) .block(block_schrabidate);
SRN .rad(HazardRegistry.sr) .blinding(50F) .ingot(ingot_schraranium) .block(block_schraranium);
GH336 .rad(HazardRegistry.gh336) .nugget(nugget_gh336) .billet(billet_gh336) .ingot(ingot_gh336);
/*
* STABLE
@ -427,7 +428,8 @@ public class OreDictManager {
ANY_SMOKELESS .dust(ballistite, cordite);
ANY_PLASTICEXPLOSIVE .ingot(ingot_semtex, ingot_c4);
ANY_HIGHEXPLOSIVE .ingot(ball_tnt);
ANY_CONCRETE .any(concrete, concrete_smooth, concrete_colored, concrete_asbestos, ducrete, ducrete_smooth);
ANY_CONCRETE .any(concrete, concrete_smooth, concrete_asbestos, ducrete, ducrete_smooth);
for(int i = 0; i < 16; i++) { ANY_CONCRETE.any(new ItemStack(ModBlocks.concrete_colored, 1, i)); }
ANY_COKE .gem(fromAll(coke, EnumCokeType.class));
ANY_BISMOID .ingot(ingot_bismuth, ingot_arsenic).nugget(nugget_bismuth, nugget_arsenic).block(block_bismuth);

View File

@ -1,11 +1,15 @@
package com.hbm.inventory;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.inventory.Slot;
public class SlotPattern extends Slot {
protected boolean canHover = true;
public SlotPattern(IInventory inv, int index, int x, int y) {
super(inv, index, x, y);
}
@ -19,4 +23,15 @@ public class SlotPattern extends Slot {
public int getSlotStackLimit() {
return 1;
}
public SlotPattern disableHover() {
this.canHover = false;
return this;
}
@Override
@SideOnly(Side.CLIENT)
public boolean func_111238_b() {
return canHover;
}
}

View File

@ -0,0 +1,65 @@
package com.hbm.inventory.container;
import com.hbm.inventory.SlotUpgrade;
import com.hbm.tileentity.machine.TileEntityMachineAssemfac;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.Container;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
public class ContainerAssemfac extends Container {
private TileEntityMachineAssemfac assemfac;
public ContainerAssemfac(InventoryPlayer playerInv, TileEntityMachineAssemfac tile) {
assemfac = tile;
//Battery
this.addSlotToContainer(new Slot(tile, 0, 234, 218));
for(int i = 0; i < 4; i++) {
this.addSlotToContainer(new SlotUpgrade(tile, 1 + i, 5, 172 + i * 18));
}
for(int i = 0; i < 4; i++) {
for(int j = 0; j < 2; j++) {
int offX = 7 + j * 118;
int offY = 14 + i * 38;
int startIndex = 5 + (i * 2 + j) * 14;
for(int k = 0; k < 2; k++) {
for(int l = 0; l < 6; l++) {
this.addSlotToContainer(new Slot(tile, startIndex + k * 6 + l, offX + l * 16, offY + k * 16));
}
}
}
}
for(int i = 0; i < 8; i++) {
this.addSlotToContainer(new Slot(tile, 17 + i * 14, 106, 13 + i * 19 - (i % 2 == 1 ? 1 : 0)));
this.addSlotToContainer(new Slot(tile, 18 + i * 14, 234, 13 + i * 16));
}
for(int i = 0; i < 3; i++) {
for(int j = 0; j < 9; j++) {
this.addSlotToContainer(new Slot(playerInv, j + i * 9 + 9, 34 + j * 18, 174 + i * 18));
}
}
for(int i = 0; i < 9; i++) {
this.addSlotToContainer(new Slot(playerInv, i, 34 + i * 18, 232));
}
}
@Override
public boolean canInteractWith(EntityPlayer player) {
return assemfac.isUseableByPlayer(player);
}
@Override
public ItemStack transferStackInSlot(EntityPlayer player, int index) {
return null;
}
}

View File

@ -0,0 +1,109 @@
package com.hbm.inventory.container;
import com.hbm.inventory.SlotPattern;
import com.hbm.tileentity.machine.TileEntityMachineAutocrafter;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.Container;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
public class ContainerAutocrafter extends Container {
private TileEntityMachineAutocrafter autocrafter;
public ContainerAutocrafter(InventoryPlayer invPlayer, TileEntityMachineAutocrafter tedf) {
autocrafter = tedf;
/* TEMPLATE */
for(int i = 0; i < 3; i++) {
for(int j = 0; j < 3; j++) {
this.addSlotToContainer(new SlotPattern(tedf, j + i * 3, 44 + j * 18, 22 + i * 18));
}
}
this.addSlotToContainer(new SlotPattern(tedf, 9, 116, 40));
/* RECIPE */
for(int i = 0; i < 3; i++) {
for(int j = 0; j < 3; j++) {
this.addSlotToContainer(new Slot(tedf, j + i * 3 + 10, 44 + j * 18, 86 + i * 18));
}
}
this.addSlotToContainer(new Slot(tedf, 19, 116, 104));
//Battery
this.addSlotToContainer(new Slot(tedf, 20, 17, 99));
for(int i = 0; i < 3; i++) {
for(int j = 0; j < 9; j++) {
this.addSlotToContainer(new Slot(invPlayer, j + i * 9 + 9, 8 + j * 18, 158 + i * 18));
}
}
for(int i = 0; i < 9; i++) {
this.addSlotToContainer(new Slot(invPlayer, i, 8 + i * 18, 216));
}
}
@Override
public ItemStack slotClick(int index, int button, int mode, EntityPlayer player) {
//L/R: 0
//M3: 3
//SHIFT: 1
//DRAG: 5
if(index < 0 || index > 9) {
return super.slotClick(index, button, mode, player);
}
Slot slot = this.getSlot(index);
ItemStack ret = null;
ItemStack held = player.inventory.getItemStack();
if(slot.getHasStack())
ret = slot.getStack().copy();
//Don't allow any interaction for the template's output
if(index == 9) {
if(button == 1 && mode == 0 && slot.getHasStack()) {
autocrafter.nextTemplate();
this.detectAndSendChanges();
}
return ret;
}
if(button == 1 && mode == 0 && slot.getHasStack()) {
autocrafter.nextMode(index);
return ret;
} else {
slot.putStack(held != null ? held.copy() : null);
if(slot.getHasStack()) {
slot.getStack().stackSize = 1;
}
slot.onSlotChanged();
autocrafter.initPattern(slot.getStack(), index);
autocrafter.updateTemplateGrid();
return ret;
}
}
@Override
public ItemStack transferStackInSlot(EntityPlayer player, int index) {
return null;
}
@Override
public boolean canInteractWith(EntityPlayer player) {
return autocrafter.isUseableByPlayer(player);
}
}

View File

@ -0,0 +1,137 @@
package com.hbm.inventory.container;
import com.hbm.inventory.SlotUpgrade;
import com.hbm.items.ModItems;
import com.hbm.tileentity.network.TileEntityCraneExtractor;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.Container;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
public class ContainerCraneExtractor extends Container {
protected TileEntityCraneExtractor extractor;
public ContainerCraneExtractor(InventoryPlayer invPlayer, TileEntityCraneExtractor inserter) {
this.extractor = inserter;
//filter
for(int i = 0; i < 3; i++) {
for(int j = 0; j < 3; j++) {
this.addSlotToContainer(new Slot(inserter, j + i * 3, 71 + j * 18, 17 + i * 18));
}
}
//buffer
for(int i = 0; i < 3; i++) {
for(int j = 0; j < 3; j++) {
this.addSlotToContainer(new Slot(inserter, 9 + j + i * 3, 8 + j * 18, 17 + i * 18));
}
}
//upgrades
this.addSlotToContainer(new SlotUpgrade(inserter, 18, 152, 23));
this.addSlotToContainer(new SlotUpgrade(inserter, 19, 152, 47));
for(int i = 0; i < 3; i++) {
for(int j = 0; j < 9; j++) {
this.addSlotToContainer(new Slot(invPlayer, j + i * 9 + 9, 8 + j * 18, 103 + i * 18));
}
}
for(int i = 0; i < 9; i++) {
this.addSlotToContainer(new Slot(invPlayer, i, 8 + i * 18, 161));
}
}
@Override
public ItemStack transferStackInSlot(EntityPlayer player, int slot) {
ItemStack var3 = null;
Slot var4 = (Slot) this.inventorySlots.get(slot);
if(var4 != null && var4.getHasStack()) {
ItemStack var5 = var4.getStack();
var3 = var5.copy();
if(slot < 9) { //filters
return null;
}
if(slot <= extractor.getSizeInventory() - 1) {
if(!this.mergeItemStack(var5, extractor.getSizeInventory(), this.inventorySlots.size(), true)) {
return null;
}
} else {
if(var3.getItem() == ModItems.upgrade_5g) {
if(!this.mergeItemStack(var5, 18, 19, false))
return null;
} else if(var3.getItem() == ModItems.upgrade_crystallizer) {
if(!this.mergeItemStack(var5, 19, 20, false))
return null;
} else if(!this.mergeItemStack(var5, 9, extractor.getSizeInventory(), false)) {
return null;
}
return null;
}
if(var5.stackSize == 0) {
var4.putStack((ItemStack) null);
} else {
var4.onSlotChanged();
}
var4.onPickupFromSlot(player, var5);
}
return var3;
}
@Override
public boolean canInteractWith(EntityPlayer player) {
return extractor.isUseableByPlayer(player);
}
@Override
public ItemStack slotClick(int index, int button, int mode, EntityPlayer player) {
//L/R: 0
//M3: 3
//SHIFT: 1
//DRAG: 5
//System.out.println("Mode " + mode);
//System.out.println("Slot " + index);
if(index < 0 || index > 8) {
return super.slotClick(index, button, mode, player);
}
Slot slot = this.getSlot(index);
ItemStack ret = null;
ItemStack held = player.inventory.getItemStack();
if(slot.getHasStack())
ret = slot.getStack().copy();
if(button == 1 && mode == 0 && slot.getHasStack()) {
extractor.nextMode(index);
return ret;
} else {
slot.putStack(held != null ? held.copy() : null);
if(slot.getHasStack()) {
slot.getStack().stackSize = 1;
}
slot.onSlotChanged();
extractor.matcher.initPatternStandard(extractor.getWorldObj(), slot.getStack(), index);
return ret;
}
}
}

View File

@ -0,0 +1,68 @@
package com.hbm.inventory.container;
import com.hbm.tileentity.network.TileEntityCraneInserter;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.Container;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
public class ContainerCraneInserter extends Container {
protected TileEntityCraneInserter inserter;
public ContainerCraneInserter(InventoryPlayer invPlayer, TileEntityCraneInserter inserter) {
this.inserter = inserter;
for(int i = 0; i < 3; i++) {
for(int j = 0; j < 7; j++) {
this.addSlotToContainer(new Slot(inserter, j + i * 7, 26 + j * 18, 17 + i * 18));
}
}
for(int i = 0; i < 3; i++) {
for(int j = 0; j < 9; j++) {
this.addSlotToContainer(new Slot(invPlayer, j + i * 9 + 9, 8 + j * 18, 103 + i * 18));
}
}
for(int i = 0; i < 9; i++) {
this.addSlotToContainer(new Slot(invPlayer, i, 8 + i * 18, 161));
}
}
@Override
public ItemStack transferStackInSlot(EntityPlayer p_82846_1_, int par2) {
ItemStack var3 = null;
Slot var4 = (Slot) this.inventorySlots.get(par2);
if(var4 != null && var4.getHasStack()) {
ItemStack var5 = var4.getStack();
var3 = var5.copy();
if(par2 <= inserter.getSizeInventory() - 1) {
if(!this.mergeItemStack(var5, inserter.getSizeInventory(), this.inventorySlots.size(), true)) {
return null;
}
} else if(!this.mergeItemStack(var5, 0, inserter.getSizeInventory(), false)) {
return null;
}
if(var5.stackSize == 0) {
var4.putStack((ItemStack) null);
} else {
var4.onSlotChanged();
}
var4.onPickupFromSlot(p_82846_1_, var5);
}
return var3;
}
@Override
public boolean canInteractWith(EntityPlayer player) {
return inserter.isUseableByPlayer(player);
}
}

View File

@ -0,0 +1,57 @@
package com.hbm.inventory.container;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.Container;
import net.minecraft.inventory.IInventory;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
public class ContainerCrateBase extends Container {
protected IInventory crate;
public ContainerCrateBase(IInventory tedf) {
crate = tedf;
crate.openInventory();
}
@Override
public ItemStack transferStackInSlot(EntityPlayer p_82846_1_, int par2) {
ItemStack var3 = null;
Slot var4 = (Slot) this.inventorySlots.get(par2);
if(var4 != null && var4.getHasStack()) {
ItemStack var5 = var4.getStack();
var3 = var5.copy();
if(par2 <= crate.getSizeInventory() - 1) {
if(!this.mergeItemStack(var5, crate.getSizeInventory(), this.inventorySlots.size(), true)) {
return null;
}
} else if(!this.mergeItemStack(var5, 0, crate.getSizeInventory(), false)) {
return null;
}
if(var5.stackSize == 0) {
var4.putStack((ItemStack) null);
} else {
var4.onSlotChanged();
}
var4.onPickupFromSlot(p_82846_1_, var5);
}
return var3;
}
@Override
public boolean canInteractWith(EntityPlayer player) {
return crate.isUseableByPlayer(player);
}
@Override
public void onContainerClosed(EntityPlayer p_75134_1_) {
super.onContainerClosed(p_75134_1_);
this.crate.closeInventory();
}
}

View File

@ -0,0 +1,28 @@
package com.hbm.inventory.container;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.inventory.Slot;
public class ContainerCrateDesh extends ContainerCrateBase {
public ContainerCrateDesh(InventoryPlayer invPlayer, IInventory tedf) {
super(tedf);
for(int i = 0; i < 8; i++) {
for(int j = 0; j < 13; j++) {
this.addSlotToContainer(new Slot(tedf, j + i * 13, 8 + j * 18, 18 + i * 18));
}
}
for(int i = 0; i < 3; i++) {
for(int j = 0; j < 9; j++) {
this.addSlotToContainer(new Slot(invPlayer, j + i * 9 + 9, 44 + j * 18, 174 + i * 18));
}
}
for(int i = 0; i < 9; i++) {
this.addSlotToContainer(new Slot(invPlayer, i, 44 + i * 18, 232));
}
}
}

View File

@ -2,19 +2,14 @@ package com.hbm.inventory.container;
import com.hbm.tileentity.machine.storage.TileEntityCrateIron;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.Container;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
//@invtweaks.api.container.ChestContainer
public class ContainerCrateIron extends Container {
private TileEntityCrateIron diFurnace;
public class ContainerCrateIron extends ContainerCrateBase {
public ContainerCrateIron(InventoryPlayer invPlayer, TileEntityCrateIron tedf) {
diFurnace = tedf;
super(tedf);
for(int i = 0; i < 4; i++)
{
@ -37,44 +32,4 @@ public class ContainerCrateIron extends Container {
this.addSlotToContainer(new Slot(invPlayer, i, 8 + i * 18, 142 + 20));
}
}
@Override
public ItemStack transferStackInSlot(EntityPlayer p_82846_1_, int par2)
{
ItemStack var3 = null;
Slot var4 = (Slot) this.inventorySlots.get(par2);
if (var4 != null && var4.getHasStack())
{
ItemStack var5 = var4.getStack();
var3 = var5.copy();
if (par2 <= diFurnace.getSizeInventory() - 1) {
if (!this.mergeItemStack(var5, diFurnace.getSizeInventory(), this.inventorySlots.size(), true))
{
return null;
}
}
else if (!this.mergeItemStack(var5, 0, diFurnace.getSizeInventory(), false))
{
return null;
}
if (var5.stackSize == 0)
{
var4.putStack((ItemStack) null);
}
else
{
var4.onSlotChanged();
}
}
return var3;
}
@Override
public boolean canInteractWith(EntityPlayer player) {
return diFurnace.isUseableByPlayer(player);
}
}

Some files were not shown because too many files have changed in this diff Show More