mirror of
https://github.com/plexusorg/Plex-FAWE.git
synced 2025-06-11 20:13:55 +00:00
Merge branch 'breaking-114' into commanding
This commit is contained in:
@ -50,6 +50,7 @@ import java.util.List;
|
||||
public abstract class ChunkListener implements Listener {
|
||||
|
||||
protected int rateLimit = 0;
|
||||
protected Location lastCancelPos;
|
||||
private int[] badLimit = new int[]{Settings.IMP.TICK_LIMITER.PHYSICS_MS, Settings.IMP.TICK_LIMITER.FALLING, Settings.IMP.TICK_LIMITER.ITEMS};
|
||||
|
||||
public ChunkListener() {
|
||||
@ -59,6 +60,10 @@ public abstract class ChunkListener implements Listener {
|
||||
plm.registerEvents(this, plugin);
|
||||
try { plm.registerEvents(new ChunkListener_8Plus(this), plugin); } catch (Throwable ignore) {}
|
||||
TaskManager.IMP.repeat(() -> {
|
||||
Location tmpLoc = lastCancelPos;
|
||||
if (tmpLoc != null) {
|
||||
Fawe.debug("[FAWE `tick-limiter`] Detected and cancelled physics lag source at " + tmpLoc);
|
||||
}
|
||||
rateLimit--;
|
||||
physicsFreeze = false;
|
||||
itemFreeze = false;
|
||||
@ -66,6 +71,7 @@ public abstract class ChunkListener implements Listener {
|
||||
physSkip = 0;
|
||||
physCancelPair = Long.MIN_VALUE;
|
||||
physCancel = false;
|
||||
lastCancelPos = null;
|
||||
|
||||
counter.clear();
|
||||
for (Long2ObjectMap.Entry<Boolean> entry : badChunks.long2ObjectEntrySet()) {
|
||||
@ -231,7 +237,7 @@ public abstract class ChunkListener implements Listener {
|
||||
physCancelPair = MathMan.pairInt(cx, cz);
|
||||
if (rateLimit <= 0) {
|
||||
rateLimit = 20;
|
||||
Fawe.debug("[FAWE `tick-limiter`] Detected and cancelled physics lag source at " + block.getLocation());
|
||||
lastCancelPos = block.getLocation();
|
||||
}
|
||||
cancelNearby(cx, cz);
|
||||
event.setCancelled(true);
|
||||
@ -305,7 +311,7 @@ public abstract class ChunkListener implements Listener {
|
||||
cancelNearby(cx, cz);
|
||||
if (rateLimit <= 0) {
|
||||
rateLimit = 20;
|
||||
Fawe.debug("[FAWE `tick-limiter`] Detected and cancelled falling block lag source at " + block.getLocation());
|
||||
lastCancelPos = block.getLocation();
|
||||
}
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
|
@ -60,7 +60,7 @@ public class ChunkListener_9 extends ChunkListener {
|
||||
physCancelPair = MathMan.pairInt(cx, cz);
|
||||
if (rateLimit <= 0) {
|
||||
rateLimit = 20;
|
||||
Fawe.debug("[FAWE `tick-limiter`] Detected and cancelled physics lag source at " + block.getLocation());
|
||||
lastCancelPos = block.getLocation();
|
||||
}
|
||||
cancelNearby(cx, cz);
|
||||
event.setCancelled(true);
|
||||
|
@ -11,8 +11,11 @@ import org.bukkit.ChunkSnapshot;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.block.BlockState;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
public class AsyncChunk implements Chunk {
|
||||
|
||||
private final AsyncWorld world;
|
||||
@ -178,4 +181,19 @@ public class AsyncChunk implements Chunk {
|
||||
public void setForceLoaded(boolean arg0) {
|
||||
world.getChunkAt(x, z).setForceLoaded(arg0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean addPluginChunkTicket(final Plugin plugin) {
|
||||
return world.addPluginChunkTicket(this.getX(), this.getZ(), plugin);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean removePluginChunkTicket(final Plugin plugin) {
|
||||
return world.removePluginChunkTicket(this.getX(), this.getZ(), plugin);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<Plugin> getPluginChunkTickets() {
|
||||
return world.getPluginChunkTickets(this.getX(), this.getZ());
|
||||
}
|
||||
}
|
||||
|
@ -17,6 +17,7 @@ import com.sk89q.worldedit.world.biome.BiomeType;
|
||||
import java.io.File;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
@ -1179,6 +1180,31 @@ public class AsyncWorld extends DelegateFaweQueue implements World, HasFaweQueue
|
||||
return parent.getForceLoadedChunks();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean addPluginChunkTicket(int x, int z, @NotNull Plugin plugin) {
|
||||
return getBukkitWorld().addPluginChunkTicket(x, z, plugin);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean removePluginChunkTicket(int x, int z, @NotNull Plugin plugin) {
|
||||
return getBukkitWorld().removePluginChunkTicket(x, z, plugin);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removePluginChunkTickets(@NotNull Plugin plugin) {
|
||||
getBukkitWorld().removePluginChunkTickets(plugin);
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull Collection<Plugin> getPluginChunkTickets(int x, int z) {
|
||||
return getBukkitWorld().getPluginChunkTickets(x, z);
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull Map<Plugin, Collection<Chunk>> getPluginChunkTickets() {
|
||||
return getBukkitWorld().getPluginChunkTickets();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getHighestBlockYAt(int x, int z, com.destroystokyo.paper.HeightmapType heightmap) throws UnsupportedOperationException {
|
||||
return TaskManager.IMP.sync(new Supplier<Integer>() {
|
||||
|
Reference in New Issue
Block a user