mirror of
https://github.com/VolmitSoftware/Iris.git
synced 2025-07-21 19:55:00 +00:00
rough safeguard for missing dimension type
This commit is contained in:
parent
3415e7c7af
commit
6577f4a5de
@ -35,6 +35,7 @@ import org.bukkit.entity.EntityType;
|
|||||||
import org.bukkit.event.entity.CreatureSpawnEvent;
|
import org.bukkit.event.entity.CreatureSpawnEvent;
|
||||||
import org.bukkit.generator.ChunkGenerator;
|
import org.bukkit.generator.ChunkGenerator;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
|
|
||||||
@ -88,7 +89,7 @@ public interface INMSBinding {
|
|||||||
MCABiomeContainer newBiomeContainer(int min, int max);
|
MCABiomeContainer newBiomeContainer(int min, int max);
|
||||||
|
|
||||||
default World createWorld(WorldCreator c) {
|
default World createWorld(WorldCreator c) {
|
||||||
if (missingDimensionTypes(c.environment()))
|
if (missingDimensionTypes(c.generator()))
|
||||||
throw new IllegalStateException("Missing dimenstion types to create world");
|
throw new IllegalStateException("Missing dimenstion types to create world");
|
||||||
|
|
||||||
return c.createWorld();
|
return c.createWorld();
|
||||||
@ -126,18 +127,7 @@ public interface INMSBinding {
|
|||||||
|
|
||||||
KList<String> getStructureKeys();
|
KList<String> getStructureKeys();
|
||||||
|
|
||||||
KMap<String, World.Environment> getMainWorlds();
|
boolean missingDimensionTypes(@Nullable ChunkGenerator generator);
|
||||||
|
|
||||||
boolean missingDimensionTypes(boolean overworld, boolean nether, boolean end);
|
|
||||||
|
|
||||||
default boolean missingDimensionTypes(World.Environment env) {
|
|
||||||
return switch (env) {
|
|
||||||
case NORMAL -> missingDimensionTypes(true, false, false);
|
|
||||||
case NETHER -> missingDimensionTypes(false, true, false);
|
|
||||||
case THE_END -> missingDimensionTypes(false, false, true);
|
|
||||||
default -> true;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
default boolean injectBukkit() {
|
default boolean injectBukkit() {
|
||||||
return true;
|
return true;
|
||||||
|
@ -20,9 +20,7 @@ package com.volmit.iris.core.nms.v1X;
|
|||||||
|
|
||||||
import com.volmit.iris.Iris;
|
import com.volmit.iris.Iris;
|
||||||
import com.volmit.iris.core.nms.INMSBinding;
|
import com.volmit.iris.core.nms.INMSBinding;
|
||||||
import com.volmit.iris.core.nms.container.AutoClosing;
|
|
||||||
import com.volmit.iris.core.nms.container.BiomeColor;
|
import com.volmit.iris.core.nms.container.BiomeColor;
|
||||||
import com.volmit.iris.core.nms.container.Pair;
|
|
||||||
import com.volmit.iris.engine.framework.Engine;
|
import com.volmit.iris.engine.framework.Engine;
|
||||||
import com.volmit.iris.util.collection.KList;
|
import com.volmit.iris.util.collection.KList;
|
||||||
import com.volmit.iris.util.collection.KMap;
|
import com.volmit.iris.util.collection.KMap;
|
||||||
@ -39,6 +37,7 @@ import org.bukkit.event.entity.CreatureSpawnEvent;
|
|||||||
import org.bukkit.generator.ChunkGenerator;
|
import org.bukkit.generator.ChunkGenerator;
|
||||||
import org.bukkit.generator.structure.Structure;
|
import org.bukkit.generator.structure.Structure;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
import java.util.stream.StreamSupport;
|
import java.util.stream.StreamSupport;
|
||||||
@ -121,12 +120,7 @@ public class NMSBinding1X implements INMSBinding {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public KMap<String, World.Environment> getMainWorlds() {
|
public boolean missingDimensionTypes(@Nullable ChunkGenerator generator) {
|
||||||
return new KMap<>();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean missingDimensionTypes(boolean overworld, boolean nether, boolean end) {
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4,11 +4,7 @@ import com.volmit.iris.Iris;
|
|||||||
import com.volmit.iris.core.nms.INMS;
|
import com.volmit.iris.core.nms.INMS;
|
||||||
import com.volmit.iris.core.nms.v1X.NMSBinding1X;
|
import com.volmit.iris.core.nms.v1X.NMSBinding1X;
|
||||||
import com.volmit.iris.util.agent.Agent;
|
import com.volmit.iris.util.agent.Agent;
|
||||||
import com.volmit.iris.util.misc.ServerProperties;
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.World;
|
|
||||||
import org.bukkit.configuration.ConfigurationSection;
|
|
||||||
import org.bukkit.configuration.file.YamlConfiguration;
|
|
||||||
import org.bukkit.plugin.Plugin;
|
import org.bukkit.plugin.Plugin;
|
||||||
import org.bukkit.plugin.PluginManager;
|
import org.bukkit.plugin.PluginManager;
|
||||||
import javax.tools.JavaCompiler;
|
import javax.tools.JavaCompiler;
|
||||||
@ -20,7 +16,6 @@ import java.nio.file.Path;
|
|||||||
import java.nio.file.Paths;
|
import java.nio.file.Paths;
|
||||||
import java.nio.file.StandardOpenOption;
|
import java.nio.file.StandardOpenOption;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.function.Predicate;
|
|
||||||
|
|
||||||
import static com.volmit.iris.Iris.getJavaVersion;
|
import static com.volmit.iris.Iris.getJavaVersion;
|
||||||
import static com.volmit.iris.core.safeguard.IrisSafeguard.*;
|
import static com.volmit.iris.core.safeguard.IrisSafeguard.*;
|
||||||
@ -189,30 +184,6 @@ public class ServerBootSFG {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static boolean missingDimensionTypes() {
|
private static boolean missingDimensionTypes() {
|
||||||
var irisWorlds = irisWorlds();
|
return INMS.get().missingDimensionTypes(null);
|
||||||
if (irisWorlds.isEmpty()) return false;
|
|
||||||
|
|
||||||
var worlds = INMS.get().getMainWorlds();
|
|
||||||
worlds.keySet().removeIf(Predicate.not(irisWorlds::contains));
|
|
||||||
|
|
||||||
boolean overworld = worlds.containsValue(World.Environment.NORMAL) || worlds.containsValue(World.Environment.CUSTOM);
|
|
||||||
boolean nether = worlds.containsValue(World.Environment.NETHER);
|
|
||||||
boolean end = worlds.containsValue(World.Environment.THE_END);
|
|
||||||
|
|
||||||
if (overworld || nether || end)
|
|
||||||
return INMS.get().missingDimensionTypes(overworld, nether, end);
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static List<String> irisWorlds() {
|
|
||||||
var config = YamlConfiguration.loadConfiguration(ServerProperties.BUKKIT_YML);
|
|
||||||
ConfigurationSection section = config.getConfigurationSection("worlds");
|
|
||||||
if (section == null) return List.of();
|
|
||||||
|
|
||||||
return section.getKeys(false)
|
|
||||||
.stream()
|
|
||||||
.filter(k -> section.getString(k + ".generator", "").startsWith("Iris"))
|
|
||||||
.toList();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -17,7 +17,6 @@ import com.volmit.iris.util.json.JSONObject;
|
|||||||
import com.volmit.iris.util.mantle.Mantle;
|
import com.volmit.iris.util.mantle.Mantle;
|
||||||
import com.volmit.iris.util.math.Vector3d;
|
import com.volmit.iris.util.math.Vector3d;
|
||||||
import com.volmit.iris.util.matter.MatterBiomeInject;
|
import com.volmit.iris.util.matter.MatterBiomeInject;
|
||||||
import com.volmit.iris.util.misc.ServerProperties;
|
|
||||||
import com.volmit.iris.util.nbt.mca.NBTWorld;
|
import com.volmit.iris.util.nbt.mca.NBTWorld;
|
||||||
import com.volmit.iris.util.nbt.mca.palette.*;
|
import com.volmit.iris.util.nbt.mca.palette.*;
|
||||||
import com.volmit.iris.util.nbt.tag.CompoundTag;
|
import com.volmit.iris.util.nbt.tag.CompoundTag;
|
||||||
@ -26,8 +25,10 @@ import it.unimi.dsi.fastutil.objects.Object2IntMap;
|
|||||||
import net.bytebuddy.ByteBuddy;
|
import net.bytebuddy.ByteBuddy;
|
||||||
import net.bytebuddy.asm.Advice;
|
import net.bytebuddy.asm.Advice;
|
||||||
import net.bytebuddy.matcher.ElementMatchers;
|
import net.bytebuddy.matcher.ElementMatchers;
|
||||||
import net.minecraft.core.*;
|
import net.minecraft.core.BlockPos;
|
||||||
|
import net.minecraft.core.Holder;
|
||||||
import net.minecraft.core.Registry;
|
import net.minecraft.core.Registry;
|
||||||
|
import net.minecraft.core.RegistryAccess;
|
||||||
import net.minecraft.core.registries.Registries;
|
import net.minecraft.core.registries.Registries;
|
||||||
import net.minecraft.nbt.*;
|
import net.minecraft.nbt.*;
|
||||||
import net.minecraft.nbt.Tag;
|
import net.minecraft.nbt.Tag;
|
||||||
@ -58,7 +59,6 @@ import net.minecraft.world.level.storage.PrimaryLevelData;
|
|||||||
import org.bukkit.*;
|
import org.bukkit.*;
|
||||||
import org.bukkit.block.Biome;
|
import org.bukkit.block.Biome;
|
||||||
import org.bukkit.block.data.BlockData;
|
import org.bukkit.block.data.BlockData;
|
||||||
|
|
||||||
import org.bukkit.craftbukkit.v1_20_R1.CraftChunk;
|
import org.bukkit.craftbukkit.v1_20_R1.CraftChunk;
|
||||||
import org.bukkit.craftbukkit.v1_20_R1.CraftServer;
|
import org.bukkit.craftbukkit.v1_20_R1.CraftServer;
|
||||||
import org.bukkit.craftbukkit.v1_20_R1.CraftWorld;
|
import org.bukkit.craftbukkit.v1_20_R1.CraftWorld;
|
||||||
@ -75,12 +75,14 @@ import org.bukkit.inventory.ItemStack;
|
|||||||
import org.jetbrains.annotations.Contract;
|
import org.jetbrains.annotations.Contract;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
import java.awt.*;
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.lang.reflect.InvocationTargetException;
|
import java.lang.reflect.InvocationTargetException;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
import java.lang.reflect.Modifier;
|
import java.lang.reflect.Modifier;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
import java.util.List;
|
||||||
import java.util.concurrent.Executor;
|
import java.util.concurrent.Executor;
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
import java.util.concurrent.atomic.AtomicInteger;
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
@ -641,37 +643,16 @@ public class NMSBinding implements INMSBinding {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@SuppressWarnings("all")
|
public boolean missingDimensionTypes(ChunkGenerator generator) {
|
||||||
public KMap<String, World.Environment> getMainWorlds() {
|
if (generator == null)
|
||||||
String levelName = ServerProperties.LEVEL_NAME;
|
return registry().registryOrThrow(Registries.DIMENSION_TYPE)
|
||||||
KMap<String, World.Environment> worlds = new KMap<>();
|
.keySet()
|
||||||
for (var key : registry().registryOrThrow(Registries.LEVEL_STEM).registryKeySet()) {
|
.stream()
|
||||||
World.Environment env = World.Environment.NORMAL;
|
.noneMatch(loc -> loc.getNamespace().equals("iris"));
|
||||||
if (key == LevelStem.NETHER) {
|
if (!(generator instanceof PlatformChunkGenerator pcg))
|
||||||
if (!Bukkit.getAllowNether())
|
return false;
|
||||||
continue;
|
var dimensionKey = new ResourceLocation("iris", pcg.getTarget().getDimension().getDimensionTypeKey());
|
||||||
env = World.Environment.NETHER;
|
return !registry().registryOrThrow(Registries.DIMENSION_TYPE).containsKey(dimensionKey);
|
||||||
} else if (key == LevelStem.END) {
|
|
||||||
if (!Bukkit.getAllowEnd())
|
|
||||||
continue;
|
|
||||||
env = World.Environment.THE_END;
|
|
||||||
} else if (key != LevelStem.OVERWORLD) {
|
|
||||||
env = World.Environment.CUSTOM;
|
|
||||||
}
|
|
||||||
|
|
||||||
String worldType = env == World.Environment.CUSTOM ? key.location().getNamespace() + "_" + key.location().getPath() : env.toString().toLowerCase(Locale.ROOT);
|
|
||||||
worlds.put(key == LevelStem.OVERWORLD ? levelName : levelName + "_" + worldType, env);
|
|
||||||
}
|
|
||||||
return worlds;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean missingDimensionTypes(boolean overworld, boolean nether, boolean end) {
|
|
||||||
var registry = registry().registryOrThrow(Registries.DIMENSION_TYPE);
|
|
||||||
if (overworld) overworld = !registry.containsKey(createIrisKey(LevelStem.OVERWORLD));
|
|
||||||
if (nether) nether = !registry.containsKey(createIrisKey(LevelStem.NETHER));
|
|
||||||
if (end) end = !registry.containsKey(createIrisKey(LevelStem.END));
|
|
||||||
return overworld || nether || end;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -696,10 +677,6 @@ public class NMSBinding implements INMSBinding {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private ResourceLocation createIrisKey(ResourceKey<LevelStem> key) {
|
|
||||||
return new ResourceLocation("iris", key.location().getPath());
|
|
||||||
}
|
|
||||||
|
|
||||||
public LevelStem levelStem(RegistryAccess access, ChunkGenerator raw) {
|
public LevelStem levelStem(RegistryAccess access, ChunkGenerator raw) {
|
||||||
if (!(raw instanceof PlatformChunkGenerator gen))
|
if (!(raw instanceof PlatformChunkGenerator gen))
|
||||||
throw new IllegalStateException("Generator is not platform chunk generator!");
|
throw new IllegalStateException("Generator is not platform chunk generator!");
|
||||||
|
@ -1,38 +1,56 @@
|
|||||||
package com.volmit.iris.core.nms.v1_20_R2;
|
package com.volmit.iris.core.nms.v1_20_R2;
|
||||||
|
|
||||||
import java.awt.Color;
|
import com.mojang.brigadier.exceptions.CommandSyntaxException;
|
||||||
import java.lang.reflect.Field;
|
|
||||||
import java.lang.reflect.InvocationTargetException;
|
|
||||||
import java.lang.reflect.Method;
|
|
||||||
import java.lang.reflect.Modifier;
|
|
||||||
import java.util.*;
|
|
||||||
import java.util.concurrent.Executor;
|
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
|
||||||
import java.util.concurrent.atomic.AtomicInteger;
|
|
||||||
|
|
||||||
import com.mojang.datafixers.util.Pair;
|
import com.mojang.datafixers.util.Pair;
|
||||||
|
import com.volmit.iris.Iris;
|
||||||
|
import com.volmit.iris.core.nms.INMSBinding;
|
||||||
import com.volmit.iris.core.nms.container.BiomeColor;
|
import com.volmit.iris.core.nms.container.BiomeColor;
|
||||||
|
import com.volmit.iris.engine.data.cache.AtomicCache;
|
||||||
|
import com.volmit.iris.engine.framework.Engine;
|
||||||
import com.volmit.iris.engine.platform.PlatformChunkGenerator;
|
import com.volmit.iris.engine.platform.PlatformChunkGenerator;
|
||||||
import com.volmit.iris.util.agent.Agent;
|
import com.volmit.iris.util.agent.Agent;
|
||||||
|
import com.volmit.iris.util.collection.KList;
|
||||||
|
import com.volmit.iris.util.collection.KMap;
|
||||||
import com.volmit.iris.util.format.C;
|
import com.volmit.iris.util.format.C;
|
||||||
import com.volmit.iris.util.misc.ServerProperties;
|
import com.volmit.iris.util.hunk.Hunk;
|
||||||
|
import com.volmit.iris.util.json.JSONObject;
|
||||||
|
import com.volmit.iris.util.mantle.Mantle;
|
||||||
|
import com.volmit.iris.util.math.Vector3d;
|
||||||
|
import com.volmit.iris.util.matter.MatterBiomeInject;
|
||||||
|
import com.volmit.iris.util.nbt.mca.NBTWorld;
|
||||||
|
import com.volmit.iris.util.nbt.mca.palette.*;
|
||||||
|
import com.volmit.iris.util.nbt.tag.CompoundTag;
|
||||||
import com.volmit.iris.util.scheduling.J;
|
import com.volmit.iris.util.scheduling.J;
|
||||||
|
import it.unimi.dsi.fastutil.objects.Object2IntMap;
|
||||||
import net.bytebuddy.ByteBuddy;
|
import net.bytebuddy.ByteBuddy;
|
||||||
import net.bytebuddy.asm.Advice;
|
import net.bytebuddy.asm.Advice;
|
||||||
import net.bytebuddy.matcher.ElementMatchers;
|
import net.bytebuddy.matcher.ElementMatchers;
|
||||||
import net.minecraft.core.*;
|
import net.minecraft.core.BlockPos;
|
||||||
|
import net.minecraft.core.Holder;
|
||||||
import net.minecraft.core.Registry;
|
import net.minecraft.core.Registry;
|
||||||
|
import net.minecraft.core.RegistryAccess;
|
||||||
|
import net.minecraft.core.registries.Registries;
|
||||||
import net.minecraft.nbt.*;
|
import net.minecraft.nbt.*;
|
||||||
import net.minecraft.nbt.Tag;
|
import net.minecraft.nbt.Tag;
|
||||||
|
import net.minecraft.resources.ResourceKey;
|
||||||
|
import net.minecraft.resources.ResourceLocation;
|
||||||
import net.minecraft.server.MinecraftServer;
|
import net.minecraft.server.MinecraftServer;
|
||||||
import net.minecraft.server.commands.data.BlockDataAccessor;
|
import net.minecraft.server.commands.data.BlockDataAccessor;
|
||||||
|
import net.minecraft.server.level.ServerLevel;
|
||||||
import net.minecraft.server.level.progress.ChunkProgressListener;
|
import net.minecraft.server.level.progress.ChunkProgressListener;
|
||||||
import net.minecraft.tags.TagKey;
|
import net.minecraft.tags.TagKey;
|
||||||
import net.minecraft.world.RandomSequences;
|
import net.minecraft.world.RandomSequences;
|
||||||
|
import net.minecraft.world.entity.EntityType;
|
||||||
import net.minecraft.world.level.LevelReader;
|
import net.minecraft.world.level.LevelReader;
|
||||||
import net.minecraft.world.level.biome.Biomes;
|
import net.minecraft.world.level.biome.Biomes;
|
||||||
|
import net.minecraft.world.level.block.Block;
|
||||||
import net.minecraft.world.level.block.Blocks;
|
import net.minecraft.world.level.block.Blocks;
|
||||||
import net.minecraft.world.level.block.EntityBlock;
|
import net.minecraft.world.level.block.EntityBlock;
|
||||||
|
import net.minecraft.world.level.block.entity.BlockEntity;
|
||||||
|
import net.minecraft.world.level.block.state.BlockState;
|
||||||
|
import net.minecraft.world.level.chunk.ChunkAccess;
|
||||||
|
import net.minecraft.world.level.chunk.ChunkStatus;
|
||||||
|
import net.minecraft.world.level.chunk.LevelChunk;
|
||||||
import net.minecraft.world.level.dimension.LevelStem;
|
import net.minecraft.world.level.dimension.LevelStem;
|
||||||
import net.minecraft.world.level.levelgen.FlatLevelSource;
|
import net.minecraft.world.level.levelgen.FlatLevelSource;
|
||||||
import net.minecraft.world.level.levelgen.flat.FlatLayerInfo;
|
import net.minecraft.world.level.levelgen.flat.FlatLayerInfo;
|
||||||
@ -58,34 +76,17 @@ import org.bukkit.inventory.ItemStack;
|
|||||||
import org.jetbrains.annotations.Contract;
|
import org.jetbrains.annotations.Contract;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import com.mojang.brigadier.exceptions.CommandSyntaxException;
|
import java.awt.*;
|
||||||
import com.volmit.iris.Iris;
|
import java.awt.Color;
|
||||||
import com.volmit.iris.core.nms.INMSBinding;
|
import java.lang.reflect.Field;
|
||||||
import com.volmit.iris.engine.data.cache.AtomicCache;
|
import java.lang.reflect.InvocationTargetException;
|
||||||
import com.volmit.iris.engine.framework.Engine;
|
import java.lang.reflect.Method;
|
||||||
import com.volmit.iris.util.collection.KList;
|
import java.lang.reflect.Modifier;
|
||||||
import com.volmit.iris.util.collection.KMap;
|
import java.util.*;
|
||||||
import com.volmit.iris.util.hunk.Hunk;
|
import java.util.List;
|
||||||
import com.volmit.iris.util.json.JSONObject;
|
import java.util.concurrent.Executor;
|
||||||
import com.volmit.iris.util.mantle.Mantle;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
import com.volmit.iris.util.math.Vector3d;
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
import com.volmit.iris.util.matter.MatterBiomeInject;
|
|
||||||
import com.volmit.iris.util.nbt.mca.NBTWorld;
|
|
||||||
import com.volmit.iris.util.nbt.mca.palette.*;
|
|
||||||
import com.volmit.iris.util.nbt.tag.CompoundTag;
|
|
||||||
|
|
||||||
import it.unimi.dsi.fastutil.objects.Object2IntMap;
|
|
||||||
import net.minecraft.core.registries.Registries;
|
|
||||||
import net.minecraft.resources.ResourceKey;
|
|
||||||
import net.minecraft.resources.ResourceLocation;
|
|
||||||
import net.minecraft.server.level.ServerLevel;
|
|
||||||
import net.minecraft.world.entity.EntityType;
|
|
||||||
import net.minecraft.world.level.block.Block;
|
|
||||||
import net.minecraft.world.level.block.entity.BlockEntity;
|
|
||||||
import net.minecraft.world.level.block.state.BlockState;
|
|
||||||
import net.minecraft.world.level.chunk.ChunkAccess;
|
|
||||||
import net.minecraft.world.level.chunk.ChunkStatus;
|
|
||||||
import net.minecraft.world.level.chunk.LevelChunk;
|
|
||||||
|
|
||||||
public class NMSBinding implements INMSBinding {
|
public class NMSBinding implements INMSBinding {
|
||||||
private final KMap<Biome, Object> baseBiomeCache = new KMap<>();
|
private final KMap<Biome, Object> baseBiomeCache = new KMap<>();
|
||||||
@ -623,6 +624,19 @@ public class NMSBinding implements INMSBinding {
|
|||||||
return keys;
|
return keys;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean missingDimensionTypes(ChunkGenerator generator) {
|
||||||
|
if (generator == null)
|
||||||
|
return registry().registryOrThrow(Registries.DIMENSION_TYPE)
|
||||||
|
.keySet()
|
||||||
|
.stream()
|
||||||
|
.noneMatch(loc -> loc.getNamespace().equals("iris"));
|
||||||
|
if (!(generator instanceof PlatformChunkGenerator pcg))
|
||||||
|
return false;
|
||||||
|
var dimensionKey = new ResourceLocation("iris", pcg.getTarget().getDimension().getDimensionTypeKey());
|
||||||
|
return !registry().registryOrThrow(Registries.DIMENSION_TYPE).containsKey(dimensionKey);
|
||||||
|
}
|
||||||
|
|
||||||
private static Field getField(Class<?> clazz, Class<?> fieldType) throws NoSuchFieldException {
|
private static Field getField(Class<?> clazz, Class<?> fieldType) throws NoSuchFieldException {
|
||||||
try {
|
try {
|
||||||
for (Field f : clazz.getDeclaredFields()) {
|
for (Field f : clazz.getDeclaredFields()) {
|
||||||
@ -644,40 +658,6 @@ public class NMSBinding implements INMSBinding {
|
|||||||
return registry.getHolderOrThrow(ResourceKey.create(Registries.BIOME, CraftNamespacedKey.toMinecraft(biome.getKey())));
|
return registry.getHolderOrThrow(ResourceKey.create(Registries.BIOME, CraftNamespacedKey.toMinecraft(biome.getKey())));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
@SuppressWarnings("all")
|
|
||||||
public KMap<String, World.Environment> getMainWorlds() {
|
|
||||||
String levelName = ServerProperties.LEVEL_NAME;
|
|
||||||
KMap<String, World.Environment> worlds = new KMap<>();
|
|
||||||
for (var key : registry().registryOrThrow(Registries.LEVEL_STEM).registryKeySet()) {
|
|
||||||
World.Environment env = World.Environment.NORMAL;
|
|
||||||
if (key == LevelStem.NETHER) {
|
|
||||||
if (!Bukkit.getAllowNether())
|
|
||||||
continue;
|
|
||||||
env = World.Environment.NETHER;
|
|
||||||
} else if (key == LevelStem.END) {
|
|
||||||
if (!Bukkit.getAllowEnd())
|
|
||||||
continue;
|
|
||||||
env = World.Environment.THE_END;
|
|
||||||
} else if (key != LevelStem.OVERWORLD) {
|
|
||||||
env = World.Environment.CUSTOM;
|
|
||||||
}
|
|
||||||
|
|
||||||
String worldType = env == World.Environment.CUSTOM ? key.location().getNamespace() + "_" + key.location().getPath() : env.toString().toLowerCase(Locale.ROOT);
|
|
||||||
worlds.put(key == LevelStem.OVERWORLD ? levelName : levelName + "_" + worldType, env);
|
|
||||||
}
|
|
||||||
return worlds;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean missingDimensionTypes(boolean overworld, boolean nether, boolean end) {
|
|
||||||
var registry = registry().registryOrThrow(Registries.DIMENSION_TYPE);
|
|
||||||
if (overworld) overworld = !registry.containsKey(createIrisKey(LevelStem.OVERWORLD));
|
|
||||||
if (nether) nether = !registry.containsKey(createIrisKey(LevelStem.NETHER));
|
|
||||||
if (end) end = !registry.containsKey(createIrisKey(LevelStem.END));
|
|
||||||
return overworld || nether || end;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean injectBukkit() {
|
public boolean injectBukkit() {
|
||||||
if (injected.getAndSet(true))
|
if (injected.getAndSet(true))
|
||||||
@ -700,10 +680,6 @@ public class NMSBinding implements INMSBinding {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private ResourceLocation createIrisKey(ResourceKey<LevelStem> key) {
|
|
||||||
return new ResourceLocation("iris", key.location().getPath());
|
|
||||||
}
|
|
||||||
|
|
||||||
public LevelStem levelStem(RegistryAccess access, ChunkGenerator raw) {
|
public LevelStem levelStem(RegistryAccess access, ChunkGenerator raw) {
|
||||||
if (!(raw instanceof PlatformChunkGenerator gen))
|
if (!(raw instanceof PlatformChunkGenerator gen))
|
||||||
throw new IllegalStateException("Generator is not platform chunk generator!");
|
throw new IllegalStateException("Generator is not platform chunk generator!");
|
||||||
|
@ -1,38 +1,56 @@
|
|||||||
package com.volmit.iris.core.nms.v1_20_R3;
|
package com.volmit.iris.core.nms.v1_20_R3;
|
||||||
|
|
||||||
import java.awt.Color;
|
import com.mojang.brigadier.exceptions.CommandSyntaxException;
|
||||||
import java.lang.reflect.Field;
|
|
||||||
import java.lang.reflect.InvocationTargetException;
|
|
||||||
import java.lang.reflect.Method;
|
|
||||||
import java.lang.reflect.Modifier;
|
|
||||||
import java.util.*;
|
|
||||||
import java.util.concurrent.Executor;
|
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
|
||||||
import java.util.concurrent.atomic.AtomicInteger;
|
|
||||||
|
|
||||||
import com.mojang.datafixers.util.Pair;
|
import com.mojang.datafixers.util.Pair;
|
||||||
|
import com.volmit.iris.Iris;
|
||||||
|
import com.volmit.iris.core.nms.INMSBinding;
|
||||||
import com.volmit.iris.core.nms.container.BiomeColor;
|
import com.volmit.iris.core.nms.container.BiomeColor;
|
||||||
|
import com.volmit.iris.engine.data.cache.AtomicCache;
|
||||||
|
import com.volmit.iris.engine.framework.Engine;
|
||||||
import com.volmit.iris.engine.platform.PlatformChunkGenerator;
|
import com.volmit.iris.engine.platform.PlatformChunkGenerator;
|
||||||
import com.volmit.iris.util.agent.Agent;
|
import com.volmit.iris.util.agent.Agent;
|
||||||
|
import com.volmit.iris.util.collection.KList;
|
||||||
|
import com.volmit.iris.util.collection.KMap;
|
||||||
import com.volmit.iris.util.format.C;
|
import com.volmit.iris.util.format.C;
|
||||||
import com.volmit.iris.util.misc.ServerProperties;
|
import com.volmit.iris.util.hunk.Hunk;
|
||||||
|
import com.volmit.iris.util.json.JSONObject;
|
||||||
|
import com.volmit.iris.util.mantle.Mantle;
|
||||||
|
import com.volmit.iris.util.math.Vector3d;
|
||||||
|
import com.volmit.iris.util.matter.MatterBiomeInject;
|
||||||
|
import com.volmit.iris.util.nbt.mca.NBTWorld;
|
||||||
|
import com.volmit.iris.util.nbt.mca.palette.*;
|
||||||
|
import com.volmit.iris.util.nbt.tag.CompoundTag;
|
||||||
import com.volmit.iris.util.scheduling.J;
|
import com.volmit.iris.util.scheduling.J;
|
||||||
|
import it.unimi.dsi.fastutil.objects.Object2IntMap;
|
||||||
import net.bytebuddy.ByteBuddy;
|
import net.bytebuddy.ByteBuddy;
|
||||||
import net.bytebuddy.asm.Advice;
|
import net.bytebuddy.asm.Advice;
|
||||||
import net.bytebuddy.matcher.ElementMatchers;
|
import net.bytebuddy.matcher.ElementMatchers;
|
||||||
import net.minecraft.core.*;
|
import net.minecraft.core.BlockPos;
|
||||||
|
import net.minecraft.core.Holder;
|
||||||
import net.minecraft.core.Registry;
|
import net.minecraft.core.Registry;
|
||||||
|
import net.minecraft.core.RegistryAccess;
|
||||||
|
import net.minecraft.core.registries.Registries;
|
||||||
import net.minecraft.nbt.*;
|
import net.minecraft.nbt.*;
|
||||||
import net.minecraft.nbt.Tag;
|
import net.minecraft.nbt.Tag;
|
||||||
|
import net.minecraft.resources.ResourceKey;
|
||||||
|
import net.minecraft.resources.ResourceLocation;
|
||||||
import net.minecraft.server.MinecraftServer;
|
import net.minecraft.server.MinecraftServer;
|
||||||
import net.minecraft.server.commands.data.BlockDataAccessor;
|
import net.minecraft.server.commands.data.BlockDataAccessor;
|
||||||
|
import net.minecraft.server.level.ServerLevel;
|
||||||
import net.minecraft.server.level.progress.ChunkProgressListener;
|
import net.minecraft.server.level.progress.ChunkProgressListener;
|
||||||
import net.minecraft.tags.TagKey;
|
import net.minecraft.tags.TagKey;
|
||||||
import net.minecraft.world.RandomSequences;
|
import net.minecraft.world.RandomSequences;
|
||||||
|
import net.minecraft.world.entity.EntityType;
|
||||||
import net.minecraft.world.level.LevelReader;
|
import net.minecraft.world.level.LevelReader;
|
||||||
import net.minecraft.world.level.biome.Biomes;
|
import net.minecraft.world.level.biome.Biomes;
|
||||||
|
import net.minecraft.world.level.block.Block;
|
||||||
import net.minecraft.world.level.block.Blocks;
|
import net.minecraft.world.level.block.Blocks;
|
||||||
import net.minecraft.world.level.block.EntityBlock;
|
import net.minecraft.world.level.block.EntityBlock;
|
||||||
|
import net.minecraft.world.level.block.entity.BlockEntity;
|
||||||
|
import net.minecraft.world.level.block.state.BlockState;
|
||||||
|
import net.minecraft.world.level.chunk.ChunkAccess;
|
||||||
|
import net.minecraft.world.level.chunk.ChunkStatus;
|
||||||
|
import net.minecraft.world.level.chunk.LevelChunk;
|
||||||
import net.minecraft.world.level.dimension.LevelStem;
|
import net.minecraft.world.level.dimension.LevelStem;
|
||||||
import net.minecraft.world.level.levelgen.FlatLevelSource;
|
import net.minecraft.world.level.levelgen.FlatLevelSource;
|
||||||
import net.minecraft.world.level.levelgen.flat.FlatLayerInfo;
|
import net.minecraft.world.level.levelgen.flat.FlatLayerInfo;
|
||||||
@ -58,34 +76,17 @@ import org.bukkit.inventory.ItemStack;
|
|||||||
import org.jetbrains.annotations.Contract;
|
import org.jetbrains.annotations.Contract;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import com.mojang.brigadier.exceptions.CommandSyntaxException;
|
import java.awt.*;
|
||||||
import com.volmit.iris.Iris;
|
import java.awt.Color;
|
||||||
import com.volmit.iris.core.nms.INMSBinding;
|
import java.lang.reflect.Field;
|
||||||
import com.volmit.iris.engine.data.cache.AtomicCache;
|
import java.lang.reflect.InvocationTargetException;
|
||||||
import com.volmit.iris.engine.framework.Engine;
|
import java.lang.reflect.Method;
|
||||||
import com.volmit.iris.util.collection.KList;
|
import java.lang.reflect.Modifier;
|
||||||
import com.volmit.iris.util.collection.KMap;
|
import java.util.*;
|
||||||
import com.volmit.iris.util.hunk.Hunk;
|
import java.util.List;
|
||||||
import com.volmit.iris.util.json.JSONObject;
|
import java.util.concurrent.Executor;
|
||||||
import com.volmit.iris.util.mantle.Mantle;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
import com.volmit.iris.util.math.Vector3d;
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
import com.volmit.iris.util.matter.MatterBiomeInject;
|
|
||||||
import com.volmit.iris.util.nbt.mca.NBTWorld;
|
|
||||||
import com.volmit.iris.util.nbt.mca.palette.*;
|
|
||||||
import com.volmit.iris.util.nbt.tag.CompoundTag;
|
|
||||||
|
|
||||||
import it.unimi.dsi.fastutil.objects.Object2IntMap;
|
|
||||||
import net.minecraft.core.registries.Registries;
|
|
||||||
import net.minecraft.resources.ResourceKey;
|
|
||||||
import net.minecraft.resources.ResourceLocation;
|
|
||||||
import net.minecraft.server.level.ServerLevel;
|
|
||||||
import net.minecraft.world.entity.EntityType;
|
|
||||||
import net.minecraft.world.level.block.Block;
|
|
||||||
import net.minecraft.world.level.block.entity.BlockEntity;
|
|
||||||
import net.minecraft.world.level.block.state.BlockState;
|
|
||||||
import net.minecraft.world.level.chunk.ChunkAccess;
|
|
||||||
import net.minecraft.world.level.chunk.ChunkStatus;
|
|
||||||
import net.minecraft.world.level.chunk.LevelChunk;
|
|
||||||
|
|
||||||
public class NMSBinding implements INMSBinding {
|
public class NMSBinding implements INMSBinding {
|
||||||
private final KMap<Biome, Object> baseBiomeCache = new KMap<>();
|
private final KMap<Biome, Object> baseBiomeCache = new KMap<>();
|
||||||
@ -646,37 +647,16 @@ public class NMSBinding implements INMSBinding {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@SuppressWarnings("all")
|
public boolean missingDimensionTypes(ChunkGenerator generator) {
|
||||||
public KMap<String, World.Environment> getMainWorlds() {
|
if (generator == null)
|
||||||
String levelName = ServerProperties.LEVEL_NAME;
|
return registry().registryOrThrow(Registries.DIMENSION_TYPE)
|
||||||
KMap<String, World.Environment> worlds = new KMap<>();
|
.keySet()
|
||||||
for (var key : registry().registryOrThrow(Registries.LEVEL_STEM).registryKeySet()) {
|
.stream()
|
||||||
World.Environment env = World.Environment.NORMAL;
|
.noneMatch(loc -> loc.getNamespace().equals("iris"));
|
||||||
if (key == LevelStem.NETHER) {
|
if (!(generator instanceof PlatformChunkGenerator pcg))
|
||||||
if (!Bukkit.getAllowNether())
|
return false;
|
||||||
continue;
|
var dimensionKey = new ResourceLocation("iris", pcg.getTarget().getDimension().getDimensionTypeKey());
|
||||||
env = World.Environment.NETHER;
|
return !registry().registryOrThrow(Registries.DIMENSION_TYPE).containsKey(dimensionKey);
|
||||||
} else if (key == LevelStem.END) {
|
|
||||||
if (!Bukkit.getAllowEnd())
|
|
||||||
continue;
|
|
||||||
env = World.Environment.THE_END;
|
|
||||||
} else if (key != LevelStem.OVERWORLD) {
|
|
||||||
env = World.Environment.CUSTOM;
|
|
||||||
}
|
|
||||||
|
|
||||||
String worldType = env == World.Environment.CUSTOM ? key.location().getNamespace() + "_" + key.location().getPath() : env.toString().toLowerCase(Locale.ROOT);
|
|
||||||
worlds.put(key == LevelStem.OVERWORLD ? levelName : levelName + "_" + worldType, env);
|
|
||||||
}
|
|
||||||
return worlds;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean missingDimensionTypes(boolean overworld, boolean nether, boolean end) {
|
|
||||||
var registry = registry().registryOrThrow(Registries.DIMENSION_TYPE);
|
|
||||||
if (overworld) overworld = !registry.containsKey(createIrisKey(LevelStem.OVERWORLD));
|
|
||||||
if (nether) nether = !registry.containsKey(createIrisKey(LevelStem.NETHER));
|
|
||||||
if (end) end = !registry.containsKey(createIrisKey(LevelStem.END));
|
|
||||||
return overworld || nether || end;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -701,10 +681,6 @@ public class NMSBinding implements INMSBinding {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private ResourceLocation createIrisKey(ResourceKey<LevelStem> key) {
|
|
||||||
return new ResourceLocation("iris", key.location().getPath());
|
|
||||||
}
|
|
||||||
|
|
||||||
public LevelStem levelStem(RegistryAccess access, ChunkGenerator raw) {
|
public LevelStem levelStem(RegistryAccess access, ChunkGenerator raw) {
|
||||||
if (!(raw instanceof PlatformChunkGenerator gen))
|
if (!(raw instanceof PlatformChunkGenerator gen))
|
||||||
throw new IllegalStateException("Generator is not platform chunk generator!");
|
throw new IllegalStateException("Generator is not platform chunk generator!");
|
||||||
|
@ -1,51 +1,56 @@
|
|||||||
package com.volmit.iris.core.nms.v1_20_R4;
|
package com.volmit.iris.core.nms.v1_20_R4;
|
||||||
|
|
||||||
import java.awt.Color;
|
import com.mojang.brigadier.exceptions.CommandSyntaxException;
|
||||||
import java.lang.reflect.Field;
|
|
||||||
import java.lang.reflect.InvocationTargetException;
|
|
||||||
import java.lang.reflect.Method;
|
|
||||||
import java.lang.reflect.Modifier;
|
|
||||||
import java.util.*;
|
|
||||||
import java.util.concurrent.Executor;
|
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
|
||||||
import java.util.concurrent.atomic.AtomicInteger;
|
|
||||||
|
|
||||||
import com.mojang.datafixers.util.Pair;
|
import com.mojang.datafixers.util.Pair;
|
||||||
|
import com.volmit.iris.Iris;
|
||||||
|
import com.volmit.iris.core.nms.INMSBinding;
|
||||||
import com.volmit.iris.core.nms.container.BiomeColor;
|
import com.volmit.iris.core.nms.container.BiomeColor;
|
||||||
import com.volmit.iris.core.nms.datapack.DataVersion;
|
import com.volmit.iris.core.nms.datapack.DataVersion;
|
||||||
|
import com.volmit.iris.engine.data.cache.AtomicCache;
|
||||||
|
import com.volmit.iris.engine.framework.Engine;
|
||||||
import com.volmit.iris.engine.platform.PlatformChunkGenerator;
|
import com.volmit.iris.engine.platform.PlatformChunkGenerator;
|
||||||
import com.volmit.iris.util.agent.Agent;
|
import com.volmit.iris.util.agent.Agent;
|
||||||
|
import com.volmit.iris.util.collection.KList;
|
||||||
|
import com.volmit.iris.util.collection.KMap;
|
||||||
import com.volmit.iris.util.format.C;
|
import com.volmit.iris.util.format.C;
|
||||||
import com.volmit.iris.util.misc.ServerProperties;
|
import com.volmit.iris.util.hunk.Hunk;
|
||||||
|
import com.volmit.iris.util.json.JSONObject;
|
||||||
|
import com.volmit.iris.util.mantle.Mantle;
|
||||||
|
import com.volmit.iris.util.math.Vector3d;
|
||||||
|
import com.volmit.iris.util.matter.MatterBiomeInject;
|
||||||
|
import com.volmit.iris.util.nbt.mca.NBTWorld;
|
||||||
|
import com.volmit.iris.util.nbt.mca.palette.*;
|
||||||
import com.volmit.iris.util.nbt.tag.CompoundTag;
|
import com.volmit.iris.util.nbt.tag.CompoundTag;
|
||||||
import com.volmit.iris.util.scheduling.J;
|
import com.volmit.iris.util.scheduling.J;
|
||||||
|
import it.unimi.dsi.fastutil.objects.Object2IntMap;
|
||||||
import net.bytebuddy.ByteBuddy;
|
import net.bytebuddy.ByteBuddy;
|
||||||
import net.bytebuddy.asm.Advice;
|
import net.bytebuddy.asm.Advice;
|
||||||
import net.bytebuddy.matcher.ElementMatchers;
|
import net.bytebuddy.matcher.ElementMatchers;
|
||||||
import net.minecraft.core.*;
|
import net.minecraft.core.*;
|
||||||
import net.minecraft.core.Registry;
|
import net.minecraft.core.Registry;
|
||||||
import net.minecraft.core.component.DataComponents;
|
import net.minecraft.core.component.DataComponents;
|
||||||
|
import net.minecraft.core.registries.Registries;
|
||||||
import net.minecraft.nbt.*;
|
import net.minecraft.nbt.*;
|
||||||
import net.minecraft.nbt.ByteTag;
|
|
||||||
import net.minecraft.nbt.DoubleTag;
|
|
||||||
import net.minecraft.nbt.EndTag;
|
|
||||||
import net.minecraft.nbt.FloatTag;
|
|
||||||
import net.minecraft.nbt.IntTag;
|
|
||||||
import net.minecraft.nbt.LongTag;
|
|
||||||
import net.minecraft.nbt.ShortTag;
|
|
||||||
import net.minecraft.nbt.StringTag;
|
|
||||||
import net.minecraft.nbt.Tag;
|
import net.minecraft.nbt.Tag;
|
||||||
|
import net.minecraft.resources.ResourceKey;
|
||||||
|
import net.minecraft.resources.ResourceLocation;
|
||||||
import net.minecraft.server.MinecraftServer;
|
import net.minecraft.server.MinecraftServer;
|
||||||
import net.minecraft.server.commands.data.BlockDataAccessor;
|
import net.minecraft.server.commands.data.BlockDataAccessor;
|
||||||
import net.minecraft.server.level.ServerLevel;
|
import net.minecraft.server.level.ServerLevel;
|
||||||
import net.minecraft.server.level.progress.ChunkProgressListener;
|
import net.minecraft.server.level.progress.ChunkProgressListener;
|
||||||
import net.minecraft.tags.TagKey;
|
import net.minecraft.tags.TagKey;
|
||||||
import net.minecraft.world.RandomSequences;
|
import net.minecraft.world.RandomSequences;
|
||||||
|
import net.minecraft.world.entity.EntityType;
|
||||||
import net.minecraft.world.item.component.CustomData;
|
import net.minecraft.world.item.component.CustomData;
|
||||||
import net.minecraft.world.level.LevelReader;
|
import net.minecraft.world.level.LevelReader;
|
||||||
import net.minecraft.world.level.biome.Biomes;
|
import net.minecraft.world.level.biome.Biomes;
|
||||||
|
import net.minecraft.world.level.block.Block;
|
||||||
import net.minecraft.world.level.block.Blocks;
|
import net.minecraft.world.level.block.Blocks;
|
||||||
import net.minecraft.world.level.block.EntityBlock;
|
import net.minecraft.world.level.block.EntityBlock;
|
||||||
|
import net.minecraft.world.level.block.entity.BlockEntity;
|
||||||
|
import net.minecraft.world.level.block.state.BlockState;
|
||||||
|
import net.minecraft.world.level.chunk.ChunkAccess;
|
||||||
|
import net.minecraft.world.level.chunk.LevelChunk;
|
||||||
import net.minecraft.world.level.chunk.status.ChunkStatus;
|
import net.minecraft.world.level.chunk.status.ChunkStatus;
|
||||||
import net.minecraft.world.level.dimension.LevelStem;
|
import net.minecraft.world.level.dimension.LevelStem;
|
||||||
import net.minecraft.world.level.levelgen.FlatLevelSource;
|
import net.minecraft.world.level.levelgen.FlatLevelSource;
|
||||||
@ -72,31 +77,17 @@ import org.bukkit.inventory.ItemStack;
|
|||||||
import org.jetbrains.annotations.Contract;
|
import org.jetbrains.annotations.Contract;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import com.mojang.brigadier.exceptions.CommandSyntaxException;
|
import java.awt.*;
|
||||||
import com.volmit.iris.Iris;
|
import java.awt.Color;
|
||||||
import com.volmit.iris.core.nms.INMSBinding;
|
import java.lang.reflect.Field;
|
||||||
import com.volmit.iris.engine.data.cache.AtomicCache;
|
import java.lang.reflect.InvocationTargetException;
|
||||||
import com.volmit.iris.engine.framework.Engine;
|
import java.lang.reflect.Method;
|
||||||
import com.volmit.iris.util.collection.KList;
|
import java.lang.reflect.Modifier;
|
||||||
import com.volmit.iris.util.collection.KMap;
|
import java.util.*;
|
||||||
import com.volmit.iris.util.hunk.Hunk;
|
import java.util.List;
|
||||||
import com.volmit.iris.util.json.JSONObject;
|
import java.util.concurrent.Executor;
|
||||||
import com.volmit.iris.util.mantle.Mantle;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
import com.volmit.iris.util.math.Vector3d;
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
import com.volmit.iris.util.matter.MatterBiomeInject;
|
|
||||||
import com.volmit.iris.util.nbt.mca.NBTWorld;
|
|
||||||
import com.volmit.iris.util.nbt.mca.palette.*;
|
|
||||||
|
|
||||||
import it.unimi.dsi.fastutil.objects.Object2IntMap;
|
|
||||||
import net.minecraft.core.registries.Registries;
|
|
||||||
import net.minecraft.resources.ResourceKey;
|
|
||||||
import net.minecraft.resources.ResourceLocation;
|
|
||||||
import net.minecraft.world.entity.EntityType;
|
|
||||||
import net.minecraft.world.level.block.Block;
|
|
||||||
import net.minecraft.world.level.block.entity.BlockEntity;
|
|
||||||
import net.minecraft.world.level.block.state.BlockState;
|
|
||||||
import net.minecraft.world.level.chunk.ChunkAccess;
|
|
||||||
import net.minecraft.world.level.chunk.LevelChunk;
|
|
||||||
|
|
||||||
public class NMSBinding implements INMSBinding {
|
public class NMSBinding implements INMSBinding {
|
||||||
private final KMap<Biome, Object> baseBiomeCache = new KMap<>();
|
private final KMap<Biome, Object> baseBiomeCache = new KMap<>();
|
||||||
@ -674,37 +665,16 @@ public class NMSBinding implements INMSBinding {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@SuppressWarnings("all")
|
public boolean missingDimensionTypes(ChunkGenerator generator) {
|
||||||
public KMap<String, World.Environment> getMainWorlds() {
|
if (generator == null)
|
||||||
String levelName = ServerProperties.LEVEL_NAME;
|
return registry().registryOrThrow(Registries.DIMENSION_TYPE)
|
||||||
KMap<String, World.Environment> worlds = new KMap<>();
|
.keySet()
|
||||||
for (var key : registry().registryOrThrow(Registries.LEVEL_STEM).registryKeySet()) {
|
.stream()
|
||||||
World.Environment env = World.Environment.NORMAL;
|
.noneMatch(loc -> loc.getNamespace().equals("iris"));
|
||||||
if (key == LevelStem.NETHER) {
|
if (!(generator instanceof PlatformChunkGenerator pcg))
|
||||||
if (!Bukkit.getAllowNether())
|
return false;
|
||||||
continue;
|
var dimensionKey = new ResourceLocation("iris", pcg.getTarget().getDimension().getDimensionTypeKey());
|
||||||
env = World.Environment.NETHER;
|
return !registry().registryOrThrow(Registries.DIMENSION_TYPE).containsKey(dimensionKey);
|
||||||
} else if (key == LevelStem.END) {
|
|
||||||
if (!Bukkit.getAllowEnd())
|
|
||||||
continue;
|
|
||||||
env = World.Environment.THE_END;
|
|
||||||
} else if (key != LevelStem.OVERWORLD) {
|
|
||||||
env = World.Environment.CUSTOM;
|
|
||||||
}
|
|
||||||
|
|
||||||
String worldType = env == World.Environment.CUSTOM ? key.location().getNamespace() + "_" + key.location().getPath() : env.toString().toLowerCase(Locale.ROOT);
|
|
||||||
worlds.put(key == LevelStem.OVERWORLD ? levelName : levelName + "_" + worldType, env);
|
|
||||||
}
|
|
||||||
return worlds;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean missingDimensionTypes(boolean overworld, boolean nether, boolean end) {
|
|
||||||
var registry = registry().registryOrThrow(Registries.DIMENSION_TYPE);
|
|
||||||
if (overworld) overworld = !registry.containsKey(createIrisKey(LevelStem.OVERWORLD));
|
|
||||||
if (nether) nether = !registry.containsKey(createIrisKey(LevelStem.NETHER));
|
|
||||||
if (end) end = !registry.containsKey(createIrisKey(LevelStem.END));
|
|
||||||
return overworld || nether || end;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -729,10 +699,6 @@ public class NMSBinding implements INMSBinding {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private ResourceLocation createIrisKey(ResourceKey<LevelStem> key) {
|
|
||||||
return new ResourceLocation("iris", key.location().getPath());
|
|
||||||
}
|
|
||||||
|
|
||||||
public LevelStem levelStem(RegistryAccess access, ChunkGenerator raw) {
|
public LevelStem levelStem(RegistryAccess access, ChunkGenerator raw) {
|
||||||
if (!(raw instanceof PlatformChunkGenerator gen))
|
if (!(raw instanceof PlatformChunkGenerator gen))
|
||||||
throw new IllegalStateException("Generator is not platform chunk generator!");
|
throw new IllegalStateException("Generator is not platform chunk generator!");
|
||||||
|
@ -1,41 +1,58 @@
|
|||||||
package com.volmit.iris.core.nms.v1_21_R1;
|
package com.volmit.iris.core.nms.v1_21_R1;
|
||||||
|
|
||||||
import java.awt.Color;
|
import com.mojang.brigadier.exceptions.CommandSyntaxException;
|
||||||
import java.lang.reflect.Field;
|
|
||||||
import java.lang.reflect.InvocationTargetException;
|
|
||||||
import java.lang.reflect.Method;
|
|
||||||
import java.lang.reflect.Modifier;
|
|
||||||
import java.util.*;
|
|
||||||
import java.util.concurrent.Executor;
|
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
|
||||||
import java.util.concurrent.atomic.AtomicInteger;
|
|
||||||
|
|
||||||
import com.mojang.datafixers.util.Pair;
|
import com.mojang.datafixers.util.Pair;
|
||||||
|
import com.volmit.iris.Iris;
|
||||||
|
import com.volmit.iris.core.nms.INMSBinding;
|
||||||
import com.volmit.iris.core.nms.container.BiomeColor;
|
import com.volmit.iris.core.nms.container.BiomeColor;
|
||||||
import com.volmit.iris.core.nms.datapack.DataVersion;
|
import com.volmit.iris.core.nms.datapack.DataVersion;
|
||||||
|
import com.volmit.iris.engine.data.cache.AtomicCache;
|
||||||
|
import com.volmit.iris.engine.framework.Engine;
|
||||||
import com.volmit.iris.engine.platform.PlatformChunkGenerator;
|
import com.volmit.iris.engine.platform.PlatformChunkGenerator;
|
||||||
import com.volmit.iris.util.agent.Agent;
|
import com.volmit.iris.util.agent.Agent;
|
||||||
|
import com.volmit.iris.util.collection.KList;
|
||||||
|
import com.volmit.iris.util.collection.KMap;
|
||||||
import com.volmit.iris.util.format.C;
|
import com.volmit.iris.util.format.C;
|
||||||
import com.volmit.iris.util.misc.ServerProperties;
|
import com.volmit.iris.util.hunk.Hunk;
|
||||||
|
import com.volmit.iris.util.json.JSONObject;
|
||||||
|
import com.volmit.iris.util.mantle.Mantle;
|
||||||
|
import com.volmit.iris.util.math.Vector3d;
|
||||||
|
import com.volmit.iris.util.matter.MatterBiomeInject;
|
||||||
|
import com.volmit.iris.util.nbt.mca.NBTWorld;
|
||||||
|
import com.volmit.iris.util.nbt.mca.palette.*;
|
||||||
|
import com.volmit.iris.util.nbt.tag.CompoundTag;
|
||||||
import com.volmit.iris.util.scheduling.J;
|
import com.volmit.iris.util.scheduling.J;
|
||||||
|
import it.unimi.dsi.fastutil.objects.Object2IntMap;
|
||||||
import net.bytebuddy.ByteBuddy;
|
import net.bytebuddy.ByteBuddy;
|
||||||
import net.bytebuddy.asm.Advice;
|
import net.bytebuddy.asm.Advice;
|
||||||
import net.bytebuddy.matcher.ElementMatchers;
|
import net.bytebuddy.matcher.ElementMatchers;
|
||||||
import net.minecraft.core.*;
|
import net.minecraft.core.BlockPos;
|
||||||
|
import net.minecraft.core.Holder;
|
||||||
import net.minecraft.core.Registry;
|
import net.minecraft.core.Registry;
|
||||||
|
import net.minecraft.core.RegistryAccess;
|
||||||
import net.minecraft.core.component.DataComponents;
|
import net.minecraft.core.component.DataComponents;
|
||||||
|
import net.minecraft.core.registries.Registries;
|
||||||
import net.minecraft.nbt.*;
|
import net.minecraft.nbt.*;
|
||||||
import net.minecraft.nbt.Tag;
|
import net.minecraft.nbt.Tag;
|
||||||
|
import net.minecraft.resources.ResourceKey;
|
||||||
|
import net.minecraft.resources.ResourceLocation;
|
||||||
import net.minecraft.server.MinecraftServer;
|
import net.minecraft.server.MinecraftServer;
|
||||||
import net.minecraft.server.commands.data.BlockDataAccessor;
|
import net.minecraft.server.commands.data.BlockDataAccessor;
|
||||||
|
import net.minecraft.server.level.ServerLevel;
|
||||||
import net.minecraft.server.level.progress.ChunkProgressListener;
|
import net.minecraft.server.level.progress.ChunkProgressListener;
|
||||||
import net.minecraft.tags.TagKey;
|
import net.minecraft.tags.TagKey;
|
||||||
import net.minecraft.world.RandomSequences;
|
import net.minecraft.world.RandomSequences;
|
||||||
|
import net.minecraft.world.entity.EntityType;
|
||||||
import net.minecraft.world.item.component.CustomData;
|
import net.minecraft.world.item.component.CustomData;
|
||||||
import net.minecraft.world.level.LevelReader;
|
import net.minecraft.world.level.LevelReader;
|
||||||
import net.minecraft.world.level.biome.Biomes;
|
import net.minecraft.world.level.biome.Biomes;
|
||||||
|
import net.minecraft.world.level.block.Block;
|
||||||
import net.minecraft.world.level.block.Blocks;
|
import net.minecraft.world.level.block.Blocks;
|
||||||
import net.minecraft.world.level.block.EntityBlock;
|
import net.minecraft.world.level.block.EntityBlock;
|
||||||
|
import net.minecraft.world.level.block.entity.BlockEntity;
|
||||||
|
import net.minecraft.world.level.block.state.BlockState;
|
||||||
|
import net.minecraft.world.level.chunk.ChunkAccess;
|
||||||
|
import net.minecraft.world.level.chunk.LevelChunk;
|
||||||
import net.minecraft.world.level.chunk.status.ChunkStatus;
|
import net.minecraft.world.level.chunk.status.ChunkStatus;
|
||||||
import net.minecraft.world.level.chunk.status.WorldGenContext;
|
import net.minecraft.world.level.chunk.status.WorldGenContext;
|
||||||
import net.minecraft.world.level.dimension.LevelStem;
|
import net.minecraft.world.level.dimension.LevelStem;
|
||||||
@ -63,33 +80,17 @@ import org.bukkit.inventory.ItemStack;
|
|||||||
import org.jetbrains.annotations.Contract;
|
import org.jetbrains.annotations.Contract;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import com.mojang.brigadier.exceptions.CommandSyntaxException;
|
import java.awt.*;
|
||||||
import com.volmit.iris.Iris;
|
import java.awt.Color;
|
||||||
import com.volmit.iris.core.nms.INMSBinding;
|
import java.lang.reflect.Field;
|
||||||
import com.volmit.iris.engine.data.cache.AtomicCache;
|
import java.lang.reflect.InvocationTargetException;
|
||||||
import com.volmit.iris.engine.framework.Engine;
|
import java.lang.reflect.Method;
|
||||||
import com.volmit.iris.util.collection.KList;
|
import java.lang.reflect.Modifier;
|
||||||
import com.volmit.iris.util.collection.KMap;
|
import java.util.*;
|
||||||
import com.volmit.iris.util.hunk.Hunk;
|
import java.util.List;
|
||||||
import com.volmit.iris.util.json.JSONObject;
|
import java.util.concurrent.Executor;
|
||||||
import com.volmit.iris.util.mantle.Mantle;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
import com.volmit.iris.util.math.Vector3d;
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
import com.volmit.iris.util.matter.MatterBiomeInject;
|
|
||||||
import com.volmit.iris.util.nbt.mca.NBTWorld;
|
|
||||||
import com.volmit.iris.util.nbt.mca.palette.*;
|
|
||||||
import com.volmit.iris.util.nbt.tag.CompoundTag;
|
|
||||||
|
|
||||||
import it.unimi.dsi.fastutil.objects.Object2IntMap;
|
|
||||||
import net.minecraft.core.registries.Registries;
|
|
||||||
import net.minecraft.resources.ResourceKey;
|
|
||||||
import net.minecraft.resources.ResourceLocation;
|
|
||||||
import net.minecraft.server.level.ServerLevel;
|
|
||||||
import net.minecraft.world.entity.EntityType;
|
|
||||||
import net.minecraft.world.level.block.Block;
|
|
||||||
import net.minecraft.world.level.block.entity.BlockEntity;
|
|
||||||
import net.minecraft.world.level.block.state.BlockState;
|
|
||||||
import net.minecraft.world.level.chunk.ChunkAccess;
|
|
||||||
import net.minecraft.world.level.chunk.LevelChunk;
|
|
||||||
|
|
||||||
public class NMSBinding implements INMSBinding {
|
public class NMSBinding implements INMSBinding {
|
||||||
private final KMap<Biome, Object> baseBiomeCache = new KMap<>();
|
private final KMap<Biome, Object> baseBiomeCache = new KMap<>();
|
||||||
@ -674,37 +675,16 @@ public class NMSBinding implements INMSBinding {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@SuppressWarnings("all")
|
public boolean missingDimensionTypes(ChunkGenerator generator) {
|
||||||
public KMap<String, World.Environment> getMainWorlds() {
|
if (generator == null)
|
||||||
String levelName = ServerProperties.LEVEL_NAME;
|
return registry().registryOrThrow(Registries.DIMENSION_TYPE)
|
||||||
KMap<String, World.Environment> worlds = new KMap<>();
|
.keySet()
|
||||||
for (var key : registry().registryOrThrow(Registries.LEVEL_STEM).registryKeySet()) {
|
.stream()
|
||||||
World.Environment env = World.Environment.NORMAL;
|
.noneMatch(loc -> loc.getNamespace().equals("iris"));
|
||||||
if (key == LevelStem.NETHER) {
|
if (!(generator instanceof PlatformChunkGenerator pcg))
|
||||||
if (!Bukkit.getAllowNether())
|
return false;
|
||||||
continue;
|
var dimensionKey = ResourceLocation.fromNamespaceAndPath("iris", pcg.getTarget().getDimension().getDimensionTypeKey());
|
||||||
env = World.Environment.NETHER;
|
return !registry().registryOrThrow(Registries.DIMENSION_TYPE).containsKey(dimensionKey);
|
||||||
} else if (key == LevelStem.END) {
|
|
||||||
if (!Bukkit.getAllowEnd())
|
|
||||||
continue;
|
|
||||||
env = World.Environment.THE_END;
|
|
||||||
} else if (key != LevelStem.OVERWORLD) {
|
|
||||||
env = World.Environment.CUSTOM;
|
|
||||||
}
|
|
||||||
|
|
||||||
String worldType = env == World.Environment.CUSTOM ? key.location().getNamespace() + "_" + key.location().getPath() : env.toString().toLowerCase(Locale.ROOT);
|
|
||||||
worlds.put(key == LevelStem.OVERWORLD ? levelName : levelName + "_" + worldType, env);
|
|
||||||
}
|
|
||||||
return worlds;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean missingDimensionTypes(boolean overworld, boolean nether, boolean end) {
|
|
||||||
var registry = registry().registryOrThrow(Registries.DIMENSION_TYPE);
|
|
||||||
if (overworld) overworld = !registry.containsKey(createIrisKey(LevelStem.OVERWORLD));
|
|
||||||
if (nether) nether = !registry.containsKey(createIrisKey(LevelStem.NETHER));
|
|
||||||
if (end) end = !registry.containsKey(createIrisKey(LevelStem.END));
|
|
||||||
return overworld || nether || end;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -729,12 +709,6 @@ public class NMSBinding implements INMSBinding {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private ResourceLocation createIrisKey(ResourceKey<LevelStem> key) {
|
|
||||||
return ResourceLocation.fromNamespaceAndPath("iris", key.location().getPath());
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public LevelStem levelStem(RegistryAccess access, ChunkGenerator raw) {
|
public LevelStem levelStem(RegistryAccess access, ChunkGenerator raw) {
|
||||||
if (!(raw instanceof PlatformChunkGenerator gen))
|
if (!(raw instanceof PlatformChunkGenerator gen))
|
||||||
throw new IllegalStateException("Generator is not platform chunk generator!");
|
throw new IllegalStateException("Generator is not platform chunk generator!");
|
||||||
|
@ -1,40 +1,55 @@
|
|||||||
package com.volmit.iris.core.nms.v1_21_R2;
|
package com.volmit.iris.core.nms.v1_21_R2;
|
||||||
|
|
||||||
import java.awt.Color;
|
import com.mojang.brigadier.exceptions.CommandSyntaxException;
|
||||||
import java.lang.reflect.Field;
|
import com.volmit.iris.Iris;
|
||||||
import java.lang.reflect.InvocationTargetException;
|
import com.volmit.iris.core.nms.INMSBinding;
|
||||||
import java.lang.reflect.Method;
|
|
||||||
import java.lang.reflect.Modifier;
|
|
||||||
import java.util.*;
|
|
||||||
import java.util.concurrent.Executor;
|
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
|
||||||
import java.util.concurrent.atomic.AtomicInteger;
|
|
||||||
|
|
||||||
import com.volmit.iris.core.nms.container.BiomeColor;
|
import com.volmit.iris.core.nms.container.BiomeColor;
|
||||||
import com.volmit.iris.core.nms.datapack.DataVersion;
|
import com.volmit.iris.core.nms.datapack.DataVersion;
|
||||||
|
import com.volmit.iris.engine.data.cache.AtomicCache;
|
||||||
|
import com.volmit.iris.engine.framework.Engine;
|
||||||
import com.volmit.iris.engine.platform.PlatformChunkGenerator;
|
import com.volmit.iris.engine.platform.PlatformChunkGenerator;
|
||||||
import com.volmit.iris.util.agent.Agent;
|
import com.volmit.iris.util.agent.Agent;
|
||||||
|
import com.volmit.iris.util.collection.KList;
|
||||||
|
import com.volmit.iris.util.collection.KMap;
|
||||||
import com.volmit.iris.util.format.C;
|
import com.volmit.iris.util.format.C;
|
||||||
import com.volmit.iris.util.misc.ServerProperties;
|
import com.volmit.iris.util.hunk.Hunk;
|
||||||
|
import com.volmit.iris.util.json.JSONObject;
|
||||||
|
import com.volmit.iris.util.mantle.Mantle;
|
||||||
|
import com.volmit.iris.util.math.Vector3d;
|
||||||
|
import com.volmit.iris.util.matter.MatterBiomeInject;
|
||||||
|
import com.volmit.iris.util.nbt.mca.NBTWorld;
|
||||||
|
import com.volmit.iris.util.nbt.mca.palette.*;
|
||||||
|
import com.volmit.iris.util.nbt.tag.CompoundTag;
|
||||||
import com.volmit.iris.util.scheduling.J;
|
import com.volmit.iris.util.scheduling.J;
|
||||||
|
import it.unimi.dsi.fastutil.objects.Object2IntMap;
|
||||||
import net.bytebuddy.ByteBuddy;
|
import net.bytebuddy.ByteBuddy;
|
||||||
import net.bytebuddy.asm.Advice;
|
import net.bytebuddy.asm.Advice;
|
||||||
import net.bytebuddy.matcher.ElementMatchers;
|
import net.bytebuddy.matcher.ElementMatchers;
|
||||||
import net.minecraft.core.*;
|
import net.minecraft.core.*;
|
||||||
import net.minecraft.core.Registry;
|
import net.minecraft.core.Registry;
|
||||||
import net.minecraft.core.component.DataComponents;
|
import net.minecraft.core.component.DataComponents;
|
||||||
|
import net.minecraft.core.registries.Registries;
|
||||||
import net.minecraft.nbt.*;
|
import net.minecraft.nbt.*;
|
||||||
import net.minecraft.nbt.Tag;
|
import net.minecraft.nbt.Tag;
|
||||||
|
import net.minecraft.resources.ResourceKey;
|
||||||
|
import net.minecraft.resources.ResourceLocation;
|
||||||
import net.minecraft.server.MinecraftServer;
|
import net.minecraft.server.MinecraftServer;
|
||||||
import net.minecraft.server.commands.data.BlockDataAccessor;
|
import net.minecraft.server.commands.data.BlockDataAccessor;
|
||||||
|
import net.minecraft.server.level.ServerLevel;
|
||||||
import net.minecraft.server.level.progress.ChunkProgressListener;
|
import net.minecraft.server.level.progress.ChunkProgressListener;
|
||||||
import net.minecraft.tags.TagKey;
|
import net.minecraft.tags.TagKey;
|
||||||
import net.minecraft.world.RandomSequences;
|
import net.minecraft.world.RandomSequences;
|
||||||
|
import net.minecraft.world.entity.EntityType;
|
||||||
import net.minecraft.world.item.component.CustomData;
|
import net.minecraft.world.item.component.CustomData;
|
||||||
import net.minecraft.world.level.LevelReader;
|
import net.minecraft.world.level.LevelReader;
|
||||||
import net.minecraft.world.level.biome.Biomes;
|
import net.minecraft.world.level.biome.Biomes;
|
||||||
|
import net.minecraft.world.level.block.Block;
|
||||||
import net.minecraft.world.level.block.Blocks;
|
import net.minecraft.world.level.block.Blocks;
|
||||||
import net.minecraft.world.level.block.EntityBlock;
|
import net.minecraft.world.level.block.EntityBlock;
|
||||||
|
import net.minecraft.world.level.block.entity.BlockEntity;
|
||||||
|
import net.minecraft.world.level.block.state.BlockState;
|
||||||
|
import net.minecraft.world.level.chunk.ChunkAccess;
|
||||||
|
import net.minecraft.world.level.chunk.LevelChunk;
|
||||||
import net.minecraft.world.level.chunk.status.ChunkStatus;
|
import net.minecraft.world.level.chunk.status.ChunkStatus;
|
||||||
import net.minecraft.world.level.chunk.status.WorldGenContext;
|
import net.minecraft.world.level.chunk.status.WorldGenContext;
|
||||||
import net.minecraft.world.level.dimension.LevelStem;
|
import net.minecraft.world.level.dimension.LevelStem;
|
||||||
@ -62,33 +77,17 @@ import org.bukkit.inventory.ItemStack;
|
|||||||
import org.jetbrains.annotations.Contract;
|
import org.jetbrains.annotations.Contract;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import com.mojang.brigadier.exceptions.CommandSyntaxException;
|
import java.awt.*;
|
||||||
import com.volmit.iris.Iris;
|
import java.awt.Color;
|
||||||
import com.volmit.iris.core.nms.INMSBinding;
|
import java.lang.reflect.Field;
|
||||||
import com.volmit.iris.engine.data.cache.AtomicCache;
|
import java.lang.reflect.InvocationTargetException;
|
||||||
import com.volmit.iris.engine.framework.Engine;
|
import java.lang.reflect.Method;
|
||||||
import com.volmit.iris.util.collection.KList;
|
import java.lang.reflect.Modifier;
|
||||||
import com.volmit.iris.util.collection.KMap;
|
import java.util.*;
|
||||||
import com.volmit.iris.util.hunk.Hunk;
|
import java.util.List;
|
||||||
import com.volmit.iris.util.json.JSONObject;
|
import java.util.concurrent.Executor;
|
||||||
import com.volmit.iris.util.mantle.Mantle;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
import com.volmit.iris.util.math.Vector3d;
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
import com.volmit.iris.util.matter.MatterBiomeInject;
|
|
||||||
import com.volmit.iris.util.nbt.mca.NBTWorld;
|
|
||||||
import com.volmit.iris.util.nbt.mca.palette.*;
|
|
||||||
import com.volmit.iris.util.nbt.tag.CompoundTag;
|
|
||||||
|
|
||||||
import it.unimi.dsi.fastutil.objects.Object2IntMap;
|
|
||||||
import net.minecraft.core.registries.Registries;
|
|
||||||
import net.minecraft.resources.ResourceKey;
|
|
||||||
import net.minecraft.resources.ResourceLocation;
|
|
||||||
import net.minecraft.server.level.ServerLevel;
|
|
||||||
import net.minecraft.world.entity.EntityType;
|
|
||||||
import net.minecraft.world.level.block.Block;
|
|
||||||
import net.minecraft.world.level.block.entity.BlockEntity;
|
|
||||||
import net.minecraft.world.level.block.state.BlockState;
|
|
||||||
import net.minecraft.world.level.chunk.ChunkAccess;
|
|
||||||
import net.minecraft.world.level.chunk.LevelChunk;
|
|
||||||
|
|
||||||
public class NMSBinding implements INMSBinding {
|
public class NMSBinding implements INMSBinding {
|
||||||
private final KMap<Biome, Object> baseBiomeCache = new KMap<>();
|
private final KMap<Biome, Object> baseBiomeCache = new KMap<>();
|
||||||
@ -673,37 +672,16 @@ public class NMSBinding implements INMSBinding {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@SuppressWarnings("all")
|
public boolean missingDimensionTypes(ChunkGenerator generator) {
|
||||||
public KMap<String, World.Environment> getMainWorlds() {
|
if (generator == null)
|
||||||
String levelName = ServerProperties.LEVEL_NAME;
|
return registry().lookupOrThrow(Registries.DIMENSION_TYPE)
|
||||||
KMap<String, World.Environment> worlds = new KMap<>();
|
.keySet()
|
||||||
for (var key : registry().lookupOrThrow(Registries.LEVEL_STEM).registryKeySet()) {
|
.stream()
|
||||||
World.Environment env = World.Environment.NORMAL;
|
.noneMatch(loc -> loc.getNamespace().equals("iris"));
|
||||||
if (key == LevelStem.NETHER) {
|
if (!(generator instanceof PlatformChunkGenerator pcg))
|
||||||
if (!Bukkit.getAllowNether())
|
return false;
|
||||||
continue;
|
var dimensionKey = ResourceLocation.fromNamespaceAndPath("iris", pcg.getTarget().getDimension().getDimensionTypeKey());
|
||||||
env = World.Environment.NETHER;
|
return !registry().lookupOrThrow(Registries.DIMENSION_TYPE).containsKey(dimensionKey);
|
||||||
} else if (key == LevelStem.END) {
|
|
||||||
if (!Bukkit.getAllowEnd())
|
|
||||||
continue;
|
|
||||||
env = World.Environment.THE_END;
|
|
||||||
} else if (key != LevelStem.OVERWORLD) {
|
|
||||||
env = World.Environment.CUSTOM;
|
|
||||||
}
|
|
||||||
|
|
||||||
String worldType = env == World.Environment.CUSTOM ? key.location().getNamespace() + "_" + key.location().getPath() : env.toString().toLowerCase(Locale.ROOT);
|
|
||||||
worlds.put(key == LevelStem.OVERWORLD ? levelName : levelName + "_" + worldType, env);
|
|
||||||
}
|
|
||||||
return worlds;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean missingDimensionTypes(boolean overworld, boolean nether, boolean end) {
|
|
||||||
var registry = registry().lookupOrThrow(Registries.DIMENSION_TYPE);
|
|
||||||
if (overworld) overworld = !registry.containsKey(createIrisKey(LevelStem.OVERWORLD));
|
|
||||||
if (nether) nether = !registry.containsKey(createIrisKey(LevelStem.NETHER));
|
|
||||||
if (end) end = !registry.containsKey(createIrisKey(LevelStem.END));
|
|
||||||
return overworld || nether || end;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -728,10 +706,6 @@ public class NMSBinding implements INMSBinding {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private ResourceLocation createIrisKey(ResourceKey<LevelStem> key) {
|
|
||||||
return ResourceLocation.fromNamespaceAndPath("iris", key.location().getPath());
|
|
||||||
}
|
|
||||||
|
|
||||||
public LevelStem levelStem(RegistryAccess access, ChunkGenerator raw) {
|
public LevelStem levelStem(RegistryAccess access, ChunkGenerator raw) {
|
||||||
if (!(raw instanceof PlatformChunkGenerator gen))
|
if (!(raw instanceof PlatformChunkGenerator gen))
|
||||||
throw new IllegalStateException("Generator is not platform chunk generator!");
|
throw new IllegalStateException("Generator is not platform chunk generator!");
|
||||||
|
@ -25,12 +25,12 @@ import it.unimi.dsi.fastutil.objects.Object2IntMap;
|
|||||||
import net.bytebuddy.ByteBuddy;
|
import net.bytebuddy.ByteBuddy;
|
||||||
import net.bytebuddy.asm.Advice;
|
import net.bytebuddy.asm.Advice;
|
||||||
import net.bytebuddy.matcher.ElementMatchers;
|
import net.bytebuddy.matcher.ElementMatchers;
|
||||||
import net.minecraft.core.Registry;
|
|
||||||
import net.minecraft.core.*;
|
import net.minecraft.core.*;
|
||||||
|
import net.minecraft.core.Registry;
|
||||||
import net.minecraft.core.component.DataComponents;
|
import net.minecraft.core.component.DataComponents;
|
||||||
import net.minecraft.core.registries.Registries;
|
import net.minecraft.core.registries.Registries;
|
||||||
import net.minecraft.nbt.Tag;
|
|
||||||
import net.minecraft.nbt.*;
|
import net.minecraft.nbt.*;
|
||||||
|
import net.minecraft.nbt.Tag;
|
||||||
import net.minecraft.resources.ResourceKey;
|
import net.minecraft.resources.ResourceKey;
|
||||||
import net.minecraft.resources.ResourceLocation;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
import net.minecraft.server.MinecraftServer;
|
import net.minecraft.server.MinecraftServer;
|
||||||
@ -77,13 +77,14 @@ import org.bukkit.inventory.ItemStack;
|
|||||||
import org.jetbrains.annotations.Contract;
|
import org.jetbrains.annotations.Contract;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
import java.awt.*;
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.lang.reflect.InvocationTargetException;
|
import java.lang.reflect.InvocationTargetException;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
import java.lang.reflect.Modifier;
|
import java.lang.reflect.Modifier;
|
||||||
import java.util.List;
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
import java.util.List;
|
||||||
import java.util.concurrent.Executor;
|
import java.util.concurrent.Executor;
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
import java.util.concurrent.atomic.AtomicInteger;
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
@ -671,37 +672,16 @@ public class NMSBinding implements INMSBinding {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@SuppressWarnings("all")
|
public boolean missingDimensionTypes(ChunkGenerator generator) {
|
||||||
public KMap<String, World.Environment> getMainWorlds() {
|
if (generator == null)
|
||||||
String levelName = ServerProperties.LEVEL_NAME;
|
return registry().lookupOrThrow(Registries.DIMENSION_TYPE)
|
||||||
KMap<String, World.Environment> worlds = new KMap<>();
|
.keySet()
|
||||||
for (var key : registry().lookupOrThrow(Registries.LEVEL_STEM).registryKeySet()) {
|
.stream()
|
||||||
World.Environment env = World.Environment.NORMAL;
|
.noneMatch(loc -> loc.getNamespace().equals("iris"));
|
||||||
if (key == LevelStem.NETHER) {
|
if (!(generator instanceof PlatformChunkGenerator pcg))
|
||||||
if (!Bukkit.getAllowNether())
|
return false;
|
||||||
continue;
|
var dimensionKey = ResourceLocation.fromNamespaceAndPath("iris", pcg.getTarget().getDimension().getDimensionTypeKey());
|
||||||
env = World.Environment.NETHER;
|
return !registry().lookupOrThrow(Registries.DIMENSION_TYPE).containsKey(dimensionKey);
|
||||||
} else if (key == LevelStem.END) {
|
|
||||||
if (!Bukkit.getAllowEnd())
|
|
||||||
continue;
|
|
||||||
env = World.Environment.THE_END;
|
|
||||||
} else if (key != LevelStem.OVERWORLD) {
|
|
||||||
env = World.Environment.CUSTOM;
|
|
||||||
}
|
|
||||||
|
|
||||||
String worldType = env == World.Environment.CUSTOM ? key.location().getNamespace() + "_" + key.location().getPath() : env.toString().toLowerCase(Locale.ROOT);
|
|
||||||
worlds.put(key == LevelStem.OVERWORLD ? levelName : levelName + "_" + worldType, env);
|
|
||||||
}
|
|
||||||
return worlds;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean missingDimensionTypes(boolean overworld, boolean nether, boolean end) {
|
|
||||||
var registry = registry().lookupOrThrow(Registries.DIMENSION_TYPE);
|
|
||||||
if (overworld) overworld = !registry.containsKey(createIrisKey(LevelStem.OVERWORLD));
|
|
||||||
if (nether) nether = !registry.containsKey(createIrisKey(LevelStem.NETHER));
|
|
||||||
if (end) end = !registry.containsKey(createIrisKey(LevelStem.END));
|
|
||||||
return overworld || nether || end;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
Loading…
x
Reference in New Issue
Block a user