From a3e6c09268906f5ce3e8882b6e226b9d219627af Mon Sep 17 00:00:00 2001 From: Leonardo Date: Mon, 25 Oct 2021 22:31:43 +0200 Subject: [PATCH] Added more methods to the wrapper --- .../seibel/lod/wrappers/BlockPosWrapper.java | 2 +- .../seibel/lod/wrappers/ChunkGenerator.java | 7 +++ .../com/seibel/lod/wrappers/ChunkWrapper.java | 22 +++++++ .../lod/wrappers/DimensionTypeWrapper.java | 37 +++++++++++ .../seibel/lod/wrappers/DimensionWrapper.java | 5 -- .../com/seibel/lod/wrappers/WorldWrapper.java | 63 +++++++++++++++++++ 6 files changed, 130 insertions(+), 6 deletions(-) create mode 100644 src/main/java/com/seibel/lod/wrappers/ChunkGenerator.java create mode 100644 src/main/java/com/seibel/lod/wrappers/DimensionTypeWrapper.java delete mode 100644 src/main/java/com/seibel/lod/wrappers/DimensionWrapper.java diff --git a/src/main/java/com/seibel/lod/wrappers/BlockPosWrapper.java b/src/main/java/com/seibel/lod/wrappers/BlockPosWrapper.java index eb389320f..212c3a655 100644 --- a/src/main/java/com/seibel/lod/wrappers/BlockPosWrapper.java +++ b/src/main/java/com/seibel/lod/wrappers/BlockPosWrapper.java @@ -46,7 +46,7 @@ public class BlockPosWrapper return blockPos.getZ(); } - private BlockPos.Mutable getBlockPos() + public BlockPos.Mutable getBlockPos() { return blockPos; } diff --git a/src/main/java/com/seibel/lod/wrappers/ChunkGenerator.java b/src/main/java/com/seibel/lod/wrappers/ChunkGenerator.java new file mode 100644 index 000000000..f4ccc8761 --- /dev/null +++ b/src/main/java/com/seibel/lod/wrappers/ChunkGenerator.java @@ -0,0 +1,7 @@ +package com.seibel.lod.wrappers; + + +//This class will contain all methods usefull to generate the fake ChunkWrapper +public class ChunkGenerator +{ +} diff --git a/src/main/java/com/seibel/lod/wrappers/ChunkWrapper.java b/src/main/java/com/seibel/lod/wrappers/ChunkWrapper.java index 17c7e8258..0a0e536ca 100644 --- a/src/main/java/com/seibel/lod/wrappers/ChunkWrapper.java +++ b/src/main/java/com/seibel/lod/wrappers/ChunkWrapper.java @@ -1,5 +1,27 @@ package com.seibel.lod.wrappers; +import jdk.nashorn.internal.ir.Block; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.chunk.IChunk; + public class ChunkWrapper { + + private IChunk chunk; + + + public ChunkWrapper(IChunk chunk) + { + this.chunk = chunk; + } + + public BlockWrapper getBlock(BlockPosWrapper blockPos) + { + return BlockWrapper.getBlockWrapper(chunk.getBlockState(blockPos.getBlockPos()).getBlock()); + } + + public int getEmittedBrightness(BlockPosWrapper blockPos) + { + return chunk.getLightEmission(blockPos.getBlockPos()); + } } diff --git a/src/main/java/com/seibel/lod/wrappers/DimensionTypeWrapper.java b/src/main/java/com/seibel/lod/wrappers/DimensionTypeWrapper.java new file mode 100644 index 000000000..d1036dbf8 --- /dev/null +++ b/src/main/java/com/seibel/lod/wrappers/DimensionTypeWrapper.java @@ -0,0 +1,37 @@ +package com.seibel.lod.wrappers; + +import net.minecraft.world.DimensionType; + +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; + +public class DimensionTypeWrapper +{ + private static final ConcurrentMap dimensionTypeWrapperMap = new ConcurrentHashMap<>(); + private DimensionType dimensionType; + + public DimensionTypeWrapper(DimensionType dimensionType) + { + this.dimensionType = dimensionType; + } + + public static DimensionTypeWrapper getDimensionTypeWrapper(DimensionType dimensionType) + { + //first we check if the biome has already been wrapped + if(dimensionTypeWrapperMap.containsKey(dimensionType) && dimensionTypeWrapperMap.get(dimensionType) != null) + return dimensionTypeWrapperMap.get(dimensionType); + + + //if it hasn't been created yet, we create it and save it in the map + DimensionTypeWrapper dimensionTypeWrapper = new DimensionTypeWrapper(dimensionType); + dimensionTypeWrapperMap.put(dimensionType, dimensionTypeWrapper); + + //we return the newly created wrapper + return dimensionTypeWrapper; + } + + public static void clearMap() + { + dimensionTypeWrapperMap.clear(); + } +} diff --git a/src/main/java/com/seibel/lod/wrappers/DimensionWrapper.java b/src/main/java/com/seibel/lod/wrappers/DimensionWrapper.java deleted file mode 100644 index 244fe1c53..000000000 --- a/src/main/java/com/seibel/lod/wrappers/DimensionWrapper.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.seibel.lod.wrappers; - -public class DimensionWrapper -{ -} diff --git a/src/main/java/com/seibel/lod/wrappers/WorldWrapper.java b/src/main/java/com/seibel/lod/wrappers/WorldWrapper.java index 2e890310d..7f7540bee 100644 --- a/src/main/java/com/seibel/lod/wrappers/WorldWrapper.java +++ b/src/main/java/com/seibel/lod/wrappers/WorldWrapper.java @@ -1,5 +1,68 @@ package com.seibel.lod.wrappers; +import net.minecraft.world.IWorld; +import net.minecraft.world.biome.Biome; + +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; + public class WorldWrapper { + private static final ConcurrentMap worldWrapperMap = new ConcurrentHashMap<>(); + private IWorld world; + + public WorldWrapper(IWorld world) + { + this.world = world; + } + + public WorldWrapper getWorldWrapper(IWorld world) + { + //first we check if the biome has already been wrapped + if(worldWrapperMap.containsKey(world) && worldWrapperMap.get(world) != null) + return worldWrapperMap.get(world); + + + //if it hasn't been created yet, we create it and save it in the map + WorldWrapper worldWrapper = new WorldWrapper(world); + worldWrapperMap.put(world, worldWrapper); + + //we return the newly created wrapper + return worldWrapper; + } + + public static void clearMap() + { + worldWrapperMap.clear(); + } + + public DimensionTypeWrapper getDimensionType() + { + return DimensionTypeWrapper.getDimensionTypeWrapper(world.dimensionType()); + } + + public int getBlockLight(BlockPosWrapper blockPos) + { + return world.getLightEngine().skyEngine.getLightValue(blockPos.getBlockPos()); + } + + public int getSkyLight(BlockPosWrapper blockPos) + { + return world.getLightEngine().blockEngine.getLightValue(blockPos.getBlockPos()); + } + + public BiomeWrapper getBiome(BlockPosWrapper blockPos) + { + return BiomeWrapper.getBiomeWrapper(world.getBiome(blockPos.getBlockPos())); + } + + public boolean hasCeiling() + { + return world.dimensionType().hasCeiling(); + } + + public boolean hasSkyLight() + { + return world.dimensionType().hasSkyLight(); + } }