Add gilded wood

This commit is contained in:
Electroblob77
2020-03-01 13:04:15 +00:00
parent 3a571fd239
commit 3f80c56163
43 changed files with 867 additions and 15 deletions
@@ -0,0 +1,13 @@
package electroblob.wizardry.block;
import electroblob.wizardry.registry.WizardryTabs;
import net.minecraft.block.BlockPlanks;
public class BlockGildedWood extends BlockPlanks {
public BlockGildedWood(){
super();
this.setCreativeTab(WizardryTabs.WIZARDRY);
}
}
@@ -5,10 +5,11 @@ import electroblob.wizardry.block.BlockCrystal;
import electroblob.wizardry.block.BlockPedestal;
import electroblob.wizardry.block.BlockRunestone;
import electroblob.wizardry.item.IMultiTexturedItem;
import electroblob.wizardry.item.ItemBlockMultiTexturedElemental;
import electroblob.wizardry.item.ItemBlockMultiTextured;
import electroblob.wizardry.item.ItemCrystal;
import electroblob.wizardry.registry.WizardryBlocks;
import electroblob.wizardry.registry.WizardryItems;
import net.minecraft.block.BlockPlanks;
import net.minecraft.client.renderer.block.model.IBakedModel;
import net.minecraft.client.renderer.block.model.ModelBakery;
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
@@ -50,19 +51,24 @@ public final class WizardryModels {
ModelLoader.setCustomStateMapper(WizardryBlocks.crystal_block, new StateMap.Builder()
.withName(BlockCrystal.ELEMENT).withSuffix("_crystal_block").build());
// Yay unchecked casting! But we know it's always ok here, and it makes everything much neater.
ItemBlockMultiTexturedElemental crystalBlockItem = (ItemBlockMultiTexturedElemental)Item.getItemFromBlock(WizardryBlocks.crystal_block);
ItemBlockMultiTextured crystalBlockItem = (ItemBlockMultiTextured)Item.getItemFromBlock(WizardryBlocks.crystal_block);
registerMultiTexturedModel(crystalBlockItem);
ModelLoader.setCustomStateMapper(WizardryBlocks.runestone, new StateMap.Builder()
.withName(BlockRunestone.ELEMENT).withSuffix("_runestone").build());
ItemBlockMultiTexturedElemental runestoneItem = (ItemBlockMultiTexturedElemental)Item.getItemFromBlock(WizardryBlocks.runestone);
ItemBlockMultiTextured runestoneItem = (ItemBlockMultiTextured)Item.getItemFromBlock(WizardryBlocks.runestone);
registerMultiTexturedModel(runestoneItem);
ModelLoader.setCustomStateMapper(WizardryBlocks.runestone_pedestal, new StateMap.Builder()
.withName(BlockPedestal.ELEMENT).ignore(BlockPedestal.NATURAL).withSuffix("_runestone_pedestal").build()); // Don't care about NATURAL property
ItemBlockMultiTexturedElemental pedestalItem = (ItemBlockMultiTexturedElemental)Item.getItemFromBlock(WizardryBlocks.runestone_pedestal);
ItemBlockMultiTextured pedestalItem = (ItemBlockMultiTextured)Item.getItemFromBlock(WizardryBlocks.runestone_pedestal);
registerMultiTexturedModel(pedestalItem);
ModelLoader.setCustomStateMapper(WizardryBlocks.gilded_wood, new StateMap.Builder()
.withName(BlockPlanks.VARIANT).withSuffix("_gilded_wood").build());
ItemBlockMultiTextured gildedWoodItem = (ItemBlockMultiTextured)Item.getItemFromBlock(WizardryBlocks.gilded_wood);
registerMultiTexturedModel(gildedWoodItem);
// Items
registerMultiTexturedModel((ItemCrystal)WizardryItems.magic_crystal);
@@ -9,7 +9,7 @@ import net.minecraft.util.ResourceLocation;
* convenience method {@link electroblob.wizardry.client.model.WizardryModels#registerMultiTexturedModel(Item) WizardryModels.registerMultiTexturedModel(T)}. Also works well for {@code ItemBlock}s!
* @author Electroblob
* @since Wizardry 4.2
* @see ItemBlockMultiTexturedElemental
* @see ItemBlockMultiTextured
*/
public interface IMultiTexturedItem {
@@ -1,32 +1,33 @@
package electroblob.wizardry.item;
import electroblob.wizardry.constants.Element;
import net.minecraft.block.Block;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
public class ItemBlockMultiTexturedElemental extends ItemBlock implements IMultiTexturedItem {
public class ItemBlockMultiTextured extends ItemBlock implements IMultiTexturedItem {
private final boolean separateNames;
private final String[] prefixes;
public ItemBlockMultiTexturedElemental(Block block, boolean separateNames){
public ItemBlockMultiTextured(Block block, boolean separateNames, String... prefixes){
super(block);
this.setHasSubtypes(true);
this.setMaxDamage(0);
this.separateNames = separateNames;
this.prefixes = prefixes;
}
@Override
public ResourceLocation getModelName(ItemStack stack){
int metadata = stack.getMetadata();
if(metadata >= Element.values().length) metadata = 0;
if(metadata >= prefixes.length) metadata = 0;
return getModelName(metadata);
}
public ResourceLocation getModelName(int metadata){
return new ResourceLocation(this.block.getRegistryName().getNamespace(),
Element.values()[metadata].getName() + "_" + this.block.getRegistryName().getPath());
prefixes[metadata] + "_" + this.block.getRegistryName().getPath());
}
@Override
@@ -4,6 +4,7 @@ import electroblob.wizardry.Wizardry;
import electroblob.wizardry.block.*;
import electroblob.wizardry.tileentity.*;
import net.minecraft.block.Block;
import net.minecraft.block.BlockPlanks;
import net.minecraft.block.material.Material;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.event.RegistryEvent;
@@ -56,6 +57,7 @@ public final class WizardryBlocks {
public static final Block thorns = placeholder();
public static final Block obsidian_crust = placeholder();
public static final Block dry_frosted_ice = placeholder();
public static final Block gilded_wood = placeholder();
/**
* Sets both the registry and unlocalised names of the given block, then registers it with the given registry. Use
@@ -95,6 +97,7 @@ public final class WizardryBlocks {
registerBlock(registry, "thorns", new BlockThorns());
registerBlock(registry, "obsidian_crust", new BlockObsidianCrust());
registerBlock(registry, "dry_frosted_ice", new BlockDryFrostedIce());
registerBlock(registry, "gilded_wood", new BlockPlanks());
}
@@ -13,6 +13,7 @@ import electroblob.wizardry.registry.WizardryTabs.CreativeTabListed;
import electroblob.wizardry.registry.WizardryTabs.CreativeTabSorted;
import net.minecraft.block.Block;
import net.minecraft.block.BlockDispenser;
import net.minecraft.block.BlockPlanks;
import net.minecraft.dispenser.BehaviorProjectileDispense;
import net.minecraft.dispenser.IPosition;
import net.minecraft.entity.IProjectile;
@@ -35,6 +36,7 @@ import org.apache.commons.lang3.tuple.ImmutablePair;
import org.apache.commons.lang3.tuple.Pair;
import javax.annotation.Nonnull;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
@@ -366,9 +368,9 @@ public final class WizardryItems {
}
}
private static void registerMultiTexturedItemBlock(IForgeRegistry<Item> registry, Block block, boolean separateNames){
private static void registerMultiTexturedItemBlock(IForgeRegistry<Item> registry, Block block, boolean separateNames, String... prefixes){
// We don't need to keep a reference to the ItemBlock
Item itemblock = new ItemBlockMultiTexturedElemental(block, separateNames).setRegistryName(block.getRegistryName());
Item itemblock = new ItemBlockMultiTextured(block, separateNames, prefixes).setRegistryName(block.getRegistryName());
registry.register(itemblock);
if(block.getCreativeTab() instanceof CreativeTabListed){
@@ -389,9 +391,14 @@ public final class WizardryItems {
registerItemBlock(registry, WizardryBlocks.crystal_ore);
registerItemBlock(registry, WizardryBlocks.crystal_flower);
registerItemBlock(registry, WizardryBlocks.transportation_stone);
registerMultiTexturedItemBlock(registry, WizardryBlocks.crystal_block, true);
registerMultiTexturedItemBlock(registry, WizardryBlocks.runestone, false);
registerMultiTexturedItemBlock(registry, WizardryBlocks.runestone_pedestal, false);
String[] elements = Arrays.stream(Element.values()).map(Element::getName).toArray(String[]::new);
String[] woodTypes = Arrays.stream(BlockPlanks.EnumType.values()).map(BlockPlanks.EnumType::getName).toArray(String[]::new);
registerMultiTexturedItemBlock(registry, WizardryBlocks.crystal_block, true, elements);
registerMultiTexturedItemBlock(registry, WizardryBlocks.runestone, false, elements);
registerMultiTexturedItemBlock(registry, WizardryBlocks.runestone_pedestal, false, elements);
registerMultiTexturedItemBlock(registry, WizardryBlocks.gilded_wood, true, woodTypes);
// Items