diff --git a/src/main/java/mekanism/client/gui/GuiOredictionificatorFilter.java b/src/main/java/mekanism/client/gui/GuiOredictionificatorFilter.java index 710fe0ab7..580b9e748 100644 --- a/src/main/java/mekanism/client/gui/GuiOredictionificatorFilter.java +++ b/src/main/java/mekanism/client/gui/GuiOredictionificatorFilter.java @@ -50,6 +50,8 @@ public class GuiOredictionificatorFilter extends GuiMekanism origFilter = tileEntity.filters.get(index); filter = ((OredictionificatorFilter)tentity.filters.get(index)).clone(); + + updateRenderStack(); } public GuiOredictionificatorFilter(EntityPlayer player, TileEntityOredictionificator tentity) diff --git a/src/main/java/mekanism/common/LaserManager.java b/src/main/java/mekanism/common/LaserManager.java new file mode 100644 index 000000000..6d44963fc --- /dev/null +++ b/src/main/java/mekanism/common/LaserManager.java @@ -0,0 +1,96 @@ +package mekanism.common; + +import java.util.List; + +import mekanism.api.Coord4D; +import mekanism.api.MekanismConfig.general; +import mekanism.api.Pos3D; +import mekanism.api.lasers.ILaserReceptor; + +import net.minecraft.block.Block; +import net.minecraft.entity.Entity; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.util.Vec3; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +public class LaserManager +{ + public static MovingObjectPosition fireLaser(TileEntity from, ForgeDirection direction, double energy, World world) + { + return fireLaser(new Pos3D(from).centre().translate(direction, 0.501), direction, energy, world); + } + + public static MovingObjectPosition fireLaser(Pos3D from, ForgeDirection direction, double energy, World world) + { + Pos3D to = from.clone().translate(direction, general.laserRange - 0.002); + + MovingObjectPosition mop = world.rayTraceBlocks(Vec3.createVectorHelper(from.xPos, from.yPos, from.zPos), Vec3.createVectorHelper(to.xPos, to.yPos, to.zPos)); + + if(mop != null) + { + to = new Pos3D(mop.hitVec); + Coord4D toCoord = new Coord4D(mop.blockX, mop.blockY, mop.blockZ); + TileEntity tile = toCoord.getTileEntity(world); + + if(tile instanceof ILaserReceptor) + { + if(!(((ILaserReceptor)tile).canLasersDig())) + { + ((ILaserReceptor)tile).receiveLaserEnergy(energy, ForgeDirection.getOrientation(mop.sideHit)); + } + } + } + + from.translateExcludingSide(direction, -0.1); + to.translateExcludingSide(direction, 0.1); + + for(Entity e : (List)world.getEntitiesWithinAABB(Entity.class, Pos3D.getAABB(from, to))) + { + if(!e.isImmuneToFire()) e.setFire((int)(energy / 1000)); + } + + return mop; + } + + public static List breakBlock(Coord4D blockCoord, boolean dropAtBlock, World world) + { + List ret = null; + Block blockHit = blockCoord.getBlock(world); + + if(dropAtBlock) + { + blockHit.dropBlockAsItem(world, blockCoord.xCoord, blockCoord.yCoord, blockCoord.zCoord, blockCoord.getMetadata(world), 0); + } + else { + ret = blockHit.getDrops(world, blockCoord.xCoord, blockCoord.yCoord, blockCoord.zCoord, blockCoord.getMetadata(world), 0); + } + + blockHit.breakBlock(world, blockCoord.xCoord, blockCoord.yCoord, blockCoord.zCoord, blockHit, blockCoord.getMetadata(world)); + world.setBlockToAir(blockCoord.xCoord, blockCoord.yCoord, blockCoord.zCoord); + world.playAuxSFX(2001, blockCoord.xCoord, blockCoord.yCoord, blockCoord.zCoord, Block.getIdFromBlock(blockHit)); + + return ret; + } + + public static void fireLaserClient(TileEntity from, ForgeDirection direction, double energy, World world) + { + fireLaserClient(new Pos3D(from).centre().translate(direction, 0.501), direction, energy, world); + } + + public static void fireLaserClient(Pos3D from, ForgeDirection direction, double energy, World world) + { + Pos3D to = from.clone().translate(direction, general.laserRange - 0.002); + MovingObjectPosition mop = world.rayTraceBlocks(Vec3.createVectorHelper(from.xPos, from.yPos, from.zPos), Vec3.createVectorHelper(to.xPos, to.yPos, to.zPos)); + + if(mop != null) + { + to = new Pos3D(mop.hitVec); + } + + from.translate(direction, -0.501); + Mekanism.proxy.renderLaser(world, from, to, direction, energy); + } +} \ No newline at end of file diff --git a/src/main/java/mekanism/common/tile/TileEntityOredictionificator.java b/src/main/java/mekanism/common/tile/TileEntityOredictionificator.java index 98277387c..e96d3a1eb 100644 --- a/src/main/java/mekanism/common/tile/TileEntityOredictionificator.java +++ b/src/main/java/mekanism/common/tile/TileEntityOredictionificator.java @@ -350,9 +350,9 @@ public class TileEntityOredictionificator extends TileEntityContainerBlock imple } @Override - public boolean equals(Object filter) + public boolean equals(Object obj) { - return filter instanceof OredictionificatorFilter && ((OredictionificatorFilter)filter).filter.equals(filter); + return obj instanceof OredictionificatorFilter && ((OredictionificatorFilter)obj).filter.equals(filter); } } }