From 951df8a632657f993203d4847c1f0f02027bd957 Mon Sep 17 00:00:00 2001 From: rjnasers Date: Sat, 22 Apr 2023 11:28:20 -0500 Subject: [PATCH 01/14] Basic bee ring start. --- dependencies.gradle | 5 +- .../client/gui/ContainerEffectRing.java | 65 ++++++++++ .../magicbees/client/gui/GUIEffectRing.java | 42 +++++++ .../java/magicbees/client/gui/GUIHandler.java | 10 +- .../java/magicbees/client/gui/UIScreens.java | 3 +- src/main/java/magicbees/item/ItemBeeRing.java | 92 ++++++++++++++ .../AbstractItemInventories.java | 100 ++++++++++++++++ .../itemInventories/InventoryBeeRing.java | 113 ++++++++++++++++++ src/main/java/magicbees/main/Config.java | 22 +--- .../magicbees/textures/items/beeRing.png | Bin 0 -> 271 bytes 10 files changed, 429 insertions(+), 23 deletions(-) create mode 100644 src/main/java/magicbees/client/gui/ContainerEffectRing.java create mode 100644 src/main/java/magicbees/client/gui/GUIEffectRing.java create mode 100644 src/main/java/magicbees/item/ItemBeeRing.java create mode 100644 src/main/java/magicbees/itemInventories/AbstractItemInventories.java create mode 100644 src/main/java/magicbees/itemInventories/InventoryBeeRing.java create mode 100644 src/main/resources/assets/magicbees/textures/items/beeRing.png diff --git a/dependencies.gradle b/dependencies.gradle index 14f4243..5b7ea58 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -2,8 +2,9 @@ dependencies { compile('com.github.GTNewHorizons:ForestryMC:4.5.2: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:Baubles:1.0.1.14:dev') {transitive = false} compileOnly('com.github.GTNewHorizons:Botania:1.9.2-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/ContainerEffectRing.java b/src/main/java/magicbees/client/gui/ContainerEffectRing.java new file mode 100644 index 0000000..4fa5500 --- /dev/null +++ b/src/main/java/magicbees/client/gui/ContainerEffectRing.java @@ -0,0 +1,65 @@ +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.ICrafting; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +public class ContainerEffectRing extends Container { + + IInventory IBR; + + public ContainerEffectRing(IInventory IBR, EntityPlayer player) { + this.IBR = IBR; + this.addSlotToContainer( + new SlotCustomItems(this.IBR, 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 boolean canInteractWith(EntityPlayer player) { + return true; + } + + @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; + } + + @Override + public void detectAndSendChanges() { + super.detectAndSendChanges(); + } +} diff --git a/src/main/java/magicbees/client/gui/GUIEffectRing.java b/src/main/java/magicbees/client/gui/GUIEffectRing.java new file mode 100644 index 0000000..7cb25fc --- /dev/null +++ b/src/main/java/magicbees/client/gui/GUIEffectRing.java @@ -0,0 +1,42 @@ +package magicbees.client.gui; + +import magicbees.item.ItemBeeRing; +import magicbees.main.CommonProxy; +import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; +import org.lwjgl.opengl.GL11; + +public class GUIEffectRing extends GuiContainer { + + + public static final String BACKGROUND_FILE = "jarScreen.png"; + public static final ResourceLocation BACKGROUND_LOCATION = new ResourceLocation( + CommonProxy.DOMAIN, + CommonProxy.GUI_TEXTURE + "jarScreen.png"); + + private static final int WIDTH = 176; + private static final int HEIGHT = 156; + + public GUIEffectRing(ItemStack itemStack, EntityPlayer player) { + super(new ContainerEffectRing(ItemBeeRing.getInventory(player, itemStack), player)); + this.xSize = WIDTH; + 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); + 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); + } +} diff --git a/src/main/java/magicbees/client/gui/GUIHandler.java b/src/main/java/magicbees/client/gui/GUIHandler.java index a388c87..f68a685 100644 --- a/src/main/java/magicbees/client/gui/GUIHandler.java +++ b/src/main/java/magicbees/client/gui/GUIHandler.java @@ -1,12 +1,15 @@ package magicbees.client.gui; +import magicbees.item.ItemBeeRing; import magicbees.tileentity.TileEntityEffectJar; import magicbees.tileentity.TileEntityMagicApiary; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; import net.minecraft.world.World; import cpw.mods.fml.common.network.IGuiHandler; +import scala.swing.Applet; public class GUIHandler implements IGuiHandler { @@ -19,6 +22,8 @@ public class GUIHandler implements IGuiHandler { } else if (ID == UIScreens.THAUMIC_APIARY.ordinal()) { 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); } return value; @@ -31,8 +36,9 @@ public class GUIHandler implements IGuiHandler { } else if (ID == UIScreens.THAUMIC_APIARY.ordinal()) { TileEntityMagicApiary tileEntityThaumicApiary = (TileEntityMagicApiary) world.getTileEntity(x, y, z); return new GuiMagicApiary(player.inventory, tileEntityThaumicApiary); - } else { - return null; + } else if (ID == UIScreens.EFFECT_RING.ordinal()) { + return new GUIEffectRing(player.getHeldItem() ,player); } + return null; } } diff --git a/src/main/java/magicbees/client/gui/UIScreens.java b/src/main/java/magicbees/client/gui/UIScreens.java index 46d3403..bd27f7e 100644 --- a/src/main/java/magicbees/client/gui/UIScreens.java +++ b/src/main/java/magicbees/client/gui/UIScreens.java @@ -2,5 +2,6 @@ package magicbees.client.gui; public enum UIScreens { EFFECT_JAR, - THAUMIC_APIARY,; + THAUMIC_APIARY, + EFFECT_RING } diff --git a/src/main/java/magicbees/item/ItemBeeRing.java b/src/main/java/magicbees/item/ItemBeeRing.java new file mode 100644 index 0000000..6e36fef --- /dev/null +++ b/src/main/java/magicbees/item/ItemBeeRing.java @@ -0,0 +1,92 @@ +package magicbees.item; + +import baubles.api.BaubleType; +import baubles.api.IBauble; +import cpw.mods.fml.common.registry.GameRegistry; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import magicbees.client.gui.UIScreens; +import magicbees.main.CommonProxy; +import magicbees.main.MagicBees; +import magicbees.itemInventories.InventoryBeeRing; +import magicbees.main.utils.MoonPhase; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import net.minecraft.world.World; +import thaumcraft.common.Thaumcraft; + +public class ItemBeeRing extends Item implements IBauble { + + @SideOnly(Side.CLIENT) + private IIcon icon; + + public ItemBeeRing() + { + super(); + this.maxStackSize = 1; + this.canRepair = false; + this.setMaxDamage(0); + this.setCreativeTab(Thaumcraft.tabTC); + this.setUnlocalizedName("beeRing"); + GameRegistry.registerItem(this, "beeRing"); + } + + @Override + public ItemStack onItemRightClick(ItemStack itemStack, World world, EntityPlayer player) { + if (null == itemStack.getTagCompound()) + { + onCreated(itemStack, world, player); + } + + if (world.isRemote) { + player.openGui(MagicBees.object, UIScreens.EFFECT_RING.ordinal(), world, (int) player.posX, (int) player.posY, (int) player.posZ); + } + 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; + } + + @Override + public void onWornTick(ItemStack itemStack, EntityLivingBase entityLivingBase) { + + } + + @Override + public void onEquipped(ItemStack itemStack, EntityLivingBase entityLivingBase) { + + } + + @Override + public void onUnequipped(ItemStack itemStack, EntityLivingBase entityLivingBase) { + + } + + @Override + public boolean canEquip(ItemStack itemStack, EntityLivingBase entityLivingBase) { + return true; + } + + @Override + public boolean canUnequip(ItemStack itemStack, EntityLivingBase entityLivingBase) { + return true; + } + + public static IInventory getInventory(EntityPlayer player, ItemStack itemStack) + { + return new InventoryBeeRing(itemStack, player); + } +} diff --git a/src/main/java/magicbees/itemInventories/AbstractItemInventories.java b/src/main/java/magicbees/itemInventories/AbstractItemInventories.java new file mode 100644 index 0000000..6a45be3 --- /dev/null +++ b/src/main/java/magicbees/itemInventories/AbstractItemInventories.java @@ -0,0 +1,100 @@ +package magicbees.itemInventories; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; + +public abstract class AbstractItemInventories implements IInventory { + + protected ItemStack[] inventoryContent; + protected int stackLimit = 64; + + @Override + public int getSizeInventory() { + if (inventoryContent == null) + { + return 0; + } + return 1; + } + + @Override + public ItemStack getStackInSlot(int slotIn) { + if (inventoryContent != null) { + return inventoryContent[slotIn]; + } + return null; + } + + @Override + public ItemStack decrStackSize(int slot, int count) { + ItemStack itemstack = null; + + if (getStackInSlot(slot) != null) { + if (getStackInSlot(slot).stackSize <= count) { + itemstack = getStackInSlot(slot); + setInventorySlotContents(slot, null); + } else { + itemstack = getStackInSlot(slot).splitStack(count); + + if (getStackInSlot(slot).stackSize == 0) { + setInventorySlotContents(slot, null); + } + } + } + + return itemstack; + } + + @Override + public ItemStack getStackInSlotOnClosing(int index) { + return null; + } + + @Override + public void setInventorySlotContents(int slot, ItemStack stack) { + if (inventoryContent != null && slot == 1) + { + inventoryContent[slot] = stack; + if (stack != null && stack.stackSize > getInventoryStackLimit()) { + stack.stackSize = getInventoryStackLimit(); + } + } + + markDirty(); + } + + @Override + public String getInventoryName() { + return "BeeRing"; + } + + @Override + public boolean hasCustomInventoryName() { + return false; + } + + @Override + public int getInventoryStackLimit() { + return stackLimit; + } + + @Override + public abstract 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/itemInventories/InventoryBeeRing.java b/src/main/java/magicbees/itemInventories/InventoryBeeRing.java new file mode 100644 index 0000000..45d33ee --- /dev/null +++ b/src/main/java/magicbees/itemInventories/InventoryBeeRing.java @@ -0,0 +1,113 @@ +package magicbees.itemInventories; + + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraftforge.common.util.Constants; + +import java.util.Random; + +public class InventoryBeeRing extends AbstractItemInventories { + + private static final String KEY_ITEMS = "Items"; // legacy + private static final String KEY_SLOTS = "Slots"; + private static final String KEY_UID = "UID"; + private static final Random rand = new Random(); + + public int currentBeeHealth; + private final ItemStack parent; + private final EntityPlayer player; + + public InventoryBeeRing(ItemStack parent, EntityPlayer player) + { + this.parent = parent; + this.player = player; + readFromNBT(parent.getTagCompound()); + + } + + public boolean isParentItemInventory(ItemStack itemStack) { + ItemStack parent = getParent(); + return isSameItemInventory(parent, itemStack); + } + + protected ItemStack getParent() { + ItemStack equipped = player.getCurrentEquippedItem(); + if (isSameItemInventory(equipped, parent)) { + return equipped; + } + return parent; + } + + private static boolean isSameItemInventory(ItemStack base, ItemStack comparison) { + if (base == null || comparison == null) { + return false; + } + + if (base.getItem() != comparison.getItem()) { + return false; + } + + if (!base.hasTagCompound() || !comparison.hasTagCompound()) { + return false; + } + + String baseUID = base.getTagCompound().getString(KEY_UID); + String comparisonUID = comparison.getTagCompound().getString(KEY_UID); + return baseUID != null && comparisonUID != null && baseUID.equals(comparisonUID); + } + + public void readFromNBT(NBTTagCompound nbt) { + + if (nbt == null) { + return; + } + + if (nbt.hasKey(KEY_SLOTS)) { + NBTTagCompound nbtSlots = nbt.getCompoundTag(KEY_SLOTS); + for (int i = 0; i < inventoryContent.length; i++) { + String slotKey = getSlotNBTKey(i); + if (nbtSlots.hasKey(slotKey)) { + NBTTagCompound itemNbt = nbtSlots.getCompoundTag(slotKey); + ItemStack itemStack = ItemStack.loadItemStackFromNBT(itemNbt); + inventoryContent[i] = itemStack; + } else { + inventoryContent[i] = null; + } + } + } + } + + private void writeToParentNBT() { + ItemStack parent = getParent(); + if (parent == null) { + return; + } + + NBTTagCompound nbt = parent.getTagCompound(); + NBTTagCompound slotsNbt = new NBTTagCompound(); + for (int i = 0; i < getSizeInventory(); i++) { + ItemStack itemStack = getStackInSlot(i); + if (itemStack != null) { + String slotKey = getSlotNBTKey(i); + NBTTagCompound itemNbt = new NBTTagCompound(); + itemStack.writeToNBT(itemNbt); + slotsNbt.setTag(slotKey, itemNbt); + } + } + + nbt.setTag(KEY_SLOTS, slotsNbt); + nbt.removeTag(KEY_ITEMS); + } + + private static String getSlotNBTKey(int i) { + return Integer.toString(i, Character.MAX_RADIX); + } + + @Override + public void markDirty() { + writeToParentNBT(); + } +} diff --git a/src/main/java/magicbees/main/Config.java b/src/main/java/magicbees/main/Config.java index 88fa5c3..7105d21 100644 --- a/src/main/java/magicbees/main/Config.java +++ b/src/main/java/magicbees/main/Config.java @@ -10,24 +10,7 @@ import magicbees.block.BlockMagicApiary; import magicbees.block.BlockManaAuraProvider; import magicbees.block.BlockVisAuraProvider; import magicbees.block.types.HiveType; -import magicbees.item.ItemCapsule; -import magicbees.item.ItemComb; -import magicbees.item.ItemDrop; -import magicbees.item.ItemMagicHive; -import magicbees.item.ItemMagicHiveFrame; -import magicbees.item.ItemManasteelGrafter; -import magicbees.item.ItemManasteelScoop; -import magicbees.item.ItemMiscResources; -import magicbees.item.ItemMoonDial; -import magicbees.item.ItemMysteriousMagnet; -import magicbees.item.ItemNugget; -import magicbees.item.ItemPollen; -import magicbees.item.ItemPropolis; -import magicbees.item.ItemThaumiumGrafter; -import magicbees.item.ItemThaumiumScoop; -import magicbees.item.ItemVoidGrafter; -import magicbees.item.ItemVoidScoop; -import magicbees.item.ItemWax; +import magicbees.item.*; import magicbees.item.types.CapsuleType; import magicbees.item.types.HiveFrameType; import magicbees.item.types.NuggetType; @@ -128,6 +111,7 @@ public class Config { public static ItemNugget nuggets; public static ItemMoonDial moonDial; public static ItemMysteriousMagnet magnet; + public static ItemBeeRing beeRing; public static Item voidScoop; public static Item voidGrafter; @@ -199,6 +183,8 @@ public class Config { miscResources = new ItemMiscResources(); pollen = new ItemPollen(); moonDial = new ItemMoonDial(); + beeRing = new ItemBeeRing(); + setupJellyBaby(); setupNuggets(); setupMysteriousMagnet(); diff --git a/src/main/resources/assets/magicbees/textures/items/beeRing.png b/src/main/resources/assets/magicbees/textures/items/beeRing.png new file mode 100644 index 0000000000000000000000000000000000000000..0c940c18695ea3781017020030e0c072d8755015 GIT binary patch literal 271 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|PI|gHhFJI~ zrz{XKcywj|-@o-Dmi~@wvNlR@`1|+&Ot1Y1e_g)fBAIr#>g z5ZU0H!RS6o+@b2f{f+a76!QPD%M>UuBqw)s&T>)KVO*G|rjyB#eMrHyoS8x5UWwrH TX9_$(PceA9`njxgN@xNA9Lr_N literal 0 HcmV?d00001 From c17c2f37464912ca4279788e3aee1dd88264eee8 Mon Sep 17 00:00:00 2001 From: rjnasers Date: Sat, 22 Apr 2023 13:44:40 -0500 Subject: [PATCH 02/14] Changes to InventoryBeeRing.java mostly. --- .../client/gui/ContainerEffectRing.java | 2 +- .../AbstractItemInventories.java | 100 --------- .../itemInventories/InventoryBeeRing.java | 198 +++++++++++------- 3 files changed, 121 insertions(+), 179 deletions(-) delete mode 100644 src/main/java/magicbees/itemInventories/AbstractItemInventories.java diff --git a/src/main/java/magicbees/client/gui/ContainerEffectRing.java b/src/main/java/magicbees/client/gui/ContainerEffectRing.java index 4fa5500..db5d4d7 100644 --- a/src/main/java/magicbees/client/gui/ContainerEffectRing.java +++ b/src/main/java/magicbees/client/gui/ContainerEffectRing.java @@ -1,9 +1,9 @@ package magicbees.client.gui; import cpw.mods.fml.common.registry.GameRegistry; +import magicbees.main.utils.LogHelper; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; -import net.minecraft.inventory.ICrafting; import net.minecraft.inventory.IInventory; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; diff --git a/src/main/java/magicbees/itemInventories/AbstractItemInventories.java b/src/main/java/magicbees/itemInventories/AbstractItemInventories.java deleted file mode 100644 index 6a45be3..0000000 --- a/src/main/java/magicbees/itemInventories/AbstractItemInventories.java +++ /dev/null @@ -1,100 +0,0 @@ -package magicbees.itemInventories; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.IInventory; -import net.minecraft.item.ItemStack; - -public abstract class AbstractItemInventories implements IInventory { - - protected ItemStack[] inventoryContent; - protected int stackLimit = 64; - - @Override - public int getSizeInventory() { - if (inventoryContent == null) - { - return 0; - } - return 1; - } - - @Override - public ItemStack getStackInSlot(int slotIn) { - if (inventoryContent != null) { - return inventoryContent[slotIn]; - } - return null; - } - - @Override - public ItemStack decrStackSize(int slot, int count) { - ItemStack itemstack = null; - - if (getStackInSlot(slot) != null) { - if (getStackInSlot(slot).stackSize <= count) { - itemstack = getStackInSlot(slot); - setInventorySlotContents(slot, null); - } else { - itemstack = getStackInSlot(slot).splitStack(count); - - if (getStackInSlot(slot).stackSize == 0) { - setInventorySlotContents(slot, null); - } - } - } - - return itemstack; - } - - @Override - public ItemStack getStackInSlotOnClosing(int index) { - return null; - } - - @Override - public void setInventorySlotContents(int slot, ItemStack stack) { - if (inventoryContent != null && slot == 1) - { - inventoryContent[slot] = stack; - if (stack != null && stack.stackSize > getInventoryStackLimit()) { - stack.stackSize = getInventoryStackLimit(); - } - } - - markDirty(); - } - - @Override - public String getInventoryName() { - return "BeeRing"; - } - - @Override - public boolean hasCustomInventoryName() { - return false; - } - - @Override - public int getInventoryStackLimit() { - return stackLimit; - } - - @Override - public abstract 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/itemInventories/InventoryBeeRing.java b/src/main/java/magicbees/itemInventories/InventoryBeeRing.java index 45d33ee..6356ef1 100644 --- a/src/main/java/magicbees/itemInventories/InventoryBeeRing.java +++ b/src/main/java/magicbees/itemInventories/InventoryBeeRing.java @@ -1,113 +1,155 @@ 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 net.minecraft.nbt.NBTTagList; -import net.minecraftforge.common.util.Constants; -import java.util.Random; -public class InventoryBeeRing extends AbstractItemInventories { +public class InventoryBeeRing implements IInventory { - private static final String KEY_ITEMS = "Items"; // legacy - private static final String KEY_SLOTS = "Slots"; - private static final String KEY_UID = "UID"; - private static final Random rand = new Random(); + public EntityPlayer player; + public ItemStack parent; - public int currentBeeHealth; - private final ItemStack parent; - private final EntityPlayer player; + public ItemStack[] contents; - public InventoryBeeRing(ItemStack parent, EntityPlayer player) + public InventoryBeeRing(ItemStack stack, EntityPlayer player) { - this.parent = parent; + parent = stack; this.player = player; - readFromNBT(parent.getTagCompound()); + readFromNBT(stack.getTagCompound()); + } + + public void readFromNBT(NBTTagCompound compound) + { + NBTTagList nbttaglist = compound.getTagList("Items", 10); + this.contents = new ItemStack[this.getSizeInventory()]; + + for (int i = 0; i < nbttaglist.tagCount(); ++i) + { + NBTTagCompound nbttagcompound1 = nbttaglist.getCompoundTagAt(i); + byte b0 = nbttagcompound1.getByte("Slot"); + + if (b0 >= 0 && b0 < this.contents.length) + { + this.contents[b0] = ItemStack.loadItemStackFromNBT(nbttagcompound1); + } + } + } + + public void writeToNBT(NBTTagCompound compound) + { + + NBTTagList nbttaglist = new NBTTagList(); + + for (int i = 0; i < this.contents.length; ++i) + { + if (this.contents[i] != null) + { + NBTTagCompound nbttagcompound1 = new NBTTagCompound(); + nbttagcompound1.setByte("Slot", (byte)i); + this.contents[i].writeToNBT(nbttagcompound1); + nbttaglist.appendTag(nbttagcompound1); + } + } + + compound.setTag("Items", nbttaglist); } - public boolean isParentItemInventory(ItemStack itemStack) { - ItemStack parent = getParent(); - return isSameItemInventory(parent, itemStack); + @Override + public int getSizeInventory() { + return 1; } - protected ItemStack getParent() { - ItemStack equipped = player.getCurrentEquippedItem(); - if (isSameItemInventory(equipped, parent)) { - return equipped; - } - return parent; + @Override + public ItemStack getStackInSlot(int slot) { + return contents[slot]; } - private static boolean isSameItemInventory(ItemStack base, ItemStack comparison) { - if (base == null || comparison == null) { - return false; - } + @Override + public ItemStack decrStackSize(int slot, int count) { + if (this.contents != null) + { + ItemStack itemstack; - if (base.getItem() != comparison.getItem()) { - return false; - } + if (this.contents[slot].stackSize <= count) + { + itemstack = this.contents[slot]; + this.contents = null; + return itemstack; + } + else + { + itemstack = this.contents[slot].splitStack(count); - if (!base.hasTagCompound() || !comparison.hasTagCompound()) { - return false; - } - - String baseUID = base.getTagCompound().getString(KEY_UID); - String comparisonUID = comparison.getTagCompound().getString(KEY_UID); - return baseUID != null && comparisonUID != null && baseUID.equals(comparisonUID); - } - - public void readFromNBT(NBTTagCompound nbt) { - - if (nbt == null) { - return; - } - - if (nbt.hasKey(KEY_SLOTS)) { - NBTTagCompound nbtSlots = nbt.getCompoundTag(KEY_SLOTS); - for (int i = 0; i < inventoryContent.length; i++) { - String slotKey = getSlotNBTKey(i); - if (nbtSlots.hasKey(slotKey)) { - NBTTagCompound itemNbt = nbtSlots.getCompoundTag(slotKey); - ItemStack itemStack = ItemStack.loadItemStackFromNBT(itemNbt); - inventoryContent[i] = itemStack; - } else { - inventoryContent[i] = null; + if (this.contents[slot].stackSize == 0) + { + this.contents = null; } + + return itemstack; } } + else + { + return null; + } } - private void writeToParentNBT() { - ItemStack parent = getParent(); - if (parent == null) { - return; - } - - NBTTagCompound nbt = parent.getTagCompound(); - NBTTagCompound slotsNbt = new NBTTagCompound(); - for (int i = 0; i < getSizeInventory(); i++) { - ItemStack itemStack = getStackInSlot(i); - if (itemStack != null) { - String slotKey = getSlotNBTKey(i); - NBTTagCompound itemNbt = new NBTTagCompound(); - itemStack.writeToNBT(itemNbt); - slotsNbt.setTag(slotKey, itemNbt); - } - } - - nbt.setTag(KEY_SLOTS, slotsNbt); - nbt.removeTag(KEY_ITEMS); + @Override + public ItemStack getStackInSlotOnClosing(int index) { + return null; } - private static String getSlotNBTKey(int i) { - return Integer.toString(i, Character.MAX_RADIX); + @Override + public void setInventorySlotContents(int slot, ItemStack stack) { + this.contents[slot] = stack; + + if (stack != null && stack.stackSize > this.getInventoryStackLimit()) + { + stack.stackSize = this.getInventoryStackLimit(); + } + } + + @Override + public String getInventoryName() { + return "beeRingInventory"; + } + + @Override + public boolean hasCustomInventoryName() { + return false; + } + + @Override + public int getInventoryStackLimit() { + return 64; } @Override public void markDirty() { - writeToParentNBT(); + writeToNBT(parent.getTagCompound()); + } + + @Override + public boolean isUseableByPlayer(EntityPlayer player) { + return false; + } + + @Override + public void openInventory() { + + } + + @Override + public void closeInventory() { + + } + + @Override + public boolean isItemValidForSlot(int index, ItemStack stack) { + return false; } } From e5cea4e3dd78111b5a0218cf13bda96356772ac6 Mon Sep 17 00:00:00 2001 From: rjnasers Date: Sun, 23 Apr 2023 20:39:53 -0500 Subject: [PATCH 03/14] Fixing InventoryBeeRing and adding some minor functionality to ItemBeeRing --- .../client/gui/ContainerEffectRing.java | 7 +- .../magicbees/client/gui/GUIEffectRing.java | 3 +- .../java/magicbees/client/gui/GUIHandler.java | 3 +- src/main/java/magicbees/item/ItemBeeRing.java | 73 +++++++- .../itemInventories/InventoryBeeRing.java | 166 ++++++++++-------- 5 files changed, 171 insertions(+), 81 deletions(-) diff --git a/src/main/java/magicbees/client/gui/ContainerEffectRing.java b/src/main/java/magicbees/client/gui/ContainerEffectRing.java index db5d4d7..9addac8 100644 --- a/src/main/java/magicbees/client/gui/ContainerEffectRing.java +++ b/src/main/java/magicbees/client/gui/ContainerEffectRing.java @@ -1,18 +1,17 @@ package magicbees.client.gui; import cpw.mods.fml.common.registry.GameRegistry; -import magicbees.main.utils.LogHelper; +import magicbees.itemInventories.InventoryBeeRing; 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 class ContainerEffectRing extends Container { - IInventory IBR; + InventoryBeeRing IBR; - public ContainerEffectRing(IInventory IBR, EntityPlayer player) { + public ContainerEffectRing(InventoryBeeRing IBR, EntityPlayer player) { this.IBR = IBR; this.addSlotToContainer( new SlotCustomItems(this.IBR, 0, 80, 22, GameRegistry.findItemStack("Forestry", "beeDroneGE", 1))); diff --git a/src/main/java/magicbees/client/gui/GUIEffectRing.java b/src/main/java/magicbees/client/gui/GUIEffectRing.java index 7cb25fc..59cf855 100644 --- a/src/main/java/magicbees/client/gui/GUIEffectRing.java +++ b/src/main/java/magicbees/client/gui/GUIEffectRing.java @@ -1,6 +1,7 @@ package magicbees.client.gui; import magicbees.item.ItemBeeRing; +import magicbees.itemInventories.InventoryBeeRing; import magicbees.main.CommonProxy; import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.entity.player.EntityPlayer; @@ -21,7 +22,7 @@ public class GUIEffectRing extends GuiContainer { private static final int HEIGHT = 156; public GUIEffectRing(ItemStack itemStack, EntityPlayer player) { - super(new ContainerEffectRing(ItemBeeRing.getInventory(player, itemStack), player)); + super(new ContainerEffectRing((InventoryBeeRing) ItemBeeRing.getInventory(player, itemStack), player)); this.xSize = WIDTH; this.ySize = HEIGHT; } diff --git a/src/main/java/magicbees/client/gui/GUIHandler.java b/src/main/java/magicbees/client/gui/GUIHandler.java index f68a685..a4e1b1e 100644 --- a/src/main/java/magicbees/client/gui/GUIHandler.java +++ b/src/main/java/magicbees/client/gui/GUIHandler.java @@ -1,6 +1,7 @@ package magicbees.client.gui; import magicbees.item.ItemBeeRing; +import magicbees.itemInventories.InventoryBeeRing; import magicbees.tileentity.TileEntityEffectJar; import magicbees.tileentity.TileEntityMagicApiary; @@ -23,7 +24,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); + value = new ContainerEffectRing((InventoryBeeRing) ItemBeeRing.getInventory(player, player.getHeldItem()),player); } return value; diff --git a/src/main/java/magicbees/item/ItemBeeRing.java b/src/main/java/magicbees/item/ItemBeeRing.java index 6e36fef..4d2d6c6 100644 --- a/src/main/java/magicbees/item/ItemBeeRing.java +++ b/src/main/java/magicbees/item/ItemBeeRing.java @@ -2,14 +2,16 @@ package magicbees.item; 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 magicbees.client.gui.UIScreens; import magicbees.main.CommonProxy; import magicbees.main.MagicBees; import magicbees.itemInventories.InventoryBeeRing; -import magicbees.main.utils.MoonPhase; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; @@ -25,6 +27,8 @@ 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; public ItemBeeRing() { super(); @@ -43,8 +47,24 @@ public class ItemBeeRing extends Item implements IBauble { onCreated(itemStack, world, player); } - if (world.isRemote) { - player.openGui(MagicBees.object, UIScreens.EFFECT_RING.ordinal(), world, (int) player.posX, (int) player.posY, (int) player.posZ); + if (!world.isRemote) { + if(!player.isSneaking()) + { + player.openGui(MagicBees.object, UIScreens.EFFECT_RING.ordinal(), world, (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, (ItemStack)null); + this.onEquipped(itemStack, player); + break; + } + } + } } return itemStack; } @@ -62,7 +82,48 @@ public class ItemBeeRing extends Item implements IBauble { @Override public void onWornTick(ItemStack itemStack, EntityLivingBase entityLivingBase) { + if (entityLivingBase instanceof EntityPlayer) + { + if (hasQueen(itemStack, (EntityPlayer) entityLivingBase)) { + tickQueen(itemStack); + } else if (hasDrone(itemStack, (EntityPlayer) entityLivingBase)) { + createQueenFromDrone(itemStack, (EntityPlayer) entityLivingBase); + } + } + } + private void createQueenFromDrone(ItemStack itemStack, EntityPlayer player) { + IInventory IBR = getInventory(player, itemStack); + ItemStack droneStack = IBR.getStackInSlot(0); + if (magicbees.bees.BeeManager.beeRoot.isDrone(droneStack)) { + IBee bee = magicbees.bees.BeeManager.beeRoot.getMember(droneStack); + if (droneStack.stackSize == 1) { + IBR.setInventorySlotContents(0, null); + } else { + droneStack.stackSize = droneStack.stackSize - 1; + IBR.setInventorySlotContents(0, droneStack); + } + + ItemStack temp = droneStack.copy(); + temp.stackSize = 1; + IBR.setInventorySlotContents(1, temp); + + int current = bee.getHealth(); + int max = bee.getMaxHealth(); +// currentBeeHealth = (current * 100) / max; +// currentBeeColour = bee.getGenome().getPrimary().getIconColour(0); + } + } + + private boolean hasDrone(ItemStack itemStack, EntityPlayer player) { + return getInventory(player, itemStack).getStackInSlot(DRONE_SLOT) != null; + } + + private void tickQueen(ItemStack itemStack) { + } + + private boolean hasQueen(ItemStack itemStack, EntityPlayer player) { + return getInventory(player, itemStack).getStackInSlot(QUEEN_SLOT) != null; } @Override @@ -85,6 +146,12 @@ public class ItemBeeRing extends Item implements IBauble { return true; } + public void onCreated(ItemStack itemStack, World world, EntityPlayer player) + { +// if (itemStack.getTagCompound() == null) { +// itemStack.setTagCompound(new NBTTagCompound()); +// } + } public static IInventory getInventory(EntityPlayer player, ItemStack itemStack) { return new InventoryBeeRing(itemStack, player); diff --git a/src/main/java/magicbees/itemInventories/InventoryBeeRing.java b/src/main/java/magicbees/itemInventories/InventoryBeeRing.java index 6356ef1..6671ecc 100644 --- a/src/main/java/magicbees/itemInventories/InventoryBeeRing.java +++ b/src/main/java/magicbees/itemInventories/InventoryBeeRing.java @@ -1,66 +1,72 @@ package magicbees.itemInventories; +import baubles.common.lib.PlayerHandler; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; + +import java.util.Random; public class InventoryBeeRing implements IInventory { public EntityPlayer player; public ItemStack parent; - public ItemStack[] contents; + public int currentBeeHealth; + public int throttle; + + private final static String KEY_SLOTS = "Slots"; + private static final String KEY_UID = "UID"; + private static final Random rand = new Random(); + public InventoryBeeRing(ItemStack stack, EntityPlayer player) { parent = stack; this.player = player; + this.contents = new ItemStack[2]; + readFromNBT(stack.getTagCompound()); } - public void readFromNBT(NBTTagCompound compound) - { - NBTTagList nbttaglist = compound.getTagList("Items", 10); - this.contents = new ItemStack[this.getSizeInventory()]; + public void readFromNBT(NBTTagCompound compound) { + if (compound == null) { + return; + } - for (int i = 0; i < nbttaglist.tagCount(); ++i) - { - NBTTagCompound nbttagcompound1 = nbttaglist.getCompoundTagAt(i); - byte b0 = nbttagcompound1.getByte("Slot"); - - if (b0 >= 0 && b0 < this.contents.length) - { - this.contents[b0] = ItemStack.loadItemStackFromNBT(nbttagcompound1); + 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; + } } } + if (compound.getInteger("throttle") != 0) { + throttle = compound.getInteger("throttle"); + } + + if (compound.getInteger("currentBeeHealth") != 0) + { + currentBeeHealth = compound.getInteger("throttle"); + } + } - public void writeToNBT(NBTTagCompound compound) - { - - NBTTagList nbttaglist = new NBTTagList(); - - for (int i = 0; i < this.contents.length; ++i) - { - if (this.contents[i] != null) - { - NBTTagCompound nbttagcompound1 = new NBTTagCompound(); - nbttagcompound1.setByte("Slot", (byte)i); - this.contents[i].writeToNBT(nbttagcompound1); - nbttaglist.appendTag(nbttagcompound1); - } - } - - compound.setTag("Items", nbttaglist); - + private static String getSlotNBTKey(int i) { + return Integer.toString(i, Character.MAX_RADIX); } @Override public int getSizeInventory() { - return 1; + return contents.length; } @Override @@ -70,46 +76,67 @@ public class InventoryBeeRing implements IInventory { @Override public ItemStack decrStackSize(int slot, int count) { - if (this.contents != null) - { - ItemStack itemstack; - - if (this.contents[slot].stackSize <= count) - { - itemstack = this.contents[slot]; - this.contents = null; - return itemstack; - } - else - { - itemstack = this.contents[slot].splitStack(count); - - if (this.contents[slot].stackSize == 0) - { - this.contents = null; - } - - return itemstack; - } - } - else - { + 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 index) { - return null; + public ItemStack getStackInSlotOnClosing(int slot) { + ItemStack toReturn = getStackInSlot(slot); + + if (toReturn != null) { + setInventorySlotContents(slot, null); + } + + return toReturn; } @Override public void setInventorySlotContents(int slot, ItemStack stack) { - this.contents[slot] = stack; + if (stack != null && stack.stackSize == 0) { + stack = null; + } - if (stack != null && stack.stackSize > this.getInventoryStackLimit()) - { - stack.stackSize = this.getInventoryStackLimit(); + contents[slot] = stack; + + // I have literally no idea, but for some reason when this is 'this.parent' it doesn't work... + + ItemStack parent = player.getCurrentEquippedItem(); + + 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); } } @@ -130,26 +157,21 @@ public class InventoryBeeRing implements IInventory { @Override public void markDirty() { - writeToNBT(parent.getTagCompound()); } @Override public boolean isUseableByPlayer(EntityPlayer player) { - return false; + return true; } @Override - public void openInventory() { - - } + public void openInventory() {} @Override - public void closeInventory() { - - } + public void closeInventory() {} @Override public boolean isItemValidForSlot(int index, ItemStack stack) { - return false; + return true; } } From 729908b1b01283f0ddb1255418e65a69f47ffe06 Mon Sep 17 00:00:00 2001 From: rjnasers Date: Wed, 26 Apr 2023 15:11:53 -0500 Subject: [PATCH 04/14] Fully Fleshed out Functionality and GUI. Having some small issues with the paritcleFX, but not huge deal right now. Would be nice to have, but crashes make people even sadder. --- .../magicbees/client/gui/GUIEffectRing.java | 38 ++- .../java/magicbees/client/gui/GUIHandler.java | 9 +- src/main/java/magicbees/item/ItemBeeRing.java | 156 ++++++++---- .../itemInventories/InventoryBeeRing.java | 189 ++++++++++++-- .../magicbees/tileentity/RingHousing.java | 231 ++++++++++++++++++ .../assets/magicbees/lang/en_US.lang | 1 + 6 files changed, 542 insertions(+), 82 deletions(-) create mode 100644 src/main/java/magicbees/tileentity/RingHousing.java diff --git a/src/main/java/magicbees/client/gui/GUIEffectRing.java b/src/main/java/magicbees/client/gui/GUIEffectRing.java index 59cf855..742be15 100644 --- a/src/main/java/magicbees/client/gui/GUIEffectRing.java +++ b/src/main/java/magicbees/client/gui/GUIEffectRing.java @@ -3,26 +3,38 @@ package magicbees.client.gui; import magicbees.item.ItemBeeRing; import magicbees.itemInventories.InventoryBeeRing; import magicbees.main.CommonProxy; + import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; + import org.lwjgl.opengl.GL11; public class GUIEffectRing extends GuiContainer { - public static final String BACKGROUND_FILE = "jarScreen.png"; public static final ResourceLocation BACKGROUND_LOCATION = new ResourceLocation( - CommonProxy.DOMAIN, - CommonProxy.GUI_TEXTURE + "jarScreen.png"); + CommonProxy.DOMAIN, + 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 GUIEffectRing(ItemStack itemStack, EntityPlayer player) { - super(new ContainerEffectRing((InventoryBeeRing) ItemBeeRing.getInventory(player, itemStack), player)); + super( + new ContainerEffectRing( + ItemBeeRing.getInventory(player, itemStack, player.inventory.currentItem, false), + player)); this.xSize = WIDTH; this.ySize = HEIGHT; } @@ -39,5 +51,21 @@ public class GUIEffectRing extends GuiContainer { this.mc.getTextureManager().bindTexture(BACKGROUND_LOCATION); this.drawTexturedModalRect(this.guiLeft, this.guiTop, 0, 0, xSize, ySize); + + InventoryBeeRing IBR = ((ContainerEffectRing) this.inventorySlots).IBR; + float r = ((IBR.currentBeeColour >> 16) & 255) / 255f; + float g = ((IBR.currentBeeColour >> 8) & 255) / 255f; + float b = (IBR.currentBeeColour & 255) / 255f; + + GL11.glColor3f(r, g, b); + + int value = BAR_HEIGHT - (IBR.currentBeeHealth * BAR_HEIGHT) / 100; + this.drawTexturedModalRect( + this.guiLeft + BAR_DEST_X, + this.guiTop + value + BAR_DEST_Y, + BAR_SRC_X, + BAR_SRC_Y, + BAR_WIDTH, + BAR_HEIGHT - value); } } diff --git a/src/main/java/magicbees/client/gui/GUIHandler.java b/src/main/java/magicbees/client/gui/GUIHandler.java index a4e1b1e..e22a3ff 100644 --- a/src/main/java/magicbees/client/gui/GUIHandler.java +++ b/src/main/java/magicbees/client/gui/GUIHandler.java @@ -1,16 +1,13 @@ package magicbees.client.gui; import magicbees.item.ItemBeeRing; -import magicbees.itemInventories.InventoryBeeRing; import magicbees.tileentity.TileEntityEffectJar; import magicbees.tileentity.TileEntityMagicApiary; import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; import net.minecraft.world.World; import cpw.mods.fml.common.network.IGuiHandler; -import scala.swing.Applet; public class GUIHandler implements IGuiHandler { @@ -24,7 +21,9 @@ 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((InventoryBeeRing) ItemBeeRing.getInventory(player, player.getHeldItem()),player); + value = new ContainerEffectRing( + ItemBeeRing.getInventory(player, player.getHeldItem(), player.inventory.currentItem, false), + player); } return value; @@ -38,7 +37,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(player.getHeldItem(), player); } return null; } diff --git a/src/main/java/magicbees/item/ItemBeeRing.java b/src/main/java/magicbees/item/ItemBeeRing.java index 4d2d6c6..7ddc4a9 100644 --- a/src/main/java/magicbees/item/ItemBeeRing.java +++ b/src/main/java/magicbees/item/ItemBeeRing.java @@ -1,5 +1,20 @@ package magicbees.item; +import magicbees.client.gui.UIScreens; +import magicbees.itemInventories.InventoryBeeRing; +import magicbees.main.CommonProxy; +import magicbees.main.MagicBees; +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; @@ -8,19 +23,6 @@ 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 magicbees.client.gui.UIScreens; -import magicbees.main.CommonProxy; -import magicbees.main.MagicBees; -import magicbees.itemInventories.InventoryBeeRing; -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.IInventory; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.IIcon; -import net.minecraft.world.World; -import thaumcraft.common.Thaumcraft; public class ItemBeeRing extends Item implements IBauble { @@ -29,8 +31,8 @@ public class ItemBeeRing extends Item implements IBauble { private final int DRONE_SLOT = 0; private final int QUEEN_SLOT = 1; - public ItemBeeRing() - { + + public ItemBeeRing() { super(); this.maxStackSize = 1; this.canRepair = false; @@ -40,26 +42,25 @@ public class ItemBeeRing extends Item implements IBauble { 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 (null == itemStack.getTagCompound()) - { - onCreated(itemStack, world, player); - } - if (!world.isRemote) { - if(!player.isSneaking()) - { - player.openGui(MagicBees.object, UIScreens.EFFECT_RING.ordinal(), world, (int) player.posX, (int) player.posY, (int) player.posZ); - } - else - { + if (!player.isSneaking()) { + player.openGui( + MagicBees.object, + UIScreens.EFFECT_RING.ordinal(), + world, + (int) player.posX, + (int) player.posY, + (int) player.posZ); + } else { InventoryBaubles baubles = PlayerHandler.getPlayerBaubles(player); - for(int i = 0; i < baubles.getSizeInventory(); ++i) { + 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, (ItemStack)null); + player.inventory.setInventorySlotContents(player.inventory.currentItem, null); this.onEquipped(itemStack, player); break; } @@ -82,18 +83,34 @@ public class ItemBeeRing extends Item implements IBauble { @Override public void onWornTick(ItemStack itemStack, EntityLivingBase entityLivingBase) { - if (entityLivingBase instanceof EntityPlayer) - { - if (hasQueen(itemStack, (EntityPlayer) entityLivingBase)) { - tickQueen(itemStack); - } else if (hasDrone(itemStack, (EntityPlayer) entityLivingBase)) { - createQueenFromDrone(itemStack, (EntityPlayer) entityLivingBase); + + // 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; + } + } + + // Logic to run the ring (this logic could be moved out of the item class, but it seems fine here + if (slot != -1) { + if (hasQueen(itemStack, (EntityPlayer) entityLivingBase, slot)) { + tickQueen(itemStack, (EntityPlayer) entityLivingBase, slot); + } else if (hasDrone(itemStack, (EntityPlayer) entityLivingBase, slot)) { + createQueenFromDrone(itemStack, (EntityPlayer) entityLivingBase, slot); + } + } } } } - private void createQueenFromDrone(ItemStack itemStack, EntityPlayer player) { - IInventory IBR = getInventory(player, itemStack); + private void createQueenFromDrone(ItemStack itemStack, EntityPlayer player, int slot) { + + InventoryBeeRing IBR = getInventory(player, itemStack, slot, true); ItemStack droneStack = IBR.getStackInSlot(0); if (magicbees.bees.BeeManager.beeRoot.isDrone(droneStack)) { IBee bee = magicbees.bees.BeeManager.beeRoot.getMember(droneStack); @@ -103,27 +120,66 @@ public class ItemBeeRing extends Item implements IBauble { droneStack.stackSize = droneStack.stackSize - 1; IBR.setInventorySlotContents(0, droneStack); } - ItemStack temp = droneStack.copy(); temp.stackSize = 1; IBR.setInventorySlotContents(1, temp); int current = bee.getHealth(); int max = bee.getMaxHealth(); -// currentBeeHealth = (current * 100) / max; -// currentBeeColour = bee.getGenome().getPrimary().getIconColour(0); + IBR.setCurrentBeeHealth((current * 100) / max); + IBR.setCurrentBeeColour(bee.getGenome().getPrimary().getIconColour(0)); } } - private boolean hasDrone(ItemStack itemStack, EntityPlayer player) { - return getInventory(player, itemStack).getStackInSlot(DRONE_SLOT) != null; + private boolean hasDrone(ItemStack itemStack, EntityPlayer player, int slot) { + return getInventory(player, itemStack, slot, true).getStackInSlot(DRONE_SLOT) != null; } - private void tickQueen(ItemStack itemStack) { + private void tickQueen(ItemStack itemStack, EntityPlayer player, int slot) { + + InventoryBeeRing IBR = getInventory(player, itemStack, slot, true); + + IBee queen = magicbees.bees.BeeManager.beeRoot.getMember(IBR.getStackInSlot(QUEEN_SLOT)); + IBR.setCurrentBeeHealth((queen.getHealth() * 100) / queen.getMaxHealth()); + IBR.setCurrentBeeColour(queen.getGenome().getPrimary().getIconColour(0)); + + RingHousing housingLogic = new RingHousing(player, IBR); + + IBR.setEffectAndInitialize(queen); + + IBR.effectData = queen.doEffect(IBR.effectData, housingLogic); + if (player.isDead) { + return; + } + + IBR.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 (IBR.throttle > 550) { + IBR.setThrottle(0); + queen.age(player.getEntityWorld(), 0.26f); + + if (queen.getHealth() == 0) { + IBR.setInventorySlotContents(1, null); + IBR.setCurrentBeeHealth(0); + IBR.setCurrentBeeColour(0x0ffffff); + } else { + queen.writeToNBT(IBR.contents[QUEEN_SLOT].stackTagCompound); + } + } else { + IBR.setThrottle(IBR.throttle + 1); + } } - private boolean hasQueen(ItemStack itemStack, EntityPlayer player) { - return getInventory(player, itemStack).getStackInSlot(QUEEN_SLOT) != null; + private boolean hasQueen(ItemStack itemStack, EntityPlayer player, int slot) { + return getInventory(player, itemStack, slot, true).getStackInSlot(QUEEN_SLOT) != null; } @Override @@ -146,14 +202,8 @@ public class ItemBeeRing extends Item implements IBauble { return true; } - public void onCreated(ItemStack itemStack, World world, EntityPlayer player) - { -// if (itemStack.getTagCompound() == null) { -// itemStack.setTagCompound(new NBTTagCompound()); -// } - } - public static IInventory getInventory(EntityPlayer player, ItemStack itemStack) - { - return new InventoryBeeRing(itemStack, player); + 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 6671ecc..7848150 100644 --- a/src/main/java/magicbees/itemInventories/InventoryBeeRing.java +++ b/src/main/java/magicbees/itemInventories/InventoryBeeRing.java @@ -1,32 +1,44 @@ package magicbees.itemInventories; -import baubles.common.lib.PlayerHandler; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; -import java.util.Random; - +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; public class InventoryBeeRing implements IInventory { public EntityPlayer player; public ItemStack parent; public ItemStack[] contents; + public int itemLocatedSlot; + public boolean baubleFlag; + public IEffectData[] effectData = new IEffectData[2]; public int currentBeeHealth; + public int currentBeeColour; public int throttle; private final static String KEY_SLOTS = "Slots"; - private static final String KEY_UID = "UID"; - private static final Random rand = new Random(); + private final static String KEY_HEALTH = "Health"; + private final static String KEY_THROTTLE = "Throttle"; - public InventoryBeeRing(ItemStack stack, EntityPlayer player) - { - parent = stack; + 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()); } @@ -36,6 +48,7 @@ public class InventoryBeeRing implements IInventory { return; } + // Initializing slot contents if (compound.hasKey(KEY_SLOTS)) { NBTTagCompound nbtSlots = compound.getCompoundTag(KEY_SLOTS); for (int i = 0; i < contents.length; i++) { @@ -49,17 +62,22 @@ public class InventoryBeeRing implements IInventory { } } } - if (compound.getInteger("throttle") != 0) { - throttle = compound.getInteger("throttle"); + + // Initializing Throttle for logic and Health, Colour for GUI effects + if (compound.getInteger(KEY_THROTTLE) != 0) { + throttle = compound.getInteger(KEY_THROTTLE); } - if (compound.getInteger("currentBeeHealth") != 0) - { - currentBeeHealth = compound.getInteger("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); } @@ -110,9 +128,7 @@ public class InventoryBeeRing implements IInventory { contents[slot] = stack; - // I have literally no idea, but for some reason when this is 'this.parent' it doesn't work... - - ItemStack parent = player.getCurrentEquippedItem(); + ItemStack parent = this.parent; NBTTagCompound nbt = parent.getTagCompound(); if (nbt == null) { @@ -121,7 +137,7 @@ public class InventoryBeeRing implements IInventory { } NBTTagCompound slotNbt; - if (!nbt.hasKey("KEY_SLOTS")) { + if (!nbt.hasKey(KEY_SLOTS)) { slotNbt = new NBTTagCompound(); nbt.setTag(KEY_SLOTS, slotNbt); } else { @@ -138,6 +154,142 @@ public class InventoryBeeRing implements IInventory { slotNbt.setTag(slotKey, itemNbt); } + + setInventorySlot(parent); + } + + private void setInventorySlot(ItemStack parent) { + if (baubleFlag) { + InventoryBaubles baubles = PlayerHandler.getPlayerBaubles(this.player); + baubles.setInventorySlotContents(itemLocatedSlot, parent); + } else { + player.inventory.setInventorySlotContents(itemLocatedSlot, parent); + } + + } + + public void setCurrentBeeHealth(int health) { + this.currentBeeHealth = health; + this.parent.getTagCompound().setInteger(KEY_HEALTH, this.currentBeeHealth); + setInventorySlot(parent); + } + + public void setCurrentBeeColour(int colour) { + this.currentBeeColour = colour; + this.parent.getTagCompound().setInteger(KEY_COLOUR, this.currentBeeColour); + } + + public void setThrottle(int throttle) { + this.throttle = throttle; + this.parent.getTagCompound().setInteger(KEY_THROTTLE, this.throttle); + setInventorySlot(parent); + } + + public void writeEffectNBT() { + NBTTagCompound compound = parent.getTagCompound(); + + if (compound == null) { + compound = new NBTTagCompound(); + parent.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); + } + + NBTTagCompound slotNbt2; + if (!compound.hasKey(KEY_EFFECT_2)) { + slotNbt2 = new NBTTagCompound(); + compound.setTag(KEY_EFFECT_2, slotNbt2); + } else { + slotNbt2 = compound.getCompoundTag(KEY_EFFECT_2); + } + + 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) {} + } + + 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); + } + + 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) {} + } + } + } } @Override @@ -156,8 +308,7 @@ public class InventoryBeeRing implements IInventory { } @Override - public void markDirty() { - } + public void markDirty() {} @Override public boolean isUseableByPlayer(EntityPlayer player) { diff --git a/src/main/java/magicbees/tileentity/RingHousing.java b/src/main/java/magicbees/tileentity/RingHousing.java new file mode 100644 index 0000000..b48da72 --- /dev/null +++ b/src/main/java/magicbees/tileentity/RingHousing.java @@ -0,0 +1,231 @@ +package magicbees.tileentity; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +import magicbees.bees.BeeManager; +import magicbees.itemInventories.InventoryBeeRing; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ChunkCoordinates; +import net.minecraft.util.Vec3; +import net.minecraft.world.World; +import net.minecraft.world.biome.BiomeGenBase; + +import com.google.common.collect.ImmutableSet; +import com.mojang.authlib.GameProfile; + +import forestry.api.apiculture.*; +import forestry.api.core.EnumHumidity; +import forestry.api.core.EnumTemperature; +import forestry.api.core.IErrorLogic; +import forestry.api.core.IErrorState; + +public class RingHousing implements IBeeHousing { + + EntityPlayer player; + BiomeGenBase biome; + IBeeHousingInventory inventory; + IBeekeepingLogic beekeepingLogic; + + private static final IErrorLogic errorLogic = new RingHousing.RingErrorLogic(); + 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) { + this.player = player; + this.biome = player.getEntityWorld().getBiomeGenForCoords((int) player.posX, (int) player.posY); + this.inventory = new RingBeeHousingInventory(IBR); + this.beekeepingLogic = BeeManager.beeRoot.createBeekeepingLogic(this); + } + + @Override + public Iterable getBeeModifiers() { + return beeModifiers; + } + + @Override + public Iterable getBeeListeners() { + return beeListeners; + } + + @Override + public IBeeHousingInventory getBeeInventory() { + return inventory; + } + + @Override + public IBeekeepingLogic getBeekeepingLogic() { + return beekeepingLogic; + } + + @Override + public int getBlockLightValue() { + return player.getEntityWorld() + .getBlockLightValue((int) player.posX, ((int) player.posY) + 1, (int) player.posZ); + } + + @Override + public boolean canBlockSeeTheSky() { + return player.getEntityWorld().canBlockSeeTheSky((int) player.posX, (int) player.posY, (int) player.posZ); + } + + @Override + public World getWorld() { + return player.getEntityWorld(); + } + + @Override + public GameProfile getOwner() { + return player.getGameProfile(); + } + + @Override + public Vec3 getBeeFXCoordinates() { + return Vec3.createVectorHelper(player.posX, player.posY + 0.5, player.posZ); + } + + @Override + public BiomeGenBase getBiome() { + return this.biome; + } + + @Override + public EnumTemperature getTemperature() { + return EnumTemperature.getFromBiome(biome, (int) player.posX, (int) player.posY, (int) player.posZ); + } + + @Override + public EnumHumidity getHumidity() { + return EnumHumidity.getFromValue(biome.rainfall); + } + + @Override + public IErrorLogic getErrorLogic() { + return errorLogic; + } + + @Override + public ChunkCoordinates getCoordinates() { + return player.getPlayerCoordinates(); + } + + private static class RingBeeHousingInventory implements IBeeHousingInventory { + + private final InventoryBeeRing IBR; + + public RingBeeHousingInventory(InventoryBeeRing IBR) { + this.IBR = IBR; + } + + @Override + public ItemStack getQueen() { + return IBR.getStackInSlot(1); + } + + @Override + public ItemStack getDrone() { + return null; + } + + @Override + public void setQueen(ItemStack itemStack) { + IBR.setInventorySlotContents(1, itemStack); + } + + @Override + public void setDrone(ItemStack itemstack) {} + + @Override + public boolean addProduct(ItemStack product, boolean all) { + return false; + } + } + + private static class RingErrorLogic implements IErrorLogic { + + @Override + public boolean setCondition(boolean condition, IErrorState errorState) { + return condition; + } + + @Override + public boolean contains(IErrorState state) { + return false; + } + + @Override + public boolean hasErrors() { + return false; + } + + @Override + public void clearErrors() {} + + @Override + public void writeData(DataOutputStream data) throws IOException {} + + @Override + public void readData(DataInputStream data) throws IOException {} + + @Override + public ImmutableSet getErrorStates() { + return ImmutableSet.of(); + } + } + + private static class RingHousingModifier implements IBeeModifier { + + @Override + public float getTerritoryModifier(IBeeGenome genome, float currentModifier) { + return 0.9f; + } + + @Override + public float getMutationModifier(IBeeGenome genome, IBeeGenome mate, float currentModifier) { + return 0f; + } + + @Override + public float getLifespanModifier(IBeeGenome genome, IBeeGenome mate, float currentModifier) { + return 0f; + } + + @Override + public float getProductionModifier(IBeeGenome genome, float currentModifier) { + return 0f; + } + + @Override + public float getFloweringModifier(IBeeGenome genome, float currentModifier) { + return 0f; + } + + @Override + public float getGeneticDecay(IBeeGenome genome, float currentModifier) { + return 0f; + } + + @Override + public boolean isSealed() { + return true; + } + + @Override + public boolean isSelfLighted() { + return true; + } + + @Override + public boolean isSunlightSimulated() { + return true; + } + + @Override + public boolean isHellish() { + return false; + } + } +} diff --git a/src/main/resources/assets/magicbees/lang/en_US.lang b/src/main/resources/assets/magicbees/lang/en_US.lang index 3bd43ee..5348712 100644 --- a/src/main/resources/assets/magicbees/lang/en_US.lang +++ b/src/main/resources/assets/magicbees/lang/en_US.lang @@ -32,6 +32,7 @@ item.moonDial.name=Jade Moon Dial item.voidScoop.name=Void Scoop item.voidGrafter.name=Void Grafter +item.beeRing.name=Collector's Bee Ring #Tiles tile.effectJar.name=Bee Collector's Jar From 2d78a84df10ff281d1f1c1ec66bbe67259845987 Mon Sep 17 00:00:00 2001 From: rjnasers Date: Wed, 26 Apr 2023 16:20:41 -0500 Subject: [PATCH 05/14] Apply spotless and fixing keeping item on death --- src/main/java/magicbees/client/gui/ContainerEffectRing.java | 6 ++++-- src/main/java/magicbees/item/ItemBeeRing.java | 6 +----- .../java/magicbees/itemInventories/InventoryBeeRing.java | 6 +++++- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/main/java/magicbees/client/gui/ContainerEffectRing.java b/src/main/java/magicbees/client/gui/ContainerEffectRing.java index 9addac8..2a6a423 100644 --- a/src/main/java/magicbees/client/gui/ContainerEffectRing.java +++ b/src/main/java/magicbees/client/gui/ContainerEffectRing.java @@ -1,12 +1,14 @@ package magicbees.client.gui; -import cpw.mods.fml.common.registry.GameRegistry; 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 cpw.mods.fml.common.registry.GameRegistry; + public class ContainerEffectRing extends Container { InventoryBeeRing IBR; @@ -14,7 +16,7 @@ public class ContainerEffectRing extends Container { public ContainerEffectRing(InventoryBeeRing IBR, EntityPlayer player) { this.IBR = IBR; this.addSlotToContainer( - new SlotCustomItems(this.IBR, 0, 80, 22, GameRegistry.findItemStack("Forestry", "beeDroneGE", 1))); + new SlotCustomItems(this.IBR, 0, 80, 22, GameRegistry.findItemStack("Forestry", "beeDroneGE", 1))); for (int i = 0; i < 3; ++i) { for (int j = 0; j < 9; ++j) { diff --git a/src/main/java/magicbees/item/ItemBeeRing.java b/src/main/java/magicbees/item/ItemBeeRing.java index 7ddc4a9..184cb50 100644 --- a/src/main/java/magicbees/item/ItemBeeRing.java +++ b/src/main/java/magicbees/item/ItemBeeRing.java @@ -146,17 +146,13 @@ public class ItemBeeRing extends Item implements IBauble { RingHousing housingLogic = new RingHousing(player, IBR); IBR.setEffectAndInitialize(queen); - IBR.effectData = queen.doEffect(IBR.effectData, housingLogic); - if (player.isDead) { - return; - } - IBR.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); // } diff --git a/src/main/java/magicbees/itemInventories/InventoryBeeRing.java b/src/main/java/magicbees/itemInventories/InventoryBeeRing.java index 7848150..dcada09 100644 --- a/src/main/java/magicbees/itemInventories/InventoryBeeRing.java +++ b/src/main/java/magicbees/itemInventories/InventoryBeeRing.java @@ -159,13 +159,17 @@ public class InventoryBeeRing implements IInventory { } 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); } - } public void setCurrentBeeHealth(int health) { From 7df6221e0bd6ef5a6c0baa5f2c27af9047e8d6b6 Mon Sep 17 00:00:00 2001 From: rjnasers Date: Wed, 26 Apr 2023 16:45:06 -0500 Subject: [PATCH 06/14] Adding comments and final formatting. --- .../itemInventories/InventoryBeeRing.java | 41 +++++++++++-------- .../magicbees/tileentity/RingHousing.java | 1 + 2 files changed, 25 insertions(+), 17 deletions(-) diff --git a/src/main/java/magicbees/itemInventories/InventoryBeeRing.java b/src/main/java/magicbees/itemInventories/InventoryBeeRing.java index dcada09..c040c7e 100644 --- a/src/main/java/magicbees/itemInventories/InventoryBeeRing.java +++ b/src/main/java/magicbees/itemInventories/InventoryBeeRing.java @@ -120,6 +120,8 @@ public class InventoryBeeRing implements IInventory { 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) { @@ -158,6 +160,7 @@ public class InventoryBeeRing implements IInventory { setInventorySlot(parent); } + // private method to manually set the inventory of a player private void setInventorySlot(ItemStack parent) { if (this.player.getHealth() == 0) { @@ -172,23 +175,8 @@ public class InventoryBeeRing implements IInventory { } } - public void setCurrentBeeHealth(int health) { - this.currentBeeHealth = health; - this.parent.getTagCompound().setInteger(KEY_HEALTH, this.currentBeeHealth); - setInventorySlot(parent); - } - - public void setCurrentBeeColour(int colour) { - this.currentBeeColour = colour; - this.parent.getTagCompound().setInteger(KEY_COLOUR, this.currentBeeColour); - } - - public void setThrottle(int throttle) { - this.throttle = throttle; - this.parent.getTagCompound().setInteger(KEY_THROTTLE, this.throttle); - setInventorySlot(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(); @@ -234,6 +222,7 @@ public class InventoryBeeRing implements IInventory { 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)) @@ -296,6 +285,24 @@ public class InventoryBeeRing implements IInventory { } } + // 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 void setCurrentBeeHealth(int health) { + this.currentBeeHealth = health; + this.parent.getTagCompound().setInteger(KEY_HEALTH, this.currentBeeHealth); + setInventorySlot(parent); + } + + public void setCurrentBeeColour(int colour) { + this.currentBeeColour = colour; + this.parent.getTagCompound().setInteger(KEY_COLOUR, this.currentBeeColour); + } + @Override public String getInventoryName() { return "beeRingInventory"; diff --git a/src/main/java/magicbees/tileentity/RingHousing.java b/src/main/java/magicbees/tileentity/RingHousing.java index b48da72..6555b67 100644 --- a/src/main/java/magicbees/tileentity/RingHousing.java +++ b/src/main/java/magicbees/tileentity/RingHousing.java @@ -23,6 +23,7 @@ import forestry.api.core.EnumTemperature; import forestry.api.core.IErrorLogic; import forestry.api.core.IErrorState; +// Class that simulates a BeeHouse using both player data and info from InventoryBeeRing public class RingHousing implements IBeeHousing { EntityPlayer player; From 500adb0357ac1ddd0dd900c3ef8f5d9f6c3231be Mon Sep 17 00:00:00 2001 From: rjnasers Date: Thu, 27 Apr 2023 12:48:59 -0500 Subject: [PATCH 07/14] Fixing some comment. --- src/main/java/magicbees/item/ItemBeeRing.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/magicbees/item/ItemBeeRing.java b/src/main/java/magicbees/item/ItemBeeRing.java index 184cb50..528d5a4 100644 --- a/src/main/java/magicbees/item/ItemBeeRing.java +++ b/src/main/java/magicbees/item/ItemBeeRing.java @@ -96,7 +96,7 @@ public class ItemBeeRing extends Item implements IBauble { } } - // Logic to run the ring (this logic could be moved out of the item class, but it seems fine here + // Logic to run the ring (this logic could be moved out of the item class, but it seems fine here) if (slot != -1) { if (hasQueen(itemStack, (EntityPlayer) entityLivingBase, slot)) { tickQueen(itemStack, (EntityPlayer) entityLivingBase, slot); From f5dc54e1fb100a60562f3bcc5d44141df2d9f1c1 Mon Sep 17 00:00:00 2001 From: rjnasers Date: Thu, 27 Apr 2023 13:09:27 -0500 Subject: [PATCH 08/14] Fixing Deps. --- dependencies.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dependencies.gradle b/dependencies.gradle index 5b7ea58..dc4199e 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -1,10 +1,10 @@ // Add your dependencies here dependencies { - compile('com.github.GTNewHorizons:ForestryMC:4.5.2:dev') + 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.2-GTNH:api') {transitive = false} + compileOnly('com.github.GTNewHorizons:Botania:1.9.17-GTNH:api') {transitive = false} } From dbc4b238213738e5ca996c84b49e2917f7fe398c Mon Sep 17 00:00:00 2001 From: rjnasers Date: Thu, 27 Apr 2023 13:26:27 -0500 Subject: [PATCH 09/14] Updating image --- .../assets/magicbees/textures/items/beeRing.png | Bin 271 -> 271 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/main/resources/assets/magicbees/textures/items/beeRing.png b/src/main/resources/assets/magicbees/textures/items/beeRing.png index 0c940c18695ea3781017020030e0c072d8755015..321520ed500f6031b9b7d2856512f7034b64dad7 100644 GIT binary patch delta 243 zcmVsDg8lvl9U%S$EsY@dc~ z<~_lSycj7euyT60Q@jO9=Q>K tEJWW#?V(9&Kz}L=^Rtbz+kXzX)fXq?dd-l2kClM|iy@c>AZdoV0G}a582~c~n=5b{kghI<5(G1E zzQXDaT!Hxi`!0V54vURoLmr-GVNh`V17c#R$7TSE<{u{@25jLn1l<6*W+V*^FxOx+ z1gilrS+}A)`Tze<*u8?&1&n-P@5AKbE<+Q?2o$hQXaPr(7eIRdKiJR0AaDE!9B?22 tV`Ga6nnWWk0ik9lENK91!XPzw0{|G_bP=cKAPfKi002ovPDHLkV1h%YV+{ZR From 2b1e179eeb4892b0d6059d22ce62e2d82426c4c8 Mon Sep 17 00:00:00 2001 From: rjnasers Date: Thu, 27 Apr 2023 13:54:13 -0500 Subject: [PATCH 10/14] Updating gui --- .../java/magicbees/client/gui/GUIEffectRing.java | 4 ++-- .../assets/magicbees/textures/gui/ringScreen.png | Bin 0 -> 3534 bytes 2 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 src/main/resources/assets/magicbees/textures/gui/ringScreen.png diff --git a/src/main/java/magicbees/client/gui/GUIEffectRing.java b/src/main/java/magicbees/client/gui/GUIEffectRing.java index 742be15..4d4d31a 100644 --- a/src/main/java/magicbees/client/gui/GUIEffectRing.java +++ b/src/main/java/magicbees/client/gui/GUIEffectRing.java @@ -13,10 +13,10 @@ import org.lwjgl.opengl.GL11; public class GUIEffectRing extends GuiContainer { - public static final String BACKGROUND_FILE = "jarScreen.png"; + public static final String BACKGROUND_FILE = "ringScreen.png"; public static final ResourceLocation BACKGROUND_LOCATION = new ResourceLocation( CommonProxy.DOMAIN, - CommonProxy.GUI_TEXTURE + "jarScreen.png"); + CommonProxy.GUI_TEXTURE + BACKGROUND_FILE); private static final int WIDTH = 176; private static final int HEIGHT = 156; diff --git a/src/main/resources/assets/magicbees/textures/gui/ringScreen.png b/src/main/resources/assets/magicbees/textures/gui/ringScreen.png new file mode 100644 index 0000000000000000000000000000000000000000..816bb031d3b64f5e219dc81e84694a3c7dcd9ea7 GIT binary patch literal 3534 zcmeHIX;f258m$l{w6gU$3P=KRL2Z%Mts!iR3W_2qiz2d#+7K2SWDOxv9F{?lMV1yN z(*p>|5)gx|2?z|E8ihbmfkYu9O9TT+OhS@*I5U6d^qe#2%#ZO$zdu!{Ue&$#-TLnL zQk|XbRo8A>3jk0(=5Y8l05E6@1IkL!;1yne8CuUhcKD!cj5l|T73ymLhn~-tf1`Fx zklp*G)PqJb#9`|mYuG6b6;mYxN5!LP4Q0i33Vv(8>vM62rV4%?PmgMJ5lq_3W>46i zsR^aW^n25v3AakGy|`t5sr-`>My>Av3#{L*+GmaMU0YR+KaRy>1Gz(<;^mo~2ebvB zfgYR4Iy$UCLC+@Pgq}@JsmwEgJI555gEMTYM0jlJ-2lH+qCPH7mL)7w@oMdVjFAXJ zvRiTafo-vT-Z1;_ z5{Kf&jQ|hY^^CnsGzr(Tuv@>fT<2OtSpBGMI@jpuiSCzM5SA@~Zd_`L>>;Zkc@?sszWfM%*+|mqi

aY_6oTx~&l^-LkzbnaQb79NV{@Bt(0y zUHixr(v`FI`$6bpEI)e#zVOBTZB4Q{@;D{U zn>^<>(UQ=18?SaXJ$&atXCMJ@4q7*}t?FHpv=tyB?(Xh`#s;))O*Jc9ga%Ul_o7B< z@9V@L5KP?(GhQ99g}5>|0I9bQH)|k5MWTndqBLVv6q9Uk=F@LokNtTI-54Y(FE#qWP&Lc z&i?qSIB@3UX-`kjJw8?=L7~-(KU6|loykLfeOVoD5mQTe z8FbBBcadG;8dFRc_+Q*vGV7#Os4|jTsoe$f+^HjCp*m{T=j}8x>viI$eSk;6|M;SV z4#i>R%jE4DN159g0R^$_#Vr;ih>UDPRf?7(WQ3ZoWx+;G&7lsXv^1&oJ-e+tQ6%k7 zl}Egnmsox|FA9Urt7|WzYiXo(s91ljtPu&<+D?nC4)hINCTw1HmI zDOvW*op!6aq3R_#*r*J$7UmX&eH2>$s@eTM(t$*uiGdEN4#!4mYlCSzzJS3UZ#j_r z%YZP#hZaVHKin^#CCMjI3+y~ZqoA|X%-c{BYcKkm_#!LZU{O=kUgm}A56!sP3uE+1 zy|+W-kX5@dfcI+^YLo|^ih=Sw{5Ue)@E@@Rhd7;KGOj zq4dWIgjiERG#w?&IABq&Jo>CY$Imd?milHB2fY|%28bbSRe&?$!W!z5_o)Np33RO; znh@O%Ktq95)x`DS(kSPU3pyC(etI9YmTFb5gQw87KV`$FBL+K@|V$9z$kkSp% z>o+Lb?p6Z7l$!v5Q_y?(PcV%%nC^3C^AK4!o_FsJRPy&*bs_E#s&(@&0&$dE_OkL7Dh zoU9mu_FtJwPYO1nC`3j@vISSU#aJ8EJ?`@^F5Z}F!FMi0`3d#m=)C=}vDX+1r@tLB z-o&3>%F-=DzJ8>ej^XqzdHz0{@d&P-NFAg5dY@j$zCUw|I`|)WSK+2TZz&tpET3 literal 0 HcmV?d00001 From e24a94f0ba289c3d1c5d098c0a0c83aab3a97b28 Mon Sep 17 00:00:00 2001 From: rjnasers Date: Thu, 27 Apr 2023 21:40:15 -0500 Subject: [PATCH 11/14] PR comment fixes. --- .../client/gui/ContainerEffectJar.java | 45 ++------------ .../client/gui/ContainerEffectRing.java | 43 +------------ .../magicbees/client/gui/GUIEffectJar.java | 25 +------- .../magicbees/client/gui/GUIEffectRing.java | 21 +------ .../magicbees/client/gui/effectContainer.java | 55 +++++++++++++++++ .../java/magicbees/client/gui/effectGui.java | 31 ++++++++++ src/main/java/magicbees/item/ItemBeeRing.java | 61 +++++++++---------- .../magicbees/tileentity/RingHousing.java | 8 +-- 8 files changed, 132 insertions(+), 157 deletions(-) create mode 100644 src/main/java/magicbees/client/gui/effectContainer.java create mode 100644 src/main/java/magicbees/client/gui/effectGui.java diff --git a/src/main/java/magicbees/client/gui/ContainerEffectJar.java b/src/main/java/magicbees/client/gui/ContainerEffectJar.java index d504f10..ebc6ca5 100644 --- a/src/main/java/magicbees/client/gui/ContainerEffectJar.java +++ b/src/main/java/magicbees/client/gui/ContainerEffectJar.java @@ -12,27 +12,15 @@ import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -public class ContainerEffectJar extends Container { - - public TileEntityEffectJar jar; +public class ContainerEffectJar extends effectContainer { public int lastBeeHealth = 0; public int speciesColour = 0xffffff; + TileEntityEffectJar jar; public ContainerEffectJar(TileEntityEffectJar tileEntityEffectJar, EntityPlayer player) { - 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)); - } + super(tileEntityEffectJar, player); + jar = (TileEntityEffectJar) inventory; } @Override @@ -75,29 +63,4 @@ public class ContainerEffectJar extends Container { 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 2a6a423..5f9691c 100644 --- a/src/main/java/magicbees/client/gui/ContainerEffectRing.java +++ b/src/main/java/magicbees/client/gui/ContainerEffectRing.java @@ -9,24 +9,10 @@ import net.minecraft.item.ItemStack; import cpw.mods.fml.common.registry.GameRegistry; -public class ContainerEffectRing extends Container { - - InventoryBeeRing IBR; +public class ContainerEffectRing extends effectContainer { public ContainerEffectRing(InventoryBeeRing IBR, EntityPlayer player) { - this.IBR = IBR; - this.addSlotToContainer( - new SlotCustomItems(this.IBR, 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)); - } + super(IBR, player); } @Override @@ -34,31 +20,6 @@ public class ContainerEffectRing extends Container { return true; } - @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; - } - @Override public void detectAndSendChanges() { super.detectAndSendChanges(); diff --git a/src/main/java/magicbees/client/gui/GUIEffectJar.java b/src/main/java/magicbees/client/gui/GUIEffectJar.java index ae8659c..883ed82 100644 --- a/src/main/java/magicbees/client/gui/GUIEffectJar.java +++ b/src/main/java/magicbees/client/gui/GUIEffectJar.java @@ -9,28 +9,14 @@ import net.minecraft.util.ResourceLocation; import org.lwjgl.opengl.GL11; -public class GUIEffectJar extends GuiContainer { +public class GUIEffectJar extends effectGui { public static final String BACKGROUND_FILE = "jarScreen.png"; public static final ResourceLocation BACKGROUND_LOCATION = new ResourceLocation( CommonProxy.DOMAIN, - CommonProxy.GUI_TEXTURE + "jarScreen.png"); + CommonProxy.GUI_TEXTURE + BACKGROUND_FILE); - private static final int WIDTH = 176; - private static final int HEIGHT = 156; - private static final int SLOT_JAR_X = 80; - private static final int SLOT_JAR_Y = 22; - private static final int SLOT_INVENTORY_X = 8; - private static final int SLOT_INVENTORY_Y = 74; - 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)); @@ -38,11 +24,6 @@ public class GUIEffectJar extends GuiContainer { 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); @@ -51,7 +32,7 @@ public class GUIEffectJar extends GuiContainer { this.drawTexturedModalRect(this.guiLeft, this.guiTop, 0, 0, xSize, ySize); - TileEntityEffectJar jar = ((ContainerEffectJar) this.inventorySlots).jar; + TileEntityEffectJar jar = (TileEntityEffectJar) ((ContainerEffectJar) this.inventorySlots).inventory; 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 4d4d31a..704c856 100644 --- a/src/main/java/magicbees/client/gui/GUIEffectRing.java +++ b/src/main/java/magicbees/client/gui/GUIEffectRing.java @@ -4,31 +4,19 @@ import magicbees.item.ItemBeeRing; import magicbees.itemInventories.InventoryBeeRing; import magicbees.main.CommonProxy; -import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; import org.lwjgl.opengl.GL11; -public class GUIEffectRing extends GuiContainer { +public class GUIEffectRing extends effectGui { 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 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 GUIEffectRing(ItemStack itemStack, EntityPlayer player) { super( @@ -39,10 +27,7 @@ public class GUIEffectRing extends GuiContainer { 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) { @@ -52,7 +37,7 @@ public class GUIEffectRing extends GuiContainer { this.drawTexturedModalRect(this.guiLeft, this.guiTop, 0, 0, xSize, ySize); - InventoryBeeRing IBR = ((ContainerEffectRing) this.inventorySlots).IBR; + 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; diff --git a/src/main/java/magicbees/client/gui/effectContainer.java b/src/main/java/magicbees/client/gui/effectContainer.java new file mode 100644 index 0000000..cd44ad7 --- /dev/null +++ b/src/main/java/magicbees/client/gui/effectContainer.java @@ -0,0 +1,55 @@ +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 new file mode 100644 index 0000000..cbcd710 --- /dev/null +++ b/src/main/java/magicbees/client/gui/effectGui.java @@ -0,0 +1,31 @@ +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 528d5a4..025bc94 100644 --- a/src/main/java/magicbees/item/ItemBeeRing.java +++ b/src/main/java/magicbees/item/ItemBeeRing.java @@ -98,56 +98,55 @@ public class ItemBeeRing extends Item implements IBauble { // Logic to run the ring (this logic could be moved out of the item class, but it seems fine here) if (slot != -1) { - if (hasQueen(itemStack, (EntityPlayer) entityLivingBase, slot)) { - tickQueen(itemStack, (EntityPlayer) entityLivingBase, slot); - } else if (hasDrone(itemStack, (EntityPlayer) entityLivingBase, slot)) { - createQueenFromDrone(itemStack, (EntityPlayer) entityLivingBase, slot); + 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); } } } } } - private void createQueenFromDrone(ItemStack itemStack, EntityPlayer player, int slot) { + private void createQueenFromDrone(ItemStack itemStack, EntityPlayer player, int slot, InventoryBeeRing ringInventory) { - InventoryBeeRing IBR = getInventory(player, itemStack, slot, true); - ItemStack droneStack = IBR.getStackInSlot(0); + ItemStack droneStack = ringInventory.getStackInSlot(0); if (magicbees.bees.BeeManager.beeRoot.isDrone(droneStack)) { IBee bee = magicbees.bees.BeeManager.beeRoot.getMember(droneStack); if (droneStack.stackSize == 1) { - IBR.setInventorySlotContents(0, null); + ringInventory.setInventorySlotContents(0, null); } else { droneStack.stackSize = droneStack.stackSize - 1; - IBR.setInventorySlotContents(0, droneStack); + ringInventory.setInventorySlotContents(0, droneStack); } ItemStack temp = droneStack.copy(); temp.stackSize = 1; - IBR.setInventorySlotContents(1, temp); + ringInventory.setInventorySlotContents(1, temp); int current = bee.getHealth(); int max = bee.getMaxHealth(); - IBR.setCurrentBeeHealth((current * 100) / max); - IBR.setCurrentBeeColour(bee.getGenome().getPrimary().getIconColour(0)); + ringInventory.setCurrentBeeHealth((current * 100) / max); + ringInventory.setCurrentBeeColour(bee.getGenome().getPrimary().getIconColour(0)); } } - private boolean hasDrone(ItemStack itemStack, EntityPlayer player, int slot) { + private boolean hasDrone(ItemStack itemStack, EntityPlayer player, int slot, InventoryBeeRing ringInventory) { return getInventory(player, itemStack, slot, true).getStackInSlot(DRONE_SLOT) != null; } - private void tickQueen(ItemStack itemStack, EntityPlayer player, int slot) { + private void tickQueen(ItemStack itemStack, EntityPlayer player, int slot, InventoryBeeRing ringInventory) { - InventoryBeeRing IBR = getInventory(player, itemStack, slot, true); - IBee queen = magicbees.bees.BeeManager.beeRoot.getMember(IBR.getStackInSlot(QUEEN_SLOT)); - IBR.setCurrentBeeHealth((queen.getHealth() * 100) / queen.getMaxHealth()); - IBR.setCurrentBeeColour(queen.getGenome().getPrimary().getIconColour(0)); + 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, IBR); + RingHousing housingLogic = new RingHousing(player, ringInventory); - IBR.setEffectAndInitialize(queen); - IBR.effectData = queen.doEffect(IBR.effectData, housingLogic); - IBR.writeEffectNBT(); + 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 @@ -158,24 +157,24 @@ public class ItemBeeRing extends Item implements IBauble { // } // run the queen - if (IBR.throttle > 550) { - IBR.setThrottle(0); + if (ringInventory.throttle > 550) { + ringInventory.setThrottle(0); queen.age(player.getEntityWorld(), 0.26f); if (queen.getHealth() == 0) { - IBR.setInventorySlotContents(1, null); - IBR.setCurrentBeeHealth(0); - IBR.setCurrentBeeColour(0x0ffffff); + ringInventory.setInventorySlotContents(1, null); + ringInventory.setCurrentBeeHealth(0); + ringInventory.setCurrentBeeColour(0x0ffffff); } else { - queen.writeToNBT(IBR.contents[QUEEN_SLOT].stackTagCompound); + queen.writeToNBT(ringInventory.contents[QUEEN_SLOT].stackTagCompound); } } else { - IBR.setThrottle(IBR.throttle + 1); + ringInventory.setThrottle(ringInventory.throttle + 1); } } - private boolean hasQueen(ItemStack itemStack, EntityPlayer player, int slot) { - return getInventory(player, itemStack, slot, true).getStackInSlot(QUEEN_SLOT) != null; + private boolean hasQueen(ItemStack itemStack, EntityPlayer player, int slot, InventoryBeeRing ringInventory) { + return ringInventory.getStackInSlot(QUEEN_SLOT) != null; } @Override diff --git a/src/main/java/magicbees/tileentity/RingHousing.java b/src/main/java/magicbees/tileentity/RingHousing.java index 6555b67..6361f03 100644 --- a/src/main/java/magicbees/tileentity/RingHousing.java +++ b/src/main/java/magicbees/tileentity/RingHousing.java @@ -26,10 +26,10 @@ import forestry.api.core.IErrorState; // Class that simulates a BeeHouse using both player data and info from InventoryBeeRing public class RingHousing implements IBeeHousing { - EntityPlayer player; - BiomeGenBase biome; - IBeeHousingInventory inventory; - IBeekeepingLogic beekeepingLogic; + private final EntityPlayer player; + private final BiomeGenBase biome; + private final IBeeHousingInventory inventory; + private final IBeekeepingLogic beekeepingLogic; private static final IErrorLogic errorLogic = new RingHousing.RingErrorLogic(); private static final Iterable beeListeners = ImmutableSet.of(new DefaultBeeListener()); From f3d3a0a2dfae902bc797c15653c83d9afc4e87cd Mon Sep 17 00:00:00 2001 From: Alexander Anishin Date: Sat, 29 Apr 2023 13:11:51 +0300 Subject: [PATCH 12/14] Code refactoring --- dependencies.gradle | 2 +- .../client/gui/ContainerEffectJar.java | 45 ++- .../client/gui/ContainerEffectRing.java | 24 +- .../magicbees/client/gui/GUIEffectJar.java | 21 +- .../magicbees/client/gui/GUIEffectRing.java | 45 ++- .../java/magicbees/client/gui/GUIHandler.java | 8 +- .../magicbees/client/gui/effectContainer.java | 55 --- .../java/magicbees/client/gui/effectGui.java | 31 -- src/main/java/magicbees/item/ItemBeeRing.java | 203 +++++----- .../itemInventories/InventoryBeeRing.java | 370 ++++-------------- .../magicbees/tileentity/RingHousing.java | 12 +- 11 files changed, 270 insertions(+), 546 deletions(-) delete mode 100644 src/main/java/magicbees/client/gui/effectContainer.java delete mode 100644 src/main/java/magicbees/client/gui/effectGui.java 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 From 1cbc997be37cf8b950afd79c397c84c64ab4d834 Mon Sep 17 00:00:00 2001 From: rjnasers Date: Sat, 29 Apr 2023 13:20:38 -0500 Subject: [PATCH 13/14] Adding fix that should make calls only once per second and acts the same. After testing it seems to work, but if somewhere an effect is implemented very weird it might not. --- src/main/java/magicbees/item/ItemBeeRing.java | 29 ++++++++++++------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/src/main/java/magicbees/item/ItemBeeRing.java b/src/main/java/magicbees/item/ItemBeeRing.java index ceb76ec..37b634e 100644 --- a/src/main/java/magicbees/item/ItemBeeRing.java +++ b/src/main/java/magicbees/item/ItemBeeRing.java @@ -77,17 +77,19 @@ public class ItemBeeRing extends Item implements IBauble { @Override public void onWornTick(ItemStack itemStack, EntityLivingBase entityLivingBase) { - if (!(entityLivingBase instanceof EntityPlayer)) { - return; - } + if (entityLivingBase.worldObj.getWorldTime()% 20 == 0) { + if (!(entityLivingBase instanceof EntityPlayer)) { + return; + } - EntityPlayer player = (EntityPlayer) entityLivingBase; - InventoryBeeRing inventoryBeeRing = new InventoryBeeRing(itemStack, player); + EntityPlayer player = (EntityPlayer) entityLivingBase; + InventoryBeeRing inventoryBeeRing = new InventoryBeeRing(itemStack, player); - if (inventoryBeeRing.hasQueen()) { - tickQueen(player, inventoryBeeRing); - } else if (inventoryBeeRing.hasDrone()) { - createQueenFromDrone(inventoryBeeRing); + if (inventoryBeeRing.hasQueen()) { + tickQueen(player, inventoryBeeRing); + } else if (inventoryBeeRing.hasDrone()) { + createQueenFromDrone(inventoryBeeRing); + } } } @@ -124,6 +126,13 @@ public class ItemBeeRing extends Item implements IBauble { int index = inventoryBeeRing.getRingSlotIndex(); RingHousing housingLogic = new RingHousing(player, inventoryBeeRing); effects[index] = queen.doEffect(effects[index], housingLogic); + + try { + effects[index][0].setInteger(0, effects[index][0].getInteger(index) + 20); + effects[index][1].setInteger(0, effects[index][1].getInteger(index) + 20); + } + catch (Exception ignored) {} + if (player.worldObj.isRemote && player.worldObj.getWorldTime() % 5 == 0) { effects[index] = queen.doFX(effects[index], housingLogic); } @@ -143,7 +152,7 @@ public class ItemBeeRing extends Item implements IBauble { inventoryBeeRing.setQueen(queenStack); } } else { - inventoryBeeRing.setThrottle(throttle + 1); + inventoryBeeRing.setThrottle(throttle + 20); } } From 951f5a1ad55e02fd04f65b57911477b7abdb7616 Mon Sep 17 00:00:00 2001 From: rjnasers Date: Sat, 29 Apr 2023 13:21:23 -0500 Subject: [PATCH 14/14] Forgot Spotless --- src/main/java/magicbees/item/ItemBeeRing.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/java/magicbees/item/ItemBeeRing.java b/src/main/java/magicbees/item/ItemBeeRing.java index 37b634e..46bdd16 100644 --- a/src/main/java/magicbees/item/ItemBeeRing.java +++ b/src/main/java/magicbees/item/ItemBeeRing.java @@ -77,7 +77,7 @@ public class ItemBeeRing extends Item implements IBauble { @Override public void onWornTick(ItemStack itemStack, EntityLivingBase entityLivingBase) { - if (entityLivingBase.worldObj.getWorldTime()% 20 == 0) { + if (entityLivingBase.worldObj.getWorldTime() % 20 == 0) { if (!(entityLivingBase instanceof EntityPlayer)) { return; } @@ -130,8 +130,7 @@ public class ItemBeeRing extends Item implements IBauble { try { effects[index][0].setInteger(0, effects[index][0].getInteger(index) + 20); effects[index][1].setInteger(0, effects[index][1].getInteger(index) + 20); - } - catch (Exception ignored) {} + } catch (Exception ignored) {} if (player.worldObj.isRemote && player.worldObj.getWorldTime() % 5 == 0) { effects[index] = queen.doFX(effects[index], housingLogic);