From 508b4884057b443d43287af07ef46f7cc51bfc80 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Wed, 9 Dec 2015 18:47:42 +0100 Subject: [PATCH] More work on the miner. Now has a "Only Mine Ores"-mode --- .../actuallyadditions/blocks/BlockMiner.java | 17 ++++-- .../network/PacketHandler.java | 2 +- ...Reconstructor.java => PacketParticle.java} | 43 +++++++++------ .../tile/TileEntityAtomicReconstructor.java | 4 +- .../tile/TileEntityMiner.java | 54 +++++++++++++++---- .../assets/actuallyadditions/lang/en_US.lang | 1 + 6 files changed, 88 insertions(+), 33 deletions(-) rename src/main/java/ellpeck/actuallyadditions/network/{PacketAtomicReconstructor.java => PacketParticle.java} (68%) diff --git a/src/main/java/ellpeck/actuallyadditions/blocks/BlockMiner.java b/src/main/java/ellpeck/actuallyadditions/blocks/BlockMiner.java index e1b79e006..771068be5 100644 --- a/src/main/java/ellpeck/actuallyadditions/blocks/BlockMiner.java +++ b/src/main/java/ellpeck/actuallyadditions/blocks/BlockMiner.java @@ -81,10 +81,21 @@ public class BlockMiner extends BlockContainerBase{ if(!world.isRemote){ TileEntity tile = world.getTileEntity(x, y, z); if(tile != null && tile instanceof TileEntityMiner){ - player.addChatComponentMessage(new ChatComponentText(((TileEntityMiner)tile).storage.getEnergyStored()+"/"+((TileEntityMiner)tile).storage.getMaxEnergyStored()+" RF")); - player.addChatComponentMessage(new ChatComponentText("Mining at Y "+((TileEntityMiner)tile).layerAt+".")); + if(player.isSneaking()){ + player.addChatComponentMessage(new ChatComponentText(((TileEntityMiner)tile).storage.getEnergyStored()+"/"+((TileEntityMiner)tile).storage.getMaxEnergyStored()+" RF")); + player.addChatComponentMessage(new ChatComponentText("Mining at Y = "+((TileEntityMiner)tile).layerAt+".")); + } + else{ + if(!((TileEntityMiner)tile).onlyMineOres){ + player.addChatComponentMessage(new ChatComponentText("Now only mining Ores")); + ((TileEntityMiner)tile).onlyMineOres = true; + } + else{ + player.addChatComponentMessage(new ChatComponentText("Now mining everything")); + ((TileEntityMiner)tile).onlyMineOres = false; + } + } } - return true; } return true; } diff --git a/src/main/java/ellpeck/actuallyadditions/network/PacketHandler.java b/src/main/java/ellpeck/actuallyadditions/network/PacketHandler.java index e7243005f..e3a2d7d34 100644 --- a/src/main/java/ellpeck/actuallyadditions/network/PacketHandler.java +++ b/src/main/java/ellpeck/actuallyadditions/network/PacketHandler.java @@ -28,7 +28,7 @@ public class PacketHandler{ theNetwork.registerMessage(PacketGuiButton.Handler.class, PacketGuiButton.class, 0, Side.SERVER); theNetwork.registerMessage(PacketGuiNumber.Handler.class, PacketGuiNumber.class, 1, Side.SERVER); theNetwork.registerMessage(PacketGuiString.Handler.class, PacketGuiString.class, 2, Side.SERVER); - theNetwork.registerMessage(PacketAtomicReconstructor.Handler.class, PacketAtomicReconstructor.class, 3, Side.CLIENT); + theNetwork.registerMessage(PacketParticle.Handler.class, PacketParticle.class, 3, Side.CLIENT); theNetwork.registerMessage(PacketBookletStandButton.Handler.class, PacketBookletStandButton.class, 4, Side.SERVER); } } diff --git a/src/main/java/ellpeck/actuallyadditions/network/PacketAtomicReconstructor.java b/src/main/java/ellpeck/actuallyadditions/network/PacketParticle.java similarity index 68% rename from src/main/java/ellpeck/actuallyadditions/network/PacketAtomicReconstructor.java rename to src/main/java/ellpeck/actuallyadditions/network/PacketParticle.java index aecf73274..b71dfb254 100644 --- a/src/main/java/ellpeck/actuallyadditions/network/PacketAtomicReconstructor.java +++ b/src/main/java/ellpeck/actuallyadditions/network/PacketParticle.java @@ -15,15 +15,13 @@ import cpw.mods.fml.common.network.simpleimpl.IMessageHandler; import cpw.mods.fml.common.network.simpleimpl.MessageContext; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import ellpeck.actuallyadditions.items.lens.Lens; -import ellpeck.actuallyadditions.items.lens.Lenses; import io.netty.buffer.ByteBuf; import net.minecraft.client.Minecraft; import net.minecraft.client.particle.EntityReddustFX; import net.minecraft.util.Vec3; import net.minecraft.world.World; -public class PacketAtomicReconstructor implements IMessage{ +public class PacketParticle implements IMessage{ private int startX; private int startY; @@ -31,21 +29,25 @@ public class PacketAtomicReconstructor implements IMessage{ private int endX; private int endY; private int endZ; - private int lensTypeOrdinal; + private float[] color; + private int particleAmount; + private float particleSize; @SuppressWarnings("unused") - public PacketAtomicReconstructor(){ + public PacketParticle(){ } - public PacketAtomicReconstructor(int startX, int startY, int startZ, int endX, int endY, int endZ, Lens type){ + public PacketParticle(int startX, int startY, int startZ, int endX, int endY, int endZ, float[] color, int particleAmount, float particleSize){ this.startX = startX; this.startY = startY; this.startZ = startZ; this.endX = endX; this.endY = endY; this.endZ = endZ; - this.lensTypeOrdinal = Lenses.allLenses.indexOf(type); + this.color = color; + this.particleAmount = particleAmount; + this.particleSize = particleSize; } @Override @@ -56,7 +58,13 @@ public class PacketAtomicReconstructor implements IMessage{ this.endX = buf.readInt(); this.endY = buf.readInt(); this.endZ = buf.readInt(); - this.lensTypeOrdinal = buf.readInt(); + this.particleAmount = buf.readInt(); + this.particleSize = buf.readFloat(); + + this.color = new float[3]; + for(int i = 0; i < this.color.length; i++){ + this.color[i] = buf.readFloat(); + } } @Override @@ -67,14 +75,19 @@ public class PacketAtomicReconstructor implements IMessage{ buf.writeInt(this.endX); buf.writeInt(this.endY); buf.writeInt(this.endZ); - buf.writeInt(this.lensTypeOrdinal); + buf.writeInt(this.particleAmount); + buf.writeFloat(this.particleSize); + + for(float aColor : this.color){ + buf.writeFloat(aColor); + } } - public static class Handler implements IMessageHandler{ + public static class Handler implements IMessageHandler{ @Override @SideOnly(Side.CLIENT) - public IMessage onMessage(PacketAtomicReconstructor message, MessageContext ctx){ + public IMessage onMessage(PacketParticle message, MessageContext ctx){ World world = Minecraft.getMinecraft().theWorld; if(Minecraft.getMinecraft().thePlayer.getDistance(message.startX, message.startY, message.startZ) <= 64){ @@ -83,11 +96,9 @@ public class PacketAtomicReconstructor implements IMessage{ int difZ = message.startZ-message.endZ; double distance = Vec3.createVectorHelper(message.startX, message.startY, message.startZ).distanceTo(Vec3.createVectorHelper(message.endX, message.endY, message.endZ)); - for(int times = 0; times < 5; times++){ - for(double i = 0; i <= 1; i += 1/(distance*8)){ - Lens type = Lenses.allLenses.get(message.lensTypeOrdinal); - float[] color = type.getColor(); - Minecraft.getMinecraft().effectRenderer.addEffect(new EntityReddustFX(world, (difX*i)+message.endX+0.5, (difY*i)+message.endY+0.5, (difZ*i)+message.endZ+0.5, 2F, color[0], color[1], color[2])); + for(int times = 0; times < message.particleAmount/2; times++){ + for(double i = 0; i <= 1; i += 1/(distance*message.particleAmount)){ + Minecraft.getMinecraft().effectRenderer.addEffect(new EntityReddustFX(world, (difX*i)+message.endX+0.5, (difY*i)+message.endY+0.5, (difZ*i)+message.endZ+0.5, message.particleSize, message.color[0], message.color[1], message.color[2])); } } } diff --git a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityAtomicReconstructor.java b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityAtomicReconstructor.java index 7f4502572..40ef08a9a 100644 --- a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityAtomicReconstructor.java +++ b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityAtomicReconstructor.java @@ -16,8 +16,8 @@ import cpw.mods.fml.common.network.NetworkRegistry; import ellpeck.actuallyadditions.items.lens.ItemLens; import ellpeck.actuallyadditions.items.lens.Lens; import ellpeck.actuallyadditions.items.lens.Lenses; -import ellpeck.actuallyadditions.network.PacketAtomicReconstructor; import ellpeck.actuallyadditions.network.PacketHandler; +import ellpeck.actuallyadditions.network.PacketParticle; import ellpeck.actuallyadditions.util.WorldPos; import ellpeck.actuallyadditions.util.WorldUtil; import net.minecraft.item.ItemStack; @@ -81,7 +81,7 @@ public class TileEntityAtomicReconstructor extends TileEntityInventoryBase imple } private void shootLaser(int endX, int endY, int endZ, Lens currentLens){ - PacketHandler.theNetwork.sendToAllAround(new PacketAtomicReconstructor(xCoord, yCoord, zCoord, endX, endY, endZ, currentLens), new NetworkRegistry.TargetPoint(worldObj.provider.dimensionId, xCoord, yCoord, zCoord, 64)); + PacketHandler.theNetwork.sendToAllAround(new PacketParticle(xCoord, yCoord, zCoord, endX, endY, endZ, currentLens.getColor(), 8, 2F), new NetworkRegistry.TargetPoint(worldObj.provider.dimensionId, xCoord, yCoord, zCoord, 64)); } @Override diff --git a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityMiner.java b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityMiner.java index ce7b6e14b..de91d5c61 100644 --- a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityMiner.java +++ b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityMiner.java @@ -12,6 +12,9 @@ package ellpeck.actuallyadditions.tile; import cofh.api.energy.EnergyStorage; import cofh.api.energy.IEnergyReceiver; +import cpw.mods.fml.common.network.NetworkRegistry; +import ellpeck.actuallyadditions.network.PacketHandler; +import ellpeck.actuallyadditions.network.PacketParticle; import ellpeck.actuallyadditions.util.WorldUtil; import net.minecraft.block.Block; import net.minecraft.inventory.IInventory; @@ -19,6 +22,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.oredict.OreDictionary; import java.util.ArrayList; @@ -28,6 +32,7 @@ public class TileEntityMiner extends TileEntityBase implements IEnergyReceiver{ public static final int ENERGY_USE_PER_BLOCK = 300; public int layerAt; + public boolean onlyMineOres; @Override public void updateEntity(){ @@ -47,7 +52,9 @@ public class TileEntityMiner extends TileEntityBase implements IEnergyReceiver{ private boolean mine(int range){ TileEntity tileAbove = worldObj.getTileEntity(xCoord, yCoord+1, zCoord); + boolean shouldContinueMining = true; boolean mined = false; + for(int anX = -range; anX <= range; anX++){ for(int aZ = -range; aZ <= range; aZ++){ if(this.storage.getEnergyStored() >= ENERGY_USE_PER_BLOCK){ @@ -58,28 +65,53 @@ public class TileEntityMiner extends TileEntityBase implements IEnergyReceiver{ Block block = this.worldObj.getBlock(x, y, z); int meta = this.worldObj.getBlockMetadata(x, y, z); if(block != null && !block.isAir(this.worldObj, x, y, z)){ - if(block.getHarvestLevel(meta) <= 3F && block.getHarvestLevel(meta) >= 0F){ + if(block.getHarvestLevel(meta) <= 3F && block.getHarvestLevel(meta) >= 0F && this.isMinable(block, meta)){ ArrayList drops = new ArrayList(); drops.addAll(block.getDrops(worldObj, x, y, z, meta, 0)); - if(tileAbove instanceof IInventory){ - if(WorldUtil.addToInventory((IInventory)tileAbove, drops, ForgeDirection.DOWN, false)){ - worldObj.playAuxSFX(2001, x, y, z, Block.getIdFromBlock(block)+(meta << 12)); - worldObj.setBlockToAir(x, y, z); + if(tileAbove instanceof IInventory && WorldUtil.addToInventory((IInventory)tileAbove, drops, ForgeDirection.DOWN, false)){ + worldObj.playAuxSFX(2001, x, y, z, Block.getIdFromBlock(block)+(meta << 12)); + worldObj.setBlockToAir(x, y, z); - WorldUtil.addToInventory((IInventory)tileAbove, drops, ForgeDirection.DOWN, true); - tileAbove.markDirty(); + WorldUtil.addToInventory((IInventory)tileAbove, drops, ForgeDirection.DOWN, true); + tileAbove.markDirty(); - this.storage.extractEnergy(ENERGY_USE_PER_BLOCK, false); - mined = true; - } + this.storage.extractEnergy(ENERGY_USE_PER_BLOCK, false); + mined = true; + } + else{ + shouldContinueMining = false; } } } } } } - return mined; + if(mined){ + this.shootParticles(); + } + + return shouldContinueMining; + } + + private boolean isMinable(Block block, int meta){ + if(!this.onlyMineOres){ + return true; + } + else{ + int[] ids = OreDictionary.getOreIDs(new ItemStack(block, 1, meta)); + for(int id : ids){ + String name = OreDictionary.getOreName(id); + if(name.substring(0, 3).equals("ore")){ + return true; + } + } + return false; + } + } + + private void shootParticles(){ + PacketHandler.theNetwork.sendToAllAround(new PacketParticle(xCoord, yCoord, zCoord, xCoord, this.layerAt, zCoord, new float[]{62F/255F, 163F/255F, 74F/255F}, 5, 2.5F), new NetworkRegistry.TargetPoint(worldObj.provider.dimensionId, xCoord, yCoord, zCoord, 128)); } @Override diff --git a/src/main/resources/assets/actuallyadditions/lang/en_US.lang b/src/main/resources/assets/actuallyadditions/lang/en_US.lang index 531119783..e300c7a97 100644 --- a/src/main/resources/assets/actuallyadditions/lang/en_US.lang +++ b/src/main/resources/assets/actuallyadditions/lang/en_US.lang @@ -126,6 +126,7 @@ tile.actuallyadditions.blockCrystalGreen.name=Emeradic Crystal Block tile.actuallyadditions.blockCrystalBlack.name=Void Crystal Block tile.actuallyadditions.blockCrystalWhite.name=Enori Crystal Block tile.actuallyadditions.blockBookStand.name=Manual Stand +tile.actuallyadditions.blockMiner.name=Vertical Digger #ESD tile.actuallyadditions.blockInputter.name=ESD