Pockets and rifts
This commit is contained in:
parent
491ce05f06
commit
13b764b764
15 changed files with 61 additions and 136 deletions
|
@ -5,13 +5,7 @@ import net.minecraft.block.Block;
|
||||||
import net.minecraft.util.Identifier;
|
import net.minecraft.util.Identifier;
|
||||||
import org.dimdev.dimdoors.block.door.DimensionalDoorBlockRegistrar;
|
import org.dimdev.dimdoors.block.door.DimensionalDoorBlockRegistrar;
|
||||||
|
|
||||||
public class BlockRegistryEntryAddedListener implements RegistryEntryAddedCallback<Block> {
|
public record BlockRegistryEntryAddedListener(DimensionalDoorBlockRegistrar registrar) implements RegistryEntryAddedCallback<Block> {
|
||||||
private final DimensionalDoorBlockRegistrar registrar;
|
|
||||||
|
|
||||||
public BlockRegistryEntryAddedListener(DimensionalDoorBlockRegistrar registrar) {
|
|
||||||
this.registrar = registrar;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onEntryAdded(int rawId, Identifier id, Block object) {
|
public void onEntryAdded(int rawId, Identifier id, Block object) {
|
||||||
registrar.handleEntry(id, object);
|
registrar.handleEntry(id, object);
|
||||||
|
|
|
@ -5,12 +5,7 @@ import net.minecraft.item.Item;
|
||||||
import net.minecraft.util.Identifier;
|
import net.minecraft.util.Identifier;
|
||||||
import org.dimdev.dimdoors.item.DimensionalDoorItemRegistrar;
|
import org.dimdev.dimdoors.item.DimensionalDoorItemRegistrar;
|
||||||
|
|
||||||
public class ItemRegistryEntryAddedListener implements RegistryEntryAddedCallback<Item> {
|
public record ItemRegistryEntryAddedListener(DimensionalDoorItemRegistrar registrar) implements RegistryEntryAddedCallback<Item> {
|
||||||
private final DimensionalDoorItemRegistrar registrar;
|
|
||||||
|
|
||||||
public ItemRegistryEntryAddedListener(DimensionalDoorItemRegistrar registrar) {
|
|
||||||
this.registrar = registrar;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onEntryAdded(int rawId, Identifier id, Item object) {
|
public void onEntryAdded(int rawId, Identifier id, Item object) {
|
||||||
|
|
|
@ -1,6 +1,10 @@
|
||||||
package org.dimdev.dimdoors.listener;
|
package org.dimdev.dimdoors.listener;
|
||||||
|
|
||||||
import net.fabricmc.fabric.api.event.player.UseBlockCallback;
|
import org.dimdev.dimdoors.DimensionalDoorsInitializer;
|
||||||
|
import org.dimdev.dimdoors.api.event.UseItemOnBlockCallback;
|
||||||
|
import org.dimdev.dimdoors.block.ModBlocks;
|
||||||
|
import org.dimdev.dimdoors.item.DimensionalDoorItemRegistrar;
|
||||||
|
|
||||||
import net.minecraft.entity.player.PlayerEntity;
|
import net.minecraft.entity.player.PlayerEntity;
|
||||||
import net.minecraft.item.Item;
|
import net.minecraft.item.Item;
|
||||||
import net.minecraft.item.ItemPlacementContext;
|
import net.minecraft.item.ItemPlacementContext;
|
||||||
|
@ -9,10 +13,6 @@ import net.minecraft.util.ActionResult;
|
||||||
import net.minecraft.util.Hand;
|
import net.minecraft.util.Hand;
|
||||||
import net.minecraft.util.hit.BlockHitResult;
|
import net.minecraft.util.hit.BlockHitResult;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
import org.dimdev.dimdoors.DimensionalDoorsInitializer;
|
|
||||||
import org.dimdev.dimdoors.api.event.UseItemOnBlockCallback;
|
|
||||||
import org.dimdev.dimdoors.block.ModBlocks;
|
|
||||||
import org.dimdev.dimdoors.item.DimensionalDoorItemRegistrar;
|
|
||||||
|
|
||||||
public class UseDoorItemOnBlockCallbackListener implements UseItemOnBlockCallback {
|
public class UseDoorItemOnBlockCallbackListener implements UseItemOnBlockCallback {
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -1,17 +0,0 @@
|
||||||
package org.dimdev.dimdoors.mixin.accessor;
|
|
||||||
|
|
||||||
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
|
||||||
import org.spongepowered.asm.mixin.gen.Accessor;
|
|
||||||
|
|
||||||
import net.minecraft.util.registry.RegistryKey;
|
|
||||||
import net.minecraft.world.biome.Biome;
|
|
||||||
import net.minecraft.world.biome.BuiltinBiomes;
|
|
||||||
|
|
||||||
@Mixin(BuiltinBiomes.class)
|
|
||||||
public interface BuiltinBiomesAccessor {
|
|
||||||
@Accessor("BY_RAW_ID")
|
|
||||||
static Int2ObjectMap<RegistryKey<Biome>> getIdMap() {
|
|
||||||
throw new AssertionError();
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -9,35 +9,7 @@ import org.dimdev.dimdoors.world.pocket.VirtualLocation;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
public class PocketGenerationContext {
|
public record PocketGenerationContext(ServerWorld world, VirtualLocation sourceVirtualLocation, VirtualTarget linkTo, LinkProperties linkProperties) {
|
||||||
private final ServerWorld world;
|
|
||||||
private final VirtualLocation sourceVirtualLocation;
|
|
||||||
private final VirtualTarget linkTo;
|
|
||||||
private final LinkProperties linkProperties;
|
|
||||||
|
|
||||||
public PocketGenerationContext(ServerWorld world, VirtualLocation sourceVirtualLocation, VirtualTarget linkTo, LinkProperties linkProperties) {
|
|
||||||
this.world = world;
|
|
||||||
this.sourceVirtualLocation = sourceVirtualLocation;
|
|
||||||
this.linkTo = linkTo;
|
|
||||||
this.linkProperties = linkProperties;
|
|
||||||
}
|
|
||||||
|
|
||||||
public ServerWorld getWorld() {
|
|
||||||
return this.world;
|
|
||||||
}
|
|
||||||
|
|
||||||
public VirtualLocation getSourceVirtualLocation() {
|
|
||||||
return this.sourceVirtualLocation;
|
|
||||||
}
|
|
||||||
|
|
||||||
public VirtualTarget getLinkTo() {
|
|
||||||
return this.linkTo;
|
|
||||||
}
|
|
||||||
|
|
||||||
public LinkProperties getLinkProperties() {
|
|
||||||
return this.linkProperties;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Map<String, Double> toVariableMap(Map<String, Double> stringDoubleMap) {
|
public Map<String, Double> toVariableMap(Map<String, Double> stringDoubleMap) {
|
||||||
stringDoubleMap.put("depth", (double) this.sourceVirtualLocation.getDepth());
|
stringDoubleMap.put("depth", (double) this.sourceVirtualLocation.getDepth());
|
||||||
stringDoubleMap.put("public_size", (double) DimensionalDoorsInitializer.getConfig().getPocketsConfig().publicPocketSize);
|
stringDoubleMap.put("public_size", (double) DimensionalDoorsInitializer.getConfig().getPocketsConfig().publicPocketSize);
|
||||||
|
|
|
@ -10,14 +10,16 @@ import net.minecraft.server.world.ServerWorld;
|
||||||
import net.minecraft.util.Identifier;
|
import net.minecraft.util.Identifier;
|
||||||
import net.minecraft.util.Util;
|
import net.minecraft.util.Util;
|
||||||
import net.minecraft.util.math.*;
|
import net.minecraft.util.math.*;
|
||||||
import net.minecraft.util.registry.BuiltinRegistries;
|
|
||||||
import net.minecraft.util.registry.Registry;
|
import net.minecraft.util.registry.Registry;
|
||||||
import net.minecraft.util.registry.RegistryKey;
|
import net.minecraft.util.registry.RegistryKey;
|
||||||
import net.minecraft.world.ChunkRegion;
|
import net.minecraft.world.ChunkRegion;
|
||||||
import net.minecraft.world.HeightLimitView;
|
import net.minecraft.world.HeightLimitView;
|
||||||
import net.minecraft.world.Heightmap;
|
import net.minecraft.world.Heightmap;
|
||||||
|
import net.minecraft.world.biome.Biome;
|
||||||
import net.minecraft.world.chunk.*;
|
import net.minecraft.world.chunk.*;
|
||||||
import net.minecraft.world.gen.GenerationStep;
|
import net.minecraft.world.gen.GenerationStep;
|
||||||
|
import net.minecraft.world.gen.chunk.Blender;
|
||||||
|
|
||||||
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.LogManager;
|
||||||
import org.apache.logging.log4j.Logger;
|
import org.apache.logging.log4j.Logger;
|
||||||
import org.dimdev.dimdoors.DimensionalDoorsInitializer;
|
import org.dimdev.dimdoors.DimensionalDoorsInitializer;
|
||||||
|
@ -71,8 +73,8 @@ public class ChunkGenerator extends PocketGenerator {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Pocket prepareAndPlacePocket(PocketGenerationContext parameters, Pocket.PocketBuilder<?, ?> builder) {
|
public Pocket prepareAndPlacePocket(PocketGenerationContext parameters, Pocket.PocketBuilder<?, ?> builder) {
|
||||||
ServerWorld world = parameters.getWorld();
|
ServerWorld world = parameters.world();
|
||||||
VirtualLocation sourceVirtualLocation = parameters.getSourceVirtualLocation();
|
VirtualLocation sourceVirtualLocation = parameters.sourceVirtualLocation();
|
||||||
|
|
||||||
int chunkSizeX = ((this.size.getX() >> 4) + (this.size.getX() % 16 == 0 ? 0 : 1));
|
int chunkSizeX = ((this.size.getX() >> 4) + (this.size.getX() % 16 == 0 ? 0 : 1));
|
||||||
int chunkSizeZ = ((this.size.getZ() >> 4) + (this.size.getZ() % 16 == 0 ? 0 : 1));
|
int chunkSizeZ = ((this.size.getZ() >> 4) + (this.size.getZ() % 16 == 0 ? 0 : 1));
|
||||||
|
@ -87,7 +89,7 @@ public class ChunkGenerator extends PocketGenerator {
|
||||||
ArrayList<Chunk> protoChunks = new ArrayList<>();
|
ArrayList<Chunk> protoChunks = new ArrayList<>();
|
||||||
for (int z = 0; z < chunkSizeZ; z++) {
|
for (int z = 0; z < chunkSizeZ; z++) {
|
||||||
for (int x = 0; x < chunkSizeX; x++) {
|
for (int x = 0; x < chunkSizeX; x++) {
|
||||||
ProtoChunk protoChunk = new ProtoChunk(new ChunkPos(pocket.getOrigin().add(x * 16, 0, z * 16)), UpgradeData.NO_UPGRADE_DATA, world);
|
ProtoChunk protoChunk = new ProtoChunk(new ChunkPos(pocket.getOrigin().add(x * 16, 0, z * 16)), UpgradeData.NO_UPGRADE_DATA, world, genWorld.getRegistryManager().get(Registry.BIOME_KEY), null);
|
||||||
protoChunk.setLightingProvider(genWorld.getLightingProvider());
|
protoChunk.setLightingProvider(genWorld.getLightingProvider());
|
||||||
protoChunks.add(protoChunk);
|
protoChunks.add(protoChunk);
|
||||||
}
|
}
|
||||||
|
@ -102,24 +104,24 @@ public class ChunkGenerator extends PocketGenerator {
|
||||||
((ProtoChunk) protoChunk).setStatus(ChunkStatus.STRUCTURE_REFERENCES);
|
((ProtoChunk) protoChunk).setStatus(ChunkStatus.STRUCTURE_REFERENCES);
|
||||||
}
|
}
|
||||||
for (Chunk protoChunk : protoChunks) {
|
for (Chunk protoChunk : protoChunks) {
|
||||||
genWorldChunkGenerator.populateBiomes(BuiltinRegistries.BIOME, protoChunk);
|
genWorldChunkGenerator.populateBiomes(genWorld.getRegistryManager().get(Registry.BIOME_KEY), Util.getMainWorkerExecutor(), Blender.getNoBlending(), genWorld.getStructureAccessor(), protoChunk);
|
||||||
((ProtoChunk) protoChunk).setStatus(ChunkStatus.BIOMES);
|
((ProtoChunk) protoChunk).setStatus(ChunkStatus.BIOMES);
|
||||||
}
|
}
|
||||||
for (Chunk protoChunk : protoChunks) {
|
for (Chunk protoChunk : protoChunks) {
|
||||||
try {
|
try {
|
||||||
genWorldChunkGenerator.populateNoise(Util.getMainWorkerExecutor(), genWorld.getStructureAccessor().forRegion(protoRegion), protoChunk).get();
|
genWorldChunkGenerator.populateNoise(Util.getMainWorkerExecutor(), Blender.getNoBlending(), genWorld.getStructureAccessor().forRegion(protoRegion), protoChunk).get();
|
||||||
} catch (InterruptedException | ExecutionException e) {
|
} catch (InterruptedException | ExecutionException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
((ProtoChunk) protoChunk).setStatus(ChunkStatus.NOISE);
|
((ProtoChunk) protoChunk).setStatus(ChunkStatus.NOISE);
|
||||||
}
|
}
|
||||||
for (Chunk protoChunk : protoChunks) {
|
for (Chunk protoChunk : protoChunks) {
|
||||||
genWorldChunkGenerator.buildSurface(protoRegion, protoChunk);
|
genWorldChunkGenerator.buildSurface(protoRegion, genWorld.getStructureAccessor(), protoChunk);
|
||||||
((ProtoChunk) protoChunk).setStatus(ChunkStatus.SURFACE);
|
((ProtoChunk) protoChunk).setStatus(ChunkStatus.SURFACE);
|
||||||
}
|
}
|
||||||
for (GenerationStep.Carver carver : GenerationStep.Carver.values()) {
|
for (GenerationStep.Carver carver : GenerationStep.Carver.values()) {
|
||||||
for (Chunk protoChunk : protoChunks) {
|
for (Chunk protoChunk : protoChunks) {
|
||||||
genWorldChunkGenerator.carve(genWorld.getSeed(), genWorld.getBiomeAccess(), protoChunk, carver);
|
genWorldChunkGenerator.carve(protoRegion, genWorld.getSeed(), genWorld.getBiomeAccess(), genWorld.getStructureAccessor(), protoChunk, carver);
|
||||||
ProtoChunk pChunk = ((ProtoChunk) protoChunk);
|
ProtoChunk pChunk = ((ProtoChunk) protoChunk);
|
||||||
if (pChunk.getStatus() == ChunkStatus.SURFACE) pChunk.setStatus(ChunkStatus.CARVERS);
|
if (pChunk.getStatus() == ChunkStatus.SURFACE) pChunk.setStatus(ChunkStatus.CARVERS);
|
||||||
else pChunk.setStatus(ChunkStatus.LIQUID_CARVERS);
|
else pChunk.setStatus(ChunkStatus.LIQUID_CARVERS);
|
||||||
|
@ -127,7 +129,7 @@ public class ChunkGenerator extends PocketGenerator {
|
||||||
}
|
}
|
||||||
for (Chunk protoChunk : protoChunks) {
|
for (Chunk protoChunk : protoChunks) {
|
||||||
ChunkRegion tempRegion = new ChunkRegionHack(genWorld, ChunkPos.stream(protoChunk.getPos(), 10).map(chunkPos -> protoRegion.getChunk(chunkPos.x, chunkPos.z)).collect(Collectors.toList()));
|
ChunkRegion tempRegion = new ChunkRegionHack(genWorld, ChunkPos.stream(protoChunk.getPos(), 10).map(chunkPos -> protoRegion.getChunk(chunkPos.x, chunkPos.z)).collect(Collectors.toList()));
|
||||||
genWorldChunkGenerator.generateFeatures(tempRegion, genWorld.getStructureAccessor().forRegion(tempRegion));
|
genWorldChunkGenerator.generateFeatures(tempRegion, protoChunk, genWorld.getStructureAccessor().forRegion(tempRegion));
|
||||||
((ProtoChunk) protoChunk).setStatus(ChunkStatus.FEATURES);
|
((ProtoChunk) protoChunk).setStatus(ChunkStatus.FEATURES);
|
||||||
}
|
}
|
||||||
for (Chunk protoChunk : protoChunks) { // likely only necessary for spawn step since we copy over anyways
|
for (Chunk protoChunk : protoChunks) { // likely only necessary for spawn step since we copy over anyways
|
||||||
|
@ -201,15 +203,15 @@ public class ChunkGenerator extends PocketGenerator {
|
||||||
@Override
|
@Override
|
||||||
public Chunk getChunk(int chunkX, int chunkZ, ChunkStatus leastStatus, boolean create) {
|
public Chunk getChunk(int chunkX, int chunkZ, ChunkStatus leastStatus, boolean create) {
|
||||||
Chunk chunk = super.getChunk(chunkX, chunkZ, leastStatus, false);
|
Chunk chunk = super.getChunk(chunkX, chunkZ, leastStatus, false);
|
||||||
return chunk == null ? new ProtoChunkHack(new ChunkPos(chunkX, chunkZ), UpgradeData.NO_UPGRADE_DATA, this) : chunk;
|
return chunk == null ? new ProtoChunkHack(new ChunkPos(chunkX, chunkZ), UpgradeData.NO_UPGRADE_DATA, this, this.getRegistryManager().get(Registry.BIOME_KEY)) : chunk;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Override getSeed()
|
// TODO: Override getSeed()
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class ProtoChunkHack extends ProtoChunk { // exists solely to make some calls in the non utilized chunks faster
|
private static class ProtoChunkHack extends ProtoChunk { // exists solely to make some calls in the non utilized chunks faster
|
||||||
public ProtoChunkHack(ChunkPos pos, UpgradeData upgradeData, HeightLimitView world) {
|
public ProtoChunkHack(ChunkPos pos, UpgradeData upgradeData, HeightLimitView world, Registry<Biome> biomeRegistry) {
|
||||||
super(pos, upgradeData, world);
|
super(pos, upgradeData, world, biomeRegistry, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -162,7 +162,7 @@ public abstract class PocketGenerator implements Weighted<PocketGenerationContex
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setup(Pocket pocket, RiftManager manager, PocketGenerationContext parameters, boolean setupLootTables) {
|
public void setup(Pocket pocket, RiftManager manager, PocketGenerationContext parameters, boolean setupLootTables) {
|
||||||
ServerWorld world = parameters.getWorld();
|
ServerWorld world = parameters.world();
|
||||||
|
|
||||||
if (!(pocket instanceof LazyGenerationPocket)) { // should not iterate over that which does not exist & area may be massive, getBlockEntities() might force generation
|
if (!(pocket instanceof LazyGenerationPocket)) { // should not iterate over that which does not exist & area may be massive, getBlockEntities() might force generation
|
||||||
if (setupLootTables) // temp
|
if (setupLootTables) // temp
|
||||||
|
@ -181,7 +181,7 @@ public abstract class PocketGenerator implements Weighted<PocketGenerationContex
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
manager.getRifts().forEach(rift -> rift.getDestination().setLocation(new Location(world, rift.getPos())));
|
manager.getRifts().forEach(rift -> rift.getDestination().setLocation(new Location(world, rift.getPos())));
|
||||||
TemplateUtils.registerRifts(manager.getRifts(), parameters.getLinkTo(), parameters.getLinkProperties(), pocket);
|
TemplateUtils.registerRifts(manager.getRifts(), parameters.linkTo(), parameters.linkProperties(), pocket);
|
||||||
}
|
}
|
||||||
|
|
||||||
public RiftManager getRiftManager(Pocket pocket) {
|
public RiftManager getRiftManager(Pocket pocket) {
|
||||||
|
|
|
@ -1,56 +1,40 @@
|
||||||
package org.dimdev.dimdoors.pockets.generator;
|
package org.dimdev.dimdoors.pockets.generator;
|
||||||
|
|
||||||
import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking;
|
|
||||||
import net.fabricmc.fabric.api.util.NbtType;
|
|
||||||
import net.fabricmc.loader.api.FabricLoader;
|
|
||||||
import net.minecraft.client.network.PlayerListEntry;
|
|
||||||
import net.minecraft.client.network.ServerInfo;
|
|
||||||
import net.minecraft.nbt.NbtCompound;
|
|
||||||
import net.minecraft.server.MinecraftServer;
|
|
||||||
import net.minecraft.server.PlayerManager;
|
|
||||||
import net.minecraft.server.network.ServerPlayNetworkHandler;
|
|
||||||
import net.minecraft.server.network.ServerPlayerEntity;
|
|
||||||
import net.minecraft.server.network.ServerPlayerInteractionManager;
|
|
||||||
import net.minecraft.server.world.ServerEntityManager;
|
|
||||||
import net.minecraft.server.world.ServerWorld;
|
|
||||||
import net.minecraft.text.TranslatableText;
|
|
||||||
import net.minecraft.util.Identifier;
|
|
||||||
import net.minecraft.util.math.BlockPos;
|
|
||||||
import net.minecraft.util.math.Vec3i;
|
|
||||||
import net.minecraft.world.chunk.Chunk;
|
|
||||||
import org.apache.logging.log4j.LogManager;
|
|
||||||
import org.apache.logging.log4j.Logger;
|
|
||||||
import org.dimdev.dimdoors.api.util.Path;
|
|
||||||
import org.dimdev.dimdoors.block.entity.RiftBlockEntity;
|
|
||||||
import org.dimdev.dimdoors.command.PocketCommand;
|
|
||||||
import org.dimdev.dimdoors.pockets.PocketLoader;
|
|
||||||
import org.dimdev.dimdoors.pockets.PocketTemplate;
|
|
||||||
import org.dimdev.dimdoors.pockets.modifier.AbsoluteRiftBlockEntityModifier;
|
|
||||||
import org.dimdev.dimdoors.pockets.modifier.RiftManager;
|
|
||||||
import org.dimdev.dimdoors.api.util.BlockPlacementType;
|
|
||||||
import org.dimdev.dimdoors.pockets.PocketGenerationContext;
|
|
||||||
import org.dimdev.dimdoors.util.schematic.Schematic;
|
|
||||||
import org.dimdev.dimdoors.world.level.registry.DimensionalRegistry;
|
|
||||||
import org.dimdev.dimdoors.world.pocket.type.LazyGenerationPocket;
|
|
||||||
import org.dimdev.dimdoors.world.pocket.type.Pocket;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.apache.logging.log4j.LogManager;
|
||||||
|
import org.apache.logging.log4j.Logger;
|
||||||
|
import org.dimdev.dimdoors.api.util.BlockPlacementType;
|
||||||
|
import org.dimdev.dimdoors.api.util.Path;
|
||||||
|
import org.dimdev.dimdoors.block.entity.RiftBlockEntity;
|
||||||
|
import org.dimdev.dimdoors.command.PocketCommand;
|
||||||
|
import org.dimdev.dimdoors.pockets.PocketGenerationContext;
|
||||||
|
import org.dimdev.dimdoors.pockets.PocketLoader;
|
||||||
|
import org.dimdev.dimdoors.pockets.PocketTemplate;
|
||||||
|
import org.dimdev.dimdoors.pockets.modifier.AbsoluteRiftBlockEntityModifier;
|
||||||
|
import org.dimdev.dimdoors.pockets.modifier.RiftManager;
|
||||||
|
import org.dimdev.dimdoors.util.schematic.Schematic;
|
||||||
|
import org.dimdev.dimdoors.world.level.registry.DimensionalRegistry;
|
||||||
|
import org.dimdev.dimdoors.world.pocket.type.LazyGenerationPocket;
|
||||||
|
import org.dimdev.dimdoors.world.pocket.type.Pocket;
|
||||||
|
|
||||||
|
import net.minecraft.nbt.NbtCompound;
|
||||||
|
import net.minecraft.server.world.ServerWorld;
|
||||||
|
import net.minecraft.text.TranslatableText;
|
||||||
|
import net.minecraft.util.Identifier;
|
||||||
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
import net.minecraft.util.math.Vec3i;
|
||||||
|
import net.minecraft.world.chunk.Chunk;
|
||||||
|
|
||||||
|
import net.fabricmc.fabric.api.util.NbtType;
|
||||||
|
|
||||||
public class SchematicGenerator extends LazyPocketGenerator{
|
public class SchematicGenerator extends LazyPocketGenerator{
|
||||||
private static final Logger LOGGER = LogManager.getLogger();
|
private static final Logger LOGGER = LogManager.getLogger();
|
||||||
public static final String KEY = "schematic";
|
public static final String KEY = "schematic";
|
||||||
|
|
||||||
/*
|
|
||||||
public static final Codec<SchematicGenerator> CODEC = RecordCodecBuilder.create(instance -> instance.group(
|
|
||||||
Codec.INT.fieldOf("size").forGetter(SchematicGenerator::getSize),
|
|
||||||
Codec.STRING.fieldOf("id").forGetter(SchematicGenerator::getName),
|
|
||||||
Codec.INT.optionalFieldOf("weight", 5).forGetter(schematicGenerator -> schematicGenerator.getWeight(null))
|
|
||||||
).apply(instance, SchematicGenerator::new));
|
|
||||||
*/
|
|
||||||
|
|
||||||
private String id;
|
private String id;
|
||||||
private Identifier templateID;
|
private Identifier templateID;
|
||||||
private BlockPlacementType placementType = BlockPlacementType.SECTION_NO_UPDATE;
|
private BlockPlacementType placementType = BlockPlacementType.SECTION_NO_UPDATE;
|
||||||
|
@ -149,7 +133,7 @@ public class SchematicGenerator extends LazyPocketGenerator{
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Pocket prepareAndPlacePocket(PocketGenerationContext parameters, Pocket.PocketBuilder<?, ?> builder) {
|
public Pocket prepareAndPlacePocket(PocketGenerationContext parameters, Pocket.PocketBuilder<?, ?> builder) {
|
||||||
ServerWorld world = parameters.getWorld();
|
ServerWorld world = parameters.world();
|
||||||
Map<String, Double> variableMap = parameters.toVariableMap(new HashMap<>());
|
Map<String, Double> variableMap = parameters.toVariableMap(new HashMap<>());
|
||||||
|
|
||||||
PocketTemplate template = PocketLoader.getInstance().getTemplates().get(Path.stringPath(templateID));
|
PocketTemplate template = PocketLoader.getInstance().getTemplates().get(Path.stringPath(templateID));
|
||||||
|
|
|
@ -26,7 +26,7 @@ public class VoidGenerator extends LazyPocketGenerator {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Pocket prepareAndPlacePocket(PocketGenerationContext parameters, Pocket.PocketBuilder<?, ?> builder) {
|
public Pocket prepareAndPlacePocket(PocketGenerationContext parameters, Pocket.PocketBuilder<?, ?> builder) {
|
||||||
Pocket pocket = DimensionalRegistry.getPocketDirectory(parameters.getWorld().getRegistryKey()).newPocket(builder);
|
Pocket pocket = DimensionalRegistry.getPocketDirectory(parameters.world().getRegistryKey()).newPocket(builder);
|
||||||
Map<String, Double> variableMap = parameters.toVariableMap(new HashMap<>());
|
Map<String, Double> variableMap = parameters.toVariableMap(new HashMap<>());
|
||||||
pocket.setSize((int) widthEquation.apply(variableMap), (int) heightEquation.apply(variableMap), (int) lengthEquation.apply(variableMap));
|
pocket.setSize((int) widthEquation.apply(variableMap), (int) heightEquation.apply(variableMap), (int) lengthEquation.apply(variableMap));
|
||||||
|
|
||||||
|
|
|
@ -59,7 +59,11 @@ public class AbsoluteRiftBlockEntityModifier implements LazyModifier {
|
||||||
|
|
||||||
NbtList riftsNbt;
|
NbtList riftsNbt;
|
||||||
if (rifts != null) {
|
if (rifts != null) {
|
||||||
riftsNbt = rifts.values().parallelStream().unordered().map(rift -> rift.writeNbt(new NbtCompound())).collect(Collectors.toCollection(NbtList::new));
|
riftsNbt = rifts.values().parallelStream().unordered().map(rift -> {
|
||||||
|
NbtCompound e = new NbtCompound();
|
||||||
|
rift.writeNbt(e);
|
||||||
|
return e;
|
||||||
|
}).collect(Collectors.toCollection(NbtList::new));
|
||||||
} else {
|
} else {
|
||||||
riftsNbt = new NbtList();
|
riftsNbt = new NbtList();
|
||||||
riftsNbt.addAll(serializedRifts.values());
|
riftsNbt.addAll(serializedRifts.values());
|
||||||
|
|
|
@ -156,7 +156,7 @@ public class DimensionalDoorModifier implements LazyCompatibleModifier {
|
||||||
chunk.setBlockState(pos.up(), upper, false);
|
chunk.setBlockState(pos.up(), upper, false);
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
ServerWorld world = parameters.getWorld();
|
ServerWorld world = parameters.world();
|
||||||
|
|
||||||
world.setBlockState(pos, lower);
|
world.setBlockState(pos, lower);
|
||||||
world.setBlockState(pos.up(), upper);
|
world.setBlockState(pos.up(), upper);
|
||||||
|
|
|
@ -162,7 +162,7 @@ public class ShellModifier implements LazyModifier {
|
||||||
boxToDrawAround = BlockBox.create(new Vec3i(pocketBox.getMinX(), pocketBox.getMinY(), pocketBox.getMinZ()), new Vec3i(pocketBox.getMaxX(), pocketBox.getMaxY(), pocketBox.getMaxZ()));
|
boxToDrawAround = BlockBox.create(new Vec3i(pocketBox.getMinX(), pocketBox.getMinY(), pocketBox.getMinZ()), new Vec3i(pocketBox.getMaxX(), pocketBox.getMaxY(), pocketBox.getMaxZ()));
|
||||||
layers.forEach(layer -> pocket.expand(layer.getThickness(variableMap)));
|
layers.forEach(layer -> pocket.expand(layer.getThickness(variableMap)));
|
||||||
} else {
|
} else {
|
||||||
layers.forEach(layer -> drawLayer(layer, manager.getPocket(), parameters.getWorld()));
|
layers.forEach(layer -> drawLayer(layer, manager.getPocket(), parameters.world()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -130,14 +130,14 @@ public abstract class PocketGeneratorReference implements ImplementedVirtualPock
|
||||||
|
|
||||||
|
|
||||||
Pocket.PocketBuilder<?, ?> builder = generator.pocketBuilder(parameters)
|
Pocket.PocketBuilder<?, ?> builder = generator.pocketBuilder(parameters)
|
||||||
.virtualLocation(parameters.getSourceVirtualLocation()); // TODO: virtualLocation thing still makes little sense
|
.virtualLocation(parameters.sourceVirtualLocation()); // TODO: virtualLocation thing still makes little sense
|
||||||
generator.applyModifiers(parameters, builder);
|
generator.applyModifiers(parameters, builder);
|
||||||
this.applyModifiers(parameters, builder);
|
this.applyModifiers(parameters, builder);
|
||||||
|
|
||||||
LazyPocketGenerator.currentlyGenerating = true;
|
LazyPocketGenerator.currentlyGenerating = true;
|
||||||
// ensure we aren't missing any chunks that were already loaded previously
|
// ensure we aren't missing any chunks that were already loaded previously
|
||||||
// for lazy gen
|
// for lazy gen
|
||||||
Set<Chunk> alreadyLoadedChunks = StreamSupport.stream(parameters.getWorld().getChunkManager().threadedAnvilChunkStorage.entryIterator().spliterator(), false).map(ChunkHolder::getWorldChunk).filter(Objects::nonNull).collect(Collectors.toSet());
|
Set<Chunk> alreadyLoadedChunks = StreamSupport.stream(parameters.world().getChunkManager().threadedAnvilChunkStorage.entryIterator().spliterator(), false).map(ChunkHolder::getWorldChunk).filter(Objects::nonNull).collect(Collectors.toSet());
|
||||||
|
|
||||||
Pocket pocket = generator.prepareAndPlacePocket(parameters, builder);
|
Pocket pocket = generator.prepareAndPlacePocket(parameters, builder);
|
||||||
BlockPos originalOrigin = pocket.getOrigin();
|
BlockPos originalOrigin = pocket.getOrigin();
|
||||||
|
|
|
@ -12,7 +12,6 @@ public abstract class AbstractVirtualPocketList extends WeightedList<VirtualPock
|
||||||
|
|
||||||
public NbtCompound toNbt(NbtCompound nbt) {
|
public NbtCompound toNbt(NbtCompound nbt) {
|
||||||
ImplementedVirtualPocket.super.toNbt(nbt);
|
ImplementedVirtualPocket.super.toNbt(nbt);
|
||||||
|
|
||||||
return nbt;
|
return nbt;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,16 +1,8 @@
|
||||||
package org.dimdev.dimdoors.world.feature.gateway.schematic;
|
package org.dimdev.dimdoors.world.feature.gateway.schematic;
|
||||||
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
import org.dimdev.dimdoors.mixin.accessor.BuiltinBiomesAccessor;
|
|
||||||
|
|
||||||
import net.minecraft.block.Blocks;
|
import net.minecraft.block.Blocks;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.util.registry.RegistryKey;
|
|
||||||
import net.minecraft.world.StructureWorldAccess;
|
import net.minecraft.world.StructureWorldAccess;
|
||||||
import net.minecraft.world.biome.Biome;
|
|
||||||
|
|
||||||
public class TwoPillarsGateway extends SchematicGateway {
|
public class TwoPillarsGateway extends SchematicGateway {
|
||||||
private static final int GATEWAY_RADIUS = 4;
|
private static final int GATEWAY_RADIUS = 4;
|
||||||
|
|
Loading…
Reference in a new issue