Skip to content

Commit 32facfa

Browse files
Merge pull request #550 from VolmitSoftware/Development
1.16.9
2 parents 7de5659 + 4e78f65 commit 32facfa

File tree

7 files changed

+93
-58
lines changed

7 files changed

+93
-58
lines changed

src/main/java/com/volmit/adapt/Adapt.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,9 @@ public static <T> T service(Class<T> c) {
102102
@Override
103103
public void onLoad() {
104104
manager = new AdvancementManager();
105+
if (getServer().getPluginManager().getPlugin("WorldGuard") != null) {
106+
WorldGuardProtector.registerFlag();
107+
}
105108
}
106109

107110
@Override
@@ -241,9 +244,11 @@ public static KList<Object> initialize(String s, Class<? extends Annotation> sli
241244
for (Class<?> i : js.getClasses()) {
242245
if (slicedClass == null || i.isAnnotationPresent(slicedClass)) {
243246
try {
247+
Adapt.verbose("Found class: " + i.getName());
244248
v.add(i.getDeclaredConstructor().newInstance());
245-
} catch (Throwable ignored) {
246-
249+
} catch (Throwable e) {
250+
Adapt.verbose("Failed to load class: " + i.getName());
251+
e.printAsStrings().forEach(Adapt::verbose);
247252
}
248253
}
249254
}

src/main/java/com/volmit/adapt/command/CommandAdapt.java

Lines changed: 33 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
import com.volmit.adapt.api.adaptation.Adaptation;
55
import com.volmit.adapt.api.skill.Skill;
66
import com.volmit.adapt.api.skill.SkillRegistry;
7-
import com.volmit.adapt.api.world.AdaptPlayer;
87
import com.volmit.adapt.api.world.AdaptServer;
8+
import com.volmit.adapt.api.world.PlayerData;
99
import com.volmit.adapt.content.gui.SkillsGui;
1010
import com.volmit.adapt.content.item.ExperienceOrb;
1111
import com.volmit.adapt.content.item.KnowledgeOrb;
@@ -24,28 +24,50 @@
2424
public class CommandAdapt implements DecreeExecutor {
2525
private CommandDebug debug;
2626

27-
@Decree(description = "Boost Target player, or Global Experience gain.")
27+
@Decree(description = "Boost Target player Experience gain.")
2828
public void boost(
2929
@Param(aliases = "seconds", description = "Amount of seconds", defaultValue = "10")
3030
int seconds,
3131
@Param(aliases = "multiplier", description = "Strength of the boost ", defaultValue = "10")
32-
int multiplier,
32+
double multiplier,
3333
@Param(description = "player", defaultValue = "---", customHandler = NullablePlayerHandler.class)
3434
Player player
35-
3635
) {
3736
if (!sender().hasPermission("adapt.boost")) {
3837
FConst.error("You lack the Permission 'adapt.boost'").send(sender());
3938
return;
4039
}
4140

41+
Player targetPlayer = player;
42+
if (targetPlayer == null && sender().isConsole()) {
43+
FConst.error("You must specify a player when using this command from console.").send(sender());
44+
return;
45+
} else if (targetPlayer == null) {
46+
targetPlayer = player();
47+
}
48+
4249
AdaptServer adaptServer = Adapt.instance.getAdaptServer();
43-
if (player() == null) {
44-
adaptServer.boostXP(multiplier, seconds * 1000);
45-
} else {
46-
AdaptPlayer adaptPlayer = adaptServer.getPlayer(player);
47-
adaptPlayer.boostXPToRecents(multiplier, seconds * 1000);
50+
PlayerData playerData = adaptServer.getPlayer(targetPlayer).getData();
51+
playerData.globalXPMultiplier(multiplier, seconds * 1000);
52+
53+
FConst.success("Boosted XP by " + multiplier + " for " + seconds + " seconds").send(sender());
54+
}
55+
56+
@Decree(description = "Boost Global Experience gain.", name = "global-boost")
57+
public void globalBoost(
58+
@Param(aliases = "seconds", description = "Amount of seconds", defaultValue = "10")
59+
int seconds,
60+
@Param(aliases = "multiplier", description = "Strength of the boost ", defaultValue = "10")
61+
double multiplier
62+
) {
63+
if (!sender().hasPermission("adapt.boost.global")) {
64+
FConst.error("You lack the Permission 'adapt.boost.global'").send(sender());
65+
return;
4866
}
67+
68+
AdaptServer adaptServer = Adapt.instance.getAdaptServer();
69+
adaptServer.boostXP(multiplier, seconds * 1000);
70+
4971
FConst.success("Boosted XP by " + multiplier + " for " + seconds + " seconds").send(sender());
5072
}
5173

@@ -66,6 +88,7 @@ public void gui(
6688
Player targetPlayer = player;
6789
if (targetPlayer == null && sender().isConsole()) {
6890
FConst.error("You must specify a player when using this command from console.").send(sender());
91+
return;
6992
} else if (targetPlayer == null) {
7093
targetPlayer = player();
7194
}
@@ -220,7 +243,7 @@ public void determine(
220243
}
221244

222245
Player targetPlayer = player;
223-
if (targetPlayer == null && sender().isPlayer()) {
246+
if (targetPlayer == null && sender().isConsole()) {
224247
FConst.error("You must specify a player when using this command from console.").send(sender());
225248
} else if (targetPlayer == null) {
226249
targetPlayer = player();

src/main/java/com/volmit/adapt/content/adaptation/architect/ArchitectElevator.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ public void on(PlayerMoveEvent e) {
124124

125125
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
126126
public void on(PlayerToggleSneakEvent event) {
127-
if (!event.isSneaking()) return;
127+
if (!event.isSneaking() || event.getPlayer().isInsideVehicle()) return;
128128
Player player = event.getPlayer();
129129
Block block = findElevator(player);
130130
if (block == null) return;
@@ -292,7 +292,7 @@ private boolean checkElevator(Block block, NamespacedKey key, int source) {
292292
}
293293

294294
private void handleElevatorMovement(Block block, Player player, boolean down) {
295-
if (!isElevator(block))
295+
if (!isElevator(block) || player.isInsideVehicle())
296296
return;
297297

298298
CustomBlockData data = new CustomBlockData(block, Adapt.instance);

src/main/java/com/volmit/adapt/content/protector/WorldGuardProtector.java

Lines changed: 34 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,13 @@
2222
import com.sk89q.worldguard.LocalPlayer;
2323
import com.sk89q.worldguard.WorldGuard;
2424
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
25-
import com.sk89q.worldguard.protection.association.DelayedRegionOverlapAssociation;
2625
import com.sk89q.worldguard.protection.flags.Flag;
2726
import com.sk89q.worldguard.protection.flags.Flags;
2827
import com.sk89q.worldguard.protection.flags.StateFlag;
2928
import com.sk89q.worldguard.protection.flags.registry.FlagRegistry;
3029
import com.sk89q.worldguard.protection.regions.RegionContainer;
3130
import com.sk89q.worldguard.protection.regions.RegionQuery;
31+
import com.volmit.adapt.Adapt;
3232
import com.volmit.adapt.AdaptConfig;
3333
import com.volmit.adapt.api.adaptation.Adaptation;
3434
import com.volmit.adapt.api.protection.Protector;
@@ -41,25 +41,7 @@
4141
public class WorldGuardProtector implements Protector {
4242

4343
private final RegionContainer container = WorldGuard.getInstance().getPlatform().getRegionContainer();
44-
private final StateFlag flag;
45-
46-
public WorldGuardProtector() {
47-
this.flag = new StateFlag("use-adaptations", false);
48-
FlagRegistry registry = WorldGuard.getInstance().getFlagRegistry();
49-
50-
try {
51-
// Access the flags field of the registry
52-
Field field = registry.getClass().getDeclaredField("flags");
53-
// This line makes the private field accessible
54-
field.setAccessible(true);
55-
// Get the flags from the registry
56-
ConcurrentMap<String, Flag<?>> flags = (ConcurrentMap<String, Flag<?>>) field.get(registry);
57-
// Add it to the registry
58-
flags.put(flag.getName().toLowerCase(), flag);
59-
} catch (NoSuchFieldException | IllegalAccessException e) {
60-
e.printStackTrace();
61-
}
62-
}
44+
private final StateFlag flag = registerFlag();
6345

6446

6547
@Override
@@ -69,44 +51,37 @@ public boolean checkRegion(Player player, Location location, Adaptation<?> adapt
6951

7052
@Override
7153
public boolean canBlockBreak(Player player, Location blockLocation, Adaptation<?> adaptation) {
72-
return checkRegion(player, blockLocation, adaptation) && checkPerm(blockLocation, Flags.BLOCK_BREAK);
54+
return checkRegion(player, blockLocation, adaptation) && checkPerm(player, blockLocation, Flags.BLOCK_BREAK);
7355
}
7456

7557
@Override
7658
public boolean canBlockPlace(Player player, Location blockLocation, Adaptation<?> adaptation) {
77-
return checkRegion(player, blockLocation, adaptation) && checkPerm(blockLocation, Flags.BLOCK_PLACE);
59+
return checkRegion(player, blockLocation, adaptation) && checkPerm(player, blockLocation, Flags.BLOCK_PLACE);
7860
}
7961

8062
@Override
8163
public boolean canPVP(Player player, Location entityLocation, Adaptation<?> adaptation) {
82-
return checkRegion(player, entityLocation, adaptation) && checkPerm(entityLocation, Flags.PVP);
64+
return checkRegion(player, entityLocation, adaptation) && checkPerm(player, entityLocation, Flags.PVP);
8365
}
8466

8567
@Override
8668
public boolean canPVE(Player player, Location entityLocation, Adaptation<?> adaptation) {
87-
return checkRegion(player, entityLocation, adaptation) && checkPerm(entityLocation, Flags.DAMAGE_ANIMALS);
69+
return checkRegion(player, entityLocation, adaptation) && checkPerm(player, entityLocation, Flags.DAMAGE_ANIMALS);
8870
}
8971

9072
@Override
9173
public boolean canInteract(Player player, Location targetLocation, Adaptation<?> adaptation) {
92-
return checkRegion(player, targetLocation, adaptation) && checkPerm(targetLocation, Flags.INTERACT);
74+
return checkRegion(player, targetLocation, adaptation) && checkPerm(player, targetLocation, Flags.INTERACT);
9375
}
9476

9577
@Override
9678
public boolean canAccessChest(Player player, Location chestLocation, Adaptation<?> adaptation) {
97-
return checkRegion(player, chestLocation, adaptation) && checkPerm(chestLocation, Flags.CHEST_ACCESS);
98-
}
99-
100-
private boolean checkPerm(Location location, StateFlag flag) {
101-
return checkPerm(null, location, flag);
79+
return checkRegion(player, chestLocation, adaptation) && checkPerm(player, chestLocation, Flags.CHEST_ACCESS);
10280
}
10381

10482
private boolean checkPerm(Player player, Location location, StateFlag flag) {
10583
RegionQuery regionQuery = container.createQuery();
10684
com.sk89q.worldedit.util.Location loc = BukkitAdapter.adapt(location);
107-
if (player == null) {
108-
return regionQuery.queryState(loc, new DelayedRegionOverlapAssociation(regionQuery, loc), flag) != StateFlag.State.DENY;
109-
}
11085
if (!hasBypass(player, location))
11186
return regionQuery.queryState(loc, WorldGuardPlugin.inst().wrapPlayer(player), flag) != StateFlag.State.DENY;
11287
return true;
@@ -127,4 +102,30 @@ private boolean hasBypass(Player p, Location l) {
127102
com.sk89q.worldedit.world.World world = BukkitAdapter.adapt(l.getWorld());
128103
return WorldGuard.getInstance().getPlatform().getSessionManager().hasBypass(localPlayer, world);
129104
}
105+
106+
public static StateFlag registerFlag() {
107+
FlagRegistry registry = WorldGuard.getInstance().getFlagRegistry();
108+
StateFlag flag = (StateFlag) registry.get("use-adaptations");
109+
if (flag != null) return flag;
110+
flag = new StateFlag("use-adaptations", false);
111+
112+
try {
113+
registry.register(flag);
114+
} catch (IllegalStateException ignored) {
115+
Adapt.warn("WorldGuard flag was not registered! Injecting it now...");
116+
try {
117+
// Access the flags field of the registry
118+
Field field = registry.getClass().getDeclaredField("flags");
119+
// This line makes the private field accessible
120+
field.setAccessible(true);
121+
// Get the flags from the registry
122+
ConcurrentMap<String, Flag<?>> flags = (ConcurrentMap<String, Flag<?>>) field.get(registry);
123+
// Add it to the registry
124+
flags.put(flag.getName().toLowerCase(), flag);
125+
} catch (NoSuchFieldException | IllegalAccessException e) {
126+
e.printStackTrace();
127+
}
128+
}
129+
return flag;
130+
}
130131
}

src/main/java/com/volmit/adapt/service/CommandSVC.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import com.volmit.adapt.util.collection.KMap;
2727
import com.volmit.adapt.util.decree.DecreeSystem;
2828
import com.volmit.adapt.util.decree.virtual.VirtualDecreeCommand;
29+
import org.bukkit.command.PluginCommand;
2930
import org.bukkit.event.EventHandler;
3031
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
3132
import org.bukkit.event.server.ServerCommandEvent;
@@ -40,7 +41,13 @@ public class CommandSVC implements AdaptService, DecreeSystem {
4041

4142
@Override
4243
public void onEnable() {
43-
Adapt.instance.getCommand("adapt").setExecutor(this);
44+
Adapt.verbose("Initializing Commands...");
45+
PluginCommand command = Adapt.instance.getCommand("adapt");
46+
if (command == null) {
47+
Adapt.warn("Failed to find command 'adapt'");
48+
return;
49+
}
50+
command.setExecutor(this);
4451
J.a(() -> getRoot().cacheAll());
4552
}
4653

src/main/java/com/volmit/adapt/util/decree/DecreeSystem.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,7 @@ default boolean call(VolmitSender sender, String[] args) {
138138
@Nullable
139139
@Override
140140
default List<String> onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String alias, @NotNull String[] args) {
141+
Adapt.verbose("Received Tab Complete from %s for %s".formatted(sender.getName(), "/" + alias + String.join(" ", args)));
141142
List<String> enhanced = new ArrayList<>(List.of(args));
142143
KList<String> v = getRoot().tabComplete(enhanced, enhanced.toString(" "));
143144
v.removeDuplicates();
@@ -152,6 +153,7 @@ default List<String> onTabComplete(@NotNull CommandSender sender, @NotNull Comma
152153

153154
@Override
154155
default boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
156+
Adapt.verbose("Received Command from %s: /%s".formatted(sender.getName(), label + String.join(" ", args)));
155157
if (!sender.hasPermission("adapt.main")) {
156158
sender.sendMessage("You lack the Permission 'adapt.main'");
157159
return true;

src/main/java/com/volmit/adapt/util/decree/virtual/VirtualDecreeCommand.java

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,7 @@
4040
import java.lang.reflect.Field;
4141
import java.lang.reflect.Method;
4242
import java.lang.reflect.Modifier;
43-
import java.util.ArrayList;
44-
import java.util.HashMap;
45-
import java.util.List;
46-
import java.util.Objects;
43+
import java.util.*;
4744
import java.util.stream.Collectors;
4845

4946
@Data
@@ -281,8 +278,8 @@ private void tab(List<String> args, List<String> tabs) {
281278
* @param in The input
282279
* @return A map of all the parameter names and their values
283280
*/
284-
private KMap<String, Object> map(VolmitSender sender, List<String> in) {
285-
KMap<String, Object> data = new KMap<>();
281+
private KMap<String, Optional<Object>> map(VolmitSender sender, List<String> in) {
282+
KMap<String, Optional<Object>> data = new KMap<>();
286283
List<Integer> nowhich = new ArrayList<>();
287284

288285
List<String> unknownInputs = new ArrayList<>(in.stream().filter(s -> !s.contains("=")).collect(Collectors.toList()));
@@ -331,7 +328,7 @@ private KMap<String, Object> map(VolmitSender sender, List<String> in) {
331328
key = param.getName();
332329

333330
try {
334-
data.put(key, param.getHandler().parse(value, nowhich.contains(original))); //Parse and put
331+
data.put(key, Optional.ofNullable(param.getHandler().parse(value, nowhich.contains(original)))); //Parse and put
335332
} catch (DecreeParsingException e) {
336333
Adapt.debug("Can't parse parameter value for " + key + "=" + value + " in " + getPath() + " using handler " + param.getHandler().getClass().getSimpleName());
337334
sender.sendMessage(C.RED + "Cannot convert \"" + value + "\" into a " + param.getType().getSimpleName());
@@ -351,7 +348,7 @@ private KMap<String, Object> map(VolmitSender sender, List<String> in) {
351348
DecreeParameter par = decreeParameters.get(x);
352349

353350
try {
354-
data.put(par.getName(), par.getHandler().parse(stringParam, nowhich.contains(original)));
351+
data.put(par.getName(), Optional.ofNullable(par.getHandler().parse(stringParam, nowhich.contains(original))));
355352
} catch (DecreeParsingException e) {
356353
Adapt.debug("Can't parse parameter value for " + par.getName() + "=" + stringParam + " in " + getPath() + " using handler " + par.getHandler().getClass().getSimpleName());
357354
sender.sendMessage(C.RED + "Cannot convert \"" + stringParam + "\" into a " + par.getType().getSimpleName());
@@ -408,15 +405,15 @@ public boolean invoke(VolmitSender sender, List<String> args, List<Integer> skip
408405
return false;
409406
}
410407

411-
private boolean invokeNode(VolmitSender sender, KMap<String, Object> map) {
408+
private boolean invokeNode(VolmitSender sender, KMap<String, Optional<Object>> map) {
412409
if (map == null) {
413410
return false;
414411
}
415412

416413
Object[] params = new Object[getNode().getMethod().getParameterCount()];
417414
int vm = 0;
418415
for (DecreeParameter i : getNode().getParameters()) {
419-
Object value = map.get(i.getName());
416+
Object value = map.getOrDefault(i.getName(), Optional.empty()).orElse(null);
420417

421418
try {
422419
if (value == null && i.hasDefault()) {

0 commit comments

Comments
 (0)