Skip to content

Commit 302a556

Browse files
Add inventory-clear flag and replace extra flags
1 parent f08c2fb commit 302a556

File tree

9 files changed

+205
-27
lines changed

9 files changed

+205
-27
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
<groupId>parallelmc</groupId>
88
<artifactId>parallelutils</artifactId>
99

10-
<version>1.11.0</version>
10+
<version>1.12.0</version>
1111
<packaging>jar</packaging>
1212

1313
<name>Parallelutils</name>

src/main/java/parallelmc/parallelutils/Constants.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
public class Constants {
44

5-
public static final Version VERSION = new Version(1, 11, 0);
5+
public static final Version VERSION = new Version(1, 12, 0);
66
public static final String PLUGIN_NAME = "ParallelUtils";
77
public static final String DEFAULT_WORLD = "world";
88
}

src/main/java/parallelmc/parallelutils/modules/parallelflags/CustomFlagRegistry.java

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,7 @@
11
package parallelmc.parallelutils.modules.parallelflags;
22

33
import com.sk89q.worldguard.WorldGuard;
4-
import com.sk89q.worldguard.protection.flags.DoubleFlag;
5-
import com.sk89q.worldguard.protection.flags.IntegerFlag;
6-
import com.sk89q.worldguard.protection.flags.StateFlag;
7-
import com.sk89q.worldguard.protection.flags.StringFlag;
4+
import com.sk89q.worldguard.protection.flags.*;
85
import com.sk89q.worldguard.protection.flags.registry.FlagConflictException;
96
import com.sk89q.worldguard.protection.flags.registry.FlagRegistry;
107

@@ -19,12 +16,14 @@ public class CustomFlagRegistry {
1916
private final HashMap<String, IntegerFlag> integerFlags;
2017
private final HashMap<String, DoubleFlag> doubleFlags;
2118
private final HashMap<String, StringFlag> stringFlags;
19+
private final HashMap<String, LocationFlag> locationFlags;
2220

2321
private CustomFlagRegistry() {
2422
stateFlags = new HashMap<>();
2523
integerFlags = new HashMap<>();
2624
doubleFlags = new HashMap<>();
2725
stringFlags = new HashMap<>();
26+
locationFlags = new HashMap<>();
2827
}
2928

3029
public static CustomFlagRegistry getInstance() {
@@ -99,4 +98,19 @@ public boolean addStringFlag(String name) {
9998

10099
@Nullable
101100
public StringFlag getStringFlag(String name) {return stringFlags.get(name);}
101+
102+
public boolean addLocationFlag(String name) {
103+
FlagRegistry registry = WorldGuard.getInstance().getFlagRegistry();
104+
try {
105+
LocationFlag flag = new LocationFlag(name);
106+
registry.register(flag);
107+
locationFlags.put(name, flag);
108+
return true;
109+
} catch (FlagConflictException e) {
110+
return false;
111+
}
112+
}
113+
114+
@Nullable
115+
public LocationFlag getLocationFlag(String name) { return locationFlags.get(name); }
102116
}

src/main/java/parallelmc/parallelutils/modules/parallelflags/ParallelFlags.java

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,7 @@
88
import parallelmc.parallelutils.Constants;
99
import parallelmc.parallelutils.ParallelModule;
1010
import parallelmc.parallelutils.Parallelutils;
11-
import parallelmc.parallelutils.modules.parallelflags.events.ParallelFlagsDeathListener;
12-
import parallelmc.parallelutils.modules.parallelflags.events.ParallelFlagsInteractListener;
13-
import parallelmc.parallelutils.modules.parallelflags.events.ParallelFlagsPlaceListener;
11+
import parallelmc.parallelutils.modules.parallelflags.events.*;
1412
import parallelmc.parallelutils.modules.parallelflags.session.*;
1513

1614
import java.util.logging.Level;
@@ -128,6 +126,24 @@ public void onLoad() {
128126
Parallelutils.log(Level.WARNING, "Unable to create empty-inventory flag. Will not use");
129127
}
130128

129+
130+
if (!registry.addStateflag("keep-exp", false)) {
131+
Parallelutils.log(Level.WARNING, "Unable to create keep-exp flag. Will not use");
132+
}
133+
134+
if (!registry.addStateflag("keep-inventory", false)) {
135+
Parallelutils.log(Level.WARNING, "Unable to create keep-inventory flag. Will not use");
136+
}
137+
138+
if (!registry.addLocationFlag("respawn-location")) {
139+
Parallelutils.log(Level.WARNING, "Unable to create respawn-location flag. Will not use");
140+
}
141+
142+
if (!registry.addStateflag("prevent-item-damage", false)) {
143+
Parallelutils.log(Level.WARNING, "Unable to create prevent-item-damage flag. Will not use");
144+
}
145+
146+
131147
} catch (NoClassDefFoundError e) {
132148
Parallelutils.log(Level.SEVERE, "Unable to load WorldGuard! Something is wrong!");
133149
}
@@ -161,7 +177,9 @@ public void onEnable() {
161177

162178
manager.registerEvents(new ParallelFlagsInteractListener(), plugin);
163179
manager.registerEvents(new ParallelFlagsPlaceListener(), plugin);
180+
manager.registerEvents(new ParallelFlagsDeathMsgListener(), plugin);
164181
manager.registerEvents(new ParallelFlagsDeathListener(), plugin);
182+
manager.registerEvents(new ParallelFlagsItemDamageListener(), plugin);
165183
}
166184

167185
@Override
Lines changed: 69 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,95 @@
11
package parallelmc.parallelutils.modules.parallelflags.events;
22

3-
import net.kyori.adventure.text.Component;
3+
import com.sk89q.worldedit.bukkit.BukkitAdapter;
4+
import com.sk89q.worldedit.util.Location;
5+
import com.sk89q.worldguard.LocalPlayer;
6+
import com.sk89q.worldguard.WorldGuard;
7+
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
8+
import com.sk89q.worldguard.protection.ApplicableRegionSet;
9+
import com.sk89q.worldguard.protection.flags.LocationFlag;
10+
import com.sk89q.worldguard.protection.flags.StateFlag;
11+
import com.sk89q.worldguard.protection.regions.RegionContainer;
12+
import com.sk89q.worldguard.protection.regions.RegionQuery;
413
import org.bukkit.entity.Player;
514
import org.bukkit.event.EventHandler;
615
import org.bukkit.event.EventPriority;
716
import org.bukkit.event.Listener;
8-
import org.bukkit.event.entity.EntityDamageEvent;
917
import org.bukkit.event.entity.PlayerDeathEvent;
18+
import org.bukkit.event.player.PlayerRespawnEvent;
1019
import parallelmc.parallelutils.Parallelutils;
20+
import parallelmc.parallelutils.modules.parallelflags.CustomFlagRegistry;
1121

12-
import java.util.HashMap;
1322
import java.util.logging.Level;
1423

1524
public class ParallelFlagsDeathListener implements Listener {
1625

17-
private static final HashMap<String, String> playerDeathMessages = new HashMap<>();
26+
private RegionContainer container;
1827

1928
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
2029
public void onPlayerDeath(PlayerDeathEvent event) {
2130
Player player = event.getEntity();
22-
EntityDamageEvent lastDamage = player.getLastDamageCause();
2331

24-
Parallelutils.log(Level.INFO, "Died");
32+
if (container == null) {
33+
container = WorldGuard.getInstance().getPlatform().getRegionContainer();
34+
}
35+
36+
RegionQuery query = container.createQuery();
37+
ApplicableRegionSet set = query.getApplicableRegions(BukkitAdapter.adapt(event.getPlayer().getLocation()));
38+
39+
if (set.isVirtual()) return;
40+
41+
LocalPlayer localPlayer = WorldGuardPlugin.inst().wrapPlayer(event.getPlayer());
42+
43+
CustomFlagRegistry registry = CustomFlagRegistry.getInstance();
2544

26-
if (lastDamage != null && lastDamage.getCause() == EntityDamageEvent.DamageCause.CUSTOM) {
27-
Parallelutils.log(Level.INFO, "Custom Damage");
28-
String message = playerDeathMessages.get(player.getName());
29-
if (message == null) return;
45+
StateFlag keepExp = registry.getStateFlag("keep-exp");
46+
StateFlag keepInventory = registry.getStateFlag("keep-inventory");
3047

31-
playerDeathMessages.remove(player.getName());
48+
if (keepExp != null) {
49+
StateFlag.State state = set.queryState(localPlayer, keepExp);
3250

33-
event.deathMessage(Component.text(message));
51+
if (state == StateFlag.State.ALLOW) {
52+
event.setKeepLevel(true);
53+
event.setShouldDropExperience(false);
54+
}
55+
}
56+
57+
if (keepInventory != null) {
58+
StateFlag.State state = set.queryState(localPlayer, keepInventory);
59+
60+
if (state == StateFlag.State.ALLOW) {
61+
event.setKeepInventory(true);
62+
event.getDrops().clear();
63+
}
3464
}
3565
}
3666

37-
public static void setPlayerDeathMessage(String playerName, String message) {
38-
playerDeathMessages.put(playerName, message);
67+
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
68+
public void onPlayerRespawnEvent(PlayerRespawnEvent event)
69+
{
70+
Player player = event.getPlayer();
71+
72+
if (container == null) {
73+
container = WorldGuard.getInstance().getPlatform().getRegionContainer();
74+
}
75+
76+
RegionQuery query = container.createQuery();
77+
ApplicableRegionSet set = query.getApplicableRegions(BukkitAdapter.adapt(event.getPlayer().getLocation()));
78+
79+
if (set.isVirtual()) return;
80+
81+
LocalPlayer localPlayer = WorldGuardPlugin.inst().wrapPlayer(event.getPlayer());
82+
83+
CustomFlagRegistry registry = CustomFlagRegistry.getInstance();
84+
85+
LocationFlag respawnLocation = registry.getLocationFlag("respawn-location");
86+
87+
if (respawnLocation != null) {
88+
Location location = set.queryValue(localPlayer, respawnLocation);
89+
90+
if (location != null) {
91+
event.setRespawnLocation(new org.bukkit.Location(player.getWorld(), location.getX(), location.getY(), location.getZ()));
92+
}
93+
}
3994
}
4095
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package parallelmc.parallelutils.modules.parallelflags.events;
2+
3+
import net.kyori.adventure.text.Component;
4+
import org.bukkit.entity.Player;
5+
import org.bukkit.event.EventHandler;
6+
import org.bukkit.event.EventPriority;
7+
import org.bukkit.event.Listener;
8+
import org.bukkit.event.entity.EntityDamageEvent;
9+
import org.bukkit.event.entity.PlayerDeathEvent;
10+
import parallelmc.parallelutils.Parallelutils;
11+
12+
import java.util.HashMap;
13+
import java.util.logging.Level;
14+
15+
public class ParallelFlagsDeathMsgListener implements Listener {
16+
17+
private static final HashMap<String, String> playerDeathMessages = new HashMap<>();
18+
19+
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
20+
public void onPlayerDeath(PlayerDeathEvent event) {
21+
Player player = event.getEntity();
22+
EntityDamageEvent lastDamage = player.getLastDamageCause();
23+
24+
if (lastDamage != null && lastDamage.getCause() == EntityDamageEvent.DamageCause.CUSTOM) {
25+
Parallelutils.log(Level.INFO, "Custom Damage");
26+
String message = playerDeathMessages.get(player.getName());
27+
if (message == null) return;
28+
29+
playerDeathMessages.remove(player.getName());
30+
31+
event.deathMessage(Component.text(message));
32+
}
33+
34+
}
35+
36+
public static void setPlayerDeathMessage(String playerName, String message) {
37+
playerDeathMessages.put(playerName, message);
38+
}
39+
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package parallelmc.parallelutils.modules.parallelflags.events;
2+
3+
import com.sk89q.worldedit.bukkit.BukkitAdapter;
4+
import com.sk89q.worldguard.LocalPlayer;
5+
import com.sk89q.worldguard.WorldGuard;
6+
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
7+
import com.sk89q.worldguard.protection.ApplicableRegionSet;
8+
import com.sk89q.worldguard.protection.flags.StateFlag;
9+
import com.sk89q.worldguard.protection.regions.RegionContainer;
10+
import com.sk89q.worldguard.protection.regions.RegionQuery;
11+
import org.bukkit.event.EventHandler;
12+
import org.bukkit.event.EventPriority;
13+
import org.bukkit.event.Listener;
14+
import org.bukkit.event.player.PlayerItemDamageEvent;
15+
import parallelmc.parallelutils.modules.parallelflags.CustomFlagRegistry;
16+
17+
public class ParallelFlagsItemDamageListener implements Listener {
18+
19+
private RegionContainer container;
20+
21+
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
22+
public void onItemDamage(PlayerItemDamageEvent event) {
23+
if (container == null) {
24+
container = WorldGuard.getInstance().getPlatform().getRegionContainer();
25+
}
26+
27+
RegionQuery query = container.createQuery();
28+
ApplicableRegionSet set = query.getApplicableRegions(BukkitAdapter.adapt(event.getPlayer().getLocation()));
29+
30+
if (set.isVirtual()) return;
31+
32+
LocalPlayer localPlayer = WorldGuardPlugin.inst().wrapPlayer(event.getPlayer());
33+
34+
CustomFlagRegistry registry = CustomFlagRegistry.getInstance();
35+
36+
StateFlag itemDamage = registry.getStateFlag("prevent-item-damage");
37+
38+
if (itemDamage != null) {
39+
StateFlag.State state = set.queryState(localPlayer, itemDamage);
40+
41+
if (state == StateFlag.State.ALLOW) {
42+
event.setCancelled(true);
43+
}
44+
}
45+
}
46+
47+
}

src/main/java/parallelmc/parallelutils/modules/parallelflags/session/CustomArmorHealth.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
import parallelmc.parallelutils.Constants;
1919
import parallelmc.parallelutils.Parallelutils;
2020
import parallelmc.parallelutils.modules.parallelflags.CustomFlagRegistry;
21-
import parallelmc.parallelutils.modules.parallelflags.events.ParallelFlagsDeathListener;
21+
import parallelmc.parallelutils.modules.parallelflags.events.ParallelFlagsDeathMsgListener;
2222

2323
import java.util.logging.Level;
2424

@@ -144,7 +144,7 @@ public void tick(LocalPlayer player, ApplicableRegionSet set) {
144144
String deathMessage = set.queryValue(player, customFlagRegistry.getStringFlag("custom-armor-damage-death"));
145145

146146
if (deathMessage != null) {
147-
ParallelFlagsDeathListener.setPlayerDeathMessage(bukkitPlayer.getName(),
147+
ParallelFlagsDeathMsgListener.setPlayerDeathMessage(bukkitPlayer.getName(),
148148
bukkitPlayer.getName() + " " + deathMessage);
149149
}
150150

@@ -166,7 +166,7 @@ public void tick(LocalPlayer player, ApplicableRegionSet set) {
166166
String deathMessage = set.queryValue(player, customFlagRegistry.getStringFlag("custom-armor-damage-death"));
167167

168168
if (deathMessage != null) {
169-
ParallelFlagsDeathListener.setPlayerDeathMessage(bukkitPlayer.getName(),
169+
ParallelFlagsDeathMsgListener.setPlayerDeathMessage(bukkitPlayer.getName(),
170170
bukkitPlayer.getName() + " " + deathMessage);
171171
}
172172

src/main/java/parallelmc/parallelutils/modules/parallelflags/session/InventoryClearHandler.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,12 @@ public boolean onCrossBoundary(LocalPlayer player, Location from, Location to, A
6363
if (state == StateFlag.State.DENY) {
6464
PlayerInventory inventory = bukkitPlayer.getPlayer().getInventory();
6565

66-
return inventory.isEmpty();
66+
if (inventory.isEmpty()) {
67+
bukkitPlayer.getPlayer().sendMessage("Empty your inventory before entering!");
68+
return false;
69+
}
70+
71+
return true;
6772
} else {
6873
return true;
6974
}

0 commit comments

Comments
 (0)