diff --git a/dependencies.gradle b/dependencies.gradle index dc4199e..a7ff23d 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -2,9 +2,9 @@ dependencies { compile('com.github.GTNewHorizons:ForestryMC:4.6.6:dev') - compile('thaumcraft:Thaumcraft:1.7.10-4.2.3.5:dev') compile('com.github.GTNewHorizons:Baubles:1.0.1.14:dev') compileOnly('com.github.GTNewHorizons:Botania:1.9.17-GTNH:api') {transitive = false} + compileOnly('thaumcraft:Thaumcraft:1.7.10-4.2.3.5:dev') {transitive = false} } diff --git a/src/main/java/magicbees/client/gui/ContainerEffectJar.java b/src/main/java/magicbees/client/gui/ContainerEffectJar.java index ebc6ca5..d504f10 100644 --- a/src/main/java/magicbees/client/gui/ContainerEffectJar.java +++ b/src/main/java/magicbees/client/gui/ContainerEffectJar.java @@ -12,15 +12,27 @@ import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -public class ContainerEffectJar extends effectContainer { +public class ContainerEffectJar extends Container { + + public TileEntityEffectJar jar; public int lastBeeHealth = 0; public int speciesColour = 0xffffff; - TileEntityEffectJar jar; public ContainerEffectJar(TileEntityEffectJar tileEntityEffectJar, EntityPlayer player) { - super(tileEntityEffectJar, player); - jar = (TileEntityEffectJar) inventory; + this.jar = tileEntityEffectJar; + this.addSlotToContainer( + new SlotCustomItems(this.jar, 0, 80, 22, GameRegistry.findItemStack("Forestry", "beeDroneGE", 1))); + + for (int i = 0; i < 3; ++i) { + for (int j = 0; j < 9; ++j) { + this.addSlotToContainer(new Slot(player.inventory, j + i * 9 + 9, 8 + j * 18, 74 + i * 18)); + } + } + + for (int i = 0; i < 9; ++i) { + this.addSlotToContainer(new Slot(player.inventory, i, 8 + i * 18, 132)); + } } @Override @@ -63,4 +75,29 @@ public class ContainerEffectJar extends effectContainer { public boolean canInteractWith(EntityPlayer entityplayer) { return this.jar.isUseableByPlayer(entityplayer); } + + @Override + public ItemStack transferStackInSlot(EntityPlayer player, int slot) { + Slot itemSlot = this.getSlot(slot); + boolean clearSlot = false; + + if (itemSlot != null && itemSlot.getHasStack()) { + ItemStack srcStack = itemSlot.getStack(); + if (slot == 0 && srcStack != null) { + clearSlot = this.mergeItemStack(srcStack, 1, 36 + 1, false); + } else { + if (this.getSlot(0).isItemValid(srcStack)) { + clearSlot = this.mergeItemStack(srcStack, 0, 1, false); + } + } + } + + if (clearSlot) { + itemSlot.putStack(null); + } + itemSlot.onSlotChanged(); + player.inventory.markDirty(); + + return null; + } } diff --git a/src/main/java/magicbees/client/gui/ContainerEffectRing.java b/src/main/java/magicbees/client/gui/ContainerEffectRing.java index 5f9691c..56030ec 100644 --- a/src/main/java/magicbees/client/gui/ContainerEffectRing.java +++ b/src/main/java/magicbees/client/gui/ContainerEffectRing.java @@ -2,26 +2,16 @@ package magicbees.client.gui; import magicbees.itemInventories.InventoryBeeRing; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.Container; -import net.minecraft.inventory.Slot; -import net.minecraft.item.ItemStack; +import net.minecraft.entity.player.InventoryPlayer; import cpw.mods.fml.common.registry.GameRegistry; +import forestry.core.gui.ContainerItemInventory; -public class ContainerEffectRing extends effectContainer { +public class ContainerEffectRing extends ContainerItemInventory { - public ContainerEffectRing(InventoryBeeRing IBR, EntityPlayer player) { - super(IBR, player); - } - - @Override - public boolean canInteractWith(EntityPlayer player) { - return true; - } - - @Override - public void detectAndSendChanges() { - super.detectAndSendChanges(); + public ContainerEffectRing(InventoryBeeRing inventory, InventoryPlayer playerInventory) { + super(inventory, playerInventory, 8, 74); + addSlotToContainer( + new SlotCustomItems(inventory, 0, 80, 22, GameRegistry.findItemStack("Forestry", "beeDroneGE", 1))); } } diff --git a/src/main/java/magicbees/client/gui/GUIEffectJar.java b/src/main/java/magicbees/client/gui/GUIEffectJar.java index 883ed82..87242f7 100644 --- a/src/main/java/magicbees/client/gui/GUIEffectJar.java +++ b/src/main/java/magicbees/client/gui/GUIEffectJar.java @@ -9,14 +9,24 @@ import net.minecraft.util.ResourceLocation; import org.lwjgl.opengl.GL11; -public class GUIEffectJar extends effectGui { +public class GUIEffectJar extends GuiContainer { public static final String BACKGROUND_FILE = "jarScreen.png"; public static final ResourceLocation BACKGROUND_LOCATION = new ResourceLocation( CommonProxy.DOMAIN, - CommonProxy.GUI_TEXTURE + BACKGROUND_FILE); + CommonProxy.GUI_TEXTURE + "jarScreen.png"); + private static final int WIDTH = 176; + private static final int HEIGHT = 156; + private static final int BAR_DEST_X = 117; + private static final int BAR_DEST_Y = 10; + + private static final int BAR_SRC_X = 176; + private static final int BAR_SRC_Y = 0; + + private static final int BAR_WIDTH = 10; + private static final int BAR_HEIGHT = 40; public GUIEffectJar(TileEntityEffectJar jar, EntityPlayer player) { super(new ContainerEffectJar(jar, player)); @@ -24,6 +34,11 @@ public class GUIEffectJar extends effectGui { this.ySize = HEIGHT; } + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) { + fontRendererObj.drawString("Inventory", 9, 63, 0); + } + @Override protected void drawGuiContainerBackgroundLayer(float f, int i, int j) { GL11.glColor4f(1f, 1f, 1f, 1f); @@ -32,7 +47,7 @@ public class GUIEffectJar extends effectGui { this.drawTexturedModalRect(this.guiLeft, this.guiTop, 0, 0, xSize, ySize); - TileEntityEffectJar jar = (TileEntityEffectJar) ((ContainerEffectJar) this.inventorySlots).inventory; + TileEntityEffectJar jar = ((ContainerEffectJar) this.inventorySlots).jar; float r = ((jar.currentBeeColour >> 16) & 255) / 255f; float g = ((jar.currentBeeColour >> 8) & 255) / 255f; float b = (jar.currentBeeColour & 255) / 255f; diff --git a/src/main/java/magicbees/client/gui/GUIEffectRing.java b/src/main/java/magicbees/client/gui/GUIEffectRing.java index 704c856..02ea052 100644 --- a/src/main/java/magicbees/client/gui/GUIEffectRing.java +++ b/src/main/java/magicbees/client/gui/GUIEffectRing.java @@ -1,50 +1,57 @@ package magicbees.client.gui; -import magicbees.item.ItemBeeRing; import magicbees.itemInventories.InventoryBeeRing; import magicbees.main.CommonProxy; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.IInventory; import net.minecraft.util.ResourceLocation; import org.lwjgl.opengl.GL11; -public class GUIEffectRing extends effectGui { +import forestry.core.gui.GuiForestry; + +public class GUIEffectRing extends GuiForestry { public static final String BACKGROUND_FILE = "ringScreen.png"; public static final ResourceLocation BACKGROUND_LOCATION = new ResourceLocation( CommonProxy.DOMAIN, CommonProxy.GUI_TEXTURE + BACKGROUND_FILE); + private static final int BAR_DEST_X = 117; + private static final int BAR_DEST_Y = 10; - public GUIEffectRing(ItemStack itemStack, EntityPlayer player) { - super( - new ContainerEffectRing( - ItemBeeRing.getInventory(player, itemStack, player.inventory.currentItem, false), - player)); - this.xSize = WIDTH; - this.ySize = HEIGHT; + private static final int BAR_SRC_X = 176; + private static final int BAR_SRC_Y = 0; + + private static final int BAR_WIDTH = 10; + private static final int BAR_HEIGHT = 40; + + private final InventoryBeeRing inventoryBeeRing; + + protected GUIEffectRing(InventoryBeeRing inventory, InventoryPlayer playerInventory) { + super(BACKGROUND_LOCATION, new ContainerEffectRing(inventory, playerInventory), inventory); + this.inventoryBeeRing = inventory; } - - @Override - protected void drawGuiContainerBackgroundLayer(float f, int i, int j) { + protected void drawGuiContainerBackgroundLayer(float f, int mouseX, int mouseY) { + super.drawGuiContainerBackgroundLayer(f, mouseX, mouseY); + GL11.glColor4f(1f, 1f, 1f, 1f); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_SRC_ALPHA); this.mc.getTextureManager().bindTexture(BACKGROUND_LOCATION); this.drawTexturedModalRect(this.guiLeft, this.guiTop, 0, 0, xSize, ySize); - InventoryBeeRing IBR = (InventoryBeeRing) ((ContainerEffectRing) this.inventorySlots).inventory; - float r = ((IBR.currentBeeColour >> 16) & 255) / 255f; - float g = ((IBR.currentBeeColour >> 8) & 255) / 255f; - float b = (IBR.currentBeeColour & 255) / 255f; + int currentBeeColour = this.inventoryBeeRing.getCurrentBeeColour(); + float r = ((currentBeeColour >> 16) & 255) / 255f; + float g = ((currentBeeColour >> 8) & 255) / 255f; + float b = (currentBeeColour & 255) / 255f; GL11.glColor3f(r, g, b); - int value = BAR_HEIGHT - (IBR.currentBeeHealth * BAR_HEIGHT) / 100; + int value = BAR_HEIGHT - (this.inventoryBeeRing.getCurrentBeeHealth() * BAR_HEIGHT) / 100; this.drawTexturedModalRect( this.guiLeft + BAR_DEST_X, this.guiTop + value + BAR_DEST_Y, diff --git a/src/main/java/magicbees/client/gui/GUIHandler.java b/src/main/java/magicbees/client/gui/GUIHandler.java index e22a3ff..36e7a92 100644 --- a/src/main/java/magicbees/client/gui/GUIHandler.java +++ b/src/main/java/magicbees/client/gui/GUIHandler.java @@ -1,6 +1,6 @@ package magicbees.client.gui; -import magicbees.item.ItemBeeRing; +import magicbees.itemInventories.InventoryBeeRing; import magicbees.tileentity.TileEntityEffectJar; import magicbees.tileentity.TileEntityMagicApiary; @@ -21,9 +21,7 @@ public class GUIHandler implements IGuiHandler { TileEntityMagicApiary tileEntityThaumicApiary = (TileEntityMagicApiary) world.getTileEntity(x, y, z); value = new ContainerMagicApiary(player.inventory, tileEntityThaumicApiary); } else if (ID == UIScreens.EFFECT_RING.ordinal()) { - value = new ContainerEffectRing( - ItemBeeRing.getInventory(player, player.getHeldItem(), player.inventory.currentItem, false), - player); + value = new ContainerEffectRing(new InventoryBeeRing(player.getHeldItem(), player), player.inventory); } return value; @@ -37,7 +35,7 @@ public class GUIHandler implements IGuiHandler { TileEntityMagicApiary tileEntityThaumicApiary = (TileEntityMagicApiary) world.getTileEntity(x, y, z); return new GuiMagicApiary(player.inventory, tileEntityThaumicApiary); } else if (ID == UIScreens.EFFECT_RING.ordinal()) { - return new GUIEffectRing(player.getHeldItem(), player); + return new GUIEffectRing(new InventoryBeeRing(player.getHeldItem(), player), player.inventory); } return null; } diff --git a/src/main/java/magicbees/client/gui/effectContainer.java b/src/main/java/magicbees/client/gui/effectContainer.java deleted file mode 100644 index cd44ad7..0000000 --- a/src/main/java/magicbees/client/gui/effectContainer.java +++ /dev/null @@ -1,55 +0,0 @@ -package magicbees.client.gui; - - -import cpw.mods.fml.common.registry.GameRegistry; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.Container; -import net.minecraft.inventory.IInventory; -import net.minecraft.inventory.Slot; -import net.minecraft.item.ItemStack; - -public abstract class effectContainer extends Container { - - public IInventory inventory; - - public effectContainer(IInventory inventory, EntityPlayer player) { - this.inventory = inventory; - this.addSlotToContainer( - new SlotCustomItems(this.inventory, 0, 80, 22, GameRegistry.findItemStack("Forestry", "beeDroneGE", 1))); - - for (int i = 0; i < 3; ++i) { - for (int j = 0; j < 9; ++j) { - this.addSlotToContainer(new Slot(player.inventory, j + i * 9 + 9, 8 + j * 18, 74 + i * 18)); - } - } - - for (int i = 0; i < 9; ++i) { - this.addSlotToContainer(new Slot(player.inventory, i, 8 + i * 18, 132)); - } - } - - @Override - public ItemStack transferStackInSlot(EntityPlayer player, int slot) { - Slot itemSlot = this.getSlot(slot); - boolean clearSlot = false; - - if (itemSlot != null && itemSlot.getHasStack()) { - ItemStack srcStack = itemSlot.getStack(); - if (slot == 0 && srcStack != null) { - clearSlot = this.mergeItemStack(srcStack, 1, 36 + 1, false); - } else { - if (this.getSlot(0).isItemValid(srcStack)) { - clearSlot = this.mergeItemStack(srcStack, 0, 1, false); - } - } - } - - if (clearSlot) { - itemSlot.putStack(null); - } - itemSlot.onSlotChanged(); - player.inventory.markDirty(); - - return null; - } -} diff --git a/src/main/java/magicbees/client/gui/effectGui.java b/src/main/java/magicbees/client/gui/effectGui.java deleted file mode 100644 index cbcd710..0000000 --- a/src/main/java/magicbees/client/gui/effectGui.java +++ /dev/null @@ -1,31 +0,0 @@ -package magicbees.client.gui; - -import magicbees.itemInventories.InventoryBeeRing; -import net.minecraft.client.gui.inventory.GuiContainer; -import net.minecraft.inventory.Container; -import org.lwjgl.opengl.GL11; - -public abstract class effectGui extends GuiContainer { - - protected static final int WIDTH = 176; - protected static final int HEIGHT = 156; - - protected static final int BAR_DEST_X = 117; - protected static final int BAR_DEST_Y = 10; - - protected static final int BAR_SRC_X = 176; - protected static final int BAR_SRC_Y = 0; - - protected static final int BAR_WIDTH = 10; - protected static final int BAR_HEIGHT = 40; - - public effectGui(Container cont) { - super(cont); - } - - @Override - protected void drawGuiContainerForegroundLayer(int par1, int par2) { - fontRendererObj.drawString("Inventory", 9, 63, 0); - } - -} diff --git a/src/main/java/magicbees/item/ItemBeeRing.java b/src/main/java/magicbees/item/ItemBeeRing.java index 025bc94..ceb76ec 100644 --- a/src/main/java/magicbees/item/ItemBeeRing.java +++ b/src/main/java/magicbees/item/ItemBeeRing.java @@ -1,52 +1,63 @@ package magicbees.item; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +import magicbees.bees.BeeManager; import magicbees.client.gui.UIScreens; import magicbees.itemInventories.InventoryBeeRing; import magicbees.main.CommonProxy; import magicbees.main.MagicBees; +import magicbees.main.utils.TabMagicBees; import magicbees.tileentity.RingHousing; -import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import net.minecraft.util.IIcon; import net.minecraft.world.World; -import thaumcraft.common.Thaumcraft; import baubles.api.BaubleType; import baubles.api.IBauble; import baubles.common.container.InventoryBaubles; import baubles.common.lib.PlayerHandler; import cpw.mods.fml.common.registry.GameRegistry; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; import forestry.api.apiculture.IBee; +import forestry.api.genetics.IEffectData; public class ItemBeeRing extends Item implements IBauble { - @SideOnly(Side.CLIENT) - private IIcon icon; - - private final int DRONE_SLOT = 0; - private final int QUEEN_SLOT = 1; + private static final Map PLAYER_EFFECTS = new HashMap<>(); public ItemBeeRing() { super(); - this.maxStackSize = 1; - this.canRepair = false; + this.setMaxStackSize(1); + this.setNoRepair(); this.setMaxDamage(0); - this.setCreativeTab(Thaumcraft.tabTC); + this.setTextureName(CommonProxy.DOMAIN + ":beeRing"); + this.setCreativeTab(TabMagicBees.tabMagicBees); this.setUnlocalizedName("beeRing"); GameRegistry.registerItem(this, "beeRing"); } - // Equips item if shift is held and otherwise it opens the GUI @Override public ItemStack onItemRightClick(ItemStack itemStack, World world, EntityPlayer player) { if (!world.isRemote) { - if (!player.isSneaking()) { + if (player.isSneaking()) { + InventoryBaubles baubles = PlayerHandler.getPlayerBaubles(player); + for (int i = 0; i < baubles.getSizeInventory(); i++) { + if (baubles.isItemValidForSlot(i, itemStack)) { + ItemStack stackInSlot = baubles.getStackInSlot(i); + if (stackInSlot == null) { + baubles.setInventorySlotContents(i, itemStack.copy()); + if (!player.capabilities.isCreativeMode) + player.inventory.setInventorySlotContents(player.inventory.currentItem, null); + break; + } + } + } + } else { player.openGui( MagicBees.object, UIScreens.EFFECT_RING.ordinal(), @@ -54,28 +65,11 @@ public class ItemBeeRing extends Item implements IBauble { (int) player.posX, (int) player.posY, (int) player.posZ); - } else { - InventoryBaubles baubles = PlayerHandler.getPlayerBaubles(player); - - for (int i = 0; i < baubles.getSizeInventory(); ++i) { - if (baubles.getStackInSlot(i) == null && baubles.isItemValidForSlot(i, itemStack)) { - baubles.setInventorySlotContents(i, itemStack.copy()); - player.inventory.setInventorySlotContents(player.inventory.currentItem, null); - this.onEquipped(itemStack, player); - break; - } - } } } return itemStack; } - @Override - @SideOnly(Side.CLIENT) - public void registerIcons(IIconRegister iconRegister) { - this.itemIcon = iconRegister.registerIcon(CommonProxy.DOMAIN + ":beeRing"); - } - @Override public BaubleType getBaubleType(ItemStack itemStack) { return BaubleType.RING; @@ -83,109 +77,103 @@ public class ItemBeeRing extends Item implements IBauble { @Override public void onWornTick(ItemStack itemStack, EntityLivingBase entityLivingBase) { + if (!(entityLivingBase instanceof EntityPlayer)) { + return; + } - // If I'm being honest I'm not sure if this needs to go here, but it works if I put it here. - if (!entityLivingBase.worldObj.isRemote) { - if (entityLivingBase instanceof EntityPlayer) { - InventoryBaubles baubles = PlayerHandler.getPlayerBaubles((EntityPlayer) entityLivingBase); - int slot = -1; - for (int i = 0; i < baubles.getSizeInventory(); i++) { - if (baubles.getStackInSlot(i) == itemStack) { - slot = i; - break; - } - } + EntityPlayer player = (EntityPlayer) entityLivingBase; + InventoryBeeRing inventoryBeeRing = new InventoryBeeRing(itemStack, player); - // Logic to run the ring (this logic could be moved out of the item class, but it seems fine here) - if (slot != -1) { - InventoryBeeRing inventoryRing = getInventory((EntityPlayer) entityLivingBase, itemStack, slot, true); - if (hasQueen(itemStack, (EntityPlayer) entityLivingBase, slot, inventoryRing)) { - tickQueen(itemStack, (EntityPlayer) entityLivingBase, slot, inventoryRing); - } else if (hasDrone(itemStack, (EntityPlayer) entityLivingBase, slot, inventoryRing)) { - createQueenFromDrone(itemStack, (EntityPlayer) entityLivingBase, slot, inventoryRing); - } - } - } + if (inventoryBeeRing.hasQueen()) { + tickQueen(player, inventoryBeeRing); + } else if (inventoryBeeRing.hasDrone()) { + createQueenFromDrone(inventoryBeeRing); } } - private void createQueenFromDrone(ItemStack itemStack, EntityPlayer player, int slot, InventoryBeeRing ringInventory) { - - ItemStack droneStack = ringInventory.getStackInSlot(0); - if (magicbees.bees.BeeManager.beeRoot.isDrone(droneStack)) { - IBee bee = magicbees.bees.BeeManager.beeRoot.getMember(droneStack); + private void createQueenFromDrone(InventoryBeeRing inventoryBeeRing) { + ItemStack droneStack = inventoryBeeRing.getDrone(); + if (BeeManager.beeRoot.isDrone(droneStack)) { + IBee bee = BeeManager.beeRoot.getMember(droneStack); if (droneStack.stackSize == 1) { - ringInventory.setInventorySlotContents(0, null); + inventoryBeeRing.setDrone(null); } else { - droneStack.stackSize = droneStack.stackSize - 1; - ringInventory.setInventorySlotContents(0, droneStack); + droneStack.stackSize--; + inventoryBeeRing.setDrone(droneStack); } - ItemStack temp = droneStack.copy(); - temp.stackSize = 1; - ringInventory.setInventorySlotContents(1, temp); - int current = bee.getHealth(); - int max = bee.getMaxHealth(); - ringInventory.setCurrentBeeHealth((current * 100) / max); - ringInventory.setCurrentBeeColour(bee.getGenome().getPrimary().getIconColour(0)); + ItemStack queenStack = droneStack.copy(); + queenStack.stackSize = 1; + inventoryBeeRing.setQueen(queenStack); + + int beeHealth = bee.getHealth(); + int maxBeeHealth = bee.getMaxHealth(); + inventoryBeeRing.setCurrentBeeHealth((beeHealth * 100) / maxBeeHealth); + inventoryBeeRing.setCurrentBeeColour(bee.getGenome().getPrimary().getIconColour(0)); } } - private boolean hasDrone(ItemStack itemStack, EntityPlayer player, int slot, InventoryBeeRing ringInventory) { - return getInventory(player, itemStack, slot, true).getStackInSlot(DRONE_SLOT) != null; - } + private void tickQueen(EntityPlayer player, InventoryBeeRing inventoryBeeRing) { + ItemStack queenStack = inventoryBeeRing.getQueen(); + IBee queen = BeeManager.beeRoot.getMember(queenStack); - private void tickQueen(ItemStack itemStack, EntityPlayer player, int slot, InventoryBeeRing ringInventory) { + inventoryBeeRing.setCurrentBeeHealth((queen.getHealth() * 100) / queen.getMaxHealth()); + inventoryBeeRing.setCurrentBeeColour(queen.getGenome().getPrimary().getIconColour(0)); + IEffectData[][] effects = getPlayerEffects(player); + int index = inventoryBeeRing.getRingSlotIndex(); + RingHousing housingLogic = new RingHousing(player, inventoryBeeRing); + effects[index] = queen.doEffect(effects[index], housingLogic); + if (player.worldObj.isRemote && player.worldObj.getWorldTime() % 5 == 0) { + effects[index] = queen.doFX(effects[index], housingLogic); + } + setPlayerEffects(player, effects); - IBee queen = magicbees.bees.BeeManager.beeRoot.getMember(ringInventory.getStackInSlot(QUEEN_SLOT)); - ringInventory.setCurrentBeeHealth((queen.getHealth() * 100) / queen.getMaxHealth()); - ringInventory.setCurrentBeeColour(queen.getGenome().getPrimary().getIconColour(0)); - - RingHousing housingLogic = new RingHousing(player, ringInventory); - - ringInventory.setEffectAndInitialize(queen); - ringInventory.effectData = queen.doEffect(ringInventory.effectData, housingLogic); - ringInventory.writeEffectNBT(); - - // Crashes irregularly for some reason I can't figure out, but this is just the bee effects around you, so it's - // not a huge deal. It would be nice to have though - // I will get around to it later. (Crash has something to do with entityFX when the player is moving) - - // if (player.getEntityWorld().getWorldTime() % 5 == 0) { - // IBR.effectData = queen.doFX(IBR.effectData, housingLogic); - // } - - // run the queen - if (ringInventory.throttle > 550) { - ringInventory.setThrottle(0); - queen.age(player.getEntityWorld(), 0.26f); + int throttle = inventoryBeeRing.getThrottle(); + if (throttle > 550) { + inventoryBeeRing.setThrottle(0); + queen.age(player.worldObj, 0.26f); if (queen.getHealth() == 0) { - ringInventory.setInventorySlotContents(1, null); - ringInventory.setCurrentBeeHealth(0); - ringInventory.setCurrentBeeColour(0x0ffffff); + inventoryBeeRing.setQueen(null); + inventoryBeeRing.setCurrentBeeHealth(0); + inventoryBeeRing.setCurrentBeeColour(0x0ffffff); } else { - queen.writeToNBT(ringInventory.contents[QUEEN_SLOT].stackTagCompound); + queen.writeToNBT(queenStack.getTagCompound()); + inventoryBeeRing.setQueen(queenStack); } } else { - ringInventory.setThrottle(ringInventory.throttle + 1); + inventoryBeeRing.setThrottle(throttle + 1); } } - private boolean hasQueen(ItemStack itemStack, EntityPlayer player, int slot, InventoryBeeRing ringInventory) { - return ringInventory.getStackInSlot(QUEEN_SLOT) != null; + private static IEffectData[][] getPlayerEffects(EntityPlayer player) { + UUID id = player.getUniqueID(); + return PLAYER_EFFECTS.containsKey(id) ? PLAYER_EFFECTS.get(id) + : new IEffectData[][] { new IEffectData[2], new IEffectData[2] }; + } + + private static void setPlayerEffects(EntityPlayer player, IEffectData[][] effects) { + PLAYER_EFFECTS.put(player.getUniqueID(), effects); } @Override public void onEquipped(ItemStack itemStack, EntityLivingBase entityLivingBase) { - + if (entityLivingBase instanceof EntityPlayer) { + EntityPlayer player = (EntityPlayer) entityLivingBase; + InventoryBeeRing inventoryBeeRing = new InventoryBeeRing(itemStack, player); + InventoryBaubles baubles = PlayerHandler.getPlayerBaubles(player); + for (int i = 0; i < baubles.getSizeInventory(); i++) { + if (baubles.getStackInSlot(i) == itemStack) { + inventoryBeeRing.setRingSlotIndex(i == 1 ? 0 : 1); + break; + } + } + } } @Override - public void onUnequipped(ItemStack itemStack, EntityLivingBase entityLivingBase) { - - } + public void onUnequipped(ItemStack itemStack, EntityLivingBase entityLivingBase) {} @Override public boolean canEquip(ItemStack itemStack, EntityLivingBase entityLivingBase) { @@ -196,9 +184,4 @@ public class ItemBeeRing extends Item implements IBauble { public boolean canUnequip(ItemStack itemStack, EntityLivingBase entityLivingBase) { return true; } - - public static InventoryBeeRing getInventory(EntityPlayer player, ItemStack itemStack, int slot, - boolean baubleFlag) { - return new InventoryBeeRing(itemStack, player, slot, baubleFlag); - } } diff --git a/src/main/java/magicbees/itemInventories/InventoryBeeRing.java b/src/main/java/magicbees/itemInventories/InventoryBeeRing.java index c040c7e..7a9c9bf 100644 --- a/src/main/java/magicbees/itemInventories/InventoryBeeRing.java +++ b/src/main/java/magicbees/itemInventories/InventoryBeeRing.java @@ -1,306 +1,110 @@ package magicbees.itemInventories; import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; -import baubles.common.container.InventoryBaubles; -import baubles.common.lib.PlayerHandler; -import forestry.api.apiculture.EnumBeeChromosome; -import forestry.api.apiculture.IAlleleBeeEffect; -import forestry.api.apiculture.IBee; -import forestry.api.genetics.IEffectData; +import forestry.core.inventory.ItemInventory; -public class InventoryBeeRing implements IInventory { +public class InventoryBeeRing extends ItemInventory { - public EntityPlayer player; - public ItemStack parent; - public ItemStack[] contents; - public int itemLocatedSlot; - public boolean baubleFlag; - public IEffectData[] effectData = new IEffectData[2]; + private static final String KEY_SLOT_INDEX = "SlotIndex"; + private static final String KEY_HEALTH = "Health"; + private static final String KEY_THROTTLE = "Throttle"; + private static final String KEY_COLOUR = "Colour"; - public int currentBeeHealth; - public int currentBeeColour; - public int throttle; + private static final int DRONE_SLOT = 0; + private static final int QUEEN_SLOT = 1; - private final static String KEY_SLOTS = "Slots"; - private final static String KEY_HEALTH = "Health"; - private final static String KEY_THROTTLE = "Throttle"; + private int ringSlotIndex; + private int currentBeeHealth; + private int currentBeeColour; + private int throttle; - private final static String KEY_EFFECT_1 = "Effect1"; - private final static String KEY_EFFECT_2 = "Effect2"; - private final static String KEY_COLOUR = "Colour"; - - public InventoryBeeRing(ItemStack stack, EntityPlayer player, int slot, boolean baubleFlag) { - this.parent = stack; - this.player = player; - this.contents = new ItemStack[2]; - this.itemLocatedSlot = slot; - this.baubleFlag = baubleFlag; - - readFromNBT(stack.getTagCompound()); + public InventoryBeeRing(ItemStack stack, EntityPlayer player) { + super(player, 2, stack); } + @Override public void readFromNBT(NBTTagCompound compound) { - if (compound == null) { - return; - } - - // Initializing slot contents - if (compound.hasKey(KEY_SLOTS)) { - NBTTagCompound nbtSlots = compound.getCompoundTag(KEY_SLOTS); - for (int i = 0; i < contents.length; i++) { - String slotKey = getSlotNBTKey(i); - if (nbtSlots.hasKey(slotKey)) { - NBTTagCompound itemNbt = nbtSlots.getCompoundTag(slotKey); - ItemStack itemStack = ItemStack.loadItemStackFromNBT(itemNbt); - contents[i] = itemStack; - } else { - contents[i] = null; - } - } - } - - // Initializing Throttle for logic and Health, Colour for GUI effects - if (compound.getInteger(KEY_THROTTLE) != 0) { - throttle = compound.getInteger(KEY_THROTTLE); - } - - if (compound.getInteger(KEY_HEALTH) != 0) { - currentBeeHealth = compound.getInteger(KEY_HEALTH); - } - - if (compound.getInteger(KEY_COLOUR) != 0) { - currentBeeColour = compound.getInteger(KEY_COLOUR); - } - } - - // Helper method for NBT Keys - private static String getSlotNBTKey(int i) { - return Integer.toString(i, Character.MAX_RADIX); - } - - @Override - public int getSizeInventory() { - return contents.length; - } - - @Override - public ItemStack getStackInSlot(int slot) { - return contents[slot]; - } - - @Override - public ItemStack decrStackSize(int slot, int count) { - ItemStack stack = getStackInSlot(slot); - if (stack == null) { - return null; - } - - if (stack.stackSize <= count) { - setInventorySlotContents(slot, null); - return stack; - } else { - ItemStack product = stack.splitStack(count); - setInventorySlotContents(slot, stack); - return product; - } - } - - @Override - public ItemStack getStackInSlotOnClosing(int slot) { - ItemStack toReturn = getStackInSlot(slot); - - if (toReturn != null) { - setInventorySlotContents(slot, null); - } - - return toReturn; - } - - // sets the internal inventory of this class to the provided item stack and writes that to the NBT of the parent - // (the ring) - @Override - public void setInventorySlotContents(int slot, ItemStack stack) { - if (stack != null && stack.stackSize == 0) { - stack = null; - } - - contents[slot] = stack; - - ItemStack parent = this.parent; - - NBTTagCompound nbt = parent.getTagCompound(); - if (nbt == null) { - nbt = new NBTTagCompound(); - parent.setTagCompound(nbt); - } - - NBTTagCompound slotNbt; - if (!nbt.hasKey(KEY_SLOTS)) { - slotNbt = new NBTTagCompound(); - nbt.setTag(KEY_SLOTS, slotNbt); - } else { - slotNbt = nbt.getCompoundTag(KEY_SLOTS); - } - - String slotKey = getSlotNBTKey(slot); - - if (stack == null) { - slotNbt.removeTag(slotKey); - } else { - NBTTagCompound itemNbt = new NBTTagCompound(); - stack.writeToNBT(itemNbt); - - slotNbt.setTag(slotKey, itemNbt); - } - - setInventorySlot(parent); - } - - // private method to manually set the inventory of a player - private void setInventorySlot(ItemStack parent) { - - if (this.player.getHealth() == 0) { - return; - } - - if (baubleFlag) { - InventoryBaubles baubles = PlayerHandler.getPlayerBaubles(this.player); - baubles.setInventorySlotContents(itemLocatedSlot, parent); - } else { - player.inventory.setInventorySlotContents(itemLocatedSlot, parent); - } - } - - // Writes the effectData field to NBT in a readable way (This and the next method could probably be condensed, but - // I feel that this is the most readable form I could come up with. - public void writeEffectNBT() { - NBTTagCompound compound = parent.getTagCompound(); - if (compound == null) { compound = new NBTTagCompound(); - parent.setTagCompound(compound); + getParent().setTagCompound(compound); } - NBTTagCompound slotNbt1; - if (!compound.hasKey(KEY_EFFECT_1)) { - slotNbt1 = new NBTTagCompound(); - compound.setTag(KEY_EFFECT_1, slotNbt1); - } else { - slotNbt1 = compound.getCompoundTag(KEY_EFFECT_1); + super.readFromNBT(compound); + if (compound.hasKey(KEY_SLOT_INDEX)) { + this.ringSlotIndex = compound.getInteger(KEY_SLOT_INDEX); } - - NBTTagCompound slotNbt2; - if (!compound.hasKey(KEY_EFFECT_2)) { - slotNbt2 = new NBTTagCompound(); - compound.setTag(KEY_EFFECT_2, slotNbt2); - } else { - slotNbt2 = compound.getCompoundTag(KEY_EFFECT_2); + if (compound.hasKey(KEY_HEALTH)) { + this.currentBeeHealth = compound.getInteger(KEY_HEALTH); } - - for (int i = 0; i < 5; i++) { - String slotKey = getSlotNBTKey(i); - try { - slotNbt1.setInteger(slotKey + "i", effectData[0].getInteger(i)); - slotNbt1.setBoolean(slotKey + "b", effectData[0].getBoolean(i)); - slotNbt1.setFloat(slotKey + "f", effectData[0].getFloat(i)); - } catch (Exception ignored) {} + if (compound.hasKey(KEY_COLOUR)) { + this.currentBeeColour = compound.getInteger(KEY_COLOUR); } - - for (int i = 0; i < 5; i++) { - String slotKey = getSlotNBTKey(i); - try { - slotNbt2.setInteger(slotKey + "i", effectData[1].getInteger(i)); - slotNbt2.setBoolean(slotKey + "b", effectData[1].getBoolean(i)); - slotNbt2.setFloat(slotKey + "f", effectData[1].getFloat(i)); - } catch (Exception ignored) {} - } - - setInventorySlot(parent); - } - - // Creates the correct implementation of IEffectData and pulls the data saved in the NBT into the effectData field - public void setEffectAndInitialize(IBee queen) { - effectData[0] = queen.getGenome().getEffect().validateStorage(effectData[0]); - effectData[1] = ((IAlleleBeeEffect) queen.getGenome().getInactiveAllele(EnumBeeChromosome.EFFECT)) - .validateStorage(effectData[1]); - - NBTTagCompound compound = parent.getTagCompound(); - - if (compound.hasKey(KEY_EFFECT_1)) { - NBTTagCompound nbtSlots1 = compound.getCompoundTag(KEY_EFFECT_1); - - for (int i = 0; i < 5; i++) { - String slotKey = getSlotNBTKey(i); - - if (nbtSlots1.hasKey(slotKey + "i")) { - int effectNBTInt = nbtSlots1.getInteger(slotKey + "i"); - try { - effectData[0].setInteger(i, effectNBTInt); - } catch (Exception ignored) {} - } - if (nbtSlots1.hasKey(slotKey + "b")) { - boolean effectNBTBool = nbtSlots1.getBoolean(slotKey + "b"); - try { - effectData[0].setBoolean(i, effectNBTBool); - } catch (Exception ignored) {} - } - if (nbtSlots1.hasKey(slotKey + "f")) { - float effectNBTFloat = nbtSlots1.getFloat(slotKey + "f"); - try { - effectData[0].setFloat(i, effectNBTFloat); - } catch (Exception ignored) {} - } - } - } - - if (compound.hasKey(KEY_EFFECT_2)) { - NBTTagCompound nbtSlots2 = compound.getCompoundTag(KEY_EFFECT_2); - - for (int i = 0; i < 5; i++) { - String slotKey = getSlotNBTKey(i); - - if (nbtSlots2.hasKey(slotKey + "i")) { - int effectNBTInt = nbtSlots2.getInteger(slotKey + "i"); - try { - effectData[1].setInteger(i, effectNBTInt); - } catch (Exception ignored) {} - } - if (nbtSlots2.hasKey(slotKey + "b")) { - boolean effectNBTBool = nbtSlots2.getBoolean(slotKey + "b"); - try { - effectData[1].setBoolean(i, effectNBTBool); - } catch (Exception ignored) {} - } - if (nbtSlots2.hasKey(slotKey + "f")) { - float effectNBTFloat = nbtSlots2.getFloat(slotKey + "f"); - try { - effectData[1].setFloat(i, effectNBTFloat); - } catch (Exception ignored) {} - } - } + if (compound.hasKey(KEY_THROTTLE)) { + this.throttle = compound.getInteger(KEY_THROTTLE); } } - // Setters for logic and GUI display info - public void setThrottle(int throttle) { - this.throttle = throttle; - this.parent.getTagCompound().setInteger(KEY_THROTTLE, this.throttle); - setInventorySlot(parent); + public boolean hasDrone() { + return this.getStackInSlot(DRONE_SLOT) != null; + } + + public ItemStack getDrone() { + return this.getStackInSlot(DRONE_SLOT); + } + + public void setDrone(ItemStack droneStack) { + this.setInventorySlotContents(DRONE_SLOT, droneStack); + } + + public boolean hasQueen() { + return this.getStackInSlot(QUEEN_SLOT) != null; + } + + public ItemStack getQueen() { + return this.getStackInSlot(QUEEN_SLOT); + } + + public void setQueen(ItemStack queenStack) { + this.setInventorySlotContents(QUEEN_SLOT, queenStack); + } + + public int getRingSlotIndex() { + return this.ringSlotIndex; + } + + public void setRingSlotIndex(int ringSlotIndex) { + this.ringSlotIndex = ringSlotIndex; + getParent().getTagCompound().setInteger(KEY_SLOT_INDEX, this.ringSlotIndex); + } + + public int getCurrentBeeHealth() { + return this.currentBeeHealth; } public void setCurrentBeeHealth(int health) { this.currentBeeHealth = health; - this.parent.getTagCompound().setInteger(KEY_HEALTH, this.currentBeeHealth); - setInventorySlot(parent); + getParent().getTagCompound().setInteger(KEY_HEALTH, this.currentBeeHealth); + } + + public int getCurrentBeeColour() { + return this.currentBeeColour; } public void setCurrentBeeColour(int colour) { this.currentBeeColour = colour; - this.parent.getTagCompound().setInteger(KEY_COLOUR, this.currentBeeColour); + getParent().getTagCompound().setInteger(KEY_COLOUR, this.currentBeeColour); + } + + public int getThrottle() { + return this.throttle; + } + + public void setThrottle(int throttle) { + this.throttle = throttle; + getParent().getTagCompound().setInteger(KEY_THROTTLE, this.throttle); } @Override @@ -312,28 +116,4 @@ public class InventoryBeeRing implements IInventory { public boolean hasCustomInventoryName() { return false; } - - @Override - public int getInventoryStackLimit() { - return 64; - } - - @Override - public void markDirty() {} - - @Override - public boolean isUseableByPlayer(EntityPlayer player) { - return true; - } - - @Override - public void openInventory() {} - - @Override - public void closeInventory() {} - - @Override - public boolean isItemValidForSlot(int index, ItemStack stack) { - return true; - } } diff --git a/src/main/java/magicbees/tileentity/RingHousing.java b/src/main/java/magicbees/tileentity/RingHousing.java index 6361f03..a738589 100644 --- a/src/main/java/magicbees/tileentity/RingHousing.java +++ b/src/main/java/magicbees/tileentity/RingHousing.java @@ -35,10 +35,10 @@ public class RingHousing implements IBeeHousing { private static final Iterable beeListeners = ImmutableSet.of(new DefaultBeeListener()); private static final Iterable beeModifiers = ImmutableSet.of(new RingHousing.RingHousingModifier()); - public RingHousing(EntityPlayer player, InventoryBeeRing IBR) { + public RingHousing(EntityPlayer player, InventoryBeeRing inventoryBeeRing) { this.player = player; this.biome = player.getEntityWorld().getBiomeGenForCoords((int) player.posX, (int) player.posY); - this.inventory = new RingBeeHousingInventory(IBR); + this.inventory = new RingBeeHousingInventory(inventoryBeeRing); this.beekeepingLogic = BeeManager.beeRoot.createBeekeepingLogic(this); } @@ -115,15 +115,15 @@ public class RingHousing implements IBeeHousing { private static class RingBeeHousingInventory implements IBeeHousingInventory { - private final InventoryBeeRing IBR; + private final InventoryBeeRing inventoryBeeRing; public RingBeeHousingInventory(InventoryBeeRing IBR) { - this.IBR = IBR; + this.inventoryBeeRing = IBR; } @Override public ItemStack getQueen() { - return IBR.getStackInSlot(1); + return inventoryBeeRing.getQueen(); } @Override @@ -133,7 +133,7 @@ public class RingHousing implements IBeeHousing { @Override public void setQueen(ItemStack itemStack) { - IBR.setInventorySlotContents(1, itemStack); + inventoryBeeRing.setQueen(itemStack); } @Override