diff --git a/build.gradle.kts b/build.gradle.kts index 7f41632..0917720 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -12,7 +12,7 @@ plugins { // Project properties group = "github.kasuminova.stellarcore" -version = "1.5.15" +version = "1.5.16" // Set the toolchain version to decouple the Java we run Gradle with from the Java used to compile and run the mod java { diff --git a/src/main/java/github/kasuminova/stellarcore/common/mod/Mods.java b/src/main/java/github/kasuminova/stellarcore/common/mod/Mods.java index 219d246..209189f 100644 --- a/src/main/java/github/kasuminova/stellarcore/common/mod/Mods.java +++ b/src/main/java/github/kasuminova/stellarcore/common/mod/Mods.java @@ -14,6 +14,7 @@ public enum Mods { MM( "modularmachinery"), EBWIZARDRY( "ebwizardry"), LIB_NINE( "libnine"), + CUBIC_CHUNKS( "cubicchunks"), MMCE( "modularmachinery", "github.kasuminova.mmce.mixin.MMCEEarlyMixinLoader"), CENSORED_ASM( "loliasm", "zone.rong.loliasm.core.LoliLoadingPlugin"), FERMIUM_OR_BLAHAJ_ASM("normalasm", "mirror.normalasm.core.NormalLoadingPlugin"), diff --git a/src/main/java/github/kasuminova/stellarcore/common/util/BlockPos2IntMap.java b/src/main/java/github/kasuminova/stellarcore/common/util/BlockPos2IntMap.java index b2b710d..37f86c6 100644 --- a/src/main/java/github/kasuminova/stellarcore/common/util/BlockPos2IntMap.java +++ b/src/main/java/github/kasuminova/stellarcore/common/util/BlockPos2IntMap.java @@ -2,13 +2,11 @@ import com.github.bsideup.jabel.Desugar; import com.google.common.collect.Iterators; +import github.kasuminova.stellarcore.common.mod.Mods; import it.unimi.dsi.fastutil.ints.IntCollection; import it.unimi.dsi.fastutil.longs.Long2IntMap; import it.unimi.dsi.fastutil.longs.Long2IntOpenHashMap; -import it.unimi.dsi.fastutil.objects.AbstractObjectSet; -import it.unimi.dsi.fastutil.objects.Object2IntMap; -import it.unimi.dsi.fastutil.objects.ObjectIterator; -import it.unimi.dsi.fastutil.objects.ObjectSet; +import it.unimi.dsi.fastutil.objects.*; import net.minecraft.util.math.BlockPos; import javax.annotation.Nonnull; @@ -22,6 +20,15 @@ public class BlockPos2IntMap implements Object2IntMap { protected EntrySet entrySet = null; protected KeySet keySet = null; + @Nonnull + public static Object2IntMap create() { + // Cubic chunks breaks the height limit. + if (Mods.CUBIC_CHUNKS.loaded()) { + return new Object2IntOpenHashMap<>(); + } + return new BlockPos2IntMap(); + } + @Nonnull @Override @SuppressWarnings({"unchecked", "rawtypes"}) diff --git a/src/main/java/github/kasuminova/stellarcore/common/util/BlockPos2ValueMap.java b/src/main/java/github/kasuminova/stellarcore/common/util/BlockPos2ValueMap.java index 9005b50..c9a91a0 100644 --- a/src/main/java/github/kasuminova/stellarcore/common/util/BlockPos2ValueMap.java +++ b/src/main/java/github/kasuminova/stellarcore/common/util/BlockPos2ValueMap.java @@ -1,8 +1,10 @@ package github.kasuminova.stellarcore.common.util; import com.google.common.collect.Iterators; +import github.kasuminova.stellarcore.common.mod.Mods; import it.unimi.dsi.fastutil.longs.Long2ObjectLinkedOpenHashMap; import it.unimi.dsi.fastutil.longs.Long2ObjectMap; +import it.unimi.dsi.fastutil.objects.Object2ObjectLinkedOpenHashMap; import net.minecraft.util.math.BlockPos; import javax.annotation.Nonnull; @@ -14,6 +16,15 @@ public class BlockPos2ValueMap implements Map { protected EntrySet entrySet = null; protected KeySet keySet = null; + @Nonnull + public static Map create() { + // Cubic chunks breaks the height limit. + if (Mods.CUBIC_CHUNKS.loaded()) { + return new Object2ObjectLinkedOpenHashMap<>(); + } + return new BlockPos2ValueMap<>(); + } + @Override public int size() { return internal.size(); diff --git a/src/main/java/github/kasuminova/stellarcore/common/util/BlockPosSet.java b/src/main/java/github/kasuminova/stellarcore/common/util/BlockPosSet.java index 769adb6..759a467 100644 --- a/src/main/java/github/kasuminova/stellarcore/common/util/BlockPosSet.java +++ b/src/main/java/github/kasuminova/stellarcore/common/util/BlockPosSet.java @@ -1,9 +1,11 @@ package github.kasuminova.stellarcore.common.util; import com.google.common.collect.Iterators; +import github.kasuminova.stellarcore.common.mod.Mods; import it.unimi.dsi.fastutil.longs.LongIterator; import it.unimi.dsi.fastutil.longs.LongOpenHashSet; import it.unimi.dsi.fastutil.longs.LongSet; +import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet; import net.minecraft.util.math.BlockPos; import javax.annotation.Nonnull; @@ -15,6 +17,15 @@ public class BlockPosSet implements Set { protected final LongSet internal = new LongOpenHashSet(); + @Nonnull + public static Set create() { + // Cubic chunks breaks the height limit. + if (Mods.CUBIC_CHUNKS.loaded()) { + return new ObjectOpenHashSet<>(); + } + return new BlockPosSet(); + } + @Override public int size() { return internal.size(); diff --git a/src/main/java/github/kasuminova/stellarcore/mixin/botania/MixinTilePylon.java b/src/main/java/github/kasuminova/stellarcore/mixin/botania/MixinTilePylon.java index 00c006b..8586b08 100644 --- a/src/main/java/github/kasuminova/stellarcore/mixin/botania/MixinTilePylon.java +++ b/src/main/java/github/kasuminova/stellarcore/mixin/botania/MixinTilePylon.java @@ -19,7 +19,7 @@ public class MixinTilePylon { @Unique - private final Map stellar_core$stateCache = new BlockPos2ValueMap<>(); + private final Map stellar_core$stateCache = BlockPos2ValueMap.create(); @Inject(method = "update", at = {@At("HEAD"), @At("RETURN")}) private void injectUpdateStartAndEnd(final CallbackInfo ci) { diff --git a/src/main/java/github/kasuminova/stellarcore/mixin/ic2/MixinEnergyNetLocal.java b/src/main/java/github/kasuminova/stellarcore/mixin/ic2/MixinEnergyNetLocal.java index db8ac7e..a856ed2 100644 --- a/src/main/java/github/kasuminova/stellarcore/mixin/ic2/MixinEnergyNetLocal.java +++ b/src/main/java/github/kasuminova/stellarcore/mixin/ic2/MixinEnergyNetLocal.java @@ -40,7 +40,7 @@ private void injectInit(final CallbackInfo ci) { if (!StellarCoreConfig.PERFORMANCE.industrialCraft2.energyNetLocal) { return; } - this.registeredTiles = new BlockPos2ValueMap<>(); + this.registeredTiles = BlockPos2ValueMap.create(); } // @Inject(method = "getIoTile", at = @At(value = "INVOKE", target = "Ljava/util/Queue;iterator()Ljava/util/Iterator;"), cancellable = true) diff --git a/src/main/java/github/kasuminova/stellarcore/mixin/minecraft/chunktecache/MixinChunk.java b/src/main/java/github/kasuminova/stellarcore/mixin/minecraft/chunktecache/MixinChunk.java index ca108ee..e428754 100644 --- a/src/main/java/github/kasuminova/stellarcore/mixin/minecraft/chunktecache/MixinChunk.java +++ b/src/main/java/github/kasuminova/stellarcore/mixin/minecraft/chunktecache/MixinChunk.java @@ -15,6 +15,8 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import java.util.Set; + @SuppressWarnings("DataFlowIssue") @Mixin(Chunk.class) public class MixinChunk { @@ -24,7 +26,7 @@ public class MixinChunk { private World world; @Unique - private final BlockPosSet stellar_core$invalidTESet = new BlockPosSet(); + private final Set stellar_core$invalidTESet = BlockPosSet.create(); @Inject(method = "createNewTileEntity", at = @At("HEAD"), cancellable = true) private void injectCreateNewTileEntity(final BlockPos pos, final CallbackInfoReturnable cir) { diff --git a/src/main/java/github/kasuminova/stellarcore/mixin/minecraft/chunktemap/MixinChunk.java b/src/main/java/github/kasuminova/stellarcore/mixin/minecraft/chunktemap/MixinChunk.java index c181e93..c74c8d3 100644 --- a/src/main/java/github/kasuminova/stellarcore/mixin/minecraft/chunktemap/MixinChunk.java +++ b/src/main/java/github/kasuminova/stellarcore/mixin/minecraft/chunktemap/MixinChunk.java @@ -29,7 +29,7 @@ private void injectInit(final World worldIn, final int x, final int z, final Cal if (!StellarCoreConfig.PERFORMANCE.vanilla.chunkTEMap) { return; } - this.tileEntities = new BlockPos2ValueMap<>(); + this.tileEntities = BlockPos2ValueMap.create(); } }