Merge branch 'master' into Blood-Frames

This commit is contained in:
Martin Robertz authored and GitHub committed 2023-04-30 12:06:03 +02:00
commit 66b1f3e075
13 files changed
+642 -25

No files matched your search

@@ -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<InventoryBeeRing> {
public ContainerEffectRing(InventoryBeeRing inventory, InventoryPlayer playerInventory) {
super(inventory, playerInventory, 8, 74);
addSlotToContainer(
new SlotCustomItems(inventory, 0, 80, 22, GameRegistry.findItemStack("Forestry", "beeDroneGE", 1)));
}
}
@@ -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;
@@ -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<ContainerEffectRing, IInventory> {
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);
}
}
@@ -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;
}
}
@@ -2,5 +2,6 @@ package magicbees.client.gui;
public enum UIScreens {
EFFECT_JAR,
THAUMIC_APIARY,;
THAUMIC_APIARY,
EFFECT_RING
}
@@ -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<UUID, IEffectData[][]> 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;
}
}
@@ -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;
}
}
+4 -18
View File
@@ -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();
@@ -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<IBeeListener> beeListeners = ImmutableSet.of(new DefaultBeeListener());
private static final Iterable<IBeeModifier> 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<IBeeModifier> getBeeModifiers() {
return beeModifiers;
}
@Override
public Iterable<IBeeListener> 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<IErrorState> 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;
}
}
}