diff --git a/src/main/java/electroblob/wizardry/potion/PotionDecay.java b/src/main/java/electroblob/wizardry/potion/PotionDecay.java index 91a6c854..025c9e16 100644 --- a/src/main/java/electroblob/wizardry/potion/PotionDecay.java +++ b/src/main/java/electroblob/wizardry/potion/PotionDecay.java @@ -3,10 +3,10 @@ package electroblob.wizardry.potion; import java.util.List; import electroblob.wizardry.Wizardry; +import electroblob.wizardry.client.DrawingUtils; import electroblob.wizardry.constants.Constants; import electroblob.wizardry.entity.construct.EntityDecay; import electroblob.wizardry.registry.WizardryPotions; -import electroblob.wizardry.util.WizardryUtilities; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.SharedMonsterAttributes; @@ -21,12 +21,10 @@ import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; @Mod.EventBusSubscriber -public class PotionDecay extends Potion { - - private static final ResourceLocation ICON = new ResourceLocation(Wizardry.MODID, "textures/gui/decay_icon.png"); +public class PotionDecay extends PotionMagicEffect { public PotionDecay(boolean isBadEffect, int liquidColour){ - super(isBadEffect, liquidColour); + super(isBadEffect, liquidColour, new ResourceLocation(Wizardry.MODID, "textures/gui/potion_icon_decay.png")); // This needs to be here because registerPotionAttributeModifier doesn't like it if the potion has no name yet. this.setPotionName("potion." + Wizardry.MODID + ":decay"); this.registerPotionAttributeModifier(SharedMonsterAttributes.MOVEMENT_SPEED, @@ -46,20 +44,6 @@ public class PotionDecay extends Potion { target.attackEntityFrom(DamageSource.WITHER, 1); } - @Override - @SideOnly(Side.CLIENT) - public void renderInventoryEffect(int x, int y, PotionEffect effect, net.minecraft.client.Minecraft mc){ - mc.renderEngine.bindTexture(ICON); - WizardryUtilities.drawTexturedRect(x + 6, y + 7, 0, 0, 18, 18, 18, 18); - } - - @Override - @SideOnly(Side.CLIENT) - public void renderHUDEffect(int x, int y, PotionEffect effect, net.minecraft.client.Minecraft mc, float alpha){ - mc.renderEngine.bindTexture(ICON); - WizardryUtilities.drawTexturedRect(x + 3, y + 3, 0, 0, 18, 18, 18, 18); - } - @SubscribeEvent public static void onLivingUpdateEvent(LivingUpdateEvent event){ diff --git a/src/main/java/electroblob/wizardry/potion/PotionFrost.java b/src/main/java/electroblob/wizardry/potion/PotionFrost.java index 2733ded4..cba91fd6 100644 --- a/src/main/java/electroblob/wizardry/potion/PotionFrost.java +++ b/src/main/java/electroblob/wizardry/potion/PotionFrost.java @@ -1,14 +1,13 @@ package electroblob.wizardry.potion; import electroblob.wizardry.Wizardry; +import electroblob.wizardry.client.DrawingUtils; import electroblob.wizardry.constants.Constants; import electroblob.wizardry.registry.WizardryPotions; import electroblob.wizardry.util.ParticleBuilder; import electroblob.wizardry.util.ParticleBuilder.Type; -import electroblob.wizardry.util.WizardryUtilities; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.SharedMonsterAttributes; -import net.minecraft.potion.Potion; import net.minecraft.potion.PotionEffect; import net.minecraft.util.ResourceLocation; import net.minecraft.world.World; @@ -19,12 +18,10 @@ import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; @Mod.EventBusSubscriber -public class PotionFrost extends Potion implements ICustomPotionParticles { - - private static final ResourceLocation ICON = new ResourceLocation(Wizardry.MODID, "textures/gui/frost_icon.png"); +public class PotionFrost extends PotionMagicEffect implements ICustomPotionParticles { public PotionFrost(boolean isBadEffect, int liquidColour){ - super(isBadEffect, liquidColour); + super(isBadEffect, liquidColour, new ResourceLocation(Wizardry.MODID, "textures/gui/potion_icon_frost.png")); // This needs to be here because registerPotionAttributeModifier doesn't like it if the potion has no name yet. this.setPotionName("potion." + Wizardry.MODID + ":frost"); // With -0.5 as the 'amount', frost 1 slows the entity down by a half and frost 2 roots it to the spot @@ -33,27 +30,8 @@ public class PotionFrost extends Potion implements ICustomPotionParticles { // More UUIDs: 85602e0b-4801-4a87-94f3-bf617c97014e } - @Override - public void performEffect(EntityLivingBase entitylivingbase, int strength){ - // Nothing here because this potion works on attribute modifiers. - } - @Override public void spawnCustomParticle(World world, double x, double y, double z){ - } - - @Override - @SideOnly(Side.CLIENT) - public void renderInventoryEffect(int x, int y, PotionEffect effect, net.minecraft.client.Minecraft mc){ - mc.renderEngine.bindTexture(ICON); - WizardryUtilities.drawTexturedRect(x + 6, y + 7, 0, 0, 18, 18, 18, 18); - } - - @Override - @SideOnly(Side.CLIENT) - public void renderHUDEffect(int x, int y, PotionEffect effect, net.minecraft.client.Minecraft mc, float alpha){ - mc.renderEngine.bindTexture(ICON); - WizardryUtilities.drawTexturedRect(x + 3, y + 3, 0, 0, 18, 18, 18, 18); ParticleBuilder.create(Type.SNOW).pos(x, y, z).time(15 + world.rand.nextInt(5)).spawn(world); } diff --git a/src/main/java/electroblob/wizardry/potion/PotionMagicEffect.java b/src/main/java/electroblob/wizardry/potion/PotionMagicEffect.java index 02e6bc7a..cf7f5820 100644 --- a/src/main/java/electroblob/wizardry/potion/PotionMagicEffect.java +++ b/src/main/java/electroblob/wizardry/potion/PotionMagicEffect.java @@ -1,7 +1,6 @@ package electroblob.wizardry.potion; -import electroblob.wizardry.Wizardry; -import electroblob.wizardry.util.WizardryUtilities; +import electroblob.wizardry.client.DrawingUtils; import net.minecraft.entity.EntityLivingBase; import net.minecraft.potion.Potion; import net.minecraft.potion.PotionEffect; @@ -9,15 +8,17 @@ import net.minecraft.util.ResourceLocation; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -/** Class for all potions that work on events only. */ +/** + * As of Wizardry 4.2, this class is used by all of wizardry's potions. Potions that work solely on events + * instantiate this class directly, all other potions extend it. + */ public class PotionMagicEffect extends Potion { - private static final ResourceLocation ICONS = new ResourceLocation(Wizardry.MODID, "textures/gui/potion_icons.png"); - private final int textureIndex; + private final ResourceLocation texture; - public PotionMagicEffect(boolean isBadEffect, int liquidColour, int textureIndex){ + public PotionMagicEffect(boolean isBadEffect, int liquidColour, ResourceLocation texture){ super(isBadEffect, liquidColour); - this.textureIndex = textureIndex; + this.texture = texture; } @Override @@ -28,17 +29,20 @@ public class PotionMagicEffect extends Potion { @Override @SideOnly(Side.CLIENT) public void renderInventoryEffect(int x, int y, PotionEffect effect, net.minecraft.client.Minecraft mc){ - mc.renderEngine.bindTexture(ICONS); - WizardryUtilities.drawTexturedRect(x + 6, y + 7, 18 * (textureIndex % 4), 18 * (textureIndex / 4), 18, 18, 72, - 72); + drawIcon(x + 6, y + 7, effect, mc); } @Override @SideOnly(Side.CLIENT) public void renderHUDEffect(int x, int y, PotionEffect effect, net.minecraft.client.Minecraft mc, float alpha){ - mc.renderEngine.bindTexture(ICONS); - WizardryUtilities.drawTexturedRect(x + 3, y + 3, 18 * (textureIndex % 4), 18 * (textureIndex / 4), 18, 18, 72, - 72); + net.minecraft.client.renderer.GlStateManager.color(1, 1, 1, alpha); + drawIcon(x + 3, y + 3, effect, mc); + } + + @SideOnly(Side.CLIENT) + protected void drawIcon(int x, int y, PotionEffect effect, net.minecraft.client.Minecraft mc){ + mc.renderEngine.bindTexture(texture); + DrawingUtils.drawTexturedRect(x, y, 0, 0, 18, 18, 18, 18); } } diff --git a/src/main/java/electroblob/wizardry/potion/PotionMagicEffectParticles.java b/src/main/java/electroblob/wizardry/potion/PotionMagicEffectParticles.java index 8112a43b..eea1b759 100644 --- a/src/main/java/electroblob/wizardry/potion/PotionMagicEffectParticles.java +++ b/src/main/java/electroblob/wizardry/potion/PotionMagicEffectParticles.java @@ -1,13 +1,16 @@ package electroblob.wizardry.potion; +import net.minecraft.util.ResourceLocation; + /** * Same as {@link PotionMagicEffect}, but also implements {@link ICustomPotionParticles} to allow anonymous classes to - * extend it and add their own particles. + * extend it and add their own particles. It is advised that all other (named) classes extend and implement the + * underlying class and interface rather than extending this class. */ public abstract class PotionMagicEffectParticles extends PotionMagicEffect implements ICustomPotionParticles { - public PotionMagicEffectParticles(boolean isBadEffect, int liquidColour, int textureIndex){ - super(isBadEffect, liquidColour, textureIndex); + public PotionMagicEffectParticles(boolean isBadEffect, int liquidColour, ResourceLocation texture){ + super(isBadEffect, liquidColour, texture); } } diff --git a/src/main/java/electroblob/wizardry/registry/WizardryBlocks.java b/src/main/java/electroblob/wizardry/registry/WizardryBlocks.java index a88bff23..87920c4e 100644 --- a/src/main/java/electroblob/wizardry/registry/WizardryBlocks.java +++ b/src/main/java/electroblob/wizardry/registry/WizardryBlocks.java @@ -1,20 +1,13 @@ package electroblob.wizardry.registry; import electroblob.wizardry.Wizardry; -import electroblob.wizardry.block.BlockArcaneWorkbench; -import electroblob.wizardry.block.BlockCrystalFlower; -import electroblob.wizardry.block.BlockCrystalOre; -import electroblob.wizardry.block.BlockMagicLight; -import electroblob.wizardry.block.BlockSnare; -import electroblob.wizardry.block.BlockSpectral; -import electroblob.wizardry.block.BlockStatue; -import electroblob.wizardry.block.BlockTransportationStone; -import electroblob.wizardry.block.BlockVanishingCobweb; +import electroblob.wizardry.block.*; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraftforge.event.RegistryEvent; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.common.registry.GameRegistry.ObjectHolder; import net.minecraftforge.registries.IForgeRegistry; /** @@ -23,6 +16,7 @@ import net.minecraftforge.registries.IForgeRegistry; * @author Electroblob * @since Wizardry 2.1 */ +@ObjectHolder(Wizardry.MODID) @Mod.EventBusSubscriber public final class WizardryBlocks { @@ -33,23 +27,19 @@ public final class WizardryBlocks { // setSoundType should be public, but in this particular version it isn't... which is a bit of a pain. - public static final Block arcane_workbench = new BlockArcaneWorkbench().setHardness(1.0F).setCreativeTab(WizardryTabs.WIZARDRY); - public static final Block crystal_ore = new BlockCrystalOre(Material.ROCK).setHardness(3.0F).setCreativeTab(WizardryTabs.WIZARDRY); - public static final Block petrified_stone = new BlockStatue(Material.ROCK).setHardness(1.5F).setResistance(10.0F); - public static final Block ice_statue = new BlockStatue(Material.ICE).setHardness(0.5F).setLightOpacity(3); - public static final Block magic_light = new BlockMagicLight(Material.CIRCUITS); - public static final Block crystal_flower = new BlockCrystalFlower(Material.PLANTS).setHardness(0.0F).setCreativeTab(WizardryTabs.WIZARDRY); - public static final Block snare = new BlockSnare(Material.PLANTS).setHardness(0.0F); - public static final Block transportation_stone = new BlockTransportationStone(Material.ROCK).setHardness(0.3F).setLightLevel(0.5f).setLightOpacity(0).setCreativeTab(WizardryTabs.WIZARDRY); - public static final Block spectral_block = new BlockSpectral(Material.GLASS).setLightLevel(0.7f).setLightOpacity(0).setBlockUnbreakable().setResistance(6000000.0F); - public static final Block crystal_block = new Block(Material.IRON).setHardness(5.0F).setResistance(10.0F).setCreativeTab(WizardryTabs.WIZARDRY); - public static final Block meteor = new Block(Material.ROCK).setLightLevel(1); - public static final Block vanishing_cobweb = new BlockVanishingCobweb(Material.WEB).setLightOpacity(1).setHardness(4.0F); - - static{ - // This is here because Block#setHarvestLevel isn't chainable. - crystal_block.setHarvestLevel("pickaxe", 2); - } + public static final Block arcane_workbench = null; + public static final Block crystal_ore = null; + public static final Block petrified_stone = null; + public static final Block ice_statue = null; + public static final Block magic_light = null; + public static final Block crystal_flower = null; + public static final Block snare = null; + public static final Block transportation_stone = null; + public static final Block spectral_block = null; + public static final Block crystal_block = null; + public static final Block meteor = null; + public static final Block vanishing_cobweb = null; + public static final Block runestone = null; /** * Sets both the registry and unlocalised names of the given block, then registers it with the given registry. Use @@ -57,11 +47,11 @@ public final class WizardryBlocks { * construction, for convenience and consistency. * * @param registry The registry to register the given block to. - * @param item The block to register. * @param name The name of the block, without the mod ID or the .name stuff. The registry name will be * {@code ebwizardry:[name]}. The unlocalised name will be {@code tile.ebwizardry:[name].name}. + * @param item The block to register. */ - public static void registerBlock(IForgeRegistry registry, Block block, String name){ + public static void registerBlock(IForgeRegistry registry, String name, Block block){ block.setRegistryName(Wizardry.MODID, name); block.setUnlocalizedName(block.getRegistryName().toString()); registry.register(block); @@ -71,18 +61,20 @@ public final class WizardryBlocks { public static void register(RegistryEvent.Register event){ IForgeRegistry registry = event.getRegistry(); + + registerBlock(registry, "arcane_workbench", new BlockArcaneWorkbench().setHardness(1.0F).setCreativeTab(WizardryTabs.WIZARDRY)); + registerBlock(registry, "crystal_ore", new BlockCrystalOre(Material.ROCK).setHardness(3.0F).setCreativeTab(WizardryTabs.WIZARDRY)); + registerBlock(registry, "petrified_stone", new BlockStatue(Material.ROCK).setHardness(1.5F).setResistance(10.0F)); + registerBlock(registry, "ice_statue", new BlockStatue(Material.ICE).setHardness(0.5F).setLightOpacity(3)); + registerBlock(registry, "magic_light", new BlockMagicLight(Material.CIRCUITS)); + registerBlock(registry, "crystal_flower", new BlockCrystalFlower(Material.PLANTS).setHardness(0.0F).setCreativeTab(WizardryTabs.WIZARDRY)); + registerBlock(registry, "snare", new BlockSnare(Material.PLANTS).setHardness(0.0F)); + registerBlock(registry, "transportation_stone", new BlockTransportationStone(Material.ROCK).setHardness(0.3F).setLightLevel(0.5f).setLightOpacity(0).setCreativeTab(WizardryTabs.WIZARDRY)); + registerBlock(registry, "spectral_block", new BlockSpectral(Material.GLASS).setLightLevel(0.7f).setLightOpacity(0).setBlockUnbreakable().setResistance(6000000.0F)); + registerBlock(registry, "crystal_block", new BlockCrystal(Material.IRON).setHardness(5.0F).setResistance(10.0F).setCreativeTab(WizardryTabs.WIZARDRY)); + registerBlock(registry, "meteor", new Block(Material.ROCK).setLightLevel(1)); + registerBlock(registry, "vanishing_cobweb", new BlockVanishingCobweb(Material.WEB).setLightOpacity(1).setHardness(4.0F)); + registerBlock(registry, "runestone", new BlockRunestone(Material.ROCK)); - registerBlock(registry, arcane_workbench, "arcane_workbench"); - registerBlock(registry, crystal_ore, "crystal_ore"); - registerBlock(registry, petrified_stone, "petrified_stone"); - registerBlock(registry, ice_statue, "ice_statue"); - registerBlock(registry, magic_light, "magic_light"); - registerBlock(registry, crystal_flower, "crystal_flower"); - registerBlock(registry, snare, "snare"); - registerBlock(registry, transportation_stone, "transportation_stone"); - registerBlock(registry, spectral_block, "spectral_block"); - registerBlock(registry, crystal_block, "crystal_block"); - registerBlock(registry, meteor, "meteor"); - registerBlock(registry, vanishing_cobweb, "vanishing_cobweb"); } } \ No newline at end of file diff --git a/src/main/java/electroblob/wizardry/registry/WizardryEnchantments.java b/src/main/java/electroblob/wizardry/registry/WizardryEnchantments.java index 2c3ba970..66c8789c 100644 --- a/src/main/java/electroblob/wizardry/registry/WizardryEnchantments.java +++ b/src/main/java/electroblob/wizardry/registry/WizardryEnchantments.java @@ -26,20 +26,17 @@ public final class WizardryEnchantments { // All of these have custom classes, so the unlocalised name (referred to simply as 'name' for enchantments) is // dealt with inside those classes. - public static final Enchantment magic_sword = new EnchantmentMagicSword().setRegistryName(Wizardry.MODID, - "magic_sword"); - public static final Enchantment magic_bow = new EnchantmentTimed().setRegistryName(Wizardry.MODID, "magic_bow"); - public static final Enchantment flaming_weapon = new EnchantmentTimed().setRegistryName(Wizardry.MODID, - "flaming_weapon"); - public static final Enchantment freezing_weapon = new EnchantmentTimed().setRegistryName(Wizardry.MODID, - "freezing_weapon"); + public static final Enchantment magic_sword = null; + public static final Enchantment magic_bow = null; + public static final Enchantment flaming_weapon = null; + public static final Enchantment freezing_weapon = null; @SubscribeEvent public static void register(RegistryEvent.Register event){ - event.getRegistry().register(magic_sword); - event.getRegistry().register(magic_bow); - event.getRegistry().register(flaming_weapon); - event.getRegistry().register(freezing_weapon); + event.getRegistry().register(new EnchantmentMagicSword().setRegistryName(Wizardry.MODID, "magic_sword")); + event.getRegistry().register(new EnchantmentTimed().setRegistryName(Wizardry.MODID, "magic_bow")); + event.getRegistry().register(new EnchantmentTimed().setRegistryName(Wizardry.MODID, "flaming_weapon")); + event.getRegistry().register(new EnchantmentTimed().setRegistryName(Wizardry.MODID, "freezing_weapon")); } } diff --git a/src/main/java/electroblob/wizardry/registry/WizardryItems.java b/src/main/java/electroblob/wizardry/registry/WizardryItems.java index c3ffb79f..c1ae9776 100644 --- a/src/main/java/electroblob/wizardry/registry/WizardryItems.java +++ b/src/main/java/electroblob/wizardry/registry/WizardryItems.java @@ -40,6 +40,7 @@ import net.minecraftforge.common.util.EnumHelper; import net.minecraftforge.event.RegistryEvent; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.common.registry.GameRegistry.ObjectHolder; import net.minecraftforge.registries.IForgeRegistry; /** @@ -49,144 +50,145 @@ import net.minecraftforge.registries.IForgeRegistry; * @author Electroblob * @since Wizardry 2.1 */ +@ObjectHolder(Wizardry.MODID) @Mod.EventBusSubscriber public final class WizardryItems { - - public static final Item magic_crystal = new Item().setCreativeTab(WizardryTabs.WIZARDRY); - - public static final Item magic_wand = new ItemWand(Tier.BASIC, null); - public static final Item apprentice_wand = new ItemWand(Tier.APPRENTICE, null); - public static final Item advanced_wand = new ItemWand(Tier.ADVANCED, null); - public static final Item master_wand = new ItemWand(Tier.MASTER, null); - - public static final Item arcane_tome = new ItemArcaneTome(); - public static final Item wizard_handbook = new ItemWizardHandbook(); - public static final Item spell_book = new ItemSpellBook(); - - public static final Item basic_fire_wand = new ItemWand(Tier.BASIC, Element.FIRE); - public static final Item basic_ice_wand = new ItemWand(Tier.BASIC, Element.ICE); - public static final Item basic_lightning_wand = new ItemWand(Tier.BASIC, Element.LIGHTNING); - public static final Item basic_necromancy_wand = new ItemWand(Tier.BASIC, Element.NECROMANCY); - public static final Item basic_earth_wand = new ItemWand(Tier.BASIC, Element.EARTH); - public static final Item basic_sorcery_wand = new ItemWand(Tier.BASIC, Element.SORCERY); - public static final Item basic_healing_wand = new ItemWand(Tier.BASIC, Element.HEALING); - - public static final Item apprentice_fire_wand = new ItemWand(Tier.APPRENTICE, Element.FIRE); - public static final Item apprentice_ice_wand = new ItemWand(Tier.APPRENTICE, Element.ICE); - public static final Item apprentice_lightning_wand = new ItemWand(Tier.APPRENTICE, Element.LIGHTNING); - public static final Item apprentice_necromancy_wand = new ItemWand(Tier.APPRENTICE, Element.NECROMANCY); - public static final Item apprentice_earth_wand = new ItemWand(Tier.APPRENTICE, Element.EARTH); - public static final Item apprentice_sorcery_wand = new ItemWand(Tier.APPRENTICE, Element.SORCERY); - public static final Item apprentice_healing_wand = new ItemWand(Tier.APPRENTICE, Element.HEALING); - - public static final Item advanced_fire_wand = new ItemWand(Tier.ADVANCED, Element.FIRE); - public static final Item advanced_ice_wand = new ItemWand(Tier.ADVANCED, Element.ICE); - public static final Item advanced_lightning_wand = new ItemWand(Tier.ADVANCED, Element.LIGHTNING); - public static final Item advanced_necromancy_wand = new ItemWand(Tier.ADVANCED, Element.NECROMANCY); - public static final Item advanced_earth_wand = new ItemWand(Tier.ADVANCED, Element.EARTH); - public static final Item advanced_sorcery_wand = new ItemWand(Tier.ADVANCED, Element.SORCERY); - public static final Item advanced_healing_wand = new ItemWand(Tier.ADVANCED, Element.HEALING); - - public static final Item master_fire_wand = new ItemWand(Tier.MASTER, Element.FIRE); - public static final Item master_ice_wand = new ItemWand(Tier.MASTER, Element.ICE); - public static final Item master_lightning_wand = new ItemWand(Tier.MASTER, Element.LIGHTNING); - public static final Item master_necromancy_wand = new ItemWand(Tier.MASTER, Element.NECROMANCY); - public static final Item master_earth_wand = new ItemWand(Tier.MASTER, Element.EARTH); - public static final Item master_sorcery_wand = new ItemWand(Tier.MASTER, Element.SORCERY); - public static final Item master_healing_wand = new ItemWand(Tier.MASTER, Element.HEALING); - - public static final Item spectral_sword = new ItemSpectralSword(ToolMaterial.IRON); - public static final Item spectral_pickaxe = new ItemSpectralPickaxe(ToolMaterial.IRON); - public static final Item spectral_bow = new ItemSpectralBow(); - - public static final Item mana_flask = new Item().setCreativeTab(WizardryTabs.WIZARDRY); - - public static final Item storage_upgrade = new Item().setCreativeTab(WizardryTabs.WIZARDRY); - public static final Item siphon_upgrade = new Item().setCreativeTab(WizardryTabs.WIZARDRY); - public static final Item condenser_upgrade = new Item().setCreativeTab(WizardryTabs.WIZARDRY); - public static final Item range_upgrade = new Item().setCreativeTab(WizardryTabs.WIZARDRY); - public static final Item duration_upgrade = new Item().setCreativeTab(WizardryTabs.WIZARDRY); - public static final Item cooldown_upgrade = new Item().setCreativeTab(WizardryTabs.WIZARDRY); - public static final Item blast_upgrade = new Item().setCreativeTab(WizardryTabs.WIZARDRY); - public static final Item attunement_upgrade = new Item().setCreativeTab(WizardryTabs.WIZARDRY); - - public static final Item magic_silk = new Item().setCreativeTab(WizardryTabs.WIZARDRY); - - public static final Item.ToolMaterial MAGICAL = EnumHelper.addToolMaterial("MAGICAL", 3, 1000, 8.0f, 4.0f, 0); - - public static final Item flaming_axe = new ItemFlamingAxe(MAGICAL); - public static final Item frost_axe = new ItemFrostAxe(MAGICAL); - - public static final Item firebomb = new ItemFirebomb(); - public static final Item poison_bomb = new ItemPoisonBomb(); - - public static final Item blank_scroll = new ItemBlankScroll(); - public static final Item scroll = new ItemScroll(); - - // The only way to get these is in dungeon chests (They are legendary, after all. Wizards don't just have them. - // Also if they were sold you could buy four from the same wizard - and that's no fun at all!) - public static final Item armour_upgrade = new ItemArmourUpgrade(); - - public static final ArmorMaterial SILK = EnumHelper.addArmorMaterial("SILK", - "wizardry/textures/armour/wizard_armour", 15, new int[]{0, 0, 0, 0}, 0, - SoundEvents.ITEM_ARMOR_EQUIP_LEATHER, 0.0F); - // Saw a post somewhere that said you have to put these in the init methods rather than defining them as constants. - // I *think* that's because the post was for a newer Minecraft version, where custom armour has its own renderer or - // something, meaning it would be done a lot like the entity rendering registry in ClientProxy. This is all working - // fine it seems, so I'm not going to fiddle with it, but it might be useful to know if I update versions again. - public static final Item wizard_hat = new ItemWizardArmour(SILK, 1, EntityEquipmentSlot.HEAD, null); - public static final Item wizard_robe = new ItemWizardArmour(SILK, 1, EntityEquipmentSlot.CHEST, null); - public static final Item wizard_leggings = new ItemWizardArmour(SILK, 1, EntityEquipmentSlot.LEGS, null); - public static final Item wizard_boots = new ItemWizardArmour(SILK, 1, EntityEquipmentSlot.FEET, null); + /** Keeping the material fields in here means {@code @ObjectHolder} ignores them. In actual fact, I could have just + * made them private since wizardry only uses them within this class, but in case someone needs them elsewhere I've + * used this trick instead to keep them public. */ + public static final class Materials { - public static final Item wizard_hat_fire = new ItemWizardArmour(SILK, 1, EntityEquipmentSlot.HEAD, Element.FIRE); - public static final Item wizard_robe_fire = new ItemWizardArmour(SILK, 1, EntityEquipmentSlot.CHEST, Element.FIRE); - public static final Item wizard_leggings_fire = new ItemWizardArmour(SILK, 1, EntityEquipmentSlot.LEGS, Element.FIRE); - public static final Item wizard_boots_fire = new ItemWizardArmour(SILK, 1, EntityEquipmentSlot.FEET, Element.FIRE); - - public static final Item wizard_hat_ice = new ItemWizardArmour(SILK, 1, EntityEquipmentSlot.HEAD, Element.ICE); - public static final Item wizard_robe_ice = new ItemWizardArmour(SILK, 1, EntityEquipmentSlot.CHEST, Element.ICE); - public static final Item wizard_leggings_ice = new ItemWizardArmour(SILK, 1, EntityEquipmentSlot.LEGS, Element.ICE); - public static final Item wizard_boots_ice = new ItemWizardArmour(SILK, 1, EntityEquipmentSlot.FEET, Element.ICE); - - public static final Item wizard_hat_lightning = new ItemWizardArmour(SILK, 1, EntityEquipmentSlot.HEAD, Element.LIGHTNING); - public static final Item wizard_robe_lightning = new ItemWizardArmour(SILK, 1, EntityEquipmentSlot.CHEST, Element.LIGHTNING); - public static final Item wizard_leggings_lightning = new ItemWizardArmour(SILK, 1, EntityEquipmentSlot.LEGS, Element.LIGHTNING); - public static final Item wizard_boots_lightning = new ItemWizardArmour(SILK, 1, EntityEquipmentSlot.FEET, Element.LIGHTNING); - - public static final Item wizard_hat_necromancy = new ItemWizardArmour(SILK, 1, EntityEquipmentSlot.HEAD, Element.NECROMANCY); - public static final Item wizard_robe_necromancy = new ItemWizardArmour(SILK, 1, EntityEquipmentSlot.CHEST, Element.NECROMANCY); - public static final Item wizard_leggings_necromancy = new ItemWizardArmour(SILK, 1, EntityEquipmentSlot.LEGS, Element.NECROMANCY); - public static final Item wizard_boots_necromancy = new ItemWizardArmour(SILK, 1, EntityEquipmentSlot.FEET, Element.NECROMANCY); - - public static final Item wizard_hat_earth = new ItemWizardArmour(SILK, 1, EntityEquipmentSlot.HEAD, Element.EARTH); - public static final Item wizard_robe_earth = new ItemWizardArmour(SILK, 1, EntityEquipmentSlot.CHEST, Element.EARTH); - public static final Item wizard_leggings_earth = new ItemWizardArmour(SILK, 1, EntityEquipmentSlot.LEGS, Element.EARTH); - public static final Item wizard_boots_earth = new ItemWizardArmour(SILK, 1, EntityEquipmentSlot.FEET, Element.EARTH); - - public static final Item wizard_hat_sorcery = new ItemWizardArmour(SILK, 1, EntityEquipmentSlot.HEAD, Element.SORCERY); - public static final Item wizard_robe_sorcery = new ItemWizardArmour(SILK, 1, EntityEquipmentSlot.CHEST, Element.SORCERY); - public static final Item wizard_leggings_sorcery = new ItemWizardArmour(SILK, 1, EntityEquipmentSlot.LEGS, Element.SORCERY); - public static final Item wizard_boots_sorcery = new ItemWizardArmour(SILK, 1, EntityEquipmentSlot.FEET, Element.SORCERY); - - public static final Item wizard_hat_healing = new ItemWizardArmour(SILK, 1, EntityEquipmentSlot.HEAD, Element.HEALING); - public static final Item wizard_robe_healing = new ItemWizardArmour(SILK, 1, EntityEquipmentSlot.CHEST, Element.HEALING); - public static final Item wizard_leggings_healing = new ItemWizardArmour(SILK, 1, EntityEquipmentSlot.LEGS, Element.HEALING); - public static final Item wizard_boots_healing = new ItemWizardArmour(SILK, 1, EntityEquipmentSlot.FEET, Element.HEALING); - - public static final Item spectral_helmet = new ItemSpectralArmour(ArmorMaterial.IRON, 1, EntityEquipmentSlot.HEAD); - public static final Item spectral_chestplate = new ItemSpectralArmour(ArmorMaterial.IRON, 1, EntityEquipmentSlot.CHEST); - public static final Item spectral_leggings = new ItemSpectralArmour(ArmorMaterial.IRON, 1, EntityEquipmentSlot.LEGS); - public static final Item spectral_boots = new ItemSpectralArmour(ArmorMaterial.IRON, 1, EntityEquipmentSlot.FEET); - - public static final Map SPECTRAL_ARMOUR_MAP = ImmutableMap.of( - EntityEquipmentSlot.HEAD, spectral_helmet, EntityEquipmentSlot.CHEST, spectral_chestplate, - EntityEquipmentSlot.LEGS, spectral_leggings, EntityEquipmentSlot.FEET, spectral_boots); + public static final ToolMaterial MAGICAL = EnumHelper.addToolMaterial("MAGICAL", 3, 1000, 8.0f, 4.0f, 0); + + public static final ArmorMaterial SILK = EnumHelper.addArmorMaterial("SILK", "wizardry/textures/armour/wizard_armour", + 15, new int[]{0, 0, 0, 0}, 0, WizardrySounds.ITEM_ARMOUR_EQUIP_SILK, 0.0F); + + } - public static final Item smoke_bomb = new ItemSmokeBomb(); + // This is the most concise way I can think of to register the items. Really, I'd prefer it if there was only one + // point where all the items were listed, but that's not possible within the current system unless you use an array, + // which means you lose the individual fields... - public static final Item identification_scroll = new ItemIdentificationScroll(); + public static final Item magic_crystal = null; + + public static final Item magic_wand = null; + public static final Item apprentice_wand = null; + public static final Item advanced_wand = null; + public static final Item master_wand = null; + + public static final Item arcane_tome = null; + public static final Item wizard_handbook = null; + public static final Item spell_book = null; + + public static final Item basic_fire_wand = null; + public static final Item basic_ice_wand = null; + public static final Item basic_lightning_wand = null; + public static final Item basic_necromancy_wand = null; + public static final Item basic_earth_wand = null; + public static final Item basic_sorcery_wand = null; + public static final Item basic_healing_wand = null; + + public static final Item apprentice_fire_wand = null; + public static final Item apprentice_ice_wand = null; + public static final Item apprentice_lightning_wand = null; + public static final Item apprentice_necromancy_wand = null; + public static final Item apprentice_earth_wand = null; + public static final Item apprentice_sorcery_wand = null; + public static final Item apprentice_healing_wand = null; + + public static final Item advanced_fire_wand = null; + public static final Item advanced_ice_wand = null; + public static final Item advanced_lightning_wand = null; + public static final Item advanced_necromancy_wand = null; + public static final Item advanced_earth_wand = null; + public static final Item advanced_sorcery_wand = null; + public static final Item advanced_healing_wand = null; + + public static final Item master_fire_wand = null; + public static final Item master_ice_wand = null; + public static final Item master_lightning_wand = null; + public static final Item master_necromancy_wand = null; + public static final Item master_earth_wand = null; + public static final Item master_sorcery_wand = null; + public static final Item master_healing_wand = null; + + public static final Item spectral_sword = null; + public static final Item spectral_pickaxe = null; + public static final Item spectral_bow = null; + + public static final Item medium_mana_flask = null; + + public static final Item storage_upgrade = null; + public static final Item siphon_upgrade = null; + public static final Item condenser_upgrade = null; + public static final Item range_upgrade = null; + public static final Item duration_upgrade = null; + public static final Item cooldown_upgrade = null; + public static final Item blast_upgrade = null; + public static final Item attunement_upgrade = null; + + public static final Item magic_silk = null; + + public static final Item flaming_axe = null; + public static final Item frost_axe = null; + + public static final Item firebomb = null; + public static final Item poison_bomb = null; + + public static final Item blank_scroll = null; + public static final Item scroll = null; + + public static final Item armour_upgrade = null; + + public static final Item wizard_hat = null; + public static final Item wizard_robe = null; + public static final Item wizard_leggings = null; + public static final Item wizard_boots = null; + + public static final Item wizard_hat_fire = null; + public static final Item wizard_robe_fire = null; + public static final Item wizard_leggings_fire = null; + public static final Item wizard_boots_fire = null; + + public static final Item wizard_hat_ice = null; + public static final Item wizard_robe_ice = null; + public static final Item wizard_leggings_ice = null; + public static final Item wizard_boots_ice = null; + + public static final Item wizard_hat_lightning = null; + public static final Item wizard_robe_lightning = null; + public static final Item wizard_leggings_lightning = null; + public static final Item wizard_boots_lightning = null; + + public static final Item wizard_hat_necromancy = null; + public static final Item wizard_robe_necromancy = null; + public static final Item wizard_leggings_necromancy = null; + public static final Item wizard_boots_necromancy = null; + + public static final Item wizard_hat_earth = null; + public static final Item wizard_robe_earth = null; + public static final Item wizard_leggings_earth = null; + public static final Item wizard_boots_earth = null; + + public static final Item wizard_hat_sorcery = null; + public static final Item wizard_robe_sorcery = null; + public static final Item wizard_leggings_sorcery = null; + public static final Item wizard_boots_sorcery = null; + + public static final Item wizard_hat_healing = null; + public static final Item wizard_robe_healing = null; + public static final Item wizard_leggings_healing = null; + public static final Item wizard_boots_healing = null; + + public static final Item spectral_helmet = null; + public static final Item spectral_chestplate = null; + public static final Item spectral_leggings = null; + public static final Item spectral_boots = null; + + public static final Item smoke_bomb = null; + + public static final Item identification_scroll = null; private static final Map, Item> WAND_MAP = new HashMap<>(); private static final Map, Item> ARMOUR_MAP = new HashMap<>(); @@ -303,23 +305,60 @@ public final class WizardryItems { /** * Sets both the registry and unlocalised names of the given item, then registers it with the given registry. Use * this instead of {@link Item#setRegistryName(String)} and {@link Item#setUnlocalizedName(String)} during - * construction, for convenience and consistency. + * construction, for convenience and consistency. As of wizardry 4.2, this also automatically adds it to the order + * list for its creative tab if that tab is a {@link CreativeTabListed}, meaning the order can be defined simply + * by the order in which the items are registered in this class. * * @param registry The registry to register the given item to. - * @param item The item to register. * @param name The name of the item, without the mod ID or the .name stuff. The registry name will be * {@code ebwizardry:[name]}. The unlocalised name will be {@code item.ebwizardry:[name].name}. + * @param item The item to register. */ - public static void registerItem(IForgeRegistry registry, Item item, String name){ + // It now makes sense to have the name first, since it's shorter than an entire item declaration. + public static void registerItem(IForgeRegistry registry, String name, Item item){ + registerItem(registry, name, item, false); + } + + /** + * Sets both the registry and unlocalised names of the given item, then registers it with the given registry. Use + * this instead of {@link Item#setRegistryName(String)} and {@link Item#setUnlocalizedName(String)} during + * construction, for convenience and consistency. As of wizardry 4.2, this also automatically adds it to the order + * list for its creative tab if that tab is a {@link CreativeTabListed}, meaning the order can be defined simply + * by the order in which the items are registered in this class. + * + * @param registry The registry to register the given item to. + * @param name The name of the item, without the mod ID or the .name stuff. The registry name will be + * {@code ebwizardry:[name]}. The unlocalised name will be {@code item.ebwizardry:[name].name}. + * @param item The item to register. + * @param setTabIcon True to set this item as the icon for its creative tab. + */ + // It now makes sense to have the name first, since it's shorter than an entire item declaration. + public static void registerItem(IForgeRegistry registry, String name, Item item, boolean setTabIcon){ item.setRegistryName(Wizardry.MODID, name); item.setUnlocalizedName(item.getRegistryName().toString()); registry.register(item); + + if(setTabIcon && item.getCreativeTab() instanceof CreativeTabSorted){ + ((CreativeTabSorted)item.getCreativeTab()).setIconItem(new ItemStack(item)); + } + + if(item.getCreativeTab() instanceof CreativeTabListed){ + ((CreativeTabListed)item.getCreativeTab()).order.add(item); + } } - /** Registers an ItemBlock afor the given block, with the same registry name as that block. */ + /** Registers an ItemBlock for the given block, with the same registry name as that block. As of wizardry 4.2, this + * also automatically adds it to the order list for its creative tab if that tab is a {@link CreativeTabListed}, + * meaning the order can be defined simply by the order in which the items are registered in this class. */ private static void registerItemBlock(IForgeRegistry registry, Block block){ - // We don't need to keep a reference to the ItemBlock, so this can all be done in one line. - registry.register(new ItemBlock(block).setRegistryName(block.getRegistryName())); + // We don't need to keep a reference to the ItemBlock + Item itemblock = new ItemBlock(block).setRegistryName(block.getRegistryName()); + registry.register(itemblock); + + if(block.getCreativeTabToDisplayOn() instanceof CreativeTabListed){ + ((CreativeTabListed)block.getCreativeTabToDisplayOn()).order.add(itemblock); + } + } } @SubscribeEvent @@ -336,126 +375,134 @@ public final class WizardryItems { registerItemBlock(registry, WizardryBlocks.crystal_block); // Items + + registerItem(registry, "magic_crystal", new ItemCrystal()); - registerItem(registry, magic_crystal, "magic_crystal"); + registerItem(registry, "magic_wand", new ItemWand(Tier.BASIC, null)); + registerItem(registry, "apprentice_wand", new ItemWand(Tier.APPRENTICE, null)); + registerItem(registry, "advanced_wand", new ItemWand(Tier.ADVANCED, null)); + registerItem(registry, "master_wand", new ItemWand(Tier.MASTER, null)); - registerItem(registry, magic_wand, "magic_wand"); - registerItem(registry, apprentice_wand, "apprentice_wand"); - registerItem(registry, advanced_wand, "advanced_wand"); - registerItem(registry, master_wand, "master_wand"); + registerItem(registry, "arcane_tome", new ItemArcaneTome()); + registerItem(registry, "wizard_handbook", new ItemWizardHandbook(), true); + registerItem(registry, "spell_book", new ItemSpellBook(), true); - registerItem(registry, spell_book, "spell_book"); - registerItem(registry, arcane_tome, "arcane_tome"); - registerItem(registry, wizard_handbook, "wizard_handbook"); + registerItem(registry, "basic_fire_wand", new ItemWand(Tier.BASIC, Element.FIRE)); + registerItem(registry, "apprentice_fire_wand", new ItemWand(Tier.APPRENTICE, Element.FIRE)); + registerItem(registry, "advanced_fire_wand", new ItemWand(Tier.ADVANCED, Element.FIRE)); + registerItem(registry, "master_fire_wand", new ItemWand(Tier.MASTER, Element.FIRE)); + + registerItem(registry, "basic_ice_wand", new ItemWand(Tier.BASIC, Element.ICE)); + registerItem(registry, "apprentice_ice_wand", new ItemWand(Tier.APPRENTICE, Element.ICE)); + registerItem(registry, "advanced_ice_wand", new ItemWand(Tier.ADVANCED, Element.ICE)); + registerItem(registry, "master_ice_wand", new ItemWand(Tier.MASTER, Element.ICE)); + + registerItem(registry, "basic_lightning_wand", new ItemWand(Tier.BASIC, Element.LIGHTNING)); + registerItem(registry, "apprentice_lightning_wand", new ItemWand(Tier.APPRENTICE, Element.LIGHTNING)); + registerItem(registry, "advanced_lightning_wand", new ItemWand(Tier.ADVANCED, Element.LIGHTNING)); + registerItem(registry, "master_lightning_wand", new ItemWand(Tier.MASTER, Element.LIGHTNING)); + + registerItem(registry, "basic_necromancy_wand", new ItemWand(Tier.BASIC, Element.NECROMANCY)); + registerItem(registry, "apprentice_necromancy_wand", new ItemWand(Tier.APPRENTICE, Element.NECROMANCY)); + registerItem(registry, "advanced_necromancy_wand", new ItemWand(Tier.ADVANCED, Element.NECROMANCY)); + registerItem(registry, "master_necromancy_wand", new ItemWand(Tier.MASTER, Element.NECROMANCY)); + + registerItem(registry, "basic_earth_wand", new ItemWand(Tier.BASIC, Element.EARTH)); + registerItem(registry, "apprentice_earth_wand", new ItemWand(Tier.APPRENTICE, Element.EARTH)); + registerItem(registry, "advanced_earth_wand", new ItemWand(Tier.ADVANCED, Element.EARTH)); + registerItem(registry, "master_earth_wand", new ItemWand(Tier.MASTER, Element.EARTH)); + + registerItem(registry, "basic_sorcery_wand", new ItemWand(Tier.BASIC, Element.SORCERY)); + registerItem(registry, "apprentice_sorcery_wand", new ItemWand(Tier.APPRENTICE, Element.SORCERY)); + registerItem(registry, "advanced_sorcery_wand", new ItemWand(Tier.ADVANCED, Element.SORCERY)); + registerItem(registry, "master_sorcery_wand", new ItemWand(Tier.MASTER, Element.SORCERY)); + + registerItem(registry, "basic_healing_wand", new ItemWand(Tier.BASIC, Element.HEALING)); + registerItem(registry, "apprentice_healing_wand", new ItemWand(Tier.APPRENTICE, Element.HEALING)); + registerItem(registry, "advanced_healing_wand", new ItemWand(Tier.ADVANCED, Element.HEALING)); + registerItem(registry, "master_healing_wand", new ItemWand(Tier.MASTER, Element.HEALING)); - registerItem(registry, basic_fire_wand, "basic_fire_wand"); - registerItem(registry, basic_ice_wand, "basic_ice_wand"); - registerItem(registry, basic_lightning_wand, "basic_lightning_wand"); - registerItem(registry, basic_necromancy_wand, "basic_necromancy_wand"); - registerItem(registry, basic_earth_wand, "basic_earth_wand"); - registerItem(registry, basic_sorcery_wand, "basic_sorcery_wand"); - registerItem(registry, basic_healing_wand, "basic_healing_wand"); + registerItem(registry, "spectral_sword", new ItemSpectralSword(ToolMaterial.IRON)); + registerItem(registry, "spectral_pickaxe", new ItemSpectralPickaxe(ToolMaterial.IRON)); + registerItem(registry, "spectral_bow", new ItemSpectralBow()); - registerItem(registry, apprentice_fire_wand, "apprentice_fire_wand"); - registerItem(registry, apprentice_ice_wand, "apprentice_ice_wand"); - registerItem(registry, apprentice_lightning_wand, "apprentice_lightning_wand"); - registerItem(registry, apprentice_necromancy_wand, "apprentice_necromancy_wand"); - registerItem(registry, apprentice_earth_wand, "apprentice_earth_wand"); - registerItem(registry, apprentice_sorcery_wand, "apprentice_sorcery_wand"); - registerItem(registry, apprentice_healing_wand, "apprentice_healing_wand"); + registerItem(registry, "medium_mana_flask", new Item().setCreativeTab(WizardryTabs.WIZARDRY)); - registerItem(registry, advanced_fire_wand, "advanced_fire_wand"); - registerItem(registry, advanced_ice_wand, "advanced_ice_wand"); - registerItem(registry, advanced_lightning_wand, "advanced_lightning_wand"); - registerItem(registry, advanced_necromancy_wand, "advanced_necromancy_wand"); - registerItem(registry, advanced_earth_wand, "advanced_earth_wand"); - registerItem(registry, advanced_sorcery_wand, "advanced_sorcery_wand"); - registerItem(registry, advanced_healing_wand, "advanced_healing_wand"); + registerItem(registry, "storage_upgrade", new Item().setCreativeTab(WizardryTabs.WIZARDRY)); + registerItem(registry, "siphon_upgrade", new Item().setCreativeTab(WizardryTabs.WIZARDRY)); + registerItem(registry, "condenser_upgrade", new Item().setCreativeTab(WizardryTabs.WIZARDRY)); + registerItem(registry, "range_upgrade", new Item().setCreativeTab(WizardryTabs.WIZARDRY)); + registerItem(registry, "duration_upgrade", new Item().setCreativeTab(WizardryTabs.WIZARDRY)); + registerItem(registry, "cooldown_upgrade", new Item().setCreativeTab(WizardryTabs.WIZARDRY)); + registerItem(registry, "blast_upgrade", new Item().setCreativeTab(WizardryTabs.WIZARDRY)); + registerItem(registry, "attunement_upgrade", new Item().setCreativeTab(WizardryTabs.WIZARDRY)); - registerItem(registry, master_fire_wand, "master_fire_wand"); - registerItem(registry, master_ice_wand, "master_ice_wand"); - registerItem(registry, master_lightning_wand, "master_lightning_wand"); - registerItem(registry, master_necromancy_wand, "master_necromancy_wand"); - registerItem(registry, master_earth_wand, "master_earth_wand"); - registerItem(registry, master_sorcery_wand, "master_sorcery_wand"); - registerItem(registry, master_healing_wand, "master_healing_wand"); + registerItem(registry, "magic_silk", new Item().setCreativeTab(WizardryTabs.WIZARDRY)); - registerItem(registry, spectral_sword, "spectral_sword"); - registerItem(registry, spectral_pickaxe, "spectral_pickaxe"); - registerItem(registry, spectral_bow, "spectral_bow"); + registerItem(registry, "flaming_axe", new ItemFlamingAxe(Materials.MAGICAL)); + registerItem(registry, "frost_axe", new ItemFrostAxe(Materials.MAGICAL)); - registerItem(registry, mana_flask, "mana_flask"); + registerItem(registry, "firebomb", new ItemFirebomb()); + registerItem(registry, "poison_bomb", new ItemPoisonBomb()); - registerItem(registry, storage_upgrade, "storage_upgrade"); - registerItem(registry, siphon_upgrade, "siphon_upgrade"); - registerItem(registry, condenser_upgrade, "condenser_upgrade"); - registerItem(registry, range_upgrade, "range_upgrade"); - registerItem(registry, duration_upgrade, "duration_upgrade"); - registerItem(registry, cooldown_upgrade, "cooldown_upgrade"); - registerItem(registry, blast_upgrade, "blast_upgrade"); - registerItem(registry, attunement_upgrade, "attunement_upgrade"); + registerItem(registry, "blank_scroll", new ItemBlankScroll()); + registerItem(registry, "scroll", new ItemScroll()); - registerItem(registry, flaming_axe, "flaming_axe"); - registerItem(registry, frost_axe, "frost_axe"); + // The only way to get these is in dungeon chests (They are legendary, after all. Wizards don't just have them. + // Also if they were sold you could buy four from the same wizard - and that's no fun at all!) + registerItem(registry, "armour_upgrade", new ItemArmourUpgrade()); + + registerItem(registry, "wizard_hat", new ItemWizardArmour(Materials.SILK, 1, EntityEquipmentSlot.HEAD, null), true); + registerItem(registry, "wizard_robe", new ItemWizardArmour(Materials.SILK, 1, EntityEquipmentSlot.CHEST, null)); + registerItem(registry, "wizard_leggings", new ItemWizardArmour(Materials.SILK, 1, EntityEquipmentSlot.LEGS, null)); + registerItem(registry, "wizard_boots", new ItemWizardArmour(Materials.SILK, 1, EntityEquipmentSlot.FEET, null)); - registerItem(registry, firebomb, "firebomb"); - registerItem(registry, poison_bomb, "poison_bomb"); + registerItem(registry, "wizard_hat_fire", new ItemWizardArmour(Materials.SILK, 1, EntityEquipmentSlot.HEAD, Element.FIRE)); + registerItem(registry, "wizard_robe_fire", new ItemWizardArmour(Materials.SILK, 1, EntityEquipmentSlot.CHEST, Element.FIRE)); + registerItem(registry, "wizard_leggings_fire", new ItemWizardArmour(Materials.SILK, 1, EntityEquipmentSlot.LEGS, Element.FIRE)); + registerItem(registry, "wizard_boots_fire", new ItemWizardArmour(Materials.SILK, 1, EntityEquipmentSlot.FEET, Element.FIRE)); - registerItem(registry, blank_scroll, "blank_scroll"); - registerItem(registry, scroll, "scroll"); + registerItem(registry, "wizard_hat_ice", new ItemWizardArmour(Materials.SILK, 1, EntityEquipmentSlot.HEAD, Element.ICE)); + registerItem(registry, "wizard_robe_ice", new ItemWizardArmour(Materials.SILK, 1, EntityEquipmentSlot.CHEST, Element.ICE)); + registerItem(registry, "wizard_leggings_ice", new ItemWizardArmour(Materials.SILK, 1, EntityEquipmentSlot.LEGS, Element.ICE)); + registerItem(registry, "wizard_boots_ice", new ItemWizardArmour(Materials.SILK, 1, EntityEquipmentSlot.FEET, Element.ICE)); - registerItem(registry, armour_upgrade, "armour_upgrade"); + registerItem(registry, "wizard_hat_lightning", new ItemWizardArmour(Materials.SILK, 1, EntityEquipmentSlot.HEAD, Element.LIGHTNING)); + registerItem(registry, "wizard_robe_lightning", new ItemWizardArmour(Materials.SILK, 1, EntityEquipmentSlot.CHEST, Element.LIGHTNING)); + registerItem(registry, "wizard_leggings_lightning", new ItemWizardArmour(Materials.SILK, 1, EntityEquipmentSlot.LEGS, Element.LIGHTNING)); + registerItem(registry, "wizard_boots_lightning", new ItemWizardArmour(Materials.SILK, 1, EntityEquipmentSlot.FEET, Element.LIGHTNING)); - registerItem(registry, magic_silk, "magic_silk"); + registerItem(registry, "wizard_hat_necromancy", new ItemWizardArmour(Materials.SILK, 1, EntityEquipmentSlot.HEAD, Element.NECROMANCY)); + registerItem(registry, "wizard_robe_necromancy", new ItemWizardArmour(Materials.SILK, 1, EntityEquipmentSlot.CHEST, Element.NECROMANCY)); + registerItem(registry, "wizard_leggings_necromancy", new ItemWizardArmour(Materials.SILK, 1, EntityEquipmentSlot.LEGS, Element.NECROMANCY)); + registerItem(registry, "wizard_boots_necromancy", new ItemWizardArmour(Materials.SILK, 1, EntityEquipmentSlot.FEET, Element.NECROMANCY)); - registerItem(registry, wizard_hat, "wizard_hat"); - registerItem(registry, wizard_robe, "wizard_robe"); - registerItem(registry, wizard_leggings, "wizard_leggings"); - registerItem(registry, wizard_boots, "wizard_boots"); + registerItem(registry, "wizard_hat_earth", new ItemWizardArmour(Materials.SILK, 1, EntityEquipmentSlot.HEAD, Element.EARTH)); + registerItem(registry, "wizard_robe_earth", new ItemWizardArmour(Materials.SILK, 1, EntityEquipmentSlot.CHEST, Element.EARTH)); + registerItem(registry, "wizard_leggings_earth", new ItemWizardArmour(Materials.SILK, 1, EntityEquipmentSlot.LEGS, Element.EARTH)); + registerItem(registry, "wizard_boots_earth", new ItemWizardArmour(Materials.SILK, 1, EntityEquipmentSlot.FEET, Element.EARTH)); - registerItem(registry, wizard_hat_fire, "wizard_hat_fire"); - registerItem(registry, wizard_robe_fire, "wizard_robe_fire"); - registerItem(registry, wizard_leggings_fire, "wizard_leggings_fire"); - registerItem(registry, wizard_boots_fire, "wizard_boots_fire"); + registerItem(registry, "wizard_hat_sorcery", new ItemWizardArmour(Materials.SILK, 1, EntityEquipmentSlot.HEAD, Element.SORCERY)); + registerItem(registry, "wizard_robe_sorcery", new ItemWizardArmour(Materials.SILK, 1, EntityEquipmentSlot.CHEST, Element.SORCERY)); + registerItem(registry, "wizard_leggings_sorcery", new ItemWizardArmour(Materials.SILK, 1, EntityEquipmentSlot.LEGS, Element.SORCERY)); + registerItem(registry, "wizard_boots_sorcery", new ItemWizardArmour(Materials.SILK, 1, EntityEquipmentSlot.FEET, Element.SORCERY)); - registerItem(registry, wizard_hat_ice, "wizard_hat_ice"); - registerItem(registry, wizard_robe_ice, "wizard_robe_ice"); - registerItem(registry, wizard_leggings_ice, "wizard_leggings_ice"); - registerItem(registry, wizard_boots_ice, "wizard_boots_ice"); + registerItem(registry, "wizard_hat_healing", new ItemWizardArmour(Materials.SILK, 1, EntityEquipmentSlot.HEAD, Element.HEALING)); + registerItem(registry, "wizard_robe_healing", new ItemWizardArmour(Materials.SILK, 1, EntityEquipmentSlot.CHEST, Element.HEALING)); + registerItem(registry, "wizard_leggings_healing", new ItemWizardArmour(Materials.SILK, 1, EntityEquipmentSlot.LEGS, Element.HEALING)); + registerItem(registry, "wizard_boots_healing", new ItemWizardArmour(Materials.SILK, 1, EntityEquipmentSlot.FEET, Element.HEALING)); - registerItem(registry, wizard_hat_lightning, "wizard_hat_lightning"); - registerItem(registry, wizard_robe_lightning, "wizard_robe_lightning"); - registerItem(registry, wizard_leggings_lightning, "wizard_leggings_lightning"); - registerItem(registry, wizard_boots_lightning, "wizard_boots_lightning"); + registerItem(registry, "spectral_helmet", new ItemSpectralArmour(ArmorMaterial.IRON, 1, EntityEquipmentSlot.HEAD)); + registerItem(registry, "spectral_chestplate", new ItemSpectralArmour(ArmorMaterial.IRON, 1, EntityEquipmentSlot.CHEST)); + registerItem(registry, "spectral_leggings", new ItemSpectralArmour(ArmorMaterial.IRON, 1, EntityEquipmentSlot.LEGS)); + registerItem(registry, "spectral_boots", new ItemSpectralArmour(ArmorMaterial.IRON, 1, EntityEquipmentSlot.FEET)); + + registerItem(registry, "smoke_bomb", new ItemSmokeBomb()); - registerItem(registry, wizard_hat_necromancy, "wizard_hat_necromancy"); - registerItem(registry, wizard_robe_necromancy, "wizard_robe_necromancy"); - registerItem(registry, wizard_leggings_necromancy, "wizard_leggings_necromancy"); - registerItem(registry, wizard_boots_necromancy, "wizard_boots_necromancy"); - - registerItem(registry, wizard_hat_earth, "wizard_hat_earth"); - registerItem(registry, wizard_robe_earth, "wizard_robe_earth"); - registerItem(registry, wizard_leggings_earth, "wizard_leggings_earth"); - registerItem(registry, wizard_boots_earth, "wizard_boots_earth"); - - registerItem(registry, wizard_hat_sorcery, "wizard_hat_sorcery"); - registerItem(registry, wizard_robe_sorcery, "wizard_robe_sorcery"); - registerItem(registry, wizard_leggings_sorcery, "wizard_leggings_sorcery"); - registerItem(registry, wizard_boots_sorcery, "wizard_boots_sorcery"); - - registerItem(registry, wizard_hat_healing, "wizard_hat_healing"); - registerItem(registry, wizard_robe_healing, "wizard_robe_healing"); - registerItem(registry, wizard_leggings_healing, "wizard_leggings_healing"); - registerItem(registry, wizard_boots_healing, "wizard_boots_healing"); - - registerItem(registry, spectral_helmet, "spectral_helmet"); - registerItem(registry, spectral_chestplate, "spectral_chestplate"); - registerItem(registry, spectral_leggings, "spectral_leggings"); - registerItem(registry, spectral_boots, "spectral_boots"); - - registerItem(registry, smoke_bomb, "smoke_bomb"); - - registerItem(registry, identification_scroll, "identification_scroll"); + registerItem(registry, "identification_scroll", new ItemIdentificationScroll()); + + registerItem(registry, "test_artefact", new ItemArtefact(EnumRarity.UNCOMMON)); + } } } \ No newline at end of file diff --git a/src/main/java/electroblob/wizardry/registry/WizardryPotions.java b/src/main/java/electroblob/wizardry/registry/WizardryPotions.java index 60f43f9d..a39a99d7 100644 --- a/src/main/java/electroblob/wizardry/registry/WizardryPotions.java +++ b/src/main/java/electroblob/wizardry/registry/WizardryPotions.java @@ -1,19 +1,19 @@ package electroblob.wizardry.registry; import electroblob.wizardry.Wizardry; -import electroblob.wizardry.potion.PotionDecay; -import electroblob.wizardry.potion.PotionFrost; -import electroblob.wizardry.potion.PotionMagicEffect; -import electroblob.wizardry.potion.PotionMagicEffectParticles; +import electroblob.wizardry.potion.*; import electroblob.wizardry.util.ParticleBuilder; import electroblob.wizardry.util.ParticleBuilder.Type; import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.ai.attributes.AbstractAttributeMap; import net.minecraft.potion.Potion; import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.ResourceLocation; import net.minecraft.world.World; import net.minecraftforge.event.RegistryEvent; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.common.registry.GameRegistry.ObjectHolder; import net.minecraftforge.registries.IForgeRegistry; /** @@ -22,73 +22,39 @@ import net.minecraftforge.registries.IForgeRegistry; * @author Electroblob * @since Wizardry 2.1 */ +@ObjectHolder(Wizardry.MODID) @Mod.EventBusSubscriber public final class WizardryPotions { - /* Interestingly, setting the colour to black stops the particles from rendering. This is great, however, the black - * colour then 'mixes' with other potions that are applied. Whilst this is a bit annoying, for the amount it is - * likely to get noticed it is certainly preferable to always making showParticles false, because now I can give the - * user the option (via commands) of having one of my potion effects without particles, and more importantly the - * potion effect HUD still gets displayed. TODO: Backport to 1.7.10, assuming it also works in that version. This - * means also changing whenever the potion effect is added such that it is NOT ambient. */ - - public static final Potion frost = new PotionFrost(true, 0); // Colour was 0x38ddec (was arbitrary anyway) - - public static final Potion transience = new PotionMagicEffectParticles(false, 0, 0){ - @Override - public void spawnCustomParticle(World world, double x, double y, double z){ - ParticleBuilder.create(Type.DUST).pos(x, y, z).colour(0.8f, 0.8f, 1.0f).shaded(true).spawn(world); - } - }.setBeneficial(); // 0xffe89b - - public static final Potion fireskin = new PotionMagicEffectParticles(false, 0, 1){ - @Override - public void spawnCustomParticle(World world, double x, double y, double z){ - world.spawnParticle(EnumParticleTypes.FLAME, x, y, z, 0, 0, 0); - } - - @Override - public void performEffect(EntityLivingBase entitylivingbase, int strength){ - entitylivingbase.extinguish(); // Stops melee mobs that are on fire from setting the player on fire, - // without allowing the player to actually stand in fire or swim in lava without taking damage. - }; - }.setBeneficial(); // 0xff2f02 - - public static final Potion ice_shroud = new PotionMagicEffectParticles(false, 0, 2){ - @Override - public void spawnCustomParticle(World world, double x, double y, double z){ - float brightness = 0.5f + (world.rand.nextFloat() / 2); - ParticleBuilder.create(Type.SPARKLE).pos(x, y, z).colour(brightness, brightness + 0.1f, 1.0f).gravity(true).spawn(world); - ParticleBuilder.create(Type.SNOW).pos(x, y, z).spawn(world); - } - }.setBeneficial(); // 0x52f1ff - - public static final Potion static_aura = new PotionMagicEffectParticles(false, 0, 3){ - @Override - public void spawnCustomParticle(World world, double x, double y, double z){ - ParticleBuilder.create(Type.SPARK).pos(x, y, z).spawn(world); - } - }.setBeneficial(); // 0x0070ff - - public static final Potion decay = new PotionDecay(true, 0x3c006c); - public static final Potion sixth_sense = new PotionMagicEffect(false, 0xc6ff01, 4).setBeneficial(); - public static final Potion arcane_jammer = new PotionMagicEffect(false, 0xcf4aa2, 5); - public static final Potion mind_trick = new PotionMagicEffect(true, 0x601683, 6); - public static final Potion mind_control = new PotionMagicEffect(true, 0x320b44, 7); - public static final Potion font_of_mana = new PotionMagicEffect(false, 0xffe5bb, 8).setBeneficial(); - public static final Potion fear = new PotionMagicEffect(true, 0xbd0100, 9); + public static final Potion frost = null; + public static final Potion transience = null; + public static final Potion fireskin = null; + public static final Potion ice_shroud = null; + public static final Potion static_aura = null; + public static final Potion decay = null; + public static final Potion sixth_sense = null; + public static final Potion arcane_jammer = null; + public static final Potion mind_trick = null; + public static final Potion mind_control = null; + public static final Potion font_of_mana = null; + public static final Potion fear = null; + public static final Potion curse_of_soulbinding = null; + public static final Potion paralysis = null; + public static final Potion muffle = null; + public static final Potion ward = null; + public static final Potion slow_time = null; /** * Sets both the registry and unlocalised names of the given potion, then registers it with the given registry. Use - * this instead of {@link Potion#setRegistryName(String)} and {@link Potion#setUnlocalizedName(String)} during + * this instead of {@link Potion#setRegistryName(String)} and {@link Potion#setPotionName(String)} during * construction, for convenience and consistency. * * @param registry The registry to register the given potion to. - * @param potion The potion to register. * @param name The name of the potion, without the mod ID or the .name stuff. The registry name will be * {@code ebwizardry:[name]}. The unlocalised name will be {@code potion.ebwizardry:[name].name}. + * @param potion The potion to register. */ - public static void registerPotion(IForgeRegistry registry, Potion potion, String name){ + public static void registerPotion(IForgeRegistry registry, String name, Potion potion){ potion.setRegistryName(Wizardry.MODID, name); // For some reason, Potion#getName() doesn't prepend "potion." itself, so it has to be done here. potion.setPotionName("potion." + potion.getRegistryName().toString()); @@ -100,18 +66,101 @@ public final class WizardryPotions { IForgeRegistry registry = event.getRegistry(); - registerPotion(registry, frost, "frost"); - registerPotion(registry, transience, "transience"); - registerPotion(registry, fireskin, "fireskin"); - registerPotion(registry, ice_shroud, "ice_shroud"); - registerPotion(registry, static_aura, "static_aura"); - registerPotion(registry, decay, "decay"); - registerPotion(registry, sixth_sense, "sixth_sense"); - registerPotion(registry, arcane_jammer, "arcane_jammer"); - registerPotion(registry, mind_trick, "mind_trick"); - registerPotion(registry, mind_control, "mind_control"); - registerPotion(registry, font_of_mana, "font_of_mana"); - registerPotion(registry, fear, "fear"); + // Interestingly, setting the colour to black stops the particles from rendering. + + registerPotion(registry, "frost", new PotionFrost(true, 0)); // Colour was 0x38ddec (was arbitrary anyway) + + registerPotion(registry, "transience", new PotionMagicEffectParticles(false, 0, + new ResourceLocation(Wizardry.MODID, "potion_icon_transience")){ + @Override + public void spawnCustomParticle(World world, double x, double y, double z){ + ParticleBuilder.create(Type.DUST).pos(x, y, z).clr(0.8f, 0.8f, 1.0f).shaded(true).spawn(world); + } + }.setBeneficial()); // 0xffe89b + + registerPotion(registry, "fireskin", new PotionMagicEffectParticles(false, 0, + new ResourceLocation(Wizardry.MODID, "potion_icon_fireskin")){ + @Override + public void spawnCustomParticle(World world, double x, double y, double z){ + world.spawnParticle(EnumParticleTypes.FLAME, x, y, z, 0, 0, 0); + } + + @Override + public void performEffect(EntityLivingBase entitylivingbase, int strength){ + entitylivingbase.extinguish(); // Stops melee mobs that are on fire from setting the player on fire, + // without allowing the player to actually stand in fire or swim in lava without taking damage. + }; + }.setBeneficial()); // 0xff2f02 + + registerPotion(registry, "ice_shroud", new PotionMagicEffectParticles(false, 0, + new ResourceLocation(Wizardry.MODID, "potion_icon_ice_shroud")){ + @Override + public void spawnCustomParticle(World world, double x, double y, double z){ + float brightness = 0.5f + (world.rand.nextFloat() / 2); + ParticleBuilder.create(Type.SPARKLE).pos(x, y, z).clr(brightness, brightness + 0.1f, 1.0f).gravity(true).spawn(world); + ParticleBuilder.create(Type.SNOW).pos(x, y, z).spawn(world); + } + }.setBeneficial()); // 0x52f1ff + + registerPotion(registry, "static_aura", new PotionMagicEffectParticles(false, 0, + new ResourceLocation(Wizardry.MODID, "potion_icon_static_aura")){ + @Override + public void spawnCustomParticle(World world, double x, double y, double z){ + ParticleBuilder.create(Type.SPARK).pos(x, y, z).spawn(world); + } + }.setBeneficial()); // 0x0070ff + + registerPotion(registry, "decay", new PotionDecay(true, 0x3c006c)); + + registerPotion(registry, "sixth_sense", new PotionMagicEffect(false, 0xc6ff01, + new ResourceLocation(Wizardry.MODID, "potion_icon_sixth_sense")){ + @Override + public void removeAttributesModifiersFromEntity(EntityLivingBase target, AbstractAttributeMap attributeMapIn, int amplifier){ + // Reset the shader + if(target.world.isRemote && target == net.minecraft.client.Minecraft.getMinecraft().player){ + net.minecraft.client.Minecraft.getMinecraft().entityRenderer.stopUseShader(); + } + } + }.setBeneficial()); + + registerPotion(registry, "arcane_jammer", new PotionMagicEffect(true, 0xcf4aa2, + new ResourceLocation(Wizardry.MODID, "potion_icon_arcane_jammer"))); + + registerPotion(registry, "mind_trick", new PotionMagicEffect(true, 0x601683, + new ResourceLocation(Wizardry.MODID, "potion_icon_mind_trick"))); + + registerPotion(registry, "mind_control", new PotionMagicEffect(true, 0x320b44, + new ResourceLocation(Wizardry.MODID, "potion_icon_mind_control"))); + + registerPotion(registry, "font_of_mana", new PotionMagicEffect(false, 0xffe5bb, + new ResourceLocation(Wizardry.MODID, "potion_icon_font_of_mana")).setBeneficial()); + + registerPotion(registry, "fear", new PotionMagicEffect(true, 0xbd0100, + new ResourceLocation(Wizardry.MODID, "potion_icon_fear"))); + + registerPotion(registry, "curse_of_soulbinding", new Curse(true, 0x0f000f, + new ResourceLocation(Wizardry.MODID, "potion_icon_curse_of_soulbinding")){ + @Override // We're not removing any attributes, but it's called when we want it to be so... + public void removeAttributesModifiersFromEntity(EntityLivingBase entity, net.minecraft.entity.ai.attributes.AbstractAttributeMap attributeMapIn, int amplifier){ + // TODO: Hmmmm... + } + }); + + registerPotion(registry, "paralysis", new PotionMagicEffectParticles(true, 0, + new ResourceLocation(Wizardry.MODID, "potion_icon_paralysis")){ + @Override + public void spawnCustomParticle(World world, double x, double y, double z){ + ParticleBuilder.create(Type.SPARK).pos(x, y, z).spawn(world); + } + }); + + registerPotion(registry, "muffle", new PotionMagicEffect(false, 0x4464d9, + new ResourceLocation(Wizardry.MODID, "potion_icon_muffle")).setBeneficial()); + + registerPotion(registry, "ward", new PotionMagicEffect(false, 0xc991d0, + new ResourceLocation(Wizardry.MODID, "potion_icon_ward")).setBeneficial()); + + registerPotion(registry, "slow_time", new PotionSlowTime(false, 0x5be3bb).setBeneficial()); } } \ No newline at end of file