mirror of
https://github.com/MinecraftForge/MinecraftForge.git
synced 2026-11-13 16:54:22 +00:00
Add an event for when the chunk ticket level is updated (#8909)
This commit is contained in:
1 parent
06d9d89f98
commit
874ff1bba2
3 files changed
+106
No files matched your search
@@ -16,6 +16,7 @@ import com.mojang.brigadier.CommandDispatcher;
|
||||
import net.minecraft.commands.CommandBuildContext;
|
||||
import net.minecraft.server.MinecraftServer;
|
||||
import net.minecraft.server.ReloadableServerResources;
|
||||
import net.minecraft.server.level.ChunkHolder;
|
||||
import net.minecraft.server.players.PlayerList;
|
||||
import net.minecraft.util.RandomSource;
|
||||
import net.minecraft.util.random.WeightedRandomList;
|
||||
@@ -118,6 +119,7 @@ import net.minecraftforge.event.level.BlockEvent.CreateFluidSourceEvent;
|
||||
import net.minecraftforge.event.level.BlockEvent.EntityMultiPlaceEvent;
|
||||
import net.minecraftforge.event.level.BlockEvent.EntityPlaceEvent;
|
||||
import net.minecraftforge.event.level.BlockEvent.NeighborNotifyEvent;
|
||||
import net.minecraftforge.event.level.ChunkTicketLevelUpdatedEvent;
|
||||
import net.minecraftforge.event.level.ChunkWatchEvent;
|
||||
import net.minecraftforge.event.level.ExplosionEvent;
|
||||
import net.minecraftforge.event.level.PistonEvent;
|
||||
@@ -610,6 +612,12 @@ public class ForgeEventFactory
|
||||
return event.getResult() != Result.DENY;
|
||||
}
|
||||
|
||||
public static void fireChunkTicketLevelUpdated(ServerLevel level, long chunkPos, int oldTicketLevel, int newTicketLevel, @Nullable ChunkHolder chunkHolder)
|
||||
{
|
||||
if (oldTicketLevel != newTicketLevel)
|
||||
MinecraftForge.EVENT_BUS.post(new ChunkTicketLevelUpdatedEvent(level, chunkPos, oldTicketLevel, newTicketLevel, chunkHolder));
|
||||
}
|
||||
|
||||
public static void fireChunkWatch(ServerPlayer entity, LevelChunk chunk, ServerLevel level)
|
||||
{
|
||||
MinecraftForge.EVENT_BUS.post(new ChunkWatchEvent.Watch(entity, chunk, level));
|
||||
|
||||
@@ -0,0 +1,90 @@
|
||||
/*
|
||||
* Copyright (c) Forge Development LLC and contributors
|
||||
* SPDX-License-Identifier: LGPL-2.1-only
|
||||
*/
|
||||
|
||||
package net.minecraftforge.event.level;
|
||||
|
||||
import net.minecraft.server.level.ChunkHolder;
|
||||
import net.minecraft.server.level.ServerLevel;
|
||||
import net.minecraftforge.common.MinecraftForge;
|
||||
import net.minecraftforge.eventbus.api.Cancelable;
|
||||
import net.minecraftforge.eventbus.api.Event;
|
||||
import net.minecraftforge.fml.LogicalSide;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
/**
|
||||
* This event is fired whenever a chunk has its ticket level changed via the server's ChunkMap.
|
||||
* <p>
|
||||
* This event does not fire if the new ticket level is the same as the old level, or if both the
|
||||
* new <strong>AND</strong> old ticket levels represent values past the max chunk distance.
|
||||
* <p>
|
||||
* Due to how vanilla processes ticket level changes this event may be fired "twice" in one tick for the same chunk.
|
||||
* The scenario where this happens is when increasing the level from say 31 (ticking) to 32, the way vanilla does it
|
||||
* is by first changing it from 31 to 46, and then queuing the update from 46 to 32. However, when going from 32 to 31,
|
||||
* vanilla is able to go directly.
|
||||
* <p>
|
||||
* This event is not {@linkplain Cancelable cancellable} and does not {@linkplain HasResult have a result}.
|
||||
* <p>
|
||||
* This event is fired on the {@linkplain MinecraftForge#EVENT_BUS main Forge event bus}
|
||||
* only on the {@linkplain LogicalSide#SERVER logical server}.
|
||||
**/
|
||||
public class ChunkTicketLevelUpdatedEvent extends Event
|
||||
{
|
||||
private final ServerLevel level;
|
||||
private final long chunkPos;
|
||||
private final int oldTicketLevel;
|
||||
private final int newTicketLevel;
|
||||
@Nullable
|
||||
private final ChunkHolder chunkHolder;
|
||||
|
||||
public ChunkTicketLevelUpdatedEvent(ServerLevel level, long chunkPos, int oldTicketLevel, int newTicketLevel, @Nullable ChunkHolder chunkHolder)
|
||||
{
|
||||
this.level = level;
|
||||
this.chunkPos = chunkPos;
|
||||
this.oldTicketLevel = oldTicketLevel;
|
||||
this.newTicketLevel = newTicketLevel;
|
||||
this.chunkHolder = chunkHolder;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@return the server level containing the chunk}
|
||||
*/
|
||||
public ServerLevel getLevel()
|
||||
{
|
||||
return this.level;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@return the long representation of the chunk position the ticket level changed for}
|
||||
*/
|
||||
public long getChunkPos()
|
||||
{
|
||||
return this.chunkPos;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@return the previous ticket level the chunk had}
|
||||
*/
|
||||
public int getOldTicketLevel()
|
||||
{
|
||||
return this.oldTicketLevel;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@return the new ticket level for the chunk}
|
||||
*/
|
||||
public int getNewTicketLevel()
|
||||
{
|
||||
return this.newTicketLevel;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@return chunk that had its ticket level updated}
|
||||
*/
|
||||
@Nullable
|
||||
public ChunkHolder getChunkHolder()
|
||||
{
|
||||
return this.chunkHolder;
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user