From d30a40bdc4cc1b777f3154c9eaaadffa73fce4f2 Mon Sep 17 00:00:00 2001 From: WinDanesz <31292708+WinDanesz@users.noreply.github.com> Date: Mon, 5 Sep 2022 23:14:51 +0200 Subject: [PATCH] refactor: Flattened arcane tome item registry --- .../wizardry/block/BlockBookshelf.java | 4 +- .../wizardry/entity/living/EntityWizard.java | 6 +-- .../inventory/ContainerArcaneWorkbench.java | 4 +- .../inventory/ContainerBookshelf.java | 4 +- .../wizardry/item/ItemArcaneTome.java | 47 +++++-------------- .../electroblob/wizardry/item/ItemWand.java | 4 +- .../wizardry/registry/WizardryItems.java | 8 +++- .../tileentity/TileEntityArcaneWorkbench.java | 4 +- .../assets/ebwizardry/lang/en_us.lang | 4 +- .../loot_tables/subsets/arcane_tomes.json | 33 +++---------- .../models/item/arcane_tome_advanced.json | 6 +++ .../models/item/arcane_tome_apprentice.json | 6 +++ .../models/item/arcane_tome_master.json | 6 +++ 13 files changed, 62 insertions(+), 74 deletions(-) create mode 100644 src/main/resources/assets/ebwizardry/models/item/arcane_tome_advanced.json create mode 100644 src/main/resources/assets/ebwizardry/models/item/arcane_tome_apprentice.json create mode 100644 src/main/resources/assets/ebwizardry/models/item/arcane_tome_master.json diff --git a/src/main/java/electroblob/wizardry/block/BlockBookshelf.java b/src/main/java/electroblob/wizardry/block/BlockBookshelf.java index 6eb3b714..47625d94 100644 --- a/src/main/java/electroblob/wizardry/block/BlockBookshelf.java +++ b/src/main/java/electroblob/wizardry/block/BlockBookshelf.java @@ -256,7 +256,9 @@ public class BlockBookshelf extends BlockHorizontal implements ITileEntityProvid // Wizardry books registerBookModelTexture(() -> WizardryItems.spell_book, new ResourceLocation(Wizardry.MODID, "blocks/books_red")); registerBookModelTexture(() -> WizardryItems.wizard_handbook, new ResourceLocation(Wizardry.MODID, "blocks/books_blue")); - registerBookModelTexture(() -> WizardryItems.arcane_tome, new ResourceLocation(Wizardry.MODID, "blocks/books_purple")); + registerBookModelTexture(() -> WizardryItems.arcane_tome_apprentice,new ResourceLocation(Wizardry.MODID, "blocks/books_purple")); + registerBookModelTexture(() -> WizardryItems.arcane_tome_advanced, new ResourceLocation(Wizardry.MODID, "blocks/books_purple")); + registerBookModelTexture(() -> WizardryItems.arcane_tome_master, new ResourceLocation(Wizardry.MODID, "blocks/books_purple")); registerBookModelTexture(() -> WizardryItems.ruined_spell_book, new ResourceLocation(Wizardry.MODID, "blocks/books_brown")); registerBookModelTexture(() -> WizardryItems.scroll, new ResourceLocation(Wizardry.MODID, "blocks/scrolls_blue")); registerBookModelTexture(() -> WizardryItems.blank_scroll, new ResourceLocation(Wizardry.MODID, "blocks/scrolls_blue")); diff --git a/src/main/java/electroblob/wizardry/entity/living/EntityWizard.java b/src/main/java/electroblob/wizardry/entity/living/EntityWizard.java index 20729539..e38dff2d 100644 --- a/src/main/java/electroblob/wizardry/entity/living/EntityWizard.java +++ b/src/main/java/electroblob/wizardry/entity/living/EntityWizard.java @@ -673,7 +673,7 @@ public class EntityWizard extends EntityCreature implements INpc, IMerchant, ISp WizardryItems.getWand(tier, Element.values()[rand.nextInt(Element.values().length)])); } }else if(randomiser < 8){ - return new ItemStack(WizardryItems.arcane_tome, 1, 1); + return new ItemStack(WizardryItems.arcane_tome_apprentice, 1); }else if(randomiser < 10){ EntityEquipmentSlot slot = InventoryUtils.ARMOUR_SLOTS[rand.nextInt(InventoryUtils.ARMOUR_SLOTS.length)]; if(this.getElement() != Element.MAGIC && rand.nextInt(4) > 0){ @@ -709,7 +709,7 @@ public class EntityWizard extends EntityCreature implements INpc, IMerchant, ISp WizardryItems.getWand(tier, Element.values()[rand.nextInt(Element.values().length)])); } }else if(randomiser < 8){ - return new ItemStack(WizardryItems.arcane_tome, 1, 2); + return new ItemStack(WizardryItems.arcane_tome_advanced, 1); }else{ List upgrades = new ArrayList(WandHelper.getSpecialUpgrades()); randomiser = rand.nextInt(upgrades.size()); @@ -732,7 +732,7 @@ public class EntityWizard extends EntityCreature implements INpc, IMerchant, ISp return new ItemStack(WizardryItems.master_wand); } }else{ - return new ItemStack(WizardryItems.arcane_tome, 1, 3); + return new ItemStack(WizardryItems.arcane_tome_master, 1); } } diff --git a/src/main/java/electroblob/wizardry/inventory/ContainerArcaneWorkbench.java b/src/main/java/electroblob/wizardry/inventory/ContainerArcaneWorkbench.java index 864bff5f..f22b76e1 100644 --- a/src/main/java/electroblob/wizardry/inventory/ContainerArcaneWorkbench.java +++ b/src/main/java/electroblob/wizardry/inventory/ContainerArcaneWorkbench.java @@ -98,7 +98,9 @@ public class ContainerArcaneWorkbench extends Container implements ISpellSortabl this.addSlotToContainer(new SlotWorkbenchItem(tileentity, CENTRE_SLOT, 80, 64, this)); Set upgrades = new HashSet<>(WandHelper.getSpecialUpgrades()); // Can't be done statically. - upgrades.add(WizardryItems.arcane_tome); + upgrades.add(WizardryItems.arcane_tome_apprentice); + upgrades.add(WizardryItems.arcane_tome_advanced); + upgrades.add(WizardryItems.arcane_tome_master); upgrades.add(WizardryItems.resplendent_thread); upgrades.add(WizardryItems.crystal_silver_plating); upgrades.add(WizardryItems.ethereal_crystalweave); diff --git a/src/main/java/electroblob/wizardry/inventory/ContainerBookshelf.java b/src/main/java/electroblob/wizardry/inventory/ContainerBookshelf.java index ef3d4fb1..791aee81 100644 --- a/src/main/java/electroblob/wizardry/inventory/ContainerBookshelf.java +++ b/src/main/java/electroblob/wizardry/inventory/ContainerBookshelf.java @@ -127,7 +127,9 @@ public class ContainerBookshelf extends Container { registerBookItem(Items.WRITABLE_BOOK); registerBookItem(Items.ENCHANTED_BOOK); registerBookItem(WizardryItems.spell_book); - registerBookItem(WizardryItems.arcane_tome); + registerBookItem(WizardryItems.arcane_tome_apprentice); + registerBookItem(WizardryItems.arcane_tome_advanced); + registerBookItem(WizardryItems.arcane_tome_master); registerBookItem(WizardryItems.wizard_handbook); registerBookItem(WizardryItems.ruined_spell_book); registerBookItem(WizardryItems.scroll); diff --git a/src/main/java/electroblob/wizardry/item/ItemArcaneTome.java b/src/main/java/electroblob/wizardry/item/ItemArcaneTome.java index c710e5d0..79827f1f 100644 --- a/src/main/java/electroblob/wizardry/item/ItemArcaneTome.java +++ b/src/main/java/electroblob/wizardry/item/ItemArcaneTome.java @@ -3,11 +3,9 @@ package electroblob.wizardry.item; import electroblob.wizardry.Wizardry; import electroblob.wizardry.constants.Tier; import electroblob.wizardry.registry.WizardryTabs; -import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.EnumRarity; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import net.minecraft.util.NonNullList; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; @@ -16,54 +14,33 @@ import java.util.List; public class ItemArcaneTome extends Item { - public ItemArcaneTome(){ + private final EnumRarity rarity; + private final Tier tier; + + public ItemArcaneTome(EnumRarity rarity, Tier tier){ super(); - setHasSubtypes(true); setMaxStackSize(1); setCreativeTab(WizardryTabs.WIZARDRY); + this.rarity = rarity; + this.tier = tier; } - @Override - public void getSubItems(CreativeTabs tab, NonNullList list){ - if(tab == WizardryTabs.WIZARDRY){ // Don't use isInCreativeTab here. - for(int i = 1; i < Tier.values().length; i++){ - list.add(new ItemStack(this, 1, i)); - } - } - } + public Tier getTier() { return tier; } @Override @SideOnly(Side.CLIENT) - public boolean hasEffect(ItemStack stack){ - return true; - } + public boolean hasEffect(ItemStack stack){ return true; } @Override - public EnumRarity getRarity(ItemStack stack){ - switch(this.getDamage(stack)){ - case 1: - return EnumRarity.UNCOMMON; - case 2: - return EnumRarity.RARE; - case 3: - return EnumRarity.EPIC; - } - return EnumRarity.COMMON; - } + public EnumRarity getRarity(ItemStack stack){ return rarity; } @SideOnly(Side.CLIENT) @Override public void addInformation(ItemStack stack, World world, List tooltip, net.minecraft.client.util.ITooltipFlag showAdvanced){ - - if(stack.getItemDamage() < 1){ - return; // If something's up with the metadata it will display a 'generic' tome of arcana with no info - } - - Tier tier = Tier.values()[stack.getItemDamage()]; - Tier tier2 = Tier.values()[stack.getItemDamage() - 1]; - tooltip.add(tier.getDisplayNameWithFormatting()); - Wizardry.proxy.addMultiLineDescription(tooltip, "item." + this.getRegistryName() + ".desc", + Tier tier2 = Tier.values()[tier.ordinal() - 1]; + + Wizardry.proxy.addMultiLineDescription(tooltip, "item." + Wizardry.MODID + "arcane_tome.desc", tier2.getDisplayNameWithFormatting() + "\u00A77", tier.getDisplayNameWithFormatting() + "\u00A77"); } diff --git a/src/main/java/electroblob/wizardry/item/ItemWand.java b/src/main/java/electroblob/wizardry/item/ItemWand.java index 64ab91ef..b854f50e 100644 --- a/src/main/java/electroblob/wizardry/item/ItemWand.java +++ b/src/main/java/electroblob/wizardry/item/ItemWand.java @@ -687,9 +687,9 @@ public class ItemWand extends Item implements IWorkbenchItem, ISpellCastingItem, // Upgrades wand if necessary. Damage is copied, preserving remaining durability, // and also the entire NBT tag compound. - if(upgrade.getItem() == WizardryItems.arcane_tome){ + if(upgrade.getItem() instanceof ItemArcaneTome){ - Tier tier = Tier.values()[upgrade.getItemDamage()]; + Tier tier = ((ItemArcaneTome) upgrade.getItem()).getTier(); // Checks the wand upgrade is for the tier above the wand's tier, and that either the wand has enough // progression or the player is in creative mode. diff --git a/src/main/java/electroblob/wizardry/registry/WizardryItems.java b/src/main/java/electroblob/wizardry/registry/WizardryItems.java index f80216a4..dab2706d 100644 --- a/src/main/java/electroblob/wizardry/registry/WizardryItems.java +++ b/src/main/java/electroblob/wizardry/registry/WizardryItems.java @@ -93,7 +93,9 @@ public final class WizardryItems { public static final Item crystal_shard = placeholder(); public static final Item wizard_handbook = placeholder(); - public static final Item arcane_tome = placeholder(); + public static final Item arcane_tome_apprentice = placeholder(); + public static final Item arcane_tome_advanced = placeholder(); + public static final Item arcane_tome_master = placeholder(); public static final Item spell_book = placeholder(); public static final Item scroll = placeholder(); public static final Item ruined_spell_book = placeholder(); @@ -595,7 +597,9 @@ public final class WizardryItems { registerItem(registry, "grand_crystal", new Item().setCreativeTab(WizardryTabs.WIZARDRY)); registerItem(registry, "wizard_handbook", new ItemWizardHandbook(), true); - registerItem(registry, "arcane_tome", new ItemArcaneTome()); + registerItem(registry, "arcane_tome_apprentice", new ItemArcaneTome(EnumRarity.UNCOMMON, Tier.APPRENTICE)); + registerItem(registry, "arcane_tome_advanced", new ItemArcaneTome(EnumRarity.RARE, Tier.ADVANCED)); + registerItem(registry, "arcane_tome_master", new ItemArcaneTome(EnumRarity.EPIC, Tier.MASTER)); registerItem(registry, "spell_book", new ItemSpellBook(), true); registerItem(registry, "scroll", new ItemScroll()); registerItem(registry, "ruined_spell_book", new Item().setCreativeTab(WizardryTabs.WIZARDRY).setMaxStackSize(16)); diff --git a/src/main/java/electroblob/wizardry/tileentity/TileEntityArcaneWorkbench.java b/src/main/java/electroblob/wizardry/tileentity/TileEntityArcaneWorkbench.java index 841728d2..b4a9d5b3 100644 --- a/src/main/java/electroblob/wizardry/tileentity/TileEntityArcaneWorkbench.java +++ b/src/main/java/electroblob/wizardry/tileentity/TileEntityArcaneWorkbench.java @@ -188,7 +188,9 @@ public class TileEntityArcaneWorkbench extends TileEntity implements IInventory, }else if(slotNumber == ContainerArcaneWorkbench.UPGRADE_SLOT){ Set upgrades = new HashSet<>(WandHelper.getSpecialUpgrades()); - upgrades.add(WizardryItems.arcane_tome); + upgrades.add(WizardryItems.arcane_tome_apprentice); + upgrades.add(WizardryItems.arcane_tome_advanced); + upgrades.add(WizardryItems.arcane_tome_master); upgrades.add(WizardryItems.resplendent_thread); upgrades.add(WizardryItems.crystal_silver_plating); upgrades.add(WizardryItems.ethereal_crystalweave); diff --git a/src/main/resources/assets/ebwizardry/lang/en_us.lang b/src/main/resources/assets/ebwizardry/lang/en_us.lang index 56823c02..81d763f9 100644 --- a/src/main/resources/assets/ebwizardry/lang/en_us.lang +++ b/src/main/resources/assets/ebwizardry/lang/en_us.lang @@ -77,7 +77,9 @@ item.ebwizardry\:spell_book.apply_to_wizard=Replaced %1$s's spell %2$s with %3$s item.ebwizardry\:ruined_spell_book.name=Ruined Spell Book item.ebwizardry\:ruined_spell_book.desc=The pages of this tattered spell book are too damaged to be read properly, but somehow, you feel there is still magic left within it - if only it could be restored... -item.ebwizardry\:arcane_tome.name=Tome of Arcana +item.ebwizardry\:arcane_tome_apprentice.name=Tome of Arcana +item.ebwizardry\:arcane_tome_advanced.name=Tome of Arcana +item.ebwizardry\:arcane_tome_master.name=Tome of Arcana item.ebwizardry\:arcane_tome.desc=Upgrades any %1$s wand with sufficient progression to %2$s tier item.ebwizardry\:wizard_handbook.name=The Wizard's Handbook diff --git a/src/main/resources/assets/ebwizardry/loot_tables/subsets/arcane_tomes.json b/src/main/resources/assets/ebwizardry/loot_tables/subsets/arcane_tomes.json index c9629c35..b1eb2764 100644 --- a/src/main/resources/assets/ebwizardry/loot_tables/subsets/arcane_tomes.json +++ b/src/main/resources/assets/ebwizardry/loot_tables/subsets/arcane_tomes.json @@ -6,39 +6,18 @@ "entries": [ { "type": "item", - "entryName": "apprentice_tome", - "name": "ebwizardry:arcane_tome", - "weight": 4, - "functions": [ - { - "function": "set_data", - "data": 1 - } - ] + "name": "ebwizardry:arcane_tome_apprentice", + "weight": 4 }, { "type": "item", - "entryName": "advanced_tome", - "name": "ebwizardry:arcane_tome", - "weight": 2, - "functions": [ - { - "function": "set_data", - "data": 2 - } - ] + "name": "ebwizardry:arcane_tome_advanced", + "weight": 2 }, { "type": "item", - "entryName": "master_tome", - "name": "ebwizardry:arcane_tome", - "weight": 1, - "functions": [ - { - "function": "set_data", - "data": 3 - } - ] + "name": "ebwizardry:arcane_tome_master", + "weight": 1 } ] } diff --git a/src/main/resources/assets/ebwizardry/models/item/arcane_tome_advanced.json b/src/main/resources/assets/ebwizardry/models/item/arcane_tome_advanced.json new file mode 100644 index 00000000..fada253b --- /dev/null +++ b/src/main/resources/assets/ebwizardry/models/item/arcane_tome_advanced.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "ebwizardry:items/arcane_tome" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/ebwizardry/models/item/arcane_tome_apprentice.json b/src/main/resources/assets/ebwizardry/models/item/arcane_tome_apprentice.json new file mode 100644 index 00000000..fada253b --- /dev/null +++ b/src/main/resources/assets/ebwizardry/models/item/arcane_tome_apprentice.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "ebwizardry:items/arcane_tome" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/ebwizardry/models/item/arcane_tome_master.json b/src/main/resources/assets/ebwizardry/models/item/arcane_tome_master.json new file mode 100644 index 00000000..fada253b --- /dev/null +++ b/src/main/resources/assets/ebwizardry/models/item/arcane_tome_master.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "ebwizardry:items/arcane_tome" + } +} \ No newline at end of file