Fix custom world generator not applied (#164)
This commit is contained in:
parent
a2820926ec
commit
ebe5b4de14
|
@ -2,6 +2,7 @@ package io.izzel.arclight.common.bridge.world.server;
|
|||
|
||||
import io.izzel.arclight.common.mod.util.ArclightCallbackExecutor;
|
||||
import net.minecraft.util.math.ChunkPos;
|
||||
import net.minecraft.world.gen.ChunkGenerator;
|
||||
import net.minecraft.world.server.ChunkHolder;
|
||||
|
||||
import java.util.function.BooleanSupplier;
|
||||
|
@ -21,4 +22,6 @@ public interface ChunkManagerBridge {
|
|||
ChunkHolder bridge$chunkHolderAt(long chunkPos);
|
||||
|
||||
void bridge$setViewDistance(int i);
|
||||
|
||||
void bridge$setChunkGenerator(ChunkGenerator generator);
|
||||
}
|
||||
|
|
|
@ -2,6 +2,7 @@ package io.izzel.arclight.common.mixin.core.world;
|
|||
|
||||
import io.izzel.arclight.common.bridge.world.WorldBridge;
|
||||
import io.izzel.arclight.common.bridge.world.border.WorldBorderBridge;
|
||||
import io.izzel.arclight.common.bridge.world.server.ServerChunkProviderBridge;
|
||||
import io.izzel.arclight.common.mod.ArclightMod;
|
||||
import io.izzel.arclight.common.mod.server.ArclightServer;
|
||||
import io.izzel.arclight.common.mod.server.world.WrappedWorlds;
|
||||
|
@ -31,6 +32,7 @@ import org.bukkit.craftbukkit.v.CraftWorld;
|
|||
import org.bukkit.craftbukkit.v.block.CraftBlock;
|
||||
import org.bukkit.craftbukkit.v.block.data.CraftBlockData;
|
||||
import org.bukkit.craftbukkit.v.event.CraftEventFactory;
|
||||
import org.bukkit.craftbukkit.v.generator.CustomChunkGenerator;
|
||||
import org.bukkit.event.block.BlockPhysicsEvent;
|
||||
import org.bukkit.event.entity.CreatureSpawnEvent;
|
||||
import org.bukkit.generator.ChunkGenerator;
|
||||
|
@ -218,6 +220,11 @@ public abstract class WorldMixin implements WorldBridge, IWorldWriter {
|
|||
}
|
||||
if (generator == null) {
|
||||
generator = getServer().getGenerator(((IServerWorldInfo) this.getWorldInfo()).getWorldName());
|
||||
if (generator != null && (Object) this instanceof ServerWorld) {
|
||||
ServerWorld serverWorld = (ServerWorld) (Object) this;
|
||||
CustomChunkGenerator gen = new CustomChunkGenerator(serverWorld, serverWorld.getChunkProvider().getChunkGenerator(), generator);
|
||||
((ServerChunkProviderBridge) serverWorld.getChunkProvider()).bridge$setChunkGenerator(gen);
|
||||
}
|
||||
}
|
||||
if (environment == null) {
|
||||
environment = ArclightServer.getEnvironment(this.typeKey);
|
||||
|
|
|
@ -6,10 +6,13 @@ import io.izzel.arclight.common.mod.util.ArclightCallbackExecutor;
|
|||
import net.minecraft.util.RegistryKey;
|
||||
import net.minecraft.util.math.ChunkPos;
|
||||
import net.minecraft.world.DimensionType;
|
||||
import net.minecraft.world.gen.ChunkGenerator;
|
||||
import net.minecraft.world.server.ChunkHolder;
|
||||
import net.minecraft.world.server.ChunkManager;
|
||||
import net.minecraft.world.server.ServerWorld;
|
||||
import org.spongepowered.asm.mixin.Final;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Mutable;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
import org.spongepowered.asm.mixin.gen.Invoker;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
|
@ -26,6 +29,7 @@ public abstract class ChunkManagerMixin implements ChunkManagerBridge {
|
|||
@Shadow protected abstract Iterable<ChunkHolder> getLoadedChunksIterable();
|
||||
@Shadow abstract boolean isOutsideSpawningRadius(ChunkPos chunkPosIn);
|
||||
@Shadow protected abstract void tickEntityTracker();
|
||||
@Shadow @Final @Mutable public ChunkGenerator generator;
|
||||
@Invoker("tick") public abstract void bridge$tick(BooleanSupplier hasMoreTime);
|
||||
@Invoker("setViewDistance") public abstract void bridge$setViewDistance(int i);
|
||||
// @formatter:on
|
||||
|
@ -61,4 +65,9 @@ public abstract class ChunkManagerMixin implements ChunkManagerBridge {
|
|||
public void bridge$tickEntityTracker() {
|
||||
this.tickEntityTracker();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void bridge$setChunkGenerator(ChunkGenerator generator) {
|
||||
this.generator = generator;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -70,6 +70,7 @@ public abstract class ServerChunkProviderMixin implements ServerChunkProviderBri
|
|||
@Override
|
||||
public void bridge$setChunkGenerator(ChunkGenerator chunkGenerator) {
|
||||
this.generator = chunkGenerator;
|
||||
((ChunkManagerBridge) this.chunkManager).bridge$setChunkGenerator(chunkGenerator);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
Loading…
Reference in New Issue
Block a user