mirror of
https://github.com/TeamMidnightDust/CullLeaves.git
synced 2025-12-16 14:15:10 +01:00
Many QoL improvements & Resourcepack features
- Support Sodium 0.6+ - Allow resourcepacks to force culling and hide fully-encircled leaf blocks - Force leaf culling when the smart leaves pack is enabled - Reload world when the config changes - Only apply Sodium mixins when Sodium is actually installed (Removes log spam)
This commit is contained in:
@@ -0,0 +1,78 @@
|
||||
package eu.midnightdust.cullleaves;
|
||||
|
||||
import com.google.gson.JsonObject;
|
||||
import com.google.gson.JsonParser;
|
||||
import eu.midnightdust.cullleaves.config.CullLeavesConfig;
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.block.LeavesBlock;
|
||||
import net.minecraft.block.MangroveRootsBlock;
|
||||
import net.minecraft.resource.ResourceManager;
|
||||
import net.minecraft.resource.SynchronousResourceReloader;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.math.Direction;
|
||||
import net.minecraft.world.BlockView;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
public class CullLeavesClient {
|
||||
public static final String MOD_ID = "cullleaves";
|
||||
public static final Logger LOGGER = LoggerFactory.getLogger(MOD_ID);
|
||||
|
||||
public static boolean forceLeafCulling = false;
|
||||
public static boolean forceHideInnerLeaves = false;
|
||||
|
||||
public static boolean shouldHideBlock(BlockView world, BlockPos pos) {
|
||||
if (CullLeavesClient.forceHideInnerLeaves) {
|
||||
boolean shouldForceCull = true;
|
||||
for (Direction dir : Direction.values()) {
|
||||
BlockState otherState = world.getBlockState(pos.offset(dir));
|
||||
if (!(otherState.getBlock() instanceof LeavesBlock) &&
|
||||
!otherState.isSideSolidFullSquare(world, pos, dir.getOpposite())) {
|
||||
shouldForceCull = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return shouldForceCull;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
public static boolean isLeafSideInvisible(BlockState neighborState) {
|
||||
if (CullLeavesConfig.enabled || CullLeavesClient.forceLeafCulling) {
|
||||
return neighborState.getBlock() instanceof LeavesBlock;
|
||||
}
|
||||
else return false;
|
||||
}
|
||||
public static boolean isRootSideInvisible(BlockState neighborState) {
|
||||
if (CullLeavesConfig.cullRoots) {
|
||||
return neighborState.getBlock() instanceof MangroveRootsBlock;
|
||||
}
|
||||
else return false;
|
||||
}
|
||||
|
||||
public static class ReloadListener implements SynchronousResourceReloader {
|
||||
public static final ReloadListener INSTANCE = new ReloadListener();
|
||||
|
||||
private ReloadListener() {}
|
||||
|
||||
@Override
|
||||
public void reload(ResourceManager manager) {
|
||||
CullLeavesClient.forceLeafCulling = false;
|
||||
CullLeavesClient.forceHideInnerLeaves = false;
|
||||
manager.findResources("options", path -> path.toString().startsWith("cullleaves") && path.toString().endsWith("options.json")).forEach((id, resource) -> {
|
||||
try {
|
||||
JsonObject json = JsonParser.parseReader(resource.getReader()).getAsJsonObject();
|
||||
if (json.has("forceLeafCulling")) {
|
||||
CullLeavesClient.forceLeafCulling = json.get("forceLeafCulling").getAsBoolean();
|
||||
LOGGER.info("Forcing leaf culling as requested by resourcepack");
|
||||
}
|
||||
if (json.has("forceHideInnerLeaves")) {
|
||||
CullLeavesClient.forceHideInnerLeaves = json.get("forceHideInnerLeaves").getAsBoolean();
|
||||
LOGGER.info("Not rendering inner leaves as requested by resourcepack");
|
||||
}
|
||||
} catch (IOException e) { throw new RuntimeException(e); }
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user