@Override public void init() { Minecraft.getMinecraft().getBlockColors().registerBlockColorHandler( new IBlockColor() { public int colorMultiplier(IBlockState state, IBlockAccess world, BlockPos pos, int tintIndex) { if (world != null && pos != null) return BiomeColorHelper.getFoliageColorAtPos(world, pos); else return ColorizerFoliage.getFoliageColorBasic(); } }, NaturalTrees.branchOak, NaturalTrees.branchBirch, NaturalTrees.branchSpruce, NaturalTrees.branchJungle, NaturalTrees.branchDarkOak, NaturalTrees.branchAcacia); }
public static void doImmenseEvil() throws Exception { // de-finalise the grass colour field Field grass_color = ReflectionHelper.findField(BiomeColorHelper.class, GRASS_COLOR); grass_color.setAccessible(true); Field modifiers = Field.class.getDeclaredField("modifiers"); AccessController.doPrivileged((PrivilegedAction) () -> { modifiers.setAccessible(true); return null; }); modifiers.setInt(grass_color, grass_color.getModifiers() & ~Modifier.FINAL); // get the interface Class colorResolver = ReflectionHelper.getClass(Minecraft.class.getClassLoader(), COLOR_RESOLVER); // get what the field was so it can be wrapped Object wrappedResolver = grass_color.get(null); // get the version of the method used by the object to be wrapped - avoids exceptions for calling an abstract method Class wrappedResolverClass = wrappedResolver.getClass(); Method wrappedGetColorAtPos = ReflectionHelper.findMethod(wrappedResolverClass, "getColorAtPos", "func_180283_a", Biome.class, BlockPos.class); // build a proxy Method getColorAtPos = ReflectionHelper.findMethod(colorResolver, "getColorAtPos", "func_180283_a", Biome.class, BlockPos.class); Object proxy = Proxy.newProxyInstance(colorResolver.getClassLoader(), new Class[] { colorResolver }, new GrassHandler(getColorAtPos, wrappedResolver, wrappedGetColorAtPos) ); // set the field grass_color.set(null, proxy); }
@SideOnly(Side.CLIENT) public int getColor() { if (world == null || pos == null) { return Util.whiteColor.toInt(); } else { Color green = new Color(BiomeColorHelper.getFoliageColorAtPos(world, pos)); return Color.average(green, Util.whiteColor, (float) Math.pow(progress, 2)).toInt(); } }
@Override public void Init() { final BlockColors blockcolors = Minecraft.getMinecraft().getBlockColors(); blockcolors.registerBlockColorHandler(new IBlockColor() { public int colorMultiplier(IBlockState state, @Nullable IBlockAccess worldIn, @Nullable BlockPos pos, int tintIndex) { return worldIn != null && pos != null ? BiomeColorHelper.getGrassColorAtPos(worldIn, pos) : ColorizerGrass.getGrassColor(0.5D, 1.0D); } }, ModBlocks.machinemowedgrass); }
public int colorMultiplier(IBlockAccess worldIn, BlockPos pos, int renderPass) { BlockDoublePlant.EnumPlantType blockdoubleplant$enumplanttype = this.getVariant(worldIn, pos); return blockdoubleplant$enumplanttype != BlockDoublePlant.EnumPlantType.GRASS && blockdoubleplant$enumplanttype != BlockDoublePlant.EnumPlantType.FERN ? 16777215 : BiomeColorHelper.getGrassColorAtPos(worldIn, pos); }
public int colorMultiplier(IBlockAccess worldIn, BlockPos pos, int renderPass) { return BiomeColorHelper.getFoliageColorAtPos(worldIn, pos); }
public int colorMultiplier(IBlockAccess worldIn, BlockPos pos, int renderPass) { return this.blockMaterial == Material.water ? BiomeColorHelper.getWaterColorAtPos(worldIn, pos) : 16777215; }
public int colorMultiplier(IBlockAccess worldIn, BlockPos pos, int renderPass) { return BiomeColorHelper.getGrassColorAtPos(worldIn, pos); }
@Override public int getClientGrassColor(IBlockAccess w, BlockPos pos) { return BiomeColorHelper.getGrassColorAtPos(w, pos); }
@Override public BlockTint getFoliageTint() { return BiomeColorHelper::getFoliageColorAtPos; }
@Override public BlockTint getGrassTint() { return BiomeColorHelper::getGrassColorAtPos; }
@Override public BlockTint getWaterTint() { return BiomeColorHelper::getWaterColorAtPos; }
@Override @SideOnly(Side.CLIENT) public int colorMultiplier(IBlockState state, IBlockAccess world, BlockPos pos, int tintIndex) { return world != null && pos != null ? BiomeColorHelper.getGrassColorAtPos(world, pos) : ColorizerGrass.getGrassColor(0.5D, 1.0D); }
@Nullable @Override public Function4<IBlockState, IBlockAccess, BlockPos, Integer, Integer> getBlockColorFunction() { return (iBlockState, iBlockAccess, blockPos, integer) -> iBlockAccess != null && blockPos != null ? BiomeColorHelper.getFoliageColorAtPos(iBlockAccess, blockPos) : ColorizerFoliage.getFoliageColorBasic(); }
public static Color getBiomeWaterColor(final World world, final double x, final double y, final double z) { return new Color(BiomeColorHelper.getWaterColorAtPos(world, new BlockPos(x, y, z))); }
private void registerRenderers() { // TODO update this a bit + make client component to init manager registerBlockRenderer(); InitializationManager.instance().getRegistry().forEachEntry((RegistryEntry<?> r) -> { if (r.standardRender) { r.forEachMeta((Integer meta) -> { Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(r.content, meta, new ModelResourceLocation(ARKCraft.MODID + ":" + r.modelLocationPrefix + r.name, "inventory")); }); } Collection<String> v = new ArrayList<>(Arrays.asList(r.getVariants())); v.add(ARKCraft.MODID + ":" + r.modelLocationPrefix + r.name); ModelLoader.registerItemVariants(r.content, CollectionUtil.convert(v, (e) -> new ResourceLocation(e)).toArray(new ResourceLocation[0])); }); // TODO this can also render other item's models for this one! Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(ARKCraftItems.blueprint, new ItemMeshDefinition() { @Override public ModelResourceLocation getModelLocation(ItemStack stack) { return new ModelResourceLocation(ARKCraft.instance().modid() + ":blueprint/" + ItemBlueprint.getEngram(stack).getName(), "inventory"); } }); // Register models for entities registerEntityModels(); registerBlockTexture(ARKCraftBlocks.cropPlot, 1, "crop_plot"); registerBlockTexture(ARKCraftBlocks.cropPlot, 2, "crop_plot"); registerBlockTexture(ARKCraftBlocks.cable, 1, "cable_vert"); meshedItems.forEach(i -> Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register((Item) i, i::getModel)); Minecraft.getMinecraft().getBlockColors().registerBlockColorHandler(new IBlockColor() { @Override public int colorMultiplier(IBlockState state, @Nullable IBlockAccess worldIn, @Nullable BlockPos pos, int tintIndex) { return worldIn != null && pos != null ? BiomeColorHelper.getGrassColorAtPos(worldIn, pos) : (ColorizerGrass.getGrassColor(0.5D, 1.0D)); } }, new Block[] {ARKCraftBlocks.berryBush}); ARKCustomModelLoader.init(); ARKCustomModelLoader.instance.modelMap.put(new ResourceLocation("arkcraft:cable"), new ModelCable()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityElectricOutlet.class, new TileEntityElectricOutletSpecialRenderer()); }
@SideOnly(Side.CLIENT) public int colorMultiplier(IBlockAccess worldIn, BlockPos pos, int renderPass) { return BiomeColorHelper.getGrassColorAtPos(worldIn, pos); }
@Override @SideOnly(Side.CLIENT) public int colorMultiplier(IBlockAccess worldIn, BlockPos pos, int renderPass) { return BiomeColorHelper.getFoliageColorAtPos(worldIn, pos); }
@Override @SideOnly(Side.CLIENT) public int colorMultiplier(IBlockAccess worldIn, BlockPos pos, int renderPass) { return BiomeColorHelper.getGrassColorAtPos(worldIn, pos); }
public static int[] getBlockBiomeColors(EntityLivingBase iguana) { double entityX = iguana.posX; double entityY = iguana.posY; double entityZ = iguana.posZ; int red = 0; int green = 0; int blue = 0; int currColor; int blockCount = 27; // 3 * 3 * 3 for (int x = -1; x <= 1; ++x) { for (int y = 0; y <= 2; ++y) { for (int z = -1; z <= 1; ++z) { IBlockState iBlockState = iguana.world.getBlockState(new BlockPos(entityX + x, entityY + y - 0.5, entityZ + z)); Block block = iBlockState.getBlock(); if (block instanceof BlockAir) { blockCount--; continue; } if (block instanceof BlockGrass || block instanceof BlockTallGrass) { currColor = BiomeColorHelper.getGrassColorAtPos(iguana.world, new BlockPos(entityX + x, entityY + y, entityZ + z)); } else if (block instanceof BlockLeaves) { currColor = BiomeColorHelper.getFoliageColorAtPos(iguana.world, new BlockPos(entityX + x, entityY + y, entityZ + z)); } else { currColor = iBlockState.getMapColor(iguana.world, new BlockPos(entityX + x, entityY + y, entityZ + z)).colorValue; } red += (currColor & 0xFF0000) >> 16; green += (currColor & 0xFF00) >> 8; blue += currColor & 0xFF; } } } // default to grey color if the Chameleon is falling through the air (without any blocks near it) // also has the benefit of avoiding a divide by zero if (blockCount == 0) { return new int[] { 135, 135, 135 }; } red /= blockCount; green /= blockCount; blue /= blockCount; return new int[] { red, green, blue }; }
public static int[] getBlockBiomeColors(EntityLivingBase chameleon) { double entityX = chameleon.posX; double entityY = chameleon.posY; double entityZ = chameleon.posZ; int red = 0; int green = 0; int blue = 0; int currColor; int blockCount = 27; // 3 * 3 * 3 for (int x = -1; x <= 1; ++x) { for (int y = 0; y <= 2; ++y) { for (int z = -1; z <= 1; ++z) { IBlockState iBlockState = chameleon.world.getBlockState(new BlockPos(entityX + x, entityY + y - 0.5, entityZ + z)); Block block = iBlockState.getBlock(); if (block instanceof BlockAir) { blockCount--; continue; } if (block instanceof BlockGrass || block instanceof BlockTallGrass) { currColor = BiomeColorHelper.getGrassColorAtPos(chameleon.world, new BlockPos(entityX + x, entityY + y, entityZ + z)); } else if (block instanceof BlockLeaves) { currColor = BiomeColorHelper.getFoliageColorAtPos(chameleon.world, new BlockPos(entityX + x, entityY + y, entityZ + z)); } else { currColor = iBlockState.getMapColor(chameleon.world, new BlockPos(entityX + x, entityY + y, entityZ + z)).colorValue; } red += (currColor & 0xFF0000) >> 16; green += (currColor & 0xFF00) >> 8; blue += currColor & 0xFF; } } } // default to grey color if the Chameleon is falling through the air (without any blocks near it) // also has the benefit of avoiding a divide by zero if (blockCount == 0) { return new int[] { 135, 135, 135 }; } red /= blockCount; green /= blockCount; blue /= blockCount; return new int[] { red, green, blue }; }