diff --git a/dependencies.gradle b/dependencies.gradle index 9d7ff0d..da6e08b 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -9,3 +9,4 @@ dependencies { 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..56030ec --- /dev/null +++ b/src/main/java/magicbees/client/gui/ContainerEffectRing.java @@ -0,0 +1,17 @@ +package magicbees.client.gui; + +import magicbees.itemInventories.InventoryBeeRing; + +import net.minecraft.entity.player.InventoryPlayer; + +import cpw.mods.fml.common.registry.GameRegistry; +import forestry.core.gui.ContainerItemInventory; + +public class ContainerEffectRing extends ContainerItemInventory { + + 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 22cc24f..5918272 100644 --- a/src/main/java/magicbees/client/gui/GUIEffectJar.java +++ b/src/main/java/magicbees/client/gui/GUIEffectJar.java @@ -19,10 +19,6 @@ public class GUIEffectJar extends GuiContainer { 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; 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..02ea052 --- /dev/null +++ b/src/main/java/magicbees/client/gui/GUIEffectRing.java @@ -0,0 +1,63 @@ +package magicbees.client.gui; + +import magicbees.itemInventories.InventoryBeeRing; +import magicbees.main.CommonProxy; + +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.IInventory; +import net.minecraft.util.ResourceLocation; + +import org.lwjgl.opengl.GL11; + +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; + + 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 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); + + 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 - (this.inventoryBeeRing.getCurrentBeeHealth() * 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 6bc9277..6513ecc 100644 --- a/src/main/java/magicbees/client/gui/GUIHandler.java +++ b/src/main/java/magicbees/client/gui/GUIHandler.java @@ -1,5 +1,8 @@ package magicbees.client.gui; +import magicbees.itemInventories.InventoryBeeRing; +import magicbees.tileentity.TileEntityEffectJar; +import magicbees.tileentity.TileEntityMagicApiary; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.world.World; @@ -18,6 +21,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(new InventoryBeeRing(player.getHeldItem(), player), player.inventory); } return value; @@ -30,8 +35,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(new InventoryBeeRing(player.getHeldItem(), player), player.inventory); } + 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..46bdd16 --- /dev/null +++ b/src/main/java/magicbees/item/ItemBeeRing.java @@ -0,0 +1,195 @@ +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.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +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 forestry.api.apiculture.IBee; +import forestry.api.genetics.IEffectData; + +public class ItemBeeRing extends Item implements IBauble { + + private static final Map PLAYER_EFFECTS = new HashMap<>(); + + public ItemBeeRing() { + super(); + this.setMaxStackSize(1); + this.setNoRepair(); + this.setMaxDamage(0); + this.setTextureName(CommonProxy.DOMAIN + ":beeRing"); + this.setCreativeTab(TabMagicBees.tabMagicBees); + this.setUnlocalizedName("beeRing"); + GameRegistry.registerItem(this, "beeRing"); + } + + @Override + public ItemStack onItemRightClick(ItemStack itemStack, World world, EntityPlayer player) { + if (!world.isRemote) { + 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(), + world, + (int) player.posX, + (int) player.posY, + (int) player.posZ); + } + } + return itemStack; + } + + @Override + public BaubleType getBaubleType(ItemStack itemStack) { + return BaubleType.RING; + } + + @Override + public void onWornTick(ItemStack itemStack, EntityLivingBase entityLivingBase) { + if (entityLivingBase.worldObj.getWorldTime() % 20 == 0) { + if (!(entityLivingBase instanceof EntityPlayer)) { + return; + } + + EntityPlayer player = (EntityPlayer) entityLivingBase; + InventoryBeeRing inventoryBeeRing = new InventoryBeeRing(itemStack, player); + + if (inventoryBeeRing.hasQueen()) { + tickQueen(player, inventoryBeeRing); + } else if (inventoryBeeRing.hasDrone()) { + createQueenFromDrone(inventoryBeeRing); + } + } + } + + private void createQueenFromDrone(InventoryBeeRing inventoryBeeRing) { + ItemStack droneStack = inventoryBeeRing.getDrone(); + if (BeeManager.beeRoot.isDrone(droneStack)) { + IBee bee = BeeManager.beeRoot.getMember(droneStack); + if (droneStack.stackSize == 1) { + inventoryBeeRing.setDrone(null); + } else { + droneStack.stackSize--; + inventoryBeeRing.setDrone(droneStack); + } + + 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 void tickQueen(EntityPlayer player, InventoryBeeRing inventoryBeeRing) { + ItemStack queenStack = inventoryBeeRing.getQueen(); + IBee queen = BeeManager.beeRoot.getMember(queenStack); + + 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); + + 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); + } + setPlayerEffects(player, effects); + + int throttle = inventoryBeeRing.getThrottle(); + if (throttle > 550) { + inventoryBeeRing.setThrottle(0); + queen.age(player.worldObj, 0.26f); + + if (queen.getHealth() == 0) { + inventoryBeeRing.setQueen(null); + inventoryBeeRing.setCurrentBeeHealth(0); + inventoryBeeRing.setCurrentBeeColour(0x0ffffff); + } else { + queen.writeToNBT(queenStack.getTagCompound()); + inventoryBeeRing.setQueen(queenStack); + } + } else { + inventoryBeeRing.setThrottle(throttle + 20); + } + } + + 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) {} + + @Override + public boolean canEquip(ItemStack itemStack, EntityLivingBase entityLivingBase) { + return true; + } + + @Override + public boolean canUnequip(ItemStack itemStack, EntityLivingBase entityLivingBase) { + 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..7a9c9bf --- /dev/null +++ b/src/main/java/magicbees/itemInventories/InventoryBeeRing.java @@ -0,0 +1,119 @@ +package magicbees.itemInventories; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; + +import forestry.core.inventory.ItemInventory; + +public class InventoryBeeRing extends ItemInventory { + + 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"; + + private static final int DRONE_SLOT = 0; + private static final int QUEEN_SLOT = 1; + + private int ringSlotIndex; + private int currentBeeHealth; + private int currentBeeColour; + private int throttle; + + public InventoryBeeRing(ItemStack stack, EntityPlayer player) { + super(player, 2, stack); + } + + @Override + public void readFromNBT(NBTTagCompound compound) { + if (compound == null) { + compound = new NBTTagCompound(); + getParent().setTagCompound(compound); + } + + super.readFromNBT(compound); + if (compound.hasKey(KEY_SLOT_INDEX)) { + this.ringSlotIndex = compound.getInteger(KEY_SLOT_INDEX); + } + if (compound.hasKey(KEY_HEALTH)) { + this.currentBeeHealth = compound.getInteger(KEY_HEALTH); + } + if (compound.hasKey(KEY_COLOUR)) { + this.currentBeeColour = compound.getInteger(KEY_COLOUR); + } + if (compound.hasKey(KEY_THROTTLE)) { + this.throttle = compound.getInteger(KEY_THROTTLE); + } + } + + 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; + getParent().getTagCompound().setInteger(KEY_HEALTH, this.currentBeeHealth); + } + + public int getCurrentBeeColour() { + return this.currentBeeColour; + } + + public void setCurrentBeeColour(int colour) { + this.currentBeeColour = colour; + 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 + public String getInventoryName() { + return "beeRingInventory"; + } + + @Override + public boolean hasCustomInventoryName() { + return false; + } +} diff --git a/src/main/java/magicbees/main/Config.java b/src/main/java/magicbees/main/Config.java index f277a69..8e82756 100644 --- a/src/main/java/magicbees/main/Config.java +++ b/src/main/java/magicbees/main/Config.java @@ -27,24 +27,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; @@ -127,6 +110,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; @@ -198,6 +182,8 @@ public class Config { miscResources = new ItemMiscResources(); pollen = new ItemPollen(); moonDial = new ItemMoonDial(); + beeRing = new ItemBeeRing(); + setupJellyBaby(); setupNuggets(); setupMysteriousMagnet(); diff --git a/src/main/java/magicbees/tileentity/RingHousing.java b/src/main/java/magicbees/tileentity/RingHousing.java new file mode 100644 index 0000000..a738589 --- /dev/null +++ b/src/main/java/magicbees/tileentity/RingHousing.java @@ -0,0 +1,232 @@ +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; + +// Class that simulates a BeeHouse using both player data and info from InventoryBeeRing +public class RingHousing implements IBeeHousing { + + 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()); + private static final Iterable beeModifiers = ImmutableSet.of(new RingHousing.RingHousingModifier()); + + public RingHousing(EntityPlayer player, InventoryBeeRing inventoryBeeRing) { + this.player = player; + this.biome = player.getEntityWorld().getBiomeGenForCoords((int) player.posX, (int) player.posY); + this.inventory = new RingBeeHousingInventory(inventoryBeeRing); + 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 inventoryBeeRing; + + public RingBeeHousingInventory(InventoryBeeRing IBR) { + this.inventoryBeeRing = IBR; + } + + @Override + public ItemStack getQueen() { + return inventoryBeeRing.getQueen(); + } + + @Override + public ItemStack getDrone() { + return null; + } + + @Override + public void setQueen(ItemStack itemStack) { + inventoryBeeRing.setQueen(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 69ee2b1..bec079d 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 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 0000000..816bb03 Binary files /dev/null and b/src/main/resources/assets/magicbees/textures/gui/ringScreen.png differ 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 0000000..321520e Binary files /dev/null and b/src/main/resources/assets/magicbees/textures/items/beeRing.png differ