diff --git a/src/main/java/ru/windcorp/progressia/common/util/MultiLOC.java b/src/main/java/ru/windcorp/progressia/common/util/MultiLOC.java new file mode 100644 index 0000000..b9e67d9 --- /dev/null +++ b/src/main/java/ru/windcorp/progressia/common/util/MultiLOC.java @@ -0,0 +1,25 @@ +package ru.windcorp.progressia.common.util; + +import java.util.HashMap; +import java.util.Map; +import java.util.function.Supplier; + +public class MultiLOC { + + private final Map, LowOverheadCache> caches = new HashMap<>(); + + public MultiLOC addClass(Class clazz, Supplier generator) { + caches.put(clazz, new LowOverheadCache<>(generator)); + return this; + } + + public T grab(Class clazz) { + return clazz.cast(caches.get(clazz).grab()); + } + + @SuppressWarnings("unchecked") + public void release(Object obj) { + ((LowOverheadCache) caches.get(obj.getClass())).release(obj); + } + +} diff --git a/src/main/java/ru/windcorp/progressia/server/world/ImplementedChangeTracker.java b/src/main/java/ru/windcorp/progressia/server/world/ImplementedChangeTracker.java index c681e01..3cb6a8b 100644 --- a/src/main/java/ru/windcorp/progressia/server/world/ImplementedChangeTracker.java +++ b/src/main/java/ru/windcorp/progressia/server/world/ImplementedChangeTracker.java @@ -53,7 +53,7 @@ public class ImplementedChangeTracker implements Changer { Vec3i blockInChunk = Vectors.grab3i(); Coordinates.convertInWorldToInChunk(position, blockInChunk); - world.getChunkByBlock(position).setBlock(blockInChunk, block); + world.getChunkByBlock(position).setBlock(blockInChunk, block, true); Vectors.release(blockInChunk); } diff --git a/src/main/java/ru/windcorp/progressia/server/world/block/UpdateableBlock.java b/src/main/java/ru/windcorp/progressia/server/world/block/UpdateableBlock.java index b76f6da..406f4c9 100644 --- a/src/main/java/ru/windcorp/progressia/server/world/block/UpdateableBlock.java +++ b/src/main/java/ru/windcorp/progressia/server/world/block/UpdateableBlock.java @@ -2,7 +2,7 @@ package ru.windcorp.progressia.server.world.block; import ru.windcorp.progressia.server.world.Changer; -public interface UpdatableBlock { +public interface UpdateableBlock { void update(BlockTickContext context, Changer changer);