diff --git a/src/main/java/gregtech/common/blocks/GT_TickHandler_Ores.java b/src/main/java/gregtech/common/blocks/GT_TickHandler_Ores.java deleted file mode 100644 index 94f301dd..00000000 --- a/src/main/java/gregtech/common/blocks/GT_TickHandler_Ores.java +++ /dev/null @@ -1,119 +0,0 @@ -package gregtech.common.blocks; - -import gregtech.api.enums.GT_Values; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; -import net.minecraftforge.fml.common.gameevent.TickEvent; - -import java.util.ArrayList; -import java.util.HashMap; - -public class GT_TickHandler_Ores { - - public static HashMap>> data = new HashMap<>(); - - public GT_TickHandler_Ores() { - MinecraftForge.EVENT_BUS.register(this); - } - - public static void loadChunkOre(GT_TileEntity_Ores gt_tileEntity_ores) { - getChunkData( - gt_tileEntity_ores.getWorld().provider.getDimension(), - new ChunkCoordIntPair(gt_tileEntity_ores.getPos())) - .add(gt_tileEntity_ores); - } - - public static void unloadChunkOre(GT_TileEntity_Ores gt_tileEntity_ores) { - getChunkData( - gt_tileEntity_ores.getWorld().provider.getDimension(), - new ChunkCoordIntPair(gt_tileEntity_ores.getPos())) - .remove(gt_tileEntity_ores); - } - - public static ArrayList getChunkData(int dimension, ChunkCoordIntPair chunk) { - HashMap> dimensionData = data.get(dimension); - if(dimensionData == null) { - dimensionData = new HashMap<>(); - data.put(dimension, dimensionData); - } - ArrayList oresData = dimensionData.get(chunk); - if(oresData == null) { - oresData = new ArrayList<>(); - dimensionData.put(chunk, oresData); - } - return oresData; - } - - @SubscribeEvent - public void onPlayerTick(TickEvent.PlayerTickEvent player) { - /*if(player.side.isServer()) { - EntityPlayer entityPlayer = player.player; - World world = entityPlayer.worldObj; - if (world.getWorldTime() % 10 == 0) { - GT_Packet_Ores packet_ores = new GT_Packet_Ores(); - ChunkCoordIntPair chunk = new ChunkCoordIntPair(new BlockPos(entityPlayer)); - for (int x = -1; x < 1; x++) { - for (int z = -1; z < 1; z++) { - ChunkCoordIntPair offset = chunk.offset(x, z); - ArrayList ores = getChunkData(world.provider.getDimension(), offset); - ores.removeIf(TileEntity::isInvalid); - for (GT_TileEntity_Ores oresTile : ores) { - packet_ores.addPos(oresTile); - } - } - } - if (!packet_ores.isEmpty()) { - GT_Values.NW.sendTo(packet_ores, (EntityPlayerMP) entityPlayer); - } - } - }*/ - } - - - public static class ChunkCoordIntPair { - - public final int coordX; - public final int coordZ; - - public ChunkCoordIntPair(BlockPos pos) { - this(pos.getX() >> 4, pos.getZ() >> 4); - } - - public ChunkCoordIntPair(int coordX, int coordZ) { - this.coordX = coordX; - this.coordZ = coordZ; - } - - public ChunkCoordIntPair offset(int x, int z) { - if(x == 0 && z == 0) return this; - return new ChunkCoordIntPair(coordX + x, coordZ + z); - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (!(o instanceof ChunkCoordIntPair)) return false; - - ChunkCoordIntPair that = (ChunkCoordIntPair) o; - - if (coordX != that.coordX) return false; - if (coordZ != that.coordZ) return false; - - return true; - } - - @Override - public int hashCode() { - int result = coordX; - result = 31 * result + coordZ; - return result; - } - - } - -} diff --git a/src/main/java/gregtech/common/blocks/GT_TileEntity_Ores.java b/src/main/java/gregtech/common/blocks/GT_TileEntity_Ores.java index 66eaa446..97ea0eab 100644 --- a/src/main/java/gregtech/common/blocks/GT_TileEntity_Ores.java +++ b/src/main/java/gregtech/common/blocks/GT_TileEntity_Ores.java @@ -16,12 +16,16 @@ import net.minecraft.client.Minecraft; import net.minecraft.init.Blocks; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.NetworkManager; +import net.minecraft.network.play.server.SPacketUpdateTileEntity; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.ITextComponent; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import javax.annotation.Nullable; import java.util.ArrayList; import java.util.Random; @@ -30,6 +34,63 @@ public class GT_TileEntity_Ores extends TileEntity implements ITexturedTileEntit public short mMetaData = 0; public boolean mNatural = false; + @Nullable + @Override + public SPacketUpdateTileEntity getUpdatePacket() { + return new SPacketUpdateTileEntity(this.pos, -1, this.getUpdateTag()); + } + + @Override + public NBTTagCompound getUpdateTag() { + return writeToNBT(new NBTTagCompound()); + } + + @Override + public void onDataPacket(NetworkManager net, SPacketUpdateTileEntity pkt) { + readFromNBT(pkt.getNbtCompound()); + causeChunkUpdate(); + } + + @Override + public void handleUpdateTag(NBTTagCompound tag) { + readNBTInternal(tag); + causeChunkUpdate(); + } + + @Override + public void readFromNBT(NBTTagCompound aNBT) { + super.readFromNBT(aNBT); + readNBTInternal(aNBT); + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound aNBT) { + super.writeToNBT(aNBT); + writeNBTInternal(aNBT); + return aNBT; + } + + public void writeNBTInternal(NBTTagCompound tagCompound) { + tagCompound.setShort("m", this.mMetaData); + tagCompound.setBoolean("n", this.mNatural); + } + + public void readNBTInternal(NBTTagCompound tagCompound) { + this.mMetaData = tagCompound.getShort("m"); + this.mNatural = tagCompound.getBoolean("n"); + } + + @SideOnly(Side.CLIENT) + public void causeChunkUpdate() { + int minX = pos.getX() - 5; + int minY = pos.getY() - 5; + int minZ = pos.getZ() - 5; + int maxX = pos.getX() + 5; + int maxY = pos.getY() + 5; + int maxZ = pos.getZ() + 5; + Minecraft.getMinecraft().renderGlobal.markBlockRangeForRenderUpdate(minX, minY, minZ, maxX, maxY, maxZ); + } + public static byte getHarvestData(short aMetaData) { Materials aMaterial = GregTech_API.sGeneratedMaterials[(aMetaData % 1000)]; byte tByte = aMaterial == null ? 0 : (byte) Math.max((aMetaData % 16000 / 1000 == 3) || (aMetaData % 16000 / 1000 == 4) ? 3 : 0, Math.min(7, aMaterial.mToolQuality - (aMetaData < 16000 ? 0 : 1))); @@ -96,32 +157,6 @@ public class GT_TileEntity_Ores extends TileEntity implements ITexturedTileEntit return false; } - @Override - public void readFromNBT(NBTTagCompound aNBT) { - super.readFromNBT(aNBT); - this.mMetaData = aNBT.getShort("m"); - this.mNatural = aNBT.getBoolean("n"); - } - - @Override - public NBTTagCompound writeToNBT(NBTTagCompound aNBT) { - super.writeToNBT(aNBT); - aNBT.setShort("m", this.mMetaData); - aNBT.setBoolean("n", this.mNatural); - return aNBT; - } - - @SideOnly(Side.CLIENT) - public void causeChunkUpdate() { - int minX = pos.getX() - 5; - int minY = pos.getY() - 5; - int minZ = pos.getZ() - 5; - int maxX = pos.getX() + 5; - int maxY = pos.getY() + 5; - int maxZ = pos.getZ() + 5; - Minecraft.getMinecraft().renderGlobal.markBlockRangeForRenderUpdate(minX, minY, minZ, maxX, maxY, maxZ); - } - public void overrideOreBlockMaterial(Block aOverridingStoneBlock, byte aOverridingStoneMeta) { this.mMetaData = ((short) (int) (this.mMetaData % 1000L + this.mMetaData / 16000L * 16000L)); if (aOverridingStoneBlock.isReplaceableOreGen(worldObj.getBlockState(getPos()), this.worldObj, getPos(), state -> state.getBlock() == Blocks.NETHERRACK)) { @@ -152,18 +187,6 @@ public class GT_TileEntity_Ores extends TileEntity implements ITexturedTileEntit this.worldObj.setBlockState(getPos(), getBlockType().getStateFromMeta(getHarvestData(this.mMetaData)), 0); } - //@Override - //public void invalidate() { - //super.invalidate(); - //GT_TickHandler_Ores.unloadChunkOre(this); - //} - - //@Override - //public void validate() { - //super.validate(); - //GT_TickHandler_Ores.loadChunkOre(this); - //} - public void convertOreBlock(World aWorld, int aX, int aY, int aZ) { short aMeta = ((short) (int) (this.mMetaData % 1000 + (this.mMetaData / 16000 * 16000))); aWorld.setBlockState(new BlockPos(aX, aY, aZ), GregTech_API.sBlockOres1.getStateFromMeta(getHarvestData(aMeta))); @@ -173,10 +196,6 @@ public class GT_TileEntity_Ores extends TileEntity implements ITexturedTileEntit } } - public short getMetaData() { - return this.mMetaData; - } - public ArrayList getDrops(Block aDroppedOre, int aFortune) { ArrayList rList = new ArrayList<>(); if (this.mMetaData <= 0) { @@ -252,6 +271,7 @@ public class GT_TileEntity_Ores extends TileEntity implements ITexturedTileEntit return rList; } + @Override public ITexture[] getTexture(Block aBlock, byte aSide) { Materials aMaterial = GregTech_API.sGeneratedMaterials[(this.mMetaData % 1000)]; if ((aMaterial != null) && (this.mMetaData < 32000)) { @@ -264,4 +284,5 @@ public class GT_TileEntity_Ores extends TileEntity implements ITexturedTileEntit new GT_RenderedTexture("minecraft:blocks/stone", null), new GT_RenderedTexture(gregtech.api.enums.TextureSet.SET_NONE.mTextures[OrePrefixes.ore.mTextureIndex])}; } + }