From e20a82a4ad235883501ebf9f771c83881e6b32c7 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Mon, 16 May 2016 17:00:29 +0200 Subject: [PATCH] Firework Box Minecart! --- .../mod/ActuallyAdditions.java | 4 +- .../mod/creative/CreativeTab.java | 1 + .../mod/entity/EntityFireworkBoxMinecart.java | 64 ++++++++++ .../mod/entity/EntityRFMinecart.java | 36 ++++++ .../mod/entity/InitEntities.java | 18 +++ .../mod/items/InitItems.java | 9 +- .../mod/items/ItemFertilizer.java | 4 + .../mod/items/ItemFireworkBoxMinecart.java | 20 +++ .../mod/items/ItemMinecartAA.java | 116 ++++++++++++++++++ .../mod/material/InitArmorMaterials.java | 26 ++-- .../mod/material/InitToolMaterials.java | 26 ++-- .../mod/misc/BannerHelper.java | 2 +- .../mod/tile/TileEntityFireworkBox.java | 31 +++-- .../actuallyadditions/mod/util/Util.java | 22 ++-- .../assets/actuallyadditions/lang/en_US.lang | 1 + .../models/item/itemMinecartFireworkBox.json | 6 + .../items/itemMinecartFireworkBox.png | Bin 0 -> 597 bytes 17 files changed, 337 insertions(+), 49 deletions(-) create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/entity/EntityFireworkBoxMinecart.java create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/entity/EntityRFMinecart.java create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/entity/InitEntities.java create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFireworkBoxMinecart.java create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMinecartAA.java create mode 100644 src/main/resources/assets/actuallyadditions/models/item/itemMinecartFireworkBox.json create mode 100644 src/main/resources/assets/actuallyadditions/textures/items/itemMinecartFireworkBox.png diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java b/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java index 50a0cffab..748dca3df 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java @@ -18,6 +18,7 @@ import de.ellpeck.actuallyadditions.mod.config.ConfigurationHandler; import de.ellpeck.actuallyadditions.mod.crafting.CrusherCrafting; import de.ellpeck.actuallyadditions.mod.crafting.InitCrafting; import de.ellpeck.actuallyadditions.mod.crafting.ItemCrafting; +import de.ellpeck.actuallyadditions.mod.entity.InitEntities; import de.ellpeck.actuallyadditions.mod.event.InitEvents; import de.ellpeck.actuallyadditions.mod.fluids.InitFluids; import de.ellpeck.actuallyadditions.mod.gen.InitVillager; @@ -78,6 +79,7 @@ public class ActuallyAdditions{ PacketHandler.init(); InitToolMaterials.init(); InitArmorMaterials.init(); + InitEntities.init(); InitBlocks.init(); InitFluids.init(); InitItems.init(); @@ -129,8 +131,6 @@ public class ActuallyAdditions{ @EventHandler public void serverStarting(FMLServerStartingEvent event){ - Util.registerDispenserHandler(InitItems.itemFertilizer, new DispenserHandlerFertilize()); - WorldData.init(event.getServer()); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java b/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java index d0822359b..daef36f91 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java @@ -154,6 +154,7 @@ public class CreativeTab extends CreativeTabs{ this.add(InitItems.itemBatteryQuadruple); this.add(InitItems.itemBatteryQuintuple); this.add(InitItems.itemTeleStaff); + this.add(InitItems.itemMinecartFireworkBox); this.add(InitItems.itemGrowthRing); this.add(InitItems.itemMagnetRing); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/entity/EntityFireworkBoxMinecart.java b/src/main/java/de/ellpeck/actuallyadditions/mod/entity/EntityFireworkBoxMinecart.java new file mode 100644 index 000000000..c51543040 --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/entity/EntityFireworkBoxMinecart.java @@ -0,0 +1,64 @@ +package de.ellpeck.actuallyadditions.mod.entity; + +import de.ellpeck.actuallyadditions.mod.blocks.InitBlocks; +import de.ellpeck.actuallyadditions.mod.tile.TileEntityFireworkBox; +import net.minecraft.block.state.IBlockState; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; + +public class EntityFireworkBoxMinecart extends EntityRFMinecart{ + + private int cooldownTimer; + private boolean isPowered; + + public EntityFireworkBoxMinecart(World world){ + super(world, 20000, 1000); + } + + @Override + public void onActivatorRailPass(int x, int y, int z, boolean receivingPower){ + if(receivingPower != this.isPowered){ + this.isPowered = receivingPower; + } + } + + @Override + public void onUpdate(){ + super.onUpdate(); + + if(!this.worldObj.isRemote){ + if(this.cooldownTimer > 0 && this.isPowered){ + this.cooldownTimer--; + if(this.cooldownTimer <= 0){ + //TODO Check for power level here + make charging possible + TileEntityFireworkBox.spawnFireworks(this.worldObj, this.posX, this.posY, this.posZ); + this.storage.extractEnergy(TileEntityFireworkBox.USE_PER_SHOT, false); + } + } + else{ + this.cooldownTimer = 100; + } + } + } + + @Override + public IBlockState getDisplayTile(){ + return InitBlocks.blockFireworkBox.getDefaultState(); + } + + @Override + protected void writeEntityToNBT(NBTTagCompound compound){ + super.writeEntityToNBT(compound); + + compound.setInteger("Cooldown", this.cooldownTimer); + compound.setBoolean("Powered", this.isPowered); + } + + @Override + protected void readEntityFromNBT(NBTTagCompound compound){ + super.readEntityFromNBT(compound); + + this.cooldownTimer = compound.getInteger("Cooldown"); + this.isPowered = compound.getBoolean("Powered"); + } +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/entity/EntityRFMinecart.java b/src/main/java/de/ellpeck/actuallyadditions/mod/entity/EntityRFMinecart.java new file mode 100644 index 000000000..992f260d1 --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/entity/EntityRFMinecart.java @@ -0,0 +1,36 @@ +package de.ellpeck.actuallyadditions.mod.entity; + +import cofh.api.energy.EnergyStorage; +import net.minecraft.entity.item.EntityMinecart; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; + +public class EntityRFMinecart extends EntityMinecart{ + + public EnergyStorage storage; + + public EntityRFMinecart(World world, int rfCap, int maxTransfer){ + super(world); + + this.storage = new EnergyStorage(rfCap, maxTransfer); + } + + @Override + protected void writeEntityToNBT(NBTTagCompound compound){ + super.writeEntityToNBT(compound); + + this.storage.writeToNBT(compound); + } + + @Override + protected void readEntityFromNBT(NBTTagCompound compound){ + super.readEntityFromNBT(compound); + + this.storage.readFromNBT(compound); + } + + @Override + public Type getType(){ + return Type.CHEST; + } +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/entity/InitEntities.java b/src/main/java/de/ellpeck/actuallyadditions/mod/entity/InitEntities.java new file mode 100644 index 000000000..2cd429c80 --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/entity/InitEntities.java @@ -0,0 +1,18 @@ +package de.ellpeck.actuallyadditions.mod.entity; + +import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; +import de.ellpeck.actuallyadditions.mod.util.ModUtil; +import net.minecraft.entity.item.EntityMinecart; +import net.minecraftforge.common.util.EnumHelper; +import net.minecraftforge.fml.common.registry.EntityRegistry; + +import java.util.Locale; + +public class InitEntities{ + + public static void init(){ + ModUtil.LOGGER.info("Initializing Entities..."); + + EntityRegistry.registerModEntity(EntityFireworkBoxMinecart.class, ModUtil.MOD_ID+":minecartFireworkBox", 0, ActuallyAdditions.instance, 256, 1, true); + } +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java index 670798c1c..0cde605b8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java @@ -12,12 +12,8 @@ package de.ellpeck.actuallyadditions.mod.items; import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; import de.ellpeck.actuallyadditions.mod.blocks.InitBlocks; -import de.ellpeck.actuallyadditions.mod.items.base.ItemArmorAA; -import de.ellpeck.actuallyadditions.mod.items.base.ItemHoeAA; -import de.ellpeck.actuallyadditions.mod.items.base.ItemSeed; -import de.ellpeck.actuallyadditions.mod.items.base.ItemSwordAA; +import de.ellpeck.actuallyadditions.mod.items.base.*; import de.ellpeck.actuallyadditions.mod.items.lens.ItemLens; -import de.ellpeck.actuallyadditions.mod.items.lens.Lenses; import de.ellpeck.actuallyadditions.mod.items.metalists.TheCrystals; import de.ellpeck.actuallyadditions.mod.items.metalists.TheFoods; import de.ellpeck.actuallyadditions.mod.items.metalists.TheMiscItems; @@ -210,9 +206,12 @@ public class InitItems{ public static Item itemRarmorModuleReconstructor; + public static Item itemMinecartFireworkBox; + public static void init(){ ModUtil.LOGGER.info("Initializing Items..."); + itemMinecartFireworkBox = new ItemFireworkBoxMinecart("itemMinecartFireworkBox"); itemSpawnerChanger = new ItemSpawnerChanger("itemSpawnerChanger"); itemMisc = new ItemMisc("itemMisc"); itemCrateKeeper = new ItemGeneric("itemCrateKeeper"); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFertilizer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFertilizer.java index 15e0f0d0e..4bbfe18c9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFertilizer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFertilizer.java @@ -11,6 +11,8 @@ package de.ellpeck.actuallyadditions.mod.items; import de.ellpeck.actuallyadditions.mod.items.base.ItemBase; +import de.ellpeck.actuallyadditions.mod.misc.DispenserHandlerFertilize; +import net.minecraft.block.BlockDispenser; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemDye; @@ -25,6 +27,8 @@ public class ItemFertilizer extends ItemBase{ public ItemFertilizer(String name){ super(name); + + BlockDispenser.DISPENSE_BEHAVIOR_REGISTRY.putObject(this, new DispenserHandlerFertilize()); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFireworkBoxMinecart.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFireworkBoxMinecart.java new file mode 100644 index 000000000..d217abf62 --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFireworkBoxMinecart.java @@ -0,0 +1,20 @@ +package de.ellpeck.actuallyadditions.mod.items; + +import de.ellpeck.actuallyadditions.mod.entity.EntityFireworkBoxMinecart; +import net.minecraft.entity.Entity; +import net.minecraft.entity.item.EntityMinecart; +import net.minecraft.world.World; + +public class ItemFireworkBoxMinecart extends ItemMinecartAA{ + + public ItemFireworkBoxMinecart(String name){ + super(name); + } + + @Override + public EntityMinecart createCart(World world, double x, double y, double z){ + EntityMinecart entity = new EntityFireworkBoxMinecart(world); + entity.setPosition(x, y, z); + return entity; + } +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMinecartAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMinecartAA.java new file mode 100644 index 000000000..096017f9a --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMinecartAA.java @@ -0,0 +1,116 @@ +package de.ellpeck.actuallyadditions.mod.items; + +import de.ellpeck.actuallyadditions.mod.items.base.ItemBase; +import net.minecraft.block.BlockDispenser; +import net.minecraft.block.BlockRailBase; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.dispenser.BehaviorDefaultDispenseItem; +import net.minecraft.dispenser.IBehaviorDispenseItem; +import net.minecraft.dispenser.IBlockSource; +import net.minecraft.entity.item.EntityMinecart; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public abstract class ItemMinecartAA extends ItemBase{ + + private static final IBehaviorDispenseItem MINECART_DISPENSER_BEHAVIOR = new BehaviorDefaultDispenseItem(){ + private final BehaviorDefaultDispenseItem behaviourDefaultDispenseItem = new BehaviorDefaultDispenseItem(); + + @Override + public ItemStack dispenseStack(IBlockSource source, ItemStack stack){ + EnumFacing facing = BlockDispenser.getFacing(source.getBlockMetadata()); + World world = source.getWorld(); + double d0 = source.getX()+(double)facing.getFrontOffsetX()*1.125D; + double d1 = Math.floor(source.getY())+(double)facing.getFrontOffsetY(); + double d2 = source.getZ()+(double)facing.getFrontOffsetZ()*1.125D; + BlockPos pos = source.getBlockPos().offset(facing); + IBlockState state = world.getBlockState(pos); + BlockRailBase.EnumRailDirection direction = state.getBlock() instanceof BlockRailBase ? state.getValue(((BlockRailBase)state.getBlock()).getShapeProperty()) : BlockRailBase.EnumRailDirection.NORTH_SOUTH; + double d3; + + if(BlockRailBase.isRailBlock(state)){ + if(direction.isAscending()){ + d3 = 0.6D; + } + else{ + d3 = 0.1D; + } + } + else{ + if(state.getMaterial() != Material.AIR || !BlockRailBase.isRailBlock(world.getBlockState(pos.down()))){ + return this.behaviourDefaultDispenseItem.dispense(source, stack); + } + + IBlockState state1 = world.getBlockState(pos.down()); + BlockRailBase.EnumRailDirection direction1 = state1.getBlock() instanceof BlockRailBase ? state1.getValue(((BlockRailBase)state1.getBlock()).getShapeProperty()) : BlockRailBase.EnumRailDirection.NORTH_SOUTH; + + if(facing != EnumFacing.DOWN && direction1.isAscending()){ + d3 = -0.4D; + } + else{ + d3 = -0.9D; + } + } + + EntityMinecart cart = ((ItemMinecartAA)stack.getItem()).createCart(world, d0, d1+d3, d2); + + if(stack.hasDisplayName()){ + cart.setCustomNameTag(stack.getDisplayName()); + } + + world.spawnEntityInWorld(cart); + stack.splitStack(1); + return stack; + } + + @Override + protected void playDispenseSound(IBlockSource source){ + source.getWorld().playAuxSFX(1000, source.getBlockPos(), 0); + } + }; + + public ItemMinecartAA(String name){ + super(name); + this.maxStackSize = 1; + + BlockDispenser.DISPENSE_BEHAVIOR_REGISTRY.putObject(this, MINECART_DISPENSER_BEHAVIOR); + } + + public abstract EntityMinecart createCart(World world, double x, double y, double z); + + @Override + public EnumActionResult onItemUse(ItemStack stack, EntityPlayer playerIn, World worldIn, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ){ + IBlockState state = worldIn.getBlockState(pos); + + if(!BlockRailBase.isRailBlock(state)){ + return EnumActionResult.FAIL; + } + else{ + if(!worldIn.isRemote){ + BlockRailBase.EnumRailDirection direction = state.getBlock() instanceof BlockRailBase ? state.getValue(((BlockRailBase)state.getBlock()).getShapeProperty()) : BlockRailBase.EnumRailDirection.NORTH_SOUTH; + double d0 = 0.0D; + + if(direction.isAscending()){ + d0 = 0.5D; + } + + EntityMinecart cart = ((ItemMinecartAA)stack.getItem()).createCart(worldIn, (double)pos.getX()+0.5D, (double)pos.getY()+0.0625D+d0, (double)pos.getZ()+0.5D); + + if(stack.hasDisplayName()){ + cart.setCustomNameTag(stack.getDisplayName()); + } + + worldIn.spawnEntityInWorld(cart); + } + + stack.stackSize--; + return EnumActionResult.SUCCESS; + } + } +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/material/InitArmorMaterials.java b/src/main/java/de/ellpeck/actuallyadditions/mod/material/InitArmorMaterials.java index 90866e5c5..c08369f8c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/material/InitArmorMaterials.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/material/InitArmorMaterials.java @@ -11,10 +11,14 @@ package de.ellpeck.actuallyadditions.mod.material; import de.ellpeck.actuallyadditions.mod.util.ModUtil; +import net.minecraft.entity.item.EntityMinecart; import net.minecraft.init.SoundEvents; import net.minecraft.item.ItemArmor.ArmorMaterial; +import net.minecraft.util.SoundEvent; import net.minecraftforge.common.util.EnumHelper; +import java.util.Locale; + public class InitArmorMaterials{ public static ArmorMaterial armorMaterialEmerald; @@ -31,15 +35,19 @@ public class InitArmorMaterials{ public static void init(){ ModUtil.LOGGER.info("Initializing Armor Materials..."); - armorMaterialEmerald = EnumHelper.addArmorMaterial("armorMaterialEmerald", ModUtil.MOD_ID+":armorEmerald", 50, new int[]{5, 9, 8, 5}, 15, SoundEvents.ITEM_ARMOR_EQUIP_GENERIC); - armorMaterialObsidian = EnumHelper.addArmorMaterial("armorMaterialObsidian", ModUtil.MOD_ID+":armorObsidian", 120, new int[]{3, 4, 3, 1}, 10, SoundEvents.ITEM_ARMOR_EQUIP_GENERIC); - armorMaterialQuartz = EnumHelper.addArmorMaterial("armorMaterialQuartz", ModUtil.MOD_ID+":armorQuartz", 20, new int[]{3, 6, 5, 3}, 8, SoundEvents.ITEM_ARMOR_EQUIP_GENERIC); + armorMaterialEmerald = addArmorMaterial("armorMaterialEmerald", ModUtil.MOD_ID+":armorEmerald", 50, new int[]{5, 9, 8, 5}, 15, SoundEvents.ITEM_ARMOR_EQUIP_GENERIC); + armorMaterialObsidian = addArmorMaterial("armorMaterialObsidian", ModUtil.MOD_ID+":armorObsidian", 120, new int[]{3, 4, 3, 1}, 10, SoundEvents.ITEM_ARMOR_EQUIP_GENERIC); + armorMaterialQuartz = addArmorMaterial("armorMaterialQuartz", ModUtil.MOD_ID+":armorQuartz", 20, new int[]{3, 6, 5, 3}, 8, SoundEvents.ITEM_ARMOR_EQUIP_GENERIC); - armorMaterialCrystalRed = EnumHelper.addArmorMaterial("armorMaterialCrystalRed", ModUtil.MOD_ID+":armorCrystalRed", 18, new int[]{3, 7, 6, 3}, 9, SoundEvents.ITEM_ARMOR_EQUIP_GENERIC); - armorMaterialCrystalBlue = EnumHelper.addArmorMaterial("armorMaterialCrystalBlue", ModUtil.MOD_ID+":armorCrystalBlue", 18, new int[]{3, 7, 6, 3}, 10, SoundEvents.ITEM_ARMOR_EQUIP_GENERIC); - armorMaterialCrystalLightBlue = EnumHelper.addArmorMaterial("armorMaterialCrystalLightBlue", ModUtil.MOD_ID+":armorCrystalLightBlue", 35, new int[]{7, 9, 7, 5}, 12, SoundEvents.ITEM_ARMOR_EQUIP_GENERIC); - armorMaterialCrystalBlack = EnumHelper.addArmorMaterial("armorMaterialCrystalBlack", ModUtil.MOD_ID+":armorCrystalBlack", 12, new int[]{1, 4, 3, 1}, 13, SoundEvents.ITEM_ARMOR_EQUIP_GENERIC); - armorMaterialCrystalGreen = EnumHelper.addArmorMaterial("armorMaterialCrystalGreen", ModUtil.MOD_ID+":armorCrystalGreen", 60, new int[]{7, 10, 9, 6}, 18, SoundEvents.ITEM_ARMOR_EQUIP_GENERIC); - armorMaterialCrystalWhite = EnumHelper.addArmorMaterial("armorMaterialCrystalWhite", ModUtil.MOD_ID+":armorCrystalWhite", 18, new int[]{4, 7, 6, 4}, 11, SoundEvents.ITEM_ARMOR_EQUIP_GENERIC); + armorMaterialCrystalRed = addArmorMaterial("armorMaterialCrystalRed", ModUtil.MOD_ID+":armorCrystalRed", 18, new int[]{3, 7, 6, 3}, 9, SoundEvents.ITEM_ARMOR_EQUIP_GENERIC); + armorMaterialCrystalBlue = addArmorMaterial("armorMaterialCrystalBlue", ModUtil.MOD_ID+":armorCrystalBlue", 18, new int[]{3, 7, 6, 3}, 10, SoundEvents.ITEM_ARMOR_EQUIP_GENERIC); + armorMaterialCrystalLightBlue = addArmorMaterial("armorMaterialCrystalLightBlue", ModUtil.MOD_ID+":armorCrystalLightBlue", 35, new int[]{7, 9, 7, 5}, 12, SoundEvents.ITEM_ARMOR_EQUIP_GENERIC); + armorMaterialCrystalBlack = addArmorMaterial("armorMaterialCrystalBlack", ModUtil.MOD_ID+":armorCrystalBlack", 12, new int[]{1, 4, 3, 1}, 13, SoundEvents.ITEM_ARMOR_EQUIP_GENERIC); + armorMaterialCrystalGreen = addArmorMaterial("armorMaterialCrystalGreen", ModUtil.MOD_ID+":armorCrystalGreen", 60, new int[]{7, 10, 9, 6}, 18, SoundEvents.ITEM_ARMOR_EQUIP_GENERIC); + armorMaterialCrystalWhite = addArmorMaterial("armorMaterialCrystalWhite", ModUtil.MOD_ID+":armorCrystalWhite", 18, new int[]{4, 7, 6, 4}, 11, SoundEvents.ITEM_ARMOR_EQUIP_GENERIC); + } + + private static ArmorMaterial addArmorMaterial(String name, String textureName, int durability, int[] reductionAmounts, int enchantability, SoundEvent soundOnEquip){ + return EnumHelper.addArmorMaterial((ModUtil.MOD_ID+"_"+name).toUpperCase(Locale.ROOT), textureName, durability, reductionAmounts, enchantability, soundOnEquip); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/material/InitToolMaterials.java b/src/main/java/de/ellpeck/actuallyadditions/mod/material/InitToolMaterials.java index 8df781339..c645223e2 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/material/InitToolMaterials.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/material/InitToolMaterials.java @@ -12,8 +12,12 @@ package de.ellpeck.actuallyadditions.mod.material; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import net.minecraft.item.Item.ToolMaterial; +import net.minecraft.item.ItemArmor; +import net.minecraft.util.SoundEvent; import net.minecraftforge.common.util.EnumHelper; +import java.util.Locale; + public class InitToolMaterials{ public static ToolMaterial toolMaterialEmerald; @@ -30,17 +34,21 @@ public class InitToolMaterials{ public static void init(){ ModUtil.LOGGER.info("Initializing Tool Materials..."); - toolMaterialEmerald = EnumHelper.addToolMaterial("toolMaterialEmerald", 3, 2000, 9.0F, 5.0F, 15); - toolMaterialObsidian = EnumHelper.addToolMaterial("toolMaterialObsidian", 3, 8000, 4.0F, 2.0F, 15); - toolMaterialQuartz = EnumHelper.addToolMaterial("toolMaterialQuartz", 2, 280, 6.5F, 2.0F, 10); + toolMaterialEmerald = addToolMaterial("toolMaterialEmerald", 3, 2000, 9.0F, 5.0F, 15); + toolMaterialObsidian = addToolMaterial("toolMaterialObsidian", 3, 8000, 4.0F, 2.0F, 15); + toolMaterialQuartz = addToolMaterial("toolMaterialQuartz", 2, 280, 6.5F, 2.0F, 10); - toolMaterialCrystalRed = EnumHelper.addToolMaterial("toolMaterialCrystalRed", 2, 300, 7.0F, 2.25F, 12); - toolMaterialCrystalBlue = EnumHelper.addToolMaterial("toolMaterialCrystalBlue", 2, 300, 7.0F, 2.25F, 12); - toolMaterialCrystalLightBlue = EnumHelper.addToolMaterial("toolMaterialCrystalLightBlue", 3, 1600, 9.0F, 4.0F, 14); - toolMaterialCrystalBlack = EnumHelper.addToolMaterial("toolMaterialCrystalBlack", 2, 280, 6.0F, 2.0F, 8); - toolMaterialCrystalGreen = EnumHelper.addToolMaterial("toolMaterialCrystalGreen", 4, 2200, 9.5F, 5.5F, 18); - toolMaterialCrystalWhite = EnumHelper.addToolMaterial("toolMaterialCrystalWhite", 2, 280, 6.25F, 2.5F, 15); + toolMaterialCrystalRed = addToolMaterial("toolMaterialCrystalRed", 2, 300, 7.0F, 2.25F, 12); + toolMaterialCrystalBlue = addToolMaterial("toolMaterialCrystalBlue", 2, 300, 7.0F, 2.25F, 12); + toolMaterialCrystalLightBlue = addToolMaterial("toolMaterialCrystalLightBlue", 3, 1600, 9.0F, 4.0F, 14); + toolMaterialCrystalBlack = addToolMaterial("toolMaterialCrystalBlack", 2, 280, 6.0F, 2.0F, 8); + toolMaterialCrystalGreen = addToolMaterial("toolMaterialCrystalGreen", 4, 2200, 9.5F, 5.5F, 18); + toolMaterialCrystalWhite = addToolMaterial("toolMaterialCrystalWhite", 2, 280, 6.25F, 2.5F, 15); } + private static ToolMaterial addToolMaterial(String name, int harvestLevel, int maxUses, float efficiency, float damage, int enchantability){ + return EnumHelper.addToolMaterial((ModUtil.MOD_ID+"_"+name).toUpperCase(Locale.ROOT), harvestLevel, maxUses, efficiency, damage, enchantability); + } + } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/BannerHelper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/BannerHelper.java index 43867bb96..20433ae43 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/BannerHelper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/BannerHelper.java @@ -39,7 +39,7 @@ public class BannerHelper{ public static EnumBannerPattern addCraftingPattern(String name, ItemStack craftingStack){ Class[] paramTypes = {String.class, String.class, ItemStack.class}; Object[] paramValues = {ModUtil.MOD_ID+name, ModUtil.MOD_ID+name, craftingStack}; - return EnumHelper.addEnum(EnumBannerPattern.class, name.toUpperCase(Locale.ROOT), paramTypes, paramValues); + return EnumHelper.addEnum(EnumBannerPattern.class, (ModUtil.MOD_ID+"_"+name).toUpperCase(Locale.ROOT), paramTypes, paramValues); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFireworkBox.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFireworkBox.java index fd3729b9b..313b5355b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFireworkBox.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFireworkBox.java @@ -21,6 +21,7 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.util.EnumFacing; import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; @@ -71,26 +72,30 @@ public class TileEntityFireworkBox extends TileEntityBase implements IEnergyRece private void doWork(){ if(this.storage.getEnergyStored() >= USE_PER_SHOT){ - int range = 4; - int amount = Util.RANDOM.nextInt(5)+1; - for(int i = 0; i < amount; i++){ - ItemStack firework = this.makeFirework(); - - double x = this.pos.getX()+MathHelper.getRandomDoubleInRange(Util.RANDOM, 0, range*2)-range; - double z = this.pos.getZ()+MathHelper.getRandomDoubleInRange(Util.RANDOM, 0, range*2)-range; - EntityFireworkRocket rocket = new EntityFireworkRocket(this.worldObj, x, this.pos.getY()+0.5, z, firework); - this.worldObj.spawnEntityInWorld(rocket); - } + spawnFireworks(this.worldObj, this.pos.getX(), this.pos.getY(), this.pos.getZ()); this.storage.extractEnergy(USE_PER_SHOT, false); } } - private ItemStack makeFirework(){ + public static void spawnFireworks(World world, double x, double y, double z){ + int range = 4; + int amount = Util.RANDOM.nextInt(5)+1; + for(int i = 0; i < amount; i++){ + ItemStack firework = makeFirework(); + + double newX = x+MathHelper.getRandomDoubleInRange(Util.RANDOM, 0, range*2)-range; + double newZ = z+MathHelper.getRandomDoubleInRange(Util.RANDOM, 0, range*2)-range; + EntityFireworkRocket rocket = new EntityFireworkRocket(world, newX, y+0.5, newZ, firework); + world.spawnEntityInWorld(rocket); + } + } + + private static ItemStack makeFirework(){ NBTTagList list = new NBTTagList(); int chargesAmount = Util.RANDOM.nextInt(2)+1; for(int i = 0; i < chargesAmount; i++){ - list.appendTag(this.makeFireworkCharge()); + list.appendTag(makeFireworkCharge()); } NBTTagCompound compound1 = new NBTTagCompound(); @@ -106,7 +111,7 @@ public class TileEntityFireworkBox extends TileEntityBase implements IEnergyRece return firework; } - private NBTTagCompound makeFireworkCharge(){ + private static NBTTagCompound makeFireworkCharge(){ NBTTagCompound compound = new NBTTagCompound(); if(Util.RANDOM.nextFloat() >= 0.65F){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/Util.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/Util.java index 612fd438b..da45f63bb 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/Util.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/Util.java @@ -12,6 +12,7 @@ package de.ellpeck.actuallyadditions.mod.util; import net.minecraft.block.BlockDispenser; import net.minecraft.dispenser.BehaviorDefaultDispenseItem; +import net.minecraft.enchantment.Enchantment; import net.minecraft.item.EnumRarity; import net.minecraft.item.Item; import net.minecraft.util.text.TextFormatting; @@ -20,6 +21,7 @@ import net.minecraftforge.common.util.EnumHelper; import net.minecraftforge.fluids.FluidContainerRegistry; import net.minecraftforge.oredict.OreDictionary; +import java.util.Locale; import java.util.Random; @SuppressWarnings("unused") @@ -29,12 +31,12 @@ public class Util{ public static final int WILDCARD = OreDictionary.WILDCARD_VALUE; public static final int BUCKET = FluidContainerRegistry.BUCKET_VOLUME; - public static final EnumRarity CRYSTAL_RED_RARITY = EnumHelper.addRarity(ModUtil.MOD_ID+"crystalRed", TextFormatting.DARK_RED, ModUtil.NAME+" Red Crystal"); - public static final EnumRarity CRYSTAL_BLUE_RARITY = EnumHelper.addRarity(ModUtil.MOD_ID+"crystalBlue", TextFormatting.DARK_BLUE, ModUtil.NAME+" Blue Crystal"); - public static final EnumRarity CRYSTAL_LIGHT_BLUE_RARITY = EnumHelper.addRarity(ModUtil.MOD_ID+"crystalLightBlue", TextFormatting.BLUE, ModUtil.NAME+" Light Blue Crystal"); - public static final EnumRarity CRYSTAL_BLACK_RARITY = EnumHelper.addRarity(ModUtil.MOD_ID+"crystalBlack", TextFormatting.DARK_GRAY, ModUtil.NAME+" Black Crystal"); - public static final EnumRarity CRYSTAL_GREEN_RARITY = EnumHelper.addRarity(ModUtil.MOD_ID+"crystalGreen", TextFormatting.DARK_GREEN, ModUtil.NAME+" Green Crystal"); - public static final EnumRarity CRYSTAL_WHITE_RARITY = EnumHelper.addRarity(ModUtil.MOD_ID+"crystalWhite", TextFormatting.GRAY, ModUtil.NAME+" White Crystal"); + public static final EnumRarity CRYSTAL_RED_RARITY = addRarity(ModUtil.MOD_ID+"crystalRed", TextFormatting.DARK_RED, ModUtil.NAME+" Red Crystal"); + public static final EnumRarity CRYSTAL_BLUE_RARITY = addRarity(ModUtil.MOD_ID+"crystalBlue", TextFormatting.DARK_BLUE, ModUtil.NAME+" Blue Crystal"); + public static final EnumRarity CRYSTAL_LIGHT_BLUE_RARITY = addRarity(ModUtil.MOD_ID+"crystalLightBlue", TextFormatting.BLUE, ModUtil.NAME+" Light Blue Crystal"); + public static final EnumRarity CRYSTAL_BLACK_RARITY = addRarity(ModUtil.MOD_ID+"crystalBlack", TextFormatting.DARK_GRAY, ModUtil.NAME+" Black Crystal"); + public static final EnumRarity CRYSTAL_GREEN_RARITY = addRarity(ModUtil.MOD_ID+"crystalGreen", TextFormatting.DARK_GREEN, ModUtil.NAME+" Green Crystal"); + public static final EnumRarity CRYSTAL_WHITE_RARITY = addRarity(ModUtil.MOD_ID+"crystalWhite", TextFormatting.GRAY, ModUtil.NAME+" White Crystal"); public static final EnumRarity FALLBACK_RARITY = EnumHelper.addRarity(ModUtil.MOD_ID+".fallback", TextFormatting.STRIKETHROUGH, ModUtil.NAME+" Fallback"); @@ -42,12 +44,12 @@ public class Util{ MinecraftForge.EVENT_BUS.register(o); } - public static boolean isDevVersion(){ - return ModUtil.VERSION.equals("@VERSION@"); + private static EnumRarity addRarity(String name, TextFormatting color, String displayName){ + return EnumHelper.addRarity((ModUtil.MOD_ID+"_"+name).toUpperCase(Locale.ROOT), color, displayName); } - public static void registerDispenserHandler(Item item, BehaviorDefaultDispenseItem handler){ - BlockDispenser.DISPENSE_BEHAVIOR_REGISTRY.putObject(item, handler); + public static boolean isDevVersion(){ + return ModUtil.VERSION.equals("@VERSION@"); } public static int arrayContains(Object[] array, Object obj){ diff --git a/src/main/resources/assets/actuallyadditions/lang/en_US.lang b/src/main/resources/assets/actuallyadditions/lang/en_US.lang index efcd4cd01..05116f591 100644 --- a/src/main/resources/assets/actuallyadditions/lang/en_US.lang +++ b/src/main/resources/assets/actuallyadditions/lang/en_US.lang @@ -484,6 +484,7 @@ item.actuallyadditions.itemFoodBacon.name=Bacon item.actuallyadditions.itemMiscEnderStar.name=Ender Star item.actuallyadditions.itemSpawnerChanger.name=Spawner Changer item.actuallyadditions.itemMiscSpawnerShard.name=Spawner Shards +item.actuallyadditions.itemMinecartFireworkBox.name=Firework Box Cart #Tooltips tooltip.actuallyadditions.onSuffix.desc=On diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemMinecartFireworkBox.json b/src/main/resources/assets/actuallyadditions/models/item/itemMinecartFireworkBox.json new file mode 100644 index 000000000..1b49d9e00 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/models/item/itemMinecartFireworkBox.json @@ -0,0 +1,6 @@ +{ + "parent": "actuallyadditions:item/standardItem", + "textures": { + "layer0": "actuallyadditions:items/itemMinecartFireworkBox" + } +} diff --git a/src/main/resources/assets/actuallyadditions/textures/items/itemMinecartFireworkBox.png b/src/main/resources/assets/actuallyadditions/textures/items/itemMinecartFireworkBox.png new file mode 100644 index 0000000000000000000000000000000000000000..cf0e4c10800d545a6c418d2dce15fe779798c481 GIT binary patch literal 597 zcmV-b0;>IqP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGf5&!@T5&_cPe*6Fc00(qQO+^RY2^tI) z1s(;PBme*a7<5HgbW?9;ba!ELWdLwtX>N2bZe?^JG%heMIczh2P5=M_vq?ljR5(v{ zl1obhQ5c3*1Swpa5>&X;amJ({5O^=GUl38*lzEAQAX-!)Sc_V8fff-J2|*NOw{6gc z+A7iQ=e(Wo)EQ?+JMeOb&+mD@a}HVn{F|+v4TzY36S1T!ds_5sCK*I7Az>maVWi)O z%c~34-C~)+2&gwsBs?(Y1t?ck5RAJ z@bGw#=|liyVLunp32ZhS|9-30Fgv7REat=F(tJZgaEIHCOiV_W*{^S_$fZNbv(Qw^ z>dG=Q5eeJ7o0yCRkV`2bMiawJ9&m_DLzZ(RtB++=hB}{#7ZS5R32q=093Ct5I1XG`23<8Rfh!dD6nxp*} j^aX;tx_eqqGzOL*E`avZBbpp{00000NkvXXu0mjf_`mg% literal 0 HcmV?d00001