diff options
author | kekzdealer <kekzdealer@gmail.com> | 2020-05-17 00:51:06 +0200 |
---|---|---|
committer | kekzdealer <kekzdealer@gmail.com> | 2020-05-17 00:51:06 +0200 |
commit | 67c6d0d8c47434275288c69fa30040095fe1ed10 (patch) | |
tree | bd05fb8422f8f942e45134fa724be3b088054ab4 /src/main/java/common/blocks | |
parent | 0fb78d978d378836f7f3e15c1866b32d969a4911 (diff) | |
download | GT5-Unofficial-67c6d0d8c47434275288c69fa30040095fe1ed10.tar.gz GT5-Unofficial-67c6d0d8c47434275288c69fa30040095fe1ed10.tar.bz2 GT5-Unofficial-67c6d0d8c47434275288c69fa30040095fe1ed10.zip |
Added compatibility for Essentia Phials to my jars
Diffstat (limited to 'src/main/java/common/blocks')
-rw-r--r-- | src/main/java/common/blocks/Block_IchorJar.java | 99 | ||||
-rw-r--r-- | src/main/java/common/blocks/Block_ThaumiumReinforcedJar.java | 111 |
2 files changed, 199 insertions, 11 deletions
diff --git a/src/main/java/common/blocks/Block_IchorJar.java b/src/main/java/common/blocks/Block_IchorJar.java index 07696451b9..560fd0c37b 100644 --- a/src/main/java/common/blocks/Block_IchorJar.java +++ b/src/main/java/common/blocks/Block_IchorJar.java @@ -9,14 +9,20 @@ import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.Explosion; import net.minecraft.world.World; +import thaumcraft.api.aspects.Aspect; +import thaumcraft.api.aspects.AspectList; import thaumcraft.common.blocks.BlockJar; import thaumcraft.common.config.ConfigBlocks; +import thaumcraft.common.config.ConfigItems; +import thaumcraft.common.items.ItemEssence; +import thaumcraft.common.tiles.TileJarFillable; import java.util.ArrayList; import java.util.Collections; @@ -68,7 +74,98 @@ public class Block_IchorJar extends BlockJar { return new TE_IchorJar(); } } - + + @Override + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float f1, float f2, float f3) { + // Call parent method to handle jar emptying, labels stuff etc + super.onBlockActivated(world, x, y, z, player, side, f1, f2, f3); + // Interact with Essentia Phials if the player holds one + final ItemStack heldItem = player.getHeldItem(); + if(heldItem != null && heldItem.getItem() == ConfigItems.itemEssence) { + final TileEntity te = world.getTileEntity(x, y, z); + if(te instanceof TE_IchorJar) { + return dealWithPhial(world, player, x, y, z); + } else if(te instanceof TE_IchorVoidJar) { + return dealWithPhial(world, player, x, y, z); + } + } + + return true; + } + + /** + * Handle compatibility with Essentia Phials + * @param world + * Pass through from onBlockActivated() + * @param player + * Pass through from onBlockActivated() + * @param x + * Pass through from onBlockActivated() + * @param y + * Pass through from onBlockActivated() + * @param z + * Pass through from onBlockActivated() + * @return Not sure tbh + */ + private boolean dealWithPhial(World world, EntityPlayer player, int x, int y, int z) { + final TileJarFillable jarTE = (TileJarFillable) world.getTileEntity(x, y, z); + final ItemStack heldItem = player.getHeldItem(); + // Check whether to fill or to drain the phial + if(heldItem.getItemDamage() == 0) { + if(jarTE.amount >= 8){ + if (world.isRemote) { + player.swingItem(); + return false; + } + + final Aspect jarAspect = Aspect.getAspect(jarTE.aspect.getTag()); + if(jarTE.takeFromContainer(jarAspect, 8)) { + // Take an empty phial from the player's inventory + heldItem.stackSize--; + // Fill a new phial + final ItemStack filledPhial = new ItemStack(ConfigItems.itemEssence, 1, 1); + final AspectList phialContent = new AspectList().add(jarAspect, 8); + ((ItemEssence) ConfigItems.itemEssence).setAspects(filledPhial, phialContent); + // Drop on ground if there's no inventory space + if (!player.inventory.addItemStackToInventory(filledPhial)) { + world.spawnEntityInWorld(new EntityItem(world, (float)x + 0.5F, (float)y + 0.5F, (float)z + 0.5F, filledPhial)); + } + + world.playSoundAtEntity(player, "game.neutral.swim", 0.25F, 1.0F); + player.inventoryContainer.detectAndSendChanges(); + return true; + } + } + } else { + final AspectList phialContent = ((ItemEssence) ConfigItems.itemEssence).getAspects(heldItem); + if(phialContent != null && phialContent.size() == 1) { + final Aspect phialAspect = phialContent.getAspects()[0]; + if(jarTE.amount + 8 <= jarTE.maxAmount && jarTE.doesContainerAccept(phialAspect)) { + if (world.isRemote) { + player.swingItem(); + return false; + } + + if(jarTE.addToContainer(phialAspect, 8) == 0) { + world.markBlockForUpdate(x, y, z); + jarTE.markDirty(); + heldItem.stackSize--; + // Drop on ground if there's no inventory space + if (!player.inventory.addItemStackToInventory(new ItemStack(ConfigItems.itemEssence, 1, 0))) { + world.spawnEntityInWorld(new EntityItem(world, (float)x + 0.5F, (float)y + 0.5F, (float)z + 0.5F, new ItemStack(ConfigItems.itemEssence, 1, 0))); + } + + world.playSoundAtEntity(player, "game.neutral.swim", 0.25F, 1.0F); + player.inventoryContainer.detectAndSendChanges(); + return true; + } + } + } + } + + return true; + } + @Override public void breakBlock(World world, int x, int y, int z, Block par5, int par6) { final TileEntity te = world.getTileEntity(x, y, z); diff --git a/src/main/java/common/blocks/Block_ThaumiumReinforcedJar.java b/src/main/java/common/blocks/Block_ThaumiumReinforcedJar.java index 873d24a465..61ca0e2390 100644 --- a/src/main/java/common/blocks/Block_ThaumiumReinforcedJar.java +++ b/src/main/java/common/blocks/Block_ThaumiumReinforcedJar.java @@ -1,10 +1,5 @@ package common.blocks; -import java.lang.reflect.Array; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - import common.itemBlocks.IB_ThaumiumReinforcedJar; import common.tileentities.TE_ThaumiumReinforcedJar; import common.tileentities.TE_ThaumiumReinforcedVoidJar; @@ -22,15 +17,20 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.Explosion; import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; +import thaumcraft.api.aspects.Aspect; import thaumcraft.api.aspects.AspectList; import thaumcraft.common.blocks.BlockJar; import thaumcraft.common.config.ConfigBlocks; import thaumcraft.common.config.ConfigItems; +import thaumcraft.common.items.ItemEssence; +import thaumcraft.common.tiles.TileJarFillable; + +import java.util.ArrayList; +import java.util.List; public class Block_ThaumiumReinforcedJar extends BlockJar { - private static Block_ThaumiumReinforcedJar instance = new Block_ThaumiumReinforcedJar(); + private static final Block_ThaumiumReinforcedJar instance = new Block_ThaumiumReinforcedJar(); private Block_ThaumiumReinforcedJar() { super(); @@ -114,13 +114,104 @@ public class Block_ThaumiumReinforcedJar extends BlockJar { } } } - + + @Override + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float f1, float f2, float f3) { + // Call parent method to handle jar emptying, labels stuff etc + super.onBlockActivated(world, x, y, z, player, side, f1, f2, f3); + // Interact with Essentia Phials if the player holds one + final ItemStack heldItem = player.getHeldItem(); + if(heldItem != null && heldItem.getItem() == ConfigItems.itemEssence) { + final TileEntity te = world.getTileEntity(x, y, z); + if(te instanceof TE_ThaumiumReinforcedJar) { + return dealWithPhial(world, player, x, y, z); + } else if(te instanceof TE_ThaumiumReinforcedVoidJar) { + return dealWithPhial(world, player, x, y, z); + } + } + + return true; + } + + /** + * Handle compatibility with Essentia Phials + * @param world + * Pass through from onBlockActivated() + * @param player + * Pass through from onBlockActivated() + * @param x + * Pass through from onBlockActivated() + * @param y + * Pass through from onBlockActivated() + * @param z + * Pass through from onBlockActivated() + * @return Not sure tbh + */ + private boolean dealWithPhial(World world, EntityPlayer player, int x, int y, int z) { + final TileJarFillable kte = (TileJarFillable) world.getTileEntity(x, y, z); + final ItemStack heldItem = player.getHeldItem(); + // Check whether to fill or to drain the phial + if(heldItem.getItemDamage() == 0) { + if(kte.amount >= 8){ + if (world.isRemote) { + player.swingItem(); + return false; + } + + final Aspect jarAspect = Aspect.getAspect(kte.aspect.getTag()); + if(kte.takeFromContainer(jarAspect, 8)) { + // Take an empty phial from the player's inventory + heldItem.stackSize--; + // Fill a new phial + final ItemStack filledPhial = new ItemStack(ConfigItems.itemEssence, 1, 1); + final AspectList phialContent = new AspectList().add(jarAspect, 8); + ((ItemEssence) ConfigItems.itemEssence).setAspects(filledPhial, phialContent); + // Drop on ground if there's no inventory space + if (!player.inventory.addItemStackToInventory(filledPhial)) { + world.spawnEntityInWorld(new EntityItem(world, (float)x + 0.5F, (float)y + 0.5F, (float)z + 0.5F, filledPhial)); + } + + world.playSoundAtEntity(player, "game.neutral.swim", 0.25F, 1.0F); + player.inventoryContainer.detectAndSendChanges(); + return true; + } + } + } else { + final AspectList phialContent = ((ItemEssence) ConfigItems.itemEssence).getAspects(heldItem); + if(phialContent != null && phialContent.size() == 1) { + final Aspect phialAspect = phialContent.getAspects()[0]; + if(kte.amount + 8 <= kte.maxAmount && kte.doesContainerAccept(phialAspect)) { + if (world.isRemote) { + player.swingItem(); + return false; + } + + if(kte.addToContainer(phialAspect, 8) == 0) { + world.markBlockForUpdate(x, y, z); + kte.markDirty(); + heldItem.stackSize--; + // Drop on ground if there's no inventory space + if (!player.inventory.addItemStackToInventory(new ItemStack(ConfigItems.itemEssence, 1, 0))) { + world.spawnEntityInWorld(new EntityItem(world, (float)x + 0.5F, (float)y + 0.5F, (float)z + 0.5F, new ItemStack(ConfigItems.itemEssence, 1, 0))); + } + + world.playSoundAtEntity(player, "game.neutral.swim", 0.25F, 1.0F); + player.inventoryContainer.detectAndSendChanges(); + return true; + } + } + } + } + + return true; + } + @Override public ArrayList<ItemStack> getDrops(World world, int x, int y, int z, int meta, int fortune) { final ArrayList<ItemStack> drops = new ArrayList<>(); drops.add(new ItemStack(this, 1, (meta == 3) ? 3 : 0)); final TileEntity te = world.getTileEntity(x, y, z); - if(te instanceof TE_ThaumiumReinforcedJar) { + if(te instanceof TE_ThaumiumReinforcedJar) { final TE_ThaumiumReinforcedJar ite = (TE_ThaumiumReinforcedJar) te; if(ite.aspectFilter != null){ final ItemStack droppedLabel = new ItemStack(ConfigItems.itemResource, 1, 13); @@ -129,7 +220,7 @@ public class Block_ThaumiumReinforcedJar extends BlockJar { aspect.writeToNBT(droppedLabel.getTagCompound()); drops.add(droppedLabel); } - } else if(te instanceof TE_ThaumiumReinforcedVoidJar) { + } else if(te instanceof TE_ThaumiumReinforcedVoidJar) { final TE_ThaumiumReinforcedVoidJar ite = (TE_ThaumiumReinforcedVoidJar) te; if(ite.aspectFilter != null) { final ItemStack droppedLabel = new ItemStack(ConfigItems.itemResource, 1, 13); |