From 4940a6e6f9bed2502ffe75558c3f599fdddef6bb Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sat, 25 Jul 2015 11:06:10 +0200 Subject: [PATCH] Added Ring of Growh, tweaked Greenhouse Glass a bit --- .../creative/CreativeTab.java | 6 +- .../items/InitForeignPaxels.java | 8 +- .../actuallyadditions/items/InitItems.java | 5 + .../items/ItemGrowthRing.java | 109 ++++++++++++++++++ .../items/ItemPotionRing.java | 2 +- .../tile/TileEntityGreenhouseGlass.java | 9 +- 6 files changed, 128 insertions(+), 11 deletions(-) create mode 100644 src/main/java/ellpeck/actuallyadditions/items/ItemGrowthRing.java diff --git a/src/main/java/ellpeck/actuallyadditions/creative/CreativeTab.java b/src/main/java/ellpeck/actuallyadditions/creative/CreativeTab.java index b64fbcace..b50a77d38 100644 --- a/src/main/java/ellpeck/actuallyadditions/creative/CreativeTab.java +++ b/src/main/java/ellpeck/actuallyadditions/creative/CreativeTab.java @@ -125,7 +125,7 @@ public class CreativeTab extends CreativeTabs{ add(InitItems.diamondPaxel); add(InitItems.emeraldPaxel); add(InitItems.obsidianPaxel); - InitForeignPaxels.addToCreativeTab(this.list); + InitForeignPaxels.addToCreativeTab(); add(InitItems.itemPickaxeQuartz); add(InitItems.itemSwordQuartz); @@ -176,11 +176,11 @@ public class CreativeTab extends CreativeTabs{ return new ItemStack(this.getTabIconItem()); } - private void add(Item item){ + public void add(Item item){ item.getSubItems(item, instance, this.list); } - private void add(Block block){ + public void add(Block block){ block.getSubBlocks(new ItemStack(block).getItem(), instance, this.list); } } diff --git a/src/main/java/ellpeck/actuallyadditions/items/InitForeignPaxels.java b/src/main/java/ellpeck/actuallyadditions/items/InitForeignPaxels.java index e6d3393d6..be127135a 100644 --- a/src/main/java/ellpeck/actuallyadditions/items/InitForeignPaxels.java +++ b/src/main/java/ellpeck/actuallyadditions/items/InitForeignPaxels.java @@ -13,8 +13,6 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemTool; import net.minecraftforge.oredict.ShapelessOreRecipe; -import java.util.List; - public class InitForeignPaxels{ private static final String THERMAL_FOUNDATION = "ThermalFoundation"; @@ -83,15 +81,15 @@ public class InitForeignPaxels{ } } - public static void addToCreativeTab(List list){ + public static void addToCreativeTab(){ for(Item item : tfPaxels){ if(item != null){ - item.getSubItems(item, CreativeTab.instance, list); + CreativeTab.instance.add(item); } } for(Item item : mtPaxels){ if(item != null){ - item.getSubItems(item, CreativeTab.instance, list); + CreativeTab.instance.add(item); } } } diff --git a/src/main/java/ellpeck/actuallyadditions/items/InitItems.java b/src/main/java/ellpeck/actuallyadditions/items/InitItems.java index 210653006..0374f62f4 100644 --- a/src/main/java/ellpeck/actuallyadditions/items/InitItems.java +++ b/src/main/java/ellpeck/actuallyadditions/items/InitItems.java @@ -108,9 +108,14 @@ public class InitItems{ public static Item itemTeleStaff; public static Item itemWingsOfTheBats; + public static Item itemGrowthRing; + public static void init(){ ModUtil.LOGGER.info("Initializing Items..."); + itemGrowthRing = new ItemGrowthRing(); + ItemUtil.register(itemGrowthRing); + itemHelmEmerald = new ItemArmorAA("itemHelmEmerald", InitArmorMaterials.armorMaterialEmerald, 0, "gemEmerald", "armorEmerald"); itemChestEmerald = new ItemArmorAA("itemChestEmerald", InitArmorMaterials.armorMaterialEmerald, 1, "gemEmerald", "armorEmerald"); itemPantsEmerald = new ItemArmorAA("itemPantsEmerald", InitArmorMaterials.armorMaterialEmerald, 2, "gemEmerald", "armorEmerald"); diff --git a/src/main/java/ellpeck/actuallyadditions/items/ItemGrowthRing.java b/src/main/java/ellpeck/actuallyadditions/items/ItemGrowthRing.java new file mode 100644 index 000000000..1d9691403 --- /dev/null +++ b/src/main/java/ellpeck/actuallyadditions/items/ItemGrowthRing.java @@ -0,0 +1,109 @@ +package ellpeck.actuallyadditions.items; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import ellpeck.actuallyadditions.util.INameableItem; +import ellpeck.actuallyadditions.util.ModUtil; +import ellpeck.actuallyadditions.util.WorldPos; +import net.minecraft.block.Block; +import net.minecraft.block.BlockGrass; +import net.minecraft.block.IGrowable; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.EnumRarity; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.IIcon; +import net.minecraft.world.World; +import net.minecraftforge.common.IPlantable; + +import java.util.ArrayList; +import java.util.Random; + +public class ItemGrowthRing extends ItemEnergy implements INameableItem{ + + private static final int RANGE = 5; + private static final int ENERGY_USED_PER_TICK = 800; + //The waiting time per growth cycle + private static final int WAIT_TIME = 30; + //The amount of Growth Ticks given to random plants around + private static final int GROWTH_TICKS_PER_CYCLE = 50; + + public ItemGrowthRing(){ + super(1000000, 5000, 2); + } + + @Override + public void onUpdate(ItemStack stack, World world, Entity entity, int par4, boolean par5){ + if(!(entity instanceof EntityPlayer) || world.isRemote) return; + EntityPlayer player = (EntityPlayer)entity; + ItemStack equipped = player.getCurrentEquippedItem(); + + if(equipped != null && equipped == stack && this.getEnergyStored(stack) >= ENERGY_USED_PER_TICK){ + ArrayList blocks = new ArrayList(); + + if(stack.stackTagCompound == null) stack.setTagCompound(new NBTTagCompound()); + int waitTime = stack.stackTagCompound.getInteger("WaitTime"); + + //Adding all possible Blocks + if(waitTime >= WAIT_TIME){ + for(int x = -RANGE; x < RANGE+1; x++){ + for(int z = -RANGE; z < RANGE+1; z++){ + for(int y = -RANGE; y < RANGE+1; y++){ + int theX = (int)player.posX+x; + int theY = (int)player.posY+y; + int theZ = (int)player.posZ+z; + Block theBlock = world.getBlock(theX, theY, theZ); + if((theBlock instanceof IGrowable || theBlock instanceof IPlantable) && !(theBlock instanceof BlockGrass)){ + blocks.add(new WorldPos(world, theX, theY, theZ)); + } + } + } + } + + //Fertilizing the Blocks + if(!blocks.isEmpty()){ + for(int i = 0; i < GROWTH_TICKS_PER_CYCLE; i++){ + WorldPos pos = blocks.get(new Random().nextInt(blocks.size())); + + int metaBefore = pos.getMetadata(); + pos.getBlock().updateTick(world, pos.getX(), pos.getY(), pos.getZ(), world.rand); + + //Show Particles if Metadata changed + if(pos.getMetadata() != metaBefore){ + pos.getWorld().playAuxSFX(2005, pos.getX(), pos.getY(), pos.getZ(), 0); + } + } + } + + stack.stackTagCompound.setInteger("WaitTime", 0); + } + else stack.stackTagCompound.setInteger("WaitTime", waitTime+1); + + //Use Energy every tick + this.extractEnergy(stack, ENERGY_USED_PER_TICK, false); + } + } + + @Override + public EnumRarity getRarity(ItemStack stack){ + return EnumRarity.epic; + } + + @Override + public IIcon getIcon(ItemStack stack, int pass){ + return this.itemIcon; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(IIconRegister iconReg){ + this.itemIcon = iconReg.registerIcon(ModUtil.MOD_ID_LOWER + ":" + this.getName()); + } + + @Override + public String getName(){ + return "itemGrowthRing"; + } +} diff --git a/src/main/java/ellpeck/actuallyadditions/items/ItemPotionRing.java b/src/main/java/ellpeck/actuallyadditions/items/ItemPotionRing.java index a33957795..5dcdf07fb 100644 --- a/src/main/java/ellpeck/actuallyadditions/items/ItemPotionRing.java +++ b/src/main/java/ellpeck/actuallyadditions/items/ItemPotionRing.java @@ -45,7 +45,7 @@ public class ItemPotionRing extends Item implements INameableItem{ ThePotionRings effect = ThePotionRings.values()[stack.getItemDamage()]; if(!effect.needsWaitBeforeActivating || !thePlayer.isPotionActive(effect.effectID)){ if(!((ItemPotionRing)stack.getItem()).isAdvanced){ - if(equippedStack != null && stack.isItemEqual(equippedStack)){ + if(equippedStack != null && stack == equippedStack){ thePlayer.addPotionEffect(new PotionEffect(effect.effectID, effect.activeTime, effect.normalAmplifier, true)); } } diff --git a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityGreenhouseGlass.java b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityGreenhouseGlass.java index 6e7edc3a3..80f8d9172 100644 --- a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityGreenhouseGlass.java +++ b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityGreenhouseGlass.java @@ -5,6 +5,7 @@ import ellpeck.actuallyadditions.util.WorldPos; import net.minecraft.block.Block; import net.minecraft.block.BlockGrass; import net.minecraft.block.IGrowable; +import net.minecraftforge.common.IPlantable; import java.util.Random; @@ -23,8 +24,12 @@ public class TileEntityGreenhouseGlass extends TileEntityBase{ if(this.timeUntilNextFert > 0){ this.timeUntilNextFert--; if(timeUntilNextFert <= 0){ + int metaBefore = blockToFert.getMetadata(); worldObj.getBlock(blockToFert.getX(), blockToFert.getY(), blockToFert.getZ()).updateTick(worldObj, blockToFert.getX(), blockToFert.getY(), blockToFert.getZ(), worldObj.rand); - worldObj.playAuxSFX(2005, blockToFert.getX(), blockToFert.getY(), blockToFert.getZ(), 0); + + if(blockToFert.getMetadata() != metaBefore){ + worldObj.playAuxSFX(2005, blockToFert.getX(), blockToFert.getY(), blockToFert.getZ(), 0); + } } } else this.timeUntilNextFert = this.timeUntilNextFertToSet+new Random().nextInt(this.timeUntilNextFertToSet); @@ -37,7 +42,7 @@ public class TileEntityGreenhouseGlass extends TileEntityBase{ for(int i = yCoord-1; i > 0; i--){ Block block = worldObj.getBlock(xCoord, i, zCoord); if(block != null && !(worldObj.isAirBlock(xCoord, i, zCoord))){ - if(block instanceof IGrowable && !(block instanceof BlockGrass)){ + if((block instanceof IGrowable || block instanceof IPlantable) && !(block instanceof BlockGrass)){ return new WorldPos(worldObj, xCoord, i, zCoord); } else return null;