More work on the miner. Now has a "Only Mine Ores"-mode

This commit is contained in:
Ellpeck 2015-12-09 18:47:42 +01:00
parent 408d084ac5
commit 508b488405
6 changed files with 88 additions and 33 deletions

View file

@ -81,10 +81,21 @@ public class BlockMiner extends BlockContainerBase{
if(!world.isRemote){ if(!world.isRemote){
TileEntity tile = world.getTileEntity(x, y, z); TileEntity tile = world.getTileEntity(x, y, z);
if(tile != null && tile instanceof TileEntityMiner){ if(tile != null && tile instanceof TileEntityMiner){
if(player.isSneaking()){
player.addChatComponentMessage(new ChatComponentText(((TileEntityMiner)tile).storage.getEnergyStored()+"/"+((TileEntityMiner)tile).storage.getMaxEnergyStored()+" RF")); player.addChatComponentMessage(new ChatComponentText(((TileEntityMiner)tile).storage.getEnergyStored()+"/"+((TileEntityMiner)tile).storage.getMaxEnergyStored()+" RF"));
player.addChatComponentMessage(new ChatComponentText("Mining at Y "+((TileEntityMiner)tile).layerAt+".")); 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; return true;
} }

View file

@ -28,7 +28,7 @@ public class PacketHandler{
theNetwork.registerMessage(PacketGuiButton.Handler.class, PacketGuiButton.class, 0, Side.SERVER); theNetwork.registerMessage(PacketGuiButton.Handler.class, PacketGuiButton.class, 0, Side.SERVER);
theNetwork.registerMessage(PacketGuiNumber.Handler.class, PacketGuiNumber.class, 1, Side.SERVER); theNetwork.registerMessage(PacketGuiNumber.Handler.class, PacketGuiNumber.class, 1, Side.SERVER);
theNetwork.registerMessage(PacketGuiString.Handler.class, PacketGuiString.class, 2, 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); theNetwork.registerMessage(PacketBookletStandButton.Handler.class, PacketBookletStandButton.class, 4, Side.SERVER);
} }
} }

View file

@ -15,15 +15,13 @@ import cpw.mods.fml.common.network.simpleimpl.IMessageHandler;
import cpw.mods.fml.common.network.simpleimpl.MessageContext; import cpw.mods.fml.common.network.simpleimpl.MessageContext;
import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly; import cpw.mods.fml.relauncher.SideOnly;
import ellpeck.actuallyadditions.items.lens.Lens;
import ellpeck.actuallyadditions.items.lens.Lenses;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.particle.EntityReddustFX; import net.minecraft.client.particle.EntityReddustFX;
import net.minecraft.util.Vec3; import net.minecraft.util.Vec3;
import net.minecraft.world.World; import net.minecraft.world.World;
public class PacketAtomicReconstructor implements IMessage{ public class PacketParticle implements IMessage{
private int startX; private int startX;
private int startY; private int startY;
@ -31,21 +29,25 @@ public class PacketAtomicReconstructor implements IMessage{
private int endX; private int endX;
private int endY; private int endY;
private int endZ; private int endZ;
private int lensTypeOrdinal; private float[] color;
private int particleAmount;
private float particleSize;
@SuppressWarnings("unused") @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.startX = startX;
this.startY = startY; this.startY = startY;
this.startZ = startZ; this.startZ = startZ;
this.endX = endX; this.endX = endX;
this.endY = endY; this.endY = endY;
this.endZ = endZ; this.endZ = endZ;
this.lensTypeOrdinal = Lenses.allLenses.indexOf(type); this.color = color;
this.particleAmount = particleAmount;
this.particleSize = particleSize;
} }
@Override @Override
@ -56,7 +58,13 @@ public class PacketAtomicReconstructor implements IMessage{
this.endX = buf.readInt(); this.endX = buf.readInt();
this.endY = buf.readInt(); this.endY = buf.readInt();
this.endZ = 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 @Override
@ -67,14 +75,19 @@ public class PacketAtomicReconstructor implements IMessage{
buf.writeInt(this.endX); buf.writeInt(this.endX);
buf.writeInt(this.endY); buf.writeInt(this.endY);
buf.writeInt(this.endZ); 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<PacketAtomicReconstructor, IMessage>{ public static class Handler implements IMessageHandler<PacketParticle, IMessage>{
@Override @Override
@SideOnly(Side.CLIENT) @SideOnly(Side.CLIENT)
public IMessage onMessage(PacketAtomicReconstructor message, MessageContext ctx){ public IMessage onMessage(PacketParticle message, MessageContext ctx){
World world = Minecraft.getMinecraft().theWorld; World world = Minecraft.getMinecraft().theWorld;
if(Minecraft.getMinecraft().thePlayer.getDistance(message.startX, message.startY, message.startZ) <= 64){ 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; 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)); 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(int times = 0; times < message.particleAmount/2; times++){
for(double i = 0; i <= 1; i += 1/(distance*8)){ for(double i = 0; i <= 1; i += 1/(distance*message.particleAmount)){
Lens type = Lenses.allLenses.get(message.lensTypeOrdinal); 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]));
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]));
} }
} }
} }

View file

@ -16,8 +16,8 @@ import cpw.mods.fml.common.network.NetworkRegistry;
import ellpeck.actuallyadditions.items.lens.ItemLens; import ellpeck.actuallyadditions.items.lens.ItemLens;
import ellpeck.actuallyadditions.items.lens.Lens; import ellpeck.actuallyadditions.items.lens.Lens;
import ellpeck.actuallyadditions.items.lens.Lenses; import ellpeck.actuallyadditions.items.lens.Lenses;
import ellpeck.actuallyadditions.network.PacketAtomicReconstructor;
import ellpeck.actuallyadditions.network.PacketHandler; import ellpeck.actuallyadditions.network.PacketHandler;
import ellpeck.actuallyadditions.network.PacketParticle;
import ellpeck.actuallyadditions.util.WorldPos; import ellpeck.actuallyadditions.util.WorldPos;
import ellpeck.actuallyadditions.util.WorldUtil; import ellpeck.actuallyadditions.util.WorldUtil;
import net.minecraft.item.ItemStack; 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){ 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 @Override

View file

@ -12,6 +12,9 @@ package ellpeck.actuallyadditions.tile;
import cofh.api.energy.EnergyStorage; import cofh.api.energy.EnergyStorage;
import cofh.api.energy.IEnergyReceiver; 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 ellpeck.actuallyadditions.util.WorldUtil;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.inventory.IInventory; import net.minecraft.inventory.IInventory;
@ -19,6 +22,7 @@ import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.common.util.ForgeDirection;
import net.minecraftforge.oredict.OreDictionary;
import java.util.ArrayList; 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 static final int ENERGY_USE_PER_BLOCK = 300;
public int layerAt; public int layerAt;
public boolean onlyMineOres;
@Override @Override
public void updateEntity(){ public void updateEntity(){
@ -47,7 +52,9 @@ public class TileEntityMiner extends TileEntityBase implements IEnergyReceiver{
private boolean mine(int range){ private boolean mine(int range){
TileEntity tileAbove = worldObj.getTileEntity(xCoord, yCoord+1, zCoord); TileEntity tileAbove = worldObj.getTileEntity(xCoord, yCoord+1, zCoord);
boolean shouldContinueMining = true;
boolean mined = false; boolean mined = false;
for(int anX = -range; anX <= range; anX++){ for(int anX = -range; anX <= range; anX++){
for(int aZ = -range; aZ <= range; aZ++){ for(int aZ = -range; aZ <= range; aZ++){
if(this.storage.getEnergyStored() >= ENERGY_USE_PER_BLOCK){ if(this.storage.getEnergyStored() >= ENERGY_USE_PER_BLOCK){
@ -58,12 +65,11 @@ public class TileEntityMiner extends TileEntityBase implements IEnergyReceiver{
Block block = this.worldObj.getBlock(x, y, z); Block block = this.worldObj.getBlock(x, y, z);
int meta = this.worldObj.getBlockMetadata(x, y, z); int meta = this.worldObj.getBlockMetadata(x, y, z);
if(block != null && !block.isAir(this.worldObj, 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<ItemStack> drops = new ArrayList<ItemStack>(); ArrayList<ItemStack> drops = new ArrayList<ItemStack>();
drops.addAll(block.getDrops(worldObj, x, y, z, meta, 0)); drops.addAll(block.getDrops(worldObj, x, y, z, meta, 0));
if(tileAbove instanceof IInventory){ if(tileAbove instanceof IInventory && WorldUtil.addToInventory((IInventory)tileAbove, drops, ForgeDirection.DOWN, false)){
if(WorldUtil.addToInventory((IInventory)tileAbove, drops, ForgeDirection.DOWN, false)){
worldObj.playAuxSFX(2001, x, y, z, Block.getIdFromBlock(block)+(meta << 12)); worldObj.playAuxSFX(2001, x, y, z, Block.getIdFromBlock(block)+(meta << 12));
worldObj.setBlockToAir(x, y, z); worldObj.setBlockToAir(x, y, z);
@ -73,13 +79,39 @@ public class TileEntityMiner extends TileEntityBase implements IEnergyReceiver{
this.storage.extractEnergy(ENERGY_USE_PER_BLOCK, false); this.storage.extractEnergy(ENERGY_USE_PER_BLOCK, false);
mined = true; 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 @Override

View file

@ -126,6 +126,7 @@ tile.actuallyadditions.blockCrystalGreen.name=Emeradic Crystal Block
tile.actuallyadditions.blockCrystalBlack.name=Void Crystal Block tile.actuallyadditions.blockCrystalBlack.name=Void Crystal Block
tile.actuallyadditions.blockCrystalWhite.name=Enori Crystal Block tile.actuallyadditions.blockCrystalWhite.name=Enori Crystal Block
tile.actuallyadditions.blockBookStand.name=Manual Stand tile.actuallyadditions.blockBookStand.name=Manual Stand
tile.actuallyadditions.blockMiner.name=Vertical Digger
#ESD #ESD
tile.actuallyadditions.blockInputter.name=ESD tile.actuallyadditions.blockInputter.name=ESD