TechReborn/src/main/java/techreborn/client/RegisterItemJsons.java
2018-08-22 15:55:14 +03:00

252 lines
12 KiB
Java

/*
* This file is part of TechReborn, licensed under the MIT License (MIT).
*
* Copyright (c) 2018 TechReborn
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
package techreborn.client;
import com.google.common.collect.Maps;
import net.minecraft.block.Block;
import net.minecraft.block.properties.IProperty;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.client.renderer.block.statemap.DefaultStateMapper;
import net.minecraft.item.Item;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.model.ModelLoader;
import techreborn.blocks.cable.BlockCable;
import techreborn.blocks.cable.EnumCableType;
import techreborn.config.ConfigTechReborn;
import techreborn.init.ModBlocks;
import techreborn.init.ModItems;
import techreborn.init.ModPlates;
import techreborn.items.*;
import techreborn.lib.ModInfo;
import java.util.Map;
public class RegisterItemJsons {
public static void registerModels() {
registerItems();
registerBlocks();
}
private static void registerItems() {
register(ModItems.RE_BATTERY, "battery/re_battery");
register(ModItems.LITHIUM_BATTERY, "battery/lithium_battery");
register(ModItems.ENERGY_CRYSTAL, "battery/energy_crystal");
register(ModItems.LAPOTRONIC_CRYSTAL, "battery/lapotron_crystal");
register(ModItems.LAPOTRONIC_ORB, "battery/lapotronic_orb");
register(ModItems.FREQUENCY_TRANSMITTER, "misc/frequency_transmitter");
register(ModItems.UU_MATTER, "misc/uu_matter");
register(ModItems.SCRAP_BOX, "misc/scrapbox");
register(ModItems.MANUAL, "misc/manual");
register(ModItems.DEBUG, "misc/debug");
register(ModBlocks.RUBBER_SAPLING, "misc/rubber_sapling");
register(ModItems.STEEL_DRILL, "tool/steel_drill");
register(ModItems.DIAMOND_DRILL, "tool/diamond_drill");
register(ModItems.ADVANCED_DRILL, "tool/advanced_drill");
register(ModItems.STEEL_CHAINSAW, "tool/steel_chainsaw");
register(ModItems.DIAMOND_CHAINSAW, "tool/diamond_chainsaw");
register(ModItems.ADVANCED_CHAINSAW, "tool/advanced_chainsaw");
register(ModItems.STEEL_JACKHAMMER, "tool/steel_jackhammer");
register(ModItems.DIAMOND_JACKHAMMER, "tool/diamond_jackhammer");
register(ModItems.ADVANCED_JACKHAMMER, "tool/advanced_jackhammer");
register(ModItems.NANOSABER, "tool/nanosaber");
register(ModItems.TREE_TAP, "tool/treetap");
register(ModItems.ELECTRIC_TREE_TAP, "tool/electric_treetap");
register(ModItems.CLOAKING_DEVICE, "tool/cloaking_device");
register(ModItems.OMNI_TOOL, "tool/omni_tool");
register(ModItems.ROCK_CUTTER, "tool/rock_cutter");
register(ModItems.WRENCH, "tool/wrench");
register(ModItems.LAPOTRONIC_ORB_PACK, "tool/lapotronic_orbpack");
register(ModItems.LITHIUM_BATTERY_PACK, "tool/lithium_batpack");
if (ConfigTechReborn.enableGemArmorAndTools) {
registerBlockstateMultiItem(ModItems.RUBY_HELMET, "ruby_helmet", "items/tool/armour");
registerBlockstateMultiItem(ModItems.RUBY_CHESTPLATE, "ruby_chestplate", "items/tool/armour");
registerBlockstateMultiItem(ModItems.RUBY_LEGGINGS, "ruby_leggings", "items/tool/armour");
registerBlockstateMultiItem(ModItems.RUBY_BOOTS, "ruby_boots", "items/tool/armour");
registerBlockstateMultiItem(ModItems.SAPPHIRE_HELMET, "sapphire_helmet", "items/tool/armour");
registerBlockstateMultiItem(ModItems.SAPPHIRE_CHSTPLATE, "sapphire_chestplate", "items/tool/armour");
registerBlockstateMultiItem(ModItems.SAPPHIRE_LEGGINGS, "sapphire_leggings", "items/tool/armour");
registerBlockstateMultiItem(ModItems.SAPPHIRE_BOOTS, "sapphire_boots", "items/tool/armour");
registerBlockstateMultiItem(ModItems.PERIDOT_HELMET, "peridot_helmet", "items/tool/armour");
registerBlockstateMultiItem(ModItems.PERIDOT_CHESTPLATE, "peridot_chestplate", "items/tool/armour");
registerBlockstateMultiItem(ModItems.PERIDOT_LEGGINGS, "peridot_leggings", "items/tool/armour");
registerBlockstateMultiItem(ModItems.PERIDOT_BOOTS, "peridot_boots", "items/tool/armour");
registerBlockstateMultiItem(ModItems.BRONZE_HELMET, "bronze_helmet", "items/tool/armour");
registerBlockstateMultiItem(ModItems.BRONZE_CHESTPLATE, "bronze_chestplate", "items/tool/armour");
registerBlockstateMultiItem(ModItems.BRONZE_LEGGINGS, "bronze_leggings", "items/tool/armour");
registerBlockstateMultiItem(ModItems.BRONZE_BOOTS, "bronze_boots", "items/tool/armour");
registerBlockstateMultiItem(ModItems.RUBY_PICKAXE, "ruby_pickaxe", "items/tool/tool");
registerBlockstateMultiItem(ModItems.RUBY_SWORD, "ruby_sword", "items/tool/tool");
registerBlockstateMultiItem(ModItems.RUBY_AXE, "ruby_axe", "items/tool/tool");
registerBlockstateMultiItem(ModItems.RUBY_SPADE, "ruby_spade", "items/tool/tool");
registerBlockstateMultiItem(ModItems.RUBY_HOE, "ruby_hoe", "items/tool/tool");
registerBlockstateMultiItem(ModItems.SAPPHIRE_PICKAXE, "sapphire_pickaxe", "items/tool/tool");
registerBlockstateMultiItem(ModItems.SAPPHIRE_SWORD, "sapphire_sword", "items/tool/tool");
registerBlockstateMultiItem(ModItems.SAPPHIRE_AXE, "sapphire_axe", "items/tool/tool");
registerBlockstateMultiItem(ModItems.SAPPHIRE_SPADE, "sapphire_spade", "items/tool/tool");
registerBlockstateMultiItem(ModItems.SAPPHIRE_HOE, "sapphire_hoe", "items/tool/tool");
registerBlockstateMultiItem(ModItems.PERIDOT_PICKAXE, "peridot_pickaxe", "items/tool/tool");
registerBlockstateMultiItem(ModItems.PERIDOT_SWORD, "peridot_sword", "items/tool/tool");
registerBlockstateMultiItem(ModItems.PERIDOT_AXE, "peridot_axe", "items/tool/tool");
registerBlockstateMultiItem(ModItems.PERIDOT_SAPPHIRE, "peridot_spade", "items/tool/tool");
registerBlockstateMultiItem(ModItems.PERIDOT_HOE, "peridot_hoe", "items/tool/tool");
registerBlockstateMultiItem(ModItems.BRONZE_PICKAXE, "bronze_pickaxe", "items/tool/tool");
registerBlockstateMultiItem(ModItems.BRONZE_SWORD, "bronze_sword", "items/tool/tool");
registerBlockstateMultiItem(ModItems.BRONZE_AXE, "bronze_axe", "items/tool/tool");
registerBlockstateMultiItem(ModItems.BRONZE_SPADE, "bronze_spade", "items/tool/tool");
registerBlockstateMultiItem(ModItems.BRONZE_HOE, "bronze_hoe", "items/tool/tool");
}
String[] name = ItemIngots.types.clone();
for (int i = 0; i < ItemIngots.types.length; ++i) {
registerBlockstate(ModItems.INGOTS, i, name[i], "items/materials/");
}
name = ItemGems.types.clone();
for (int i = 0; i < ItemGems.types.length; ++i) {
registerBlockstate(ModItems.GEMS, i, name[i], "items/materials/");
}
/* name = ItemPlates.types.clone();
for (int i = 0; i < ItemPlates.types.length; ++i) {
registerBlockstate(ModItems.PLATES, i, name[i], "items/materials/");
}*/
ResourceLocation platesBlockstateJson = new ResourceLocation(ModInfo.MOD_ID, "items/materials/plates");
for (ModPlates plate : ModPlates.values()){
ModelLoader.setCustomModelResourceLocation(plate.item, 0, new ModelResourceLocation(platesBlockstateJson, "type=" + plate.getName()));
}
name = ItemNuggets.types.clone();
for (int i = 0; i < ItemNuggets.types.length; ++i) {
registerBlockstate(ModItems.NUGGETS, i, name[i], "items/materials/");
}
name = ItemDusts.types.clone();
for (int i = 0; i < ItemDusts.types.length; ++i) {
registerBlockstate(ModItems.DUSTS, i, name[i], "items/materials/");
}
name = ItemDustsSmall.types.clone();
for (int i = 0; i < ItemDustsSmall.types.length; ++i) {
registerBlockstate(ModItems.SMALL_DUSTS, i, name[i], "items/materials/");
}
name = ItemParts.types.clone();
for (int i = 0; i < ItemParts.types.length; ++i) {
registerBlockstate(ModItems.PARTS, i, name[i], "items/materials/");
}
name = ItemUpgrades.types.clone();
for (int i = 0; i < ItemUpgrades.types.length; ++i) {
registerBlockstate(ModItems.UPGRADES, i, name[i], "items/misc/");
}
for (EnumCableType cableType : EnumCableType.values()) {
registerBlockstateMultiItem(Item.getItemFromBlock(ModBlocks.CABLE), cableType.ordinal(), cableType.getName().toLowerCase(), "cable_inv");
}
ModelLoader.setCustomStateMapper(ModBlocks.CABLE, new DefaultStateMapper() {
@Override
protected ModelResourceLocation getModelResourceLocation(IBlockState state) {
Map<IProperty<?>, Comparable<?>> map = Maps.<IProperty<?>, Comparable<?>>newLinkedHashMap(state.getProperties());
if (state.getValue(BlockCable.TYPE).ordinal() <= 4) {
return new ModelResourceLocation(new ResourceLocation(ModBlocks.CABLE.getRegistryName().getNamespace(), ModBlocks.CABLE.getRegistryName().getPath()) + "_thin", this.getPropertyString(map));
}
return new ModelResourceLocation(new ResourceLocation(ModBlocks.CABLE.getRegistryName().getNamespace(), ModBlocks.CABLE.getRegistryName().getPath()) + "_thick", this.getPropertyString(map));
}
});
}
public static void setBlockStateMapper(Block block, String path, IProperty<?>... ignoredProperties) {
final String slash = !path.isEmpty() ? "/" : "";
ModelLoader.setCustomStateMapper(block, new DefaultStateMapper() {
@Override
protected ModelResourceLocation getModelResourceLocation(IBlockState state) {
Map<IProperty<?>, Comparable<?>> map = Maps.<IProperty<?>, Comparable<?>>newLinkedHashMap(state.getProperties());
for (IProperty<?> iproperty : ignoredProperties) {
map.remove(iproperty);
}
return new ModelResourceLocation(new ResourceLocation(block.getRegistryName().getNamespace(), path + slash + block.getRegistryName().getPath()), this.getPropertyString(map));
}
});
}
private static void registerBlocks() {
register(ModBlocks.REFINED_IRON_FENCE, "iron_fence");
}
private static void register(Item item, int meta, String name) {
ModelLoader.setCustomModelResourceLocation(item, meta,
new ModelResourceLocation("techreborn:" + name, "inventory"));
}
private static void register(Item item, String name) {
register(item, 0, name);
}
@SuppressWarnings("unused")
private static void register(Block block, int meta, String name) {
register(Item.getItemFromBlock(block), meta, name);
}
private static void register(Block block, String name) {
register(Item.getItemFromBlock(block), 0, name);
}
@SuppressWarnings("unused")
private static void registerBlockstate(Item i, int meta, String variant) {
registerBlockstate(i, meta, variant, "");
}
private static void registerBlockstate(Item i, int meta, String variant, String dir) {
ResourceLocation loc = new ResourceLocation("techreborn", dir + i.getRegistryName().getPath());
ModelLoader.setCustomModelResourceLocation(i, meta, new ModelResourceLocation(loc, "type=" + variant));
}
@SuppressWarnings("unused")
private static void registerBlockstate(Block i, int meta, String variant) {
registerBlockstate(i, meta, variant, "");
}
private static void registerBlockstate(Block i, int meta, String variant, String dir) {
registerBlockstate(Item.getItemFromBlock(i), meta, variant, dir);
}
private static void registerBlockstateMultiItem(Item item, String variantName, String path) {
ResourceLocation loc = new ResourceLocation("techreborn", path);
ModelLoader.setCustomModelResourceLocation(item, 0, new ModelResourceLocation(loc, "type=" + variantName));
}
private static void registerBlockstateMultiItem(Item item, int meta, String variantName, String path) {
ResourceLocation loc = new ResourceLocation("techreborn", path);
ModelLoader.setCustomModelResourceLocation(item, meta, new ModelResourceLocation(loc, "type=" + variantName));
}
}