From b82854f0f7e2b036c40dc2da1c84484a5620e555 Mon Sep 17 00:00:00 2001 From: Taylor <taylordspivey@gmail.com> Date: Tue, 24 Sep 2024 12:32:56 -0500 Subject: [PATCH 01/13] Finished adding a custom shape override callback --- .../mods/kubejs/block/BlockBuilder.java | 9 +++- .../kubejs/block/ShapeOverrideCallbackJS.java | 48 +++++++++++++++++++ .../kubejs/block/custom/BasicBlockJS.java | 8 +++- 3 files changed, 63 insertions(+), 2 deletions(-) create mode 100644 common/src/main/java/dev/latvian/mods/kubejs/block/ShapeOverrideCallbackJS.java diff --git a/common/src/main/java/dev/latvian/mods/kubejs/block/BlockBuilder.java b/common/src/main/java/dev/latvian/mods/kubejs/block/BlockBuilder.java index 8228be755..10bd9218a 100644 --- a/common/src/main/java/dev/latvian/mods/kubejs/block/BlockBuilder.java +++ b/common/src/main/java/dev/latvian/mods/kubejs/block/BlockBuilder.java @@ -72,6 +72,7 @@ public abstract class BlockBuilder extends BuilderBase<Block> { public transient String model; public transient BlockItemBuilder itemBuilder; public transient List<AABB> customShape; + public Consumer<ShapeOverrideCallbackJS> customShapeOverrideCallback; public transient boolean noCollision; public transient boolean notSolid; public transient float slipperiness = Float.NaN; @@ -237,7 +238,7 @@ protected void generateBlockModelJsons(AssetJsonGenerator generator) { mg.textures(textures); } - if (tint != null || !customShape.isEmpty()) { + if (tint != null || customShape != null) { List<AABB> boxes = new ArrayList<>(customShape); if (boxes.isEmpty()) { @@ -507,6 +508,12 @@ public BlockBuilder box(double x0, double y0, double z0, double x1, double y1, d return box(x0, y0, z0, x1, y1, z1, true); } + @Info("Crates a callback for the shape of the block. '.box' will set be used if not present.") + public BlockBuilder shape(@Nullable Consumer<ShapeOverrideCallbackJS> shapeOverrideCallback) { + this.customShapeOverrideCallback = shapeOverrideCallback; + return this; + } + public static VoxelShape createShape(List<AABB> boxes) { if (boxes.isEmpty()) { return Shapes.block(); diff --git a/common/src/main/java/dev/latvian/mods/kubejs/block/ShapeOverrideCallbackJS.java b/common/src/main/java/dev/latvian/mods/kubejs/block/ShapeOverrideCallbackJS.java new file mode 100644 index 000000000..d36279a55 --- /dev/null +++ b/common/src/main/java/dev/latvian/mods/kubejs/block/ShapeOverrideCallbackJS.java @@ -0,0 +1,48 @@ +package dev.latvian.mods.kubejs.block; + +import dev.latvian.mods.kubejs.typings.Info; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.shapes.CollisionContext; + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.atomic.AtomicReference; + +public class ShapeOverrideCallbackJS { + public BlockState block; + public CollisionContext context; + public List<AABB> shape; + + public ShapeOverrideCallbackJS(BlockState containerJS, CollisionContext context) { + this.block = containerJS; + this.context = context; + this.shape = new ArrayList<>(); + } + + public CollisionContext getCollisionContext() { + return this.context; + } + + @Info("Set the shape of the block.") + public void box(double x0, double y0, double z0, double x1, double y1, double z1, boolean scale16) { + if (scale16) { + shape.add(new AABB(x0 / 16D, y0 / 16D, z0 / 16D, x1 / 16D, y1 / 16D, z1 / 16D)); + } else { + shape.add(new AABB(x0, y0, z0, x1, y1, z1)); + } + } + + @Info("Set the shape of the block.") + public void box(double x0, double y0, double z0, double x1, double y1, double z1) { + box(x0, y0, z0, x1, y1, z1, true); + } + + public Object getStateValue(String name) { + AtomicReference<Object> returnValue = new AtomicReference<>(); + block.getProperties().forEach((v) -> { + if(v.getName().matches(name)) returnValue.set(block.getValue(v)); + }); + return returnValue; + } +} diff --git a/common/src/main/java/dev/latvian/mods/kubejs/block/custom/BasicBlockJS.java b/common/src/main/java/dev/latvian/mods/kubejs/block/custom/BasicBlockJS.java index 36f7f5645..cccae1ae3 100644 --- a/common/src/main/java/dev/latvian/mods/kubejs/block/custom/BasicBlockJS.java +++ b/common/src/main/java/dev/latvian/mods/kubejs/block/custom/BasicBlockJS.java @@ -2,6 +2,7 @@ import dev.latvian.mods.kubejs.block.BlockBuilder; import dev.latvian.mods.kubejs.block.BlockRightClickedEventJS; +import dev.latvian.mods.kubejs.block.ShapeOverrideCallbackJS; import dev.latvian.mods.kubejs.block.KubeJSBlockProperties; import dev.latvian.mods.kubejs.block.RandomTickCallbackJS; import dev.latvian.mods.kubejs.block.callbacks.AfterEntityFallenOnBlockCallbackJS; @@ -92,11 +93,13 @@ public <T extends BlockEntity> BlockEntityTicker<T> getTicker(Level level, Block public final BlockBuilder blockBuilder; public final VoxelShape shape; + public final Consumer<ShapeOverrideCallbackJS> shapeOverrideCallback; public BasicBlockJS(BlockBuilder p) { super(p.createProperties()); blockBuilder = p; shape = BlockBuilder.createShape(p.customShape); + this.shapeOverrideCallback = p.customShapeOverrideCallback; var blockState = stateDefinition.any(); if (blockBuilder.defaultStateModification != null) { @@ -126,7 +129,10 @@ public MutableComponent getName() { @Override @Deprecated public VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { - return shape; + if(shapeOverrideCallback == null) return shape; + ShapeOverrideCallbackJS callback = new ShapeOverrideCallbackJS(state, context); + shapeOverrideCallback.accept(callback); + return BlockBuilder.createShape(callback.shape); } @Override From a288cd5917db9810ac88f826ac456accf0a86e52 Mon Sep 17 00:00:00 2001 From: Taylor <taylordspivey@gmail.com> Date: Tue, 24 Sep 2024 12:39:07 -0500 Subject: [PATCH 02/13] Finished adding a custom shape override callback --- .../main/java/dev/latvian/mods/kubejs/block/BlockBuilder.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/main/java/dev/latvian/mods/kubejs/block/BlockBuilder.java b/common/src/main/java/dev/latvian/mods/kubejs/block/BlockBuilder.java index 10bd9218a..2703cbf53 100644 --- a/common/src/main/java/dev/latvian/mods/kubejs/block/BlockBuilder.java +++ b/common/src/main/java/dev/latvian/mods/kubejs/block/BlockBuilder.java @@ -238,7 +238,7 @@ protected void generateBlockModelJsons(AssetJsonGenerator generator) { mg.textures(textures); } - if (tint != null || customShape != null) { + if (tint != null || customShape.isEmpty()) { List<AABB> boxes = new ArrayList<>(customShape); if (boxes.isEmpty()) { From bfced0c7f2adb3cf8d5a09953b99a3c77fe6ba52 Mon Sep 17 00:00:00 2001 From: Taylor <taylordspivey@gmail.com> Date: Tue, 24 Sep 2024 12:40:12 -0500 Subject: [PATCH 03/13] Finished adding a custom shape override callback --- .../main/java/dev/latvian/mods/kubejs/block/BlockBuilder.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/main/java/dev/latvian/mods/kubejs/block/BlockBuilder.java b/common/src/main/java/dev/latvian/mods/kubejs/block/BlockBuilder.java index 2703cbf53..e8fdda628 100644 --- a/common/src/main/java/dev/latvian/mods/kubejs/block/BlockBuilder.java +++ b/common/src/main/java/dev/latvian/mods/kubejs/block/BlockBuilder.java @@ -238,7 +238,7 @@ protected void generateBlockModelJsons(AssetJsonGenerator generator) { mg.textures(textures); } - if (tint != null || customShape.isEmpty()) { + if (tint != null || !customShape.isEmpty()) { List<AABB> boxes = new ArrayList<>(customShape); if (boxes.isEmpty()) { From 21cd08197d85ffb06dbf380b3016a87463528391 Mon Sep 17 00:00:00 2001 From: Taylor <taylordspivey@gmail.com> Date: Wed, 25 Sep 2024 15:54:44 -0500 Subject: [PATCH 04/13] Reworked the system to be more performant. --- .../mods/kubejs/block/BlockBuilder.java | 82 ++++++++++++++++++- .../kubejs/block/custom/BasicBlockJS.java | 32 ++++++-- 2 files changed, 104 insertions(+), 10 deletions(-) diff --git a/common/src/main/java/dev/latvian/mods/kubejs/block/BlockBuilder.java b/common/src/main/java/dev/latvian/mods/kubejs/block/BlockBuilder.java index e8fdda628..87147263c 100644 --- a/common/src/main/java/dev/latvian/mods/kubejs/block/BlockBuilder.java +++ b/common/src/main/java/dev/latvian/mods/kubejs/block/BlockBuilder.java @@ -43,9 +43,13 @@ import org.jetbrains.annotations.Nullable; import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; import java.util.HashSet; import java.util.List; +import java.util.Map; import java.util.Set; +import java.util.concurrent.atomic.AtomicBoolean; import java.util.function.Consumer; import java.util.function.Function; import java.util.function.Predicate; @@ -72,7 +76,7 @@ public abstract class BlockBuilder extends BuilderBase<Block> { public transient String model; public transient BlockItemBuilder itemBuilder; public transient List<AABB> customShape; - public Consumer<ShapeOverrideCallbackJS> customShapeOverrideCallback; + public Map<Map<String, Object>, List<AABB>> shapeMap; public transient boolean noCollision; public transient boolean notSolid; public transient float slipperiness = Float.NaN; @@ -118,6 +122,7 @@ public BlockBuilder(ResourceLocation i) { itemBuilder = getOrCreateItemBuilder(); itemBuilder.blockBuilder = this; customShape = new ArrayList<>(); + shapeMap = new HashMap<>(); noCollision = false; notSolid = false; randomTickCallback = null; @@ -508,9 +513,22 @@ public BlockBuilder box(double x0, double y0, double z0, double x1, double y1, d return box(x0, y0, z0, x1, y1, z1, true); } + @Info("Set the shape of the block.") + public BlockBuilder box(Map<String, Object> condition, double x0, double y0, double z0, double x1, double y1, double z1) { + return box(condition, x0, y0, z0, x1, y1, z1, true); + } + @Info("Crates a callback for the shape of the block. '.box' will set be used if not present.") - public BlockBuilder shape(@Nullable Consumer<ShapeOverrideCallbackJS> shapeOverrideCallback) { - this.customShapeOverrideCallback = shapeOverrideCallback; + public BlockBuilder box(Map<String, Object> condition, double x0, double y0, double z0, double x1, double y1, double z1, boolean scale16) { + System.out.println("condition: " + condition.entrySet()); + List<AABB> cubes = shapeMap.getOrDefault(condition, new ArrayList<>()); + System.out.println("box: " + shapeMap + " " + cubes); + if (scale16) { + cubes.add(new AABB(x0 / 16D, y0 / 16D, z0 / 16D, x1 / 16D, y1 / 16D, z1 / 16D)); + } else { + cubes.add(new AABB(x0, y0, z0, x1, y1, z1)); + } + shapeMap.put(condition, cubes); return this; } @@ -840,4 +858,62 @@ public Block.Properties createProperties() { return properties; } + + public Map<Map<String, Object>, VoxelShape> getShapeMap(Collection<Property<?>> properties) { + System.out.println("shape map: " + shapeMap); + final Map<Map<String, Object>, List<AABB>>[] cubeMap = new Map[]{new HashMap<>()}; + properties.forEach(property -> { + if(cubeMap[0].isEmpty()) { + property.getPossibleValues().forEach(value -> { + Map<String, Object> propMap = new HashMap<>(); + propMap.put(property.getName(), value); + cubeMap[0].put(propMap, new ArrayList<>()); + }); + } + else { + var oldMap = cubeMap[0]; + cubeMap[0] = new HashMap<>(); + oldMap.forEach((k,v) -> { + property.getPossibleValues().forEach(value -> { + Map<String, Object> propMap = k; + k.put(property.getName(), value); + cubeMap[0].put(propMap, v); + }); + }); + } + }); + cubeMap[0].forEach((_k,_v) -> { + shapeMap.forEach((k,v) -> { + AtomicBoolean match = new AtomicBoolean(true); + k.forEach((K,V) -> { + if(!compareValue(V,_k.get(K))) match.set(false); + }); + if(match.get()) _v.addAll(v); + }); + }); + System.out.println("cubeMap: " + cubeMap[0]); + final Map<Map<String, Object>, VoxelShape> voxelShapeMap = new HashMap<>(); + cubeMap[0].forEach((k,v) -> { + voxelShapeMap.put(k,BlockBuilder.createShape(v)); + }); + System.out.println("voxelShapeMap: " + cubeMap[0] + " " + voxelShapeMap); + return voxelShapeMap; + } + private boolean compareValue(Object o1, Object o2) { + if(o1.getClass() == Double.class || o1.getClass() == Float.class || o1.getClass() == Integer.class) { + if(o2.getClass() == Double.class || o2.getClass() == Float.class || o2.getClass() == Integer.class) { + double d1 = 0; + double d2 = 0; + if(o1.getClass() == Double.class) d1 = (double) o1; + if(o1.getClass() == Float.class) d1 = (double)(float) o1; + if(o1.getClass() == Integer.class) d1 = (double)(int) o1; + if(o2.getClass() == Double.class) d2 = (double) o2; + if(o2.getClass() == Float.class) d2 = (double)(float) o2; + if(o2.getClass() == Integer.class) d2 = (double)(int) o2; + return d1 == d2; + } + } + else return o1.equals(o2); + return false; + } } \ No newline at end of file diff --git a/common/src/main/java/dev/latvian/mods/kubejs/block/custom/BasicBlockJS.java b/common/src/main/java/dev/latvian/mods/kubejs/block/custom/BasicBlockJS.java index cccae1ae3..c737f73c8 100644 --- a/common/src/main/java/dev/latvian/mods/kubejs/block/custom/BasicBlockJS.java +++ b/common/src/main/java/dev/latvian/mods/kubejs/block/custom/BasicBlockJS.java @@ -2,7 +2,6 @@ import dev.latvian.mods.kubejs.block.BlockBuilder; import dev.latvian.mods.kubejs.block.BlockRightClickedEventJS; -import dev.latvian.mods.kubejs.block.ShapeOverrideCallbackJS; import dev.latvian.mods.kubejs.block.KubeJSBlockProperties; import dev.latvian.mods.kubejs.block.RandomTickCallbackJS; import dev.latvian.mods.kubejs.block.callbacks.AfterEntityFallenOnBlockCallbackJS; @@ -48,6 +47,7 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import net.minecraft.world.level.block.state.properties.Property; import net.minecraft.world.level.material.Fluid; import net.minecraft.world.level.material.FluidState; import net.minecraft.world.level.material.Fluids; @@ -58,7 +58,11 @@ import org.jetbrains.annotations.Nullable; import java.util.Collections; +import java.util.HashMap; +import java.util.Map; import java.util.Optional; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicReference; import java.util.function.Consumer; public class BasicBlockJS extends Block implements BlockKJS, SimpleWaterloggedBlock { @@ -93,15 +97,15 @@ public <T extends BlockEntity> BlockEntityTicker<T> getTicker(Level level, Block public final BlockBuilder blockBuilder; public final VoxelShape shape; - public final Consumer<ShapeOverrideCallbackJS> shapeOverrideCallback; + public Map<Map<String, Object>, VoxelShape> shapeMap = new HashMap<>(); public BasicBlockJS(BlockBuilder p) { super(p.createProperties()); blockBuilder = p; shape = BlockBuilder.createShape(p.customShape); - this.shapeOverrideCallback = p.customShapeOverrideCallback; var blockState = stateDefinition.any(); + this.shapeMap = p.getShapeMap(blockState.getProperties()); if (blockBuilder.defaultStateModification != null) { var callbackJS = new BlockStateModifyCallbackJS(blockState); if (safeCallback(blockBuilder.defaultStateModification, callbackJS, "Error while creating default blockState for block " + p.id)) { @@ -129,10 +133,24 @@ public MutableComponent getName() { @Override @Deprecated public VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { - if(shapeOverrideCallback == null) return shape; - ShapeOverrideCallbackJS callback = new ShapeOverrideCallbackJS(state, context); - shapeOverrideCallback.accept(callback); - return BlockBuilder.createShape(callback.shape); + Map<String, Object> blockPropertyValues = new HashMap<>(); + state.getProperties().forEach((property) -> { + blockPropertyValues.put(property.getName(), state.getValue(property)); + }); + //final AtomicReference<VoxelShape> voxelShape = new AtomicReference<>(); + /*System.out.println(shapeMap); + shapeMap.forEach((k,v) -> { + System.out.println("getShape: " + k + " " + blockPropertyValues); + AtomicBoolean match = new AtomicBoolean(true); + if(k != null) k.forEach((K,V) -> { + if(match.get() && compareValue(V, blockPropertyValues.get(K))) match.set(false); + System.out.println(V.getClass() + " " + blockPropertyValues.get(K).getClass()); + }); + if(match.get()) voxelShape.set(v); + });*/ + var voxelShape = shapeMap.get(blockPropertyValues); + if(voxelShape.isEmpty()) return shape; + return voxelShape; } @Override From 0e9fe070bfd0826bbbb20d907622b069762e1bc3 Mon Sep 17 00:00:00 2001 From: Taylor <taylordspivey@gmail.com> Date: Wed, 25 Sep 2024 16:02:56 -0500 Subject: [PATCH 05/13] Removed debug println-s --- .../dev/latvian/mods/kubejs/block/BlockBuilder.java | 5 ----- .../mods/kubejs/block/custom/BasicBlockJS.java | 11 ----------- 2 files changed, 16 deletions(-) diff --git a/common/src/main/java/dev/latvian/mods/kubejs/block/BlockBuilder.java b/common/src/main/java/dev/latvian/mods/kubejs/block/BlockBuilder.java index 87147263c..32b85a912 100644 --- a/common/src/main/java/dev/latvian/mods/kubejs/block/BlockBuilder.java +++ b/common/src/main/java/dev/latvian/mods/kubejs/block/BlockBuilder.java @@ -520,9 +520,7 @@ public BlockBuilder box(Map<String, Object> condition, double x0, double y0, dou @Info("Crates a callback for the shape of the block. '.box' will set be used if not present.") public BlockBuilder box(Map<String, Object> condition, double x0, double y0, double z0, double x1, double y1, double z1, boolean scale16) { - System.out.println("condition: " + condition.entrySet()); List<AABB> cubes = shapeMap.getOrDefault(condition, new ArrayList<>()); - System.out.println("box: " + shapeMap + " " + cubes); if (scale16) { cubes.add(new AABB(x0 / 16D, y0 / 16D, z0 / 16D, x1 / 16D, y1 / 16D, z1 / 16D)); } else { @@ -860,7 +858,6 @@ public Block.Properties createProperties() { } public Map<Map<String, Object>, VoxelShape> getShapeMap(Collection<Property<?>> properties) { - System.out.println("shape map: " + shapeMap); final Map<Map<String, Object>, List<AABB>>[] cubeMap = new Map[]{new HashMap<>()}; properties.forEach(property -> { if(cubeMap[0].isEmpty()) { @@ -891,12 +888,10 @@ public Map<Map<String, Object>, VoxelShape> getShapeMap(Collection<Property<?>> if(match.get()) _v.addAll(v); }); }); - System.out.println("cubeMap: " + cubeMap[0]); final Map<Map<String, Object>, VoxelShape> voxelShapeMap = new HashMap<>(); cubeMap[0].forEach((k,v) -> { voxelShapeMap.put(k,BlockBuilder.createShape(v)); }); - System.out.println("voxelShapeMap: " + cubeMap[0] + " " + voxelShapeMap); return voxelShapeMap; } private boolean compareValue(Object o1, Object o2) { diff --git a/common/src/main/java/dev/latvian/mods/kubejs/block/custom/BasicBlockJS.java b/common/src/main/java/dev/latvian/mods/kubejs/block/custom/BasicBlockJS.java index c737f73c8..d4189c32e 100644 --- a/common/src/main/java/dev/latvian/mods/kubejs/block/custom/BasicBlockJS.java +++ b/common/src/main/java/dev/latvian/mods/kubejs/block/custom/BasicBlockJS.java @@ -137,17 +137,6 @@ public VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, Co state.getProperties().forEach((property) -> { blockPropertyValues.put(property.getName(), state.getValue(property)); }); - //final AtomicReference<VoxelShape> voxelShape = new AtomicReference<>(); - /*System.out.println(shapeMap); - shapeMap.forEach((k,v) -> { - System.out.println("getShape: " + k + " " + blockPropertyValues); - AtomicBoolean match = new AtomicBoolean(true); - if(k != null) k.forEach((K,V) -> { - if(match.get() && compareValue(V, blockPropertyValues.get(K))) match.set(false); - System.out.println(V.getClass() + " " + blockPropertyValues.get(K).getClass()); - }); - if(match.get()) voxelShape.set(v); - });*/ var voxelShape = shapeMap.get(blockPropertyValues); if(voxelShape.isEmpty()) return shape; return voxelShape; From 059dad73a28ca187e06cf6bcc62ef77b70199c1b Mon Sep 17 00:00:00 2001 From: Taylor <taylordspivey@gmail.com> Date: Wed, 25 Sep 2024 16:13:46 -0500 Subject: [PATCH 06/13] Removed old ShapeOverrideCallbackJS.java file, as it was no longer used. --- .../kubejs/block/ShapeOverrideCallbackJS.java | 48 ------------------- 1 file changed, 48 deletions(-) delete mode 100644 common/src/main/java/dev/latvian/mods/kubejs/block/ShapeOverrideCallbackJS.java diff --git a/common/src/main/java/dev/latvian/mods/kubejs/block/ShapeOverrideCallbackJS.java b/common/src/main/java/dev/latvian/mods/kubejs/block/ShapeOverrideCallbackJS.java deleted file mode 100644 index d36279a55..000000000 --- a/common/src/main/java/dev/latvian/mods/kubejs/block/ShapeOverrideCallbackJS.java +++ /dev/null @@ -1,48 +0,0 @@ -package dev.latvian.mods.kubejs.block; - -import dev.latvian.mods.kubejs.typings.Info; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.phys.AABB; -import net.minecraft.world.phys.shapes.CollisionContext; - -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.atomic.AtomicReference; - -public class ShapeOverrideCallbackJS { - public BlockState block; - public CollisionContext context; - public List<AABB> shape; - - public ShapeOverrideCallbackJS(BlockState containerJS, CollisionContext context) { - this.block = containerJS; - this.context = context; - this.shape = new ArrayList<>(); - } - - public CollisionContext getCollisionContext() { - return this.context; - } - - @Info("Set the shape of the block.") - public void box(double x0, double y0, double z0, double x1, double y1, double z1, boolean scale16) { - if (scale16) { - shape.add(new AABB(x0 / 16D, y0 / 16D, z0 / 16D, x1 / 16D, y1 / 16D, z1 / 16D)); - } else { - shape.add(new AABB(x0, y0, z0, x1, y1, z1)); - } - } - - @Info("Set the shape of the block.") - public void box(double x0, double y0, double z0, double x1, double y1, double z1) { - box(x0, y0, z0, x1, y1, z1, true); - } - - public Object getStateValue(String name) { - AtomicReference<Object> returnValue = new AtomicReference<>(); - block.getProperties().forEach((v) -> { - if(v.getName().matches(name)) returnValue.set(block.getValue(v)); - }); - return returnValue; - } -} From 720366df912362312d985d8c77beb995cbce48fb Mon Sep 17 00:00:00 2001 From: Taylor <taylordspivey@gmail.com> Date: Wed, 25 Sep 2024 17:51:30 -0500 Subject: [PATCH 07/13] Fixed a bug. --- .../java/dev/latvian/mods/kubejs/block/custom/BasicBlockJS.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/main/java/dev/latvian/mods/kubejs/block/custom/BasicBlockJS.java b/common/src/main/java/dev/latvian/mods/kubejs/block/custom/BasicBlockJS.java index d4189c32e..a14b3c463 100644 --- a/common/src/main/java/dev/latvian/mods/kubejs/block/custom/BasicBlockJS.java +++ b/common/src/main/java/dev/latvian/mods/kubejs/block/custom/BasicBlockJS.java @@ -138,7 +138,7 @@ public VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, Co blockPropertyValues.put(property.getName(), state.getValue(property)); }); var voxelShape = shapeMap.get(blockPropertyValues); - if(voxelShape.isEmpty()) return shape; + if(voxelShape == null || voxelShape.isEmpty()) return shape; return voxelShape; } From 3af3049a37334026ccc81dcfe1a8a865ad1d601a Mon Sep 17 00:00:00 2001 From: Taylor <taylordspivey@gmail.com> Date: Thu, 26 Sep 2024 13:30:07 -0500 Subject: [PATCH 08/13] Fixed critical a bug. --- .../mods/kubejs/block/BlockBuilder.java | 20 +++++++------------ .../kubejs/block/custom/BasicBlockJS.java | 4 +--- gradle.properties | 2 +- 3 files changed, 9 insertions(+), 17 deletions(-) diff --git a/common/src/main/java/dev/latvian/mods/kubejs/block/BlockBuilder.java b/common/src/main/java/dev/latvian/mods/kubejs/block/BlockBuilder.java index 32b85a912..5e686b1b5 100644 --- a/common/src/main/java/dev/latvian/mods/kubejs/block/BlockBuilder.java +++ b/common/src/main/java/dev/latvian/mods/kubejs/block/BlockBuilder.java @@ -860,6 +860,7 @@ public Block.Properties createProperties() { public Map<Map<String, Object>, VoxelShape> getShapeMap(Collection<Property<?>> properties) { final Map<Map<String, Object>, List<AABB>>[] cubeMap = new Map[]{new HashMap<>()}; properties.forEach(property -> { + System.out.println(property); if(cubeMap[0].isEmpty()) { property.getPossibleValues().forEach(value -> { Map<String, Object> propMap = new HashMap<>(); @@ -872,13 +873,15 @@ public Map<Map<String, Object>, VoxelShape> getShapeMap(Collection<Property<?>> cubeMap[0] = new HashMap<>(); oldMap.forEach((k,v) -> { property.getPossibleValues().forEach(value -> { - Map<String, Object> propMap = k; - k.put(property.getName(), value); + System.out.println(value); + Map<String, Object> propMap = new HashMap<>(k); + propMap.put(property.getName(), value); cubeMap[0].put(propMap, v); }); }); } }); + System.out.println(cubeMap); cubeMap[0].forEach((_k,_v) -> { shapeMap.forEach((k,v) -> { AtomicBoolean match = new AtomicBoolean(true); @@ -896,17 +899,8 @@ public Map<Map<String, Object>, VoxelShape> getShapeMap(Collection<Property<?>> } private boolean compareValue(Object o1, Object o2) { if(o1.getClass() == Double.class || o1.getClass() == Float.class || o1.getClass() == Integer.class) { - if(o2.getClass() == Double.class || o2.getClass() == Float.class || o2.getClass() == Integer.class) { - double d1 = 0; - double d2 = 0; - if(o1.getClass() == Double.class) d1 = (double) o1; - if(o1.getClass() == Float.class) d1 = (double)(float) o1; - if(o1.getClass() == Integer.class) d1 = (double)(int) o1; - if(o2.getClass() == Double.class) d2 = (double) o2; - if(o2.getClass() == Float.class) d2 = (double)(float) o2; - if(o2.getClass() == Integer.class) d2 = (double)(int) o2; - return d1 == d2; - } + if(o2.getClass() == Double.class || o2.getClass() == Float.class || o2.getClass() == Integer.class) + return ((Number) o1).doubleValue() == ((Number) o2).doubleValue(); } else return o1.equals(o2); return false; diff --git a/common/src/main/java/dev/latvian/mods/kubejs/block/custom/BasicBlockJS.java b/common/src/main/java/dev/latvian/mods/kubejs/block/custom/BasicBlockJS.java index a14b3c463..0378004fd 100644 --- a/common/src/main/java/dev/latvian/mods/kubejs/block/custom/BasicBlockJS.java +++ b/common/src/main/java/dev/latvian/mods/kubejs/block/custom/BasicBlockJS.java @@ -137,9 +137,7 @@ public VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, Co state.getProperties().forEach((property) -> { blockPropertyValues.put(property.getName(), state.getValue(property)); }); - var voxelShape = shapeMap.get(blockPropertyValues); - if(voxelShape == null || voxelShape.isEmpty()) return shape; - return voxelShape; + return shapeMap.getOrDefault(blockPropertyValues, shape); } @Override diff --git a/gradle.properties b/gradle.properties index 254eddf22..5de5a4353 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,7 +3,7 @@ org.gradle.daemon=false mod_id=kubejs archives_base_name=kubejs mod_name=KubeJS -mod_version=2001.6.5 +mod_version=2001.6.5-custom-0.2 maven_group=dev.latvian.mods mod_author=LatvianModder curseforge_id=238086 From fed002efaeabc9b11d073bcdf9f9b3ec646d72a1 Mon Sep 17 00:00:00 2001 From: Taylor <taylordspivey@gmail.com> Date: Thu, 26 Sep 2024 13:37:11 -0500 Subject: [PATCH 09/13] Reverted version change for personal builds (did not mean to commit) --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 5de5a4353..254eddf22 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,7 +3,7 @@ org.gradle.daemon=false mod_id=kubejs archives_base_name=kubejs mod_name=KubeJS -mod_version=2001.6.5-custom-0.2 +mod_version=2001.6.5 maven_group=dev.latvian.mods mod_author=LatvianModder curseforge_id=238086 From 07554e1710956c83a533515618d7f63233a2136b Mon Sep 17 00:00:00 2001 From: Taylor <taylordspivey@gmail.com> Date: Thu, 26 Sep 2024 16:13:48 -0500 Subject: [PATCH 10/13] GetShapeMap now uses a stream for more optimal value checking. --- .../mods/kubejs/block/BlockBuilder.java | 20 ++++++------------- .../kubejs/block/custom/BasicBlockJS.java | 2 ++ 2 files changed, 8 insertions(+), 14 deletions(-) diff --git a/common/src/main/java/dev/latvian/mods/kubejs/block/BlockBuilder.java b/common/src/main/java/dev/latvian/mods/kubejs/block/BlockBuilder.java index 5e686b1b5..3640d6a8d 100644 --- a/common/src/main/java/dev/latvian/mods/kubejs/block/BlockBuilder.java +++ b/common/src/main/java/dev/latvian/mods/kubejs/block/BlockBuilder.java @@ -53,6 +53,7 @@ import java.util.function.Consumer; import java.util.function.Function; import java.util.function.Predicate; +import java.util.stream.Stream; @SuppressWarnings({"unused", "UnusedReturnValue"}) public abstract class BlockBuilder extends BuilderBase<Block> { @@ -858,9 +859,8 @@ public Block.Properties createProperties() { } public Map<Map<String, Object>, VoxelShape> getShapeMap(Collection<Property<?>> properties) { - final Map<Map<String, Object>, List<AABB>>[] cubeMap = new Map[]{new HashMap<>()}; + final Map<Map<String, Object>, List<AABB>>[] cubeMap = new Map[]{new HashMap<Map<String, Object>, List<AABB>>()}; properties.forEach(property -> { - System.out.println(property); if(cubeMap[0].isEmpty()) { property.getPossibleValues().forEach(value -> { Map<String, Object> propMap = new HashMap<>(); @@ -873,7 +873,6 @@ public Map<Map<String, Object>, VoxelShape> getShapeMap(Collection<Property<?>> cubeMap[0] = new HashMap<>(); oldMap.forEach((k,v) -> { property.getPossibleValues().forEach(value -> { - System.out.println(value); Map<String, Object> propMap = new HashMap<>(k); propMap.put(property.getName(), value); cubeMap[0].put(propMap, v); @@ -881,20 +880,13 @@ public Map<Map<String, Object>, VoxelShape> getShapeMap(Collection<Property<?>> }); } }); - System.out.println(cubeMap); - cubeMap[0].forEach((_k,_v) -> { - shapeMap.forEach((k,v) -> { - AtomicBoolean match = new AtomicBoolean(true); - k.forEach((K,V) -> { - if(!compareValue(V,_k.get(K))) match.set(false); - }); - if(match.get()) _v.addAll(v); + cubeMap[0].forEach((cubeMapKey,cubeMapValue) -> { + shapeMap.forEach((shapeMapKey,shapeMapValue) -> { + if(shapeMapKey.entrySet().stream().allMatch(entry -> compareValue(entry.getValue(),cubeMapKey.get(entry.getKey())))) cubeMapValue.addAll(shapeMapValue); }); }); final Map<Map<String, Object>, VoxelShape> voxelShapeMap = new HashMap<>(); - cubeMap[0].forEach((k,v) -> { - voxelShapeMap.put(k,BlockBuilder.createShape(v)); - }); + cubeMap[0].forEach((cubeMapKey,cubeMapValue) -> voxelShapeMap.put(cubeMapKey,BlockBuilder.createShape(cubeMapValue))); return voxelShapeMap; } private boolean compareValue(Object o1, Object o2) { diff --git a/common/src/main/java/dev/latvian/mods/kubejs/block/custom/BasicBlockJS.java b/common/src/main/java/dev/latvian/mods/kubejs/block/custom/BasicBlockJS.java index 0378004fd..8530a10e2 100644 --- a/common/src/main/java/dev/latvian/mods/kubejs/block/custom/BasicBlockJS.java +++ b/common/src/main/java/dev/latvian/mods/kubejs/block/custom/BasicBlockJS.java @@ -1,5 +1,6 @@ package dev.latvian.mods.kubejs.block.custom; +import com.mojang.serialization.MapCodec; import dev.latvian.mods.kubejs.block.BlockBuilder; import dev.latvian.mods.kubejs.block.BlockRightClickedEventJS; import dev.latvian.mods.kubejs.block.KubeJSBlockProperties; @@ -37,6 +38,7 @@ import net.minecraft.world.level.Level; import net.minecraft.world.level.LevelAccessor; import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.EntityBlock; import net.minecraft.world.level.block.Mirror; import net.minecraft.world.level.block.Rotation; From 49b3e6e4fbf10a88cee685de460c8c012bc7e1c7 Mon Sep 17 00:00:00 2001 From: Taylor <taylordspivey@gmail.com> Date: Fri, 27 Sep 2024 11:28:14 -0500 Subject: [PATCH 11/13] Added a callback to override a blocks pick block result. --- .../mods/kubejs/block/BlockBuilder.java | 12 +++++++ .../kubejs/block/PickBlockCallbackJS.java | 36 +++++++++++++++++++ .../kubejs/block/custom/BasicBlockJS.java | 15 +++++++- gradle.properties | 2 +- 4 files changed, 63 insertions(+), 2 deletions(-) create mode 100644 common/src/main/java/dev/latvian/mods/kubejs/block/PickBlockCallbackJS.java diff --git a/common/src/main/java/dev/latvian/mods/kubejs/block/BlockBuilder.java b/common/src/main/java/dev/latvian/mods/kubejs/block/BlockBuilder.java index 3640d6a8d..ced755073 100644 --- a/common/src/main/java/dev/latvian/mods/kubejs/block/BlockBuilder.java +++ b/common/src/main/java/dev/latvian/mods/kubejs/block/BlockBuilder.java @@ -84,6 +84,7 @@ public abstract class BlockBuilder extends BuilderBase<Block> { public transient float speedFactor = Float.NaN; public transient float jumpFactor = Float.NaN; public Consumer<RandomTickCallbackJS> randomTickCallback; + public Consumer<PickBlockCallbackJS> pickBlockCallback; public Consumer<LootBuilder> lootTable; public JsonObject blockstateJson; public JsonObject modelJson; @@ -788,6 +789,17 @@ public BlockBuilder blockEntity(Consumer<BlockEntityInfo> callback) { return this; } + /** + * Sets random tick callback for this black. + * + * @param pickBlockCallback A callback using a block container and a random. + */ + @Info("Sets pick block callback for this block.") + public BlockBuilder pickBlock(@Nullable Consumer<PickBlockCallbackJS> pickBlockCallback) { + this.pickBlockCallback = pickBlockCallback; + return this; + } + public Block.Properties createProperties() { // FIXME: Implement all the other ex-Material properties //var properties = BlockBehaviour.Properties.of(); diff --git a/common/src/main/java/dev/latvian/mods/kubejs/block/PickBlockCallbackJS.java b/common/src/main/java/dev/latvian/mods/kubejs/block/PickBlockCallbackJS.java new file mode 100644 index 000000000..ab5637baa --- /dev/null +++ b/common/src/main/java/dev/latvian/mods/kubejs/block/PickBlockCallbackJS.java @@ -0,0 +1,36 @@ +package dev.latvian.mods.kubejs.block; + +import net.minecraft.core.BlockPos; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.MinecraftServer; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.block.state.BlockState; + +public class PickBlockCallbackJS { + public BlockGetter block; + public BlockPos pos; + public BlockState state; + public Item item; + + public PickBlockCallbackJS(BlockGetter blockGetter, BlockPos blockPos, BlockState blockState) { + this.block = blockGetter; + this.pos = blockPos; + this.state = blockState; + } + + public BlockState getState() { + return this.state; + } + public BlockPos getBlockPos() { + return this.pos; + } + public BlockGetter getBlockGetter() { + return this.block; + } + public void setPickBlockItem(String item) { + this.item = BuiltInRegistries.ITEM.get(new ResourceLocation(item)); + } +} diff --git a/common/src/main/java/dev/latvian/mods/kubejs/block/custom/BasicBlockJS.java b/common/src/main/java/dev/latvian/mods/kubejs/block/custom/BasicBlockJS.java index 8530a10e2..6c4992cd4 100644 --- a/common/src/main/java/dev/latvian/mods/kubejs/block/custom/BasicBlockJS.java +++ b/common/src/main/java/dev/latvian/mods/kubejs/block/custom/BasicBlockJS.java @@ -4,6 +4,7 @@ import dev.latvian.mods.kubejs.block.BlockBuilder; import dev.latvian.mods.kubejs.block.BlockRightClickedEventJS; import dev.latvian.mods.kubejs.block.KubeJSBlockProperties; +import dev.latvian.mods.kubejs.block.PickBlockCallbackJS; import dev.latvian.mods.kubejs.block.RandomTickCallbackJS; import dev.latvian.mods.kubejs.block.callbacks.AfterEntityFallenOnBlockCallbackJS; import dev.latvian.mods.kubejs.block.callbacks.BlockExplodedCallbackJS; @@ -32,6 +33,7 @@ import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; import net.minecraft.world.item.context.BlockPlaceContext; import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.Explosion; @@ -106,6 +108,7 @@ public BasicBlockJS(BlockBuilder p) { blockBuilder = p; shape = BlockBuilder.createShape(p.customShape); + var blockState = stateDefinition.any(); this.shapeMap = p.getShapeMap(blockState.getProperties()); if (blockBuilder.defaultStateModification != null) { @@ -267,7 +270,7 @@ public ItemStack pickupBlock(LevelAccessor levelAccessor, BlockPos blockPos, Blo return SimpleWaterloggedBlock.super.pickupBlock(levelAccessor, blockPos, blockState); } - return ItemStack.EMPTY; + return Items.STONE.getDefaultInstance(); } @Override @@ -383,4 +386,14 @@ public void setPlacedBy(Level level, BlockPos blockPos, BlockState blockState, @ e.placerId = livingEntity.getUUID(); } } + + @Override + public ItemStack getCloneItemStack(BlockGetter blockGetter, BlockPos blockPos, BlockState blockState) { + if(blockBuilder.pickBlockCallback != null) { + var callback = new PickBlockCallbackJS(blockGetter, blockPos, blockState); + safeCallback(blockBuilder.pickBlockCallback, callback, "Error while getting pick block item "); + if(callback.item != null) return new ItemStack(callback.item); + } + return super.getCloneItemStack(blockGetter, blockPos, blockState); + } } \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 254eddf22..6dc255a7b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,7 +3,7 @@ org.gradle.daemon=false mod_id=kubejs archives_base_name=kubejs mod_name=KubeJS -mod_version=2001.6.5 +mod_version=2001.6.5-custom-0.4 maven_group=dev.latvian.mods mod_author=LatvianModder curseforge_id=238086 From bd5c99c000cb209f6c556e1cb55edf1102fa642b Mon Sep 17 00:00:00 2001 From: Taylor <taylordspivey@gmail.com> Date: Fri, 27 Sep 2024 11:39:49 -0500 Subject: [PATCH 12/13] Cleanup. --- .../mods/kubejs/block/BlockBuilder.java | 57 ------------------- .../kubejs/block/custom/BasicBlockJS.java | 13 +---- 2 files changed, 1 insertion(+), 69 deletions(-) diff --git a/common/src/main/java/dev/latvian/mods/kubejs/block/BlockBuilder.java b/common/src/main/java/dev/latvian/mods/kubejs/block/BlockBuilder.java index ced755073..05305a88a 100644 --- a/common/src/main/java/dev/latvian/mods/kubejs/block/BlockBuilder.java +++ b/common/src/main/java/dev/latvian/mods/kubejs/block/BlockBuilder.java @@ -515,23 +515,6 @@ public BlockBuilder box(double x0, double y0, double z0, double x1, double y1, d return box(x0, y0, z0, x1, y1, z1, true); } - @Info("Set the shape of the block.") - public BlockBuilder box(Map<String, Object> condition, double x0, double y0, double z0, double x1, double y1, double z1) { - return box(condition, x0, y0, z0, x1, y1, z1, true); - } - - @Info("Crates a callback for the shape of the block. '.box' will set be used if not present.") - public BlockBuilder box(Map<String, Object> condition, double x0, double y0, double z0, double x1, double y1, double z1, boolean scale16) { - List<AABB> cubes = shapeMap.getOrDefault(condition, new ArrayList<>()); - if (scale16) { - cubes.add(new AABB(x0 / 16D, y0 / 16D, z0 / 16D, x1 / 16D, y1 / 16D, z1 / 16D)); - } else { - cubes.add(new AABB(x0, y0, z0, x1, y1, z1)); - } - shapeMap.put(condition, cubes); - return this; - } - public static VoxelShape createShape(List<AABB> boxes) { if (boxes.isEmpty()) { return Shapes.block(); @@ -869,44 +852,4 @@ public Block.Properties createProperties() { return properties; } - - public Map<Map<String, Object>, VoxelShape> getShapeMap(Collection<Property<?>> properties) { - final Map<Map<String, Object>, List<AABB>>[] cubeMap = new Map[]{new HashMap<Map<String, Object>, List<AABB>>()}; - properties.forEach(property -> { - if(cubeMap[0].isEmpty()) { - property.getPossibleValues().forEach(value -> { - Map<String, Object> propMap = new HashMap<>(); - propMap.put(property.getName(), value); - cubeMap[0].put(propMap, new ArrayList<>()); - }); - } - else { - var oldMap = cubeMap[0]; - cubeMap[0] = new HashMap<>(); - oldMap.forEach((k,v) -> { - property.getPossibleValues().forEach(value -> { - Map<String, Object> propMap = new HashMap<>(k); - propMap.put(property.getName(), value); - cubeMap[0].put(propMap, v); - }); - }); - } - }); - cubeMap[0].forEach((cubeMapKey,cubeMapValue) -> { - shapeMap.forEach((shapeMapKey,shapeMapValue) -> { - if(shapeMapKey.entrySet().stream().allMatch(entry -> compareValue(entry.getValue(),cubeMapKey.get(entry.getKey())))) cubeMapValue.addAll(shapeMapValue); - }); - }); - final Map<Map<String, Object>, VoxelShape> voxelShapeMap = new HashMap<>(); - cubeMap[0].forEach((cubeMapKey,cubeMapValue) -> voxelShapeMap.put(cubeMapKey,BlockBuilder.createShape(cubeMapValue))); - return voxelShapeMap; - } - private boolean compareValue(Object o1, Object o2) { - if(o1.getClass() == Double.class || o1.getClass() == Float.class || o1.getClass() == Integer.class) { - if(o2.getClass() == Double.class || o2.getClass() == Float.class || o2.getClass() == Integer.class) - return ((Number) o1).doubleValue() == ((Number) o2).doubleValue(); - } - else return o1.equals(o2); - return false; - } } \ No newline at end of file diff --git a/common/src/main/java/dev/latvian/mods/kubejs/block/custom/BasicBlockJS.java b/common/src/main/java/dev/latvian/mods/kubejs/block/custom/BasicBlockJS.java index 6c4992cd4..568be0951 100644 --- a/common/src/main/java/dev/latvian/mods/kubejs/block/custom/BasicBlockJS.java +++ b/common/src/main/java/dev/latvian/mods/kubejs/block/custom/BasicBlockJS.java @@ -1,6 +1,5 @@ package dev.latvian.mods.kubejs.block.custom; -import com.mojang.serialization.MapCodec; import dev.latvian.mods.kubejs.block.BlockBuilder; import dev.latvian.mods.kubejs.block.BlockRightClickedEventJS; import dev.latvian.mods.kubejs.block.KubeJSBlockProperties; @@ -40,7 +39,6 @@ import net.minecraft.world.level.Level; import net.minecraft.world.level.LevelAccessor; import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.EntityBlock; import net.minecraft.world.level.block.Mirror; import net.minecraft.world.level.block.Rotation; @@ -51,7 +49,6 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.block.state.properties.BlockStateProperties; -import net.minecraft.world.level.block.state.properties.Property; import net.minecraft.world.level.material.Fluid; import net.minecraft.world.level.material.FluidState; import net.minecraft.world.level.material.Fluids; @@ -65,8 +62,6 @@ import java.util.HashMap; import java.util.Map; import java.util.Optional; -import java.util.concurrent.atomic.AtomicBoolean; -import java.util.concurrent.atomic.AtomicReference; import java.util.function.Consumer; public class BasicBlockJS extends Block implements BlockKJS, SimpleWaterloggedBlock { @@ -101,7 +96,6 @@ public <T extends BlockEntity> BlockEntityTicker<T> getTicker(Level level, Block public final BlockBuilder blockBuilder; public final VoxelShape shape; - public Map<Map<String, Object>, VoxelShape> shapeMap = new HashMap<>(); public BasicBlockJS(BlockBuilder p) { super(p.createProperties()); @@ -110,7 +104,6 @@ public BasicBlockJS(BlockBuilder p) { var blockState = stateDefinition.any(); - this.shapeMap = p.getShapeMap(blockState.getProperties()); if (blockBuilder.defaultStateModification != null) { var callbackJS = new BlockStateModifyCallbackJS(blockState); if (safeCallback(blockBuilder.defaultStateModification, callbackJS, "Error while creating default blockState for block " + p.id)) { @@ -138,11 +131,7 @@ public MutableComponent getName() { @Override @Deprecated public VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { - Map<String, Object> blockPropertyValues = new HashMap<>(); - state.getProperties().forEach((property) -> { - blockPropertyValues.put(property.getName(), state.getValue(property)); - }); - return shapeMap.getOrDefault(blockPropertyValues, shape); + return shape; } @Override From aa5a6eb7a9142f084cc87b57ca80ac9e2a18dd54 Mon Sep 17 00:00:00 2001 From: Taylor <taylordspivey@gmail.com> Date: Fri, 27 Sep 2024 11:44:44 -0500 Subject: [PATCH 13/13] Cleanup. --- .../main/java/dev/latvian/mods/kubejs/block/BlockBuilder.java | 2 -- .../dev/latvian/mods/kubejs/block/custom/BasicBlockJS.java | 3 +-- gradle.properties | 2 +- 3 files changed, 2 insertions(+), 5 deletions(-) diff --git a/common/src/main/java/dev/latvian/mods/kubejs/block/BlockBuilder.java b/common/src/main/java/dev/latvian/mods/kubejs/block/BlockBuilder.java index 05305a88a..32ab7be5f 100644 --- a/common/src/main/java/dev/latvian/mods/kubejs/block/BlockBuilder.java +++ b/common/src/main/java/dev/latvian/mods/kubejs/block/BlockBuilder.java @@ -77,7 +77,6 @@ public abstract class BlockBuilder extends BuilderBase<Block> { public transient String model; public transient BlockItemBuilder itemBuilder; public transient List<AABB> customShape; - public Map<Map<String, Object>, List<AABB>> shapeMap; public transient boolean noCollision; public transient boolean notSolid; public transient float slipperiness = Float.NaN; @@ -124,7 +123,6 @@ public BlockBuilder(ResourceLocation i) { itemBuilder = getOrCreateItemBuilder(); itemBuilder.blockBuilder = this; customShape = new ArrayList<>(); - shapeMap = new HashMap<>(); noCollision = false; notSolid = false; randomTickCallback = null; diff --git a/common/src/main/java/dev/latvian/mods/kubejs/block/custom/BasicBlockJS.java b/common/src/main/java/dev/latvian/mods/kubejs/block/custom/BasicBlockJS.java index 568be0951..4448b67a7 100644 --- a/common/src/main/java/dev/latvian/mods/kubejs/block/custom/BasicBlockJS.java +++ b/common/src/main/java/dev/latvian/mods/kubejs/block/custom/BasicBlockJS.java @@ -102,7 +102,6 @@ public BasicBlockJS(BlockBuilder p) { blockBuilder = p; shape = BlockBuilder.createShape(p.customShape); - var blockState = stateDefinition.any(); if (blockBuilder.defaultStateModification != null) { var callbackJS = new BlockStateModifyCallbackJS(blockState); @@ -259,7 +258,7 @@ public ItemStack pickupBlock(LevelAccessor levelAccessor, BlockPos blockPos, Blo return SimpleWaterloggedBlock.super.pickupBlock(levelAccessor, blockPos, blockState); } - return Items.STONE.getDefaultInstance(); + return ItemStack.EMPTY; } @Override diff --git a/gradle.properties b/gradle.properties index 6dc255a7b..254eddf22 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,7 +3,7 @@ org.gradle.daemon=false mod_id=kubejs archives_base_name=kubejs mod_name=KubeJS -mod_version=2001.6.5-custom-0.4 +mod_version=2001.6.5 maven_group=dev.latvian.mods mod_author=LatvianModder curseforge_id=238086