mirror of
https://github.com/Ellpeck/ActuallyAdditions.git
synced 2024-11-26 08:48:34 +01:00
More work on the miner. Now has a "Only Mine Ores"-mode
This commit is contained in:
parent
408d084ac5
commit
508b488405
6 changed files with 88 additions and 33 deletions
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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]));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue