ClientProxy.java 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. package me.km;
  2. import java.awt.Color;
  3. import java.lang.reflect.Field;
  4. import me.km.blocks.ModBlocks;
  5. import me.km.blocks.cauldron.TileEntityCauldron;
  6. import me.km.entities.ModEntities;
  7. import me.km.items.ItemColoredSoup;
  8. import me.km.items.ItemJewel;
  9. import me.km.items.ModItems;
  10. import me.km.items.ModelCylinder;
  11. import me.km.items.ModelHat;
  12. import me.km.networking.KeyManager;
  13. import me.km.utils.ReflectionUtils;
  14. import net.minecraft.block.Block;
  15. import net.minecraft.block.state.IBlockState;
  16. import net.minecraft.client.Minecraft;
  17. import net.minecraft.client.model.ModelBiped;
  18. import net.minecraft.client.renderer.block.model.ModelBakery;
  19. import net.minecraft.client.renderer.block.model.ModelResourceLocation;
  20. import net.minecraft.client.renderer.block.statemap.StateMapperBase;
  21. import net.minecraft.client.renderer.color.BlockColors;
  22. import net.minecraft.client.renderer.color.ItemColors;
  23. import net.minecraft.client.renderer.entity.Render;
  24. import net.minecraft.client.resources.FoliageColorReloadListener;
  25. import net.minecraft.client.resources.GrassColorReloadListener;
  26. import net.minecraft.entity.Entity;
  27. import net.minecraft.init.Blocks;
  28. import net.minecraft.item.Item;
  29. import net.minecraft.item.ItemBlock;
  30. import net.minecraft.item.ItemStack;
  31. import net.minecraft.util.ResourceLocation;
  32. import net.minecraft.util.math.BlockPos;
  33. import net.minecraft.world.ColorizerFoliage;
  34. import net.minecraft.world.IBlockAccess;
  35. import net.minecraft.world.biome.BiomeColorHelper;
  36. import net.minecraftforge.client.model.ModelLoader;
  37. import net.minecraftforge.common.MinecraftForge;
  38. import net.minecraftforge.fluids.IFluidBlock;
  39. import net.minecraftforge.fml.client.registry.RenderingRegistry;
  40. import net.minecraftforge.fml.relauncher.Side;
  41. import net.minecraftforge.fml.relauncher.SideOnly;
  42. public class ClientProxy extends CommonProxy
  43. {
  44. @Override
  45. public void registerItemRenderer(Item item, int meta, String id, String variant)
  46. {
  47. ModelLoader.setCustomModelResourceLocation(item, meta, new ModelResourceLocation(KajetansMod.MODID + ":" + id, variant));
  48. }
  49. @Override
  50. public void registerItemRenderer(Item item, int meta, String id)
  51. {
  52. registerItemRenderer(item, meta, id, null);
  53. }
  54. @Override
  55. public void registerFluidModel(IFluidBlock fluidBlock)
  56. {
  57. final Item item = Item.getItemFromBlock((Block) fluidBlock);
  58. assert item != null;
  59. ModelBakery.registerItemVariants(item);
  60. ModelResourceLocation modelResourceLocation = new ModelResourceLocation(KajetansMod.MODID + ":fluids", fluidBlock.getFluid().getName());
  61. ModelLoader.setCustomMeshDefinition(item, MeshDefinitionFix.create(stack -> modelResourceLocation));
  62. ModelLoader.setCustomStateMapper((Block) fluidBlock, new StateMapperBase()
  63. {
  64. @Override
  65. protected ModelResourceLocation getModelResourceLocation(IBlockState state)
  66. {
  67. return modelResourceLocation;
  68. }
  69. });
  70. }
  71. @Override
  72. public void registerEntityRenderer(Class<? extends Entity> c, Render<? extends Entity> r)
  73. {
  74. RenderingRegistry.registerEntityRenderingHandler(c, r);
  75. }
  76. @Override
  77. public void init()
  78. {
  79. ModEntities.initClient();
  80. MinecraftForge.EVENT_BUS.register(new ClientEvents());
  81. MinecraftForge.EVENT_BUS.register(new KeyManager());
  82. BlockColors bColors = Minecraft.getMinecraft().getBlockColors();
  83. bColors.registerBlockColorHandler((IBlockState state, IBlockAccess w, BlockPos pos, int tintIndex) ->
  84. {
  85. TileEntityCauldron tile = (TileEntityCauldron) w.getTileEntity(pos);
  86. if(tile == null)
  87. {
  88. return -16777216;
  89. }
  90. Color c = tile.getColor();
  91. return -16777216 | c.getRed() << 16 | c.getGreen() << 8 | c.getBlue();
  92. }, ModBlocks.cauldronOak, ModBlocks.cauldronAcacia, ModBlocks.cauldronBigOak, ModBlocks.cauldronBirch, ModBlocks.cauldronJungle, ModBlocks.cauldronSpruce);
  93. bColors.registerBlockColorHandler((IBlockState state, IBlockAccess w, BlockPos pos, int ti) -> 0xFFD4F7, ModBlocks.redCrystalLeaves);
  94. bColors.registerBlockColorHandler((IBlockState state, IBlockAccess w, BlockPos pos, int ti) -> 0xD0FFFF, ModBlocks.blueCrystalLeaves);
  95. bColors.registerBlockColorHandler((IBlockState state, IBlockAccess w, BlockPos pos, int ti) -> 0xFFFFFF, ModBlocks.whiteCrystalLeaves);
  96. bColors.registerBlockColorHandler((IBlockState state, IBlockAccess w, BlockPos pos, int ti) ->
  97. w != null && pos != null ? BiomeColorHelper.getFoliageColorAtPos(w, pos) : ColorizerFoliage.getFoliageColorBasic(),
  98. Blocks.LEAVES, ModBlocks.apricotLeaves, ModBlocks.pearLeaves, ModBlocks.plumLeaves);
  99. ItemColors iColors = Minecraft.getMinecraft().getItemColors();
  100. iColors.registerItemColorHandler((ItemStack stack, int tintIndex) -> tintIndex > 0 ? -1 : ((ItemColoredSoup) stack.getItem()).getColor(stack), ModItems.coloredSoup);
  101. iColors.registerItemColorHandler((ItemStack stack, int tintIndex) -> tintIndex > 0 ? -1 : ((ItemJewel) stack.getItem()).getColor(stack), ModItems.jewel);
  102. iColors.registerItemColorHandler((ItemStack stack, int tintIndex) ->
  103. {
  104. IBlockState iblockstate = ((ItemBlock) stack.getItem()).getBlock().getStateFromMeta(stack.getMetadata());
  105. return bColors.colorMultiplier(iblockstate, null, null, tintIndex);
  106. }, ModBlocks.apricotLeaves, ModBlocks.pearLeaves, ModBlocks.plumLeaves);
  107. iColors.registerItemColorHandler((ItemStack stack, int tintIndex) -> 0xFFD4F7, Item.getItemFromBlock(ModBlocks.redCrystalLeaves));
  108. iColors.registerItemColorHandler((ItemStack stack, int tintIndex) -> 0xD0FFFF, Item.getItemFromBlock(ModBlocks.blueCrystalLeaves));
  109. iColors.registerItemColorHandler((ItemStack stack, int tintIndex) -> 0xFFFFFF, Item.getItemFromBlock(ModBlocks.whiteCrystalLeaves));
  110. }
  111. @SideOnly(Side.CLIENT)
  112. private final static ModelHat STRAW_HAT = new ModelHat(1);
  113. @SideOnly(Side.CLIENT)
  114. private final static ModelCylinder CYLINDER = new ModelCylinder(1);
  115. @Override
  116. public ModelBiped getCylinderModel()
  117. {
  118. return CYLINDER;
  119. }
  120. @Override
  121. public ModelBiped getStrawHatModel()
  122. {
  123. return STRAW_HAT;
  124. }
  125. // -------------------------------------------------------------------------
  126. // rendering stuff
  127. // -------------------------------------------------------------------------
  128. @SideOnly(Side.CLIENT)
  129. private final static Field LOC_FOLIAGE_PNG = ReflectionUtils.getFinalStaticField(FoliageColorReloadListener.class, "field_130079_a", "LOC_FOLIAGE_PNG");
  130. @Override
  131. public void setFoliage(ResourceLocation loc)
  132. {
  133. ReflectionUtils.setFieldValue(null, LOC_FOLIAGE_PNG, loc);
  134. }
  135. @SideOnly(Side.CLIENT)
  136. private final static Field LOC_GRASS_PNG = ReflectionUtils.getFinalStaticField(GrassColorReloadListener.class, "field_130078_a", "LOC_GRASS_PNG");
  137. @Override
  138. public void setGrass(ResourceLocation loc)
  139. {
  140. ReflectionUtils.setFieldValue(null, LOC_GRASS_PNG, loc);
  141. }
  142. }