Pocket generation
Changes to be committed: modified: src/main/java/org/dimdev/dimdoors/ModConfig.java modified: src/main/java/org/dimdev/dimdoors/mixin/EntityMixin.java modified: src/main/java/org/dimdev/dimdoors/pockets/PocketGenerator.java modified: src/main/java/org/dimdev/dimdoors/pockets/PocketTemplate.java modified: src/main/java/org/dimdev/dimdoors/pockets/PocketTemplateV2.java modified: src/main/java/org/dimdev/dimdoors/pockets/PocketType.java modified: src/main/java/org/dimdev/dimdoors/pockets/SchematicV2Handler.java modified: src/main/java/org/dimdev/dimdoors/pockets/TemplateUtils.java modified: src/main/java/org/dimdev/dimdoors/rift/registry/RegistryVertex.java modified: src/main/java/org/dimdev/dimdoors/rift/registry/RiftRegistry.java modified: src/main/java/org/dimdev/dimdoors/rift/targets/PrivatePocketExitTarget.java modified: src/main/java/org/dimdev/dimdoors/world/ModDimensions.java deleted: src/main/java/org/dimdev/dimdoors/world/limbo/LimboBiomeSource.java modified: src/main/java/org/dimdev/dimdoors/world/limbo/LimboChunkGenerator.java modified: src/main/java/org/dimdev/dimdoors/world/limbo/LimboDecay.java modified: src/main/java/org/dimdev/dimdoors/world/pocket/PocketRegistry.java modified: src/main/java/org/dimdev/dimdoors/world/pocket/PrivatePocketData.java modified: src/main/java/org/dimdev/dimdoors/world/pocket/VirtualLocation.java modified: src/main/resources/data/dimdoors/pockets/json/v2/default_private.json modified: src/main/resources/data/dimdoors/pockets/json/v2/default_public.json
This commit is contained in:
parent
869678dec9
commit
255c7f7acd
20 changed files with 190 additions and 100 deletions
|
@ -11,6 +11,8 @@ import java.util.Set;
|
|||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
import org.dimdev.dimdoors.util.Codecs;
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.GsonBuilder;
|
||||
import com.google.gson.JsonParser;
|
||||
import com.mojang.serialization.Codec;
|
||||
import com.mojang.serialization.JsonOps;
|
||||
|
@ -21,6 +23,7 @@ import net.fabricmc.loader.api.FabricLoader;
|
|||
public final class ModConfig {
|
||||
public static ModConfig INSTANCE;
|
||||
private static final Path CONFIG_PATH;
|
||||
private static final Gson GSON;
|
||||
private static final Codec<ModConfig> CODEC;
|
||||
private static final String DEFAULT;
|
||||
private static final ModConfig FALLBACK;
|
||||
|
@ -247,7 +250,7 @@ public final class ModConfig {
|
|||
).getOrThrow(false, System.err::println).getFirst();
|
||||
return 1;
|
||||
} catch (IOException e) {
|
||||
System.err.println("An Unexpected error occured when deserializing the Config. Using default values for now.");
|
||||
LOGGER.error("An Unexpected error occured when deserializing the Config. Using default values for now.");
|
||||
e.printStackTrace();
|
||||
INSTANCE = FALLBACK;
|
||||
return -1;
|
||||
|
@ -265,6 +268,7 @@ public final class ModConfig {
|
|||
Graphics.CODEC.fieldOf("graphics").forGetter(ModConfig::getGraphicsConfig)
|
||||
).apply(instance, ModConfig::new));
|
||||
CONFIG_PATH = FabricLoader.getInstance().getConfigDir().resolve("dimensional_doors.json");
|
||||
GSON = new GsonBuilder().setLenient().setPrettyPrinting().create();
|
||||
FALLBACK = new ModConfig(
|
||||
new General(),
|
||||
new Pockets(),
|
||||
|
@ -275,9 +279,7 @@ public final class ModConfig {
|
|||
new Graphics()
|
||||
);
|
||||
INSTANCE = FALLBACK;
|
||||
DEFAULT = CODEC.encodeStart(JsonOps.INSTANCE, INSTANCE)
|
||||
.getOrThrow(false, System.err::println)
|
||||
.toString();
|
||||
LOGGER = LogManager.getLogger();
|
||||
DEFAULT = GSON.toJson(CODEC.encodeStart(JsonOps.INSTANCE, INSTANCE).getOrThrow(false, System.err::println));
|
||||
LOGGER = LogManager.getLogger(ModConfig.class);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -17,7 +17,8 @@ import net.minecraft.world.World;
|
|||
|
||||
@Mixin(Entity.class)
|
||||
public class EntityMixin implements EntityExtensions {
|
||||
@Shadow public World world;
|
||||
@Shadow
|
||||
public World world;
|
||||
@Unique
|
||||
private boolean dimdoors_readyToTeleport = false;
|
||||
private TeleportTarget dimdoors_teleportTarget = null;
|
||||
|
@ -32,7 +33,7 @@ public class EntityMixin implements EntityExtensions {
|
|||
}
|
||||
|
||||
@Inject(at = @At("TAIL"), method = "moveToWorld")
|
||||
public void nullify(ServerWorld destination, CallbackInfoReturnable<TeleportTarget> cir) {
|
||||
public void cleanup(ServerWorld destination, CallbackInfoReturnable<TeleportTarget> cir) {
|
||||
this.dimdoors_teleportTarget = null;
|
||||
this.dimdoors_setReadyToTeleport(false);
|
||||
}
|
||||
|
|
|
@ -21,35 +21,69 @@ public final class PocketGenerator {
|
|||
private static Pocket prepareAndPlacePocket(ServerWorld world, PocketTemplate pocketTemplate, VirtualLocation virtualLocation, boolean setup) {
|
||||
LOGGER.info("Generating pocket from template " + pocketTemplate.getId() + " at virtual location " + virtualLocation);
|
||||
|
||||
Pocket pocket = PocketRegistry.instance(world.getRegistryKey()).newPocket();
|
||||
Pocket pocket = PocketRegistry.getInstance(world.getRegistryKey()).newPocket();
|
||||
pocketTemplate.place(pocket, setup);
|
||||
pocket.virtualLocation = virtualLocation;
|
||||
return pocket;
|
||||
}
|
||||
|
||||
private static Pocket prepareAndPlaceV2Pocket(ServerWorld world, PocketTemplateV2 pocketTemplate, VirtualLocation virtualLocation, boolean setup) {
|
||||
LOGGER.info("Generating pocket from template " + pocketTemplate.getId() + " at virtual location " + virtualLocation);
|
||||
|
||||
Pocket pocket = PocketRegistry.getInstance(world.getRegistryKey()).newPocket();
|
||||
pocketTemplate.place(pocket);
|
||||
pocket.virtualLocation = virtualLocation;
|
||||
return pocket;
|
||||
}
|
||||
|
||||
public static Pocket generatePocketFromTemplate(ServerWorld world, PocketTemplate pocketTemplate, VirtualLocation virtualLocation, boolean setup) {
|
||||
Pocket pocket = prepareAndPlacePocket(world, pocketTemplate, virtualLocation, setup);
|
||||
if (setup) pocketTemplate.setup(pocket, null, null);
|
||||
return pocket;
|
||||
}
|
||||
|
||||
public static Pocket generateV2PocketFromTemplate(ServerWorld world, PocketTemplateV2 pocketTemplate, VirtualLocation virtualLocation, boolean setup) {
|
||||
Pocket pocket = prepareAndPlaceV2Pocket(world, pocketTemplate, virtualLocation, setup);
|
||||
if (setup) {
|
||||
pocketTemplate.setup(pocket, null, null);
|
||||
}
|
||||
return pocket;
|
||||
}
|
||||
|
||||
|
||||
public static Pocket generatePocketFromTemplate(ServerWorld world, PocketTemplate pocketTemplate, VirtualLocation virtualLocation, VirtualTarget linkTo, LinkProperties linkProperties) {
|
||||
Pocket pocket = prepareAndPlacePocket(world, pocketTemplate, virtualLocation, true);
|
||||
pocketTemplate.setup(pocket, linkTo, linkProperties);
|
||||
return pocket;
|
||||
}
|
||||
|
||||
public static Pocket generateV2PocketFromTemplate(ServerWorld world, PocketTemplateV2 pocketTemplate, VirtualLocation virtualLocation, VirtualTarget linkTo, LinkProperties linkProperties) {
|
||||
Pocket pocket = prepareAndPlaceV2Pocket(world, pocketTemplate, virtualLocation, true);
|
||||
pocketTemplate.setup(pocket, linkTo, linkProperties);
|
||||
return pocket;
|
||||
}
|
||||
|
||||
public static Pocket generatePrivatePocket(VirtualLocation virtualLocation) {
|
||||
PocketTemplate pocketTemplate = SchematicHandler.INSTANCE.getPersonalPocketTemplate();
|
||||
return generatePocketFromTemplate(DimensionalDoorsInitializer.getWorld(ModDimensions.PERSONAL), pocketTemplate, virtualLocation, true);
|
||||
}
|
||||
|
||||
public static Pocket generatePrivatePocketV2(VirtualLocation virtualLocation) {
|
||||
PocketTemplateV2 pocketTemplate = SchematicV2Handler.getInstance().getRandomPrivatePocket();
|
||||
return generateV2PocketFromTemplate(DimensionalDoorsInitializer.getWorld(ModDimensions.PERSONAL), pocketTemplate, virtualLocation, true);
|
||||
}
|
||||
|
||||
// TODO: size of public pockets should increase with depth
|
||||
public static Pocket generatePublicPocket(VirtualLocation virtualLocation, VirtualTarget linkTo, LinkProperties linkProperties) {
|
||||
PocketTemplate pocketTemplate = SchematicHandler.INSTANCE.getPublicPocketTemplate();
|
||||
return generatePocketFromTemplate(DimensionalDoorsInitializer.getWorld(ModDimensions.PUBLIC), pocketTemplate, virtualLocation, linkTo, linkProperties);
|
||||
}
|
||||
|
||||
public static Pocket generatePublicPocketV2(VirtualLocation virtualLocation) {
|
||||
PocketTemplateV2 pocketTemplate = SchematicV2Handler.getInstance().getRandomPublicPocket();
|
||||
return generateV2PocketFromTemplate(DimensionalDoorsInitializer.getWorld(ModDimensions.PUBLIC), pocketTemplate, virtualLocation, true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a dungeon pockets at a certain depth.
|
||||
*
|
||||
|
|
|
@ -138,7 +138,7 @@ public class PocketTemplate {
|
|||
|
||||
public void place(Pocket pocket, boolean setup) {
|
||||
pocket.setSize(this.size * 16, this.size * 16, this.size * 16);
|
||||
int gridSize = PocketRegistry.instance(pocket.world).getGridSize();
|
||||
int gridSize = PocketRegistry.getInstance(pocket.world).getGridSize();
|
||||
ServerWorld world = DimensionalDoorsInitializer.getWorld(pocket.world);
|
||||
int xBase = pocket.box.minX;
|
||||
int yBase = pocket.box.minY;
|
||||
|
@ -163,7 +163,7 @@ public class PocketTemplate {
|
|||
}
|
||||
|
||||
public void setup(Pocket pocket, VirtualTarget linkTo, LinkProperties linkProperties) {
|
||||
int gridSize = PocketRegistry.instance(pocket.world).getGridSize();
|
||||
int gridSize = PocketRegistry.getInstance(pocket.world).getGridSize();
|
||||
ServerWorld world = DimensionalDoorsInitializer.getWorld(pocket.world);
|
||||
int xBase = pocket.box.minX;
|
||||
int yBase = pocket.box.minY;
|
||||
|
|
|
@ -33,7 +33,7 @@ public class PocketTemplateV2 {
|
|||
private final int size;
|
||||
private final String id;
|
||||
|
||||
public PocketTemplateV2(Schematic schematic, String group, int size, String id) {
|
||||
public PocketTemplateV2(Schematic schematic, String group, int size, String id, float weight) {
|
||||
this.schematic = schematic;
|
||||
this.group = group;
|
||||
this.size = size;
|
||||
|
@ -104,16 +104,13 @@ public class PocketTemplateV2 {
|
|||
|
||||
public void setup(Pocket pocket, VirtualTarget linkTo, LinkProperties linkProperties) {
|
||||
ServerWorld world = DimensionalDoorsInitializer.getWorld(pocket.world);
|
||||
int xBase = pocket.box.minX;
|
||||
int yBase = pocket.box.minY;
|
||||
int zBase = pocket.box.minZ;
|
||||
|
||||
List<RiftBlockEntity> rifts = new ArrayList<>();
|
||||
for (CompoundTag blockEntityTag : this.schematic.getBlockEntities()) {
|
||||
BlockPos pos = new BlockPos(
|
||||
xBase + blockEntityTag.getInt("x"),
|
||||
yBase + blockEntityTag.getInt("y"),
|
||||
zBase + blockEntityTag.getInt("z")
|
||||
pocket.box.minX + blockEntityTag.getInt("x"),
|
||||
pocket.box.minY + blockEntityTag.getInt("y"),
|
||||
pocket.box.minZ + blockEntityTag.getInt("z")
|
||||
);
|
||||
BlockEntity tile = world.getBlockEntity(pos);
|
||||
|
||||
|
@ -157,4 +154,8 @@ public class PocketTemplateV2 {
|
|||
public Schematic getSchematic() {
|
||||
return this.schematic;
|
||||
}
|
||||
|
||||
public String getId() {
|
||||
return this.id;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -52,14 +52,17 @@ public final class PocketType {
|
|||
public static final class PocketEntry {
|
||||
public static final Codec<PocketEntry> CODEC = RecordCodecBuilder.create(instance -> instance.group(
|
||||
Codec.INT.fieldOf("size").forGetter(PocketEntry::getSize),
|
||||
Codec.STRING.fieldOf("id").forGetter(PocketEntry::getName)
|
||||
Codec.STRING.fieldOf("id").forGetter(PocketEntry::getName),
|
||||
Codec.INT.optionalFieldOf("weight", 5).forGetter(PocketEntry::getWeight)
|
||||
).apply(instance, PocketEntry::new));
|
||||
private final int size;
|
||||
private final String name;
|
||||
private final int weight;
|
||||
|
||||
PocketEntry(int size, String name) {
|
||||
PocketEntry(int size, String name, int weight) {
|
||||
this.size = size;
|
||||
this.name = name;
|
||||
this.weight = weight;
|
||||
}
|
||||
|
||||
public int getSize() {
|
||||
|
@ -70,25 +73,31 @@ public final class PocketType {
|
|||
return this.name;
|
||||
}
|
||||
|
||||
public int getWeight() {
|
||||
return this.weight;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
if (o == null || this.getClass() != o.getClass()) return false;
|
||||
PocketEntry that = (PocketEntry) o;
|
||||
return this.size == that.size &&
|
||||
Objects.equals(this.name, that.name);
|
||||
Float.compare(that.weight, this.weight) == 0 &&
|
||||
this.name.equals(that.name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hash(this.size, this.name);
|
||||
return Objects.hash(this.size, this.name, this.weight);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "PocketEntry{" +
|
||||
"size=" + this.size +
|
||||
", name=" + this.name +
|
||||
", name='" + this.name + '\'' +
|
||||
", weight=" + this.weight +
|
||||
'}';
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,14 +7,19 @@ import java.nio.file.Files;
|
|||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
import org.dimdev.dimcore.schematic.v2.Schematic;
|
||||
import com.google.common.collect.HashMultimap;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Multimap;
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.GsonBuilder;
|
||||
import com.google.gson.JsonObject;
|
||||
|
@ -28,7 +33,9 @@ public class SchematicV2Handler {
|
|||
private static final Gson GSON = new GsonBuilder().setLenient().setPrettyPrinting().create();
|
||||
private static final SchematicV2Handler INSTANCE = new SchematicV2Handler();
|
||||
private final List<PocketTemplateV2> templates = Lists.newArrayList();
|
||||
private final Multimap<String, PocketTemplateV2> templateMap = HashMultimap.create();
|
||||
private final List<PocketType> pocketTypes = Lists.newArrayList();
|
||||
private static final Random RANDOM = new Random(new Random().nextLong());
|
||||
private boolean loaded = false;
|
||||
|
||||
private SchematicV2Handler() {
|
||||
|
@ -70,10 +77,24 @@ public class SchematicV2Handler {
|
|||
Path schemPath = basePath.resolve(entry.getName() + ".schem");
|
||||
CompoundTag schemTag = NbtIo.readCompressed(Files.newInputStream(schemPath));
|
||||
Schematic schematic = Schematic.fromTag(schemTag);
|
||||
this.templates.add(new PocketTemplateV2(schematic, group, entry.getSize(), entry.getName()));
|
||||
for (int i = 0; i < entry.getWeight(); i++) {
|
||||
this.templateMap.put(group, new PocketTemplateV2(schematic, group, entry.getSize(), entry.getName(), entry.getWeight()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public PocketTemplateV2 getRandomPublicPocket() {
|
||||
Collection<PocketTemplateV2> publicPockets = this.templateMap.get("public");
|
||||
int index = RANDOM.nextInt(publicPockets.size());
|
||||
return Lists.newArrayList(publicPockets).get(index);
|
||||
}
|
||||
|
||||
public PocketTemplateV2 getRandomPrivatePocket() {
|
||||
Collection<PocketTemplateV2> publicPockets = this.templateMap.get("private");
|
||||
int index = RANDOM.nextInt(publicPockets.size());
|
||||
return Lists.newArrayList(publicPockets).get(index);
|
||||
}
|
||||
|
||||
public static SchematicV2Handler getInstance() {
|
||||
return INSTANCE;
|
||||
}
|
||||
|
|
|
@ -88,7 +88,7 @@ public class TemplateUtils {
|
|||
VirtualTarget dest = rift.getDestination();
|
||||
if (dest instanceof PocketEntranceMarker) {
|
||||
if (rift == selectedEntrance) {
|
||||
PocketRegistry.instance(world.getRegistryKey()).markDirty();
|
||||
PocketRegistry.getInstance(world.getRegistryKey()).markDirty();
|
||||
rift.setDestination(((PocketEntranceMarker) dest).getIfDestination());
|
||||
rift.register();
|
||||
RiftRegistry.instance().addPocketEntrance(pocket, new Location((ServerWorld) rift.getWorld(), rift.getPos()));
|
||||
|
|
|
@ -40,9 +40,9 @@ public abstract class RegistryVertex {
|
|||
}
|
||||
|
||||
public interface RegistryVertexType<T extends RegistryVertex> {
|
||||
public RegistryVertexType<PlayerRiftPointer> PLAYER = register("player", PlayerRiftPointer.CODEC);
|
||||
public RegistryVertexType<Rift> RIFT = register("rift", Rift.CODEC);
|
||||
public RegistryVertexType<PocketEntrancePointer> ENTRANCE = register("entrance", PocketEntrancePointer.CODEC);
|
||||
RegistryVertexType<PlayerRiftPointer> PLAYER = register("player", PlayerRiftPointer.CODEC);
|
||||
RegistryVertexType<Rift> RIFT = register("rift", Rift.CODEC);
|
||||
RegistryVertexType<PocketEntrancePointer> ENTRANCE = register("entrance", PocketEntrancePointer.CODEC);
|
||||
RegistryVertexType<RiftPlaceholder> RIFT_PLACEHOLDER = register("rift_placeholder", RiftPlaceholder.CODEC);
|
||||
|
||||
Codec<T> codec();
|
||||
|
|
|
@ -68,7 +68,7 @@ public class RiftRegistry extends PersistentState {
|
|||
PocketEntrancePointer pocket = NbtUtil.deserialize(pocketNBT, PocketEntrancePointer.CODEC);
|
||||
graph.addVertex(pocket);
|
||||
uuidMap.put(pocket.id, pocket);
|
||||
pocketEntranceMap.put(PocketRegistry.instance(pocket.world).getPocket(pocket.pocketId), pocket);
|
||||
pocketEntranceMap.put(PocketRegistry.getInstance(pocket.world).getPocket(pocket.pocketId), pocket);
|
||||
}
|
||||
|
||||
// Read the connections between links that have a source or destination in this dimension
|
||||
|
|
|
@ -33,7 +33,7 @@ public class PrivatePocketExitTarget extends VirtualTarget implements EntityTarg
|
|||
if (uuid != null) {
|
||||
destLoc = RiftRegistry.instance().getPrivatePocketExit(uuid);
|
||||
Pocket pocket = PrivatePocketData.instance().getPrivatePocket(uuid);
|
||||
if (ModDimensions.isDimDoorsPocketDimension(location.getWorld()) && pocket != null && PocketRegistry.instance(pocket.world).getPocketAt(location.pos).equals(pocket)) {
|
||||
if (ModDimensions.isDimDoorsPocketDimension(location.getWorld()) && pocket != null && PocketRegistry.getInstance(pocket.world).getPocketAt(location.pos).equals(pocket)) {
|
||||
RiftRegistry.instance().setLastPrivatePocketEntrance(uuid, location); // Remember which exit was used for next time the pocket is entered
|
||||
}
|
||||
if (destLoc == null || !(destLoc.getBlockEntity() instanceof RiftBlockEntity)) {
|
||||
|
@ -56,7 +56,7 @@ public class PrivatePocketExitTarget extends VirtualTarget implements EntityTarg
|
|||
@Override
|
||||
public void register() {
|
||||
super.register();
|
||||
PocketRegistry privatePocketRegistry = PocketRegistry.instance(location.world);
|
||||
PocketRegistry privatePocketRegistry = PocketRegistry.getInstance(location.world);
|
||||
Pocket pocket = privatePocketRegistry.getPocketAt(location.pos);
|
||||
RiftRegistry.instance().addPocketEntrance(pocket, location);
|
||||
}
|
||||
|
|
|
@ -6,7 +6,6 @@ import java.util.OptionalLong;
|
|||
import org.dimdev.dimdoors.block.ModBlocks;
|
||||
import org.dimdev.dimdoors.mixin.ChunkGeneratorSettingsAccessor;
|
||||
import org.dimdev.dimdoors.mixin.DimensionTypeAccessor;
|
||||
import org.dimdev.dimdoors.world.limbo.LimboBiomeSource;
|
||||
import org.dimdev.dimdoors.world.limbo.LimboChunkGenerator;
|
||||
import org.dimdev.dimdoors.world.pocket.BlankChunkGenerator;
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
|
@ -18,8 +17,6 @@ import net.minecraft.util.registry.Registry;
|
|||
import net.minecraft.util.registry.RegistryKey;
|
||||
import net.minecraft.world.StructureWorldAccess;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraft.world.biome.source.BiomeSource;
|
||||
import net.minecraft.world.biome.source.FixedBiomeSource;
|
||||
import net.minecraft.world.dimension.DimensionType;
|
||||
import net.minecraft.world.gen.chunk.ChunkGeneratorSettings;
|
||||
import net.minecraft.world.gen.chunk.GenerationShapeConfig;
|
||||
|
@ -43,11 +40,6 @@ public final class ModDimensions {
|
|||
|
||||
public static final ChunkGeneratorSettings LIMBO_CHUNK_GENERATOR_SETTINGS;
|
||||
|
||||
// TODO: move pocket dimension generation settings to code
|
||||
public static final BiomeSource PERSONAL_BIOME_SOURCE = new FixedBiomeSource(() -> ModBiomes.PERSONAL_WHITE_VOID_BIOME);
|
||||
public static final BiomeSource PUBLIC_BIOME_SOURCE = new FixedBiomeSource(() -> ModBiomes.PUBLIC_BLACK_VOID_BIOME);
|
||||
public static final BiomeSource DUNGEON_BIOME_SOURCE = new FixedBiomeSource(() -> ModBiomes.DUNGEON_DANGEROUS_BLACK_VOID_BIOME);
|
||||
|
||||
public static ServerWorld LIMBO_DIMENSION;
|
||||
public static ServerWorld PERSONAL_POCKET_DIMENSION;
|
||||
public static ServerWorld PUBLIC_POCKET_DIMENSION;
|
||||
|
@ -80,7 +72,6 @@ public final class ModDimensions {
|
|||
});
|
||||
Registry.register(Registry.CHUNK_GENERATOR, new Identifier("dimdoors", "blank"), BlankChunkGenerator.CODEC);
|
||||
Registry.register(Registry.CHUNK_GENERATOR, new Identifier("dimdoors", "limbo_chunk_generator"), LimboChunkGenerator.CODEC);
|
||||
Registry.register(Registry.BIOME_SOURCE, new Identifier("dimdoors", "limbo_biome_source"), LimboBiomeSource.CODEC);
|
||||
}
|
||||
|
||||
static {
|
||||
|
|
|
@ -1,40 +0,0 @@
|
|||
package org.dimdev.dimdoors.world.limbo;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
import org.dimdev.dimdoors.world.ModBiomes;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import com.mojang.serialization.Codec;
|
||||
|
||||
import net.minecraft.world.biome.Biome;
|
||||
import net.minecraft.world.biome.source.BiomeSource;
|
||||
|
||||
public class LimboBiomeSource extends BiomeSource {
|
||||
public static final LimboBiomeSource INSTANCE = new LimboBiomeSource();
|
||||
public static final Codec<LimboBiomeSource> CODEC = Codec.unit(INSTANCE);
|
||||
|
||||
private LimboBiomeSource() {
|
||||
super(ImmutableList.of(ModBiomes.LIMBO_BIOME));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Codec<? extends BiomeSource> getCodec() {
|
||||
return CODEC;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BiomeSource withSeed(long seed) {
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<Biome> getBiomesInArea(int x, int y, int z, int radius) {
|
||||
return ImmutableSet.of(ModBiomes.LIMBO_BIOME);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Biome getBiomeForNoiseGen(int biomeX, int biomeY, int biomeZ) {
|
||||
return ModBiomes.LIMBO_BIOME;
|
||||
}
|
||||
}
|
|
@ -11,6 +11,7 @@ import it.unimi.dsi.fastutil.objects.ObjectList;
|
|||
import it.unimi.dsi.fastutil.objects.ObjectListIterator;
|
||||
import org.dimdev.dimdoors.block.ModBlocks;
|
||||
import org.dimdev.dimdoors.mixin.ChunkGeneratorAccessor;
|
||||
import org.dimdev.dimdoors.world.ModBiomes;
|
||||
import org.dimdev.dimdoors.world.ModDimensions;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import com.mojang.serialization.Codec;
|
||||
|
@ -39,6 +40,7 @@ import net.minecraft.world.SpawnHelper;
|
|||
import net.minecraft.world.WorldAccess;
|
||||
import net.minecraft.world.biome.Biome;
|
||||
import net.minecraft.world.biome.source.BiomeSource;
|
||||
import net.minecraft.world.biome.source.FixedBiomeSource;
|
||||
import net.minecraft.world.biome.source.TheEndBiomeSource;
|
||||
import net.minecraft.world.chunk.Chunk;
|
||||
import net.minecraft.world.chunk.ChunkSection;
|
||||
|
@ -55,7 +57,7 @@ import net.fabricmc.api.EnvType;
|
|||
import net.fabricmc.api.Environment;
|
||||
|
||||
public class LimboChunkGenerator extends ChunkGenerator {
|
||||
public static final LimboChunkGenerator INSTANCE = new LimboChunkGenerator(LimboBiomeSource.INSTANCE, LimboBiomeSource.INSTANCE);
|
||||
public static final LimboChunkGenerator INSTANCE = new LimboChunkGenerator(new FixedBiomeSource(() -> ModBiomes.LIMBO_BIOME), new FixedBiomeSource(() -> ModBiomes.LIMBO_BIOME));
|
||||
public static final Codec<LimboChunkGenerator> CODEC = Codec.unit(INSTANCE);
|
||||
private static final float[] NOISE_WEIGHT_TABLE = Util.make(new float[13824], (array) -> {
|
||||
for (int i = 0; i < 24; ++i) {
|
||||
|
|
|
@ -22,7 +22,60 @@ import net.minecraft.block.BlockWithEntity;
|
|||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
import static net.minecraft.block.Blocks.*;
|
||||
import static net.minecraft.block.Blocks.ACACIA_LOG;
|
||||
import static net.minecraft.block.Blocks.ACACIA_PLANKS;
|
||||
import static net.minecraft.block.Blocks.ACACIA_WOOD;
|
||||
import static net.minecraft.block.Blocks.AIR;
|
||||
import static net.minecraft.block.Blocks.ANDESITE;
|
||||
import static net.minecraft.block.Blocks.BIRCH_LOG;
|
||||
import static net.minecraft.block.Blocks.BIRCH_PLANKS;
|
||||
import static net.minecraft.block.Blocks.BIRCH_WOOD;
|
||||
import static net.minecraft.block.Blocks.BLACKSTONE;
|
||||
import static net.minecraft.block.Blocks.COAL_BLOCK;
|
||||
import static net.minecraft.block.Blocks.COAL_ORE;
|
||||
import static net.minecraft.block.Blocks.COBBLESTONE;
|
||||
import static net.minecraft.block.Blocks.CRACKED_STONE_BRICKS;
|
||||
import static net.minecraft.block.Blocks.DARK_OAK_LOG;
|
||||
import static net.minecraft.block.Blocks.DARK_OAK_PLANKS;
|
||||
import static net.minecraft.block.Blocks.DARK_OAK_WOOD;
|
||||
import static net.minecraft.block.Blocks.DIORITE;
|
||||
import static net.minecraft.block.Blocks.DIRT;
|
||||
import static net.minecraft.block.Blocks.EMERALD_BLOCK;
|
||||
import static net.minecraft.block.Blocks.EMERALD_ORE;
|
||||
import static net.minecraft.block.Blocks.END_STONE;
|
||||
import static net.minecraft.block.Blocks.END_STONE_BRICKS;
|
||||
import static net.minecraft.block.Blocks.FARMLAND;
|
||||
import static net.minecraft.block.Blocks.GLASS;
|
||||
import static net.minecraft.block.Blocks.GOLD_BLOCK;
|
||||
import static net.minecraft.block.Blocks.GOLD_ORE;
|
||||
import static net.minecraft.block.Blocks.GRANITE;
|
||||
import static net.minecraft.block.Blocks.GRASS_BLOCK;
|
||||
import static net.minecraft.block.Blocks.GRASS_PATH;
|
||||
import static net.minecraft.block.Blocks.GRAVEL;
|
||||
import static net.minecraft.block.Blocks.IRON_BLOCK;
|
||||
import static net.minecraft.block.Blocks.IRON_ORE;
|
||||
import static net.minecraft.block.Blocks.JUNGLE_LOG;
|
||||
import static net.minecraft.block.Blocks.JUNGLE_PLANKS;
|
||||
import static net.minecraft.block.Blocks.JUNGLE_WOOD;
|
||||
import static net.minecraft.block.Blocks.LAPIS_BLOCK;
|
||||
import static net.minecraft.block.Blocks.LAPIS_ORE;
|
||||
import static net.minecraft.block.Blocks.OAK_LOG;
|
||||
import static net.minecraft.block.Blocks.OAK_PLANKS;
|
||||
import static net.minecraft.block.Blocks.OAK_WOOD;
|
||||
import static net.minecraft.block.Blocks.PODZOL;
|
||||
import static net.minecraft.block.Blocks.POLISHED_ANDESITE;
|
||||
import static net.minecraft.block.Blocks.POLISHED_BLACKSTONE;
|
||||
import static net.minecraft.block.Blocks.POLISHED_DIORITE;
|
||||
import static net.minecraft.block.Blocks.POLISHED_GRANITE;
|
||||
import static net.minecraft.block.Blocks.REDSTONE_BLOCK;
|
||||
import static net.minecraft.block.Blocks.REDSTONE_ORE;
|
||||
import static net.minecraft.block.Blocks.SAND;
|
||||
import static net.minecraft.block.Blocks.SANDSTONE;
|
||||
import static net.minecraft.block.Blocks.SPRUCE_LOG;
|
||||
import static net.minecraft.block.Blocks.SPRUCE_PLANKS;
|
||||
import static net.minecraft.block.Blocks.SPRUCE_WOOD;
|
||||
import static net.minecraft.block.Blocks.STONE;
|
||||
import static net.minecraft.block.Blocks.STONE_BRICKS;
|
||||
|
||||
/**
|
||||
* Provides methods for applying Limbo decay. Limbo decay refers to the effect that most blocks placed in Limbo
|
||||
|
|
|
@ -61,7 +61,7 @@ public class PocketRegistry extends PersistentState {
|
|||
return tag;
|
||||
}
|
||||
|
||||
public static PocketRegistry instance(RegistryKey<World> key) {
|
||||
public static PocketRegistry getInstance(RegistryKey<World> key) {
|
||||
ServerWorld world = DimensionalDoorsInitializer.getWorld(key);
|
||||
|
||||
if (!(ModDimensions.isDimDoorsPocketDimension(world))) {
|
||||
|
|
|
@ -67,7 +67,7 @@ public class PrivatePocketData extends PersistentState {
|
|||
public Pocket getPrivatePocket(UUID playerUUID) {
|
||||
PocketInfo pocket = privatePocketMap.get(playerUUID);
|
||||
if (pocket == null) return null;
|
||||
return PocketRegistry.instance(pocket.world).getPocket(pocket.id);
|
||||
return PocketRegistry.getInstance(pocket.world).getPocket(pocket.id);
|
||||
}
|
||||
|
||||
public void setPrivatePocketID(UUID playerUUID, Pocket pocket) {
|
||||
|
|
|
@ -59,7 +59,7 @@ public class VirtualLocation {
|
|||
VirtualLocation virtualLocation = null;
|
||||
|
||||
if (ModDimensions.isDimDoorsPocketDimension(location.world)) {
|
||||
Pocket pocket = PocketRegistry.instance(location.world).getPocketAt(location.pos);
|
||||
Pocket pocket = PocketRegistry.getInstance(location.world).getPocketAt(location.pos);
|
||||
if (pocket != null) {
|
||||
virtualLocation = pocket.virtualLocation; // TODO: pockets-relative coordinates
|
||||
} else {
|
||||
|
|
|
@ -3,35 +3,43 @@
|
|||
"pockets": [
|
||||
{
|
||||
"id": "private_pocket_0",
|
||||
"size": 0
|
||||
"size": 0,
|
||||
"weight": 20
|
||||
},
|
||||
{
|
||||
"id": "private_pocket_1",
|
||||
"size": 1
|
||||
"size": 1,
|
||||
"weight": 17
|
||||
},
|
||||
{
|
||||
"id": "private_pocket_2",
|
||||
"size": 2
|
||||
"size": 2,
|
||||
"weight": 14
|
||||
},
|
||||
{
|
||||
"id": "private_pocket_3",
|
||||
"size": 3
|
||||
"size": 3,
|
||||
"weight": 11
|
||||
},
|
||||
{
|
||||
"id": "private_pocket_4",
|
||||
"size": 4
|
||||
"size": 4,
|
||||
"weight": 8
|
||||
},
|
||||
{
|
||||
"id": "private_pocket_5",
|
||||
"size": 5
|
||||
"size": 5,
|
||||
"weight": 5
|
||||
},
|
||||
{
|
||||
"id": "private_pocket_6",
|
||||
"size": 6
|
||||
"size": 6,
|
||||
"weight": 3
|
||||
},
|
||||
{
|
||||
"id": "private_pocket_7",
|
||||
"size": 7
|
||||
"size": 7,
|
||||
"weight": 1
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
|
@ -3,35 +3,43 @@
|
|||
"pockets": [
|
||||
{
|
||||
"id": "public_pocket_0",
|
||||
"size": 0
|
||||
"size": 0,
|
||||
"weight": 20
|
||||
},
|
||||
{
|
||||
"id": "public_pocket_1",
|
||||
"size": 1
|
||||
"size": 1,
|
||||
"weight": 17
|
||||
},
|
||||
{
|
||||
"id": "public_pocket_2",
|
||||
"size": 2
|
||||
"size": 2,
|
||||
"weight": 14
|
||||
},
|
||||
{
|
||||
"id": "public_pocket_3",
|
||||
"size": 3
|
||||
"size": 3,
|
||||
"weight": 11
|
||||
},
|
||||
{
|
||||
"id": "public_pocket_4",
|
||||
"size": 4
|
||||
"size": 4,
|
||||
"weight": 8
|
||||
},
|
||||
{
|
||||
"id": "public_pocket_5",
|
||||
"size": 5
|
||||
"size": 5,
|
||||
"weight": 5
|
||||
},
|
||||
{
|
||||
"id": "public_pocket_6",
|
||||
"size": 6
|
||||
"size": 6,
|
||||
"weight": 3
|
||||
},
|
||||
{
|
||||
"id": "public_pocket_7",
|
||||
"size": 7
|
||||
"size": 7,
|
||||
"weight": 1
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue