From fc6f99df751e968b43c3305cec681b3285c1d207 Mon Sep 17 00:00:00 2001 From: WayofTime Date: Fri, 26 Aug 2016 15:53:58 -0400 Subject: [PATCH] Set it so that clicking on a mimic block that has a potion set to it on different sides will allow the person to set the player detection radius, potion spawn radius, and potion spawn intervals. Also made it so that you can set the player detection of the sentient mimic blocks. --- .../WayofTime/bloodmagic/tile/TileMimic.java | 133 ++++++++++++++---- .../assets/bloodmagic/lang/en_US.lang | 10 +- 2 files changed, 115 insertions(+), 28 deletions(-) diff --git a/src/main/java/WayofTime/bloodmagic/tile/TileMimic.java b/src/main/java/WayofTime/bloodmagic/tile/TileMimic.java index 3bb3082e..6da0e77e 100644 --- a/src/main/java/WayofTime/bloodmagic/tile/TileMimic.java +++ b/src/main/java/WayofTime/bloodmagic/tile/TileMimic.java @@ -41,7 +41,9 @@ public class TileMimic extends TileInventory implements ITickable public TileEntity mimicedTile = null; public int metaOfReplacedBlock = 0; - public int spawnRadius = 5; + public int playerCheckRadius = 5; + public int potionSpawnRadius = 5; + public int potionSpawnInterval = 40; private int internalCounter = 0; @@ -59,31 +61,37 @@ public class TileMimic extends TileInventory implements ITickable } internalCounter++; - if (internalCounter % 20 == 0 && this.getBlockMetadata() != BlockMimic.sentientMimicMeta) + if (internalCounter % potionSpawnInterval == 0 && this.getBlockMetadata() != BlockMimic.sentientMimicMeta) { ItemStack potionStack = this.getStackInSlot(1); if (potionStack != null) { - int potionSpawnRadius = 3; + AxisAlignedBB bb = new AxisAlignedBB(this.getPos()).expand(playerCheckRadius, playerCheckRadius, playerCheckRadius); + List playerList = worldObj.getEntitiesWithinAABB(EntityPlayer.class, bb); - double posX = this.pos.getX() + 0.5 + (2 * worldObj.rand.nextDouble() - 1) * potionSpawnRadius; - double posY = this.pos.getY() + 0.5 + (2 * worldObj.rand.nextDouble() - 1) * potionSpawnRadius; - double posZ = this.pos.getZ() + 0.5 + (2 * worldObj.rand.nextDouble() - 1) * potionSpawnRadius; + for (EntityPlayer player : playerList) + { + if (!player.capabilities.isCreativeMode) + { + double posX = this.pos.getX() + 0.5 + (2 * worldObj.rand.nextDouble() - 1) * potionSpawnRadius; + double posY = this.pos.getY() + 0.5 + (2 * worldObj.rand.nextDouble() - 1) * potionSpawnRadius; + double posZ = this.pos.getZ() + 0.5 + (2 * worldObj.rand.nextDouble() - 1) * potionSpawnRadius; - ItemStack newStack = new ItemStack(Items.SPLASH_POTION); - newStack.setTagCompound(potionStack.getTagCompound()); + ItemStack newStack = new ItemStack(potionStack.getItem() == ModItems.potionFlask ? Items.SPLASH_POTION : potionStack.getItem()); + newStack.setTagCompound(potionStack.getTagCompound()); - EntityPotion potionEntity = new EntityPotion(worldObj, posX, posY, posZ, newStack); + EntityPotion potionEntity = new EntityPotion(worldObj, posX, posY, posZ, newStack); -// potionEntity.setPosition(posX, posY, posZ); -// potionEntity.setItem(potionStack.copy()); - worldObj.spawnEntityInWorld(potionEntity); + worldObj.spawnEntityInWorld(potionEntity); + break; + } + } } } if (this.getBlockMetadata() == BlockMimic.sentientMimicMeta && !(mimicedTile instanceof IInventory)) { - AxisAlignedBB bb = new AxisAlignedBB(this.getPos()).expand(spawnRadius, spawnRadius, spawnRadius); + AxisAlignedBB bb = new AxisAlignedBB(this.getPos()).expand(playerCheckRadius, playerCheckRadius, playerCheckRadius); List playerList = worldObj.getEntitiesWithinAABB(EntityPlayer.class, bb); for (EntityPlayer player : playerList) @@ -100,17 +108,6 @@ public class TileMimic extends TileInventory implements ITickable public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack heldItem, EnumFacing side) { - if (performSpecialAbility(player)) - { - return true; - } - - if (player.isSneaking()) - return false; - - if (player.getHeldItem(hand) != null && player.getHeldItem(hand).getItem() == new ItemStack(ModBlocks.mimic).getItem()) - return false; - if (heldItem != null && player.capabilities.isCreativeMode) { List list = PotionUtils.getEffectsFromStack(heldItem); @@ -136,13 +133,24 @@ public class TileMimic extends TileInventory implements ITickable } } + if (performSpecialAbility(player, side)) + { + return true; + } + + if (player.isSneaking()) + return false; + + if (player.getHeldItem(hand) != null && player.getHeldItem(hand).getItem() == new ItemStack(ModBlocks.mimic).getItem()) + return false; + if (getStackInSlot(0) != null && player.getHeldItem(hand) != null) return false; if (!dropItemsOnBreak && !player.capabilities.isCreativeMode) return false; - Utils.insertItemToTile(this, player); + Utils.insertItemToTile(this, player, 0); this.refreshTileEntity(); if (player.capabilities.isCreativeMode) @@ -154,12 +162,79 @@ public class TileMimic extends TileInventory implements ITickable return true; } - public boolean performSpecialAbility(EntityPlayer player) + public boolean performSpecialAbility(EntityPlayer player, EnumFacing sideHit) { switch (this.getBlockMetadata()) { case BlockMimic.sentientMimicMeta: + if (player.capabilities.isCreativeMode) + { + if (player.isSneaking()) + { + playerCheckRadius = Math.max(playerCheckRadius - 1, 0); + ChatUtil.sendNoSpam(player, new TextComponentTranslation("chat.BloodMagic.mimic.detectRadius.down", playerCheckRadius)); + } else + { + playerCheckRadius++; + ChatUtil.sendNoSpam(player, new TextComponentTranslation("chat.BloodMagic.mimic.detectRadius.up", playerCheckRadius)); + } + + return false; + } return spawnMimicEntity(player); + default: + if (!player.capabilities.isCreativeMode) + { + return false; + } + + if (player.getActiveItemStack() == null && getStackInSlot(1) != null) + { + switch (sideHit) + { + case EAST: //When the block is clicked on the EAST or WEST side, potionSpawnRadius is edited. + case WEST: + if (player.isSneaking()) + { + potionSpawnRadius = Math.max(potionSpawnRadius - 1, 0); + ChatUtil.sendNoSpam(player, new TextComponentTranslation("chat.BloodMagic.mimic.potionSpawnRadius.down", potionSpawnRadius)); + } else + { + potionSpawnRadius++; + ChatUtil.sendNoSpam(player, new TextComponentTranslation("chat.BloodMagic.mimic.potionSpawnRadius.up", potionSpawnRadius)); + } + break; + case NORTH: //When the block is clicked on the NORTH or SOUTH side, detectRadius is edited. + case SOUTH: + if (player.isSneaking()) + { + playerCheckRadius = Math.max(playerCheckRadius - 1, 0); + ChatUtil.sendNoSpam(player, new TextComponentTranslation("chat.BloodMagic.mimic.detectRadius.down", playerCheckRadius)); + } else + { + playerCheckRadius++; + ChatUtil.sendNoSpam(player, new TextComponentTranslation("chat.BloodMagic.mimic.detectRadius.up", playerCheckRadius)); + } + break; + case UP: //When the block is clicked on the UP or DOWN side, potionSpawnInterval is edited. + case DOWN: + if (player.isSneaking()) + { + potionSpawnInterval = Math.max(potionSpawnInterval - 1, 1); + ChatUtil.sendNoSpam(player, new TextComponentTranslation("chat.BloodMagic.mimic.potionInterval.down", potionSpawnInterval)); + } else + { + potionSpawnInterval++; + ChatUtil.sendNoSpam(player, new TextComponentTranslation("chat.BloodMagic.mimic.potionInterval.up", potionSpawnInterval)); + } + break; + default: + break; + + } + + return true; + } } return false; } @@ -208,6 +283,9 @@ public class TileMimic extends TileInventory implements ITickable tileTag = tag.getCompoundTag("tileTag"); metaOfReplacedBlock = tag.getInteger("metaOfReplacedBlock"); mimicedTile = getTileFromStackWithTag(worldObj, pos, getStackInSlot(0), tileTag, metaOfReplacedBlock); + playerCheckRadius = tag.getInteger("playerCheckRadius"); + potionSpawnRadius = tag.getInteger("potionSpawnRadius"); + potionSpawnInterval = Math.max(1, tag.getInteger("potionSpawnInterval")); } @Override @@ -218,6 +296,9 @@ public class TileMimic extends TileInventory implements ITickable tag.setBoolean("dropItemsOnBreak", dropItemsOnBreak); tag.setTag("tileTag", tileTag); tag.setInteger("metaOfReplacedBlock", metaOfReplacedBlock); + tag.setInteger("playerCheckRadius", playerCheckRadius); + tag.setInteger("potionSpawnRadius", potionSpawnRadius); + tag.setInteger("potionSpawnInterval", potionSpawnInterval); return tag; } diff --git a/src/main/resources/assets/bloodmagic/lang/en_US.lang b/src/main/resources/assets/bloodmagic/lang/en_US.lang index a58288a1..1fca51a1 100644 --- a/src/main/resources/assets/bloodmagic/lang/en_US.lang +++ b/src/main/resources/assets/bloodmagic/lang/en_US.lang @@ -252,8 +252,8 @@ tile.BloodMagic.demonCrystalSTEADFAST.name=Steadfast Will Crystal Cluster tile.BloodMagic.mimic.nohitbox.name=Ethereal Opaque Mimic Block tile.BloodMagic.mimic.solidopaque.name=Opaque Mimic Block -tile.BloodMagic.mimic.solidclear.name=Clear Ethereal Mimic Block -tile.BloodMagic.mimic.solidlight.name=Lighted Ethereal Mimic Block +tile.BloodMagic.mimic.solidclear.name=Clear Mimic Block +tile.BloodMagic.mimic.solidlight.name=Lighted Mimic Block tile.BloodMagic.mimic.sentient.name=Sentient Mimic Block # Fluids @@ -589,6 +589,12 @@ chat.BloodMagic.altar.nextTier=The next tier of blood altar is missing %s at %s. chat.BloodMagic.mimic.potionSet=Potion trap has been set. chat.BloodMagic.mimic.potionRemove=Potion trap has been disabled. +chat.BloodMagic.mimic.potionInterval.up=Potion Interval has been increased to: %d ticks. +chat.BloodMagic.mimic.potionInterval.down=Potion Interval has been decreased to: %d ticks. +chat.BloodMagic.mimic.detectRadius.up=Player detection radius has been increased to: %d blocks. +chat.BloodMagic.mimic.detectRadius.down=Player detection radius has been decreased to: %d blocks. +chat.BloodMagic.mimic.potionSpawnRadius.up=Potion spawning radius has been increased to: %d blocks. +chat.BloodMagic.mimic.potionSpawnRadius.down=Potion spawning radius has been decreased to: %d blocks. # entity entity.BloodMagic.SentientSpecter.name=Sentient Specter