Skip to content

Commit 7cdf603

Browse files
committed
Fix #405
1 parent d2ad018 commit 7cdf603

File tree

26 files changed

+351
-93
lines changed

26 files changed

+351
-93
lines changed

bungee/src/com/elikill58/negativity/bungee/BungeeScheduler.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,19 @@ public BungeeScheduler(Plugin plugin) {
2222
this.scheduler = plugin.getProxy().getScheduler();
2323
}
2424

25+
@Override
26+
public void run(Runnable task) {
27+
task.run();
28+
}
29+
2530
@Override
2631
public void runRepeating(Consumer<ScheduledTask> task, int delayTicks, int intervalTicks) {
2732
throw new UnsupportedOperationException("Scheduler runRepeating is not support on bungeecord yet.");
2833
}
2934

3035
@Override
3136
public ScheduledTask runRepeating(Runnable task, int delayTicks, int intervalTicks) {
32-
return new BungeeRunnableWrapper(
33-
scheduler.schedule(plugin, task, toMs(delayTicks), toMs(intervalTicks), TimeUnit.MILLISECONDS));
37+
return new BungeeRunnableWrapper(scheduler.schedule(plugin, task, toMs(delayTicks), toMs(intervalTicks), TimeUnit.MILLISECONDS));
3438
}
3539

3640
@Override

common/src/com/elikill58/negativity/api/NegativityPlayer.java

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,6 @@
99
import java.util.concurrent.Callable;
1010
import java.util.concurrent.CompletableFuture;
1111
import java.util.concurrent.ConcurrentHashMap;
12-
import java.util.concurrent.ExecutorService;
13-
import java.util.concurrent.Executors;
1412

1513
import org.checkerframework.checker.nullness.qual.Nullable;
1614

@@ -97,16 +95,13 @@ public class NegativityPlayer {
9795
public double sensitivity = 0.0;
9896
private String clientName, invincibilityReason = "";
9997
private @Nullable ScheduledTask fightCooldownTask;
100-
// one thread per person
101-
private final ExecutorService executor;
10298

10399
public NegativityPlayer(Player p) {
104100
this.p = p;
105101
this.playerId = p.getUniqueId();
106102
this.loginTime = System.currentTimeMillis();
107103
this.clientName = "Not loaded";
108104
this.isBedrockPlayer = BedrockPlayerManager.isBedrockPlayer(p.getUniqueId());
109-
this.executor = Executors.newSingleThreadExecutor((r) -> new Thread(r, "negativity-player-" + p.getName()));
110105

111106
// add processors like this: checkProcessors.add(new
112107
// SpiderExampleCheckProcessor(this));
@@ -160,15 +155,6 @@ public boolean isBedrockPlayer() {
160155
return isBedrockPlayer;
161156
}
162157

163-
/**
164-
* Get executor for all players content
165-
*
166-
* @return the executor service
167-
*/
168-
public ExecutorService getExecutor() {
169-
return executor;
170-
}
171-
172158
/**
173159
* Check if the player have be detected for the given cheat It also check for
174160
* bypass and TPS drop
@@ -238,7 +224,7 @@ public String getWhyDetectionNotActive(Cheat c) {
238224
return "Bypass permission";
239225
Adapter ada = Adapter.getAdapter();
240226
if (ada.getConfig().getDouble("tps_alert_stop") > ada.getLastTPS()) // to make TPS go upper
241-
return "Low TPS";
227+
return "Low TPS " + ada.getLastTPS();
242228
Player p = getPlayer();
243229
if (p.getGameMode().equals(GameMode.SPECTATOR))
244230
return "Spectating";

common/src/com/elikill58/negativity/api/packets/nms/channels/netty/NettyDecoderHandler.java

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import com.elikill58.negativity.api.events.packets.PacketReceiveEvent;
88
import com.elikill58.negativity.api.packets.PacketDirection;
99
import com.elikill58.negativity.api.packets.packet.NPacket;
10+
import com.elikill58.negativity.universal.Adapter;
1011
import com.elikill58.negativity.universal.Version;
1112

1213
import io.netty.buffer.ByteBuf;
@@ -49,12 +50,18 @@ public void channelRead(ChannelHandlerContext ctx, Object obj) throws Exception
4950
ByteBuf msg = ((ByteBuf) obj).copy();
5051
NPacket packet = NettyHandlerCommon.readPacketFromByteBuf(p, version, direction, msg, "decode");
5152
if(packet != null) {
52-
PacketPreReceiveEvent event = new PacketPreReceiveEvent(packet, p);
53-
EventManager.callEvent(event);
54-
if (event.isCancelled())
55-
return;
56-
super.channelRead(ctx, obj); // call before use
57-
getNegativityPlayer().getExecutor().submit(() -> EventManager.callEvent(new PacketReceiveEvent(packet, p)));
53+
Adapter.getAdapter().getScheduler().runEntity(p, () -> {
54+
PacketPreReceiveEvent event = new PacketPreReceiveEvent(packet, p);
55+
EventManager.callEvent(event);
56+
if (event.isCancelled())
57+
return;
58+
try {
59+
NettyDecoderHandler.super.channelRead(ctx, obj);
60+
} catch (Exception e) {
61+
e.printStackTrace();
62+
} // call before use
63+
EventManager.callEvent(new PacketReceiveEvent(packet, p));
64+
});
5865
} else
5966
super.channelRead(ctx, obj);
6067
msg.release();

common/src/com/elikill58/negativity/api/packets/nms/channels/netty/NettyEncoderHandler.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ public void write(ChannelHandlerContext ctx, Object obj, ChannelPromise promise)
4646
try {
4747
if(obj instanceof ByteBuf) { // firstly start running everything for us
4848
ByteBuf msg = ((ByteBuf) obj).copy();
49-
getNegativityPlayer().getExecutor().submit(() -> {
49+
Adapter.getAdapter().getScheduler().runEntity(p, () -> {
5050
try {
5151
NPacket packet = NettyHandlerCommon.readPacketFromByteBuf(p, version, direction, msg, "encode");
5252
if(packet != null)

common/src/com/elikill58/negativity/common/protocols/AirJump.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ public void onMove(PlayerMoveEvent e, NegativityPlayer np, AirJumpData data) {
4545
if (idDownDown.contains("STAIR") || idDown.contains("STAIR") || mDown.isSolid())
4646
return;
4747

48-
Scheduler.getInstance().runDelayed(() -> {
48+
Scheduler.getInstance().runEntityDelayed(p, () -> {
4949
double diffYtoFrom = diffYtoFromBasic - Math.abs(e.getTo().getDirection().getY());
5050
double velY = p.getVelocity().getY();
5151
if (diffYtoFrom - (velY > 0 ? velY : 0) > 0.35 && data.diffY < diffYtoFrom && data.diffY > velY
@@ -75,7 +75,7 @@ public void onMoveGoingDown(PlayerMoveEvent e, NegativityPlayer np, AirJumpData
7575
return;
7676
Vector oldVel = p.getVelocity();
7777
// TODO soon don't use scheduler
78-
Scheduler.getInstance().runDelayed(() -> {
78+
Scheduler.getInstance().runEntityDelayed(p, () -> {
7979
if (locDownDown.getBlock().getType().getId().contains("STAIR")
8080
|| locDown.getBlock().getType().getId().contains("STAIR"))
8181
return;

common/src/com/elikill58/negativity/common/protocols/Scaffold.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ public void onBlockBreak(BlockPlaceEvent e) {
5050
int ping = p.getPing(), slot = p.getInventory().getHeldItemSlot();
5151
if (ping > 120)
5252
return;
53-
Scheduler.getInstance().runDelayed(() -> {
53+
Scheduler.getInstance().runEntityDelayed(p, () -> {
5454
Material m = p.getItemInHand().getType(), placed = e.getBlock().getType();
5555
if(BYPASS_TYPES.contains(placed))
5656
return;

common/src/com/elikill58/negativity/universal/Scheduler.java

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,16 @@
55

66
import org.checkerframework.checker.nullness.qual.Nullable;
77

8+
import com.elikill58.negativity.api.entity.Entity;
9+
810
public interface Scheduler {
911

12+
void run(Runnable task);
13+
14+
default void runEntity(Entity entity, Runnable task) {
15+
run(task);
16+
}
17+
1018
void runRepeating(Consumer<ScheduledTask> task, int delayTicks, int intervalTicks);
1119

1220
/**
@@ -23,6 +31,14 @@ default ScheduledTask runRepeating(Runnable task, int intervalTicks) {
2331
return runRepeating(task, intervalTicks, null);
2432
}
2533

34+
/**
35+
* Run repeating task each given ticks
36+
*
37+
* @param task the task to run
38+
* @param intervalTicks ticks between each call
39+
* @param name name of task (may be ignored)
40+
* @return the running task
41+
*/
2642
ScheduledTask runRepeating(Runnable task, int intervalTicks, @Nullable String name);
2743

2844
/**
@@ -34,6 +50,31 @@ default ScheduledTask runRepeating(Runnable task, int intervalTicks) {
3450
*/
3551
ScheduledTask runDelayed(Runnable task, int delayTicks);
3652

53+
/**
54+
* Run repeating task each given ticks according to given entity
55+
*
56+
* @param entity The entity which this task is about
57+
* @param task the task to run
58+
* @param delayTicks delay before starting task
59+
* @param intervalTicks ticks between each task runned
60+
* @return the running task
61+
*/
62+
default ScheduledTask runEntityRepeating(Entity entity, Runnable task, int delayTicks, int intervalTicks) {
63+
return runRepeating(task, delayTicks, intervalTicks);
64+
}
65+
66+
/**
67+
* Run task after waiting given ticks according to given entity
68+
*
69+
* @param entity The entity which this task is about
70+
* @param task task to run
71+
* @param delayTicks ticks before running task
72+
* @return the running task
73+
*/
74+
default ScheduledTask runEntityDelayed(Entity entity, Runnable task, int delayTicks) {
75+
return runDelayed(task, delayTicks);
76+
}
77+
3778
ScheduledTask runRepeatingAsync(Runnable task, Duration delay, Duration interval, @Nullable String name);
3879

3980
static Scheduler getInstance() {

common/src/com/elikill58/negativity/universal/utils/ReflectionUtils.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,22 @@ public static Object callMethod(Object source, String method) {
5454
return null;
5555
}
5656
}
57+
58+
/**
59+
* Call static method. Return the method return.
60+
*
61+
* @param source the object where we want to run the method
62+
* @param method the name of the method to call
63+
* @return the return of the method called
64+
*/
65+
public static Object callStaticMethod(Class<?> source, String method) {
66+
try {
67+
return source.getDeclaredMethod(method).invoke(null);
68+
} catch (Exception e) {
69+
e.printStackTrace();
70+
return null;
71+
}
72+
}
5773

5874
/**
5975
* Get the first field which have the searching for class type
@@ -91,4 +107,13 @@ public static Class<?> getSubClassWithName(Class<?> clazz, String name){
91107
return cl;
92108
return null;
93109
}
110+
111+
public static boolean isClassExist(String clazz) {
112+
try {
113+
Class.forName(clazz);
114+
return true;
115+
} catch (Exception e) {
116+
return false;
117+
}
118+
}
94119
}

fabric/src/com/elikill58/negativity/fabric/FabricScheduler.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,11 @@ public FabricScheduler() {
3232
this.service = Executors.newScheduledThreadPool(1, threadFactory);
3333
}
3434

35+
@Override
36+
public void run(Runnable task) {
37+
task.run(); // not sure about this
38+
}
39+
3540
@Override
3641
public void runRepeating(Consumer<ScheduledTask> task, int delayTicks, int intervalTicks) {
3742
schedule(task, delayTicks, intervalTicks, null);

minestom/src/com/elikill58/negativity/minestom/MinestomScheduler.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,11 @@ public class MinestomScheduler implements Scheduler {
1818

1919
private final SchedulerManager sh = MinecraftServer.getSchedulerManager();
2020

21+
@Override
22+
public void run(Runnable task) {
23+
sh.scheduleNextTick(task);
24+
}
25+
2126
@Override
2227
public void runRepeating(Consumer<ScheduledTask> task, int delayTicks, int intervalTicks) {
2328
MinestomNegativity.getInstance().getLogger().error("MinestomScheduler#runRepeating isn't implemented yet.");

spigot/resources/plugin.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ version: ${version}
44
authors: [Elikill58, RedNesto]
55
description: It's an Advanced AntiCheat Detection, by Elikill58.
66
api-version: 1.13
7+
folia-supported: true
78
softdepend: [ProtocolLib, Essentials, WorldGuard, GadgetsMenu, MaxBans, AdvancedBan, LiteBans, ViaVersion, ProtocolSupport, floodgate, UltraPunishments, Geyser-Spigot]
89

910
commands:

spigot/src/com/elikill58/negativity/spigot/Metrics.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@
4848
import org.bukkit.plugin.Plugin;
4949
import org.bukkit.plugin.java.JavaPlugin;
5050

51+
import com.elikill58.negativity.universal.Adapter;
52+
5153
public class Metrics {
5254

5355
private final Plugin plugin;
@@ -93,7 +95,7 @@ public Metrics(JavaPlugin plugin, int serviceId) {
9395
boolean logSentData = config.getBoolean("logSentData", false);
9496
boolean logResponseStatusText = config.getBoolean("logResponseStatusText", false);
9597
metricsBase = new MetricsBase("bukkit", serverUUID, serviceId, enabled, this::appendPlatformData, this::appendServiceData,
96-
submitDataTask -> Bukkit.getScheduler().runTask(plugin, submitDataTask), plugin::isEnabled, (message, error) -> this.plugin.getLogger().log(Level.WARNING, message, error),
98+
submitDataTask -> Adapter.getAdapter().getScheduler().run(submitDataTask), plugin::isEnabled, (message, error) -> this.plugin.getLogger().log(Level.WARNING, message, error),
9799
(message) -> this.plugin.getLogger().log(Level.INFO, message), logErrors, logSentData, logResponseStatusText);
98100
}
99101

spigot/src/com/elikill58/negativity/spigot/SpigotAdapter.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@
3636
import com.elikill58.negativity.spigot.impl.location.SpigotWorld;
3737
import com.elikill58.negativity.spigot.impl.plugin.SpigotExternalPlugin;
3838
import com.elikill58.negativity.spigot.nms.SpigotVersionAdapter;
39+
import com.elikill58.negativity.spigot.scheduler.FoliaScheduler;
40+
import com.elikill58.negativity.spigot.scheduler.SpigotScheduler;
3941
import com.elikill58.negativity.spigot.utils.Utils;
4042
import com.elikill58.negativity.universal.Adapter;
4143
import com.elikill58.negativity.universal.Platform;
@@ -65,7 +67,7 @@ public SpigotAdapter(JavaPlugin pl) {
6567
pl.getDataFolder().toPath().resolve("lang"), "Negativity", "CheatHover");
6668
this.logger = new JavaLoggerAdapter(pl.getLogger());
6769
this.itemRegistrar = new SpigotItemRegistrar();
68-
this.scheduler = new SpigotScheduler(pl);
70+
this.scheduler = SubPlatform.getSubPlatform().equals(SubPlatform.FOLIA) ? new FoliaScheduler(pl) : new SpigotScheduler(pl);
6971
}
7072

7173
@Override
@@ -115,7 +117,7 @@ public NegativityAccountManager getAccountManager() {
115117

116118
@Override
117119
public void runConsoleCommand(String cmd) {
118-
Bukkit.getScheduler().callSyncMethod(pl, () -> Bukkit.dispatchCommand(Bukkit.getConsoleSender(), cmd));
120+
getScheduler().run(() -> Bukkit.dispatchCommand(Bukkit.getConsoleSender(), cmd));
119121
}
120122

121123
@Override
@@ -251,7 +253,7 @@ public List<ExternalPlugin> getDependentPlugins() {
251253

252254
@Override
253255
public void runSync(Runnable call) {
254-
Bukkit.getScheduler().runTask(pl, call);
256+
getScheduler().run(call);
255257
}
256258

257259
@Override

0 commit comments

Comments
 (0)