Improved item model registration

- more generic item handling
- fix double item block registration
This commit is contained in:
Unknown 2019-04-27 13:18:38 +02:00 committed by unknown
parent f04782dd72
commit 3102520372
8 changed files with 58 additions and 25 deletions

View file

@ -3,13 +3,11 @@ package cr0s.warpdrive.block;
import cr0s.warpdrive.Commons; import cr0s.warpdrive.Commons;
import cr0s.warpdrive.WarpDrive; import cr0s.warpdrive.WarpDrive;
import cr0s.warpdrive.api.IBlockBase; import cr0s.warpdrive.api.IBlockBase;
import cr0s.warpdrive.client.ClientProxy;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.block.SoundType; import net.minecraft.block.SoundType;
import net.minecraft.block.material.Material; import net.minecraft.block.material.Material;
import net.minecraft.block.state.IBlockState; import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.EntityLivingBase;
import net.minecraft.item.Item;
import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemBlock;
import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumFacing;
import net.minecraft.util.EnumHand; import net.minecraft.util.EnumHand;
@ -55,8 +53,7 @@ public abstract class BlockAbstractBase extends Block implements IBlockBase {
@SideOnly(Side.CLIENT) @SideOnly(Side.CLIENT)
@Override @Override
public void modelInitialisation() { public void modelInitialisation() {
final Item item = Item.getItemFromBlock(this); // no operation
ClientProxy.modelInitialisation(item);
/* /*
// Force a single model through a custom state mapper // Force a single model through a custom state mapper

View file

@ -6,7 +6,6 @@ import cr0s.warpdrive.api.IBlockBase;
import cr0s.warpdrive.api.IBlockUpdateDetector; import cr0s.warpdrive.api.IBlockUpdateDetector;
import cr0s.warpdrive.api.IVideoChannel; import cr0s.warpdrive.api.IVideoChannel;
import cr0s.warpdrive.api.WarpDriveText; import cr0s.warpdrive.api.WarpDriveText;
import cr0s.warpdrive.client.ClientProxy;
import cr0s.warpdrive.config.WarpDriveConfig; import cr0s.warpdrive.config.WarpDriveConfig;
import cr0s.warpdrive.data.EnumComponentType; import cr0s.warpdrive.data.EnumComponentType;
import cr0s.warpdrive.data.EnumTier; import cr0s.warpdrive.data.EnumTier;
@ -81,8 +80,7 @@ public abstract class BlockAbstractContainer extends BlockContainer implements I
@SideOnly(Side.CLIENT) @SideOnly(Side.CLIENT)
@Override @Override
public void modelInitialisation() { public void modelInitialisation() {
final Item item = Item.getItemFromBlock(this); // no operation
ClientProxy.modelInitialisation(item);
} }
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")

View file

@ -13,6 +13,7 @@ import net.minecraft.block.state.BlockStateContainer;
import net.minecraft.block.state.IBlockState; import net.minecraft.block.state.IBlockState;
import net.minecraft.client.util.ITooltipFlag; import net.minecraft.client.util.ITooltipFlag;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumFacing;
import net.minecraft.util.EnumHand; import net.minecraft.util.EnumHand;
@ -67,6 +68,12 @@ public class BlockAbstractLamp extends BlockAbstractBase {
| (blockState.getValue(BlockProperties.FACING).getIndex()); | (blockState.getValue(BlockProperties.FACING).getIndex());
} }
@Nullable
@Override
public ItemBlock createItemBlock() {
return new ItemBlockLamp(this);
}
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
@SideOnly(Side.CLIENT) @SideOnly(Side.CLIENT)
@Override @Override

View file

@ -0,0 +1,30 @@
package cr0s.warpdrive.block.decoration;
import cr0s.warpdrive.block.ItemBlockAbstractBase;
import javax.annotation.Nonnull;
import net.minecraft.block.Block;
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
public class ItemBlockLamp extends ItemBlockAbstractBase {
public ItemBlockLamp(final Block block) {
super(block, true, false);
}
@Nonnull
@SideOnly(Side.CLIENT)
@Override
public ModelResourceLocation getModelResourceLocation(final ItemStack itemStack) {
final ResourceLocation resourceLocation = getRegistryName();
assert resourceLocation != null;
final String variant = "inventory";
return new ModelResourceLocation(resourceLocation, variant);
}
}

View file

@ -3,7 +3,6 @@ package cr0s.warpdrive.block.hull;
import cr0s.warpdrive.WarpDrive; import cr0s.warpdrive.WarpDrive;
import cr0s.warpdrive.api.IBlockBase; import cr0s.warpdrive.api.IBlockBase;
import cr0s.warpdrive.api.IDamageReceiver; import cr0s.warpdrive.api.IDamageReceiver;
import cr0s.warpdrive.client.ClientProxy;
import cr0s.warpdrive.config.WarpDriveConfig; import cr0s.warpdrive.config.WarpDriveConfig;
import cr0s.warpdrive.data.EnumTier; import cr0s.warpdrive.data.EnumTier;
import cr0s.warpdrive.data.Vector3; import cr0s.warpdrive.data.Vector3;
@ -16,7 +15,6 @@ import net.minecraft.block.BlockGlass;
import net.minecraft.block.SoundType; import net.minecraft.block.SoundType;
import net.minecraft.block.material.EnumPushReaction; import net.minecraft.block.material.EnumPushReaction;
import net.minecraft.block.material.Material; import net.minecraft.block.material.Material;
import net.minecraft.item.Item;
import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.block.state.IBlockState; import net.minecraft.block.state.IBlockState;
@ -84,8 +82,7 @@ public class BlockHullGlass extends BlockColored implements IBlockBase, IDamageR
@SideOnly(Side.CLIENT) @SideOnly(Side.CLIENT)
@Override @Override
public void modelInitialisation() { public void modelInitialisation() {
final Item item = Item.getItemFromBlock(this); // no operation
ClientProxy.modelInitialisation(item);
} }
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")

View file

@ -3,7 +3,6 @@ package cr0s.warpdrive.block.hull;
import cr0s.warpdrive.WarpDrive; import cr0s.warpdrive.WarpDrive;
import cr0s.warpdrive.api.IBlockBase; import cr0s.warpdrive.api.IBlockBase;
import cr0s.warpdrive.api.IDamageReceiver; import cr0s.warpdrive.api.IDamageReceiver;
import cr0s.warpdrive.client.ClientProxy;
import cr0s.warpdrive.config.WarpDriveConfig; import cr0s.warpdrive.config.WarpDriveConfig;
import cr0s.warpdrive.data.EnumTier; import cr0s.warpdrive.data.EnumTier;
import cr0s.warpdrive.data.Vector3; import cr0s.warpdrive.data.Vector3;
@ -25,7 +24,6 @@ import net.minecraft.block.state.IBlockState;
import net.minecraft.creativetab.CreativeTabs; import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.EntityLivingBase;
import net.minecraft.item.EnumDyeColor; import net.minecraft.item.EnumDyeColor;
import net.minecraft.item.Item;
import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.util.DamageSource; import net.minecraft.util.DamageSource;
@ -316,8 +314,7 @@ public class BlockHullSlab extends BlockSlab implements IBlockBase, IDamageRecei
@SideOnly(Side.CLIENT) @SideOnly(Side.CLIENT)
@Override @Override
public void modelInitialisation() { public void modelInitialisation() {
final Item item = Item.getItemFromBlock(this); // no operation
ClientProxy.modelInitialisation(item);
} }
@Override @Override

View file

@ -3,7 +3,6 @@ package cr0s.warpdrive.block.hull;
import cr0s.warpdrive.WarpDrive; import cr0s.warpdrive.WarpDrive;
import cr0s.warpdrive.api.IBlockBase; import cr0s.warpdrive.api.IBlockBase;
import cr0s.warpdrive.api.IDamageReceiver; import cr0s.warpdrive.api.IDamageReceiver;
import cr0s.warpdrive.client.ClientProxy;
import cr0s.warpdrive.config.WarpDriveConfig; import cr0s.warpdrive.config.WarpDriveConfig;
import cr0s.warpdrive.data.EnumTier; import cr0s.warpdrive.data.EnumTier;
import cr0s.warpdrive.data.Vector3; import cr0s.warpdrive.data.Vector3;
@ -15,7 +14,6 @@ import net.minecraft.block.BlockStairs;
import net.minecraft.block.material.EnumPushReaction; import net.minecraft.block.material.EnumPushReaction;
import net.minecraft.block.state.IBlockState; import net.minecraft.block.state.IBlockState;
import net.minecraft.item.EnumDyeColor; import net.minecraft.item.EnumDyeColor;
import net.minecraft.item.Item;
import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.util.DamageSource; import net.minecraft.util.DamageSource;
@ -70,8 +68,7 @@ public class BlockHullStairs extends BlockStairs implements IBlockBase, IDamageR
@SideOnly(Side.CLIENT) @SideOnly(Side.CLIENT)
@Override @Override
public void modelInitialisation() { public void modelInitialisation() {
final Item item = Item.getItemFromBlock(this); // no operation
ClientProxy.modelInitialisation(item);
} }
@Override @Override

View file

@ -12,7 +12,11 @@ import cr0s.warpdrive.render.*;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
import java.util.Collection;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.block.properties.IProperty;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.item.Item; import net.minecraft.item.Item;
@ -84,7 +88,7 @@ public class ClientProxy extends CommonProxy {
ResourceLocation resourceLocation = item.getRegistryName(); ResourceLocation resourceLocation = item.getRegistryName();
assert resourceLocation != null; assert resourceLocation != null;
// reuse blockstate rendering for ItemBlocks // reuse blockstate rendering for ItemBlocks when their blockstate have at least one property (typically colored blocks)
if (item instanceof ItemBlock) { if (item instanceof ItemBlock) {
final int damage = itemStack.getItemDamage(); final int damage = itemStack.getItemDamage();
if (damage < 0 || damage > 15) { if (damage < 0 || damage > 15) {
@ -92,14 +96,20 @@ public class ClientProxy extends CommonProxy {
damage, itemStack.getItem())); damage, itemStack.getItem()));
} }
final Block block = ((ItemBlock) item).getBlock(); final Block block = ((ItemBlock) item).getBlock();
final String variant = block.getStateFromMeta(damage).toString().split("[\\[\\]]")[1]; final IBlockState blockState = block.getStateFromMeta(damage);
return new ModelResourceLocation(resourceLocation, variant); final Collection<IProperty<?>> properties = blockState.getPropertyKeys();
if (!properties.isEmpty()) {// reuse defined properties
final String[] blockStateStrings = blockState.toString().split("[\\[\\]]");
final String variant = blockStateStrings[1];
return new ModelResourceLocation(resourceLocation, variant);
}
} }
// use damage value as suffix for pure items // use damage value as suffix otherwise
if (item.getHasSubtypes()) { if (item.getHasSubtypes()) {
resourceLocation = new ResourceLocation(resourceLocation.getNamespace(), resourceLocation.getPath() + "-" + itemStack.getItemDamage()); resourceLocation = new ResourceLocation(resourceLocation.getNamespace(), resourceLocation.getPath() + "-" + itemStack.getItemDamage());
} }
// defaults to inventory variant
return new ModelResourceLocation(resourceLocation, "inventory"); return new ModelResourceLocation(resourceLocation, "inventory");
} }
@ -110,8 +120,8 @@ public class ClientProxy extends CommonProxy {
} }
if (!item.getHasSubtypes()) { if (!item.getHasSubtypes()) {
assert item.getRegistryName() != null; final ModelResourceLocation modelResourceLocation = ((IItemBase) item).getModelResourceLocation(new ItemStack(item));
ModelLoader.setCustomModelResourceLocation(item, 0, new ModelResourceLocation(item.getRegistryName(), "inventory")); ModelLoader.setCustomModelResourceLocation(item, 0, modelResourceLocation);
} else { } else {
final NonNullList<ItemStack> listItemStacks = NonNullList.create(); final NonNullList<ItemStack> listItemStacks = NonNullList.create();