diff --git a/build.gradle b/build.gradle index f0314caac..09d93cc4a 100644 --- a/build.gradle +++ b/build.gradle @@ -32,7 +32,7 @@ plugins { } group 'com.volmit.iris' -version '1.7.8-Dumpy' +version '1.7.9' def apiVersion = '1.17' def name = getRootProject().getName() // See settings.gradle def main = 'com.volmit.iris.Iris' diff --git a/src/main/java/com/volmit/iris/Iris.java b/src/main/java/com/volmit/iris/Iris.java index a013ee464..62d7591a2 100644 --- a/src/main/java/com/volmit/iris/Iris.java +++ b/src/main/java/com/volmit/iris/Iris.java @@ -48,38 +48,30 @@ import com.volmit.iris.util.io.InstanceState; import com.volmit.iris.util.io.JarScanner; import com.volmit.iris.util.math.M; import com.volmit.iris.util.math.RNG; -import com.volmit.iris.util.nbt.mca.*; import com.volmit.iris.util.parallel.MultiBurst; import com.volmit.iris.util.plugin.*; import com.volmit.iris.util.reflect.ShadeFix; import com.volmit.iris.util.scheduling.J; -import com.volmit.iris.util.scheduling.Looper; import com.volmit.iris.util.scheduling.Queue; import com.volmit.iris.util.scheduling.ShurikenQueue; import io.papermc.lib.PaperLib; import net.kyori.adventure.platform.bukkit.BukkitAudiences; import net.kyori.adventure.text.serializer.ComponentSerializer; -import net.minecraft.world.level.chunk.storage.RegionFile; import org.bukkit.Bukkit; -import org.bukkit.Material; -import org.bukkit.block.data.BlockData; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.event.Event; import org.bukkit.event.HandlerList; import org.bukkit.event.Listener; -import org.bukkit.event.block.BlockDamageEvent; import org.bukkit.generator.ChunkGenerator; import org.bukkit.plugin.Plugin; -import org.checkerframework.checker.units.qual.K; import java.io.*; import java.lang.annotation.Annotation; import java.net.URL; import java.util.Date; import java.util.Map; -import java.util.Set; @SuppressWarnings("CanBeFinal") public class Iris extends VolmitPlugin implements Listener { @@ -116,139 +108,8 @@ public class Iris extends VolmitPlugin implements Listener { IO.delete(new File("iris")); installDataPacks(); fixShading(); - (new Looper() { - protected long loop() { - File ff = Iris.instance.getDataFolderNoCreate("dump"); - if (ff.exists() && ff.isDirectory() && ff.listFiles().length == 0) - Iris.dump(); - return 10000L; - } - }).start(); } - private void testmca() { - try - { - int forceBits = 5; - int possibilities = (int) (Math.pow(2, forceBits) - 1); - KList bp = new KList<>(); - Set bf = new KSet<>(); - - while(bp.size() < possibilities) - { - BlockData b = null; - - while(b == null) - { - try - { - b = Material.values()[RNG.r.i(Material.values().length-1)].createBlockData(); - } - - catch(Throwable e) - { - - } - } - - bp.addIfMissing(b); - } - - MCAFile file = new MCAFile(0, 0); - for(int cx = 0; cx < 32; cx++) - { - for(int cz = 0; cz < 32; cz++) - { - Chunk c = Chunk.newChunk(); - - for(int i = 0; i < 16; i++) - { - for(int j = 0; j < 16; j++) - { - for(int k = 0; k < 16; k++) - { - BlockData b = bp.getRandom(); - c.setBlockStateAt(i,j,k, NBTWorld.getCompound(b), false); - } - } - } - - file.setChunk(cx, cz, c); - } - } - - try { - File f = new File("r.0.0.mca"); - Iris.info("Write " + MCAUtil.write(file, f) + " chunks"); - file = MCAUtil.read(f); - - for(int i = 0; i < 1024; i++) { - Chunk c = file.getChunks().get(i); - - if (c == null) { - Iris.error("Missing Chunk: " + i); - continue; - } - - Section s = c.getSection(0); - - if (s == null) - { - Iris.error("Missing section 0 in chunk: " + i); - continue; - } - - for(int a = 0; a < 16; a++) - { - for(int b = 0; b < 16; b++) - { - for(int ca = 0; ca < 16; ca++) - { - BlockData data = NBTWorld.getBlockData(s.getBlockStateAt(a, b, ca)); - bf.add(data); - } - } - } - } - - Iris.info("Read .. OK?"); - - Iris.info("Possibilities: " + bp.size()); - Iris.info("Read Possibss: " + bf.size()); - int match = 0; - for(BlockData i : bp) - { - if(bf.contains(i)) - { - match++; - } - - else - { - Iris.warn("Couldn't find preset " + i.getAsString(true) + " in any section"); - } - } - - for(BlockData i : bf) - { - if(!bp.contains(i)) - { - Iris.warn("Forign block data " + i.getAsString(true) + "! (ignore leaves, they are modded by us)"); - } - } - Iris.info("Matched: " + match); - } catch (IOException e) { - e.printStackTrace(); - } - } - - catch(Throwable ee) - { - ee.printStackTrace(); - } - } - - @SuppressWarnings("unchecked") private void enable() { audiences = BukkitAudiences.create(this); sender = new VolmitSender(Bukkit.getConsoleSender()); @@ -261,7 +122,6 @@ public class Iris extends VolmitPlugin implements Listener { configWatcher = new FileWatcher(getDataFile("settings.json")); services.values().forEach(IrisService::onEnable); services.values().forEach(this::registerListener); - J.s(this::testmca, 20); } public void postShutdown(Runnable r) { diff --git a/src/main/java/com/volmit/iris/core/decrees/DecIris.java b/src/main/java/com/volmit/iris/core/decrees/DecIris.java index 1bb668ba2..c14854b6c 100644 --- a/src/main/java/com/volmit/iris/core/decrees/DecIris.java +++ b/src/main/java/com/volmit/iris/core/decrees/DecIris.java @@ -121,7 +121,6 @@ public class DecIris implements DecreeExecutor { case ">>" -> v = value1 >> value2; case "<<" -> v = value1 << value2; } - ; if (v == null) { sender().sendMessage(C.RED + "The operator you entered: (" + operator + ") is invalid!"); return; diff --git a/src/main/java/com/volmit/iris/core/nms/INMSBinding.java b/src/main/java/com/volmit/iris/core/nms/INMSBinding.java index 731852fdd..1e02f711f 100644 --- a/src/main/java/com/volmit/iris/core/nms/INMSBinding.java +++ b/src/main/java/com/volmit/iris/core/nms/INMSBinding.java @@ -18,6 +18,7 @@ package com.volmit.iris.core.nms; +import com.volmit.iris.util.nbt.mca.palette.BiomeContainer; import com.volmit.iris.util.nbt.mca.palette.PaletteAccess; import com.volmit.iris.util.nbt.tag.CompoundTag; import org.bukkit.Location; @@ -64,6 +65,10 @@ public interface INMSBinding { int getBiomeId(Biome biome); + BiomeContainer newBiomeContainer(int min, int max, int[] data); + + BiomeContainer newBiomeContainer(int min, int max); + default World createWorld(WorldCreator c) { return c.createWorld(); } diff --git a/src/main/java/com/volmit/iris/core/nms/v17_1/NMSBinding17_1.java b/src/main/java/com/volmit/iris/core/nms/v17_1/NMSBinding17_1.java index 71472740b..c0161633e 100644 --- a/src/main/java/com/volmit/iris/core/nms/v17_1/NMSBinding17_1.java +++ b/src/main/java/com/volmit/iris/core/nms/v17_1/NMSBinding17_1.java @@ -56,11 +56,13 @@ import org.bukkit.craftbukkit.v1_17_R1.block.data.CraftBlockData; import org.bukkit.craftbukkit.v1_17_R1.entity.CraftEntity; import org.bukkit.entity.EntityType; import org.bukkit.generator.ChunkGenerator; +import org.jetbrains.annotations.NotNull; import java.io.*; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.IdentityHashMap; +import java.util.Iterator; import java.util.List; import java.util.concurrent.atomic.AtomicInteger; @@ -69,6 +71,7 @@ public class NMSBinding17_1 implements INMSBinding { private final KMap baseBiomeCache = new KMap<>(); private final AtomicCache> registryCache = new AtomicCache<>(); private final AtomicCache> globalCache = new AtomicCache<>(); + private final AtomicCache> biomeMapCache = new AtomicCache<>(); private Field biomeStorageCache = null; public boolean supportsDataPacks() { @@ -90,14 +93,14 @@ public class NMSBinding17_1 implements INMSBinding { List d = (List) df.get(blockData); return new IdMapper<>(c, d, b); }); - Palette global = globalCache.aquireNasty(() -> new GlobalPalette<>(registry, ((CraftBlockData)AIR).getState())); + Palette global = globalCache.aquireNasty(() -> new GlobalPalette<>(registry, ((CraftBlockData) AIR).getState())); PalettedContainer container = new PalettedContainer<>(global, registry, - i -> ((CraftBlockData)NBTWorld.getBlockData(i)).getState(), + i -> ((CraftBlockData) NBTWorld.getBlockData(i)).getState(), i -> NBTWorld.getCompound(CraftBlockData.fromData(i)), ((CraftBlockData) AIR).getState()); return new WrappedPalettedContainer<>(container, i -> NBTWorld.getCompound(CraftBlockData.fromData(i)), - i -> ((CraftBlockData)NBTWorld.getBlockData(i)).getState()); + i -> ((CraftBlockData) NBTWorld.getBlockData(i)).getState()); } private Object getBiomeStorage(ChunkGenerator.BiomeGrid g) { @@ -383,6 +386,58 @@ public class NMSBinding17_1 implements INMSBinding { return biome.ordinal(); } + private IdMap getBiomeMapping() { + return biomeMapCache.aquire(() -> new IdMap<>() { + @NotNull + @Override + public Iterator iterator() { + return getCustomBiomeRegistry().iterator(); + } + + @Override + public int getId(BiomeBase paramT) { + return getCustomBiomeRegistry().getId(paramT); + } + + @Override + public BiomeBase byId(int paramInt) { + return getCustomBiomeRegistry().fromId(paramInt); + } + }); + } + + @Override + public BiomeContainer newBiomeContainer(int min, int max) { + ChunkBiomeContainer base = new ChunkBiomeContainer<>(getBiomeMapping(), min, max); + return getBiomeContainerInterface(getBiomeMapping(), base); + } + + @Override + public BiomeContainer newBiomeContainer(int min, int max, int[] data) { + ChunkBiomeContainer base = new ChunkBiomeContainer<>(getBiomeMapping(), min, max, data); + return getBiomeContainerInterface(getBiomeMapping(), base); + } + + @NotNull + private BiomeContainer getBiomeContainerInterface(IdMap biomeMapping, ChunkBiomeContainer base) { + return new BiomeContainer() { + @Override + public int[] getData() { + return base.writeBiomes(); + } + + @Override + public void setBiome(int x, int y, int z, int id) { + base.setBiome(x, y, z, biomeMapping.byId(id)); + } + + @Override + public int getBiome(int x, int y, int z) { + return biomeMapping.getId(base.getBiome(x, y, z)); + } + }; + } + @Override public int countCustomBiomes() { AtomicInteger a = new AtomicInteger(0); diff --git a/src/main/java/com/volmit/iris/core/nms/v1X/NMSBinding1X.java b/src/main/java/com/volmit/iris/core/nms/v1X/NMSBinding1X.java index 795d9104a..de447e6fe 100644 --- a/src/main/java/com/volmit/iris/core/nms/v1X/NMSBinding1X.java +++ b/src/main/java/com/volmit/iris/core/nms/v1X/NMSBinding1X.java @@ -20,6 +20,7 @@ package com.volmit.iris.core.nms.v1X; import com.volmit.iris.Iris; import com.volmit.iris.core.nms.INMSBinding; +import com.volmit.iris.util.nbt.mca.palette.BiomeContainer; import com.volmit.iris.util.nbt.mca.palette.PaletteAccess; import com.volmit.iris.util.nbt.tag.CompoundTag; import org.bukkit.Location; @@ -135,6 +136,20 @@ public class NMSBinding1X implements INMSBinding { return biome.ordinal(); } + @Override + public BiomeContainer newBiomeContainer(int min, int max) { + Iris.error("Cannot use the custom biome data! Iris is incapable of using MCA generation on this version of minecraft!"); + + return null; + } + + @Override + public BiomeContainer newBiomeContainer(int min, int max, int[] v) { + Iris.error("Cannot use the custom biome data! Iris is incapable of using MCA generation on this version of minecraft!"); + + return null; + } + @Override public int countCustomBiomes() { return 0; diff --git a/src/main/java/com/volmit/iris/core/pregenerator/methods/AsyncPregenMethod.java b/src/main/java/com/volmit/iris/core/pregenerator/methods/AsyncPregenMethod.java index 3c329c9c1..0c935535c 100644 --- a/src/main/java/com/volmit/iris/core/pregenerator/methods/AsyncPregenMethod.java +++ b/src/main/java/com/volmit/iris/core/pregenerator/methods/AsyncPregenMethod.java @@ -113,7 +113,7 @@ public class AsyncPregenMethod implements PregeneratorMethod { @Override public void generateChunk(int x, int z, PregenListener listener) { - if (future.size() > IrisSettings.getThreadCount((int) IrisSettings.get().getConcurrency().getParallelism())) { // TODO: FIX + if (future.size() > IrisSettings.getThreadCount(IrisSettings.get().getConcurrency().getParallelism())) { // TODO: FIX waitForChunks(); } diff --git a/src/main/java/com/volmit/iris/core/pregenerator/methods/MedievalPregenMethod.java b/src/main/java/com/volmit/iris/core/pregenerator/methods/MedievalPregenMethod.java index d796ce182..3372a7aa8 100644 --- a/src/main/java/com/volmit/iris/core/pregenerator/methods/MedievalPregenMethod.java +++ b/src/main/java/com/volmit/iris/core/pregenerator/methods/MedievalPregenMethod.java @@ -95,7 +95,7 @@ public class MedievalPregenMethod implements PregeneratorMethod { @Override public void generateChunk(int x, int z, PregenListener listener) { - if (futures.size() > IrisSettings.getThreadCount((int) IrisSettings.get().getConcurrency().getParallelism())) { + if (futures.size() > IrisSettings.getThreadCount(IrisSettings.get().getConcurrency().getParallelism())) { waitForChunks(); } diff --git a/src/main/java/com/volmit/iris/core/project/loader/IrisData.java b/src/main/java/com/volmit/iris/core/project/loader/IrisData.java index 18d857096..ec315ead2 100644 --- a/src/main/java/com/volmit/iris/core/project/loader/IrisData.java +++ b/src/main/java/com/volmit/iris/core/project/loader/IrisData.java @@ -337,7 +337,7 @@ public class IrisData { } } - String ff = g.toString().substring(1).split("\\Q.\\E")[0]; + String ff = g.substring(1).split("\\Q.\\E")[0]; return ff; } else { Iris.error("Forign file from loader " + f.getPath() + " (loader realm: " + getDataFolder().getPath() + ")"); diff --git a/src/main/java/com/volmit/iris/core/service/PreservationSVC.java b/src/main/java/com/volmit/iris/core/service/PreservationSVC.java index 9628c8b48..c08eb871b 100644 --- a/src/main/java/com/volmit/iris/core/service/PreservationSVC.java +++ b/src/main/java/com/volmit/iris/core/service/PreservationSVC.java @@ -29,8 +29,8 @@ import com.volmit.iris.util.scheduling.Looper; import java.util.concurrent.ExecutorService; public class PreservationSVC implements IrisService { - private KList threads = new KList<>(); - private KList services = new KList<>(); + private final KList threads = new KList<>(); + private final KList services = new KList<>(); private Looper dereferencer; public void register(Thread t) { diff --git a/src/main/java/com/volmit/iris/core/tools/IrisToolbelt.java b/src/main/java/com/volmit/iris/core/tools/IrisToolbelt.java index d185e4427..72954d893 100644 --- a/src/main/java/com/volmit/iris/core/tools/IrisToolbelt.java +++ b/src/main/java/com/volmit/iris/core/tools/IrisToolbelt.java @@ -129,7 +129,7 @@ public class IrisToolbelt { } return pregenerate(task, new HybridPregenMethod(gen.getEngine().getWorld().realWorld(), - IrisSettings.getThreadCount((int) IrisSettings.get().getConcurrency().getParallelism()))); + IrisSettings.getThreadCount(IrisSettings.get().getConcurrency().getParallelism()))); } /** @@ -145,7 +145,7 @@ public class IrisToolbelt { return pregenerate(task, access(world)); } - return pregenerate(task, new HybridPregenMethod(world, IrisSettings.getThreadCount((int) IrisSettings.get().getConcurrency().getParallelism()))); + return pregenerate(task, new HybridPregenMethod(world, IrisSettings.getThreadCount(IrisSettings.get().getConcurrency().getParallelism()))); } /** diff --git a/src/main/java/com/volmit/iris/engine/IrisEngine.java b/src/main/java/com/volmit/iris/engine/IrisEngine.java index 590648584..575fd0fbb 100644 --- a/src/main/java/com/volmit/iris/engine/IrisEngine.java +++ b/src/main/java/com/volmit/iris/engine/IrisEngine.java @@ -397,19 +397,17 @@ public class IrisEngine implements Engine { context.touch(); getEngineData().getStatistics().generatedChunk(); try { - PrecisionStopwatch p = PrecisionStopwatch.start(); Hunk blocks = vblocks.listen((xx, y, zz, t) -> catchBlockUpdates(x + xx, y + getMinHeight(), z + zz, t)); - if (multicore) { + if (getDimension().isDebugChunkCrossSections() && ((x >> 4) % getDimension().getDebugCrossSectionsMod() == 0 || (z >> 4) % getDimension().getDebugCrossSectionsMod() == 0)) { for (int i = 0; i < 16; i++) { for (int j = 0; j < 16; j++) { - blocks.set(i, 0, j, Material.RED_GLAZED_TERRACOTTA.createBlockData()); + blocks.set(i, 0, j, Material.CRYING_OBSIDIAN.createBlockData()); } } } else { - getMantle().generateMatter(x >> 4, z >> 4, multicore); - + getMantle().generateMatter(x >> 4, z >> 4, true); burst().burst(multicore, () -> getTerrainActuator().actuate(x, z, vblocks, multicore), () -> getBiomeActuator().actuate(x, z, vbiomes, multicore) @@ -419,16 +417,12 @@ public class IrisEngine implements Engine { () -> getDecorantActuator().actuate(x, z, blocks, multicore), () -> getRavineModifier().modify(x, z, vblocks, multicore) ); - getPostModifier().modify(x, z, vblocks, multicore); - burst().burst(multicore, - () -> getMantle().insertMatter(x >> 4, z >> 4, BlockData.class, blocks, multicore), + () -> getMantle().insertMatter(x >> 4, z >> 4, BlockData.class, blocks, true), () -> getDepositModifier().modify(x, z, vblocks, multicore) ); } - - getMetrics().getTotal().put(p.getMilliseconds()); generated.incrementAndGet(); recycle(); diff --git a/src/main/java/com/volmit/iris/engine/actuator/IrisTerrainNormalActuator.java b/src/main/java/com/volmit/iris/engine/actuator/IrisTerrainNormalActuator.java index 64341d239..09dce9310 100644 --- a/src/main/java/com/volmit/iris/engine/actuator/IrisTerrainNormalActuator.java +++ b/src/main/java/com/volmit/iris/engine/actuator/IrisTerrainNormalActuator.java @@ -136,7 +136,7 @@ public class IrisTerrainNormalActuator extends EngineAssignedActuator if (i <= he) { depth = he - i; if (blocks == null) { - blocks = biome.generateLayers(realX, realZ, rng, + blocks = biome.generateLayers(getDimension(), realX, realZ, rng, he, he, getData(), diff --git a/src/main/java/com/volmit/iris/engine/data/cache/AtomicCache.java b/src/main/java/com/volmit/iris/engine/data/cache/AtomicCache.java index 1ace0fb27..c53416cbd 100644 --- a/src/main/java/com/volmit/iris/engine/data/cache/AtomicCache.java +++ b/src/main/java/com/volmit/iris/engine/data/cache/AtomicCache.java @@ -51,16 +51,11 @@ public class AtomicCache { } } - public T aquireNasty(NastySupplier t) - { + public T aquireNasty(NastySupplier t) { return aquire(() -> { - try - { + try { return t.get(); - } - - catch(Throwable e) - { + } catch (Throwable e) { return null; } }); diff --git a/src/main/java/com/volmit/iris/engine/modifier/IrisCaveModifier.java b/src/main/java/com/volmit/iris/engine/modifier/IrisCaveModifier.java index a4d6517f2..bbee9f959 100644 --- a/src/main/java/com/volmit/iris/engine/modifier/IrisCaveModifier.java +++ b/src/main/java/com/volmit/iris/engine/modifier/IrisCaveModifier.java @@ -81,8 +81,8 @@ public class IrisCaveModifier extends EngineAssignedModifier { continue; } - KList floor = cave.generateLayers(x + finalI, z + j, rng, cl.getFloor(), cl.getFloor(), getData(), getComplex()); - KList ceiling = cave.generateLayers(x + finalI + 656, z + j - 656, rng, + KList floor = cave.generateLayers(getDimension(), x + finalI, z + j, rng, cl.getFloor(), cl.getFloor(), getData(), getComplex()); + KList ceiling = cave.generateLayers(getDimension(), x + finalI + 656, z + j - 656, rng, he - cl.getCeiling(), he - cl.getCeiling(), getData(), getComplex()); diff --git a/src/main/java/com/volmit/iris/engine/object/biome/IrisBiome.java b/src/main/java/com/volmit/iris/engine/object/biome/IrisBiome.java index 2696a5571..538475740 100644 --- a/src/main/java/com/volmit/iris/engine/object/biome/IrisBiome.java +++ b/src/main/java/com/volmit/iris/engine/object/biome/IrisBiome.java @@ -30,6 +30,7 @@ import com.volmit.iris.engine.object.block.IrisBlockDrops; import com.volmit.iris.engine.object.common.IRare; import com.volmit.iris.engine.object.decoration.IrisDecorator; import com.volmit.iris.engine.object.deposits.IrisDepositGenerator; +import com.volmit.iris.engine.object.dimensional.IrisDimension; import com.volmit.iris.engine.object.feature.IrisFeaturePotential; import com.volmit.iris.engine.object.jigsaw.IrisJigsawStructurePlacement; import com.volmit.iris.engine.object.loot.IrisLootReference; @@ -56,6 +57,7 @@ import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; import lombok.experimental.Accessors; +import org.bukkit.Material; import org.bukkit.block.Biome; import org.bukkit.block.data.BlockData; @@ -65,7 +67,6 @@ import java.awt.*; @Accessors(chain = true) @NoArgsConstructor @AllArgsConstructor - @Desc("Represents a biome in iris. Biomes are placed inside of regions and hold objects.\nA biome consists of layers (block palletes), decorations, objects & generators.") @Data @EqualsAndHashCode(callSuper = false) @@ -88,7 +89,6 @@ public class IrisBiome extends IrisRegistrant implements IRare { @ArrayType(min = 1, type = IrisFeaturePotential.class) private KList features = new KList<>(); - @ArrayType(min = 1, type = IrisEffect.class) @Desc("Effects are ambient effects such as potion effects, random sounds, or even particles around each player. All of these effects are played via packets so two players won't see/hear each others effects.\nDue to performance reasons, effects will play around the player even if where the effect was played is no longer in the biome the player is in.") private KList effects = new KList<>(); @@ -194,6 +194,7 @@ public class IrisBiome extends IrisRegistrant implements IRare { private transient InferredType inferredType; + private static final BlockData BARRIER = Material.BARRIER.createBlockData(); private final transient AtomicCache> genCache = new AtomicCache<>(); private final transient AtomicCache> genCacheMax = new AtomicCache<>(); private final transient AtomicCache> genCacheMin = new AtomicCache<>(); @@ -326,7 +327,7 @@ public class IrisBiome extends IrisRegistrant implements IRare { return childrenCell.aquire(() -> getChildStyle().create(random.nextParallelRNG(sig * 2137), getLoader()).bake().scale(scale).bake()); } - public KList generateLayers(double wx, double wz, RNG random, int maxDepth, int height, IrisData rdata, IrisComplex complex) { + public KList generateLayers(IrisDimension dim, double wx, double wz, RNG random, int maxDepth, int height, IrisData rdata, IrisComplex complex) { if (isLockLayers()) { return generateLockedLayers(wx, wz, random, maxDepth, height, rdata, complex); } @@ -369,6 +370,16 @@ public class IrisBiome extends IrisRegistrant implements IRare { if (data.size() >= maxDepth) { break; } + + if (dim.isExplodeBiomePalettes()) { + for (int j = 0; j < dim.getExplodeBiomePaletteSize(); j++) { + data.add(BARRIER); + + if (data.size() >= maxDepth) { + break; + } + } + } } return data; diff --git a/src/main/java/com/volmit/iris/engine/object/dimensional/IrisDimension.java b/src/main/java/com/volmit/iris/engine/object/dimensional/IrisDimension.java index 2413e3bd7..c11b89f92 100644 --- a/src/main/java/com/volmit/iris/engine/object/dimensional/IrisDimension.java +++ b/src/main/java/com/volmit/iris/engine/object/dimensional/IrisDimension.java @@ -86,6 +86,22 @@ public class IrisDimension extends IrisRegistrant { @Desc("If defined, Iris will place the given jigsaw structure where minecraft should place the overworld stronghold.") private String stronghold; + @Desc("If set to true, Iris will remove chunks to allow visualizing cross sections of chunks easily") + private boolean debugChunkCrossSections = false; + + @Desc("Vertically split up the biome palettes with 3 air blocks in between to visualize them") + private boolean explodeBiomePalettes = false; + + @MinNumber(1) + @MaxNumber(16) + @Desc("Customize the palette height explosion") + private int explodeBiomePaletteSize = 3; + + @MinNumber(2) + @MaxNumber(16) + @Desc("Every X/Z % debugCrossSectionsMod == 0 cuts the chunk") + private int debugCrossSectionsMod = 3; + @Desc("The average distance between strongholds") private int strongholdJumpDistance = 1280; diff --git a/src/main/java/com/volmit/iris/util/math/MathHelper.java b/src/main/java/com/volmit/iris/util/math/MathHelper.java index 808af818f..b7286e4d6 100644 --- a/src/main/java/com/volmit/iris/util/math/MathHelper.java +++ b/src/main/java/com/volmit/iris/util/math/MathHelper.java @@ -26,7 +26,6 @@ import org.bukkit.craftbukkit.libs.org.apache.commons.lang3.math.NumberUtils; import java.util.Random; import java.util.UUID; -import java.util.function.Consumer; import java.util.function.IntPredicate; public class MathHelper { @@ -44,7 +43,7 @@ public class MathHelper { public static final float f = 1.0E-5F; public static final float g = c(2.0F); private static final float n = 10430.378F; - private static final float[] o = (float[]) SystemUtils.a(new float[65536], (var0x) -> { + private static final float[] o = SystemUtils.a(new float[65536], (var0x) -> { for (int var1 = 0; var1 < var0x.length; ++var1) { var0x[var1] = (float) Math.sin((double) var1 * 3.141592653589793D * 2.0D / 65536.0D); } @@ -71,7 +70,7 @@ public class MathHelper { } public static float c(float var0) { - return (float) Math.sqrt((double) var0); + return (float) Math.sqrt(var0); } public static int d(float var0) { @@ -607,7 +606,7 @@ public class MathHelper { int var2; for (var2 = 0; var2 < var0.length; ++var2) { - var0[var2] /= (double) var1; + var0[var2] /= var1; } for (var2 = 0; var2 < var0.length; ++var2) { @@ -658,7 +657,7 @@ public class MathHelper { int var7 = 0; for (int var8 = var4; var8 <= var5; ++var8) { - var6[var7] = Math.max(var0 * StrictMath.log((double) var8) + var2, 0.0D); + var6[var7] = Math.max(var0 * StrictMath.log(var8) + var2, 0.0D); ++var7; } @@ -773,7 +772,7 @@ public class MathHelper { } public static double n(double var0) { - return var0 + (2.0D * (new Random((long) floor(var0 * 3000.0D))).nextDouble() - 1.0D) * 1.0E-7D / 2.0D; + return var0 + (2.0D * (new Random(floor(var0 * 3000.0D))).nextDouble() - 1.0D) * 1.0E-7D / 2.0D; } public static int d(int var0, int var1) { diff --git a/src/main/java/com/volmit/iris/util/nbt/mca/Chunk.java b/src/main/java/com/volmit/iris/util/nbt/mca/Chunk.java index f8b0e4a93..85ee8d4b3 100644 --- a/src/main/java/com/volmit/iris/util/nbt/mca/Chunk.java +++ b/src/main/java/com/volmit/iris/util/nbt/mca/Chunk.java @@ -19,16 +19,15 @@ package com.volmit.iris.util.nbt.mca; import com.volmit.iris.Iris; -import com.volmit.iris.util.io.IO; +import com.volmit.iris.core.nms.INMS; import com.volmit.iris.util.nbt.io.NBTDeserializer; import com.volmit.iris.util.nbt.io.NBTSerializer; import com.volmit.iris.util.nbt.io.NamedTag; +import com.volmit.iris.util.nbt.mca.palette.BiomeContainer; import com.volmit.iris.util.nbt.tag.CompoundTag; import com.volmit.iris.util.nbt.tag.ListTag; -import com.volmit.iris.util.nbt.tag.Tag; import java.io.*; -import java.util.Arrays; import java.util.concurrent.atomic.AtomicReferenceArray; import static com.volmit.iris.util.nbt.mca.LoadFlags.*; @@ -41,7 +40,7 @@ public class Chunk { private int dataVersion; private long lastUpdate; private long inhabitedTime; - private int[] biomes; + private BiomeContainer biomes; private CompoundTag heightMaps; private CompoundTag carvingMasks; private final AtomicReferenceArray
sections = new AtomicReferenceArray<>(16); @@ -83,7 +82,7 @@ public class Chunk { inhabitedTime = level.getLong("InhabitedTime"); lastUpdate = level.getLong("LastUpdate"); if ((loadFlags & BIOMES) != 0) { - biomes = level.getIntArray("Biomes"); + biomes = INMS.get().newBiomeContainer(0, 256, level.getIntArray("Biomes")); } if ((loadFlags & HEIGHTMAPS) != 0) { heightMaps = level.getCompoundTag("Heightmaps"); @@ -201,21 +200,6 @@ public class Chunk { } } - /** - * @deprecated Use {@link #getBiomeAt(int, int, int)} instead - */ - @Deprecated - public int getBiomeAt(int blockX, int blockZ) { - if (dataVersion < 2202) { - if (biomes == null || biomes.length != 256) { - return -1; - } - return biomes[getBlockIndex(blockX, blockZ)]; - } else { - throw new IllegalStateException("cannot get biome using Chunk#getBiomeAt(int,int) from biome data with DataVersion of 2202 or higher, use Chunk#getBiomeAt(int,int,int) instead"); - } - } - /** * Fetches a biome id at a specific block in this chunk. * The coordinates can be absolute coordinates or relative to the region or chunk. @@ -226,44 +210,7 @@ public class Chunk { * @return The biome id or -1 if the biomes are not correctly initialized. */ public synchronized int getBiomeAt(int blockX, int blockY, int blockZ) { - if (dataVersion < 2202) { - if (biomes == null || biomes.length != 256) { - return -1; - } - return biomes[getBlockIndex(blockX, blockZ)]; - } else { - if (biomes == null || biomes.length != 1024) { - return -1; - } - int biomeX = (blockX & 0xF) >> 2; - int biomeY = (blockY & 0xF) >> 2; - int biomeZ = (blockZ & 0xF) >> 2; - - return biomes[getBiomeIndex(biomeX, biomeY, biomeZ)]; - } - } - - @Deprecated - public synchronized void setBiomeAt(int blockX, int blockZ, int biomeID) { - if (dataVersion < 2202) { - if (biomes == null || biomes.length != 256) { - biomes = new int[256]; - Arrays.fill(biomes, -1); - } - biomes[getBlockIndex(blockX, blockZ)] = biomeID; - } else { - if (biomes == null || biomes.length != 1024) { - biomes = new int[1024]; - Arrays.fill(biomes, -1); - } - - int biomeX = (blockX & 0xF) >> 2; - int biomeZ = (blockZ & 0xF) >> 2; - - for (int y = 0; y < 64; y++) { - biomes[getBiomeIndex(biomeX, y, biomeZ)] = biomeID; - } - } + return biomes.getBiome(blockX, blockY, blockZ); } /** @@ -276,23 +223,7 @@ public class Chunk { * When set to a negative number, Minecraft will replace it with the block column's default biome. */ public synchronized void setBiomeAt(int blockX, int blockY, int blockZ, int biomeID) { - if (dataVersion < 2202) { - if (biomes == null || biomes.length != 256) { - biomes = new int[256]; - Arrays.fill(biomes, -1); - } - biomes[getBlockIndex(blockX, blockZ)] = biomeID; - } else { - if (biomes == null || biomes.length != 1024) { - biomes = new int[1024]; - Arrays.fill(biomes, -1); - } - - int biomeX = (blockX & 0xF) >> 2; - int biomeZ = (blockZ & 0xF) >> 2; - - biomes[getBiomeIndex(biomeX, blockY, biomeZ)] = biomeID; - } + biomes.setBiome(blockX, blockY, blockZ, biomeID); } int getBiomeIndex(int biomeX, int biomeY, int biomeZ) { @@ -430,29 +361,6 @@ public class Chunk { this.inhabitedTime = inhabitedTime; } - /** - * @return A matrix of biome IDs for all block columns in this chunk. - */ - public int[] getBiomes() { - return biomes; - } - - /** - * Sets the biome IDs for this chunk. - * - * @param biomes The biome ID matrix of this chunk. Must have a length of 256. - * @throws IllegalArgumentException When the biome matrix does not have a length of 256 - * or is null - */ - public void setBiomes(int[] biomes) { - if (biomes != null) { - if (dataVersion < 2202 && biomes.length != 256 || dataVersion >= 2202 && biomes.length != 1024) { - throw new IllegalArgumentException("biomes array must have a length of " + (dataVersion < 2202 ? "256" : "1024")); - } - } - this.biomes = biomes; - } - /** * @return The height maps of this chunk. */ @@ -646,6 +554,7 @@ public class Chunk { Chunk c = new Chunk(0); c.dataVersion = DEFAULT_DATA_VERSION; c.data = new CompoundTag(); + c.biomes = INMS.get().newBiomeContainer(0, 256); c.data.put("Level", defaultLevel()); c.status = "full"; return c; @@ -665,7 +574,7 @@ public class Chunk { level.putInt("zPos", zPos); level.putLong("LastUpdate", lastUpdate); level.putLong("InhabitedTime", inhabitedTime); - if (biomes != null && biomes.length == 1024) level.putIntArray("Biomes", biomes); + level.putIntArray("Biomes", biomes.getData()); if (heightMaps != null) level.put("Heightmaps", heightMaps); if (carvingMasks != null) level.put("CarvingMasks", carvingMasks); if (entities != null) level.put("Entities", entities); diff --git a/src/main/java/com/volmit/iris/util/nbt/mca/MCAFile.java b/src/main/java/com/volmit/iris/util/nbt/mca/MCAFile.java index 1695bbf47..c8c7986c6 100644 --- a/src/main/java/com/volmit/iris/util/nbt/mca/MCAFile.java +++ b/src/main/java/com/volmit/iris/util/nbt/mca/MCAFile.java @@ -18,7 +18,6 @@ package com.volmit.iris.util.nbt.mca; -import com.volmit.iris.Iris; import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.math.Position2; import com.volmit.iris.util.nbt.tag.CompoundTag; @@ -275,31 +274,10 @@ public class MCAFile { return chunk; } - /** - * @deprecated Use {@link #setBiomeAt(int, int, int, int)} instead - */ - @Deprecated - public void setBiomeAt(int blockX, int blockZ, int biomeID) { - createChunkIfMissing(blockX, blockZ).setBiomeAt(blockX, blockZ, biomeID); - } - public void setBiomeAt(int blockX, int blockY, int blockZ, int biomeID) { createChunkIfMissing(blockX, blockZ).setBiomeAt(blockX, blockY, blockZ, biomeID); } - /** - * @deprecated Use {@link #getBiomeAt(int, int, int)} instead - */ - @Deprecated - public int getBiomeAt(int blockX, int blockZ) { - int chunkX = MCAUtil.blockToChunk(blockX), chunkZ = MCAUtil.blockToChunk(blockZ); - Chunk chunk = getChunk(getChunkIndex(chunkX, chunkZ)); - if (chunk == null) { - return -1; - } - return chunk.getBiomeAt(blockX, blockZ); - } - /** * Fetches the biome id at a specific block. * diff --git a/src/main/java/com/volmit/iris/util/nbt/mca/Section.java b/src/main/java/com/volmit/iris/util/nbt/mca/Section.java index b337f2616..12817eea4 100644 --- a/src/main/java/com/volmit/iris/util/nbt/mca/Section.java +++ b/src/main/java/com/volmit/iris/util/nbt/mca/Section.java @@ -73,24 +73,22 @@ public class Section { * @return The block state data of this block. */ public synchronized CompoundTag getBlockStateAt(int blockX, int blockY, int blockZ) { - synchronized (palette) - { - return palette.getBlock(blockX&15, blockY&15, blockZ&15); + synchronized (palette) { + return palette.getBlock(blockX & 15, blockY & 15, blockZ & 15); } } /** * Attempts to add a block state for a specific block location in this Section. * - * @param blockX The x-coordinate of the block in this Section - * @param blockY The y-coordinate of the block in this Section - * @param blockZ The z-coordinate of the block in this Section - * @param state The block state to be set + * @param blockX The x-coordinate of the block in this Section + * @param blockY The y-coordinate of the block in this Section + * @param blockZ The z-coordinate of the block in this Section + * @param state The block state to be set */ public synchronized void setBlockStateAt(int blockX, int blockY, int blockZ, CompoundTag state, boolean cleanup) { - synchronized (palette) - { - palette.setBlock(blockX&15, blockY&15, blockZ&15, state); + synchronized (palette) { + palette.setBlock(blockX & 15, blockY & 15, blockZ & 15, state); } } @@ -167,8 +165,7 @@ public class Section { data.putByte("Y", (byte) y); if (palette != null) { - synchronized (palette) - { + synchronized (palette) { palette.writeToSection(data); } } diff --git a/src/main/java/com/volmit/iris/util/nbt/mca/palette/BiomeContainer.java b/src/main/java/com/volmit/iris/util/nbt/mca/palette/BiomeContainer.java new file mode 100644 index 000000000..e25ec9b80 --- /dev/null +++ b/src/main/java/com/volmit/iris/util/nbt/mca/palette/BiomeContainer.java @@ -0,0 +1,27 @@ +/* + * Iris is a World Generator for Minecraft Bukkit Servers + * Copyright (c) 2021 Arcane Arts (Volmit Software) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.volmit.iris.util.nbt.mca.palette; + +public interface BiomeContainer { + int[] getData(); + + void setBiome(int x, int y, int z, int id); + + int getBiome(int x, int y, int z); +} diff --git a/src/main/java/com/volmit/iris/util/nbt/mca/palette/BitStorage.java b/src/main/java/com/volmit/iris/util/nbt/mca/palette/BitStorage.java index 921cc77f4..5d41fab0c 100644 --- a/src/main/java/com/volmit/iris/util/nbt/mca/palette/BitStorage.java +++ b/src/main/java/com/volmit/iris/util/nbt/mca/palette/BitStorage.java @@ -23,123 +23,123 @@ import org.apache.commons.lang3.Validate; import java.util.function.IntConsumer; public class BitStorage { - private static final int[] MAGIC = new int[] { - -1, -1, 0, Integer.MIN_VALUE, 0, 0, 1431655765, 1431655765, 0, Integer.MIN_VALUE, - 0, 1, 858993459, 858993459, 0, 715827882, 715827882, 0, 613566756, 613566756, - 0, Integer.MIN_VALUE, 0, 2, 477218588, 477218588, 0, 429496729, 429496729, 0, - 390451572, 390451572, 0, 357913941, 357913941, 0, 330382099, 330382099, 0, 306783378, - 306783378, 0, 286331153, 286331153, 0, Integer.MIN_VALUE, 0, 3, 252645135, 252645135, - 0, 238609294, 238609294, 0, 226050910, 226050910, 0, 214748364, 214748364, 0, - 204522252, 204522252, 0, 195225786, 195225786, 0, 186737708, 186737708, 0, 178956970, - 178956970, 0, 171798691, 171798691, 0, 165191049, 165191049, 0, 159072862, 159072862, - 0, 153391689, 153391689, 0, 148102320, 148102320, 0, 143165576, 143165576, 0, - 138547332, 138547332, 0, Integer.MIN_VALUE, 0, 4, 130150524, 130150524, 0, 126322567, - 126322567, 0, 122713351, 122713351, 0, 119304647, 119304647, 0, 116080197, 116080197, - 0, 113025455, 113025455, 0, 110127366, 110127366, 0, 107374182, 107374182, 0, - 104755299, 104755299, 0, 102261126, 102261126, 0, 99882960, 99882960, 0, 97612893, - 97612893, 0, 95443717, 95443717, 0, 93368854, 93368854, 0, 91382282, 91382282, - 0, 89478485, 89478485, 0, 87652393, 87652393, 0, 85899345, 85899345, 0, - 84215045, 84215045, 0, 82595524, 82595524, 0, 81037118, 81037118, 0, 79536431, - 79536431, 0, 78090314, 78090314, 0, 76695844, 76695844, 0, 75350303, 75350303, - 0, 74051160, 74051160, 0, 72796055, 72796055, 0, 71582788, 71582788, 0, - 70409299, 70409299, 0, 69273666, 69273666, 0, 68174084, 68174084, 0, Integer.MIN_VALUE, - 0, 5 }; - - private final long[] data; - - private final int bits; - - private final long mask; - - private final int size; - - private final int valuesPerLong; - - private final int divideMul; - - private final int divideAdd; - - private final int divideShift; - - public BitStorage(int var0, int var1) { - this(var0, var1, null); - } - - public BitStorage(int var0, int var1, long[] var2) { - Validate.inclusiveBetween(1L, 32L, var0); - this.size = var1; - this.bits = var0; - this.mask = (1L << var0) - 1L; - this.valuesPerLong = (char)(64 / var0); - int var3 = 3 * (this.valuesPerLong - 1); - this.divideMul = MAGIC[var3 + 0]; - this.divideAdd = MAGIC[var3 + 1]; - this.divideShift = MAGIC[var3 + 2]; - int var4 = (var1 + this.valuesPerLong - 1) / this.valuesPerLong; - if (var2 != null) { - if (var2.length != var4) - throw new RuntimeException("NO!"); - this.data = var2; - } else { - this.data = new long[var4]; - } - } - - private int cellIndex(int var0) { - long var1 = Integer.toUnsignedLong(this.divideMul); - long var3 = Integer.toUnsignedLong(this.divideAdd); - return (int)(var0 * var1 + var3 >> 32L >> this.divideShift); - } - - public int getAndSet(int var0, int var1) { - Validate.inclusiveBetween(0L, (this.size - 1), var0); - Validate.inclusiveBetween(0L, this.mask, var1); - int var2 = cellIndex(var0); - long var3 = this.data[var2]; - int var5 = (var0 - var2 * this.valuesPerLong) * this.bits; - int var6 = (int)(var3 >> var5 & this.mask); - this.data[var2] = var3 & (this.mask << var5 ^ 0xFFFFFFFFFFFFFFFFL) | (var1 & this.mask) << var5; - return var6; - } - - public void set(int var0, int var1) { - Validate.inclusiveBetween(0L, (this.size - 1), var0); - Validate.inclusiveBetween(0L, this.mask, var1); - int var2 = cellIndex(var0); - long var3 = this.data[var2]; - int var5 = (var0 - var2 * this.valuesPerLong) * this.bits; - this.data[var2] = var3 & (this.mask << var5 ^ 0xFFFFFFFFFFFFFFFFL) | (var1 & this.mask) << var5; - } - - public int get(int var0) { - Validate.inclusiveBetween(0L, (this.size - 1), var0); - int var1 = cellIndex(var0); - long var2 = this.data[var1]; - int var4 = (var0 - var1 * this.valuesPerLong) * this.bits; - return (int)(var2 >> var4 & this.mask); - } - - public long[] getRaw() { - return this.data; - } - - public int getSize() { - return this.size; - } - - public int getBits() { - return this.bits; - } - - public void getAll(IntConsumer var0) { - int var1 = 0; - for (long var5 : this.data) { - for (int var7 = 0; var7 < this.valuesPerLong; var7++) { - var0.accept((int)(var5 & this.mask)); - var5 >>= this.bits; - if (++var1 >= this.size) - return; - } - } - } + private static final int[] MAGIC = new int[]{ + -1, -1, 0, Integer.MIN_VALUE, 0, 0, 1431655765, 1431655765, 0, Integer.MIN_VALUE, + 0, 1, 858993459, 858993459, 0, 715827882, 715827882, 0, 613566756, 613566756, + 0, Integer.MIN_VALUE, 0, 2, 477218588, 477218588, 0, 429496729, 429496729, 0, + 390451572, 390451572, 0, 357913941, 357913941, 0, 330382099, 330382099, 0, 306783378, + 306783378, 0, 286331153, 286331153, 0, Integer.MIN_VALUE, 0, 3, 252645135, 252645135, + 0, 238609294, 238609294, 0, 226050910, 226050910, 0, 214748364, 214748364, 0, + 204522252, 204522252, 0, 195225786, 195225786, 0, 186737708, 186737708, 0, 178956970, + 178956970, 0, 171798691, 171798691, 0, 165191049, 165191049, 0, 159072862, 159072862, + 0, 153391689, 153391689, 0, 148102320, 148102320, 0, 143165576, 143165576, 0, + 138547332, 138547332, 0, Integer.MIN_VALUE, 0, 4, 130150524, 130150524, 0, 126322567, + 126322567, 0, 122713351, 122713351, 0, 119304647, 119304647, 0, 116080197, 116080197, + 0, 113025455, 113025455, 0, 110127366, 110127366, 0, 107374182, 107374182, 0, + 104755299, 104755299, 0, 102261126, 102261126, 0, 99882960, 99882960, 0, 97612893, + 97612893, 0, 95443717, 95443717, 0, 93368854, 93368854, 0, 91382282, 91382282, + 0, 89478485, 89478485, 0, 87652393, 87652393, 0, 85899345, 85899345, 0, + 84215045, 84215045, 0, 82595524, 82595524, 0, 81037118, 81037118, 0, 79536431, + 79536431, 0, 78090314, 78090314, 0, 76695844, 76695844, 0, 75350303, 75350303, + 0, 74051160, 74051160, 0, 72796055, 72796055, 0, 71582788, 71582788, 0, + 70409299, 70409299, 0, 69273666, 69273666, 0, 68174084, 68174084, 0, Integer.MIN_VALUE, + 0, 5}; + + private final long[] data; + + private final int bits; + + private final long mask; + + private final int size; + + private final int valuesPerLong; + + private final int divideMul; + + private final int divideAdd; + + private final int divideShift; + + public BitStorage(int var0, int var1) { + this(var0, var1, null); + } + + public BitStorage(int var0, int var1, long[] var2) { + Validate.inclusiveBetween(1L, 32L, var0); + this.size = var1; + this.bits = var0; + this.mask = (1L << var0) - 1L; + this.valuesPerLong = (char) (64 / var0); + int var3 = 3 * (this.valuesPerLong - 1); + this.divideMul = MAGIC[var3 + 0]; + this.divideAdd = MAGIC[var3 + 1]; + this.divideShift = MAGIC[var3 + 2]; + int var4 = (var1 + this.valuesPerLong - 1) / this.valuesPerLong; + if (var2 != null) { + if (var2.length != var4) + throw new RuntimeException("NO!"); + this.data = var2; + } else { + this.data = new long[var4]; + } + } + + private int cellIndex(int var0) { + long var1 = Integer.toUnsignedLong(this.divideMul); + long var3 = Integer.toUnsignedLong(this.divideAdd); + return (int) (var0 * var1 + var3 >> 32L >> this.divideShift); + } + + public int getAndSet(int var0, int var1) { + Validate.inclusiveBetween(0L, (this.size - 1), var0); + Validate.inclusiveBetween(0L, this.mask, var1); + int var2 = cellIndex(var0); + long var3 = this.data[var2]; + int var5 = (var0 - var2 * this.valuesPerLong) * this.bits; + int var6 = (int) (var3 >> var5 & this.mask); + this.data[var2] = var3 & (this.mask << var5 ^ 0xFFFFFFFFFFFFFFFFL) | (var1 & this.mask) << var5; + return var6; + } + + public void set(int var0, int var1) { + Validate.inclusiveBetween(0L, (this.size - 1), var0); + Validate.inclusiveBetween(0L, this.mask, var1); + int var2 = cellIndex(var0); + long var3 = this.data[var2]; + int var5 = (var0 - var2 * this.valuesPerLong) * this.bits; + this.data[var2] = var3 & (this.mask << var5 ^ 0xFFFFFFFFFFFFFFFFL) | (var1 & this.mask) << var5; + } + + public int get(int var0) { + Validate.inclusiveBetween(0L, (this.size - 1), var0); + int var1 = cellIndex(var0); + long var2 = this.data[var1]; + int var4 = (var0 - var1 * this.valuesPerLong) * this.bits; + return (int) (var2 >> var4 & this.mask); + } + + public long[] getRaw() { + return this.data; + } + + public int getSize() { + return this.size; + } + + public int getBits() { + return this.bits; + } + + public void getAll(IntConsumer var0) { + int var1 = 0; + for (long var5 : this.data) { + for (int var7 = 0; var7 < this.valuesPerLong; var7++) { + var0.accept((int) (var5 & this.mask)); + var5 >>= this.bits; + if (++var1 >= this.size) + return; + } + } + } } diff --git a/src/main/java/com/volmit/iris/util/nbt/mca/palette/ChunkBiomeContainer.java b/src/main/java/com/volmit/iris/util/nbt/mca/palette/ChunkBiomeContainer.java index 4fc319876..12e260016 100644 --- a/src/main/java/com/volmit/iris/util/nbt/mca/palette/ChunkBiomeContainer.java +++ b/src/main/java/com/volmit/iris/util/nbt/mca/palette/ChunkBiomeContainer.java @@ -18,79 +18,79 @@ package com.volmit.iris.util.nbt.mca.palette; -import net.minecraft.world.level.LevelHeightAccessor; -import net.minecraft.world.level.biome.BiomeBase; -import net.minecraft.world.level.biome.BiomeManager; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import org.bukkit.block.Biome; import java.util.Arrays; public class ChunkBiomeContainer { - private static final Logger LOGGER = LogManager.getLogger(); - private static final int WIDTH_BITS = Mth.ceillog2(16) - 2; - private static final int HORIZONTAL_MASK = (1 << WIDTH_BITS) - 1; - private static final int PACKED_X_LENGTH = 1 + Mth.log2(Mth.smallestEncompassingPowerOfTwo(30000000)); - private static final int PACKED_Z_LENGTH = PACKED_X_LENGTH; - public static final int PACKED_Y_LENGTH = 64 - PACKED_X_LENGTH - PACKED_Z_LENGTH; - public static final int MAX_SIZE = 1 << WIDTH_BITS + WIDTH_BITS + PACKED_Y_LENGTH - 2; - - public final IdMap biomeRegistry; - - private final T[] biomes; - - private final int quartMinY; - - private final int quartHeight; - - protected ChunkBiomeContainer(IdMap registry, int minHeight, int maxHeight, T[] abiomebase) { - this.biomeRegistry = registry; - this.biomes = abiomebase; - this.quartMinY = QuartPos.fromBlock(minHeight); - this.quartHeight = QuartPos.fromBlock(maxHeight) - 1; - } - - public ChunkBiomeContainer(IdMap registry, int minHeight, int maxHeight, int[] aint) { - this(registry, minHeight, maxHeight, (T[])new Object[aint.length]); - int i = -1; - for (int j = 0; j < this.biomes.length; j++) { - int k = aint[j]; - T biomebase = registry.byId(k); - if (biomebase == null) { - if (i == -1) - i = j; - this.biomes[j] = (T)registry.byId(0); - } else { - this.biomes[j] = biomebase; - } - } - if (i != -1) - LOGGER.warn("Invalid biome data received, starting from {}: {}", Integer.valueOf(i), Arrays.toString(aint)); - } + private static final Logger LOGGER = LogManager.getLogger(); + private static final int WIDTH_BITS = Mth.ceillog2(16) - 2; + private static final int HORIZONTAL_MASK = (1 << WIDTH_BITS) - 1; + private static final int PACKED_X_LENGTH = 1 + Mth.log2(Mth.smallestEncompassingPowerOfTwo(30000000)); + private static final int PACKED_Z_LENGTH = PACKED_X_LENGTH; + public static final int PACKED_Y_LENGTH = 64 - PACKED_X_LENGTH - PACKED_Z_LENGTH; + public static final int MAX_SIZE = 1 << WIDTH_BITS + WIDTH_BITS + PACKED_Y_LENGTH - 2; - private static int ceilDiv(int i, int j) { - return (i + j - 1) / j; - } + public final IdMap biomeRegistry; - public int[] writeBiomes() { - int[] aint = new int[this.biomes.length]; - for (int i = 0; i < this.biomes.length; i++) - aint[i] = this.biomeRegistry.getId(this.biomes[i]); - return aint; - } - - public T getBiome(int i, int j, int k) { - int l = i & HORIZONTAL_MASK; - int i1 = Mth.clamp(j - this.quartMinY, 0, this.quartHeight); - int j1 = k & HORIZONTAL_MASK; - return this.biomes[i1 << WIDTH_BITS + WIDTH_BITS | j1 << WIDTH_BITS | l]; - } - - public void setBiome(int i, int j, int k, T biome) { - int l = i & HORIZONTAL_MASK; - int i1 = Mth.clamp(j - this.quartMinY, 0, this.quartHeight); - int j1 = k & HORIZONTAL_MASK; - this.biomes[i1 << WIDTH_BITS + WIDTH_BITS | j1 << WIDTH_BITS | l] = biome; - } + private final T[] biomes; + + private final int quartMinY; + + private final int quartHeight; + + protected ChunkBiomeContainer(IdMap registry, int minHeight, int maxHeight, T[] abiomebase) { + this.biomeRegistry = registry; + this.biomes = abiomebase; + this.quartMinY = QuartPos.fromBlock(minHeight); + this.quartHeight = QuartPos.fromBlock(maxHeight) - 1; + } + + public ChunkBiomeContainer(IdMap registry, int min, int max) { + this(registry, min, max, new int[(1 << WIDTH_BITS + WIDTH_BITS) * ceilDiv(max - min, 4)]); + } + + public ChunkBiomeContainer(IdMap registry, int minHeight, int maxHeight, int[] aint) { + this(registry, minHeight, maxHeight, (T[]) new Object[aint.length]); + int i = -1; + for (int j = 0; j < this.biomes.length; j++) { + int k = aint[j]; + T biomebase = registry.byId(k); + if (biomebase == null) { + if (i == -1) + i = j; + this.biomes[j] = registry.byId(0); + } else { + this.biomes[j] = biomebase; + } + } + if (i != -1) + LOGGER.warn("Invalid biome data received, starting from {}: {}", Integer.valueOf(i), Arrays.toString(aint)); + } + + private static int ceilDiv(int i, int j) { + return (i + j - 1) / j; + } + + public int[] writeBiomes() { + int[] aint = new int[this.biomes.length]; + for (int i = 0; i < this.biomes.length; i++) + aint[i] = this.biomeRegistry.getId(this.biomes[i]); + return aint; + } + + public T getBiome(int i, int j, int k) { + int l = i & HORIZONTAL_MASK; + int i1 = Mth.clamp(j - this.quartMinY, 0, this.quartHeight); + int j1 = k & HORIZONTAL_MASK; + return this.biomes[i1 << WIDTH_BITS + WIDTH_BITS | j1 << WIDTH_BITS | l]; + } + + public void setBiome(int i, int j, int k, T biome) { + int l = i & HORIZONTAL_MASK; + int i1 = Mth.clamp(j - this.quartMinY, 0, this.quartHeight); + int j1 = k & HORIZONTAL_MASK; + this.biomes[i1 << WIDTH_BITS + WIDTH_BITS | j1 << WIDTH_BITS | l] = biome; + } } \ No newline at end of file diff --git a/src/main/java/com/volmit/iris/util/nbt/mca/palette/CountConsumer.java b/src/main/java/com/volmit/iris/util/nbt/mca/palette/CountConsumer.java index e13256217..9db65650e 100644 --- a/src/main/java/com/volmit/iris/util/nbt/mca/palette/CountConsumer.java +++ b/src/main/java/com/volmit/iris/util/nbt/mca/palette/CountConsumer.java @@ -20,5 +20,5 @@ package com.volmit.iris.util.nbt.mca.palette; @FunctionalInterface public interface CountConsumer { - void accept(T paramT, int paramInt); + void accept(T paramT, int paramInt); } diff --git a/src/main/java/com/volmit/iris/util/nbt/mca/palette/CrudeIncrementalIntIdentityHashBiMap.java b/src/main/java/com/volmit/iris/util/nbt/mca/palette/CrudeIncrementalIntIdentityHashBiMap.java index 4d83d0ee5..4886c69d1 100644 --- a/src/main/java/com/volmit/iris/util/nbt/mca/palette/CrudeIncrementalIntIdentityHashBiMap.java +++ b/src/main/java/com/volmit/iris/util/nbt/mca/palette/CrudeIncrementalIntIdentityHashBiMap.java @@ -25,143 +25,143 @@ import java.util.Arrays; import java.util.Iterator; public class CrudeIncrementalIntIdentityHashBiMap implements IdMap { - public static final int NOT_FOUND = -1; - - private static final Object EMPTY_SLOT = null; - - private static final float LOADFACTOR = 0.8F; - - private K[] keys; - - private int[] values; - - private K[] byId; - - private int nextId; - - private int size; - - public CrudeIncrementalIntIdentityHashBiMap(int var0) { - var0 = (int)(var0 / 0.8F); - this.keys = (K[])new Object[var0]; - this.values = new int[var0]; - this.byId = (K[])new Object[var0]; - } - - public int getId(K var0) { - return getValue(indexOf(var0, hash(var0))); - } - + public static final int NOT_FOUND = -1; - public K byId(int var0) { - if (var0 < 0 || var0 >= this.byId.length) - return null; - return this.byId[var0]; - } - - private int getValue(int var0) { - if (var0 == -1) - return -1; - return this.values[var0]; - } - - public boolean contains(K var0) { - return (getId(var0) != -1); - } - - public boolean contains(int var0) { - return (byId(var0) != null); - } - - public int add(K var0) { - int var1 = nextId(); - addMapping(var0, var1); - return var1; - } - - private int nextId() { - while (this.nextId < this.byId.length && this.byId[this.nextId] != null) - this.nextId++; - return this.nextId; - } - - private void grow(int var0) { - K[] var1 = this.keys; - int[] var2 = this.values; - this.keys = (K[])new Object[var0]; - this.values = new int[var0]; - this.byId = (K[])new Object[var0]; - this.nextId = 0; - this.size = 0; - for (int var3 = 0; var3 < var1.length; var3++) { - if (var1[var3] != null) - addMapping(var1[var3], var2[var3]); - } - } - - public void addMapping(K var0, int var1) { - int var2 = Math.max(var1, this.size + 1); - if (var2 >= this.keys.length * 0.8F) { - int i = this.keys.length << 1; - while (i < var1) - i <<= 1; - grow(i); - } - int var3 = findEmpty(hash(var0)); - this.keys[var3] = var0; - this.values[var3] = var1; - this.byId[var1] = var0; - this.size++; - if (var1 == this.nextId) - this.nextId++; - } - - private int hash( K var0) { - return (Mth.murmurHash3Mixer(System.identityHashCode(var0)) & Integer.MAX_VALUE) % this.keys.length; - } - - private int indexOf( K var0, int var1) { - int var2; - for (var2 = var1; var2 < this.keys.length; var2++) { - if (this.keys[var2] == var0) - return var2; - if (this.keys[var2] == EMPTY_SLOT) - return -1; - } - for (var2 = 0; var2 < var1; var2++) { - if (this.keys[var2] == var0) - return var2; - if (this.keys[var2] == EMPTY_SLOT) - return -1; - } - return -1; - } - - private int findEmpty(int var0) { - int var1; - for (var1 = var0; var1 < this.keys.length; var1++) { - if (this.keys[var1] == EMPTY_SLOT) - return var1; - } - for (var1 = 0; var1 < var0; var1++) { - if (this.keys[var1] == EMPTY_SLOT) - return var1; - } - throw new RuntimeException("Overflowed :("); - } - - public Iterator iterator() { - return (Iterator) Iterators.filter((Iterator)Iterators.forArray((Object[])this.byId), Predicates.notNull()); - } - - public void clear() { - Arrays.fill((Object[])this.keys, (Object)null); - Arrays.fill((Object[])this.byId, (Object)null); - this.nextId = 0; - this.size = 0; - } - - public int size() { - return this.size; - } + private static final Object EMPTY_SLOT = null; + + private static final float LOADFACTOR = 0.8F; + + private K[] keys; + + private int[] values; + + private K[] byId; + + private int nextId; + + private int size; + + public CrudeIncrementalIntIdentityHashBiMap(int var0) { + var0 = (int) (var0 / 0.8F); + this.keys = (K[]) new Object[var0]; + this.values = new int[var0]; + this.byId = (K[]) new Object[var0]; + } + + public int getId(K var0) { + return getValue(indexOf(var0, hash(var0))); + } + + + public K byId(int var0) { + if (var0 < 0 || var0 >= this.byId.length) + return null; + return this.byId[var0]; + } + + private int getValue(int var0) { + if (var0 == -1) + return -1; + return this.values[var0]; + } + + public boolean contains(K var0) { + return (getId(var0) != -1); + } + + public boolean contains(int var0) { + return (byId(var0) != null); + } + + public int add(K var0) { + int var1 = nextId(); + addMapping(var0, var1); + return var1; + } + + private int nextId() { + while (this.nextId < this.byId.length && this.byId[this.nextId] != null) + this.nextId++; + return this.nextId; + } + + private void grow(int var0) { + K[] var1 = this.keys; + int[] var2 = this.values; + this.keys = (K[]) new Object[var0]; + this.values = new int[var0]; + this.byId = (K[]) new Object[var0]; + this.nextId = 0; + this.size = 0; + for (int var3 = 0; var3 < var1.length; var3++) { + if (var1[var3] != null) + addMapping(var1[var3], var2[var3]); + } + } + + public void addMapping(K var0, int var1) { + int var2 = Math.max(var1, this.size + 1); + if (var2 >= this.keys.length * 0.8F) { + int i = this.keys.length << 1; + while (i < var1) + i <<= 1; + grow(i); + } + int var3 = findEmpty(hash(var0)); + this.keys[var3] = var0; + this.values[var3] = var1; + this.byId[var1] = var0; + this.size++; + if (var1 == this.nextId) + this.nextId++; + } + + private int hash(K var0) { + return (Mth.murmurHash3Mixer(System.identityHashCode(var0)) & Integer.MAX_VALUE) % this.keys.length; + } + + private int indexOf(K var0, int var1) { + int var2; + for (var2 = var1; var2 < this.keys.length; var2++) { + if (this.keys[var2] == var0) + return var2; + if (this.keys[var2] == EMPTY_SLOT) + return -1; + } + for (var2 = 0; var2 < var1; var2++) { + if (this.keys[var2] == var0) + return var2; + if (this.keys[var2] == EMPTY_SLOT) + return -1; + } + return -1; + } + + private int findEmpty(int var0) { + int var1; + for (var1 = var0; var1 < this.keys.length; var1++) { + if (this.keys[var1] == EMPTY_SLOT) + return var1; + } + for (var1 = 0; var1 < var0; var1++) { + if (this.keys[var1] == EMPTY_SLOT) + return var1; + } + throw new RuntimeException("Overflowed :("); + } + + public Iterator iterator() { + return (Iterator) Iterators.filter(Iterators.forArray((Object[]) this.byId), Predicates.notNull()); + } + + public void clear() { + Arrays.fill(this.keys, null); + Arrays.fill(this.byId, null); + this.nextId = 0; + this.size = 0; + } + + public int size() { + return this.size; + } } diff --git a/src/main/java/com/volmit/iris/util/nbt/mca/palette/GlobalPalette.java b/src/main/java/com/volmit/iris/util/nbt/mca/palette/GlobalPalette.java index 56a8e77d2..89c07f3a9 100644 --- a/src/main/java/com/volmit/iris/util/nbt/mca/palette/GlobalPalette.java +++ b/src/main/java/com/volmit/iris/util/nbt/mca/palette/GlobalPalette.java @@ -23,32 +23,33 @@ import com.volmit.iris.util.nbt.tag.ListTag; import java.util.function.Predicate; public class GlobalPalette implements Palette { - private final IdMapper registry; - - private final T defaultValue; - - public GlobalPalette(IdMapper var0, T var1) { - this.registry = var0; - this.defaultValue = var1; - } - - public int idFor(T var0) { - int var1 = this.registry.getId(var0); - return (var1 == -1) ? 0 : var1; - } - - public boolean maybeHas(Predicate var0) { - return true; - } - - public T valueFor(int var0) { - T var1 = (T)this.registry.byId(var0); - return (var1 == null) ? this.defaultValue : var1; - } - - public int getSize() { - return this.registry.size(); - } - - public void read(ListTag var0) {} + private final IdMapper registry; + + private final T defaultValue; + + public GlobalPalette(IdMapper var0, T var1) { + this.registry = var0; + this.defaultValue = var1; + } + + public int idFor(T var0) { + int var1 = this.registry.getId(var0); + return (var1 == -1) ? 0 : var1; + } + + public boolean maybeHas(Predicate var0) { + return true; + } + + public T valueFor(int var0) { + T var1 = this.registry.byId(var0); + return (var1 == null) ? this.defaultValue : var1; + } + + public int getSize() { + return this.registry.size(); + } + + public void read(ListTag var0) { + } } diff --git a/src/main/java/com/volmit/iris/util/nbt/mca/palette/HashMapPalette.java b/src/main/java/com/volmit/iris/util/nbt/mca/palette/HashMapPalette.java index e8cab650c..a55a03f91 100644 --- a/src/main/java/com/volmit/iris/util/nbt/mca/palette/HashMapPalette.java +++ b/src/main/java/com/volmit/iris/util/nbt/mca/palette/HashMapPalette.java @@ -25,61 +25,61 @@ import java.util.function.Function; import java.util.function.Predicate; public class HashMapPalette implements Palette { - private final IdMapper registry; - - private final CrudeIncrementalIntIdentityHashBiMap values; - - private final PaletteResize resizeHandler; - - private final Function reader; - - private final Function writer; - - private final int bits; - - public HashMapPalette(IdMapper var0, int var1, PaletteResize var2, Function var3, Function var4) { - this.registry = var0; - this.bits = var1; - this.resizeHandler = var2; - this.reader = var3; - this.writer = var4; - this.values = new CrudeIncrementalIntIdentityHashBiMap(1 << var1); - } - - public int idFor(T var0) { - int var1 = this.values.getId(var0); - if (var1 == -1) { - var1 = this.values.add(var0); - if (var1 >= 1 << this.bits) - var1 = this.resizeHandler.onResize(this.bits + 1, var0); - } - return var1; - } - - public boolean maybeHas(Predicate var0) { - for (int var1 = 0; var1 < getSize(); var1++) { - if (var0.test((T)this.values.byId(var1))) - return true; - } - return false; - } + private final IdMapper registry; - public T valueFor(int var0) { - return (T)this.values.byId(var0); - } + private final CrudeIncrementalIntIdentityHashBiMap values; - public int getSize() { - return this.values.size(); - } - - public void read(ListTag var0) { - this.values.clear(); - for (int var1 = 0; var1 < var0.size(); var1++) - this.values.add(this.reader.apply((CompoundTag) var0.get(var1))); - } - - public void write(ListTag var0) { - for (int var1 = 0; var1 < getSize(); var1++) - var0.add(this.writer.apply((T)this.values.byId(var1))); - } + private final PaletteResize resizeHandler; + + private final Function reader; + + private final Function writer; + + private final int bits; + + public HashMapPalette(IdMapper var0, int var1, PaletteResize var2, Function var3, Function var4) { + this.registry = var0; + this.bits = var1; + this.resizeHandler = var2; + this.reader = var3; + this.writer = var4; + this.values = new CrudeIncrementalIntIdentityHashBiMap(1 << var1); + } + + public int idFor(T var0) { + int var1 = this.values.getId(var0); + if (var1 == -1) { + var1 = this.values.add(var0); + if (var1 >= 1 << this.bits) + var1 = this.resizeHandler.onResize(this.bits + 1, var0); + } + return var1; + } + + public boolean maybeHas(Predicate var0) { + for (int var1 = 0; var1 < getSize(); var1++) { + if (var0.test(this.values.byId(var1))) + return true; + } + return false; + } + + public T valueFor(int var0) { + return this.values.byId(var0); + } + + public int getSize() { + return this.values.size(); + } + + public void read(ListTag var0) { + this.values.clear(); + for (int var1 = 0; var1 < var0.size(); var1++) + this.values.add(this.reader.apply((CompoundTag) var0.get(var1))); + } + + public void write(ListTag var0) { + for (int var1 = 0; var1 < getSize(); var1++) + var0.add(this.writer.apply(this.values.byId(var1))); + } } \ No newline at end of file diff --git a/src/main/java/com/volmit/iris/util/nbt/mca/palette/IdMap.java b/src/main/java/com/volmit/iris/util/nbt/mca/palette/IdMap.java index 513f50f72..4a65bfdfd 100644 --- a/src/main/java/com/volmit/iris/util/nbt/mca/palette/IdMap.java +++ b/src/main/java/com/volmit/iris/util/nbt/mca/palette/IdMap.java @@ -19,7 +19,7 @@ package com.volmit.iris.util.nbt.mca.palette; public interface IdMap extends Iterable { - int getId(T paramT); + int getId(T paramT); - T byId(int paramInt); + T byId(int paramInt); } diff --git a/src/main/java/com/volmit/iris/util/nbt/mca/palette/IdMapper.java b/src/main/java/com/volmit/iris/util/nbt/mca/palette/IdMapper.java index 3e2d37bb5..b9c289ebc 100644 --- a/src/main/java/com/volmit/iris/util/nbt/mca/palette/IdMapper.java +++ b/src/main/java/com/volmit/iris/util/nbt/mca/palette/IdMapper.java @@ -27,62 +27,62 @@ import java.util.Iterator; import java.util.List; public class IdMapper implements IdMap { - public static final int DEFAULT = -1; - - private int nextId; - - private final IdentityHashMap tToId; - - private final List idToT; + public static final int DEFAULT = -1; - public IdMapper(IdentityHashMap tToId, List idToT, int nextId) { - this.tToId = tToId; - this.idToT = idToT; - this.nextId = nextId; - } + private int nextId; - public IdMapper() { - this(512); - } - - public IdMapper(int var0) { - this.idToT = Lists.newArrayListWithExpectedSize(var0); - this.tToId = new IdentityHashMap<>(var0); - } - - public void addMapping(T var0, int var1) { - this.tToId.put(var0, Integer.valueOf(var1)); - while (this.idToT.size() <= var1) - this.idToT.add(null); - this.idToT.set(var1, var0); - if (this.nextId <= var1) - this.nextId = var1 + 1; - } - - public void add(T var0) { - addMapping(var0, this.nextId); - } - - public int getId(T var0) { - Integer var1 = this.tToId.get(var0); - return (var1 == null) ? -1 : var1.intValue(); - } + private final IdentityHashMap tToId; - public final T byId(int var0) { - if (var0 >= 0 && var0 < this.idToT.size()) - return this.idToT.get(var0); - return null; - } - - public Iterator iterator() { - return (Iterator) Iterators.filter(this.idToT.iterator(), Predicates.notNull()); - } - - public boolean contains(int var0) { - return (byId(var0) != null); - } - - public int size() { - return this.tToId.size(); - } + private final List idToT; + + public IdMapper(IdentityHashMap tToId, List idToT, int nextId) { + this.tToId = tToId; + this.idToT = idToT; + this.nextId = nextId; + } + + public IdMapper() { + this(512); + } + + public IdMapper(int var0) { + this.idToT = Lists.newArrayListWithExpectedSize(var0); + this.tToId = new IdentityHashMap<>(var0); + } + + public void addMapping(T var0, int var1) { + this.tToId.put(var0, Integer.valueOf(var1)); + while (this.idToT.size() <= var1) + this.idToT.add(null); + this.idToT.set(var1, var0); + if (this.nextId <= var1) + this.nextId = var1 + 1; + } + + public void add(T var0) { + addMapping(var0, this.nextId); + } + + public int getId(T var0) { + Integer var1 = this.tToId.get(var0); + return (var1 == null) ? -1 : var1.intValue(); + } + + public final T byId(int var0) { + if (var0 >= 0 && var0 < this.idToT.size()) + return this.idToT.get(var0); + return null; + } + + public Iterator iterator() { + return Iterators.filter(this.idToT.iterator(), Predicates.notNull()); + } + + public boolean contains(int var0) { + return (byId(var0) != null); + } + + public int size() { + return this.tToId.size(); + } } \ No newline at end of file diff --git a/src/main/java/com/volmit/iris/util/nbt/mca/palette/LinearPalette.java b/src/main/java/com/volmit/iris/util/nbt/mca/palette/LinearPalette.java index e6e0fe3a5..95f8951de 100644 --- a/src/main/java/com/volmit/iris/util/nbt/mca/palette/LinearPalette.java +++ b/src/main/java/com/volmit/iris/util/nbt/mca/palette/LinearPalette.java @@ -25,62 +25,62 @@ import java.util.function.Function; import java.util.function.Predicate; public class LinearPalette implements Palette { - private final IdMapper registry; - - private final T[] values; - - private final PaletteResize resizeHandler; - - private final Function reader; - - private final int bits; - - private int size; - - public LinearPalette(IdMapper var0, int var1, PaletteResize var2, Function var3) { - this.registry = var0; - this.values = (T[])new Object[1 << var1]; - this.bits = var1; - this.resizeHandler = var2; - this.reader = var3; - } - - public int idFor(T var0) { - int var1; - for (var1 = 0; var1 < this.size; var1++) { - if (this.values[var1] == var0) - return var1; - } - var1 = this.size; - if (var1 < this.values.length) { - this.values[var1] = var0; - this.size++; - return var1; - } - return this.resizeHandler.onResize(this.bits + 1, var0); - } - - public boolean maybeHas(Predicate var0) { - for (int var1 = 0; var1 < this.size; var1++) { - if (var0.test(this.values[var1])) - return true; - } - return false; - } + private final IdMapper registry; - public T valueFor(int var0) { - if (var0 >= 0 && var0 < this.size) - return this.values[var0]; - return null; - } - - public int getSize() { - return this.size; - } - - public void read(ListTag var0) { - for (int var1 = 0; var1 < var0.size(); var1++) - this.values[var1] = this.reader.apply((CompoundTag) var0.get(var1)); - this.size = var0.size(); - } + private final T[] values; + + private final PaletteResize resizeHandler; + + private final Function reader; + + private final int bits; + + private int size; + + public LinearPalette(IdMapper var0, int var1, PaletteResize var2, Function var3) { + this.registry = var0; + this.values = (T[]) new Object[1 << var1]; + this.bits = var1; + this.resizeHandler = var2; + this.reader = var3; + } + + public int idFor(T var0) { + int var1; + for (var1 = 0; var1 < this.size; var1++) { + if (this.values[var1] == var0) + return var1; + } + var1 = this.size; + if (var1 < this.values.length) { + this.values[var1] = var0; + this.size++; + return var1; + } + return this.resizeHandler.onResize(this.bits + 1, var0); + } + + public boolean maybeHas(Predicate var0) { + for (int var1 = 0; var1 < this.size; var1++) { + if (var0.test(this.values[var1])) + return true; + } + return false; + } + + public T valueFor(int var0) { + if (var0 >= 0 && var0 < this.size) + return this.values[var0]; + return null; + } + + public int getSize() { + return this.size; + } + + public void read(ListTag var0) { + for (int var1 = 0; var1 < var0.size(); var1++) + this.values[var1] = this.reader.apply((CompoundTag) var0.get(var1)); + this.size = var0.size(); + } } diff --git a/src/main/java/com/volmit/iris/util/nbt/mca/palette/Mth.java b/src/main/java/com/volmit/iris/util/nbt/mca/palette/Mth.java index 0d793d784..9eb5a683c 100644 --- a/src/main/java/com/volmit/iris/util/nbt/mca/palette/Mth.java +++ b/src/main/java/com/volmit/iris/util/nbt/mca/palette/Mth.java @@ -24,710 +24,710 @@ import java.util.function.Consumer; import java.util.function.Supplier; public class Mth { - private static final int BIG_ENOUGH_INT = 1024; - - private static final float BIG_ENOUGH_FLOAT = 1024.0F; - - private static final long UUID_VERSION = 61440L; - - private static final long UUID_VERSION_TYPE_4 = 16384L; - - private static final long UUID_VARIANT = -4611686018427387904L; - - private static final long UUID_VARIANT_2 = -9223372036854775808L; - - public static final float PI = 3.1415927F; - - public static final float HALF_PI = 1.5707964F; - - public static final float TWO_PI = 6.2831855F; - - public static final float DEG_TO_RAD = 0.017453292F; - - public static final float RAD_TO_DEG = 57.295776F; - - public static final float EPSILON = 1.0E-5F; - - public static final float SQRT_OF_TWO = sqrt(2.0F); - - private static final float SIN_SCALE = 10430.378F; - - private static final float[] SIN; - - static { - SIN = (float[])make(new float[65536], var0 -> { - for (int var1 = 0; var1 < var0.length; var1++) - var0[var1] = (float)Math.sin(var1 * Math.PI * 2.0D / 65536.0D); + private static final int BIG_ENOUGH_INT = 1024; + + private static final float BIG_ENOUGH_FLOAT = 1024.0F; + + private static final long UUID_VERSION = 61440L; + + private static final long UUID_VERSION_TYPE_4 = 16384L; + + private static final long UUID_VARIANT = -4611686018427387904L; + + private static final long UUID_VARIANT_2 = -9223372036854775808L; + + public static final float PI = 3.1415927F; + + public static final float HALF_PI = 1.5707964F; + + public static final float TWO_PI = 6.2831855F; + + public static final float DEG_TO_RAD = 0.017453292F; + + public static final float RAD_TO_DEG = 57.295776F; + + public static final float EPSILON = 1.0E-5F; + + public static final float SQRT_OF_TWO = sqrt(2.0F); + + private static final float SIN_SCALE = 10430.378F; + + private static final float[] SIN; + + static { + SIN = make(new float[65536], var0 -> { + for (int var1 = 0; var1 < var0.length; var1++) + var0[var1] = (float) Math.sin(var1 * Math.PI * 2.0D / 65536.0D); }); - } + } - public static T make(Supplier var0) { - return var0.get(); - } + public static T make(Supplier var0) { + return var0.get(); + } - public static T make(T var0, Consumer var1) { - var1.accept(var0); - return var0; - } + public static T make(T var0, Consumer var1) { + var1.accept(var0); + return var0; + } - private static final Random RANDOM = new Random(); - - public static float sin(float var0) { - return SIN[(int)(var0 * 10430.378F) & 0xFFFF]; - } - - public static float cos(float var0) { - return SIN[(int)(var0 * 10430.378F + 16384.0F) & 0xFFFF]; - } - - public static float sqrt(float var0) { - return (float)Math.sqrt(var0); - } - - public static int floor(float var0) { - int var1 = (int)var0; - return (var0 < var1) ? (var1 - 1) : var1; - } - - public static int fastFloor(double var0) { - return (int)(var0 + 1024.0D) - 1024; - } - - public static int floor(double var0) { - int var2 = (int)var0; - return (var0 < var2) ? (var2 - 1) : var2; - } - - public static long lfloor(double var0) { - long var2 = (long)var0; - return (var0 < var2) ? (var2 - 1L) : var2; - } - - public static int absFloor(double var0) { - return (int)((var0 >= 0.0D) ? var0 : (-var0 + 1.0D)); - } - - public static float abs(float var0) { - return Math.abs(var0); - } - - public static int abs(int var0) { - return Math.abs(var0); - } - - public static int ceil(float var0) { - int var1 = (int)var0; - return (var0 > var1) ? (var1 + 1) : var1; - } - - public static int ceil(double var0) { - int var2 = (int)var0; - return (var0 > var2) ? (var2 + 1) : var2; - } - - public static byte clamp(byte var0, byte var1, byte var2) { - if (var0 < var1) - return var1; - if (var0 > var2) - return var2; - return var0; - } - - public static int clamp(int var0, int var1, int var2) { - if (var0 < var1) - return var1; - if (var0 > var2) - return var2; - return var0; - } - - public static long clamp(long var0, long var2, long var4) { - if (var0 < var2) - return var2; - if (var0 > var4) - return var4; - return var0; - } - - public static float clamp(float var0, float var1, float var2) { - if (var0 < var1) - return var1; - if (var0 > var2) - return var2; - return var0; - } - - public static double clamp(double var0, double var2, double var4) { - if (var0 < var2) - return var2; - if (var0 > var4) - return var4; - return var0; - } - - public static double clampedLerp(double var0, double var2, double var4) { - if (var4 < 0.0D) - return var0; - if (var4 > 1.0D) - return var2; - return lerp(var4, var0, var2); - } - - public static float clampedLerp(float var0, float var1, float var2) { - if (var2 < 0.0F) - return var0; - if (var2 > 1.0F) - return var1; - return lerp(var2, var0, var1); - } - - public static double absMax(double var0, double var2) { - if (var0 < 0.0D) - var0 = -var0; - if (var2 < 0.0D) - var2 = -var2; - return (var0 > var2) ? var0 : var2; - } - - public static int intFloorDiv(int var0, int var1) { - return Math.floorDiv(var0, var1); - } - - public static int nextInt(Random var0, int var1, int var2) { - if (var1 >= var2) - return var1; - return var0.nextInt(var2 - var1 + 1) + var1; - } - - public static float nextFloat(Random var0, float var1, float var2) { - if (var1 >= var2) - return var1; - return var0.nextFloat() * (var2 - var1) + var1; - } - - public static double nextDouble(Random var0, double var1, double var3) { - if (var1 >= var3) - return var1; - return var0.nextDouble() * (var3 - var1) + var1; - } - - public static double average(long[] var0) { - long var1 = 0L; - for (long var6 : var0) - var1 += var6; - return var1 / var0.length; - } - - public static boolean equal(float var0, float var1) { - return (Math.abs(var1 - var0) < 1.0E-5F); - } - - public static boolean equal(double var0, double var2) { - return (Math.abs(var2 - var0) < 9.999999747378752E-6D); - } - - public static int positiveModulo(int var0, int var1) { - return Math.floorMod(var0, var1); - } - - public static float positiveModulo(float var0, float var1) { - return (var0 % var1 + var1) % var1; - } - - public static double positiveModulo(double var0, double var2) { - return (var0 % var2 + var2) % var2; - } - - public static int wrapDegrees(int var0) { - int var1 = var0 % 360; - if (var1 >= 180) - var1 -= 360; - if (var1 < -180) - var1 += 360; - return var1; - } - - public static float wrapDegrees(float var0) { - float var1 = var0 % 360.0F; - if (var1 >= 180.0F) - var1 -= 360.0F; - if (var1 < -180.0F) - var1 += 360.0F; - return var1; - } - - public static double wrapDegrees(double var0) { - double var2 = var0 % 360.0D; - if (var2 >= 180.0D) - var2 -= 360.0D; - if (var2 < -180.0D) - var2 += 360.0D; - return var2; - } - - public static float degreesDifference(float var0, float var1) { - return wrapDegrees(var1 - var0); - } - - public static float degreesDifferenceAbs(float var0, float var1) { - return abs(degreesDifference(var0, var1)); - } - - public static float rotateIfNecessary(float var0, float var1, float var2) { - float var3 = degreesDifference(var0, var1); - float var4 = clamp(var3, -var2, var2); - return var1 - var4; - } - - public static float approach(float var0, float var1, float var2) { - var2 = abs(var2); - if (var0 < var1) - return clamp(var0 + var2, var0, var1); - return clamp(var0 - var2, var1, var0); - } - - public static float approachDegrees(float var0, float var1, float var2) { - float var3 = degreesDifference(var0, var1); - return approach(var0, var0 + var3, var2); - } - - public static int getInt(String var0, int var1) { - return Integer.valueOf(var0, var1); - } - - public static int getInt(String var0, int var1, int var2) { - return Math.max(var2, getInt(var0, var1)); - } - - public static double getDouble(String var0, double var1) { - try { - return Double.parseDouble(var0); - } catch (Throwable var3) { - return var1; - } - } - - public static double getDouble(String var0, double var1, double var3) { - return Math.max(var3, getDouble(var0, var1)); - } - - public static int smallestEncompassingPowerOfTwo(int var0) { - int var1 = var0 - 1; - var1 |= var1 >> 1; - var1 |= var1 >> 2; - var1 |= var1 >> 4; - var1 |= var1 >> 8; - var1 |= var1 >> 16; - return var1 + 1; - } - - public static boolean isPowerOfTwo(int var0) { - return (var0 != 0 && (var0 & var0 - 1) == 0); - } - - private static final int[] MULTIPLY_DE_BRUIJN_BIT_POSITION = new int[] { - 0, 1, 28, 2, 29, 14, 24, 3, 30, 22, - 20, 15, 25, 17, 4, 8, 31, 27, 13, 23, - 21, 19, 16, 7, 26, 12, 18, 6, 11, 5, - 10, 9 }; - - private static final double ONE_SIXTH = 0.16666666666666666D; - - private static final int FRAC_EXP = 8; - - private static final int LUT_SIZE = 257; - - public static int ceillog2(int var0) { - var0 = isPowerOfTwo(var0) ? var0 : smallestEncompassingPowerOfTwo(var0); - return MULTIPLY_DE_BRUIJN_BIT_POSITION[(int)(var0 * 125613361L >> 27L) & 0x1F]; - } - - public static int log2(int var0) { - return ceillog2(var0) - (isPowerOfTwo(var0) ? 0 : 1); - } - - public static int color(float var0, float var1, float var2) { - return color(floor(var0 * 255.0F), floor(var1 * 255.0F), floor(var2 * 255.0F)); - } - - public static int color(int var0, int var1, int var2) { - int var3 = var0; - var3 = (var3 << 8) + var1; - var3 = (var3 << 8) + var2; - return var3; - } - - public static int colorMultiply(int var0, int var1) { - int var2 = (var0 & 0xFF0000) >> 16; - int var3 = (var1 & 0xFF0000) >> 16; - int var4 = (var0 & 0xFF00) >> 8; - int var5 = (var1 & 0xFF00) >> 8; - int var6 = (var0 & 0xFF) >> 0; - int var7 = (var1 & 0xFF) >> 0; - int var8 = (int)(var2 * var3 / 255.0F); - int var9 = (int)(var4 * var5 / 255.0F); - int var10 = (int)(var6 * var7 / 255.0F); - return var0 & 0xFF000000 | var8 << 16 | var9 << 8 | var10; - } - - public static int colorMultiply(int var0, float var1, float var2, float var3) { - int var4 = (var0 & 0xFF0000) >> 16; - int var5 = (var0 & 0xFF00) >> 8; - int var6 = (var0 & 0xFF) >> 0; - int var7 = (int)(var4 * var1); - int var8 = (int)(var5 * var2); - int var9 = (int)(var6 * var3); - return var0 & 0xFF000000 | var7 << 16 | var8 << 8 | var9; - } - - public static float frac(float var0) { - return var0 - floor(var0); - } - - public static double frac(double var0) { - return var0 - lfloor(var0); - } + private static final Random RANDOM = new Random(); - public static long getSeed(int var0, int var1, int var2) { - long var3 = (var0 * 3129871) ^ var2 * 116129781L ^ var1; - var3 = var3 * var3 * 42317861L + var3 * 11L; - return var3 >> 16L; - } - - public static UUID createInsecureUUID(Random var0) { - long var1 = var0.nextLong() & 0xFFFFFFFFFFFF0FFFL | 0x4000L; - long var3 = var0.nextLong() & 0x3FFFFFFFFFFFFFFFL | Long.MIN_VALUE; - return new UUID(var1, var3); - } - - public static UUID createInsecureUUID() { - return createInsecureUUID(RANDOM); - } - - public static double inverseLerp(double var0, double var2, double var4) { - return (var0 - var2) / (var4 - var2); - } - - public static double atan2(double var0, double var2) { - double var4 = var2 * var2 + var0 * var0; - if (Double.isNaN(var4)) - return Double.NaN; - boolean var6 = (var0 < 0.0D); - if (var6) - var0 = -var0; - boolean var7 = (var2 < 0.0D); - if (var7) - var2 = -var2; - boolean var8 = (var0 > var2); - if (var8) { - double d = var2; - var2 = var0; - var0 = d; - } - double var9 = fastInvSqrt(var4); - var2 *= var9; - var0 *= var9; - double var11 = FRAC_BIAS + var0; - int var13 = (int)Double.doubleToRawLongBits(var11); - double var14 = ASIN_TAB[var13]; - double var16 = COS_TAB[var13]; - double var18 = var11 - FRAC_BIAS; - double var20 = var0 * var16 - var2 * var18; - double var22 = (6.0D + var20 * var20) * var20 * 0.16666666666666666D; - double var24 = var14 + var22; - if (var8) - var24 = 1.5707963267948966D - var24; - if (var7) - var24 = Math.PI - var24; - if (var6) - var24 = -var24; - return var24; - } - - public static float fastInvSqrt(float var0) { - float var1 = 0.5F * var0; - int var2 = Float.floatToIntBits(var0); - var2 = 1597463007 - (var2 >> 1); - var0 = Float.intBitsToFloat(var2); - var0 *= 1.5F - var1 * var0 * var0; - return var0; - } - - public static double fastInvSqrt(double var0) { - double var2 = 0.5D * var0; - long var4 = Double.doubleToRawLongBits(var0); - var4 = 6910469410427058090L - (var4 >> 1L); - var0 = Double.longBitsToDouble(var4); - var0 *= 1.5D - var2 * var0 * var0; - return var0; - } - - public static float fastInvCubeRoot(float var0) { - int var1 = Float.floatToIntBits(var0); - var1 = 1419967116 - var1 / 3; - float var2 = Float.intBitsToFloat(var1); - var2 = 0.6666667F * var2 + 1.0F / 3.0F * var2 * var2 * var0; - var2 = 0.6666667F * var2 + 1.0F / 3.0F * var2 * var2 * var0; - return var2; - } - - private static final double FRAC_BIAS = Double.longBitsToDouble(4805340802404319232L); - - private static final double[] ASIN_TAB = new double[257]; - - private static final double[] COS_TAB = new double[257]; - - static { - for (int var0 = 0; var0 < 257; var0++) { - double var1 = var0 / 256.0D; - double var3 = Math.asin(var1); - COS_TAB[var0] = Math.cos(var3); - ASIN_TAB[var0] = var3; - } - } - - public static int hsvToRgb(float var0, float var1, float var2) { - float var8, var9, var10; - int var11, var12, var13, var3 = (int)(var0 * 6.0F) % 6; - float var4 = var0 * 6.0F - var3; - float var5 = var2 * (1.0F - var1); - float var6 = var2 * (1.0F - var4 * var1); - float var7 = var2 * (1.0F - (1.0F - var4) * var1); - switch (var3) { - case 0: - var8 = var2; - var9 = var7; - var10 = var5; - var11 = clamp((int)(var8 * 255.0F), 0, 255); - var12 = clamp((int)(var9 * 255.0F), 0, 255); - var13 = clamp((int)(var10 * 255.0F), 0, 255); - return var11 << 16 | var12 << 8 | var13; - case 1: - var8 = var6; - var9 = var2; - var10 = var5; - var11 = clamp((int)(var8 * 255.0F), 0, 255); - var12 = clamp((int)(var9 * 255.0F), 0, 255); - var13 = clamp((int)(var10 * 255.0F), 0, 255); - return var11 << 16 | var12 << 8 | var13; - case 2: - var8 = var5; - var9 = var2; - var10 = var7; - var11 = clamp((int)(var8 * 255.0F), 0, 255); - var12 = clamp((int)(var9 * 255.0F), 0, 255); - var13 = clamp((int)(var10 * 255.0F), 0, 255); - return var11 << 16 | var12 << 8 | var13; - case 3: - var8 = var5; - var9 = var6; - var10 = var2; - var11 = clamp((int)(var8 * 255.0F), 0, 255); - var12 = clamp((int)(var9 * 255.0F), 0, 255); - var13 = clamp((int)(var10 * 255.0F), 0, 255); - return var11 << 16 | var12 << 8 | var13; - case 4: - var8 = var7; - var9 = var5; - var10 = var2; - var11 = clamp((int)(var8 * 255.0F), 0, 255); - var12 = clamp((int)(var9 * 255.0F), 0, 255); - var13 = clamp((int)(var10 * 255.0F), 0, 255); - return var11 << 16 | var12 << 8 | var13; - case 5: - var8 = var2; - var9 = var5; - var10 = var6; - var11 = clamp((int)(var8 * 255.0F), 0, 255); - var12 = clamp((int)(var9 * 255.0F), 0, 255); - var13 = clamp((int)(var10 * 255.0F), 0, 255); - return var11 << 16 | var12 << 8 | var13; - } - throw new RuntimeException("Something went wrong when converting from HSV to RGB. Input was " + var0 + ", " + var1 + ", " + var2); - } - - public static int murmurHash3Mixer(int var0) { - var0 ^= var0 >>> 16; - var0 *= -2048144789; - var0 ^= var0 >>> 13; - var0 *= -1028477387; - var0 ^= var0 >>> 16; - return var0; - } - - public static long murmurHash3Mixer(long var0) { - var0 ^= var0 >>> 33L; - var0 *= -49064778989728563L; - var0 ^= var0 >>> 33L; - var0 *= -4265267296055464877L; - var0 ^= var0 >>> 33L; - return var0; - } - - public static double[] cumulativeSum(double... var0) { - float var1 = 0.0F; - for (double var5 : var0) - var1 = (float)(var1 + var5); - int var2; - for (var2 = 0; var2 < var0.length; var2++) - var0[var2] = var0[var2] / var1; - for (var2 = 0; var2 < var0.length; var2++) - var0[var2] = ((var2 == 0) ? 0.0D : var0[var2 - 1]) + var0[var2]; - return var0; - } - - public static int getRandomForDistributionIntegral(Random var0, double[] var1) { - double var2 = var0.nextDouble(); - for (int var4 = 0; var4 < var1.length; var4++) { - if (var2 < var1[var4]) - return var4; - } - return var1.length; - } - - public static double[] binNormalDistribution(double var0, double var2, double var4, int var6, int var7) { - double[] var8 = new double[var7 - var6 + 1]; - int var9 = 0; - for (int var10 = var6; var10 <= var7; var10++) { - var8[var9] = Math.max(0.0D, var0 * - - StrictMath.exp(-(var10 - var4) * (var10 - var4) / 2.0D * var2 * var2)); - var9++; - } - return var8; - } - - public static double[] binBiModalNormalDistribution(double var0, double var2, double var4, double var6, double var8, double var10, int var12, int var13) { - double[] var14 = new double[var13 - var12 + 1]; - int var15 = 0; - for (int var16 = var12; var16 <= var13; var16++) { - var14[var15] = Math.max(0.0D, var0 * - - StrictMath.exp(-(var16 - var4) * (var16 - var4) / 2.0D * var2 * var2) + var6 * - StrictMath.exp(-(var16 - var10) * (var16 - var10) / 2.0D * var8 * var8)); - var15++; - } - return var14; - } - - public static double[] binLogDistribution(double var0, double var2, int var4, int var5) { - double[] var6 = new double[var5 - var4 + 1]; - int var7 = 0; - for (int var8 = var4; var8 <= var5; var8++) { - var6[var7] = Math.max(var0 * StrictMath.log(var8) + var2, 0.0D); - var7++; - } - return var6; - } - - public static float lerp(float var0, float var1, float var2) { - return var1 + var0 * (var2 - var1); - } - - public static double lerp(double var0, double var2, double var4) { - return var2 + var0 * (var4 - var2); - } - - public static double lerp2(double var0, double var2, double var4, double var6, double var8, double var10) { - return lerp(var2, - - lerp(var0, var4, var6), - lerp(var0, var8, var10)); - } - - public static double lerp3(double var0, double var2, double var4, double var6, double var8, double var10, double var12, double var14, double var16, double var18, double var20) { - return lerp(var4, - - lerp2(var0, var2, var6, var8, var10, var12), - lerp2(var0, var2, var14, var16, var18, var20)); - } - - public static double smoothstep(double var0) { - return var0 * var0 * var0 * (var0 * (var0 * 6.0D - 15.0D) + 10.0D); - } - - public static double smoothstepDerivative(double var0) { - return 30.0D * var0 * var0 * (var0 - 1.0D) * (var0 - 1.0D); - } - - public static int sign(double var0) { - if (var0 == 0.0D) - return 0; - return (var0 > 0.0D) ? 1 : -1; - } - - public static float rotLerp(float var0, float var1, float var2) { - return var1 + var0 * wrapDegrees(var2 - var1); - } - - public static float diffuseLight(float var0, float var1, float var2) { - return Math.min(var0 * var0 * 0.6F + var1 * var1 * (3.0F + var1) / 4.0F + var2 * var2 * 0.8F, 1.0F); - } - - @Deprecated - public static float rotlerp(float var0, float var1, float var2) { - float var3 = var1 - var0; - while (var3 < -180.0F) - var3 += 360.0F; - while (var3 >= 180.0F) - var3 -= 360.0F; - return var0 + var2 * var3; - } - - @Deprecated - public static float rotWrap(double var0) { - while (var0 >= 180.0D) - var0 -= 360.0D; - while (var0 < -180.0D) - var0 += 360.0D; - return (float)var0; - } - - public static float triangleWave(float var0, float var1) { - return (Math.abs(var0 % var1 - var1 * 0.5F) - var1 * 0.25F) / var1 * 0.25F; - } - - public static float square(float var0) { - return var0 * var0; - } - - public static double square(double var0) { - return var0 * var0; - } - - public static int square(int var0) { - return var0 * var0; - } - - public static double clampedMap(double var0, double var2, double var4, double var6, double var8) { - return clampedLerp(var6, var8, inverseLerp(var0, var2, var4)); - } - - public static double map(double var0, double var2, double var4, double var6, double var8) { - return lerp(inverseLerp(var0, var2, var4), var6, var8); - } - - public static double wobble(double var0) { - return var0 + (2.0D * (new Random(floor(var0 * 3000.0D))).nextDouble() - 1.0D) * 1.0E-7D / 2.0D; - } - - public static int roundToward(int var0, int var1) { - return (var0 + var1 - 1) / var1 * var1; - } - - public static int randomBetweenInclusive(Random var0, int var1, int var2) { - return var0.nextInt(var2 - var1 + 1) + var1; - } - - public static float randomBetween(Random var0, float var1, float var2) { - return var0.nextFloat() * (var2 - var1) + var1; - } - - public static float normal(Random var0, float var1, float var2) { - return var1 + (float)var0.nextGaussian() * var2; - } - - public static double length(int var0, double var1, int var3) { - return Math.sqrt((var0 * var0) + var1 * var1 + (var3 * var3)); - } + public static float sin(float var0) { + return SIN[(int) (var0 * 10430.378F) & 0xFFFF]; + } + + public static float cos(float var0) { + return SIN[(int) (var0 * 10430.378F + 16384.0F) & 0xFFFF]; + } + + public static float sqrt(float var0) { + return (float) Math.sqrt(var0); + } + + public static int floor(float var0) { + int var1 = (int) var0; + return (var0 < var1) ? (var1 - 1) : var1; + } + + public static int fastFloor(double var0) { + return (int) (var0 + 1024.0D) - 1024; + } + + public static int floor(double var0) { + int var2 = (int) var0; + return (var0 < var2) ? (var2 - 1) : var2; + } + + public static long lfloor(double var0) { + long var2 = (long) var0; + return (var0 < var2) ? (var2 - 1L) : var2; + } + + public static int absFloor(double var0) { + return (int) ((var0 >= 0.0D) ? var0 : (-var0 + 1.0D)); + } + + public static float abs(float var0) { + return Math.abs(var0); + } + + public static int abs(int var0) { + return Math.abs(var0); + } + + public static int ceil(float var0) { + int var1 = (int) var0; + return (var0 > var1) ? (var1 + 1) : var1; + } + + public static int ceil(double var0) { + int var2 = (int) var0; + return (var0 > var2) ? (var2 + 1) : var2; + } + + public static byte clamp(byte var0, byte var1, byte var2) { + if (var0 < var1) + return var1; + if (var0 > var2) + return var2; + return var0; + } + + public static int clamp(int var0, int var1, int var2) { + if (var0 < var1) + return var1; + if (var0 > var2) + return var2; + return var0; + } + + public static long clamp(long var0, long var2, long var4) { + if (var0 < var2) + return var2; + if (var0 > var4) + return var4; + return var0; + } + + public static float clamp(float var0, float var1, float var2) { + if (var0 < var1) + return var1; + if (var0 > var2) + return var2; + return var0; + } + + public static double clamp(double var0, double var2, double var4) { + if (var0 < var2) + return var2; + if (var0 > var4) + return var4; + return var0; + } + + public static double clampedLerp(double var0, double var2, double var4) { + if (var4 < 0.0D) + return var0; + if (var4 > 1.0D) + return var2; + return lerp(var4, var0, var2); + } + + public static float clampedLerp(float var0, float var1, float var2) { + if (var2 < 0.0F) + return var0; + if (var2 > 1.0F) + return var1; + return lerp(var2, var0, var1); + } + + public static double absMax(double var0, double var2) { + if (var0 < 0.0D) + var0 = -var0; + if (var2 < 0.0D) + var2 = -var2; + return (var0 > var2) ? var0 : var2; + } + + public static int intFloorDiv(int var0, int var1) { + return Math.floorDiv(var0, var1); + } + + public static int nextInt(Random var0, int var1, int var2) { + if (var1 >= var2) + return var1; + return var0.nextInt(var2 - var1 + 1) + var1; + } + + public static float nextFloat(Random var0, float var1, float var2) { + if (var1 >= var2) + return var1; + return var0.nextFloat() * (var2 - var1) + var1; + } + + public static double nextDouble(Random var0, double var1, double var3) { + if (var1 >= var3) + return var1; + return var0.nextDouble() * (var3 - var1) + var1; + } + + public static double average(long[] var0) { + long var1 = 0L; + for (long var6 : var0) + var1 += var6; + return var1 / var0.length; + } + + public static boolean equal(float var0, float var1) { + return (Math.abs(var1 - var0) < 1.0E-5F); + } + + public static boolean equal(double var0, double var2) { + return (Math.abs(var2 - var0) < 9.999999747378752E-6D); + } + + public static int positiveModulo(int var0, int var1) { + return Math.floorMod(var0, var1); + } + + public static float positiveModulo(float var0, float var1) { + return (var0 % var1 + var1) % var1; + } + + public static double positiveModulo(double var0, double var2) { + return (var0 % var2 + var2) % var2; + } + + public static int wrapDegrees(int var0) { + int var1 = var0 % 360; + if (var1 >= 180) + var1 -= 360; + if (var1 < -180) + var1 += 360; + return var1; + } + + public static float wrapDegrees(float var0) { + float var1 = var0 % 360.0F; + if (var1 >= 180.0F) + var1 -= 360.0F; + if (var1 < -180.0F) + var1 += 360.0F; + return var1; + } + + public static double wrapDegrees(double var0) { + double var2 = var0 % 360.0D; + if (var2 >= 180.0D) + var2 -= 360.0D; + if (var2 < -180.0D) + var2 += 360.0D; + return var2; + } + + public static float degreesDifference(float var0, float var1) { + return wrapDegrees(var1 - var0); + } + + public static float degreesDifferenceAbs(float var0, float var1) { + return abs(degreesDifference(var0, var1)); + } + + public static float rotateIfNecessary(float var0, float var1, float var2) { + float var3 = degreesDifference(var0, var1); + float var4 = clamp(var3, -var2, var2); + return var1 - var4; + } + + public static float approach(float var0, float var1, float var2) { + var2 = abs(var2); + if (var0 < var1) + return clamp(var0 + var2, var0, var1); + return clamp(var0 - var2, var1, var0); + } + + public static float approachDegrees(float var0, float var1, float var2) { + float var3 = degreesDifference(var0, var1); + return approach(var0, var0 + var3, var2); + } + + public static int getInt(String var0, int var1) { + return Integer.valueOf(var0, var1); + } + + public static int getInt(String var0, int var1, int var2) { + return Math.max(var2, getInt(var0, var1)); + } + + public static double getDouble(String var0, double var1) { + try { + return Double.parseDouble(var0); + } catch (Throwable var3) { + return var1; + } + } + + public static double getDouble(String var0, double var1, double var3) { + return Math.max(var3, getDouble(var0, var1)); + } + + public static int smallestEncompassingPowerOfTwo(int var0) { + int var1 = var0 - 1; + var1 |= var1 >> 1; + var1 |= var1 >> 2; + var1 |= var1 >> 4; + var1 |= var1 >> 8; + var1 |= var1 >> 16; + return var1 + 1; + } + + public static boolean isPowerOfTwo(int var0) { + return (var0 != 0 && (var0 & var0 - 1) == 0); + } + + private static final int[] MULTIPLY_DE_BRUIJN_BIT_POSITION = new int[]{ + 0, 1, 28, 2, 29, 14, 24, 3, 30, 22, + 20, 15, 25, 17, 4, 8, 31, 27, 13, 23, + 21, 19, 16, 7, 26, 12, 18, 6, 11, 5, + 10, 9}; + + private static final double ONE_SIXTH = 0.16666666666666666D; + + private static final int FRAC_EXP = 8; + + private static final int LUT_SIZE = 257; + + public static int ceillog2(int var0) { + var0 = isPowerOfTwo(var0) ? var0 : smallestEncompassingPowerOfTwo(var0); + return MULTIPLY_DE_BRUIJN_BIT_POSITION[(int) (var0 * 125613361L >> 27L) & 0x1F]; + } + + public static int log2(int var0) { + return ceillog2(var0) - (isPowerOfTwo(var0) ? 0 : 1); + } + + public static int color(float var0, float var1, float var2) { + return color(floor(var0 * 255.0F), floor(var1 * 255.0F), floor(var2 * 255.0F)); + } + + public static int color(int var0, int var1, int var2) { + int var3 = var0; + var3 = (var3 << 8) + var1; + var3 = (var3 << 8) + var2; + return var3; + } + + public static int colorMultiply(int var0, int var1) { + int var2 = (var0 & 0xFF0000) >> 16; + int var3 = (var1 & 0xFF0000) >> 16; + int var4 = (var0 & 0xFF00) >> 8; + int var5 = (var1 & 0xFF00) >> 8; + int var6 = (var0 & 0xFF) >> 0; + int var7 = (var1 & 0xFF) >> 0; + int var8 = (int) (var2 * var3 / 255.0F); + int var9 = (int) (var4 * var5 / 255.0F); + int var10 = (int) (var6 * var7 / 255.0F); + return var0 & 0xFF000000 | var8 << 16 | var9 << 8 | var10; + } + + public static int colorMultiply(int var0, float var1, float var2, float var3) { + int var4 = (var0 & 0xFF0000) >> 16; + int var5 = (var0 & 0xFF00) >> 8; + int var6 = (var0 & 0xFF) >> 0; + int var7 = (int) (var4 * var1); + int var8 = (int) (var5 * var2); + int var9 = (int) (var6 * var3); + return var0 & 0xFF000000 | var7 << 16 | var8 << 8 | var9; + } + + public static float frac(float var0) { + return var0 - floor(var0); + } + + public static double frac(double var0) { + return var0 - lfloor(var0); + } + + public static long getSeed(int var0, int var1, int var2) { + long var3 = (var0 * 3129871) ^ var2 * 116129781L ^ var1; + var3 = var3 * var3 * 42317861L + var3 * 11L; + return var3 >> 16L; + } + + public static UUID createInsecureUUID(Random var0) { + long var1 = var0.nextLong() & 0xFFFFFFFFFFFF0FFFL | 0x4000L; + long var3 = var0.nextLong() & 0x3FFFFFFFFFFFFFFFL | Long.MIN_VALUE; + return new UUID(var1, var3); + } + + public static UUID createInsecureUUID() { + return createInsecureUUID(RANDOM); + } + + public static double inverseLerp(double var0, double var2, double var4) { + return (var0 - var2) / (var4 - var2); + } + + public static double atan2(double var0, double var2) { + double var4 = var2 * var2 + var0 * var0; + if (Double.isNaN(var4)) + return Double.NaN; + boolean var6 = (var0 < 0.0D); + if (var6) + var0 = -var0; + boolean var7 = (var2 < 0.0D); + if (var7) + var2 = -var2; + boolean var8 = (var0 > var2); + if (var8) { + double d = var2; + var2 = var0; + var0 = d; + } + double var9 = fastInvSqrt(var4); + var2 *= var9; + var0 *= var9; + double var11 = FRAC_BIAS + var0; + int var13 = (int) Double.doubleToRawLongBits(var11); + double var14 = ASIN_TAB[var13]; + double var16 = COS_TAB[var13]; + double var18 = var11 - FRAC_BIAS; + double var20 = var0 * var16 - var2 * var18; + double var22 = (6.0D + var20 * var20) * var20 * 0.16666666666666666D; + double var24 = var14 + var22; + if (var8) + var24 = 1.5707963267948966D - var24; + if (var7) + var24 = Math.PI - var24; + if (var6) + var24 = -var24; + return var24; + } + + public static float fastInvSqrt(float var0) { + float var1 = 0.5F * var0; + int var2 = Float.floatToIntBits(var0); + var2 = 1597463007 - (var2 >> 1); + var0 = Float.intBitsToFloat(var2); + var0 *= 1.5F - var1 * var0 * var0; + return var0; + } + + public static double fastInvSqrt(double var0) { + double var2 = 0.5D * var0; + long var4 = Double.doubleToRawLongBits(var0); + var4 = 6910469410427058090L - (var4 >> 1L); + var0 = Double.longBitsToDouble(var4); + var0 *= 1.5D - var2 * var0 * var0; + return var0; + } + + public static float fastInvCubeRoot(float var0) { + int var1 = Float.floatToIntBits(var0); + var1 = 1419967116 - var1 / 3; + float var2 = Float.intBitsToFloat(var1); + var2 = 0.6666667F * var2 + 1.0F / 3.0F * var2 * var2 * var0; + var2 = 0.6666667F * var2 + 1.0F / 3.0F * var2 * var2 * var0; + return var2; + } + + private static final double FRAC_BIAS = Double.longBitsToDouble(4805340802404319232L); + + private static final double[] ASIN_TAB = new double[257]; + + private static final double[] COS_TAB = new double[257]; + + static { + for (int var0 = 0; var0 < 257; var0++) { + double var1 = var0 / 256.0D; + double var3 = Math.asin(var1); + COS_TAB[var0] = Math.cos(var3); + ASIN_TAB[var0] = var3; + } + } + + public static int hsvToRgb(float var0, float var1, float var2) { + float var8, var9, var10; + int var11, var12, var13, var3 = (int) (var0 * 6.0F) % 6; + float var4 = var0 * 6.0F - var3; + float var5 = var2 * (1.0F - var1); + float var6 = var2 * (1.0F - var4 * var1); + float var7 = var2 * (1.0F - (1.0F - var4) * var1); + switch (var3) { + case 0: + var8 = var2; + var9 = var7; + var10 = var5; + var11 = clamp((int) (var8 * 255.0F), 0, 255); + var12 = clamp((int) (var9 * 255.0F), 0, 255); + var13 = clamp((int) (var10 * 255.0F), 0, 255); + return var11 << 16 | var12 << 8 | var13; + case 1: + var8 = var6; + var9 = var2; + var10 = var5; + var11 = clamp((int) (var8 * 255.0F), 0, 255); + var12 = clamp((int) (var9 * 255.0F), 0, 255); + var13 = clamp((int) (var10 * 255.0F), 0, 255); + return var11 << 16 | var12 << 8 | var13; + case 2: + var8 = var5; + var9 = var2; + var10 = var7; + var11 = clamp((int) (var8 * 255.0F), 0, 255); + var12 = clamp((int) (var9 * 255.0F), 0, 255); + var13 = clamp((int) (var10 * 255.0F), 0, 255); + return var11 << 16 | var12 << 8 | var13; + case 3: + var8 = var5; + var9 = var6; + var10 = var2; + var11 = clamp((int) (var8 * 255.0F), 0, 255); + var12 = clamp((int) (var9 * 255.0F), 0, 255); + var13 = clamp((int) (var10 * 255.0F), 0, 255); + return var11 << 16 | var12 << 8 | var13; + case 4: + var8 = var7; + var9 = var5; + var10 = var2; + var11 = clamp((int) (var8 * 255.0F), 0, 255); + var12 = clamp((int) (var9 * 255.0F), 0, 255); + var13 = clamp((int) (var10 * 255.0F), 0, 255); + return var11 << 16 | var12 << 8 | var13; + case 5: + var8 = var2; + var9 = var5; + var10 = var6; + var11 = clamp((int) (var8 * 255.0F), 0, 255); + var12 = clamp((int) (var9 * 255.0F), 0, 255); + var13 = clamp((int) (var10 * 255.0F), 0, 255); + return var11 << 16 | var12 << 8 | var13; + } + throw new RuntimeException("Something went wrong when converting from HSV to RGB. Input was " + var0 + ", " + var1 + ", " + var2); + } + + public static int murmurHash3Mixer(int var0) { + var0 ^= var0 >>> 16; + var0 *= -2048144789; + var0 ^= var0 >>> 13; + var0 *= -1028477387; + var0 ^= var0 >>> 16; + return var0; + } + + public static long murmurHash3Mixer(long var0) { + var0 ^= var0 >>> 33L; + var0 *= -49064778989728563L; + var0 ^= var0 >>> 33L; + var0 *= -4265267296055464877L; + var0 ^= var0 >>> 33L; + return var0; + } + + public static double[] cumulativeSum(double... var0) { + float var1 = 0.0F; + for (double var5 : var0) + var1 = (float) (var1 + var5); + int var2; + for (var2 = 0; var2 < var0.length; var2++) + var0[var2] = var0[var2] / var1; + for (var2 = 0; var2 < var0.length; var2++) + var0[var2] = ((var2 == 0) ? 0.0D : var0[var2 - 1]) + var0[var2]; + return var0; + } + + public static int getRandomForDistributionIntegral(Random var0, double[] var1) { + double var2 = var0.nextDouble(); + for (int var4 = 0; var4 < var1.length; var4++) { + if (var2 < var1[var4]) + return var4; + } + return var1.length; + } + + public static double[] binNormalDistribution(double var0, double var2, double var4, int var6, int var7) { + double[] var8 = new double[var7 - var6 + 1]; + int var9 = 0; + for (int var10 = var6; var10 <= var7; var10++) { + var8[var9] = Math.max(0.0D, var0 * + + StrictMath.exp(-(var10 - var4) * (var10 - var4) / 2.0D * var2 * var2)); + var9++; + } + return var8; + } + + public static double[] binBiModalNormalDistribution(double var0, double var2, double var4, double var6, double var8, double var10, int var12, int var13) { + double[] var14 = new double[var13 - var12 + 1]; + int var15 = 0; + for (int var16 = var12; var16 <= var13; var16++) { + var14[var15] = Math.max(0.0D, var0 * + + StrictMath.exp(-(var16 - var4) * (var16 - var4) / 2.0D * var2 * var2) + var6 * + StrictMath.exp(-(var16 - var10) * (var16 - var10) / 2.0D * var8 * var8)); + var15++; + } + return var14; + } + + public static double[] binLogDistribution(double var0, double var2, int var4, int var5) { + double[] var6 = new double[var5 - var4 + 1]; + int var7 = 0; + for (int var8 = var4; var8 <= var5; var8++) { + var6[var7] = Math.max(var0 * StrictMath.log(var8) + var2, 0.0D); + var7++; + } + return var6; + } + + public static float lerp(float var0, float var1, float var2) { + return var1 + var0 * (var2 - var1); + } + + public static double lerp(double var0, double var2, double var4) { + return var2 + var0 * (var4 - var2); + } + + public static double lerp2(double var0, double var2, double var4, double var6, double var8, double var10) { + return lerp(var2, + + lerp(var0, var4, var6), + lerp(var0, var8, var10)); + } + + public static double lerp3(double var0, double var2, double var4, double var6, double var8, double var10, double var12, double var14, double var16, double var18, double var20) { + return lerp(var4, + + lerp2(var0, var2, var6, var8, var10, var12), + lerp2(var0, var2, var14, var16, var18, var20)); + } + + public static double smoothstep(double var0) { + return var0 * var0 * var0 * (var0 * (var0 * 6.0D - 15.0D) + 10.0D); + } + + public static double smoothstepDerivative(double var0) { + return 30.0D * var0 * var0 * (var0 - 1.0D) * (var0 - 1.0D); + } + + public static int sign(double var0) { + if (var0 == 0.0D) + return 0; + return (var0 > 0.0D) ? 1 : -1; + } + + public static float rotLerp(float var0, float var1, float var2) { + return var1 + var0 * wrapDegrees(var2 - var1); + } + + public static float diffuseLight(float var0, float var1, float var2) { + return Math.min(var0 * var0 * 0.6F + var1 * var1 * (3.0F + var1) / 4.0F + var2 * var2 * 0.8F, 1.0F); + } + + @Deprecated + public static float rotlerp(float var0, float var1, float var2) { + float var3 = var1 - var0; + while (var3 < -180.0F) + var3 += 360.0F; + while (var3 >= 180.0F) + var3 -= 360.0F; + return var0 + var2 * var3; + } + + @Deprecated + public static float rotWrap(double var0) { + while (var0 >= 180.0D) + var0 -= 360.0D; + while (var0 < -180.0D) + var0 += 360.0D; + return (float) var0; + } + + public static float triangleWave(float var0, float var1) { + return (Math.abs(var0 % var1 - var1 * 0.5F) - var1 * 0.25F) / var1 * 0.25F; + } + + public static float square(float var0) { + return var0 * var0; + } + + public static double square(double var0) { + return var0 * var0; + } + + public static int square(int var0) { + return var0 * var0; + } + + public static double clampedMap(double var0, double var2, double var4, double var6, double var8) { + return clampedLerp(var6, var8, inverseLerp(var0, var2, var4)); + } + + public static double map(double var0, double var2, double var4, double var6, double var8) { + return lerp(inverseLerp(var0, var2, var4), var6, var8); + } + + public static double wobble(double var0) { + return var0 + (2.0D * (new Random(floor(var0 * 3000.0D))).nextDouble() - 1.0D) * 1.0E-7D / 2.0D; + } + + public static int roundToward(int var0, int var1) { + return (var0 + var1 - 1) / var1 * var1; + } + + public static int randomBetweenInclusive(Random var0, int var1, int var2) { + return var0.nextInt(var2 - var1 + 1) + var1; + } + + public static float randomBetween(Random var0, float var1, float var2) { + return var0.nextFloat() * (var2 - var1) + var1; + } + + public static float normal(Random var0, float var1, float var2) { + return var1 + (float) var0.nextGaussian() * var2; + } + + public static double length(int var0, double var1, int var3) { + return Math.sqrt((var0 * var0) + var1 * var1 + (var3 * var3)); + } } \ No newline at end of file diff --git a/src/main/java/com/volmit/iris/util/nbt/mca/palette/Palette.java b/src/main/java/com/volmit/iris/util/nbt/mca/palette/Palette.java index 526d0ed63..597108104 100644 --- a/src/main/java/com/volmit/iris/util/nbt/mca/palette/Palette.java +++ b/src/main/java/com/volmit/iris/util/nbt/mca/palette/Palette.java @@ -23,13 +23,13 @@ import com.volmit.iris.util.nbt.tag.ListTag; import java.util.function.Predicate; public interface Palette { - int idFor(T paramT); - - boolean maybeHas(Predicate paramPredicate); + int idFor(T paramT); - T valueFor(int paramInt); - - int getSize(); - - void read(ListTag paramListTag); + boolean maybeHas(Predicate paramPredicate); + + T valueFor(int paramInt); + + int getSize(); + + void read(ListTag paramListTag); } diff --git a/src/main/java/com/volmit/iris/util/nbt/mca/palette/PaletteAccess.java b/src/main/java/com/volmit/iris/util/nbt/mca/palette/PaletteAccess.java index 6879030dd..53ae9b5c7 100644 --- a/src/main/java/com/volmit/iris/util/nbt/mca/palette/PaletteAccess.java +++ b/src/main/java/com/volmit/iris/util/nbt/mca/palette/PaletteAccess.java @@ -21,11 +21,11 @@ package com.volmit.iris.util.nbt.mca.palette; import com.volmit.iris.util.nbt.tag.CompoundTag; public interface PaletteAccess { - public void setBlock(int x, int y, int z, CompoundTag data); + void setBlock(int x, int y, int z, CompoundTag data); - public CompoundTag getBlock(int x, int y, int z); + CompoundTag getBlock(int x, int y, int z); - public void writeToSection(CompoundTag tag); + void writeToSection(CompoundTag tag); - public void readFromSection(CompoundTag tag); + void readFromSection(CompoundTag tag); } diff --git a/src/main/java/com/volmit/iris/util/nbt/mca/palette/PaletteResize.java b/src/main/java/com/volmit/iris/util/nbt/mca/palette/PaletteResize.java index d4f64bcd0..b4150c2fa 100644 --- a/src/main/java/com/volmit/iris/util/nbt/mca/palette/PaletteResize.java +++ b/src/main/java/com/volmit/iris/util/nbt/mca/palette/PaletteResize.java @@ -19,5 +19,5 @@ package com.volmit.iris.util.nbt.mca.palette; interface PaletteResize { - int onResize(int paramInt, T paramT); + int onResize(int paramInt, T paramT); } diff --git a/src/main/java/com/volmit/iris/util/nbt/mca/palette/PalettedContainer.java b/src/main/java/com/volmit/iris/util/nbt/mca/palette/PalettedContainer.java index 0c15e7a01..86218ee53 100644 --- a/src/main/java/com/volmit/iris/util/nbt/mca/palette/PalettedContainer.java +++ b/src/main/java/com/volmit/iris/util/nbt/mca/palette/PalettedContainer.java @@ -26,158 +26,157 @@ import java.util.function.Function; import java.util.function.Predicate; public class PalettedContainer implements PaletteResize { - private static final int SIZE = 4096; - - public static final int GLOBAL_PALETTE_BITS = 9; - - public static final int MIN_PALETTE_SIZE = 4; - - private final Palette globalPalette; - - private final PaletteResize dummyPaletteResize = (var0, var1) -> 0; - - private final IdMapper registry; - - private final Function reader; - - private final Function writer; - - private final T defaultValue; - - protected BitStorage storage; - - private Palette palette; - - private int bits; - - public PalettedContainer(Palette var0, IdMapper var1, Function var2, Function var3, T var4) { - this.globalPalette = var0; - this.registry = var1; - this.reader = var2; - this.writer = var3; - this.defaultValue = var4; - setBits(4); - } - - private static int getIndex(int var0, int var1, int var2) { - return var1 << 8 | var2 << 4 | var0; - } - - private void setBits(int var0) { - if (var0 == this.bits) - return; - this.bits = var0; - if (this.bits <= 4) { - this.bits = 4; - this.palette = new LinearPalette<>(this.registry, this.bits, this, this.reader); - } else if (this.bits < 9) { - this.palette = new HashMapPalette<>(this.registry, this.bits, this, this.reader, this.writer); - } else { - this.palette = this.globalPalette; - this.bits = Mth.ceillog2(this.registry.size()); - } - this.palette.idFor(this.defaultValue); - this.storage = new BitStorage(this.bits, 4096); - } - - public int onResize(int var0, T var1) { - BitStorage var2 = this.storage; - Palette var3 = this.palette; - setBits(var0); - for (int var4 = 0; var4 < var2.getSize(); var4++) { - T var5 = var3.valueFor(var2.get(var4)); - if (var5 != null) - set(var4, var5); - } - return this.palette.idFor(var1); - } - - public T getAndSet(int var0, int var1, int var2, T var3) { - return getAndSet(getIndex(var0, var1, var2), var3); - } - - public T getAndSetUnchecked(int var0, int var1, int var2, T var3) { - return getAndSet(getIndex(var0, var1, var2), var3); - } - - private T getAndSet(int var0, T var1) { - int var2 = this.palette.idFor(var1); - int var3 = this.storage.getAndSet(var0, var2); - T var4 = this.palette.valueFor(var3); - return (var4 == null) ? this.defaultValue : var4; - } - - public void set(int var0, int var1, int var2, T var3) { - set(getIndex(var0, var1, var2), var3); - } - - private void set(int var0, T var1) { - int var2 = this.palette.idFor(var1); - this.storage.set(var0, var2); - } - - public T get(int var0, int var1, int var2) { - return get(getIndex(var0, var1, var2)); - } - - protected T get(int var0) { - T var1 = this.palette.valueFor(this.storage.get(var0)); - return (var1 == null) ? this.defaultValue : var1; - } - - public void read(ListTag var0, long[] var1) { - int var2 = Math.max(4, Mth.ceillog2(var0.size())); - if (var2 != this.bits) - setBits(var2); - this.palette.read(var0); - int var3 = var1.length * 64 / 4096; - if (this.palette == this.globalPalette) { - Palette var4 = new HashMapPalette<>(this.registry, var2, this.dummyPaletteResize, this.reader, this.writer); - var4.read(var0); - BitStorage var5 = new BitStorage(var2, 4096, var1); - for (int var6 = 0; var6 < 4096; var6++) - this.storage.set(var6, this.globalPalette.idFor(var4.valueFor(var5.get(var6)))); - } else if (var3 == this.bits) { - System.arraycopy(var1, 0, this.storage.getRaw(), 0, var1.length); - } else { - BitStorage var4 = new BitStorage(var3, 4096, var1); - for (int var5 = 0; var5 < 4096; var5++) - this.storage.set(var5, var4.get(var5)); - } - } - - public void write(CompoundTag var0, String var1, String var2) { - HashMapPalette var3 = new HashMapPalette<>(this.registry, this.bits, this.dummyPaletteResize, this.reader, this.writer); - T var4 = this.defaultValue; - int var5 = var3.idFor(this.defaultValue); - int[] var6 = new int[4096]; - for (int i = 0; i < 4096; i++) { - T t = get(i); - if (t != var4) { - var4 = t; - var5 = var3.idFor(t); - } - var6[i] = var5; - } - ListTag paletteList = (ListTag) ListTag.createUnchecked(CompoundTag.class); - var3.write(paletteList); - var0.put(var1, paletteList); - int var8 = Math.max(4, Mth.ceillog2(paletteList.size())); - BitStorage var9 = new BitStorage(var8, 4096); - for (int var10 = 0; var10 < var6.length; var10++) - { - var9.set(var10, var6[var10]); - } - var0.putLongArray(var2, var9.getRaw()); - } + private static final int SIZE = 4096; - public boolean maybeHas(Predicate var0) { - return this.palette.maybeHas(var0); - } - - public void count(CountConsumer var0) { - Int2IntOpenHashMap int2IntOpenHashMap = new Int2IntOpenHashMap(); - this.storage.getAll(var1 -> int2IntOpenHashMap.put(var1, int2IntOpenHashMap.get(var1) + 1)); - int2IntOpenHashMap.int2IntEntrySet().forEach(var1 -> var0.accept(this.palette.valueFor(var1.getIntKey()), var1.getIntValue())); - } + public static final int GLOBAL_PALETTE_BITS = 9; + + public static final int MIN_PALETTE_SIZE = 4; + + private final Palette globalPalette; + + private final PaletteResize dummyPaletteResize = (var0, var1) -> 0; + + private final IdMapper registry; + + private final Function reader; + + private final Function writer; + + private final T defaultValue; + + protected BitStorage storage; + + private Palette palette; + + private int bits; + + public PalettedContainer(Palette var0, IdMapper var1, Function var2, Function var3, T var4) { + this.globalPalette = var0; + this.registry = var1; + this.reader = var2; + this.writer = var3; + this.defaultValue = var4; + setBits(4); + } + + private static int getIndex(int var0, int var1, int var2) { + return var1 << 8 | var2 << 4 | var0; + } + + private void setBits(int var0) { + if (var0 == this.bits) + return; + this.bits = var0; + if (this.bits <= 4) { + this.bits = 4; + this.palette = new LinearPalette<>(this.registry, this.bits, this, this.reader); + } else if (this.bits < 9) { + this.palette = new HashMapPalette<>(this.registry, this.bits, this, this.reader, this.writer); + } else { + this.palette = this.globalPalette; + this.bits = Mth.ceillog2(this.registry.size()); + } + this.palette.idFor(this.defaultValue); + this.storage = new BitStorage(this.bits, 4096); + } + + public int onResize(int var0, T var1) { + BitStorage var2 = this.storage; + Palette var3 = this.palette; + setBits(var0); + for (int var4 = 0; var4 < var2.getSize(); var4++) { + T var5 = var3.valueFor(var2.get(var4)); + if (var5 != null) + set(var4, var5); + } + return this.palette.idFor(var1); + } + + public T getAndSet(int var0, int var1, int var2, T var3) { + return getAndSet(getIndex(var0, var1, var2), var3); + } + + public T getAndSetUnchecked(int var0, int var1, int var2, T var3) { + return getAndSet(getIndex(var0, var1, var2), var3); + } + + private T getAndSet(int var0, T var1) { + int var2 = this.palette.idFor(var1); + int var3 = this.storage.getAndSet(var0, var2); + T var4 = this.palette.valueFor(var3); + return (var4 == null) ? this.defaultValue : var4; + } + + public void set(int var0, int var1, int var2, T var3) { + set(getIndex(var0, var1, var2), var3); + } + + private void set(int var0, T var1) { + int var2 = this.palette.idFor(var1); + this.storage.set(var0, var2); + } + + public T get(int var0, int var1, int var2) { + return get(getIndex(var0, var1, var2)); + } + + protected T get(int var0) { + T var1 = this.palette.valueFor(this.storage.get(var0)); + return (var1 == null) ? this.defaultValue : var1; + } + + public void read(ListTag var0, long[] var1) { + int var2 = Math.max(4, Mth.ceillog2(var0.size())); + if (var2 != this.bits) + setBits(var2); + this.palette.read(var0); + int var3 = var1.length * 64 / 4096; + if (this.palette == this.globalPalette) { + Palette var4 = new HashMapPalette<>(this.registry, var2, this.dummyPaletteResize, this.reader, this.writer); + var4.read(var0); + BitStorage var5 = new BitStorage(var2, 4096, var1); + for (int var6 = 0; var6 < 4096; var6++) + this.storage.set(var6, this.globalPalette.idFor(var4.valueFor(var5.get(var6)))); + } else if (var3 == this.bits) { + System.arraycopy(var1, 0, this.storage.getRaw(), 0, var1.length); + } else { + BitStorage var4 = new BitStorage(var3, 4096, var1); + for (int var5 = 0; var5 < 4096; var5++) + this.storage.set(var5, var4.get(var5)); + } + } + + public void write(CompoundTag var0, String var1, String var2) { + HashMapPalette var3 = new HashMapPalette<>(this.registry, this.bits, this.dummyPaletteResize, this.reader, this.writer); + T var4 = this.defaultValue; + int var5 = var3.idFor(this.defaultValue); + int[] var6 = new int[4096]; + for (int i = 0; i < 4096; i++) { + T t = get(i); + if (t != var4) { + var4 = t; + var5 = var3.idFor(t); + } + var6[i] = var5; + } + ListTag paletteList = (ListTag) ListTag.createUnchecked(CompoundTag.class); + var3.write(paletteList); + var0.put(var1, paletteList); + int var8 = Math.max(4, Mth.ceillog2(paletteList.size())); + BitStorage var9 = new BitStorage(var8, 4096); + for (int var10 = 0; var10 < var6.length; var10++) { + var9.set(var10, var6[var10]); + } + var0.putLongArray(var2, var9.getRaw()); + } + + public boolean maybeHas(Predicate var0) { + return this.palette.maybeHas(var0); + } + + public void count(CountConsumer var0) { + Int2IntOpenHashMap int2IntOpenHashMap = new Int2IntOpenHashMap(); + this.storage.getAll(var1 -> int2IntOpenHashMap.put(var1, int2IntOpenHashMap.get(var1) + 1)); + int2IntOpenHashMap.int2IntEntrySet().forEach(var1 -> var0.accept(this.palette.valueFor(var1.getIntKey()), var1.getIntValue())); + } } \ No newline at end of file diff --git a/src/main/java/com/volmit/iris/util/nbt/mca/palette/QuartPos.java b/src/main/java/com/volmit/iris/util/nbt/mca/palette/QuartPos.java index 52bf61ff8..81fb8ccc7 100644 --- a/src/main/java/com/volmit/iris/util/nbt/mca/palette/QuartPos.java +++ b/src/main/java/com/volmit/iris/util/nbt/mca/palette/QuartPos.java @@ -19,25 +19,25 @@ package com.volmit.iris.util.nbt.mca.palette; public final class QuartPos { - public static final int BITS = 2; - - public static final int SIZE = 4; - - private static final int SECTION_TO_QUARTS_BITS = 2; - - public static int fromBlock(int var0) { - return var0 >> 2; - } - - public static int toBlock(int var0) { - return var0 << 2; - } - - public static int fromSection(int var0) { - return var0 << 2; - } - - public static int toSection(int var0) { - return var0 >> 2; - } + public static final int BITS = 2; + + public static final int SIZE = 4; + + private static final int SECTION_TO_QUARTS_BITS = 2; + + public static int fromBlock(int var0) { + return var0 >> 2; + } + + public static int toBlock(int var0) { + return var0 << 2; + } + + public static int fromSection(int var0) { + return var0 << 2; + } + + public static int toSection(int var0) { + return var0 >> 2; + } } diff --git a/src/main/java/com/volmit/iris/util/nbt/mca/palette/WrappedPalettedContainer.java b/src/main/java/com/volmit/iris/util/nbt/mca/palette/WrappedPalettedContainer.java index 4b1be8282..9cd06f1cc 100644 --- a/src/main/java/com/volmit/iris/util/nbt/mca/palette/WrappedPalettedContainer.java +++ b/src/main/java/com/volmit/iris/util/nbt/mca/palette/WrappedPalettedContainer.java @@ -29,23 +29,19 @@ public class WrappedPalettedContainer implements PaletteAccess { private final Function reader; private final Function writer; - public void setBlock(int x, int y, int z, CompoundTag data) - { - container.set(x,y,z,writer.apply(data)); + public void setBlock(int x, int y, int z, CompoundTag data) { + container.set(x, y, z, writer.apply(data)); } - public CompoundTag getBlock(int x, int y, int z) - { - return reader.apply(container.get(x,y,z)); + public CompoundTag getBlock(int x, int y, int z) { + return reader.apply(container.get(x, y, z)); } - public void writeToSection(CompoundTag tag) - { + public void writeToSection(CompoundTag tag) { container.write(tag, "Palette", "BlockStates"); } - public void readFromSection(CompoundTag tag) - { + public void readFromSection(CompoundTag tag) { container.read(tag.getListTag("Palette"), tag.getLongArrayTag("BlockStates").getValue()); } } diff --git a/src/main/java/com/volmit/iris/util/scheduling/J.java b/src/main/java/com/volmit/iris/util/scheduling/J.java index c64f30096..e52475bd7 100644 --- a/src/main/java/com/volmit/iris/util/scheduling/J.java +++ b/src/main/java/com/volmit/iris/util/scheduling/J.java @@ -127,13 +127,9 @@ public class J { } public static T attemptResult(NastySupplier r) { - try - { + try { return r.get(); - } - - catch(Throwable e) - { + } catch (Throwable e) { return null; } } diff --git a/src/main/java/com/volmit/iris/util/scheduling/jobs/QueueJob.java b/src/main/java/com/volmit/iris/util/scheduling/jobs/QueueJob.java index 0664f351d..be809ca90 100644 --- a/src/main/java/com/volmit/iris/util/scheduling/jobs/QueueJob.java +++ b/src/main/java/com/volmit/iris/util/scheduling/jobs/QueueJob.java @@ -25,7 +25,7 @@ import java.util.concurrent.atomic.AtomicInteger; public abstract class QueueJob implements Job { final KList queue; protected int totalWork; - private AtomicInteger completed; + private final AtomicInteger completed; public QueueJob() { totalWork = 0;