Skip to content

Commit

Permalink
tab complete properties for items/materials/entities
Browse files Browse the repository at this point in the history
  • Loading branch information
mcmonkey4eva committed Apr 27, 2022
1 parent 4e3545f commit ba0715b
Show file tree
Hide file tree
Showing 10 changed files with 101 additions and 57 deletions.
Expand Up @@ -83,14 +83,6 @@ public static MaterialTag valueOf(String string, TagContext context) {
return null;
}

public static MaterialTag quickOfNamed(String string) {
Material m = Material.getMaterial(string.toUpperCase());
if (m != null) {
return new MaterialTag(m);
}
return null;
}

public static TagContext noDebugContext = new BukkitTagContext(null, null, null, false, null);

/**
Expand Down
@@ -1,7 +1,7 @@
package com.denizenscript.denizen.scripts.commands.entity;

import com.denizenscript.denizen.scripts.containers.core.EntityScriptHelper;
import com.denizenscript.denizen.utilities.Utilities;
import com.denizenscript.denizen.utilities.command.TabCompleteHelper;
import com.denizenscript.denizen.utilities.debugging.Debug;
import com.denizenscript.denizen.objects.EntityTag;
import com.denizenscript.denizen.objects.LocationTag;
Expand All @@ -13,7 +13,6 @@
import com.denizenscript.denizencore.scripts.commands.AbstractCommand;
import com.denizenscript.denizencore.utilities.CoreUtilities;
import org.bukkit.Location;
import org.bukkit.entity.EntityType;

import java.util.List;

Expand Down Expand Up @@ -64,8 +63,7 @@ public SpawnCommand() {

@Override
public void addCustomTabCompletions(TabCompletionsBuilder tab) {
tab.add(EntityType.values());
tab.add(EntityScriptHelper.scripts.keySet());
TabCompleteHelper.tabCompleteEntityTypes(tab);
}

@Override
Expand Down
Expand Up @@ -2,7 +2,7 @@

import com.denizenscript.denizen.Denizen;
import com.denizenscript.denizen.nms.NMSHandler;
import com.denizenscript.denizen.scripts.containers.core.ItemScriptHelper;
import com.denizenscript.denizen.utilities.command.TabCompleteHelper;
import com.denizenscript.denizen.utilities.debugging.Debug;
import com.denizenscript.denizen.objects.EntityTag;
import com.denizenscript.denizen.objects.ItemTag;
Expand All @@ -13,7 +13,6 @@
import com.denizenscript.denizencore.scripts.ScriptEntry;
import com.denizenscript.denizencore.scripts.commands.AbstractCommand;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.entity.Item;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
Expand Down Expand Up @@ -74,12 +73,7 @@ public DisplayItemCommand() {

@Override
public void addCustomTabCompletions(TabCompletionsBuilder tab) {
for (Material material : Material.values()) {
if (material.isItem()) {
tab.add(material.name());
}
}
tab.add(ItemScriptHelper.item_scripts.keySet());
TabCompleteHelper.tabCompleteItems(tab);
}

@Override
Expand Down
@@ -1,11 +1,10 @@
package com.denizenscript.denizen.scripts.commands.item;

import com.denizenscript.denizen.scripts.containers.core.ItemScriptHelper;
import com.denizenscript.denizen.utilities.Utilities;
import com.denizenscript.denizen.utilities.command.TabCompleteHelper;
import com.denizenscript.denizen.utilities.debugging.Debug;
import com.denizenscript.denizen.utilities.inventory.SlotHelper;
import com.denizenscript.denizen.nms.NMSHandler;
import com.denizenscript.denizen.nms.interfaces.PacketHelper;
import com.denizenscript.denizen.objects.ItemTag;
import com.denizenscript.denizen.objects.PlayerTag;
import com.denizenscript.denizencore.DenizenCore;
Expand All @@ -17,7 +16,6 @@
import com.denizenscript.denizencore.scripts.ScriptEntry;
import com.denizenscript.denizencore.scripts.commands.AbstractCommand;
import com.denizenscript.denizencore.utilities.scheduling.OneTimeSchedulable;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.inventory.CraftingInventory;
import org.bukkit.inventory.ItemStack;
Expand Down Expand Up @@ -62,12 +60,7 @@ public FakeItemCommand() {

@Override
public void addCustomTabCompletions(TabCompletionsBuilder tab) {
for (Material material : Material.values()) {
if (material.isItem()) {
tab.add(material.name());
}
}
tab.add(ItemScriptHelper.item_scripts.keySet());
TabCompleteHelper.tabCompleteItems(tab);
}

@Override
Expand Down
@@ -1,7 +1,7 @@
package com.denizenscript.denizen.scripts.commands.item;

import com.denizenscript.denizen.scripts.containers.core.ItemScriptHelper;
import com.denizenscript.denizen.utilities.Utilities;
import com.denizenscript.denizen.utilities.command.TabCompleteHelper;
import com.denizenscript.denizen.utilities.debugging.Debug;
import com.denizenscript.denizen.utilities.depends.Depends;
import com.denizenscript.denizen.utilities.inventory.SlotHelper;
Expand Down Expand Up @@ -76,12 +76,7 @@ enum Type {ITEM, MONEY, EXP}

@Override
public void addCustomTabCompletions(TabCompletionsBuilder tab) {
for (Material material : Material.values()) {
if (material.isItem()) {
tab.add(material.name());
}
}
tab.add(ItemScriptHelper.item_scripts.keySet());
TabCompleteHelper.tabCompleteItems(tab);
}

@Override
Expand Down
Expand Up @@ -2,6 +2,7 @@

import com.denizenscript.denizen.objects.EntityTag;
import com.denizenscript.denizen.utilities.Utilities;
import com.denizenscript.denizen.utilities.command.TabCompleteHelper;
import com.denizenscript.denizen.utilities.debugging.Debug;
import com.denizenscript.denizen.objects.LocationTag;
import com.denizenscript.denizen.objects.PlayerTag;
Expand All @@ -13,7 +14,6 @@
import com.denizenscript.denizencore.objects.core.ListTag;
import com.denizenscript.denizencore.scripts.ScriptEntry;
import com.denizenscript.denizencore.scripts.commands.AbstractCommand;
import org.bukkit.entity.EntityType;

import java.util.Collections;
import java.util.List;
Expand Down Expand Up @@ -58,7 +58,7 @@ public FakeSpawnCommand() {

@Override
public void addCustomTabCompletions(TabCompletionsBuilder tab) {
tab.add(EntityType.values());
TabCompleteHelper.tabCompleteEntityTypes(tab);
}

@Override
Expand Down
Expand Up @@ -2,6 +2,7 @@

import com.denizenscript.denizen.utilities.Utilities;
import com.denizenscript.denizen.utilities.blocks.FakeBlock;
import com.denizenscript.denizen.utilities.command.TabCompleteHelper;
import com.denizenscript.denizen.utilities.debugging.Debug;
import com.denizenscript.denizen.objects.LocationTag;
import com.denizenscript.denizen.objects.MaterialTag;
Expand All @@ -14,7 +15,6 @@
import com.denizenscript.denizencore.objects.core.ListTag;
import com.denizenscript.denizencore.scripts.ScriptEntry;
import com.denizenscript.denizencore.scripts.commands.AbstractCommand;
import org.bukkit.Material;

import java.util.Collections;
import java.util.List;
Expand Down Expand Up @@ -80,11 +80,7 @@ public ShowFakeCommand() {

@Override
public void addCustomTabCompletions(TabCompletionsBuilder tab) {
for (Material material : Material.values()) {
if (material.isBlock()) {
tab.add(material.name());
}
}
TabCompleteHelper.tabCompleteBlockMaterials(tab);
}

@Override
Expand Down
@@ -1,7 +1,7 @@
package com.denizenscript.denizen.scripts.commands.world;

import com.denizenscript.denizen.scripts.containers.core.ItemScriptHelper;
import com.denizenscript.denizen.utilities.Utilities;
import com.denizenscript.denizen.utilities.command.TabCompleteHelper;
import com.denizenscript.denizen.utilities.debugging.Debug;
import com.denizenscript.denizencore.objects.*;
import com.denizenscript.denizen.objects.EntityTag;
Expand Down Expand Up @@ -75,12 +75,7 @@ enum Action {DROP_ITEM, DROP_EXP, DROP_ENTITY}

@Override
public void addCustomTabCompletions(TabCompletionsBuilder tab) {
for (Material material : Material.values()) {
if (material.isItem()) {
tab.add(material.name());
}
}
tab.add(ItemScriptHelper.item_scripts.keySet());
TabCompleteHelper.tabCompleteItems(tab);
}

@Override
Expand Down
Expand Up @@ -4,9 +4,9 @@
import com.denizenscript.denizen.nms.NMSVersion;
import com.denizenscript.denizen.objects.*;
import com.denizenscript.denizen.utilities.Utilities;
import com.denizenscript.denizen.utilities.command.TabCompleteHelper;
import com.denizenscript.denizen.utilities.debugging.Debug;
import com.denizenscript.denizen.nms.NMSHandler;
import com.denizenscript.denizen.nms.interfaces.WorldHelper;
import com.denizenscript.denizencore.exceptions.InvalidArgumentsException;
import com.denizenscript.denizencore.objects.*;
import com.denizenscript.denizencore.objects.core.ElementTag;
Expand Down Expand Up @@ -112,11 +112,7 @@ public ModifyBlockCommand() {

@Override
public void addCustomTabCompletions(TabCompletionsBuilder tab) {
for (Material material : Material.values()) {
if (material.isBlock()) {
tab.add(material.name());
}
}
TabCompleteHelper.tabCompleteBlockMaterials(tab);
}

@Override
Expand Down
@@ -0,0 +1,85 @@
package com.denizenscript.denizen.utilities.command;

import com.denizenscript.denizen.objects.EntityTag;
import com.denizenscript.denizen.objects.ItemTag;
import com.denizenscript.denizen.objects.MaterialTag;
import com.denizenscript.denizen.scripts.containers.core.EntityScriptHelper;
import com.denizenscript.denizen.scripts.containers.core.ItemScriptHelper;
import com.denizenscript.denizencore.objects.ObjectTag;
import com.denizenscript.denizencore.objects.properties.PropertyParser;
import com.denizenscript.denizencore.scripts.commands.AbstractCommand;
import com.denizenscript.denizencore.utilities.CoreUtilities;
import org.bukkit.Material;
import org.bukkit.entity.EntityType;

import java.util.Map;

public class TabCompleteHelper {

public static void tabCompleteItems(AbstractCommand.TabCompletionsBuilder tab) {
int bracket = tab.arg.indexOf('[');
if (bracket == -1) {
for (Material material : Material.values()) {
if (material.isItem()) {
tab.add(material.name());
}
}
tab.add(ItemScriptHelper.item_scripts.keySet());
return;
}
String material = tab.arg.substring(0, bracket);
ItemTag item = ItemTag.valueOf(material, CoreUtilities.noDebugContext);
tabCompletePropertiesFor(tab, bracket, item);
}

public static void tabCompleteBlockMaterials(AbstractCommand.TabCompletionsBuilder tab) {
int bracket = tab.arg.indexOf('[');
if (bracket == -1) {
for (Material material : Material.values()) {
if (material.isBlock()) {
tab.add(material.name());
}
}
return;
}
String material = tab.arg.substring(0, bracket);
MaterialTag mat = MaterialTag.valueOf(material, CoreUtilities.noDebugContext);
tabCompletePropertiesFor(tab, bracket, mat);
}

public static void tabCompleteEntityTypes(AbstractCommand.TabCompletionsBuilder tab) {
int bracket = tab.arg.indexOf('[');
if (bracket == -1) {
tab.add(EntityType.values());
tab.add(EntityScriptHelper.scripts.keySet());
return;
}
String type = tab.arg.substring(0, bracket);
EntityTag entity = EntityTag.valueOf(type, CoreUtilities.noDebugContext);
if (entity == null || entity.isUnique()) {
return;
}
tabCompletePropertiesFor(tab, bracket, entity);
}

public static void tabCompletePropertiesFor(AbstractCommand.TabCompletionsBuilder tab, int bracket, ObjectTag object) {
if (object == null) {
return;
}
int lastSemicolon = tab.arg.lastIndexOf(';');
if (lastSemicolon == -1) {
lastSemicolon = bracket;
}
String propertyPart = tab.arg.substring(lastSemicolon + 1);
if (propertyPart.indexOf('=') != -1) {
return;
}
String prefixPart = tab.arg.substring(0, lastSemicolon + 1);
PropertyParser.ClassPropertiesInfo properties = PropertyParser.propertiesByClass.get(object.getObjectTagClass());
for (Map.Entry<String, PropertyParser.PropertyGetter> property : properties.propertiesByMechanism.entrySet()) {
if (property.getKey().startsWith(propertyPart) && property.getValue().get(object) != null) {
tab.add(prefixPart + property.getKey());
}
}
}
}

0 comments on commit ba0715b

Please sign in to comment.