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