From cbb0b15dee97bef9114f9acb13845eac7d234b8b Mon Sep 17 00:00:00 2001 From: MysteriousAges Date: Wed, 18 Mar 2015 23:53:22 -0700 Subject: [PATCH] Adding network packet stuff. --- .../client/gui/ContainerThaumicApiary.java | 2 +- .../client/gui/GuiThaumicApiary.java | 61 +++++++-- src/main/java/magicbees/main/MagicBees.java | 20 +-- .../magicbees/main/utils/ChunkCoords.java | 36 ++++-- .../magicbees/main/utils/PacketHandler.java | 19 --- .../error/InvalidEventTypeIndexException.java | 13 ++ .../magicbees/main/utils/net/EventBase.java | 119 ++++++++++++++++++ .../magicbees/main/utils/net/EventCoords.java | 60 +++++++++ .../main/utils/net/EventInventoryUpdate.java | 67 ++++++++++ .../main/utils/net/NetworkEventHandler.java | 93 ++++++++++++++ .../main/utils/net/PacketInventoryUpdate.java | 5 - .../tileentity/TileEntityThaumicApiary.java | 52 ++++---- 12 files changed, 466 insertions(+), 81 deletions(-) delete mode 100644 src/main/java/magicbees/main/utils/PacketHandler.java create mode 100644 src/main/java/magicbees/main/utils/error/InvalidEventTypeIndexException.java create mode 100644 src/main/java/magicbees/main/utils/net/EventBase.java create mode 100644 src/main/java/magicbees/main/utils/net/EventCoords.java create mode 100644 src/main/java/magicbees/main/utils/net/EventInventoryUpdate.java create mode 100644 src/main/java/magicbees/main/utils/net/NetworkEventHandler.java delete mode 100644 src/main/java/magicbees/main/utils/net/PacketInventoryUpdate.java diff --git a/src/main/java/magicbees/client/gui/ContainerThaumicApiary.java b/src/main/java/magicbees/client/gui/ContainerThaumicApiary.java index 9e33171..b184c82 100644 --- a/src/main/java/magicbees/client/gui/ContainerThaumicApiary.java +++ b/src/main/java/magicbees/client/gui/ContainerThaumicApiary.java @@ -56,7 +56,7 @@ public class ContainerThaumicApiary extends ContainerMB { j++; } - addPlayerInventory(inventoryPlayer, 6, 109); + addPlayerInventory(inventoryPlayer, 0, 109); maxSlot = currentSlot; diff --git a/src/main/java/magicbees/client/gui/GuiThaumicApiary.java b/src/main/java/magicbees/client/gui/GuiThaumicApiary.java index f62973d..a8107be 100644 --- a/src/main/java/magicbees/client/gui/GuiThaumicApiary.java +++ b/src/main/java/magicbees/client/gui/GuiThaumicApiary.java @@ -74,21 +74,58 @@ public class GuiThaumicApiary extends GuiContainer this.drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); TileEntityThaumicApiary apiary = ((ContainerThaumicApiary)this.inventorySlots).apiary; - int value = LIFEBAR_HEIGHT - (apiary.getHealthScaled(100) * LIFEBAR_HEIGHT) / 100; - this.drawTexturedModalRect(this.guiLeft + LIFEBAR_DEST_X, this.guiTop + LIFEBAR_DEST_Y, - LIFEBAR_SRC_STAGE1_X, LIFEBAR_SRC_Y, LIFEBAR_WIDTH, value); + + drawLifebar(apiary); - if (apiary.isWorkBoosted()) { - this.drawTexturedModalRect(this.guiLeft + WORKBOOST_DEST_X, this.guiTop + WORKBOOST_DEST_Y, - WORKBOOST_SRC_X, WORKBOOST_SRC_Y, WORKBOOST_WIDTH, WORKBOOST_HEIGHT); - } - if (apiary.isDeathRateBoosted()) { - this.drawTexturedModalRect(this.guiLeft + DEATHBOOST_DEST_X, this.guiTop + DEATHBOOST_DEST_Y, - DEATHBOOST_SRC_X, DEATHBOOST_SRC_Y, DEATHBOOST_WIDTH, DEATHBOOST_HEIGHT); - } - if (apiary.isMutationBoosted()) { + drawWorkBoostIcon(apiary); + drawDeathRateIcon(apiary); + drawMutationIcon(apiary); + } + + private void drawMutationIcon(TileEntityThaumicApiary apiary) { + if (apiary.isMutationBoosted()) { this.drawTexturedModalRect(this.guiLeft + MUTATIONBOOST_DEST_X, this.guiTop + MUTATIONBOOST_DEST_Y, MUTATIONBOOST_SRC_X, MUTATIONBOOST_SRC_Y, MUTATIONBOOST_WIDTH, MUTATIONBOOST_HEIGHT); } + } + + private void drawDeathRateIcon(TileEntityThaumicApiary apiary) { + if (apiary.isDeathRateBoosted()) { + this.drawTexturedModalRect(this.guiLeft + DEATHBOOST_DEST_X, this.guiTop + DEATHBOOST_DEST_Y, + DEATHBOOST_SRC_X, DEATHBOOST_SRC_Y, DEATHBOOST_WIDTH, DEATHBOOST_HEIGHT); + } + } + + private void drawWorkBoostIcon(TileEntityThaumicApiary apiary) { + if (apiary.isWorkBoosted()) { + this.drawTexturedModalRect(this.guiLeft + WORKBOOST_DEST_X, this.guiTop + WORKBOOST_DEST_Y, + WORKBOOST_SRC_X, WORKBOOST_SRC_Y, WORKBOOST_WIDTH, WORKBOOST_HEIGHT); + } + } + + private void drawLifebar(TileEntityThaumicApiary apiary) { + int value = LIFEBAR_HEIGHT - apiary.getHealthScaled(LIFEBAR_HEIGHT); + int lifebarSrc = getLifebarSrc(apiary); + this.drawTexturedModalRect(this.guiLeft + LIFEBAR_DEST_X, this.guiTop + value + LIFEBAR_DEST_Y, + lifebarSrc, LIFEBAR_SRC_Y, LIFEBAR_WIDTH, LIFEBAR_HEIGHT - value); + } + + private int getLifebarSrc(TileEntityThaumicApiary apiary) { + int value = apiary.getHealthScaled(5); + if (value >= 5) { + return LIFEBAR_SRC_STAGE1_X; + } + else if (value >= 4) { + return LIFEBAR_SRC_STAGE2_X; + } + else if (value >= 3) { + return LIFEBAR_SRC_STAGE3_X; + } + else if (value >= 2) { + return LIFEBAR_SRC_STAGE4_X; + } + else { + return LIFEBAR_SRC_STAGE5_X; + } } } diff --git a/src/main/java/magicbees/main/MagicBees.java b/src/main/java/magicbees/main/MagicBees.java index 69f0be6..ecbfd1b 100644 --- a/src/main/java/magicbees/main/MagicBees.java +++ b/src/main/java/magicbees/main/MagicBees.java @@ -1,14 +1,5 @@ package magicbees.main; -import cpw.mods.fml.common.FMLCommonHandler; -import cpw.mods.fml.common.Mod; -import cpw.mods.fml.common.SidedProxy; -import cpw.mods.fml.common.event.FMLInitializationEvent; -import cpw.mods.fml.common.event.FMLInterModComms.IMCEvent; -import cpw.mods.fml.common.event.FMLPostInitializationEvent; -import cpw.mods.fml.common.event.FMLPreInitializationEvent; -import cpw.mods.fml.common.network.NetworkRegistry; - import magicbees.bees.BeeManager; import magicbees.bees.TransmutationEffectController; import magicbees.client.gui.GUIHandler; @@ -17,6 +8,15 @@ import magicbees.main.utils.IMCManager; import magicbees.main.utils.LogHelper; import magicbees.main.utils.VersionInfo; import magicbees.main.utils.compat.ModHelper; +import magicbees.main.utils.net.NetworkEventHandler; +import cpw.mods.fml.common.FMLCommonHandler; +import cpw.mods.fml.common.Mod; +import cpw.mods.fml.common.SidedProxy; +import cpw.mods.fml.common.event.FMLInitializationEvent; +import cpw.mods.fml.common.event.FMLInterModComms.IMCEvent; +import cpw.mods.fml.common.event.FMLPostInitializationEvent; +import cpw.mods.fml.common.event.FMLPreInitializationEvent; +import cpw.mods.fml.common.network.NetworkRegistry; @Mod( modid = VersionInfo.ModName, @@ -34,10 +34,12 @@ public class MagicBees public GUIHandler guiHandler; private Config modConfig; + public final NetworkEventHandler netHandler = new NetworkEventHandler(); @Mod.EventHandler public void preInit(FMLPreInitializationEvent event) { + LogHelper.info("Preinit started"); this.modConfig = new Config(event.getSuggestedConfigurationFile()); FMLCommonHandler.instance().bus().register(modConfig); diff --git a/src/main/java/magicbees/main/utils/ChunkCoords.java b/src/main/java/magicbees/main/utils/ChunkCoords.java index 15277ba..2dfc6f0 100644 --- a/src/main/java/magicbees/main/utils/ChunkCoords.java +++ b/src/main/java/magicbees/main/utils/ChunkCoords.java @@ -1,17 +1,35 @@ package magicbees.main.utils; -import net.minecraft.world.chunk.Chunk; +import net.minecraft.entity.Entity; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; public class ChunkCoords { - public int dimension; - public int xCoord; - public int zCoord; + public final int dimension; + public final int x; + public final int y; + public final int z; - public ChunkCoords(Chunk chunk) - { - this.dimension = chunk.worldObj.provider.dimensionId; - this.xCoord = chunk.xPosition; - this.zCoord = chunk.zPosition; + public ChunkCoords(TileEntity entity) { + this(entity.getWorldObj(), entity.xCoord, entity.yCoord, entity.zCoord); } + + public ChunkCoords(Entity entity) { + this(entity.worldObj, entity.chunkCoordX, entity.chunkCoordY, entity.chunkCoordZ); + } + + public ChunkCoords(World world, int xCoord, int yCoord, int zCoord) + { + this(world.provider.dimensionId, xCoord, yCoord, zCoord); + } + + public ChunkCoords(int dimId, int xCoord, int yCoord, int zCoord) + { + this.dimension = dimId; + this.x = xCoord; + this.y = yCoord; + this.z = zCoord; + } + } diff --git a/src/main/java/magicbees/main/utils/PacketHandler.java b/src/main/java/magicbees/main/utils/PacketHandler.java deleted file mode 100644 index 5855da3..0000000 --- a/src/main/java/magicbees/main/utils/PacketHandler.java +++ /dev/null @@ -1,19 +0,0 @@ -package magicbees.main.utils; - -import cpw.mods.fml.common.network.FMLEventChannel; -import cpw.mods.fml.common.network.NetworkRegistry; - -public class PacketHandler { - - public enum PacketTypes { - INVENTORY_UPDATE, - } - - private FMLEventChannel channel; - - public PacketHandler() { - channel = NetworkRegistry.INSTANCE.newEventDrivenChannel(VersionInfo.ModName); - channel.register(this); - } - -} diff --git a/src/main/java/magicbees/main/utils/error/InvalidEventTypeIndexException.java b/src/main/java/magicbees/main/utils/error/InvalidEventTypeIndexException.java new file mode 100644 index 0000000..4ae735b --- /dev/null +++ b/src/main/java/magicbees/main/utils/error/InvalidEventTypeIndexException.java @@ -0,0 +1,13 @@ +package magicbees.main.utils.error; + +public class InvalidEventTypeIndexException extends RuntimeException { + private static final long serialVersionUID = 8920019214439088440L; + + public InvalidEventTypeIndexException(String message) { + this(message, null); + } + + public InvalidEventTypeIndexException(String message, Throwable cause) { + super(message, cause); + } +} diff --git a/src/main/java/magicbees/main/utils/net/EventBase.java b/src/main/java/magicbees/main/utils/net/EventBase.java new file mode 100644 index 0000000..eb50836 --- /dev/null +++ b/src/main/java/magicbees/main/utils/net/EventBase.java @@ -0,0 +1,119 @@ +package magicbees.main.utils.net; + +import forestry.core.proxy.Proxies; +import io.netty.buffer.Unpooled; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +import magicbees.main.utils.LogHelper; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.CompressedStreamTools; +import net.minecraft.nbt.NBTTagCompound; +import cpw.mods.fml.common.network.internal.FMLProxyPacket; +import cpw.mods.fml.common.registry.GameData; + +public class EventBase { + + private NetworkEventHandler.EventType eventType; + + public EventBase() { + this.eventType = NetworkEventHandler.EventType.UNKNOWN; + } + + public EventBase(NetworkEventHandler.EventType type) { + this.eventType = type; + } + + public FMLProxyPacket getPacket() { + ByteArrayOutputStream bytes = new ByteArrayOutputStream(); + DataOutputStream data = new DataOutputStream(bytes); + + try { + data.writeInt(eventType.ordinal()); + writeDataToOutputStream(data); + } + catch (IOException e) { + LogHelper.error("Could not write EventBase data."); + e.printStackTrace(); + } + + return new FMLProxyPacket(Unpooled.wrappedBuffer(bytes.toByteArray()), NetworkEventHandler.CHANNEL_NAME); + } + + public void process(EntityPlayerMP player) { + + } + + protected void writeDataToOutputStream(DataOutputStream data) { + return; + } + + protected void readDataFromInputStream(DataInputStream data) { + return; + } + + protected ItemStack readItemStackFromData(DataInputStream data) throws IOException { + ItemStack itemstack = null; + + String itemName = data.readUTF(); + + if (!itemName.isEmpty()) { + Item item = GameData.getItemRegistry().getRaw(itemName); + byte stackSize = data.readByte(); + short meta = data.readShort(); + itemstack = new ItemStack(item, stackSize, meta); + + if (item.isDamageable() || Proxies.common.needsTagCompoundSynched(item)) { + itemstack.stackTagCompound = this.readNBTTagCompound(data); + } + } + + return itemstack; + } + + protected void writeItemStackToData(ItemStack itemstack, DataOutputStream data) throws IOException { + if (itemstack == null) { + data.writeUTF(""); + } else { + data.writeUTF(GameData.getItemRegistry().getNameForObject(itemstack.getItem())); + data.writeByte(itemstack.stackSize); + data.writeShort(itemstack.getItemDamage()); + + if (itemstack.getItem().isDamageable() || Proxies.common.needsTagCompoundSynched(itemstack.getItem())) { + this.writeNBTTagCompound(itemstack.stackTagCompound, data); + } + } + } + + protected NBTTagCompound readNBTTagCompound(DataInputStream data) throws IOException { + + short length = data.readShort(); + + if (length < 0) { + return null; + } else { + byte[] compressed = new byte[length]; + data.readFully(compressed); + return CompressedStreamTools.readCompressed(new ByteArrayInputStream(compressed)); + } + + } + + protected void writeNBTTagCompound(NBTTagCompound nbttagcompound, DataOutputStream data) throws IOException { + + if (nbttagcompound == null) { + data.writeShort(-1); + } else { + byte[] compressed = CompressedStreamTools.compress(nbttagcompound); + data.writeShort((short) compressed.length); + data.write(compressed); + } + + } +} diff --git a/src/main/java/magicbees/main/utils/net/EventCoords.java b/src/main/java/magicbees/main/utils/net/EventCoords.java new file mode 100644 index 0000000..907e74b --- /dev/null +++ b/src/main/java/magicbees/main/utils/net/EventCoords.java @@ -0,0 +1,60 @@ +package magicbees.main.utils.net; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +import magicbees.main.utils.ChunkCoords; +import magicbees.main.utils.LogHelper; + +public class EventCoords extends EventBase { + + private ChunkCoords coords; + + public EventCoords(NetworkEventHandler.EventType type, ChunkCoords position) { + super(type); + this.coords = position; + } + + public EventCoords(NetworkEventHandler.EventType type, DataInputStream byteStream) { + super(type); + } + + public ChunkCoords getCoords() { + return this.coords; + } + + @Override + protected void writeDataToOutputStream(DataOutputStream byteStream) { + super.writeDataToOutputStream(byteStream); + + try { + byteStream.writeInt(coords.dimension); + byteStream.writeInt(coords.x); + byteStream.writeInt(coords.y); + byteStream.writeInt(coords.z); + } + catch (IOException e) { + LogHelper.error("Could not write EventCoords data to stream."); + e.printStackTrace(); + } + } + + @Override + protected void readDataFromInputStream(DataInputStream byteStream) { + super.readDataFromInputStream(byteStream); + + try { + int dim = byteStream.readInt(); + int x = byteStream.readInt(); + int y = byteStream.readInt(); + int z = byteStream.readInt(); + + this.coords = new ChunkCoords(dim, x, y, z); + } + catch (IOException e) { + LogHelper.error("Could not read EventCoords data from stream."); + e.printStackTrace(); + } + } +} diff --git a/src/main/java/magicbees/main/utils/net/EventInventoryUpdate.java b/src/main/java/magicbees/main/utils/net/EventInventoryUpdate.java new file mode 100644 index 0000000..c813783 --- /dev/null +++ b/src/main/java/magicbees/main/utils/net/EventInventoryUpdate.java @@ -0,0 +1,67 @@ +package magicbees.main.utils.net; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +import cpw.mods.fml.client.FMLClientHandler; +import magicbees.main.utils.ChunkCoords; +import magicbees.main.utils.LogHelper; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; + +public class EventInventoryUpdate extends EventCoords { + + private int slotIndex; + private ItemStack itemStack; + + public EventInventoryUpdate(ChunkCoords position, int slot, ItemStack item) { + super(NetworkEventHandler.EventType.INVENTORY_UPDATE, position); + + this.slotIndex = slot; + this.itemStack = item; + } + + public EventInventoryUpdate(DataInputStream byteStream) { + super(NetworkEventHandler.EventType.INVENTORY_UPDATE, byteStream); + + this.readDataFromInputStream(byteStream); + } + + @Override + protected void writeDataToOutputStream(DataOutputStream byteStream) { + super.writeDataToOutputStream(byteStream); + + try { + byteStream.writeInt(this.slotIndex); + this.writeItemStackToData(this.itemStack, byteStream); + } catch (IOException e) { + LogHelper.error("Could not write EventInventoryUpdate to byte stream."); + e.printStackTrace(); + } + } + + @Override + protected void readDataFromInputStream(DataInputStream byteStream) { + super.readDataFromInputStream(byteStream); + + try { + this.slotIndex = byteStream.readInt(); + this.itemStack = this.readItemStackFromData(byteStream); + } catch (IOException e) { + LogHelper.error("Could not read EventInventoryUpdate to byte stream."); + e.printStackTrace(); + } + } + + @Override + public void process(EntityPlayerMP player) { + TileEntity tile = FMLClientHandler.instance().getClient().theWorld.getTileEntity(getCoords().x, getCoords().y, getCoords().z); + + if (tile != null && tile instanceof IInventory) { + ((IInventory) tile).setInventorySlotContents(slotIndex, itemStack); + } + } +} diff --git a/src/main/java/magicbees/main/utils/net/NetworkEventHandler.java b/src/main/java/magicbees/main/utils/net/NetworkEventHandler.java new file mode 100644 index 0000000..f8d880a --- /dev/null +++ b/src/main/java/magicbees/main/utils/net/NetworkEventHandler.java @@ -0,0 +1,93 @@ +package magicbees.main.utils.net; + +import io.netty.buffer.ByteBuf; +import io.netty.buffer.ByteBufInputStream; + +import java.io.DataInputStream; +import java.io.IOException; + +import magicbees.main.utils.ChunkCoords; +import magicbees.main.utils.LogHelper; +import magicbees.main.utils.VersionInfo; +import magicbees.main.utils.error.InvalidEventTypeIndexException; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.network.NetHandlerPlayServer; +import net.minecraft.tileentity.TileEntity; +import cpw.mods.fml.common.FMLCommonHandler; +import cpw.mods.fml.common.eventhandler.SubscribeEvent; +import cpw.mods.fml.common.network.FMLEventChannel; +import cpw.mods.fml.common.network.FMLNetworkEvent.ClientCustomPacketEvent; +import cpw.mods.fml.common.network.FMLNetworkEvent.ServerCustomPacketEvent; +import cpw.mods.fml.common.network.NetworkRegistry; +import cpw.mods.fml.common.network.internal.FMLProxyPacket; + +public class NetworkEventHandler { + + public static final String CHANNEL_NAME = VersionInfo.ModName; + + public enum EventType { + UNKNOWN, + INVENTORY_UPDATE, + ; + } + + private FMLEventChannel channel; + + public NetworkEventHandler() { + channel = NetworkRegistry.INSTANCE.newEventDrivenChannel(CHANNEL_NAME); + channel.register(this); + } + + @SubscribeEvent + public void onPacket(ServerCustomPacketEvent event) { + this.parseAndDispatchPacket(event.packet.payload(), ((NetHandlerPlayServer)event.handler).playerEntity); + } + + @SubscribeEvent + public void onPacket(ClientCustomPacketEvent event) { + this.parseAndDispatchPacket(event.packet.payload(), null); + } + + public void sendInventoryUpdate(TileEntity entity, int slotIndex, ItemStack itemStack) { + EventInventoryUpdate event = new EventInventoryUpdate(new ChunkCoords(entity), slotIndex, itemStack); + FMLProxyPacket packet = event.getPacket(); + + sendPacket(packet); + } + + private void sendPacket(FMLProxyPacket packet) { + if (FMLCommonHandler.instance().getEffectiveSide().isServer()) { + channel.sendToAll(packet); + } + else { + channel.sendToServer(packet); + } + } + + private void parseAndDispatchPacket(ByteBuf packetPayload, EntityPlayerMP player) { + try { + DataInputStream data = new DataInputStream(new ByteBufInputStream(packetPayload)); + + processEventData(data, player); + + data.close(); + } catch (IOException e) { + LogHelper.info("DataInputStream had a problem closing. Good for it."); + //e.printStackTrace(); + } + } + + private void processEventData(DataInputStream data, EntityPlayerMP player) throws IOException { + int eventId = data.readInt(); + + if (eventId == EventType.INVENTORY_UPDATE.ordinal()) { + EventInventoryUpdate eventData = new EventInventoryUpdate(data); + eventData.process(player); + } + else { + throw new InvalidEventTypeIndexException(""); + } + } + +} diff --git a/src/main/java/magicbees/main/utils/net/PacketInventoryUpdate.java b/src/main/java/magicbees/main/utils/net/PacketInventoryUpdate.java deleted file mode 100644 index 4670eff..0000000 --- a/src/main/java/magicbees/main/utils/net/PacketInventoryUpdate.java +++ /dev/null @@ -1,5 +0,0 @@ -package magicbees.main.utils.net; - -public class PacketInventoryUpdate { - -} diff --git a/src/main/java/magicbees/tileentity/TileEntityThaumicApiary.java b/src/main/java/magicbees/tileentity/TileEntityThaumicApiary.java index 02808dc..18144c3 100644 --- a/src/main/java/magicbees/tileentity/TileEntityThaumicApiary.java +++ b/src/main/java/magicbees/tileentity/TileEntityThaumicApiary.java @@ -1,6 +1,8 @@ package magicbees.tileentity; +import magicbees.bees.BeeManager; import magicbees.main.CommonProxy; +import magicbees.main.MagicBees; import magicbees.main.utils.LogHelper; import magicbees.reference.Names; import net.minecraft.entity.player.EntityPlayer; @@ -17,7 +19,6 @@ import net.minecraftforge.common.util.Constants; import com.mojang.authlib.GameProfile; -import forestry.api.apiculture.BeeManager; import forestry.api.apiculture.IBee; import forestry.api.apiculture.IBeeGenome; import forestry.api.apiculture.IBeeHousing; @@ -28,12 +29,9 @@ import forestry.api.core.EnumTemperature; import forestry.api.core.ErrorStateRegistry; import forestry.api.core.IErrorState; import forestry.api.genetics.IIndividual; -import forestry.core.config.ForestryItem; import forestry.core.inventory.InvTools; import forestry.core.inventory.InventoryAdapter; -import forestry.core.proxy.Proxies; import forestry.core.utils.Utils; -import forestry.plugins.PluginApiculture; public class TileEntityThaumicApiary extends TileEntity implements ISidedInventory, IBeeHousing { @@ -62,7 +60,7 @@ public class TileEntityThaumicApiary extends TileEntity implements ISidedInvento public TileEntityThaumicApiary() { items = new ItemStack[12]; - logic = PluginApiculture.beeInterface.createBeekeepingLogic(this); + logic = BeeManager.beeRoot.createBeekeepingLogic(this); } public void setOwner(EntityPlayer player) { this.ownerName = player.getGameProfile(); } @@ -92,15 +90,17 @@ public class TileEntityThaumicApiary extends TileEntity implements ISidedInvento return true; } - // TODO: Investigate this :D @Override public void onQueenChange(ItemStack queenStack) { - + if (!worldObj.isRemote) { + MagicBees.object.netHandler.sendInventoryUpdate(this, SLOT_QUEEN, queenStack); + this.markDirty(); + } } @Override public void wearOutEquipment(int amount) { - int wear = Math.round(amount * PluginApiculture.beeInterface.getBeekeepingMode(worldObj).getWearModifier()); + int wear = Math.round(amount * BeeManager.beeRoot.getBeekeepingMode(worldObj).getWearModifier()); for (int i = SLOT_FRAME_START; i < SLOT_FRAME_START + SLOT_FRAME_COUNT; i++) { if (getStackInSlot(i) == null) { @@ -111,7 +111,7 @@ public class TileEntityThaumicApiary extends TileEntity implements ISidedInvento } setInventorySlotContents(i, ((IHiveFrame) getStackInSlot(i).getItem()).frameUsed(this, getStackInSlot(i), - PluginApiculture.beeInterface.getMember(getStackInSlot(SLOT_QUEEN)), wear)); + BeeManager.beeRoot.getMember(getStackInSlot(SLOT_QUEEN)), wear)); } } @@ -398,14 +398,14 @@ public class TileEntityThaumicApiary extends TileEntity implements ISidedInvento @Override public boolean canInsertItem(int slot, ItemStack itemStack, int side) { - if(slot == SLOT_QUEEN && PluginApiculture.beeInterface.isMember(itemStack) - && !PluginApiculture.beeInterface.isDrone(itemStack)) { + if(slot == SLOT_QUEEN && BeeManager.beeRoot.isMember(itemStack) + && !BeeManager.beeRoot.isDrone(itemStack)) { return true; } - else if (slot == SLOT_DRONE && PluginApiculture.beeInterface.isDrone(itemStack)) { + else if (slot == SLOT_DRONE && BeeManager.beeRoot.isDrone(itemStack)) { return true; } - return slot == SLOT_DRONE && PluginApiculture.beeInterface.isDrone(itemStack); + return slot == SLOT_DRONE && BeeManager.beeRoot.isDrone(itemStack); } @Override @@ -428,10 +428,10 @@ public class TileEntityThaumicApiary extends TileEntity implements ISidedInvento return 0; } - if (ForestryItem.beeQueenGE.isItemEqual(inventory.getStackInSlot(SLOT_QUEEN))) { - return PluginApiculture.beeInterface.getMember(getStackInSlot(SLOT_QUEEN)).getHealth(); + if (BeeManager.beeRoot.isMated(getStackInSlot(SLOT_QUEEN))) { + return BeeManager.beeRoot.getMember(getStackInSlot(SLOT_QUEEN)).getHealth(); } - else if (ForestryItem.beePrincessGE.isItemEqual(getStackInSlot(SLOT_QUEEN))) { + else if (!BeeManager.beeRoot.isDrone(getStackInSlot(SLOT_QUEEN))) { return displayHealth; } else { @@ -443,10 +443,10 @@ public class TileEntityThaumicApiary extends TileEntity implements ISidedInvento if (getStackInSlot(SLOT_QUEEN) == null) { return 0; } - if (ForestryItem.beeQueenGE.isItemEqual(getStackInSlot(SLOT_QUEEN))) { - return PluginApiculture.beeInterface.getMember(getStackInSlot(SLOT_QUEEN)).getMaxHealth(); + if (BeeManager.beeRoot.isMated(getStackInSlot(SLOT_QUEEN))) { + return BeeManager.beeRoot.getMember(getStackInSlot(SLOT_QUEEN)).getMaxHealth(); } - else if (ForestryItem.beePrincessGE.isItemEqual(getStackInSlot(SLOT_QUEEN))) { + else if (!BeeManager.beeRoot.isDrone(getStackInSlot(SLOT_QUEEN))) { return displayHealthMax; } else { @@ -531,11 +531,11 @@ public class TileEntityThaumicApiary extends TileEntity implements ISidedInvento updateBiome(); } - if (!Proxies.common.isSimulating(worldObj)) { - updateClientSide(); + if (worldObj.isRemote) { + updateServerSide(); } else { - updateServerSide(); + updateClientSide(); } } @@ -552,9 +552,9 @@ public class TileEntityThaumicApiary extends TileEntity implements ISidedInvento } public void updateClientSide() { - if (PluginApiculture.beeInterface.isMated(getStackInSlot(SLOT_QUEEN))) { - if (getErrorState() == ErrorStateRegistry.getErrorState("OK") && worldObj.getTotalWorldTime() % 2 % 2 == 0) { - IBee displayQueen = PluginApiculture.beeInterface.getMember(getStackInSlot(SLOT_QUEEN)); + if (BeeManager.beeRoot.isMated(getStackInSlot(SLOT_QUEEN))) { + if (getErrorState() == ErrorStateRegistry.getErrorState("OK") && worldObj.getTotalWorldTime() % 10 == 0) { + IBee displayQueen = BeeManager.beeRoot.getMember(getStackInSlot(SLOT_QUEEN)); displayQueen.doFX(logic.getEffectData(), this); } } @@ -568,7 +568,7 @@ public class TileEntityThaumicApiary extends TileEntity implements ISidedInvento return; } - if (worldObj.getTotalWorldTime() % 200 * 10 == 0) { + if (worldObj.getTotalWorldTime() % 5 == 0) { onQueenChange(getStackInSlot(SLOT_QUEEN)); } }