diff options
| author | Robert Sosnitzka <robert.sosnitzka@gmail.com> | 2016-07-18 16:04:36 +0200 |
|---|---|---|
| committer | Robert Sosnitzka <robert.sosnitzka@gmail.com> | 2016-07-18 16:04:37 +0200 |
| commit | 7515737cb4c6bd9a98d0ebeecd5715c808f87e3f (patch) | |
| tree | 13dac154e10091769986b489468af2995e4b17c9 /src/main/java/com/sosnitzka/taiga/proxy | |
| parent | c72689b68ae16da380d29ff424038bba393cd340 (diff) | |
Project renamed to "TAIGA: Tinkers alloying addon"
Diffstat (limited to 'src/main/java/com/sosnitzka/taiga/proxy')
| -rw-r--r-- | src/main/java/com/sosnitzka/taiga/proxy/ClientProxy.java | 138 | ||||
| -rw-r--r-- | src/main/java/com/sosnitzka/taiga/proxy/ServerProxy.java | 18 |
2 files changed, 156 insertions, 0 deletions
diff --git a/src/main/java/com/sosnitzka/taiga/proxy/ClientProxy.java b/src/main/java/com/sosnitzka/taiga/proxy/ClientProxy.java new file mode 100644 index 0000000..5ca41a9 --- /dev/null +++ b/src/main/java/com/sosnitzka/taiga/proxy/ClientProxy.java @@ -0,0 +1,138 @@ +package com.sosnitzka.taiga.proxy; + +import com.sosnitzka.taiga.Blocks; +import com.sosnitzka.taiga.Items; +import com.sosnitzka.taiga.TAIGA; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.ItemMeshDefinition; +import net.minecraft.client.renderer.block.model.ModelResourceLocation; +import net.minecraft.client.renderer.block.statemap.StateMapperBase; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.client.model.ModelLoader; +import net.minecraftforge.fluids.Fluid; +import slimeknights.tconstruct.library.client.MaterialRenderInfo; +import slimeknights.tconstruct.library.client.texture.MetalTextureTexture; +import slimeknights.tconstruct.library.materials.Material; + +import javax.annotation.Nonnull; +import java.lang.reflect.Field; + +import static com.sosnitzka.taiga.MaterialTraits.*; + +public class ClientProxy extends ServerProxy { + + private static void registerBlockModel(Block block) { + registerItemModel(Item.getItemFromBlock(block)); + } + + private static void registerItemModel(Item item) { + Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(item, 0, new ModelResourceLocation(item.getRegistryName(), "inventory")); + } + + @Override + public void registerStuff() { + Field[] itemFields = Items.class.getDeclaredFields(); + for (Field field : itemFields) { + if (java.lang.reflect.Modifier.isStatic(field.getModifiers())) { + Class<?> targetType = field.getType(); + try { + Item item = (Item) field.get(targetType); + + registerItemModel(item); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + } + } + + Field[] blockFields = Blocks.class.getDeclaredFields(); + for (Field field : blockFields) { + if (java.lang.reflect.Modifier.isStatic(field.getModifiers())) { + Class<?> targetType = field.getType(); + try { + Block block = (Block) field.get(targetType); + + registerBlockModel(block); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + } + } + } + + public void setRenderInfo(final Material material) { + /* if (material != bismuth) { + material.setRenderInfo(new MaterialRenderInfo.Metal(fluid.getColor(), 0.4f, 0.2f, 0f)); + } else bismuth.setRenderInfo(new MaterialRenderInfo.BlockTexture("taiga:blocks/bismuth_block")); */ + + if (material == adamantite) renderTo(material, 0xd55cdf, 0.5f, 0.8f, 0.2f); + else if (material == solarium) renderTo(material, 0xffff00, 0.6f, 1.8f, 0.0f); + else if (material == proxideum) renderTo(material, 0x2d8f8b, 0.4f, 0.3f, 0.1f); + else if (material == tiberium) renderTo(material, 0x33ff33, 0.5f, 0.2f, 0.1f); + else if (material == bismuth) renderTo(material, 0xffffff, 0.4f, 0.2f, 0.0f); + else if (material == dyonite) renderTo(material, 0xffe240, 0.6f, 0.8f, 0.2f); + else { + material.setRenderInfo(new MaterialRenderInfo.BlockTexture("taiga:blocks/" + material.getFluid().getName() + "_block")); + } + } + + private void renderTo(Material material, final int f, final float shine, final float brightness, final float hueshift) { + material.setRenderInfo(new MaterialRenderInfo.AbstractMaterialRenderInfo() { + @Override + public TextureAtlasSprite getTexture(TextureAtlasSprite baseTexture, String location) { + return new MetalTextureTexture("taiga:blocks/materials/adamantite", baseTexture, location, f, shine, brightness, hueshift); + } + }); + } + + @Override + public void registerFluidModels(Fluid fluid) { + if (fluid == null) { + return; + } + + Block block = fluid.getBlock(); + if (block != null) { + Item item = Item.getItemFromBlock(block); + FluidStateMapper mapper = new FluidStateMapper(fluid); + + // item-model + if (item != null) { + ModelLoader.registerItemVariants(item); + ModelLoader.setCustomMeshDefinition(item, mapper); + } + // block-model + ModelLoader.setCustomStateMapper(block, mapper); + } + } + + public static class FluidStateMapper extends StateMapperBase implements ItemMeshDefinition { + + public final Fluid fluid; + public final ModelResourceLocation location; + + public FluidStateMapper(Fluid fluid) { + this.fluid = fluid; + + // have each block hold its fluid per nbt? hm + this.location = new ModelResourceLocation(new ResourceLocation(TAIGA.MODID, "fluid_block"), fluid.getName()); + } + + @Nonnull + @Override + protected ModelResourceLocation getModelResourceLocation(@Nonnull IBlockState state) { + return location; + } + + @Nonnull + @Override + public ModelResourceLocation getModelLocation(@Nonnull ItemStack stack) { + return location; + } + } +} diff --git a/src/main/java/com/sosnitzka/taiga/proxy/ServerProxy.java b/src/main/java/com/sosnitzka/taiga/proxy/ServerProxy.java new file mode 100644 index 0000000..460c920 --- /dev/null +++ b/src/main/java/com/sosnitzka/taiga/proxy/ServerProxy.java @@ -0,0 +1,18 @@ +package com.sosnitzka.taiga.proxy; + +import net.minecraftforge.fluids.Fluid; +import slimeknights.tconstruct.library.materials.Material; + +public class ServerProxy { + + public void registerStuff() { + + } + + public void setRenderInfo(Material material) { + + } + + public void registerFluidModels(Fluid fluid) { + } +} |
