diff --git a/src/main/java/api/hbm/block/IPileNeutronReceiver.java b/src/main/java/api/hbm/block/IPileNeutronReceiver.java new file mode 100644 index 000000000..caac67bcc --- /dev/null +++ b/src/main/java/api/hbm/block/IPileNeutronReceiver.java @@ -0,0 +1,6 @@ +package api.hbm.block; + +public interface IPileNeutronReceiver { + + public void receiveNeutrons(int n); +} diff --git a/src/main/java/com/hbm/blocks/machine/pile/BlockGraphiteDrilled.java b/src/main/java/com/hbm/blocks/machine/pile/BlockGraphiteDrilled.java index 1692516b5..0ed93bb18 100644 --- a/src/main/java/com/hbm/blocks/machine/pile/BlockGraphiteDrilled.java +++ b/src/main/java/com/hbm/blocks/machine/pile/BlockGraphiteDrilled.java @@ -1,18 +1,11 @@ package com.hbm.blocks.machine.pile; import com.hbm.blocks.ModBlocks; -import com.hbm.blocks.generic.BlockFlammable; import com.hbm.items.ModItems; -import com.hbm.lib.RefStrings; -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.player.EntityPlayer; import net.minecraft.item.Item; -import net.minecraft.util.IIcon; import net.minecraft.world.World; public class BlockGraphiteDrilled extends BlockGraphiteDrilledBase { diff --git a/src/main/java/com/hbm/blocks/machine/pile/BlockGraphiteDrilledBase.java b/src/main/java/com/hbm/blocks/machine/pile/BlockGraphiteDrilledBase.java index 248413153..a1775faa0 100644 --- a/src/main/java/com/hbm/blocks/machine/pile/BlockGraphiteDrilledBase.java +++ b/src/main/java/com/hbm/blocks/machine/pile/BlockGraphiteDrilledBase.java @@ -1,7 +1,6 @@ package com.hbm.blocks.machine.pile; import java.util.ArrayList; -import java.util.List; import java.util.Random; import com.hbm.blocks.ModBlocks; @@ -11,7 +10,6 @@ import com.hbm.lib.RefStrings; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.item.EntityItem; import net.minecraft.item.Item; diff --git a/src/main/java/com/hbm/blocks/machine/pile/BlockGraphiteFuel.java b/src/main/java/com/hbm/blocks/machine/pile/BlockGraphiteFuel.java index 161c138be..c94cd7b3d 100644 --- a/src/main/java/com/hbm/blocks/machine/pile/BlockGraphiteFuel.java +++ b/src/main/java/com/hbm/blocks/machine/pile/BlockGraphiteFuel.java @@ -2,15 +2,18 @@ package com.hbm.blocks.machine.pile; import java.util.ArrayList; +import com.hbm.blocks.ModBlocks; import com.hbm.items.ModItems; import com.hbm.tileentity.machine.pile.TileEntityPileFuel; -import net.minecraft.block.material.Material; +import api.hbm.block.IToolable; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; -public class BlockGraphiteFuel extends BlockGraphiteDrilledTE { +public class BlockGraphiteFuel extends BlockGraphiteDrilledTE implements IToolable { @Override public TileEntity createNewTileEntity(World world, int mets) { @@ -23,4 +26,23 @@ public class BlockGraphiteFuel extends BlockGraphiteDrilledTE { drops.add(new ItemStack(ModItems.pile_rod_uranium)); //TODO: adjust for core progress return drops; } + + @Override + public boolean onScrew(World world, EntityPlayer player, int x, int y, int z, int side, float fX, float fY, float fZ, ToolType tool) { + + if(tool != ToolType.SCREWDRIVER) + return false; + + if(!world.isRemote) { + + int meta = world.getBlockMetadata(x, y, z) & 3; + + if(side == meta * 2 || side == meta * 2 + 1) { + world.setBlock(x, y, z, ModBlocks.block_graphite_drilled, meta, 3); + this.ejectItem(world, x, y, z, ForgeDirection.getOrientation(side), new ItemStack(ModItems.pile_rod_uranium)); + } + } + + return true; + } } diff --git a/src/main/java/com/hbm/blocks/machine/pile/BlockGraphiteRod.java b/src/main/java/com/hbm/blocks/machine/pile/BlockGraphiteRod.java index e1d9d6051..80197764d 100644 --- a/src/main/java/com/hbm/blocks/machine/pile/BlockGraphiteRod.java +++ b/src/main/java/com/hbm/blocks/machine/pile/BlockGraphiteRod.java @@ -9,7 +9,6 @@ import com.hbm.lib.RefStrings; import api.hbm.block.IToolable; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; @@ -66,17 +65,18 @@ public class BlockGraphiteRod extends BlockGraphiteDrilledBase implements IToola for(int i = -1; i <= 1; i += 1) { - int ix = x + dir.offsetX * i; + //why is XZ switched? i don't know, man + int ix = x + dir.offsetZ * i; int iy = y + dir.offsetY * i; - int iz = z + dir.offsetZ * i; + int iz = z + dir.offsetX * i; while(world.getBlock(ix, iy, iz) == this && world.getBlockMetadata(ix, iy, iz) == oldMeta) { world.setBlockMetadataWithNotify(ix, iy, iz, newMeta, 3); - ix += dir.offsetX * i; + ix += dir.offsetZ * i; iy += dir.offsetY * i; - iz += dir.offsetZ * i; + iz += dir.offsetX * i; } } diff --git a/src/main/java/com/hbm/blocks/machine/pile/BlockGraphiteSource.java b/src/main/java/com/hbm/blocks/machine/pile/BlockGraphiteSource.java index dc2219886..fb7b6d232 100644 --- a/src/main/java/com/hbm/blocks/machine/pile/BlockGraphiteSource.java +++ b/src/main/java/com/hbm/blocks/machine/pile/BlockGraphiteSource.java @@ -2,14 +2,18 @@ package com.hbm.blocks.machine.pile; import java.util.ArrayList; +import com.hbm.blocks.ModBlocks; import com.hbm.items.ModItems; import com.hbm.tileentity.machine.pile.TileEntityPileSource; +import api.hbm.block.IToolable; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; -public class BlockGraphiteSource extends BlockGraphiteDrilledTE { +public class BlockGraphiteSource extends BlockGraphiteDrilledTE implements IToolable { @Override public TileEntity createNewTileEntity(World world, int mets) { @@ -22,4 +26,23 @@ public class BlockGraphiteSource extends BlockGraphiteDrilledTE { drops.add(new ItemStack(ModItems.pile_rod_source)); return drops; } + + @Override + public boolean onScrew(World world, EntityPlayer player, int x, int y, int z, int side, float fX, float fY, float fZ, ToolType tool) { + + if(tool != ToolType.SCREWDRIVER) + return false; + + if(!world.isRemote) { + + int meta = world.getBlockMetadata(x, y, z) & 3; + + if(side == meta * 2 || side == meta * 2 + 1) { + world.setBlock(x, y, z, ModBlocks.block_graphite_drilled, meta, 3); + this.ejectItem(world, x, y, z, ForgeDirection.getOrientation(side), new ItemStack(ModItems.pile_rod_source)); + } + } + + return true; + } } diff --git a/src/main/java/com/hbm/handler/EntityEffectHandler.java b/src/main/java/com/hbm/handler/EntityEffectHandler.java index 1eff9cd7c..953f203d9 100644 --- a/src/main/java/com/hbm/handler/EntityEffectHandler.java +++ b/src/main/java/com/hbm/handler/EntityEffectHandler.java @@ -4,6 +4,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Random; +import com.hbm.config.GeneralConfig; import com.hbm.config.RadiationConfig; import com.hbm.explosion.ExplosionNukeSmall; import com.hbm.extprop.HbmLivingProps; @@ -67,6 +68,10 @@ public class EntityEffectHandler { handleContagion(entity); handleRadiation(entity); handleDigamma(entity); + + if(GeneralConfig.enable528 && entity instanceof EntityLivingBase && !entity.isImmuneToFire() && entity.worldObj.provider.isHellWorld) { + entity.setFire(5); + } } private static void handleContamination(EntityLivingBase entity) { diff --git a/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileBase.java b/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileBase.java index 1ba0c0841..6b4212116 100644 --- a/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileBase.java +++ b/src/main/java/com/hbm/tileentity/machine/pile/TileEntityPileBase.java @@ -1,7 +1,62 @@ package com.hbm.tileentity.machine.pile; +import java.util.Random; + +import com.hbm.blocks.ModBlocks; + +import api.hbm.block.IPileNeutronReceiver; +import net.minecraft.block.Block; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.Vec3; public abstract class TileEntityPileBase extends TileEntity { + @Override + public void updateEntity() { + + } + + protected void castRay(int flux, int range) { + + Random rand = worldObj.rand; + Vec3 vec = Vec3.createVectorHelper(1, 0, 0); + vec.rotateAroundZ((float)(rand.nextDouble() * Math.PI * 2D)); + vec.rotateAroundY((float)(rand.nextDouble() * Math.PI * 2D)); + + int prevX = xCoord; + int prevY = yCoord; + int prevZ = zCoord; + + for(float i = 1; i <= range; i += 0.5F) { + + int x = (int)Math.floor(xCoord + 0.5 + vec.xCoord * i); + int y = (int)Math.floor(yCoord + 0.5 + vec.yCoord * i); + int z = (int)Math.floor(zCoord + 0.5 + vec.zCoord * i); + + if(x == prevX && y == prevY && z == prevZ) + continue; + + prevX = x; + prevY = y; + prevZ = z; + + Block b = worldObj.getBlock(x, y, z); + + if(b == ModBlocks.block_boron) + return; + + int meta = worldObj.getBlockMetadata(x, y, z); + + if(b == ModBlocks.block_graphite_rod && (meta & 4) == 0) + return; + + TileEntity te = worldObj.getTileEntity(x, y, z); + + if(te instanceof IPileNeutronReceiver) { + IPileNeutronReceiver rec = (IPileNeutronReceiver) te; + rec.receiveNeutrons(flux); + return; + } + } + } }