Properly fire WorldLoadEvent and WorldInitEvent.
This commit is contained in:
parent
77a5ae9c6f
commit
8be0bbbebc
|
@ -56,6 +56,7 @@ import org.bukkit.craftbukkit.v.CraftServer;
|
||||||
import org.bukkit.craftbukkit.v.scoreboard.CraftScoreboardManager;
|
import org.bukkit.craftbukkit.v.scoreboard.CraftScoreboardManager;
|
||||||
import org.bukkit.event.server.ServerLoadEvent;
|
import org.bukkit.event.server.ServerLoadEvent;
|
||||||
import org.bukkit.event.world.WorldInitEvent;
|
import org.bukkit.event.world.WorldInitEvent;
|
||||||
|
import org.bukkit.event.world.WorldLoadEvent;
|
||||||
import org.bukkit.plugin.PluginLoadOrder;
|
import org.bukkit.plugin.PluginLoadOrder;
|
||||||
import org.spongepowered.asm.mixin.Final;
|
import org.spongepowered.asm.mixin.Final;
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
|
@ -63,6 +64,7 @@ import org.spongepowered.asm.mixin.Overwrite;
|
||||||
import org.spongepowered.asm.mixin.Shadow;
|
import org.spongepowered.asm.mixin.Shadow;
|
||||||
import org.spongepowered.asm.mixin.injection.At;
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
import org.spongepowered.asm.mixin.injection.Inject;
|
import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
|
import org.spongepowered.asm.mixin.injection.Redirect;
|
||||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||||
import org.spongepowered.asm.mixin.injection.callback.LocalCapture;
|
import org.spongepowered.asm.mixin.injection.callback.LocalCapture;
|
||||||
|
@ -76,6 +78,7 @@ import java.nio.charset.StandardCharsets;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.function.BooleanSupplier;
|
import java.util.function.BooleanSupplier;
|
||||||
|
|
||||||
@Mixin(MinecraftServer.class)
|
@Mixin(MinecraftServer.class)
|
||||||
|
@ -355,16 +358,64 @@ public abstract class MinecraftServerMixin extends RecursiveEventLoop<TickDelaye
|
||||||
if (((CraftServer) Bukkit.getServer()).scoreboardManager == null) {
|
if (((CraftServer) Bukkit.getServer()).scoreboardManager == null) {
|
||||||
((CraftServer) Bukkit.getServer()).scoreboardManager = new CraftScoreboardManager((MinecraftServer) (Object) this, serverWorld.getScoreboard());
|
((CraftServer) Bukkit.getServer()).scoreboardManager = new CraftScoreboardManager((MinecraftServer) (Object) this, serverWorld.getScoreboard());
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Redirect(method = "loadWorlds", at = @At(value = "INVOKE", remap = false, target = "Ljava/util/Map;put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"))
|
||||||
|
private Object arclight$worldInit(Map<Object, Object> map, Object key, Object value) {
|
||||||
|
Object ret = map.put(key, value);
|
||||||
|
ServerWorld serverWorld = (ServerWorld) value;
|
||||||
if (((WorldBridge) serverWorld).bridge$getGenerator() != null) {
|
if (((WorldBridge) serverWorld).bridge$getGenerator() != null) {
|
||||||
((WorldBridge) serverWorld).bridge$getWorld().getPopulators().addAll(
|
((WorldBridge) serverWorld).bridge$getWorld().getPopulators().addAll(
|
||||||
((WorldBridge) serverWorld).bridge$getGenerator().getDefaultPopulators(
|
((WorldBridge) serverWorld).bridge$getGenerator().getDefaultPopulators(
|
||||||
((WorldBridge) serverWorld).bridge$getWorld()));
|
((WorldBridge) serverWorld).bridge$getWorld()));
|
||||||
}
|
}
|
||||||
|
Bukkit.getPluginManager().callEvent(new WorldInitEvent(((WorldBridge) serverWorld).bridge$getWorld()));
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Inject(method = "loadWorlds", locals = LocalCapture.CAPTURE_FAILHARD, at = @At(value = "INVOKE", target = "Lnet/minecraft/server/management/PlayerList;func_212504_a(Lnet/minecraft/world/server/ServerWorld;)V"))
|
/**
|
||||||
private void arclight$initEvent(SaveHandler saveHandlerIn, WorldInfo info, WorldSettings worldSettingsIn, IChunkStatusListener chunkStatusListenerIn, CallbackInfo ci, ServerWorld serverWorld) {
|
* @author IzzelAliz
|
||||||
Bukkit.getPluginManager().callEvent(new WorldInitEvent(((WorldBridge) serverWorld).bridge$getWorld()));
|
* @reason
|
||||||
|
*/
|
||||||
|
@Overwrite
|
||||||
|
public void loadInitialChunks(IChunkStatusListener listener) {
|
||||||
|
this.setUserMessage(new TranslationTextComponent("menu.generatingTerrain"));
|
||||||
|
ServerWorld serverworld = this.getWorld(DimensionType.OVERWORLD);
|
||||||
|
this.forceTicks = true;
|
||||||
|
LOGGER.info("Preparing start region for dimension " + DimensionType.getKey(serverworld.dimension.getType()));
|
||||||
|
BlockPos blockpos = serverworld.getSpawnPoint();
|
||||||
|
listener.start(new ChunkPos(blockpos));
|
||||||
|
ServerChunkProvider serverchunkprovider = serverworld.getChunkProvider();
|
||||||
|
serverchunkprovider.getLightManager().func_215598_a(500);
|
||||||
|
this.serverTime = Util.milliTime();
|
||||||
|
serverchunkprovider.registerTicket(TicketType.START, new ChunkPos(blockpos), 11, Unit.INSTANCE);
|
||||||
|
|
||||||
|
while (serverchunkprovider.getLoadedChunksCount() != 441) {
|
||||||
|
this.executeModerately();
|
||||||
|
}
|
||||||
|
|
||||||
|
this.executeModerately();
|
||||||
|
|
||||||
|
for (DimensionType dimensiontype : DimensionType.getAll()) {
|
||||||
|
ServerWorld serverWorld = this.getWorld(dimensiontype);
|
||||||
|
if (((WorldBridge) serverWorld).bridge$getWorld().getKeepSpawnInMemory()) {
|
||||||
|
ForcedChunksSaveData forcedchunkssavedata = serverWorld.getSavedData().get(ForcedChunksSaveData::new, "chunks");
|
||||||
|
if (forcedchunkssavedata != null) {
|
||||||
|
LongIterator longiterator = forcedchunkssavedata.getChunks().iterator();
|
||||||
|
|
||||||
|
while (longiterator.hasNext()) {
|
||||||
|
long i = longiterator.nextLong();
|
||||||
|
ChunkPos chunkpos = new ChunkPos(i);
|
||||||
|
serverWorld.getChunkProvider().forceChunk(chunkpos, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Bukkit.getPluginManager().callEvent(new WorldLoadEvent(((WorldBridge) serverWorld).bridge$getWorld()));
|
||||||
|
}
|
||||||
|
|
||||||
|
this.executeModerately();
|
||||||
|
listener.stop();
|
||||||
|
serverchunkprovider.getLightManager().func_215598_a(5);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Inject(method = "updateTimeLightAndEntities", at = @At("HEAD"))
|
@Inject(method = "updateTimeLightAndEntities", at = @At("HEAD"))
|
||||||
|
|
|
@ -9,7 +9,6 @@ public abstract class ArclightEventDispatcherRegistry {
|
||||||
MinecraftForge.EVENT_BUS.register(new BlockBreakEventDispatcher());
|
MinecraftForge.EVENT_BUS.register(new BlockBreakEventDispatcher());
|
||||||
MinecraftForge.EVENT_BUS.register(new BlockPlaceEventDispatcher());
|
MinecraftForge.EVENT_BUS.register(new BlockPlaceEventDispatcher());
|
||||||
MinecraftForge.EVENT_BUS.register(new EntityPotionEffectEventDispatcher());
|
MinecraftForge.EVENT_BUS.register(new EntityPotionEffectEventDispatcher());
|
||||||
MinecraftForge.EVENT_BUS.register(new WorldEventDispatcher());
|
|
||||||
MinecraftForge.EVENT_BUS.register(new EntityEventDispatcher());
|
MinecraftForge.EVENT_BUS.register(new EntityEventDispatcher());
|
||||||
MinecraftForge.EVENT_BUS.register(new NetworkEventDispatcher());
|
MinecraftForge.EVENT_BUS.register(new NetworkEventDispatcher());
|
||||||
MinecraftForge.EVENT_BUS.register(new EntityTeleportEventDispatcher());
|
MinecraftForge.EVENT_BUS.register(new EntityTeleportEventDispatcher());
|
||||||
|
|
|
@ -1,15 +0,0 @@
|
||||||
package io.izzel.arclight.common.mod.server.event;
|
|
||||||
|
|
||||||
import io.izzel.arclight.common.bridge.world.WorldBridge;
|
|
||||||
import net.minecraftforge.event.world.WorldEvent;
|
|
||||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.event.world.WorldLoadEvent;
|
|
||||||
|
|
||||||
public class WorldEventDispatcher {
|
|
||||||
|
|
||||||
@SubscribeEvent
|
|
||||||
public void onWorldLoad(WorldEvent.Load event) {
|
|
||||||
Bukkit.getPluginManager().callEvent(new WorldLoadEvent(((WorldBridge) event.getWorld()).bridge$getWorld()));
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user