diff --git a/plugin/src/main/java/com/alttd/cometskyblock/CometSkyBlockPlugin.java b/plugin/src/main/java/com/alttd/cometskyblock/CometSkyBlockPlugin.java index f23165d..4315890 100644 --- a/plugin/src/main/java/com/alttd/cometskyblock/CometSkyBlockPlugin.java +++ b/plugin/src/main/java/com/alttd/cometskyblock/CometSkyBlockPlugin.java @@ -11,8 +11,7 @@ import com.alttd.cometskyblock.island.IslandData; import com.alttd.cometskyblock.island.oregenerator.GeneratorHandler; import com.alttd.cometskyblock.island.oregenerator.GeneratorLoader; import com.alttd.cometskyblock.listeners.BedListener; -import com.alttd.cometskyblock.listeners.CobbestoneGeneratorListener; -import com.alttd.cometskyblock.listeners.PlayerJoinListener; +import com.alttd.cometskyblock.listeners.CobbestoneGeneratorListener;; import com.alttd.cometskyblock.listeners.PlayerListener; import com.alttd.cometskyblock.managers.IslandManager; import com.alttd.cometskyblock.worldgenerator.MasterWorldGenerator; @@ -106,7 +105,6 @@ public class CometSkyBlockPlugin extends JavaPlugin implements CometSkyBlockAPI public void loadEventListeners() { final PluginManager pm = getServer().getPluginManager(); - pm.registerEvents(new PlayerJoinListener(this), this); pm.registerEvents(new BedListener(this), this); pm.registerEvents(new CobbestoneGeneratorListener(this), this); pm.registerEvents(new GUIListener(this), this); diff --git a/plugin/src/main/java/com/alttd/cometskyblock/commands/island/IslandCommand.java b/plugin/src/main/java/com/alttd/cometskyblock/commands/island/IslandCommand.java index 4b0f06f..713a1e6 100644 --- a/plugin/src/main/java/com/alttd/cometskyblock/commands/island/IslandCommand.java +++ b/plugin/src/main/java/com/alttd/cometskyblock/commands/island/IslandCommand.java @@ -27,6 +27,8 @@ public class IslandCommand extends PlayerSubCommand { registerSubCommand(new IslandKick(plugin)); // TODO -- Add IslandKickCommand registerSubCommand(new IslandSetOwner(plugin)); registerSubCommand(new IslandVisit(plugin)); + registerSubCommand(new IslandTrust(plugin)); + registerSubCommand(new IslandUnTrust(plugin)); } @Override diff --git a/plugin/src/main/java/com/alttd/cometskyblock/commands/island/IslandTrust.java b/plugin/src/main/java/com/alttd/cometskyblock/commands/island/IslandTrust.java new file mode 100644 index 0000000..5dbd10a --- /dev/null +++ b/plugin/src/main/java/com/alttd/cometskyblock/commands/island/IslandTrust.java @@ -0,0 +1,55 @@ +package com.alttd.cometskyblock.commands.island; + +import com.alttd.cometskyblock.CometSkyBlockPlugin; +import com.alttd.cometskyblock.commands.PlayerSubCommand; +import com.alttd.cometskyblock.configuration.MessageConfiguration; +import com.alttd.cometskyblock.island.Island; +import com.alttd.cometskyblock.island.IslandPlayer; +import com.alttd.cometskyblock.request.InviteRequest; +import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; + +import java.util.UUID; + +public class IslandTrust extends PlayerSubCommand { + + public IslandTrust(CometSkyBlockPlugin plugin) { + super(plugin, "trust"); + } + + @Override + public boolean execute(Player player, IslandPlayer islandPlayer, String[] args) { + MessageConfiguration.Commands.Island.Trust trust = plugin.messagesConfiguration().get().commands().island().trust(); + if (islandPlayer.islandId() == 0) { + player.sendRichMessage(plugin.messagesConfiguration().get().commands().island().noIsland()); + return true; + } + if (args.length < 1) { + player.sendRichMessage(plugin.messagesConfiguration().get().commands().island().commandUsage()); + return true; + } + Player target = Bukkit.getPlayer(args[0]); + if (player == target) { + player.sendRichMessage(trust.trustSelf()); + return true; + } + if (target == null) { + player.sendRichMessage(trust.targetOffline()); + return true; + } + Island island = Island.getIsland(islandPlayer.islandUUID()); + UUID uuid = target.getUniqueId(); + if (island.members().contains(uuid)) { + player.sendRichMessage(trust.targetIsMember()); + return true; + } + if (island.trustList().contains(uuid)) { + player.sendRichMessage(trust.targetIsTrusted()); + return true; + } + + island.trust(uuid); + return true; + } +} diff --git a/plugin/src/main/java/com/alttd/cometskyblock/commands/island/IslandUnTrust.java b/plugin/src/main/java/com/alttd/cometskyblock/commands/island/IslandUnTrust.java new file mode 100644 index 0000000..6adcbcd --- /dev/null +++ b/plugin/src/main/java/com/alttd/cometskyblock/commands/island/IslandUnTrust.java @@ -0,0 +1,42 @@ +package com.alttd.cometskyblock.commands.island; + +import com.alttd.cometskyblock.CometSkyBlockPlugin; +import com.alttd.cometskyblock.commands.PlayerSubCommand; +import com.alttd.cometskyblock.configuration.MessageConfiguration; +import com.alttd.cometskyblock.island.Island; +import com.alttd.cometskyblock.island.IslandPlayer; +import org.bukkit.Bukkit; +import org.bukkit.OfflinePlayer; +import org.bukkit.entity.Player; + +import java.util.UUID; + +public class IslandUnTrust extends PlayerSubCommand { + + public IslandUnTrust(CometSkyBlockPlugin plugin) { + super(plugin, "untrust"); + } + + @Override + public boolean execute(Player player, IslandPlayer islandPlayer, String[] args) { + MessageConfiguration.Commands.Island.Trust trust = plugin.messagesConfiguration().get().commands().island().trust(); + if (islandPlayer.islandId() == 0) { + player.sendRichMessage(plugin.messagesConfiguration().get().commands().island().noIsland()); + return true; + } + if (args.length < 1) { + player.sendRichMessage(plugin.messagesConfiguration().get().commands().island().commandUsage()); + return true; + } + OfflinePlayer target = Bukkit.getOfflinePlayer(args[0]); + Island island = Island.getIsland(islandPlayer.islandUUID()); + UUID uuid = target.getUniqueId(); + if (!island.trustList().contains(uuid)) { + player.sendRichMessage(trust.targetIsNotTrusted()); + return true; + } + + island.untrust(uuid); + return true; + } +} diff --git a/plugin/src/main/java/com/alttd/cometskyblock/configuration/MessageConfiguration.java b/plugin/src/main/java/com/alttd/cometskyblock/configuration/MessageConfiguration.java index 0d34895..10cd49d 100644 --- a/plugin/src/main/java/com/alttd/cometskyblock/configuration/MessageConfiguration.java +++ b/plugin/src/main/java/com/alttd/cometskyblock/configuration/MessageConfiguration.java @@ -149,6 +149,16 @@ public class MessageConfiguration implements Configuration { String targetNotAMember = " must be a member of your island."; } + Trust trust = new Trust(); + @ConfigSerializable @Getter + public static class Trust { + String trustSelf = "You can not trust yourself to this island."; + String targetOffline = " not found, is the player online?"; + String targetIsMember = " is already a member on this island."; + String targetIsTrusted = " is already trusted on this island."; + String targetIsNotTrusted = " is not trusted on this island."; + } + Visit visit = new Visit(); @ConfigSerializable @Getter public static class Visit { diff --git a/plugin/src/main/java/com/alttd/cometskyblock/island/Island.java b/plugin/src/main/java/com/alttd/cometskyblock/island/Island.java index b44b8d6..85f92dc 100644 --- a/plugin/src/main/java/com/alttd/cometskyblock/island/Island.java +++ b/plugin/src/main/java/com/alttd/cometskyblock/island/Island.java @@ -163,8 +163,8 @@ public class Island extends YamlConfiguration { return s == null || s.isEmpty() ? NILL_UUID : UUID.fromString(s); } - public boolean canBuild(UUID uuid) { - return owner().equals(uuid) || members().contains(uuid); + public boolean canInteract(UUID uuid) { + return owner().equals(uuid) || members().contains(uuid) || trustList().contains(uuid); } public void addMember(UUID uuid) { @@ -269,4 +269,30 @@ public class Island extends YamlConfiguration { } return contains("generator-level." + generatorTier.toString().toLowerCase(), true); } + + public List trustList() { + List trustList = getStringList("island.trust-list"); + return trustList.stream() + .map(this::stringToUUID) + .collect(Collectors.toList()); + } + + public void trustList(List trusList) { + set("island.trust-list", trusList.stream() + .map(uuid -> uuid == null ? "null" : uuid.toString()) + .collect(Collectors.toList())); + save(); + } + + public void trust(UUID uuid) { + List list = trustList(); + list.add(uuid); + trustList(list); + } + + public void untrust(UUID uuid) { + List list = trustList(); + list.remove(uuid); + trustList(list); + } }