From ba0b24d231b151a7477c5b7b81317f9c46016cb0 Mon Sep 17 00:00:00 2001 From: Nick Date: Tue, 15 Mar 2016 22:48:01 -0700 Subject: [PATCH] Begin new model system Includes some examples for both ways. --- .../bloodmagic/client/IMeshProvider.java | 19 +++++++++ .../bloodmagic/client/IVariantProvider.java | 10 +++++ .../mesh/CustomMeshDefinitionActivatable.java | 10 ++--- .../bloodmagic/item/ItemBoundAxe.java | 24 ++++++++++- .../bloodmagic/item/ItemBoundPickaxe.java | 24 ++++++++++- .../bloodmagic/item/ItemBoundShovel.java | 24 ++++++++++- .../bloodmagic/item/ItemBoundSword.java | 22 +++++++++- .../WayofTime/bloodmagic/item/ItemSlate.java | 17 +++++++- .../item/soul/ItemSentientSword.java | 41 +++++++++++++++---- .../bloodmagic/proxy/ClientProxy.java | 31 +++++++++++++- .../bloodmagic/proxy/CommonProxy.java | 10 +++++ .../bloodmagic/registry/ModBlocks.java | 19 ++++----- .../bloodmagic/registry/ModItems.java | 17 ++++---- .../blockstates/item/ItemBoundAxe.json | 21 ++++++++++ .../blockstates/item/ItemBoundPickaxe.json | 21 ++++++++++ .../blockstates/item/ItemBoundShovel.json | 21 ++++++++++ .../blockstates/item/ItemBoundSword.json | 21 ++++++++++ .../blockstates/item/ItemSentientSword.json | 21 ++++++++++ .../bloodmagic/models/item/ItemBoundAxe0.json | 6 --- .../bloodmagic/models/item/ItemBoundAxe1.json | 6 --- .../models/item/ItemBoundPickaxe0.json | 6 --- .../models/item/ItemBoundPickaxe1.json | 6 --- .../models/item/ItemBoundShovel0.json | 6 --- .../models/item/ItemBoundShovel1.json | 6 --- .../models/item/ItemBoundSword0.json | 6 --- .../models/item/ItemBoundSword1.json | 6 --- .../models/item/ItemSentientSword0.json | 7 ---- .../models/item/ItemSentientSword1.json | 8 ---- 28 files changed, 332 insertions(+), 104 deletions(-) create mode 100644 src/main/java/WayofTime/bloodmagic/client/IMeshProvider.java create mode 100644 src/main/java/WayofTime/bloodmagic/client/IVariantProvider.java create mode 100644 src/main/resources/assets/bloodmagic/blockstates/item/ItemBoundAxe.json create mode 100644 src/main/resources/assets/bloodmagic/blockstates/item/ItemBoundPickaxe.json create mode 100644 src/main/resources/assets/bloodmagic/blockstates/item/ItemBoundShovel.json create mode 100644 src/main/resources/assets/bloodmagic/blockstates/item/ItemBoundSword.json create mode 100644 src/main/resources/assets/bloodmagic/blockstates/item/ItemSentientSword.json delete mode 100644 src/main/resources/assets/bloodmagic/models/item/ItemBoundAxe0.json delete mode 100644 src/main/resources/assets/bloodmagic/models/item/ItemBoundAxe1.json delete mode 100644 src/main/resources/assets/bloodmagic/models/item/ItemBoundPickaxe0.json delete mode 100644 src/main/resources/assets/bloodmagic/models/item/ItemBoundPickaxe1.json delete mode 100644 src/main/resources/assets/bloodmagic/models/item/ItemBoundShovel0.json delete mode 100644 src/main/resources/assets/bloodmagic/models/item/ItemBoundShovel1.json delete mode 100644 src/main/resources/assets/bloodmagic/models/item/ItemBoundSword0.json delete mode 100644 src/main/resources/assets/bloodmagic/models/item/ItemBoundSword1.json delete mode 100644 src/main/resources/assets/bloodmagic/models/item/ItemSentientSword0.json delete mode 100644 src/main/resources/assets/bloodmagic/models/item/ItemSentientSword1.json diff --git a/src/main/java/WayofTime/bloodmagic/client/IMeshProvider.java b/src/main/java/WayofTime/bloodmagic/client/IMeshProvider.java new file mode 100644 index 00000000..85365453 --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/client/IMeshProvider.java @@ -0,0 +1,19 @@ +package WayofTime.bloodmagic.client; + +import net.minecraft.client.renderer.ItemMeshDefinition; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import java.util.List; + +/** + * Provides a custom {@link ItemMeshDefinition} for automatic registration of + * renders. + */ +public interface IMeshProvider { + + @SideOnly(Side.CLIENT) + ItemMeshDefinition getMeshDefinition(); + + List getVariants(); +} diff --git a/src/main/java/WayofTime/bloodmagic/client/IVariantProvider.java b/src/main/java/WayofTime/bloodmagic/client/IVariantProvider.java new file mode 100644 index 00000000..a33985c3 --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/client/IVariantProvider.java @@ -0,0 +1,10 @@ +package WayofTime.bloodmagic.client; + +import org.apache.commons.lang3.tuple.Pair; + +import java.util.List; + +public interface IVariantProvider { + + List> getVariants(); +} diff --git a/src/main/java/WayofTime/bloodmagic/client/mesh/CustomMeshDefinitionActivatable.java b/src/main/java/WayofTime/bloodmagic/client/mesh/CustomMeshDefinitionActivatable.java index a9523b2f..d02762aa 100644 --- a/src/main/java/WayofTime/bloodmagic/client/mesh/CustomMeshDefinitionActivatable.java +++ b/src/main/java/WayofTime/bloodmagic/client/mesh/CustomMeshDefinitionActivatable.java @@ -5,6 +5,7 @@ import net.minecraft.client.resources.model.ModelResourceLocation; import net.minecraft.item.ItemStack; import WayofTime.bloodmagic.api.Constants; import WayofTime.bloodmagic.api.iface.IActivatable; +import net.minecraft.util.ResourceLocation; public class CustomMeshDefinitionActivatable implements ItemMeshDefinition { @@ -18,12 +19,9 @@ public class CustomMeshDefinitionActivatable implements ItemMeshDefinition public ModelResourceLocation getModelLocation(ItemStack stack) { if (stack != null && stack.getItem() instanceof IActivatable) - { - if (!((IActivatable) stack.getItem()).getActivated(stack)) - return new ModelResourceLocation(Constants.Mod.DOMAIN + name + "0", "inventory"); + if (((IActivatable) stack.getItem()).getActivated(stack)) + return new ModelResourceLocation(new ResourceLocation(Constants.Mod.MODID, "item/" + name), "active=true"); - return new ModelResourceLocation(Constants.Mod.DOMAIN + name + "1", "inventory"); - } - return null; + return new ModelResourceLocation(new ResourceLocation(Constants.Mod.MODID, "item/" + name), "active=false"); } } diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemBoundAxe.java b/src/main/java/WayofTime/bloodmagic/item/ItemBoundAxe.java index b09f3e3a..91be4147 100644 --- a/src/main/java/WayofTime/bloodmagic/item/ItemBoundAxe.java +++ b/src/main/java/WayofTime/bloodmagic/item/ItemBoundAxe.java @@ -1,12 +1,16 @@ package WayofTime.bloodmagic.item; +import java.util.ArrayList; import java.util.List; import java.util.Set; import WayofTime.bloodmagic.api.util.helper.NetworkHelper; +import WayofTime.bloodmagic.client.IMeshProvider; +import WayofTime.bloodmagic.client.mesh.CustomMeshDefinitionActivatable; import net.minecraft.block.Block; import net.minecraft.block.BlockLeavesBase; import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.ItemMeshDefinition; import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.SharedMonsterAttributes; @@ -26,8 +30,10 @@ import WayofTime.bloodmagic.api.ItemStackWrapper; import com.google.common.collect.HashMultiset; import com.google.common.collect.Multimap; import com.google.common.collect.Sets; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; -public class ItemBoundAxe extends ItemBoundTool +public class ItemBoundAxe extends ItemBoundTool implements IMeshProvider { private static final Set EFFECTIVE_ON = Sets.newHashSet(Blocks.planks, Blocks.bookshelf, Blocks.log, Blocks.log2, Blocks.chest, Blocks.pumpkin, Blocks.lit_pumpkin, Blocks.melon_block, Blocks.ladder); @@ -115,4 +121,20 @@ public class ItemBoundAxe extends ItemBoundTool multimap.put(SharedMonsterAttributes.attackDamage.getAttributeUnlocalizedName(), new AttributeModifier(itemModifierUUID, "Weapon modifier", 7, 0)); return multimap; } + + @Override + @SideOnly(Side.CLIENT) + public ItemMeshDefinition getMeshDefinition() + { + return new CustomMeshDefinitionActivatable("ItemBoundAxe"); + } + + @Override + public List getVariants() + { + List ret = new ArrayList(); + ret.add("active=true"); + ret.add("active=false"); + return ret; + } } diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemBoundPickaxe.java b/src/main/java/WayofTime/bloodmagic/item/ItemBoundPickaxe.java index 930bc8ad..4c1686dc 100644 --- a/src/main/java/WayofTime/bloodmagic/item/ItemBoundPickaxe.java +++ b/src/main/java/WayofTime/bloodmagic/item/ItemBoundPickaxe.java @@ -1,11 +1,15 @@ package WayofTime.bloodmagic.item; +import java.util.ArrayList; import java.util.List; import java.util.Set; import WayofTime.bloodmagic.api.util.helper.NetworkHelper; +import WayofTime.bloodmagic.client.IMeshProvider; +import WayofTime.bloodmagic.client.mesh.CustomMeshDefinitionActivatable; import net.minecraft.block.Block; import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.ItemMeshDefinition; import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.SharedMonsterAttributes; @@ -25,8 +29,10 @@ import WayofTime.bloodmagic.api.ItemStackWrapper; import com.google.common.collect.HashMultiset; import com.google.common.collect.Multimap; import com.google.common.collect.Sets; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; -public class ItemBoundPickaxe extends ItemBoundTool +public class ItemBoundPickaxe extends ItemBoundTool implements IMeshProvider { private static final Set EFFECTIVE_ON = Sets.newHashSet(Blocks.activator_rail, Blocks.coal_ore, Blocks.cobblestone, Blocks.detector_rail, Blocks.diamond_block, Blocks.diamond_ore, Blocks.double_stone_slab, Blocks.golden_rail, Blocks.gold_block, Blocks.gold_ore, Blocks.ice, Blocks.iron_block, Blocks.iron_ore, Blocks.lapis_block, Blocks.lapis_ore, Blocks.lit_redstone_ore, Blocks.mossy_cobblestone, Blocks.netherrack, Blocks.packed_ice, Blocks.rail, Blocks.redstone_ore, Blocks.sandstone, Blocks.red_sandstone, Blocks.stone, Blocks.stone_slab); @@ -129,4 +135,20 @@ public class ItemBoundPickaxe extends ItemBoundTool multimap.put(SharedMonsterAttributes.attackDamage.getAttributeUnlocalizedName(), new AttributeModifier(itemModifierUUID, "Weapon modifier", 5, 0)); return multimap; } + + @Override + @SideOnly(Side.CLIENT) + public ItemMeshDefinition getMeshDefinition() + { + return new CustomMeshDefinitionActivatable("ItemBoundPickaxe"); + } + + @Override + public List getVariants() + { + List ret = new ArrayList(); + ret.add("active=true"); + ret.add("active=false"); + return ret; + } } diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemBoundShovel.java b/src/main/java/WayofTime/bloodmagic/item/ItemBoundShovel.java index d5956111..c54f418a 100644 --- a/src/main/java/WayofTime/bloodmagic/item/ItemBoundShovel.java +++ b/src/main/java/WayofTime/bloodmagic/item/ItemBoundShovel.java @@ -1,10 +1,14 @@ package WayofTime.bloodmagic.item; +import java.util.ArrayList; import java.util.List; import java.util.Set; import WayofTime.bloodmagic.api.util.helper.NetworkHelper; +import WayofTime.bloodmagic.client.IMeshProvider; +import WayofTime.bloodmagic.client.mesh.CustomMeshDefinitionActivatable; import net.minecraft.block.Block; +import net.minecraft.client.renderer.ItemMeshDefinition; import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.SharedMonsterAttributes; @@ -24,8 +28,10 @@ import WayofTime.bloodmagic.api.ItemStackWrapper; import com.google.common.collect.HashMultiset; import com.google.common.collect.Multimap; import com.google.common.collect.Sets; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; -public class ItemBoundShovel extends ItemBoundTool +public class ItemBoundShovel extends ItemBoundTool implements IMeshProvider { private static final Set EFFECTIVE_ON = Sets.newHashSet(Blocks.clay, Blocks.dirt, Blocks.farmland, Blocks.grass, Blocks.gravel, Blocks.mycelium, Blocks.sand, Blocks.snow, Blocks.snow_layer, Blocks.soul_sand); @@ -113,4 +119,20 @@ public class ItemBoundShovel extends ItemBoundTool multimap.put(SharedMonsterAttributes.attackDamage.getAttributeUnlocalizedName(), new AttributeModifier(itemModifierUUID, "Weapon modifier", 1, 0)); return multimap; } + + @Override + @SideOnly(Side.CLIENT) + public ItemMeshDefinition getMeshDefinition() + { + return new CustomMeshDefinitionActivatable("ItemBoundShovel"); + } + + @Override + public List getVariants() + { + List ret = new ArrayList(); + ret.add("active=true"); + ret.add("active=false"); + return ret; + } } diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemBoundSword.java b/src/main/java/WayofTime/bloodmagic/item/ItemBoundSword.java index 21e34a48..add53b53 100644 --- a/src/main/java/WayofTime/bloodmagic/item/ItemBoundSword.java +++ b/src/main/java/WayofTime/bloodmagic/item/ItemBoundSword.java @@ -1,8 +1,12 @@ package WayofTime.bloodmagic.item; +import java.util.ArrayList; import java.util.List; +import WayofTime.bloodmagic.client.IMeshProvider; +import WayofTime.bloodmagic.client.mesh.CustomMeshDefinitionActivatable; import net.minecraft.block.Block; +import net.minecraft.client.renderer.ItemMeshDefinition; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.SharedMonsterAttributes; import net.minecraft.entity.ai.attributes.AttributeModifier; @@ -27,7 +31,7 @@ import com.google.common.base.Strings; import com.google.common.collect.HashMultimap; import com.google.common.collect.Multimap; -public class ItemBoundSword extends ItemSword implements IBindable, IActivatable +public class ItemBoundSword extends ItemSword implements IBindable, IActivatable, IMeshProvider { private float attackDamage; @@ -116,6 +120,22 @@ public class ItemBoundSword extends ItemSword implements IBindable, IActivatable return stack; } + @Override + @SideOnly(Side.CLIENT) + public ItemMeshDefinition getMeshDefinition() + { + return new CustomMeshDefinitionActivatable("ItemBoundSword"); + } + + @Override + public List getVariants() + { + List ret = new ArrayList(); + ret.add("active=true"); + ret.add("active=false"); + return ret; + } + // IBindable @Override diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemSlate.java b/src/main/java/WayofTime/bloodmagic/item/ItemSlate.java index ab877fea..bee9f480 100644 --- a/src/main/java/WayofTime/bloodmagic/item/ItemSlate.java +++ b/src/main/java/WayofTime/bloodmagic/item/ItemSlate.java @@ -1,8 +1,10 @@ package WayofTime.bloodmagic.item; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import WayofTime.bloodmagic.client.IVariantProvider; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; @@ -12,8 +14,10 @@ import net.minecraftforge.fml.relauncher.SideOnly; import WayofTime.bloodmagic.BloodMagic; import WayofTime.bloodmagic.api.Constants; import WayofTime.bloodmagic.util.helper.TextHelper; +import org.apache.commons.lang3.tuple.ImmutablePair; +import org.apache.commons.lang3.tuple.Pair; -public class ItemSlate extends Item +public class ItemSlate extends Item implements IVariantProvider { public String[] names = { "blank", "reinforced", "imbued", "demonic", "ethereal" }; @@ -47,4 +51,15 @@ public class ItemSlate extends Item { list.addAll(Arrays.asList(TextHelper.cutLongString(TextHelper.localizeEffect("tooltip.BloodMagic.slate.desc")))); } + + @Override + public List> getVariants() { + List> ret = new ArrayList>(); + ret.add(new ImmutablePair(0, "type=blank")); + ret.add(new ImmutablePair(1, "type=reinforced")); + ret.add(new ImmutablePair(2, "type=imbued")); + ret.add(new ImmutablePair(3, "type=demonic")); + ret.add(new ImmutablePair(4, "type=ethereal")); + return ret; + } } diff --git a/src/main/java/WayofTime/bloodmagic/item/soul/ItemSentientSword.java b/src/main/java/WayofTime/bloodmagic/item/soul/ItemSentientSword.java index 1b3aa404..8089f8f7 100644 --- a/src/main/java/WayofTime/bloodmagic/item/soul/ItemSentientSword.java +++ b/src/main/java/WayofTime/bloodmagic/item/soul/ItemSentientSword.java @@ -4,6 +4,10 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import WayofTime.bloodmagic.client.IMeshProvider; +import WayofTime.bloodmagic.client.mesh.CustomMeshDefinitionActivatable; +import net.minecraft.client.renderer.ItemMeshDefinition; +import net.minecraft.client.resources.model.ModelResourceLocation; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.SharedMonsterAttributes; @@ -13,6 +17,7 @@ import net.minecraft.item.EnumAction; import net.minecraft.item.ItemStack; import net.minecraft.item.ItemSword; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.ResourceLocation; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; @@ -30,7 +35,7 @@ import WayofTime.bloodmagic.util.helper.TextHelper; import com.google.common.collect.HashMultimap; import com.google.common.collect.Multimap; -public class ItemSentientSword extends ItemSword implements IDemonWillWeapon, IActivatable +public class ItemSentientSword extends ItemSword implements IDemonWillWeapon, IActivatable, IMeshProvider { public int[] soulBracket = new int[] { 16, 60, 200, 400 }; public double[] damageAdded = new double[] { 1, 1.5, 2, 2.5 }; @@ -142,12 +147,30 @@ public class ItemSentientSword extends ItemSword implements IDemonWillWeapon, IA return super.onLeftClickEntity(stack, player, entity); } + @Override + @SideOnly(Side.CLIENT) + public ItemMeshDefinition getMeshDefinition() + { + return new CustomMeshDefinitionActivatable("ItemSentientSword"); + } + + @Override + public List getVariants() + { + List ret = new ArrayList(); + ret.add("active=true"); + ret.add("active=false"); + return ret; + } + + @Override public boolean getActivated(ItemStack stack) { NBTHelper.checkNBT(stack); return stack.getTagCompound().getBoolean(Constants.NBT.ACTIVATED); } + @Override public ItemStack setActivatedState(ItemStack stack, boolean activated) { NBTHelper.checkNBT(stack); @@ -178,6 +201,14 @@ public class ItemSentientSword extends ItemSword implements IDemonWillWeapon, IA return soulList; } + @Override + public Multimap getAttributeModifiers(ItemStack stack) + { + Multimap multimap = HashMultimap.create(); + multimap.put(SharedMonsterAttributes.attackDamage.getAttributeUnlocalizedName(), new AttributeModifier(itemModifierUUID, "Weapon modifier", getActivated(stack) ? getDamageOfActivatedSword(stack) : 2, 0)); + return multimap; + } + public double getDamageOfActivatedSword(ItemStack stack) { NBTHelper.checkNBT(stack); @@ -245,12 +276,4 @@ public class ItemSentientSword extends ItemSword implements IDemonWillWeapon, IA tag.setDouble(Constants.NBT.SOUL_SWORD_DROP, drop); } - - @Override - public Multimap getAttributeModifiers(ItemStack stack) - { - Multimap multimap = HashMultimap.create(); - multimap.put(SharedMonsterAttributes.attackDamage.getAttributeUnlocalizedName(), new AttributeModifier(itemModifierUUID, "Weapon modifier", getActivated(stack) ? getDamageOfActivatedSword(stack) : 2, 0)); - return multimap; - } } diff --git a/src/main/java/WayofTime/bloodmagic/proxy/ClientProxy.java b/src/main/java/WayofTime/bloodmagic/proxy/ClientProxy.java index 45805212..ae8ad017 100644 --- a/src/main/java/WayofTime/bloodmagic/proxy/ClientProxy.java +++ b/src/main/java/WayofTime/bloodmagic/proxy/ClientProxy.java @@ -1,5 +1,11 @@ package WayofTime.bloodmagic.proxy; +import WayofTime.bloodmagic.client.IMeshProvider; +import WayofTime.bloodmagic.client.IVariantProvider; +import net.minecraft.block.Block; +import net.minecraft.client.resources.model.ModelResourceLocation; +import net.minecraft.item.Item; +import net.minecraft.util.ResourceLocation; import net.minecraftforge.client.model.ModelLoader; import net.minecraftforge.client.model.obj.OBJLoader; import net.minecraftforge.common.MinecraftForge; @@ -27,6 +33,7 @@ import WayofTime.bloodmagic.tile.routing.TileRoutingNode; import WayofTime.bloodmagic.util.handler.ClientEventHandler; import WayofTime.bloodmagic.util.helper.InventoryRenderHelper; import WayofTime.bloodmagic.util.helper.InventoryRenderHelperV2; +import org.apache.commons.lang3.tuple.Pair; public class ClientProxy extends CommonProxy { @@ -71,7 +78,6 @@ public class ClientProxy extends CommonProxy RenderingRegistry.registerEntityRenderingHandler(EntitySoulSnare.class, new SoulSnareRenderFactory()); RenderingRegistry.registerEntityRenderingHandler(EntitySentientArrow.class, new SentientArrowRenderFactory()); RenderingRegistry.registerEntityRenderingHandler(EntityBloodLight.class, new BloodLightRenderFactory()); - ModelLoader.setCustomMeshDefinition(ModItems.sentientSword, new CustomMeshDefinitionActivatable("ItemSentientSword")); ModelLoader.setCustomMeshDefinition(ModItems.boundShovel, new CustomMeshDefinitionActivatable("ItemBoundShovel")); ModelLoader.setCustomMeshDefinition(ModItems.boundAxe, new CustomMeshDefinitionActivatable("ItemBoundAxe")); ModelLoader.setCustomMeshDefinition(ModItems.boundPickaxe, new CustomMeshDefinitionActivatable("ItemBoundPickaxe")); @@ -91,4 +97,27 @@ public class ClientProxy extends CommonProxy { } + + @Override + public void tryHandleBlockModel(Block block, String name) { + if (block instanceof IVariantProvider) { + IVariantProvider variantProvider = (IVariantProvider) block; + for (Pair variant : variantProvider.getVariants()) + ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(block), variant.getLeft(), new ModelResourceLocation(new ResourceLocation(Constants.Mod.MODID, name), variant.getRight())); + } + } + + @Override + public void tryHandleItemModel(Item item, String name) { + if (item instanceof IMeshProvider) { + IMeshProvider meshProvider = (IMeshProvider) item; + ModelLoader.setCustomMeshDefinition(item, meshProvider.getMeshDefinition()); + for (String variant : meshProvider.getVariants()) + ModelLoader.registerItemVariants(item, new ModelResourceLocation(new ResourceLocation(Constants.Mod.MODID, "item/" + name), variant)); + } else if (item instanceof IVariantProvider) { + IVariantProvider variantProvider = (IVariantProvider) item; + for (Pair variant : variantProvider.getVariants()) + ModelLoader.setCustomModelResourceLocation(item, variant.getLeft(), new ModelResourceLocation(new ResourceLocation(Constants.Mod.MODID, "item/" + name), variant.getRight())); + } + } } diff --git a/src/main/java/WayofTime/bloodmagic/proxy/CommonProxy.java b/src/main/java/WayofTime/bloodmagic/proxy/CommonProxy.java index d643910c..9189c2d5 100644 --- a/src/main/java/WayofTime/bloodmagic/proxy/CommonProxy.java +++ b/src/main/java/WayofTime/bloodmagic/proxy/CommonProxy.java @@ -1,5 +1,7 @@ package WayofTime.bloodmagic.proxy; +import net.minecraft.block.Block; +import net.minecraft.item.Item; import net.minecraft.world.World; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.common.capabilities.CapabilityManager; @@ -50,4 +52,12 @@ public class CommonProxy // TODO Auto-generated method stub return null; } + + public void tryHandleBlockModel(Block block, String name) { + // NO-OP + } + + public void tryHandleItemModel(Item item, String name) { + // NO-OP + } } diff --git a/src/main/java/WayofTime/bloodmagic/registry/ModBlocks.java b/src/main/java/WayofTime/bloodmagic/registry/ModBlocks.java index 2e7ba371..fdc91269 100644 --- a/src/main/java/WayofTime/bloodmagic/registry/ModBlocks.java +++ b/src/main/java/WayofTime/bloodmagic/registry/ModBlocks.java @@ -2,7 +2,6 @@ package WayofTime.bloodmagic.registry; import WayofTime.bloodmagic.item.block.*; import net.minecraft.block.Block; -import net.minecraft.item.Item; import net.minecraft.item.ItemBlock; import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fml.common.registry.GameRegistry; @@ -233,16 +232,11 @@ public class ModBlocks return block; } - if (!ConfigHandler.blockBlacklist.contains(block.getRegistryName().split(":")[1])) + String blockName = block.getRegistryName().split(":")[1]; + if (!ConfigHandler.blockBlacklist.contains(blockName)) { GameRegistry.registerBlock(block, itemBlock); - - return block; - } - - private static Block registerBlock(Block block, String name) - { - if (!ConfigHandler.blockBlacklist.contains(name)) - GameRegistry.registerBlock(block, name); + BloodMagic.proxy.tryHandleBlockModel(block, blockName); + } return block; } @@ -255,8 +249,11 @@ public class ModBlocks return null; } - if (!ConfigHandler.blockBlacklist.contains(block.getRegistryName().split(":")[1])) + String blockName = block.getRegistryName().split(":")[1]; + if (!ConfigHandler.blockBlacklist.contains(blockName)) { GameRegistry.registerBlock(block); + BloodMagic.proxy.tryHandleBlockModel(block, blockName); + } return block; } diff --git a/src/main/java/WayofTime/bloodmagic/registry/ModItems.java b/src/main/java/WayofTime/bloodmagic/registry/ModItems.java index b617dc30..4d5318c2 100644 --- a/src/main/java/WayofTime/bloodmagic/registry/ModItems.java +++ b/src/main/java/WayofTime/bloodmagic/registry/ModItems.java @@ -259,12 +259,6 @@ public class ModItems renderHelperV2.registerRender(soulGem, 4, "grand"); renderHelperV2.registerRender(soulSnare, "soulSnare"); - renderHelperV2.registerRender(slate, 0, "blank"); - renderHelperV2.registerRender(slate, 1, "reinforced"); - renderHelperV2.registerRender(slate, 2, "imbued"); - renderHelperV2.registerRender(slate, 3, "demonic"); - renderHelperV2.registerRender(slate, 4, "ethereal"); - renderHelperV2.registerRender(inscriptionTool, 1, EnumRuneType.WATER.name()); renderHelperV2.registerRender(inscriptionTool, 2, EnumRuneType.FIRE.name()); renderHelperV2.registerRender(inscriptionTool, 3, EnumRuneType.EARTH.name()); @@ -379,8 +373,6 @@ public class ModItems renderHelper.itemRender(sigilTeleposition); renderHelper.itemRender(sigilTransposition); - renderHelper.customItemRender(sentientSword, 0); - renderHelper.customItemRender(sentientSword, 1); renderHelper.itemRender(sentientBow, 0, "ItemSentientBow"); renderHelper.itemRender(sentientBow, 1, "ItemSentientBow_pulling_0"); renderHelper.itemRender(sentientBow, 2, "ItemSentientBow_pulling_1"); @@ -393,7 +385,10 @@ public class ModItems private static Item registerItem(Item item, String name) { if (!ConfigHandler.itemBlacklist.contains(name)) + { GameRegistry.registerItem(item, name); + BloodMagic.proxy.tryHandleItemModel(item, name); + } return item; } @@ -406,8 +401,12 @@ public class ModItems return item; } - if (!ConfigHandler.itemBlacklist.contains(item.getRegistryName().split(":")[1])) + String itemName = item.getRegistryName().split(":")[1]; + if (!ConfigHandler.itemBlacklist.contains(itemName)) + { GameRegistry.registerItem(item); + BloodMagic.proxy.tryHandleItemModel(item, itemName); + } return item; } diff --git a/src/main/resources/assets/bloodmagic/blockstates/item/ItemBoundAxe.json b/src/main/resources/assets/bloodmagic/blockstates/item/ItemBoundAxe.json new file mode 100644 index 00000000..dc27b28a --- /dev/null +++ b/src/main/resources/assets/bloodmagic/blockstates/item/ItemBoundAxe.json @@ -0,0 +1,21 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "builtin/generated", + "transform": "forge:default-tool" + }, + "variants": { + "active": { + "true": { + "textures": { + "layer0": "bloodmagic:items/BoundAxe_activated" + } + }, + "false": { + "textures": { + "layer0": "bloodmagic:items/Item_deactivated" + } + } + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/item/ItemBoundPickaxe.json b/src/main/resources/assets/bloodmagic/blockstates/item/ItemBoundPickaxe.json new file mode 100644 index 00000000..6acaacca --- /dev/null +++ b/src/main/resources/assets/bloodmagic/blockstates/item/ItemBoundPickaxe.json @@ -0,0 +1,21 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "builtin/generated", + "transform": "forge:default-tool" + }, + "variants": { + "active": { + "true": { + "textures": { + "layer0": "bloodmagic:items/BoundPickaxe_activated" + } + }, + "false": { + "textures": { + "layer0": "bloodmagic:items/Item_deactivated" + } + } + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/item/ItemBoundShovel.json b/src/main/resources/assets/bloodmagic/blockstates/item/ItemBoundShovel.json new file mode 100644 index 00000000..adba2311 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/blockstates/item/ItemBoundShovel.json @@ -0,0 +1,21 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "builtin/generated", + "transform": "forge:default-tool" + }, + "variants": { + "active": { + "true": { + "textures": { + "layer0": "bloodmagic:items/BoundShovel_activated" + } + }, + "false": { + "textures": { + "layer0": "bloodmagic:items/Item_deactivated" + } + } + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/item/ItemBoundSword.json b/src/main/resources/assets/bloodmagic/blockstates/item/ItemBoundSword.json new file mode 100644 index 00000000..ae592f33 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/blockstates/item/ItemBoundSword.json @@ -0,0 +1,21 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "builtin/generated", + "transform": "forge:default-tool" + }, + "variants": { + "active": { + "true": { + "textures": { + "layer0": "bloodmagic:items/BoundSword_activated" + } + }, + "false": { + "textures": { + "layer0": "bloodmagic:items/Item_deactivated" + } + } + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/item/ItemSentientSword.json b/src/main/resources/assets/bloodmagic/blockstates/item/ItemSentientSword.json new file mode 100644 index 00000000..4ccb416e --- /dev/null +++ b/src/main/resources/assets/bloodmagic/blockstates/item/ItemSentientSword.json @@ -0,0 +1,21 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "builtin/generated", + "transform": "forge:default-tool" + }, + "variants": { + "active": { + "true": { + "textures": { + "layer0": "bloodmagic:items/SoulSword_activated" + } + }, + "false": { + "textures": { + "layer0": "bloodmagic:items/SoulSword_deactivated" + } + } + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/models/item/ItemBoundAxe0.json b/src/main/resources/assets/bloodmagic/models/item/ItemBoundAxe0.json deleted file mode 100644 index d1593fd1..00000000 --- a/src/main/resources/assets/bloodmagic/models/item/ItemBoundAxe0.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent":"bloodmagic:item/ItemToolBase", - "textures": { - "layer0":"bloodmagic:items/Item_deactivated" - } -} diff --git a/src/main/resources/assets/bloodmagic/models/item/ItemBoundAxe1.json b/src/main/resources/assets/bloodmagic/models/item/ItemBoundAxe1.json deleted file mode 100644 index 933a1d9f..00000000 --- a/src/main/resources/assets/bloodmagic/models/item/ItemBoundAxe1.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent":"bloodmagic:item/ItemToolBase", - "textures": { - "layer0":"bloodmagic:items/BoundAxe_activated" - } -} diff --git a/src/main/resources/assets/bloodmagic/models/item/ItemBoundPickaxe0.json b/src/main/resources/assets/bloodmagic/models/item/ItemBoundPickaxe0.json deleted file mode 100644 index d1593fd1..00000000 --- a/src/main/resources/assets/bloodmagic/models/item/ItemBoundPickaxe0.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent":"bloodmagic:item/ItemToolBase", - "textures": { - "layer0":"bloodmagic:items/Item_deactivated" - } -} diff --git a/src/main/resources/assets/bloodmagic/models/item/ItemBoundPickaxe1.json b/src/main/resources/assets/bloodmagic/models/item/ItemBoundPickaxe1.json deleted file mode 100644 index 1aab6553..00000000 --- a/src/main/resources/assets/bloodmagic/models/item/ItemBoundPickaxe1.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent":"bloodmagic:item/ItemToolBase", - "textures": { - "layer0":"bloodmagic:items/BoundPickaxe_activated" - } -} diff --git a/src/main/resources/assets/bloodmagic/models/item/ItemBoundShovel0.json b/src/main/resources/assets/bloodmagic/models/item/ItemBoundShovel0.json deleted file mode 100644 index d1593fd1..00000000 --- a/src/main/resources/assets/bloodmagic/models/item/ItemBoundShovel0.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent":"bloodmagic:item/ItemToolBase", - "textures": { - "layer0":"bloodmagic:items/Item_deactivated" - } -} diff --git a/src/main/resources/assets/bloodmagic/models/item/ItemBoundShovel1.json b/src/main/resources/assets/bloodmagic/models/item/ItemBoundShovel1.json deleted file mode 100644 index cce2b5d2..00000000 --- a/src/main/resources/assets/bloodmagic/models/item/ItemBoundShovel1.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent":"bloodmagic:item/ItemToolBase", - "textures": { - "layer0":"bloodmagic:items/BoundShovel_activated" - } -} diff --git a/src/main/resources/assets/bloodmagic/models/item/ItemBoundSword0.json b/src/main/resources/assets/bloodmagic/models/item/ItemBoundSword0.json deleted file mode 100644 index d1593fd1..00000000 --- a/src/main/resources/assets/bloodmagic/models/item/ItemBoundSword0.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent":"bloodmagic:item/ItemToolBase", - "textures": { - "layer0":"bloodmagic:items/Item_deactivated" - } -} diff --git a/src/main/resources/assets/bloodmagic/models/item/ItemBoundSword1.json b/src/main/resources/assets/bloodmagic/models/item/ItemBoundSword1.json deleted file mode 100644 index 9fc50a15..00000000 --- a/src/main/resources/assets/bloodmagic/models/item/ItemBoundSword1.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent":"bloodmagic:item/ItemToolBase", - "textures": { - "layer0":"bloodmagic:items/BoundSword_activated" - } -} diff --git a/src/main/resources/assets/bloodmagic/models/item/ItemSentientSword0.json b/src/main/resources/assets/bloodmagic/models/item/ItemSentientSword0.json deleted file mode 100644 index 3d8ac57a..00000000 --- a/src/main/resources/assets/bloodmagic/models/item/ItemSentientSword0.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent":"bloodmagic:item/ItemToolBase", - "textures": { - "layer0":"bloodmagic:items/SoulSword_deactivated" - } -} - diff --git a/src/main/resources/assets/bloodmagic/models/item/ItemSentientSword1.json b/src/main/resources/assets/bloodmagic/models/item/ItemSentientSword1.json deleted file mode 100644 index f148c811..00000000 --- a/src/main/resources/assets/bloodmagic/models/item/ItemSentientSword1.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent":"bloodmagic:item/ItemToolBase", - "textures": { - "layer0":"bloodmagic:items/SoulSword_activated" - } -} - -