-
-
Notifications
You must be signed in to change notification settings - Fork 42
/
WorldEditPlayerExtension.java
119 lines (107 loc) · 5 KB
/
WorldEditPlayerExtension.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
package com.denizenscript.depenizen.bukkit.extensions.worldedit;
import com.denizenscript.depenizen.bukkit.extensions.dObjectExtension;
import com.denizenscript.depenizen.bukkit.support.Support;
import com.denizenscript.depenizen.bukkit.support.plugins.WorldEditSupport;
import com.sk89q.worldedit.bukkit.BukkitAdapter;
import com.sk89q.worldedit.bukkit.WorldEditPlugin;
import com.sk89q.worldedit.command.tool.BrushTool;
import com.sk89q.worldedit.command.tool.InvalidToolBindException;
import com.sk89q.worldedit.command.tool.brush.Brush;
import com.sk89q.worldedit.function.pattern.BlockPattern;
import com.sk89q.worldedit.function.pattern.Pattern;
import com.sk89q.worldedit.regions.RegionSelector;
import com.sk89q.worldedit.world.item.ItemType;
import net.aufdemrand.denizen.objects.dCuboid;
import net.aufdemrand.denizen.objects.dItem;
import net.aufdemrand.denizen.objects.dPlayer;
import net.aufdemrand.denizen.utilities.debugging.dB;
import net.aufdemrand.denizencore.objects.dList;
import net.aufdemrand.denizencore.objects.dObject;
import net.aufdemrand.denizencore.tags.Attribute;
import net.aufdemrand.denizencore.utilities.CoreUtilities;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
public class WorldEditPlayerExtension extends dObjectExtension {
public static boolean describes(dObject object) {
return object instanceof dPlayer
&& ((dPlayer) object).isOnline();
}
public static WorldEditPlayerExtension getFrom(dObject object) {
if (!describes(object)) {
return null;
}
else {
return new WorldEditPlayerExtension((dPlayer) object);
}
}
private WorldEditPlayerExtension(dPlayer player) {
this.player = player.getPlayerEntity();
}
Player player = null;
@Override
public String getAttribute(Attribute attribute) {
// <--[tag]
// @attribute <p@player.we_brush_info[(<item>)]>
// @returns dList
// @description
// Returns information about a player's current brush for an item.
// If no item is specified, will be based on their held item.
// Output is in format: type|size|range|material
//
// Note that some values may be listed as "unknown" or strange values due to WorldEdit having a messy API (no way to automatically stringify brush data).
// @Plugin DepenizenBukkit, WorldEdit
// -->
if (attribute.startsWith("we_brush_info")) {
WorldEditPlugin worldEdit = Support.getPlugin(WorldEditSupport.class);
ItemType itemType;
if (attribute.hasContext(1)) {
itemType = BukkitAdapter.asItemType(dItem.valueOf(attribute.getContext(1)).getMaterial().getMaterial());
}
else {
ItemStack itm = player.getEquipment().getItemInMainHand();
itemType = BukkitAdapter.asItemType(itm == null ? Material.AIR : itm.getType());
}
try {
BrushTool brush = worldEdit.getSession(player).getBrushTool(itemType);
Brush btype = brush.getBrush();
String brushType = CoreUtilities.toLowerCase(btype.getClass().getSimpleName());
String materialInfo = "unknown";
Pattern materialPattern = brush.getMaterial();
if (materialPattern instanceof BlockPattern) {
((BlockPattern) materialPattern).getBlock().getAsString();
}
// TODO: other patterns?
// TODO: mask?
dList info = new dList();
info.add(brushType);
info.add(String.valueOf(brush.getSize()));
info.add(String.valueOf(brush.getRange()));
info.add(materialInfo);
return info.getAttribute(attribute.fulfill(1));
}
catch (InvalidToolBindException ex) {
if (!attribute.hasAlternative()) {
dB.echoError("Player " + player.getName() + " does not have a WE brush for " + itemType.getName());
}
}
}
// <--[tag]
// @attribute <p@player.selected_region>
// @returns dCuboid
// @description
// Returns the player's current region selection, as a dCuboid.
// @Plugin DepenizenBukkit, WorldEdit
// -->
if (attribute.startsWith("selected_region")) {
WorldEditPlugin worldEdit = Support.getPlugin(WorldEditSupport.class);
RegionSelector selection = worldEdit.getSession(player).getRegionSelector(BukkitAdapter.adapt(player.getWorld()));
if (selection != null) {
return new dCuboid(BukkitAdapter.adapt(player.getWorld(), selection.getIncompleteRegion().getMinimumPoint()),
BukkitAdapter.adapt(player.getWorld(), selection.getIncompleteRegion().getMaximumPoint()))
.getAttribute(attribute.fulfill(1));
}
}
return null;
}
}