Skip to content

Commit

Permalink
Merge pull request #15 from YouHaveTrouble/master
Browse files Browse the repository at this point in the history
cleanup, small optimizations
  • Loading branch information
RhythmicSys committed Sep 30, 2022
2 parents fdbd8ac + 68b4fb9 commit 3a74ab5
Show file tree
Hide file tree
Showing 9 changed files with 57 additions and 52 deletions.
21 changes: 17 additions & 4 deletions src/main/java/adhdmc/villagerinfo/Commands/CommandHandler.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,14 @@

public class CommandHandler implements CommandExecutor, TabExecutor {

public static HashMap<String, SubCommand> subcommandList = new HashMap<String, SubCommand>();
public static HashMap<String, SubCommand> subcommandList = new HashMap<>();
Map<ConfigValidator.Message, String> msgs = ConfigValidator.getLocaleMap();
MiniMessage mM = MiniMessage.miniMessage();

//TY Peashooter101
@Override
public List<String> onTabComplete(CommandSender sender, Command command, String label, String[] args) {
ArrayList<String> subCommands1 = new ArrayList<String>(Arrays.asList("help", "toggle", "reload"));
ArrayList<String> subCommands1 = new ArrayList<>(Arrays.asList("help", "toggle", "reload"));
if (args.length == 1) {
return subCommands1;
}
Expand All @@ -32,13 +32,26 @@ public List<String> onTabComplete(CommandSender sender, Command command, String
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
//Checking for arguments
if (args.length == 0) {
sender.sendMessage(mM.deserialize("<green><click:open_url:'https://github.com/RhythmicSys/VillagerInfo'><hover:show_text:'<gray>Click here to visit the GitHub!'>VillagerInfo | Version:<version> </hover></click>\nAuthors: <gold> Rhythmic </gold> | <gold>Peashooter101</gold>", Placeholder.parsed("version", String.valueOf(VillagerInfo.version))));
String url = VillagerInfo.plugin.getDescription().getWebsite();
String version = VillagerInfo.plugin.getDescription().getVersion();
List<String> authors = new ArrayList<>();
for (String authorName : VillagerInfo.plugin.getDescription().getAuthors()) {
authors.add(String.format("<gold> %s </gold>", authorName));
}
String authorsString = String.join(" | ", authors);
sender.sendMessage(mM.deserialize(
"<green><click:open_url:'<url>'><hover:show_text:'<gray>Click here to visit the GitHub!'>VillagerInfo | Version:<version> </hover></click>\nAuthors: <authors>",
Placeholder.parsed("version", version),
Placeholder.parsed("authors", authorsString),
Placeholder.unparsed("url", url)
)
);
return true;
}
//if has an argument, check to see if it's contained in the list of arguments
String command = args[0].toLowerCase();
if (subcommandList.containsKey(command)) {
subcommandList.get(command).doThing(sender, Arrays.copyOfRange(args, 1, args.length));
subcommandList.get(command).execute(sender, Arrays.copyOfRange(args, 1, args.length));
} else {
sender.sendMessage(mM.deserialize(msgs.get(ConfigValidator.Message.NO_COMMAND)));
}
Expand Down
8 changes: 4 additions & 4 deletions src/main/java/adhdmc/villagerinfo/Commands/SubCommand.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@

public abstract class SubCommand {

private String name;
private String description;
private String syntax;
private final String name;
private final String description;
private final String syntax;

public SubCommand(String name, String description, String syntax) {
this.name = name;
Expand All @@ -28,7 +28,7 @@ public String getSyntax() {
return syntax;
}

public abstract void doThing(CommandSender sender, String[] args);
public abstract void execute(CommandSender sender, String[] args);

public abstract List<String> getSubcommandArguments(CommandSender sender, String[] args);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ public HelpCommand() {
}

@Override
public void doThing(CommandSender sender, String[] args) {
public void execute(CommandSender sender, String[] args) {
Map<Message, String> msgs = ConfigValidator.getLocaleMap();
MiniMessage mM = MiniMessage.miniMessage();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ public ReloadCommand() {


@Override
public void doThing(CommandSender sender, String[] args) {
public void execute(CommandSender sender, String[] args) {
Map<Message, String> msgs = ConfigValidator.getLocaleMap();
MiniMessage mM = MiniMessage.miniMessage();
if (!(sender instanceof Player) || sender.hasPermission(VillagerInfo.reloadCommandPermission)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
import adhdmc.villagerinfo.Config.ConfigValidator.Message;
import adhdmc.villagerinfo.VillagerInfo;
import net.kyori.adventure.text.minimessage.MiniMessage;
import org.bukkit.NamespacedKey;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.persistence.PersistentDataContainer;
Expand All @@ -15,17 +14,14 @@
import java.util.Map;

public class ToggleCommand extends SubCommand {
NamespacedKey infoToggle = new NamespacedKey(VillagerInfo.plugin, "infoToggle");
Map<Message, String> msgs = ConfigValidator.getLocaleMap();
String infoOn = VillagerInfo.toggleInfoOn;
String infoOff = VillagerInfo.toggleInfoOff;

public ToggleCommand() {
super("toggle", "Toggles villager info on and off", "/vill toggle");
}

@Override
public void doThing(CommandSender sender, String[] args) {
public void execute(CommandSender sender, String[] args) {
MiniMessage mM = MiniMessage.miniMessage();
if (!(sender instanceof Player)) {
sender.sendMessage(mM.deserialize(msgs.get(Message.NOT_A_PLAYER)));
Expand All @@ -44,14 +40,14 @@ public void doThing(CommandSender sender, String[] args) {
.append(mM.deserialize(msgs.get(Message.TOGGLE_OFF))));
}

private boolean toggleSetting(Player p) {
PersistentDataContainer playerPDC = p.getPersistentDataContainer();
String togglePDC = playerPDC.get(infoToggle, PersistentDataType.STRING);
if (togglePDC == null || togglePDC.equals(infoOn)) {
playerPDC.set(infoToggle, PersistentDataType.STRING, infoOff);
private boolean toggleSetting(Player player) {
PersistentDataContainer playerPDC = player.getPersistentDataContainer();
byte togglePDC = playerPDC.getOrDefault(VillagerInfo.getInfoEnabledKey(), PersistentDataType.BYTE, (byte)0);
if (togglePDC == 1) {
playerPDC.set(VillagerInfo.getInfoEnabledKey(), PersistentDataType.BYTE, (byte)0);
return false;
}
playerPDC.set(infoToggle, PersistentDataType.STRING, infoOn);
playerPDC.set(VillagerInfo.getInfoEnabledKey(), PersistentDataType.BYTE, (byte)1);
return true;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,46 +2,40 @@

import adhdmc.villagerinfo.Config.ConfigValidator;
import adhdmc.villagerinfo.VillagerInfo;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.NamespacedKey;
import org.bukkit.entity.Shulker;
import org.bukkit.event.entity.CreatureSpawnEvent;
import org.bukkit.persistence.PersistentDataContainer;
import org.bukkit.persistence.PersistentDataType;
import org.bukkit.scheduler.BukkitRunnable;

import java.util.HashMap;
import java.util.UUID;

import static org.bukkit.entity.EntityType.SHULKER;

public class HighlightHandling{
static NamespacedKey highlightStatus = new NamespacedKey(VillagerInfo.plugin, "highlightStatus");
static String currentlyHighlighted = VillagerInfo.isCurrentlyHighlighted;
static String notHighlighted = VillagerInfo.isNotCurrentlyHighlighted;
public class HighlightHandling {
static NamespacedKey highlightStatus = new NamespacedKey(VillagerInfo.plugin, "highlighted");
public static HashMap<UUID, Shulker> workstationShulker = new HashMap<>();
public static HashMap<UUID, PersistentDataContainer> villagerPDC = new HashMap<>();



public static void villagerJobsiteHighlight(PersistentDataContainer villPDC, UUID villUUID, Location villPOI) {
if (villPDC.getOrDefault(highlightStatus, PersistentDataType.STRING, notHighlighted).equals(currentlyHighlighted)) return;
villPDC.set(highlightStatus, PersistentDataType.STRING, currentlyHighlighted);
if (villPDC.getOrDefault(highlightStatus, PersistentDataType.BYTE, (byte)0) == 1) return;
villPDC.set(highlightStatus, PersistentDataType.BYTE, (byte)1);
villagerPDC.put(villUUID, villPDC);
spawnShulker(villUUID, villPOI);
Bukkit.getScheduler().runTaskLater(VillagerInfo.plugin, () -> {
killShulker(villUUID);
villPDC.set(highlightStatus, PersistentDataType.BYTE, (byte)0);
villagerPDC.put(villUUID, villPDC);
spawnShulker(villUUID, villPOI);
new BukkitRunnable() {
@Override
public void run() {
killShulker(villUUID);
villPDC.set(highlightStatus, PersistentDataType.STRING, notHighlighted);
villagerPDC.put(villUUID, villPDC);
}
}.runTaskLater(VillagerInfo.plugin, 20L * ConfigValidator.configTime);
}, 20L * ConfigValidator.configTime);
}

private static void spawnShulker(UUID villUUID, Location location) {
Shulker spawnedShulker = (Shulker) location.getWorld().spawnEntity(location, SHULKER, CreatureSpawnEvent.SpawnReason.CUSTOM, (Entity) -> {
Shulker highlightbox = (Shulker) Entity;
Shulker spawnedShulker = (Shulker) location.getWorld().spawnEntity(location, SHULKER, CreatureSpawnEvent.SpawnReason.CUSTOM, (entity) -> {
Shulker highlightbox = (Shulker) entity;
highlightbox.setAI(false);
highlightbox.setAware(false);
highlightbox.setCollidable(false);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
import net.kyori.adventure.text.minimessage.MiniMessage;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.bukkit.Location;
import org.bukkit.NamespacedKey;
import org.bukkit.entity.Player;
import org.bukkit.entity.Villager;
import org.bukkit.entity.memory.MemoryKey;
Expand All @@ -30,14 +29,10 @@ public class VillagerHandler implements Listener {
MiniMessage mM = MiniMessage.miniMessage();
Map<Message, String> messages = ConfigValidator.getLocaleMap();
Map<ConfigValidator.ToggleSetting, Boolean> toggleSettings = ConfigValidator.getToggleSettings();
NamespacedKey infoToggle = new NamespacedKey(VillagerInfo.plugin, "infoToggle");
String toggleOff = VillagerInfo.toggleInfoOff;


@EventHandler(ignoreCancelled = true, priority = EventPriority.NORMAL)
public void onVillagerClick(PlayerInteractEntityEvent event) {
Player player = event.getPlayer();
PersistentDataContainer playerPDC = player.getPersistentDataContainer();
if (event.getHand().equals(EquipmentSlot.OFF_HAND)) {
return;
}
Expand All @@ -47,8 +42,9 @@ public void onVillagerClick(PlayerInteractEntityEvent event) {
if (!(event.getRightClicked() instanceof Villager villager)) {
return;
}
String togglePDC = playerPDC.get(infoToggle, PersistentDataType.STRING);
if (togglePDC != null && togglePDC.equals(toggleOff)) {
PersistentDataContainer playerPDC = player.getPersistentDataContainer();
byte togglePDC = playerPDC.getOrDefault(VillagerInfo.getInfoEnabledKey(), PersistentDataType.BYTE, (byte)0);
if (togglePDC == 0) {
return;
}
if (!player.hasPermission("villagerinfo.use")) {
Expand Down
11 changes: 7 additions & 4 deletions src/main/java/adhdmc/villagerinfo/VillagerInfo.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,17 +16,15 @@
public final class VillagerInfo extends JavaPlugin {
public static VillagerInfo plugin;
public static LocaleConfig localeConfig;
//These are for the PDC stuff because I manage to not be able to keep '0' and '1' straight in my head, for which is true or false
public static final String toggleInfoOn = "toggleInfoOn";
public static final String toggleInfoOff = "toggleInfoOff";
public static final String isCurrentlyHighlighted = "isCurrentlyHighlighted";
public static final String isNotCurrentlyHighlighted = "isNotCurrentlyHighlighted";
public static final double version = 2.0;
//Permissions
public static final String toggleCommandPermission = "villagerinfo.toggle";
public static final String reloadCommandPermission = "villagerinfo.reload";
public static final String usePermission = "villagerinfo.use";

private static NamespacedKey infoEnabledKey;

@Override
public void onEnable() {
plugin = this;
Expand All @@ -37,6 +35,7 @@ public void onEnable() {
this.getLogger().severe("VillagerInfo relies on methods in classes not present on your server. Disabling plugin");
this.getServer().getPluginManager().disablePlugin(this);
}
infoEnabledKey = new NamespacedKey(VillagerInfo.plugin, "infoEnabled");
localeConfig = new LocaleConfig(this);
localeConfig.getlocaleConfig();
Metrics metrics = new Metrics(this, 13653);
Expand All @@ -61,4 +60,8 @@ private void registerCommands() {
CommandHandler.subcommandList.put("toggle", new ToggleCommand());
CommandHandler.subcommandList.put("reload", new ReloadCommand());
}

public static NamespacedKey getInfoEnabledKey() {
return infoEnabledKey;
}
}
5 changes: 4 additions & 1 deletion src/main/resources/plugin.yml
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
name: VillagerInfo
author: Rhythmic, Peashooter101
authors:
- Rhythmic
- Peashooter101
description: Easier access to information from villager's brains generally only accessable through the /data command.
version: '${project.version}'
main: adhdmc.villagerinfo.VillagerInfo
api-version: 1.19
website: https://github.com/RhythmicSys/VillagerInfo
commands:
vill:
description: base command for VillagerInfo
Expand Down

0 comments on commit 3a74ab5

Please sign in to comment.