diff --git a/dependencies.gradle b/dependencies.gradle index 83638fa184..9c144bbf99 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -16,5 +16,6 @@ dependencies { compileOnly("com.github.GTNewHorizons:StructureLib:1.4.32:dev") + compileOnly("com.github.GTNewHorizons:GT5-Unofficial:5.09.52.362:dev") } diff --git a/src/main/java/vazkii/botania/api/lexicon/multiblock/compat/GTFoodHelper.java b/src/main/java/vazkii/botania/api/lexicon/multiblock/compat/GTFoodHelper.java new file mode 100644 index 0000000000..30d09a56e9 --- /dev/null +++ b/src/main/java/vazkii/botania/api/lexicon/multiblock/compat/GTFoodHelper.java @@ -0,0 +1,20 @@ +package vazkii.botania.common.block.subtile.generating.compat; + +import net.minecraft.item.ItemStack; + +import gregtech.api.interfaces.IFoodStat; +import gregtech.api.items.MetaGeneratedItem; + +public class GTFoodHelper { + + public static int getFoodHungerValue(ItemStack stack) { + if (!(stack.getItem() instanceof MetaGeneratedItem)) return -1; + + MetaGeneratedItem metaItem = (MetaGeneratedItem) stack.getItem(); + IFoodStat foodStat = metaItem.mFoodStats.get((short) stack.getItemDamage()); + if (foodStat == null) return -1; + + int hungerValue = foodStat.getFoodLevel(metaItem, stack, null); + return hungerValue > 0 ? hungerValue : -1; + } +} \ No newline at end of file diff --git a/src/main/java/vazkii/botania/common/Botania.java b/src/main/java/vazkii/botania/common/Botania.java index d6b8844dd1..f107105b61 100644 --- a/src/main/java/vazkii/botania/common/Botania.java +++ b/src/main/java/vazkii/botania/common/Botania.java @@ -43,6 +43,7 @@ public class Botania { public static boolean etFuturumLoaded = false; public static boolean storageDrawersLoaded = false; public static boolean structureLibLoaded = false; + public static boolean gt5Loaded = false; public static ILightHelper lightHelper; @@ -63,6 +64,7 @@ public void preInit(FMLPreInitializationEvent event) { etFuturumLoaded = Loader.isModLoaded("etfuturum"); storageDrawersLoaded = Loader.isModLoaded("StorageDrawers"); structureLibLoaded = Loader.isModLoaded("structurelib"); + gt5Loaded = Loader.isModLoaded("gregtech"); lightHelper = coloredLightsLoaded ? new LightHelperColored() : new LightHelperVanilla(); proxy.preInit(event); diff --git a/src/main/java/vazkii/botania/common/block/subtile/generating/SubTileGourmaryllis.java b/src/main/java/vazkii/botania/common/block/subtile/generating/SubTileGourmaryllis.java index 5109539e70..62b68ec041 100644 --- a/src/main/java/vazkii/botania/common/block/subtile/generating/SubTileGourmaryllis.java +++ b/src/main/java/vazkii/botania/common/block/subtile/generating/SubTileGourmaryllis.java @@ -22,15 +22,34 @@ import vazkii.botania.api.subtile.RadiusDescriptor; import vazkii.botania.api.subtile.SubTileGenerating; import vazkii.botania.common.lexicon.LexiconData; +import vazkii.botania.common.Botania; +import vazkii.botania.common.block.subtile.generating.compat.GTFoodHelper; public class SubTileGourmaryllis extends SubTileGenerating { private static final String TAG_COOLDOWN = "cooldown"; + private static final String TAG_STORED_MANA = "storedMana"; private static final int RANGE = 1; int cooldown = 0; int storedMana = 0; + private int getFoodHungerValue(ItemStack stack) { + if (stack == null) return -1; + + // Vanilla food + if (stack.getItem() instanceof ItemFood) { + return ((ItemFood) stack.getItem()).func_150905_g(stack); + } + + // GregTech food + if (Botania.gt5Loaded) { + return GTFoodHelper.getFoodHungerValue(stack); + } + + return -1; + } + @Override public void onUpdate() { super.onUpdate(); @@ -49,28 +68,28 @@ public void onUpdate() { List items = supertile.getWorldObj().getEntitiesWithinAABB(EntityItem.class, AxisAlignedBB.getBoundingBox(supertile.xCoord - RANGE, supertile.yCoord - RANGE, supertile.zCoord - RANGE, supertile.xCoord + RANGE + 1, supertile.yCoord + RANGE + 1, supertile.zCoord + RANGE + 1)); for(EntityItem item : items) { ItemStack stack = item.getEntityItem(); - if(stack != null && stack.getItem() instanceof ItemFood && !item.isDead && item.age >= slowdown) { - if(cooldown == 0) { - if(!remote) { - int val = ((ItemFood) stack.getItem()).func_150905_g(stack); - storedMana = val * val * 64; - cooldown = val * 10; - supertile.getWorldObj().playSoundEffect(supertile.xCoord, supertile.yCoord, supertile.zCoord, "random.eat", 0.2F, 0.5F + (float) Math.random() * 0.5F); - sync(); - } else - for(int i = 0; i < 10; i++) { - float m = 0.2F; - float mx = (float) (Math.random() - 0.5) * m; - float my = (float) (Math.random() - 0.5) * m; - float mz = (float) (Math.random() - 0.5) * m; - supertile.getWorldObj().spawnParticle("iconcrack_" + Item.getIdFromItem(stack.getItem()), item.posX, item.posY, item.posZ, mx, my, mz); - } - + if (stack == null || item.isDead || item.age < slowdown) continue; + + int hungerValue = getFoodHungerValue(stack); + if (hungerValue <= 0) continue; + + if (cooldown == 0) { + if (!remote) { + storedMana = hungerValue * hungerValue * 64; + cooldown = hungerValue * 10; + supertile.getWorldObj().playSoundEffect(supertile.xCoord, supertile.yCoord, supertile.zCoord, "random.eat", 0.2F, 0.5F + (float) Math.random() * 0.5F); + sync(); + } else { + for (int i = 0; i < 10; i++) { + float m = 0.2F; + float mx = (float) (Math.random() - 0.5) * m; + float my = (float) (Math.random() - 0.5) * m; + float mz = (float) (Math.random() - 0.5) * m; + supertile.getWorldObj().spawnParticle("iconcrack_" + Item.getIdFromItem(stack.getItem()), item.posX, item.posY, item.posZ, mx, my, mz); + } } - - if(!remote) - item.setDead(); } + if (!remote) item.setDead(); } } @@ -78,13 +97,14 @@ public void onUpdate() { public void writeToPacketNBT(NBTTagCompound cmp) { super.writeToPacketNBT(cmp); cmp.setInteger(TAG_COOLDOWN, cooldown); - cmp.setInteger(TAG_COOLDOWN, cooldown); + cmp.setInteger(TAG_STORED_MANA, storedMana); } @Override public void readFromPacketNBT(NBTTagCompound cmp) { super.readFromPacketNBT(cmp); cooldown = cmp.getInteger(TAG_COOLDOWN); + storedMana = cmp.getInteger(TAG_STORED_MANA); } @Override