mirror of
http://git.eaglercraft.rip/eaglercraft/eaglercraft-1.8.git
synced 2025-04-30 02:01:59 -05:00
244 lines
9.4 KiB
Java
244 lines
9.4 KiB
Java
package net.optifine;
|
|
|
|
import java.io.IOException;
|
|
import java.io.InputStream;
|
|
import java.util.List;
|
|
import java.util.Properties;
|
|
|
|
import net.lax1dude.eaglercraft.v1_8.minecraft.EaglerTextureAtlasSprite;
|
|
import net.minecraft.block.Block;
|
|
import net.minecraft.block.BlockDirt;
|
|
import net.minecraft.block.BlockGrass;
|
|
import net.minecraft.block.BlockMycelium;
|
|
import net.minecraft.block.state.IBlockState;
|
|
import net.minecraft.client.Minecraft;
|
|
import net.minecraft.client.renderer.texture.TextureMap;
|
|
import net.minecraft.client.resources.model.IBakedModel;
|
|
import net.minecraft.init.Blocks;
|
|
import net.minecraft.util.BlockPos;
|
|
import net.minecraft.util.EnumFacing;
|
|
import net.minecraft.util.ResourceLocation;
|
|
import net.minecraft.world.IBlockAccess;
|
|
import net.optifine.model.BlockModelUtils;
|
|
import net.optifine.util.PropertiesOrdered;
|
|
|
|
public class BetterGrass {
|
|
private static boolean betterGrass = true;
|
|
private static boolean betterMycelium = true;
|
|
private static boolean betterPodzol = true;
|
|
private static boolean betterGrassSnow = true;
|
|
private static boolean betterMyceliumSnow = true;
|
|
private static boolean betterPodzolSnow = true;
|
|
private static boolean grassMultilayer = false;
|
|
private static EaglerTextureAtlasSprite spriteGrass = null;
|
|
private static EaglerTextureAtlasSprite spriteGrassSide = null;
|
|
private static EaglerTextureAtlasSprite spriteMycelium = null;
|
|
private static EaglerTextureAtlasSprite spritePodzol = null;
|
|
private static EaglerTextureAtlasSprite spriteSnow = null;
|
|
private static boolean spritesLoaded = false;
|
|
private static IBakedModel modelCubeGrass = null;
|
|
private static IBakedModel modelCubeMycelium = null;
|
|
private static IBakedModel modelCubePodzol = null;
|
|
private static IBakedModel modelCubeSnow = null;
|
|
private static boolean modelsLoaded = false;
|
|
private static final String TEXTURE_GRASS_DEFAULT = "blocks/grass_top";
|
|
private static final String TEXTURE_GRASS_SIDE_DEFAULT = "blocks/grass_side";
|
|
private static final String TEXTURE_MYCELIUM_DEFAULT = "blocks/mycelium_top";
|
|
private static final String TEXTURE_PODZOL_DEFAULT = "blocks/dirt_podzol_top";
|
|
private static final String TEXTURE_SNOW_DEFAULT = "blocks/snow";
|
|
|
|
public static void updateIcons(TextureMap textureMap) {
|
|
spritesLoaded = false;
|
|
modelsLoaded = false;
|
|
loadProperties(textureMap);
|
|
}
|
|
|
|
public static void update() {
|
|
if (spritesLoaded) {
|
|
modelCubeGrass = BlockModelUtils.makeModelCube(spriteGrass, 0);
|
|
|
|
if (grassMultilayer) {
|
|
IBakedModel ibakedmodel = BlockModelUtils.makeModelCube(spriteGrassSide, -1);
|
|
modelCubeGrass = BlockModelUtils.joinModelsCube(ibakedmodel, modelCubeGrass);
|
|
}
|
|
|
|
modelCubeMycelium = BlockModelUtils.makeModelCube(spriteMycelium, -1);
|
|
modelCubePodzol = BlockModelUtils.makeModelCube(spritePodzol, 0);
|
|
modelCubeSnow = BlockModelUtils.makeModelCube(spriteSnow, -1);
|
|
modelsLoaded = true;
|
|
}
|
|
}
|
|
|
|
private static void loadProperties(TextureMap textureMap) {
|
|
betterGrass = true;
|
|
betterMycelium = true;
|
|
betterPodzol = true;
|
|
betterGrassSnow = true;
|
|
betterMyceliumSnow = true;
|
|
betterPodzolSnow = true;
|
|
spriteGrass = textureMap.registerSprite(new ResourceLocation("blocks/grass_top"));
|
|
spriteGrassSide = textureMap.registerSprite(new ResourceLocation("blocks/grass_side"));
|
|
spriteMycelium = textureMap.registerSprite(new ResourceLocation("blocks/mycelium_top"));
|
|
spritePodzol = textureMap.registerSprite(new ResourceLocation("blocks/dirt_podzol_top"));
|
|
spriteSnow = textureMap.registerSprite(new ResourceLocation("blocks/snow"));
|
|
spritesLoaded = true;
|
|
String s = "optifine/bettergrass.properties";
|
|
|
|
try (InputStream inputstream = Minecraft.getMinecraft().getResourceManager()
|
|
.getResource(new ResourceLocation(s)).getInputStream()) {
|
|
Properties properties = new PropertiesOrdered();
|
|
properties.load(inputstream);
|
|
inputstream.close();
|
|
betterGrass = getBoolean(properties, "grass", true);
|
|
betterMycelium = getBoolean(properties, "mycelium", true);
|
|
betterPodzol = getBoolean(properties, "podzol", true);
|
|
betterGrassSnow = getBoolean(properties, "grass.snow", true);
|
|
betterMyceliumSnow = getBoolean(properties, "mycelium.snow", true);
|
|
betterPodzolSnow = getBoolean(properties, "podzol.snow", true);
|
|
grassMultilayer = getBoolean(properties, "grass.multilayer", false);
|
|
spriteGrass = registerSprite(properties, "texture.grass", "blocks/grass_top", textureMap);
|
|
spriteGrassSide = registerSprite(properties, "texture.grass_side", "blocks/grass_side", textureMap);
|
|
spriteMycelium = registerSprite(properties, "texture.mycelium", "blocks/mycelium_top", textureMap);
|
|
spritePodzol = registerSprite(properties, "texture.podzol", "blocks/dirt_podzol_top", textureMap);
|
|
spriteSnow = registerSprite(properties, "texture.snow", "blocks/snow", textureMap);
|
|
} catch (IOException ioexception) {
|
|
Config.warn(
|
|
"Error reading: " + s + ", " + ioexception.getClass().getName() + ": " + ioexception.getMessage());
|
|
}
|
|
}
|
|
|
|
private static EaglerTextureAtlasSprite registerSprite(Properties props, String key, String textureDefault,
|
|
TextureMap textureMap) {
|
|
String s = props.getProperty(key);
|
|
|
|
if (s == null) {
|
|
s = textureDefault;
|
|
}
|
|
|
|
// ResourceLocation resourcelocation = new ResourceLocation("textures/" + s + ".png");
|
|
//
|
|
// if (!Config.hasResource(resourcelocation)) {
|
|
// Config.warn("BetterGrass texture not found: " + resourcelocation);
|
|
// s = textureDefault;
|
|
// }
|
|
|
|
ResourceLocation resourcelocation1 = new ResourceLocation(s);
|
|
EaglerTextureAtlasSprite textureatlassprite = textureMap.registerSprite(resourcelocation1, key);
|
|
return textureatlassprite;
|
|
}
|
|
|
|
public static List getFaceQuads(IBlockAccess blockAccess, IBlockState blockState, BlockPos blockPos,
|
|
EnumFacing facing, List quads) {
|
|
if (facing != EnumFacing.UP && facing != EnumFacing.DOWN) {
|
|
if (!modelsLoaded) {
|
|
return quads;
|
|
} else {
|
|
Block block = blockState.getBlock();
|
|
return block instanceof BlockMycelium
|
|
? getFaceQuadsMycelium(blockAccess, blockState, blockPos, facing, quads)
|
|
: (block instanceof BlockDirt
|
|
? getFaceQuadsDirt(blockAccess, blockState, blockPos, facing, quads)
|
|
: (block instanceof BlockGrass
|
|
? getFaceQuadsGrass(blockAccess, blockState, blockPos, facing, quads)
|
|
: quads));
|
|
}
|
|
} else {
|
|
return quads;
|
|
}
|
|
}
|
|
|
|
private static List getFaceQuadsMycelium(IBlockAccess blockAccess, IBlockState blockState, BlockPos blockPos,
|
|
EnumFacing facing, List quads) {
|
|
Block block = blockAccess.getBlockState(blockPos.up()).getBlock();
|
|
boolean flag = block == Blocks.snow || block == Blocks.snow_layer;
|
|
|
|
if (Config.isBetterGrassFancy()) {
|
|
if (flag) {
|
|
if (betterMyceliumSnow && getBlockAt(blockPos, facing, blockAccess) == Blocks.snow_layer) {
|
|
return modelCubeSnow.getFaceQuads(facing);
|
|
}
|
|
} else if (betterMycelium && getBlockAt(blockPos.down(), facing, blockAccess) == Blocks.mycelium) {
|
|
return modelCubeMycelium.getFaceQuads(facing);
|
|
}
|
|
} else if (flag) {
|
|
if (betterMyceliumSnow) {
|
|
return modelCubeSnow.getFaceQuads(facing);
|
|
}
|
|
} else if (betterMycelium) {
|
|
return modelCubeMycelium.getFaceQuads(facing);
|
|
}
|
|
|
|
return quads;
|
|
}
|
|
|
|
private static List getFaceQuadsDirt(IBlockAccess blockAccess, IBlockState blockState, BlockPos blockPos,
|
|
EnumFacing facing, List quads) {
|
|
Block block = getBlockAt(blockPos, EnumFacing.UP, blockAccess);
|
|
|
|
if (blockState.getValue(BlockDirt.VARIANT) != BlockDirt.DirtType.PODZOL) {
|
|
return quads;
|
|
} else {
|
|
boolean flag = block == Blocks.snow || block == Blocks.snow_layer;
|
|
|
|
if (Config.isBetterGrassFancy()) {
|
|
if (flag) {
|
|
if (betterPodzolSnow && getBlockAt(blockPos, facing, blockAccess) == Blocks.snow_layer) {
|
|
return modelCubeSnow.getFaceQuads(facing);
|
|
}
|
|
} else if (betterPodzol) {
|
|
BlockPos blockpos = blockPos.down().offset(facing);
|
|
IBlockState iblockstate = blockAccess.getBlockState(blockpos);
|
|
|
|
if (iblockstate.getBlock() == Blocks.dirt
|
|
&& iblockstate.getValue(BlockDirt.VARIANT) == BlockDirt.DirtType.PODZOL) {
|
|
return modelCubePodzol.getFaceQuads(facing);
|
|
}
|
|
}
|
|
} else if (flag) {
|
|
if (betterPodzolSnow) {
|
|
return modelCubeSnow.getFaceQuads(facing);
|
|
}
|
|
} else if (betterPodzol) {
|
|
return modelCubePodzol.getFaceQuads(facing);
|
|
}
|
|
|
|
return quads;
|
|
}
|
|
}
|
|
|
|
private static List getFaceQuadsGrass(IBlockAccess blockAccess, IBlockState blockState, BlockPos blockPos,
|
|
EnumFacing facing, List quads) {
|
|
Block block = blockAccess.getBlockState(blockPos.up()).getBlock();
|
|
boolean flag = block == Blocks.snow || block == Blocks.snow_layer;
|
|
|
|
if (Config.isBetterGrassFancy()) {
|
|
if (flag) {
|
|
if (betterGrassSnow && getBlockAt(blockPos, facing, blockAccess) == Blocks.snow_layer) {
|
|
return modelCubeSnow.getFaceQuads(facing);
|
|
}
|
|
} else if (betterGrass && getBlockAt(blockPos.down(), facing, blockAccess) == Blocks.grass) {
|
|
return modelCubeGrass.getFaceQuads(facing);
|
|
}
|
|
} else if (flag) {
|
|
if (betterGrassSnow) {
|
|
return modelCubeSnow.getFaceQuads(facing);
|
|
}
|
|
} else if (betterGrass) {
|
|
return modelCubeGrass.getFaceQuads(facing);
|
|
}
|
|
|
|
return quads;
|
|
}
|
|
|
|
private static Block getBlockAt(BlockPos blockPos, EnumFacing facing, IBlockAccess blockAccess) {
|
|
BlockPos blockpos = blockPos.offset(facing);
|
|
Block block = blockAccess.getBlockState(blockpos).getBlock();
|
|
return block;
|
|
}
|
|
|
|
private static boolean getBoolean(Properties props, String key, boolean def) {
|
|
String s = props.getProperty(key);
|
|
return s == null ? def : Boolean.parseBoolean(s);
|
|
}
|
|
}
|