Added WorldPositions to not have to use ChunkCoordinates + a World anymore

This commit is contained in:
Ellpeck 2015-07-07 11:51:05 +02:00
parent f483197a69
commit ff5f49c99c
12 changed files with 148 additions and 132 deletions

View file

@ -2,10 +2,7 @@ package ellpeck.actuallyadditions.blocks;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import ellpeck.actuallyadditions.util.BlockUtil;
import ellpeck.actuallyadditions.util.INameableItem;
import ellpeck.actuallyadditions.util.ModUtil;
import ellpeck.actuallyadditions.util.WorldUtil;
import ellpeck.actuallyadditions.util.*;
import net.minecraft.block.Block;
import net.minecraft.block.BlockPistonBase;
import net.minecraft.block.material.Material;
@ -15,7 +12,6 @@ import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.EnumRarity;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ChunkCoordinates;
import net.minecraft.util.IIcon;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
@ -74,7 +70,7 @@ public class BlockLampPowerer extends Block implements INameableItem{
private void updateLamp(World world, int x, int y, int z){
if(!world.isRemote){
ChunkCoordinates coords = WorldUtil.getCoordsFromSide(ForgeDirection.getOrientation(world.getBlockMetadata(x, y, z)), x, y, z);
WorldPos coords = WorldUtil.getCoordsFromSide(ForgeDirection.getOrientation(world.getBlockMetadata(x, y, z)), x, y, z);
}
}

View file

@ -61,8 +61,8 @@ public class BlockPhantomface extends BlockContainerBase implements INameableIte
TileEntityPhantomface phantom = (TileEntityPhantomface)tile;
player.addChatComponentMessage(new ChatComponentText(StatCollector.translateToLocal("tooltip."+ModUtil.MOD_ID_LOWER+".blockPhantomRange.desc") + ": " + phantom.range));
if(phantom.hasBoundTile()){
if(phantom.isBoundTileInRage()) player.addChatComponentMessage(new ChatComponentText(StatCollector.translateToLocalFormatted("tooltip."+ModUtil.MOD_ID_LOWER+".phantom.connectedBlock.desc", phantom.boundPosition.posX, phantom.boundPosition.posY, phantom.boundPosition.posZ)));
else player.addChatComponentMessage(new ChatComponentText(StatCollector.translateToLocalFormatted("tooltip."+ModUtil.MOD_ID_LOWER+".phantom.connectedNoRange.desc", phantom.boundPosition.posX, phantom.boundPosition.posY, phantom.boundPosition.posZ)));
if(phantom.isBoundTileInRage()) player.addChatComponentMessage(new ChatComponentText(StatCollector.translateToLocalFormatted("tooltip."+ModUtil.MOD_ID_LOWER+".phantom.connectedBlock.desc", phantom.boundPosition.getX(), phantom.boundPosition.getY(), phantom.boundPosition.getZ())));
else player.addChatComponentMessage(new ChatComponentText(StatCollector.translateToLocalFormatted("tooltip."+ModUtil.MOD_ID_LOWER+".phantom.connectedNoRange.desc", phantom.boundPosition.getX(), phantom.boundPosition.getY(), phantom.boundPosition.getZ())));
}
else player.addChatComponentMessage(new ChatComponentText(StatCollector.translateToLocal("tooltip."+ModUtil.MOD_ID_LOWER+".phantom.notConnected.desc")));
}
@ -72,8 +72,8 @@ public class BlockPhantomface extends BlockContainerBase implements INameableIte
TileEntityPhantomPlacer phantom = (TileEntityPhantomPlacer)tile;
player.addChatComponentMessage(new ChatComponentText(StatCollector.translateToLocal("tooltip."+ModUtil.MOD_ID_LOWER+".blockPhantomRange.desc") + ": " + phantom.range));
if(phantom.hasBoundPosition()){
if(phantom.isBoundPositionInRange()) player.addChatComponentMessage(new ChatComponentText(StatCollector.translateToLocalFormatted("tooltip."+ModUtil.MOD_ID_LOWER+".phantom.connectedBlock.desc", phantom.boundPosition.posX, phantom.boundPosition.posY, phantom.boundPosition.posZ)));
else player.addChatComponentMessage(new ChatComponentText(StatCollector.translateToLocalFormatted("tooltip."+ModUtil.MOD_ID_LOWER+".phantom.connectedNoRange.desc", phantom.boundPosition.posX, phantom.boundPosition.posY, phantom.boundPosition.posZ)));
if(phantom.isBoundPositionInRange()) player.addChatComponentMessage(new ChatComponentText(StatCollector.translateToLocalFormatted("tooltip."+ModUtil.MOD_ID_LOWER+".phantom.connectedBlock.desc", phantom.boundPosition.getX(), phantom.boundPosition.getY(), phantom.boundPosition.getZ())));
else player.addChatComponentMessage(new ChatComponentText(StatCollector.translateToLocalFormatted("tooltip."+ModUtil.MOD_ID_LOWER+".phantom.connectedNoRange.desc", phantom.boundPosition.getX(), phantom.boundPosition.getY(), phantom.boundPosition.getZ())));
}
else player.addChatComponentMessage(new ChatComponentText(StatCollector.translateToLocal("tooltip."+ModUtil.MOD_ID_LOWER+".phantom.notConnected.desc")));
}

View file

@ -15,7 +15,6 @@ import net.minecraft.item.EnumAction;
import net.minecraft.item.EnumRarity;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ChunkCoordinates;
import net.minecraft.util.IIcon;
import net.minecraft.util.StatCollector;
import net.minecraft.world.World;
@ -54,18 +53,18 @@ public class ItemLeafBlower extends Item implements INameableItem{
for(int reachY = (this.isAdvanced ? -range : -rangeUp); reachY < (this.isAdvanced ? range+1 : rangeUp+1); reachY++){
Block block = world.getBlock(x+reachX, y+reachY, z+reachZ);
if(block != null && (block instanceof BlockBush || (this.isAdvanced && block instanceof BlockLeavesBase))){
ChunkCoordinates theCoord = new ChunkCoordinates(x+reachX, y+reachY, z+reachZ);
Block theBlock = world.getBlock(theCoord.posX, theCoord.posY, theCoord.posZ);
WorldPos theCoord = new WorldPos(x+reachX, y+reachY, z+reachZ);
Block theBlock = world.getBlock(theCoord.getX(), theCoord.getY(), theCoord.getZ());
ArrayList<ItemStack> drops = new ArrayList<ItemStack>();
int meta = world.getBlockMetadata(theCoord.posX, theCoord.posY, theCoord.posZ);
drops.addAll(theBlock.getDrops(world, theCoord.posX, theCoord.posY, theCoord.posZ, meta, 0));
int meta = world.getBlockMetadata(theCoord.getX(), theCoord.getY(), theCoord.getZ());
drops.addAll(theBlock.getDrops(world, theCoord.getX(), theCoord.getY(), theCoord.getZ(), meta, 0));
world.setBlockToAir(theCoord.posX, theCoord.posY, theCoord.posZ);
if(this.hasParticles) world.playAuxSFX(2001, theCoord.posX, theCoord.posY, theCoord.posZ, Block.getIdFromBlock(theBlock)+(meta << 12));
world.setBlockToAir(theCoord.getX(), theCoord.getY(), theCoord.getZ());
if(this.hasParticles) world.playAuxSFX(2001, theCoord.getX(), theCoord.getY(), theCoord.getZ(), Block.getIdFromBlock(theBlock)+(meta << 12));
if(this.doesDrop){
for(ItemStack theDrop : drops){
world.spawnEntityInWorld(new EntityItem(world, theCoord.posX + 0.5, theCoord.posY + 0.5, theCoord.posZ + 0.5, theDrop));
world.spawnEntityInWorld(new EntityItem(world, theCoord.getX() + 0.5, theCoord.getY() + 0.5, theCoord.getZ() + 0.5, theDrop));
}
}
return;

View file

@ -14,7 +14,6 @@ import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ChatComponentText;
import net.minecraft.util.ChunkCoordinates;
import net.minecraft.util.IIcon;
import net.minecraft.util.StatCollector;
import net.minecraft.world.World;
@ -38,7 +37,6 @@ public class ItemPhantomConnector extends Item implements INameableItem{
if(tile instanceof TileEntityPhantomface){
if(this.checkHasConnection(stack, player, tile)){
((TileEntityPhantomface)tile).boundPosition = this.getStoredPosition(stack);
((TileEntityPhantomface)tile).boundWorld = this.getStoredWorld(stack);
WorldUtil.updateTileAndTilesAround(tile);
this.clearStorage(stack);
player.addChatComponentMessage(new ChatComponentText(StatCollector.translateToLocal("tooltip."+ModUtil.MOD_ID_LOWER+".phantom.connected.desc")));
@ -50,7 +48,6 @@ public class ItemPhantomConnector extends Item implements INameableItem{
else if(tile instanceof TileEntityPhantomPlacer){
if(this.checkHasConnection(stack, player, tile)){
((TileEntityPhantomPlacer)tile).boundPosition = this.getStoredPosition(stack);
((TileEntityPhantomPlacer)tile).boundWorld = this.getStoredWorld(stack);
tile.markDirty();
this.clearStorage(stack);
player.addChatComponentMessage(new ChatComponentText(StatCollector.translateToLocal("tooltip."+ModUtil.MOD_ID_LOWER+".phantom.connected.desc")));
@ -67,16 +64,14 @@ public class ItemPhantomConnector extends Item implements INameableItem{
}
public boolean checkHasConnection(ItemStack stack, EntityPlayer player, TileEntity tile){
if(this.getStoredPosition(stack) != null && this.getStoredWorld(stack) != null){
if(this.getStoredPosition(stack) != null){
return true;
}
else{
if(tile instanceof TileEntityPhantomPlacer){
((TileEntityPhantomPlacer)tile).boundWorld = null;
((TileEntityPhantomPlacer)tile).boundPosition = null;
}
if(tile instanceof TileEntityPhantomface){
((TileEntityPhantomface)tile).boundWorld = null;
((TileEntityPhantomface)tile).boundPosition = null;
}
player.addChatComponentMessage(new ChatComponentText(StatCollector.translateToLocal("tooltip." + ModUtil.MOD_ID_LOWER + ".phantom.unbound.desc")));
@ -86,7 +81,7 @@ public class ItemPhantomConnector extends Item implements INameableItem{
@Override
public void onUpdate(ItemStack stack, World world, Entity entity, int par4, boolean par5){
if(this.getStoredPosition(stack) == null || this.getStoredWorld(stack) == null) this.clearStorage(stack);
if(this.getStoredPosition(stack) == null) this.clearStorage(stack);
}
@Override
@ -95,23 +90,16 @@ public class ItemPhantomConnector extends Item implements INameableItem{
return stack;
}
public ChunkCoordinates getStoredPosition(ItemStack stack){
public WorldPos getStoredPosition(ItemStack stack){
NBTTagCompound tag = stack.getTagCompound();
if(tag != null){
int x = tag.getInteger("XCoordOfTileStored");
int y = tag.getInteger("YCoordOfTileStored");
int z = tag.getInteger("ZCoordOfTileStored");
if(x == 0 && y == 0 && z == 0) return null;
return new ChunkCoordinates(x, y, z);
World world = DimensionManager.getWorld(tag.getInteger("WorldOfTileStored"));
if(x != 0 && y != 0 && z != 0 && world != null){
return new WorldPos(x, y, z);
}
return null;
}
public World getStoredWorld(ItemStack stack){
NBTTagCompound tag = stack.getTagCompound();
if(tag != null){
return DimensionManager.getWorld(tag.getInteger("WorldOfTileStored"));
}
return null;
}
@ -142,14 +130,16 @@ public class ItemPhantomConnector extends Item implements INameableItem{
@SideOnly(Side.CLIENT)
public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean isHeld) {
ItemUtil.addInformation(this, list, 2, "");
ChunkCoordinates coords = this.getStoredPosition(stack);
World world = this.getStoredWorld(stack);
if(coords != null && world != null){
list.add(StatCollector.translateToLocal("tooltip." + ModUtil.MOD_ID_LOWER + ".phantom.boundTo.desc") + ":");
list.add("X: " + coords.posX);
list.add("Y: " + coords.posY);
list.add("Z: " + coords.posZ);
list.add(StatCollector.translateToLocal("tooltip." + ModUtil.MOD_ID_LOWER + ".phantom.inWorld.desc") + " " + world.provider.dimensionId);
WorldPos coords = this.getStoredPosition(stack);
if(coords != null){
World world = coords.getWorld();
if(world != null){
list.add(StatCollector.translateToLocal("tooltip."+ModUtil.MOD_ID_LOWER+".phantom.boundTo.desc")+":");
list.add("X: "+coords.getX());
list.add("Y: "+coords.getY());
list.add("Z: "+coords.getZ());
list.add(StatCollector.translateToLocal("tooltip."+ModUtil.MOD_ID_LOWER+".phantom.inWorld.desc")+" "+world.provider.dimensionId);
}
}
}

View file

@ -1,11 +1,11 @@
package ellpeck.actuallyadditions.tile;
import ellpeck.actuallyadditions.config.values.ConfigIntValues;
import ellpeck.actuallyadditions.util.WorldPos;
import ellpeck.actuallyadditions.util.WorldUtil;
import net.minecraft.block.Block;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.ChunkCoordinates;
import net.minecraftforge.common.util.ForgeDirection;
import java.util.ArrayList;
@ -45,22 +45,22 @@ public class TileEntityBreaker extends TileEntityInventoryBase{
if(this.currentTime <= 0){
ForgeDirection sideToManipulate = ForgeDirection.getOrientation(worldObj.getBlockMetadata(xCoord, yCoord, zCoord));
ChunkCoordinates coordsBlock = WorldUtil.getCoordsFromSide(sideToManipulate, xCoord, yCoord, zCoord);
WorldPos coordsBlock = WorldUtil.getCoordsFromSide(sideToManipulate, xCoord, yCoord, zCoord);
if(coordsBlock != null){
Block blockToBreak = worldObj.getBlock(coordsBlock.posX, coordsBlock.posY, coordsBlock.posZ);
if(!this.isPlacer && blockToBreak != null && blockToBreak.getBlockHardness(worldObj, coordsBlock.posX, coordsBlock.posY, coordsBlock.posZ) > -1.0F){
Block blockToBreak = worldObj.getBlock(coordsBlock.getX(), coordsBlock.getY(), coordsBlock.getZ());
if(!this.isPlacer && blockToBreak != null && blockToBreak.getBlockHardness(worldObj, coordsBlock.getX(), coordsBlock.getY(), coordsBlock.getZ()) > -1.0F){
ArrayList<ItemStack> drops = new ArrayList<ItemStack>();
int meta = worldObj.getBlockMetadata(coordsBlock.posX, coordsBlock.posY, coordsBlock.posZ);
drops.addAll(blockToBreak.getDrops(worldObj, coordsBlock.posX, coordsBlock.posY, coordsBlock.posZ, meta, 0));
int meta = worldObj.getBlockMetadata(coordsBlock.getX(), coordsBlock.getY(), coordsBlock.getZ());
drops.addAll(blockToBreak.getDrops(worldObj, coordsBlock.getX(), coordsBlock.getY(), coordsBlock.getZ(), meta, 0));
if(addToInventory(this.slots, drops, false)){
worldObj.playAuxSFX(2001, coordsBlock.posX, coordsBlock.posY, coordsBlock.posZ, Block.getIdFromBlock(blockToBreak) + (meta << 12));
worldObj.playAuxSFX(2001, coordsBlock.getX(), coordsBlock.getY(), coordsBlock.getZ(), Block.getIdFromBlock(blockToBreak) + (meta << 12));
WorldUtil.breakBlockAtSide(sideToManipulate, worldObj, xCoord, yCoord, zCoord);
addToInventory(this.slots, drops, true);
this.markDirty();
}
}
else if(this.isPlacer && worldObj.getBlock(coordsBlock.posX, coordsBlock.posY, coordsBlock.posZ).isReplaceable(worldObj, coordsBlock.posX, coordsBlock.posY, coordsBlock.posZ)){
else if(this.isPlacer && worldObj.getBlock(coordsBlock.getX(), coordsBlock.getY(), coordsBlock.getZ()).isReplaceable(worldObj, coordsBlock.getX(), coordsBlock.getY(), coordsBlock.getZ())){
int theSlot = testInventory(this.slots);
this.setInventorySlotContents(theSlot, WorldUtil.placeBlockAtSide(sideToManipulate, worldObj, xCoord, yCoord, zCoord, this.slots[theSlot]));
if(this.slots[theSlot] != null && this.slots[theSlot].stackSize <= 0) this.slots[theSlot] = null;

View file

@ -5,12 +5,12 @@ import cpw.mods.fml.relauncher.SideOnly;
import ellpeck.actuallyadditions.config.values.ConfigIntValues;
import ellpeck.actuallyadditions.network.sync.IPacketSyncerToClient;
import ellpeck.actuallyadditions.network.sync.PacketSyncerToClient;
import ellpeck.actuallyadditions.util.WorldPos;
import ellpeck.actuallyadditions.util.WorldUtil;
import net.minecraft.block.Block;
import net.minecraft.init.Blocks;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.ChunkCoordinates;
import net.minecraftforge.common.util.ForgeDirection;
import net.minecraftforge.fluids.*;
@ -110,10 +110,10 @@ public class TileEntityFluidCollector extends TileEntityInventoryBase implements
if(this.currentTime <= 0){
ForgeDirection sideToManipulate = ForgeDirection.getOrientation(worldObj.getBlockMetadata(xCoord, yCoord, zCoord));
ChunkCoordinates coordsBlock = WorldUtil.getCoordsFromSide(sideToManipulate, xCoord, yCoord, zCoord);
WorldPos coordsBlock = WorldUtil.getCoordsFromSide(sideToManipulate, xCoord, yCoord, zCoord);
if(coordsBlock != null){
Block blockToBreak = worldObj.getBlock(coordsBlock.posX, coordsBlock.posY, coordsBlock.posZ);
if(!this.isPlacer && blockToBreak != null && worldObj.getBlockMetadata(coordsBlock.posX, coordsBlock.posY, coordsBlock.posZ) == 0){
Block blockToBreak = worldObj.getBlock(coordsBlock.getX(), coordsBlock.getY(), coordsBlock.getZ());
if(!this.isPlacer && blockToBreak != null && worldObj.getBlockMetadata(coordsBlock.getX(), coordsBlock.getY(), coordsBlock.getZ()) == 0){
if(blockToBreak instanceof IFluidBlock && ((IFluidBlock)blockToBreak).getFluid() != null){
if(this.tank.fill(new FluidStack(((IFluidBlock)blockToBreak).getFluid(), FluidContainerRegistry.BUCKET_VOLUME), false) >= FluidContainerRegistry.BUCKET_VOLUME){
this.tank.fill(new FluidStack(((IFluidBlock)blockToBreak).getFluid(), FluidContainerRegistry.BUCKET_VOLUME), true);
@ -133,7 +133,7 @@ public class TileEntityFluidCollector extends TileEntityInventoryBase implements
}
}
}
else if(this.isPlacer && worldObj.getBlock(coordsBlock.posX, coordsBlock.posY, coordsBlock.posZ).isReplaceable(worldObj, coordsBlock.posX, coordsBlock.posY, coordsBlock.posZ)){
else if(this.isPlacer && worldObj.getBlock(coordsBlock.getX(), coordsBlock.getY(), coordsBlock.getZ()).isReplaceable(worldObj, coordsBlock.getX(), coordsBlock.getY(), coordsBlock.getZ())){
if(this.tank.getFluidAmount() >= FluidContainerRegistry.BUCKET_VOLUME){
if(this.tank.getFluid().getFluid().getBlock() != null){
Block block = worldObj.getBlock(xCoord+sideToManipulate.offsetX, yCoord+sideToManipulate.offsetY, zCoord+sideToManipulate.offsetZ);

View file

@ -1,10 +1,10 @@
package ellpeck.actuallyadditions.tile;
import ellpeck.actuallyadditions.config.values.ConfigIntValues;
import ellpeck.actuallyadditions.util.WorldPos;
import net.minecraft.block.Block;
import net.minecraft.block.BlockGrass;
import net.minecraft.block.IGrowable;
import net.minecraft.util.ChunkCoordinates;
import java.util.Random;
@ -18,13 +18,13 @@ public class TileEntityGreenhouseGlass extends TileEntityBase{
public void updateEntity(){
if(!worldObj.isRemote){
if(worldObj.canBlockSeeTheSky(xCoord, yCoord, zCoord) && worldObj.isDaytime()){
ChunkCoordinates blockToFert = this.blockToFertilize();
WorldPos blockToFert = this.blockToFertilize();
if(blockToFert != null){
if(this.timeUntilNextFert > 0){
this.timeUntilNextFert--;
if(timeUntilNextFert <= 0){
worldObj.getBlock(blockToFert.posX, blockToFert.posY, blockToFert.posZ).updateTick(worldObj, blockToFert.posX, blockToFert.posY, blockToFert.posZ, worldObj.rand);
worldObj.playAuxSFX(2005, blockToFert.posX, blockToFert.posY, blockToFert.posZ, 0);
worldObj.getBlock(blockToFert.getX(), blockToFert.getY(), blockToFert.getZ()).updateTick(worldObj, blockToFert.getX(), blockToFert.getY(), blockToFert.getZ(), worldObj.rand);
worldObj.playAuxSFX(2005, blockToFert.getX(), blockToFert.getY(), blockToFert.getZ(), 0);
}
}
else this.timeUntilNextFert = this.timeUntilNextFertToSet+new Random().nextInt(this.timeUntilNextFertToSet);
@ -33,12 +33,12 @@ public class TileEntityGreenhouseGlass extends TileEntityBase{
}
}
public ChunkCoordinates blockToFertilize(){
public WorldPos blockToFertilize(){
for(int i = yCoord-1; i > 0; i--){
Block block = worldObj.getBlock(xCoord, i, zCoord);
if(block != null && !(worldObj.isAirBlock(xCoord, i, zCoord))){
if(block instanceof IGrowable && !(block instanceof BlockGrass)){
return new ChunkCoordinates(xCoord, i, zCoord);
return new WorldPos(xCoord, i, zCoord);
}
else return null;
}

View file

@ -3,10 +3,10 @@ package ellpeck.actuallyadditions.tile;
import cofh.api.energy.EnergyStorage;
import cofh.api.energy.IEnergyProvider;
import ellpeck.actuallyadditions.config.values.ConfigIntValues;
import ellpeck.actuallyadditions.util.WorldPos;
import ellpeck.actuallyadditions.util.WorldUtil;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.util.ChunkCoordinates;
import net.minecraftforge.common.util.ForgeDirection;
import java.util.ArrayList;
@ -27,10 +27,10 @@ public class TileEntityHeatCollector extends TileEntityBase implements IEnergyPr
ArrayList<Integer> blocksAround = new ArrayList<Integer>();
if(energyProducedPerTick <= this.getMaxEnergyStored(ForgeDirection.UNKNOWN)-this.getEnergyStored(ForgeDirection.UNKNOWN)){
for(int i = 1; i <= 5; i++){
ChunkCoordinates coords = WorldUtil.getCoordsFromSide(WorldUtil.getDirectionByRotatingSide(i), xCoord, yCoord, zCoord);
WorldPos coords = WorldUtil.getCoordsFromSide(WorldUtil.getDirectionByRotatingSide(i), xCoord, yCoord, zCoord);
if(coords != null){
Block block = worldObj.getBlock(coords.posX, coords.posY, coords.posZ);
if(block != null && block.getMaterial() == Material.lava && worldObj.getBlockMetadata(coords.posX, coords.posY, coords.posZ) == 0){
Block block = worldObj.getBlock(coords.getX(), coords.getY(), coords.getZ());
if(block != null && block.getMaterial() == Material.lava && worldObj.getBlockMetadata(coords.getX(), coords.getY(), coords.getZ()) == 0){
blocksAround.add(i);
}
}

View file

@ -1,11 +1,11 @@
package ellpeck.actuallyadditions.tile;
import ellpeck.actuallyadditions.config.values.ConfigIntValues;
import ellpeck.actuallyadditions.util.WorldPos;
import ellpeck.actuallyadditions.util.WorldUtil;
import net.minecraft.block.Block;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.ChunkCoordinates;
import net.minecraft.world.World;
import net.minecraftforge.common.DimensionManager;
import net.minecraftforge.common.util.ForgeDirection;
@ -23,8 +23,7 @@ public class TileEntityPhantomPlacer extends TileEntityInventoryBase{
}
public ChunkCoordinates boundPosition;
public World boundWorld;
public WorldPos boundPosition;
public int currentTime;
public final int timeNeeded = ConfigIntValues.PHANTOM_PLACER_TIME.getValue();
@ -50,7 +49,6 @@ public class TileEntityPhantomPlacer extends TileEntityInventoryBase{
if(!this.hasBoundPosition()){
this.boundPosition = null;
this.boundWorld = null;
}
if(this.isBoundPositionInRange()){
@ -59,24 +57,24 @@ public class TileEntityPhantomPlacer extends TileEntityInventoryBase{
this.currentTime--;
if(this.currentTime <= 0){
if(this.isBreaker){
Block blockToBreak = boundWorld.getBlock(boundPosition.posX, boundPosition.posY, boundPosition.posZ);
if(blockToBreak != null && blockToBreak.getBlockHardness(boundWorld, boundPosition.posX, boundPosition.posY, boundPosition.posZ) > -1.0F){
Block blockToBreak = boundPosition.getWorld().getBlock(boundPosition.getX(), boundPosition.getY(), boundPosition.getZ());
if(blockToBreak != null && blockToBreak.getBlockHardness(boundPosition.getWorld(), boundPosition.getX(), boundPosition.getY(), boundPosition.getZ()) > -1.0F){
ArrayList<ItemStack> drops = new ArrayList<ItemStack>();
int meta = boundWorld.getBlockMetadata(boundPosition.posX, boundPosition.posY, boundPosition.posZ);
drops.addAll(blockToBreak.getDrops(boundWorld, boundPosition.posX, boundPosition.posY, boundPosition.posZ, meta, 0));
int meta = boundPosition.getWorld().getBlockMetadata(boundPosition.getX(), boundPosition.getY(), boundPosition.getZ());
drops.addAll(blockToBreak.getDrops(boundPosition.getWorld(), boundPosition.getX(), boundPosition.getY(), boundPosition.getZ(), meta, 0));
if(TileEntityBreaker.addToInventory(this.slots, drops, false)){
boundWorld.playAuxSFX(2001, boundPosition.posX, boundPosition.posY, boundPosition.posZ, Block.getIdFromBlock(blockToBreak) + (meta << 12));
WorldUtil.breakBlockAtSide(ForgeDirection.UNKNOWN, boundWorld, boundPosition.posX, boundPosition.posY, boundPosition.posZ);
boundPosition.getWorld().playAuxSFX(2001, boundPosition.getX(), boundPosition.getY(), boundPosition.getZ(), Block.getIdFromBlock(blockToBreak)+(meta << 12));
WorldUtil.breakBlockAtSide(ForgeDirection.UNKNOWN, boundPosition.getWorld(), boundPosition.getX(), boundPosition.getY(), boundPosition.getZ());
TileEntityBreaker.addToInventory(this.slots, drops, true);
this.markDirty();
}
}
}
else{
if(boundWorld.getBlock(boundPosition.posX, boundPosition.posY, boundPosition.posZ).isReplaceable(boundWorld, boundPosition.posX, boundPosition.posY, boundPosition.posZ)){
if(boundPosition.getWorld().getBlock(boundPosition.getX(), boundPosition.getY(), boundPosition.getZ()).isReplaceable(boundPosition.getWorld(), boundPosition.getX(), boundPosition.getY(), boundPosition.getZ())){
int theSlot = TileEntityBreaker.testInventory(this.slots);
this.setInventorySlotContents(theSlot, WorldUtil.placeBlockAtSide(ForgeDirection.UNKNOWN, boundWorld, boundPosition.posX, boundPosition.posY, boundPosition.posZ, this.slots[theSlot]));
this.setInventorySlotContents(theSlot, WorldUtil.placeBlockAtSide(ForgeDirection.UNKNOWN, boundPosition.getWorld(), boundPosition.getX(), boundPosition.getY(), boundPosition.getZ(), this.slots[theSlot]));
if(this.slots[theSlot] != null && this.slots[theSlot].stackSize <= 0) this.slots[theSlot] = null;
}
}
@ -90,9 +88,9 @@ public class TileEntityPhantomPlacer extends TileEntityInventoryBase{
public boolean isBoundPositionInRange(){
if(this.hasBoundPosition()){
int xDif = this.boundPosition.posX-this.xCoord;
int yDif = this.boundPosition.posY-this.yCoord;
int zDif = this.boundPosition.posZ-this.zCoord;
int xDif = this.boundPosition.getX()-this.xCoord;
int yDif = this.boundPosition.getY()-this.yCoord;
int zDif = this.boundPosition.getZ()-this.zCoord;
if(xDif >= -this.range && xDif <= this.range){
if(yDif >= -this.range && yDif <= this.range){
@ -104,13 +102,12 @@ public class TileEntityPhantomPlacer extends TileEntityInventoryBase{
}
public boolean hasBoundPosition(){
if(this.boundPosition != null && this.boundWorld != null){
if(this.xCoord == this.boundPosition.posX && this.yCoord == this.boundPosition.posY && this.zCoord == this.boundPosition.posZ && this.worldObj == this.boundWorld){
if(this.boundPosition != null && this.boundPosition.getWorld() != null){
if(this.xCoord == this.boundPosition.getX() && this.yCoord == this.boundPosition.getY() && this.zCoord == this.boundPosition.getZ() && this.worldObj == this.boundPosition.getWorld()){
this.boundPosition = null;
this.boundWorld = null;
return false;
}
return this.boundWorld == this.worldObj;
return this.boundPosition.getWorld() == this.worldObj;
}
return false;
}
@ -120,10 +117,10 @@ public class TileEntityPhantomPlacer extends TileEntityInventoryBase{
super.writeToNBT(compound);
compound.setInteger("Time", currentTime);
if(this.hasBoundPosition()){
compound.setInteger("XCoordOfTileStored", boundPosition.posX);
compound.setInteger("YCoordOfTileStored", boundPosition.posY);
compound.setInteger("ZCoordOfTileStored", boundPosition.posZ);
compound.setInteger("WorldOfTileStored", boundWorld.provider.dimensionId);
compound.setInteger("XCoordOfTileStored", boundPosition.getX());
compound.setInteger("YCoordOfTileStored", boundPosition.getY());
compound.setInteger("ZCoordOfTileStored", boundPosition.getZ());
compound.setInteger("WorldOfTileStored", boundPosition.getWorld().provider.dimensionId);
}
}
@ -133,9 +130,9 @@ public class TileEntityPhantomPlacer extends TileEntityInventoryBase{
int x = compound.getInteger("XCoordOfTileStored");
int y = compound.getInteger("YCoordOfTileStored");
int z = compound.getInteger("ZCoordOfTileStored");
if(x != 0 && y != 0 && z != 0){
this.boundPosition = new ChunkCoordinates(x, y, z);
this.boundWorld = DimensionManager.getWorld(compound.getInteger("WorldOfTileStored"));
World world = DimensionManager.getWorld(compound.getInteger("WorldOfTileStored"));
if(x != 0 && y != 0 && z != 0 && world != null){
this.boundPosition = new WorldPos(world, x, y, z);
this.markDirty();
}
}

View file

@ -6,6 +6,7 @@ import cofh.api.energy.IEnergyReceiver;
import ellpeck.actuallyadditions.blocks.BlockPhantomface;
import ellpeck.actuallyadditions.blocks.InitBlocks;
import ellpeck.actuallyadditions.config.values.ConfigIntValues;
import ellpeck.actuallyadditions.util.WorldPos;
import ellpeck.actuallyadditions.util.WorldUtil;
import net.minecraft.block.Block;
import net.minecraft.entity.player.EntityPlayer;
@ -14,7 +15,6 @@ import net.minecraft.inventory.ISidedInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ChunkCoordinates;
import net.minecraft.world.World;
import net.minecraftforge.common.DimensionManager;
import net.minecraftforge.common.util.ForgeDirection;
@ -25,8 +25,7 @@ import net.minecraftforge.fluids.IFluidHandler;
public class TileEntityPhantomface extends TileEntityInventoryBase{
public ChunkCoordinates boundPosition;
public World boundWorld;
public WorldPos boundPosition;
public int type;
@ -49,9 +48,9 @@ public class TileEntityPhantomface extends TileEntityInventoryBase{
public boolean isBoundTileInRage(){
if(this.hasBoundTile()){
int xDif = this.boundPosition.posX-this.xCoord;
int yDif = this.boundPosition.posY-this.yCoord;
int zDif = this.boundPosition.posZ-this.zCoord;
int xDif = this.boundPosition.getX()-this.xCoord;
int yDif = this.boundPosition.getY()-this.yCoord;
int zDif = this.boundPosition.getZ()-this.zCoord;
if(xDif >= -this.range && xDif <= this.range){
if(yDif >= -this.range && yDif <= this.range){
@ -69,19 +68,17 @@ public class TileEntityPhantomface extends TileEntityInventoryBase{
if(!this.hasBoundTile()){
this.boundPosition = null;
this.boundWorld = null;
}
}
}
public boolean hasBoundTile(){
if(this.boundPosition != null && this.boundWorld != null){
if(this.boundWorld.getTileEntity(boundPosition.posX, boundPosition.posY, boundPosition.posZ) instanceof TileEntityPhantomface || (this.xCoord == this.boundPosition.posX && this.yCoord == this.boundPosition.posY && this.zCoord == this.boundPosition.posZ && this.worldObj == this.boundWorld)){
if(this.boundPosition != null && this.boundPosition.getWorld() != null){
if(this.boundPosition.getWorld().getTileEntity(boundPosition.getX(), boundPosition.getY(), boundPosition.getZ()) instanceof TileEntityPhantomface || (this.xCoord == this.boundPosition.getX() && this.yCoord == this.boundPosition.getY() && this.zCoord == this.boundPosition.getZ() && this.worldObj == this.boundPosition.getWorld())){
this.boundPosition = null;
this.boundWorld = null;
return false;
}
return this.boundWorld == this.worldObj;
return this.boundPosition.getWorld() == this.worldObj;
}
return false;
}
@ -90,10 +87,10 @@ public class TileEntityPhantomface extends TileEntityInventoryBase{
public void writeToNBT(NBTTagCompound compound){
super.writeToNBT(compound);
if(this.hasBoundTile()){
compound.setInteger("XCoordOfTileStored", boundPosition.posX);
compound.setInteger("YCoordOfTileStored", boundPosition.posY);
compound.setInteger("ZCoordOfTileStored", boundPosition.posZ);
compound.setInteger("WorldOfTileStored", boundWorld.provider.dimensionId);
compound.setInteger("XCoordOfTileStored", boundPosition.getX());
compound.setInteger("YCoordOfTileStored", boundPosition.getY());
compound.setInteger("ZCoordOfTileStored", boundPosition.getZ());
compound.setInteger("WorldOfTileStored", boundPosition.getWorld().provider.dimensionId);
}
}
@ -103,9 +100,9 @@ public class TileEntityPhantomface extends TileEntityInventoryBase{
int x = compound.getInteger("XCoordOfTileStored");
int y = compound.getInteger("YCoordOfTileStored");
int z = compound.getInteger("ZCoordOfTileStored");
if(x != 0 && y != 0 && z != 0){
this.boundPosition = new ChunkCoordinates(x, y, z);
this.boundWorld = DimensionManager.getWorld(compound.getInteger("WorldOfTileStored"));
World world = DimensionManager.getWorld(compound.getInteger("WorldOfTileStored"));
if(x != 0 && y != 0 && z != 0 && world != null){
this.boundPosition = new WorldPos(world, x, y, z);
this.markDirty();
}
}
@ -164,12 +161,12 @@ public class TileEntityPhantomface extends TileEntityInventoryBase{
@Override
public boolean isBoundTileInRage(){
return super.isBoundTileInRage() && this.boundWorld.getTileEntity(boundPosition.posX, boundPosition.posY, boundPosition.posZ) instanceof IFluidHandler;
return super.isBoundTileInRage() && this.boundPosition.getWorld().getTileEntity(boundPosition.getX(), boundPosition.getY(), boundPosition.getZ()) instanceof IFluidHandler;
}
public IFluidHandler getHandler(){
if(this.boundPosition != null && this.boundWorld != null){
TileEntity tile = boundWorld.getTileEntity(boundPosition.posX, boundPosition.posY, boundPosition.posZ);
if(this.boundPosition != null && this.boundPosition.getWorld() != null){
TileEntity tile = boundPosition.getWorld().getTileEntity(boundPosition.getX(), boundPosition.getY(), boundPosition.getZ());
if(tile instanceof IFluidHandler) return (IFluidHandler)tile;
}
return null;
@ -219,7 +216,7 @@ public class TileEntityPhantomface extends TileEntityInventoryBase{
@Override
public boolean isBoundTileInRage(){
return super.isBoundTileInRage() && (this.boundWorld.getTileEntity(boundPosition.posX, boundPosition.posY, boundPosition.posZ) instanceof IEnergyReceiver || this.boundWorld.getTileEntity(boundPosition.posX, boundPosition.posY, boundPosition.posZ) instanceof IEnergyProvider);
return super.isBoundTileInRage() && (this.boundPosition.getWorld().getTileEntity(boundPosition.getX(), boundPosition.getY(), boundPosition.getZ()) instanceof IEnergyReceiver || this.boundPosition.getWorld().getTileEntity(boundPosition.getX(), boundPosition.getY(), boundPosition.getZ()) instanceof IEnergyProvider);
}
@Override
@ -250,16 +247,16 @@ public class TileEntityPhantomface extends TileEntityInventoryBase{
}
public IEnergyProvider getProvider(){
if(this.boundPosition != null && this.boundWorld != null){
TileEntity tile = boundWorld.getTileEntity(boundPosition.posX, boundPosition.posY, boundPosition.posZ);
if(this.boundPosition != null && this.boundPosition.getWorld() != null){
TileEntity tile = boundPosition.getWorld().getTileEntity(boundPosition.getX(), boundPosition.getY(), boundPosition.getZ());
if(tile instanceof IEnergyProvider) return (IEnergyProvider)tile;
}
return null;
}
public IEnergyReceiver getReceiver(){
if(this.boundPosition != null && this.boundWorld != null){
TileEntity tile = boundWorld.getTileEntity(boundPosition.posX, boundPosition.posY, boundPosition.posZ);
if(this.boundPosition != null && this.boundPosition.getWorld() != null){
TileEntity tile = boundPosition.getWorld().getTileEntity(boundPosition.getX(), boundPosition.getY(), boundPosition.getZ());
if(tile instanceof IEnergyReceiver) return (IEnergyReceiver)tile;
}
return null;
@ -311,8 +308,8 @@ public class TileEntityPhantomface extends TileEntityInventoryBase{
}
public IInventory getInventory(){
if(this.boundPosition != null && this.boundWorld != null){
TileEntity tile = boundWorld.getTileEntity(boundPosition.posX, boundPosition.posY, boundPosition.posZ);
if(this.boundPosition != null && this.boundPosition.getWorld() != null){
TileEntity tile = boundPosition.getWorld().getTileEntity(boundPosition.getX(), boundPosition.getY(), boundPosition.getZ());
if(tile instanceof IInventory) return (IInventory)tile;
}
return null;
@ -320,7 +317,7 @@ public class TileEntityPhantomface extends TileEntityInventoryBase{
@Override
public boolean isBoundTileInRage(){
return super.isBoundTileInRage() && this.boundWorld.getTileEntity(boundPosition.posX, boundPosition.posY, boundPosition.posZ) instanceof IInventory;
return super.isBoundTileInRage() && this.boundPosition.getWorld().getTileEntity(boundPosition.getX(), boundPosition.getY(), boundPosition.getZ()) instanceof IInventory;
}
public ISidedInventory getSided(){

View file

@ -0,0 +1,38 @@
package ellpeck.actuallyadditions.util;
import net.minecraft.world.World;
public class WorldPos{
private int x;
private int y;
private int z;
private World world;
public WorldPos(World world, int x, int y, int z){
this.world = world;
this.x = x;
this.y = y;
this.z = z;
}
public WorldPos(int x, int y, int z){
this(null, x, y, z);
}
public int getX(){
return this.x;
}
public int getY(){
return this.y;
}
public int getZ(){
return this.z;
}
public World getWorld(){
return this.world;
}
}

View file

@ -8,7 +8,6 @@ import net.minecraft.entity.item.EntityItem;
import net.minecraft.init.Blocks;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ChunkCoordinates;
import net.minecraft.world.World;
import net.minecraft.world.WorldServer;
import net.minecraftforge.common.IPlantable;
@ -20,9 +19,9 @@ import java.util.ArrayList;
public class WorldUtil{
public static ChunkCoordinates getCoordsFromSide(ForgeDirection side, int x, int y, int z){
public static WorldPos getCoordsFromSide(ForgeDirection side, int x, int y, int z){
if(side == ForgeDirection.UNKNOWN) return null;
return new ChunkCoordinates(x+side.offsetX, y+side.offsetY, z+side.offsetZ);
return new WorldPos(x+side.offsetX, y+side.offsetY, z+side.offsetZ);
}
public static void breakBlockAtSide(ForgeDirection side, World world, int x, int y, int z){
@ -30,9 +29,9 @@ public class WorldUtil{
world.setBlockToAir(x, y, z);
return;
}
ChunkCoordinates c = getCoordsFromSide(side, x, y, z);
WorldPos c = getCoordsFromSide(side, x, y, z);
if(c != null){
world.setBlockToAir(c.posX, c.posY, c.posZ);
world.setBlockToAir(c.getX(), c.getY(), c.getZ());
}
}
@ -104,9 +103,9 @@ public class WorldUtil{
public static boolean dropItemAtSide(ForgeDirection side, World world, int x, int y, int z, ItemStack stack){
if(side != ForgeDirection.UNKNOWN){
ChunkCoordinates coords = getCoordsFromSide(side, x, y, z);
WorldPos coords = getCoordsFromSide(side, x, y, z);
if(coords != null){
EntityItem item = new EntityItem(world, coords.posX+0.5, coords.posY+0.5, coords.posZ+0.5, stack);
EntityItem item = new EntityItem(world, coords.getX()+0.5, coords.getY()+0.5, coords.getZ()+0.5, stack);
item.motionX = 0;
item.motionY = 0;
item.motionZ = 0;
@ -117,9 +116,9 @@ public class WorldUtil{
}
public static TileEntity getTileEntityFromSide(ForgeDirection side, World world, int x, int y, int z){
ChunkCoordinates c = getCoordsFromSide(side, x, y, z);
WorldPos c = getCoordsFromSide(side, x, y, z);
if(c != null){
return world.getTileEntity(c.posX, c.posY, c.posZ);
return world.getTileEntity(c.getX(), c.getY(), c.getZ());
}
return null;
}