Skip to content

Commit

Permalink
replace extension properties with generic extension classes
Browse files Browse the repository at this point in the history
  • Loading branch information
mcmonkey4eva committed Aug 30, 2022
1 parent 7096eb6 commit 246cb1c
Show file tree
Hide file tree
Showing 8 changed files with 101 additions and 350 deletions.
Expand Up @@ -9,19 +9,21 @@
import com.denizenscript.denizen.objects.properties.trade.*;
import com.denizenscript.denizen.nms.NMSHandler;
import com.denizenscript.denizen.nms.NMSVersion;
import com.denizenscript.denizencore.objects.core.*;
import com.denizenscript.denizencore.objects.properties.PropertyParser;

public class PropertyRegistry {

public static void registerExtensions() {
BukkitBinaryTagExtensions.register();
BukkitElementExtensions.register();
BukkitListExtensions.register();
BukkitMapTagExtensions.register();
BukkitQueueExtensions.register();
BukkitScriptExtensions.register();
}

public static void registerMainProperties() {
// register properties that add Bukkit code to core objects
PropertyParser.registerProperty(BukkitBinaryTagProperties.class, BinaryTag.class);
PropertyParser.registerProperty(BukkitElementProperties.class, ElementTag.class);
PropertyParser.registerProperty(BukkitListProperties.class, ListTag.class);
PropertyParser.registerProperty(BukkitMapTagProperties.class, MapTag.class);
PropertyParser.registerProperty(BukkitQueueProperties.class, QueueTag.class);
PropertyParser.registerProperty(BukkitScriptProperties.class, ScriptTag.class);
registerExtensions();

// register core EntityTag properties
PropertyParser.registerProperty(EntityAge.class, EntityTag.class);
Expand Down
Expand Up @@ -4,39 +4,14 @@
import com.denizenscript.denizen.nms.util.jnbt.NamedTag;
import com.denizenscript.denizen.objects.properties.item.ItemRawNBT;
import com.denizenscript.denizencore.utilities.debugging.Debug;
import com.denizenscript.denizencore.objects.Mechanism;
import com.denizenscript.denizencore.objects.ObjectTag;
import com.denizenscript.denizencore.objects.core.BinaryTag;
import com.denizenscript.denizencore.objects.properties.Property;
import com.denizenscript.denizencore.objects.properties.PropertyParser;

import java.io.ByteArrayInputStream;

public class BukkitBinaryTagProperties implements Property {
public class BukkitBinaryTagExtensions {

public static boolean describes(ObjectTag data) {
return data instanceof BinaryTag;
}

public static BukkitBinaryTagProperties getFrom(ObjectTag data) {
if (!describes(data)) {
return null;
}
else {
return new BukkitBinaryTagProperties((BinaryTag) data);
}
}

private BukkitBinaryTagProperties(BinaryTag data) {
this.data = data;
}

public static final String[] handledMechs = new String[] {
}; // None

public BinaryTag data;

public static void registerTags() {
public static void register() {

// <--[tag]
// @attribute <BinaryTag.nbt_to_map>
Expand All @@ -52,9 +27,9 @@ public static void registerTags() {
// - define data <entry[x].data.gzip_decompress.nbt_to_map>
// # Now do something with "<[data]>"
// -->
PropertyParser.registerStaticTag(BukkitBinaryTagProperties.class, ObjectTag.class, "nbt_to_map", (attribute, object) -> {
BinaryTag.tagProcessor.registerStaticTag(ObjectTag.class, "nbt_to_map", (attribute, object) -> {
try {
ByteArrayInputStream stream = new ByteArrayInputStream(object.data.data);
ByteArrayInputStream stream = new ByteArrayInputStream(object.data);
NBTInputStream nbtStream = new NBTInputStream(stream);
NamedTag tag = nbtStream.readNamedTag();
nbtStream.close();
Expand All @@ -67,19 +42,4 @@ public static void registerTags() {
}
});
}

@Override
public String getPropertyString() {
return null;
}

@Override
public String getPropertyId() {
return "BukkitBinaryTagProperties";
}

@Override
public void adjust(Mechanism mechanism) {
// None
}
}

Large diffs are not rendered by default.

Expand Up @@ -4,39 +4,15 @@
import com.denizenscript.denizen.utilities.Settings;
import com.denizenscript.denizencore.DenizenCore;
import com.denizenscript.denizencore.objects.core.ElementTag;
import com.denizenscript.denizencore.objects.Mechanism;
import com.denizenscript.denizencore.objects.core.ListTag;
import com.denizenscript.denizencore.objects.ObjectTag;
import com.denizenscript.denizencore.objects.properties.Property;
import com.denizenscript.denizencore.objects.properties.PropertyParser;
import org.bukkit.ChatColor;

import java.util.List;

public class BukkitListProperties implements Property {
public static boolean describes(ObjectTag list) {
return list instanceof ListTag;
}

public static BukkitListProperties getFrom(ObjectTag list) {
if (!describes(list)) {
return null;
}
else {
return new BukkitListProperties((ListTag) list);
}
}

private BukkitListProperties(ListTag list) {
this.list = list;
}

public static final String[] handledMechs = new String[] {
}; // None

ListTag list;
public class BukkitListExtensions {

public static void registerTags() {
public static void register() {

// <--[tag]
// @attribute <ListTag.formatted>
Expand All @@ -47,8 +23,7 @@ public static void registerTags() {
// EG, a list of "<npc>|<player>|potato" will return "GuardNPC, bob, and potato".
// The exact formatting rules that will be followed are not guaranteed, other than that it will be a semi-clean human-readable format.
// -->
PropertyParser.registerTag(BukkitListProperties.class, ElementTag.class, "formatted", (attribute, listObj) -> {
ListTag list = listObj.list;
ListTag.tagProcessor.registerTag(ElementTag.class, "formatted", (attribute, list) -> {
if (list.isEmpty()) {
return new ElementTag("");
}
Expand Down Expand Up @@ -115,8 +90,8 @@ public static void registerTags() {
// Converts a list of locations to a PolygonTag.
// The Y-Min and Y-Max values will be assigned based the range of Y values in the locations given.
// -->
PropertyParser.registerTag(BukkitListProperties.class, PolygonTag.class, "to_polygon", (attribute, listObj) -> {
List<LocationTag> locations = listObj.list.filter(LocationTag.class, attribute.context);
ListTag.tagProcessor.registerTag(PolygonTag.class, "to_polygon", (attribute, list) -> {
List<LocationTag> locations = list.filter(LocationTag.class, attribute.context);
if (locations == null || locations.isEmpty()) {
return null;
}
Expand All @@ -135,19 +110,4 @@ public static void registerTags() {
return polygon;
});
}

@Override
public String getPropertyString() {
return null;
}

@Override
public String getPropertyId() {
return "BukkitListProperties";
}

@Override
public void adjust(Mechanism mechanism) {
// None
}
}
Expand Up @@ -3,41 +3,15 @@
import com.denizenscript.denizen.nms.util.jnbt.NBTOutputStream;
import com.denizenscript.denizen.nms.util.jnbt.Tag;
import com.denizenscript.denizen.objects.properties.item.ItemRawNBT;
import com.denizenscript.denizencore.objects.core.MapTag;
import com.denizenscript.denizencore.utilities.debugging.Debug;
import com.denizenscript.denizencore.objects.Mechanism;
import com.denizenscript.denizencore.objects.ObjectTag;
import com.denizenscript.denizencore.objects.core.BinaryTag;
import com.denizenscript.denizencore.objects.core.MapTag;
import com.denizenscript.denizencore.objects.properties.Property;
import com.denizenscript.denizencore.objects.properties.PropertyParser;

import java.io.ByteArrayOutputStream;

public class BukkitMapTagProperties implements Property {

public static boolean describes(ObjectTag map) {
return map instanceof MapTag;
}

public static BukkitMapTagProperties getFrom(ObjectTag map) {
if (!describes(map)) {
return null;
}
else {
return new BukkitMapTagProperties((MapTag) map);
}
}

private BukkitMapTagProperties(MapTag map) {
this.map = map;
}

public static final String[] handledMechs = new String[] {
}; // None

public MapTag map;
public class BukkitMapTagExtensions {

public static void registerTags() {
public static void register() {

// <--[tag]
// @attribute <MapTag.map_to_nbt>
Expand All @@ -53,9 +27,9 @@ public static void registerTags() {
// - define data <[something].map_to_nbt.gzip_compress>
// - ~filewrite path:data/<player.uuid>.dat data:<[data]>
// -->
PropertyParser.registerStaticTag(BukkitMapTagProperties.class, BinaryTag.class, "map_to_nbt", (attribute, object) -> {
MapTag.tagProcessor.registerStaticTag(BinaryTag.class, "map_to_nbt", (attribute, object) -> {
try {
Tag tag = ItemRawNBT.convertObjectToNbt(object.map.toString(), attribute.context, "(root).");
Tag tag = ItemRawNBT.convertObjectToNbt(object.toString(), attribute.context, "(root).");
ByteArrayOutputStream output = new ByteArrayOutputStream();
NBTOutputStream nbtStream = new NBTOutputStream(output);
nbtStream.writeNamedTag("", tag);
Expand All @@ -70,19 +44,4 @@ public static void registerTags() {
}
});
}

@Override
public String getPropertyString() {
return null;
}

@Override
public String getPropertyId() {
return "BukkitMapTagProperties";
}

@Override
public void adjust(Mechanism mechanism) {
// None
}
}
Expand Up @@ -3,40 +3,12 @@
import com.denizenscript.denizen.utilities.implementation.BukkitScriptEntryData;
import com.denizenscript.denizen.objects.NPCTag;
import com.denizenscript.denizen.objects.PlayerTag;
import com.denizenscript.denizencore.objects.Mechanism;
import com.denizenscript.denizencore.objects.ObjectTag;
import com.denizenscript.denizencore.objects.core.QueueTag;
import com.denizenscript.denizencore.objects.properties.Property;
import com.denizenscript.denizencore.objects.properties.PropertyParser;
import com.denizenscript.denizencore.scripts.ScriptEntry;
import com.denizenscript.denizencore.scripts.queues.ScriptQueue;

public class BukkitQueueProperties implements Property {
public class BukkitQueueExtensions {

public static boolean describes(ObjectTag script) {
return script instanceof QueueTag;
}

public static BukkitQueueProperties getFrom(ObjectTag queue) {
if (!describes(queue)) {
return null;
}
else {
return new BukkitQueueProperties((QueueTag) queue);
}
}

public static final String[] handledMechs = new String[] {
"linked_player", "linked_npc"
};

private BukkitQueueProperties(QueueTag queue) {
this.queue = queue.getQueue();
}

ScriptQueue queue;

public static void registerTags() {
public static void register() {

// <--[tag]
// @attribute <QueueTag.npc>
Expand All @@ -45,7 +17,7 @@ public static void registerTags() {
// @description
// Returns the NPCTag linked to a queue.
// -->
PropertyParser.registerTag(BukkitQueueProperties.class, NPCTag.class, "npc", (attribute, object) -> {
QueueTag.tagProcessor.registerTag(NPCTag.class, "npc", (attribute, object) -> {
NPCTag npc = null;
if (object.queue.getLastEntryExecuted() != null) {
npc = ((BukkitScriptEntryData) object.queue.getLastEntryExecuted().entryData).getNPC();
Expand All @@ -66,7 +38,7 @@ else if (!attribute.hasAlternative()) {
// @description
// Returns the PlayerTag linked to a queue.
// -->
PropertyParser.registerTag(BukkitQueueProperties.class, PlayerTag.class, "player", (attribute, object) -> {
QueueTag.tagProcessor.registerTag(PlayerTag.class, "player", (attribute, object) -> {
PlayerTag player = null;
if (object.queue.getLastEntryExecuted() != null) {
player = ((BukkitScriptEntryData) object.queue.getLastEntryExecuted().entryData).getPlayer();
Expand All @@ -79,20 +51,6 @@ else if (object.queue.getEntries().size() > 0) {
}
return player;
});
}

@Override
public String getPropertyString() {
return null;
}

@Override
public String getPropertyId() {
return "BukkitQueueProperties";
}

@Override
public void adjust(Mechanism mechanism) {

// <--[mechanism]
// @object QueueTag
Expand All @@ -103,13 +61,12 @@ public void adjust(Mechanism mechanism) {
// @tags
// <QueueTag.player>
// -->
if (mechanism.matches("linked_player") && mechanism.requireObject(PlayerTag.class)) {
PlayerTag player = mechanism.valueAsType(PlayerTag.class);
for (ScriptEntry entry : queue.getEntries()) {
QueueTag.tagProcessor.registerMechanism("linked_player", false, PlayerTag.class, (queue, mechanism, player) -> {
for (ScriptEntry entry : queue.queue.getEntries()) {
BukkitScriptEntryData data = (BukkitScriptEntryData) entry.entryData;
data.setPlayer(player);
}
}
});

// <--[mechanism]
// @object QueueTag
Expand All @@ -120,12 +77,11 @@ public void adjust(Mechanism mechanism) {
// @tags
// <QueueTag.npc>
// -->
if (mechanism.matches("linked_npc") && mechanism.requireObject(NPCTag.class)) {
NPCTag npc = mechanism.valueAsType(NPCTag.class);
for (ScriptEntry entry : queue.getEntries()) {
QueueTag.tagProcessor.registerMechanism("linked_npc", false, NPCTag.class, (queue, mechanism, npc) -> {
for (ScriptEntry entry : queue.queue.getEntries()) {
BukkitScriptEntryData data = (BukkitScriptEntryData) entry.entryData;
data.setNPC(npc);
}
}
});
}
}

0 comments on commit 246cb1c

Please sign in to comment.