Skip to content

Commit b37521e

Browse files
author
BuildTools
committed
optimised code to utilize bukkitrunnables to prevent crashing and prevent multiple of the same timers being run at once
1 parent 2fa0cac commit b37521e

File tree

5 files changed

+49
-60
lines changed

5 files changed

+49
-60
lines changed

src/main/java/com/azortis/combatlog/CombatLog.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,9 @@ public void onEnable() {
2323
combatManager = new CombatManager(this);
2424

2525
if(WorldGuardHook.init()) {
26-
worldGuardManager = new WorldGuardManager(this);
26+
worldGuardManager = new WorldGuardManager(this, combatManager);
2727
}
2828

29-
30-
31-
3229
}
3330

3431
@Override

src/main/java/com/azortis/combatlog/listener/CombatListener.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,8 @@ public void onEntityDamageByEntity(EntityDamageByEntityEvent event) {
5151
break;
5252
}
5353
if (damager != null && damager != player) {
54-
manager.processAttack(player, damager);
54+
manager.combatTimer.put(player.getUniqueId(), 30);
55+
manager.combatTimer.put(damager.getUniqueId(), 30);
5556
}
5657
}
5758

src/main/java/com/azortis/combatlog/listener/WorldGuardListener.java

Lines changed: 25 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
package com.azortis.combatlog.listener;
22

3+
import com.azortis.combatlog.managers.CombatManager;
34
import com.azortis.combatlog.managers.WorldGuardManager;
45
import com.sk89q.worldedit.bukkit.BukkitAdapter;
56
import com.sk89q.worldedit.math.BlockVector2;
67
import com.sk89q.worldedit.math.BlockVector3;
7-
import com.sk89q.worldedit.world.World;
88
import com.sk89q.worldguard.WorldGuard;
99
import com.sk89q.worldguard.protection.flags.Flags;
1010
import com.sk89q.worldguard.protection.flags.StateFlag;
@@ -16,35 +16,45 @@
1616
import org.bukkit.Location;
1717
import org.bukkit.Material;
1818
import org.bukkit.entity.Player;
19-
import org.bukkit.event.EventHandler;
20-
import org.bukkit.event.EventPriority;
2119
import org.bukkit.event.Listener;
22-
import org.bukkit.event.player.PlayerMoveEvent;
2320

24-
import java.util.ArrayList;
25-
import java.util.HashMap;
26-
import java.util.List;
27-
import java.util.Map;
21+
import java.util.*;
2822

2923
public class WorldGuardListener implements Listener {
3024

3125
private WorldGuardManager worldGuardManager;
26+
private CombatManager combatManager;
3227
private List<Location> locations = new ArrayList<>();
3328
private Map<String, ProtectedRegion> regions = new HashMap<>();
3429
private List<ProtectedRegion> noPvpRegions = new ArrayList<>();
3530
private RegionContainer container;
36-
private RegionManager regionManager;
3731

38-
public WorldGuardListener(WorldGuardManager worldGuardManager) {
32+
public WorldGuardListener(WorldGuardManager worldGuardManager, CombatManager combatManager) {
3933
this.worldGuardManager = worldGuardManager;
34+
this.combatManager = combatManager;
4035
container = WorldGuard.getInstance().getPlatform().getRegionContainer();
36+
TimerTask task = new TimerTask() {
37+
@Override
38+
public void run() {
39+
worldGuardTimer();
40+
}
41+
};
42+
new Timer().schedule(task, 0, 2);
43+
}
44+
45+
public void worldGuardTimer(){
46+
combatManager.combatTimer.forEach((key,value) -> {
47+
//todo find a way to implement combatManager
48+
//key == UUID
49+
//value == combat time
50+
Player player = Bukkit.getPlayer(key);
51+
RegionManager regionManager = container.get(BukkitAdapter.adapt(player.getWorld()));
52+
if(regionManager != null) return;
53+
worldGuardProcessing(player, regionManager);
54+
});
4155
}
4256

43-
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
44-
public void onPlayerMovement(PlayerMoveEvent event) {
45-
Player player = event.getPlayer();
46-
regionManager = container.get(BukkitAdapter.adapt(player.getWorld()));
47-
if(regionManager == null) return;
57+
public void worldGuardProcessing(Player player, RegionManager regionManager) {
4858
regions = regionManager.getRegions();
4959
regions.forEach((key,value) -> {
5060
if(value.getFlag(Flags.PVP) == StateFlag.State.ALLOW) {

src/main/java/com/azortis/combatlog/managers/CombatManager.java

Lines changed: 13 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.azortis.combatlog.CombatLog;
44
import com.azortis.combatlog.listener.CombatListener;
5+
import com.azortis.combatlog.listener.WorldGuardListener;
56
import org.bukkit.Bukkit;
67
import org.bukkit.entity.Creeper;
78
import org.bukkit.entity.EntityType;
@@ -18,30 +19,23 @@ public class CombatManager {
1819

1920
public CombatManager(CombatLog plugin) {
2021
this.plugin = plugin;
21-
22-
23-
Bukkit.getServer().getPluginManager().registerEvents(new CombatListener(this), plugin);
24-
}
25-
26-
public void processAttack(Player damaged, Player damager) {
27-
combatTimer.put(damaged.getUniqueId(), 30);
28-
combatTimer.put(damager.getUniqueId(), 30);
2922
new BukkitRunnable() {
3023
@Override
3124
public void run() {
32-
if(combatTimer.get(damaged.getUniqueId()) == 0){
33-
combatTimer.remove(damaged.getUniqueId());
34-
} else if (combatTimer.get(damaged.getUniqueId()) > 0) {
35-
combatTimer.put(damaged.getUniqueId(), combatTimer.get(damaged.getUniqueId()) - 1);
36-
}
37-
if(combatTimer.get(damager.getUniqueId()) == 0){
38-
combatTimer.remove(damager.getUniqueId());
39-
} else if (combatTimer.get(damager.getUniqueId()) > 0) {
40-
combatTimer.put(damager.getUniqueId(), combatTimer.get(damager.getUniqueId()) - 1);
41-
}
42-
if(combatTimer.containsKey(damaged.getUniqueId()) && combatTimer.containsKey(damager.getUniqueId())) cancel();
25+
processAttack();
4326
}
4427
}.runTaskTimer(plugin, 20, 20);
28+
Bukkit.getServer().getPluginManager().registerEvents(new CombatListener(this), plugin);
29+
}
30+
31+
public void processAttack() {
32+
combatTimer.forEach((key, value) -> {
33+
if(value == 0){
34+
combatTimer.remove(key);
35+
} else if (value > 0) {
36+
combatTimer.put(key, value-1);
37+
}
38+
});
4539
}
4640

4741
public void trackingCreeper(Player player) {
@@ -50,7 +44,4 @@ public void trackingCreeper(Player player) {
5044
creeperSpawner.get(player.getUniqueId()).add(creeper);
5145
}
5246

53-
public void spawnVillager(Player player){
54-
55-
}
5647
}
Lines changed: 8 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,19 @@
11
package com.azortis.combatlog.managers;
22

33
import com.azortis.combatlog.CombatLog;
4-
import com.azortis.combatlog.hook.WorldGuardHook;
54
import com.azortis.combatlog.listener.WorldGuardListener;
65
import org.bukkit.Bukkit;
7-
import org.bukkit.Location;
8-
import org.bukkit.Material;
9-
import org.bukkit.entity.Player;
10-
11-
import java.util.List;
126

137
public class WorldGuardManager {
148

15-
private final CombatLog plugin;
16-
private static WorldGuardHook instance;
9+
public final CombatLog plugin;
10+
public CombatManager combatManager;
1711

18-
public WorldGuardManager(CombatLog plugin) {
19-
this.plugin = plugin;
20-
instance = WorldGuardHook.getInstance();
21-
Bukkit.getServer().getPluginManager().registerEvents(new WorldGuardListener(this), plugin);
12+
public WorldGuardManager(CombatLog combatLog, CombatManager combatManager) {
13+
this.plugin = combatLog;
14+
this.combatManager = combatManager;
15+
this.
16+
Bukkit.getServer().getPluginManager().registerEvents(new WorldGuardListener(this, combatManager), plugin);
2217
}
2318

24-
public void fakeBlockSpawn(List<Location> locations, Player player) {
25-
for(Location location: locations) {
26-
player.sendBlockChange(location, Material.RED_STAINED_GLASS.createBlockData());
27-
}
28-
}
29-
}
19+
}

0 commit comments

Comments
 (0)