diff --git a/core/src/main/java/com/volmit/iris/util/mantle/MantleChunk.java b/core/src/main/java/com/volmit/iris/util/mantle/MantleChunk.java index fe5f0cec7..4f847213b 100644 --- a/core/src/main/java/com/volmit/iris/util/mantle/MantleChunk.java +++ b/core/src/main/java/com/volmit/iris/util/mantle/MantleChunk.java @@ -220,7 +220,9 @@ public class MantleChunk { if (matter == null) { matter = new IrisMatter(16, 16, 16); - sections.set(section, matter); + if (!sections.compareAndSet(section, null, matter)) { + matter = get(section); + } } return matter; diff --git a/core/src/main/java/com/volmit/iris/util/matter/IrisMatter.java b/core/src/main/java/com/volmit/iris/util/matter/IrisMatter.java index d645df076..233a9173e 100644 --- a/core/src/main/java/com/volmit/iris/util/matter/IrisMatter.java +++ b/core/src/main/java/com/volmit/iris/util/matter/IrisMatter.java @@ -25,6 +25,8 @@ import com.volmit.iris.util.json.JSONObject; import com.volmit.iris.util.plugin.VolmitSender; import lombok.Getter; +import java.util.Objects; + public class IrisMatter extends IrisRegistrant implements Matter { protected static final KMap, MatterSlice> slicers = buildSlicers(); @@ -65,6 +67,12 @@ public class IrisMatter extends IrisRegistrant implements Matter { return c; } + @Override + @SuppressWarnings("unchecked") + public MatterSlice slice(Class c) { + return (MatterSlice) sliceMap.computeIfAbsent(c, $ -> Objects.requireNonNull(createSlice(c, this), "Bad slice " + c.getCanonicalName())); + } + @Override public MatterSlice createSlice(Class type, Matter m) { MatterSlice slice = slicers.get(type);