diff --git a/rpgregions/src/main/java/net/islandearth/rpgregions/RPGRegions.java b/rpgregions/src/main/java/net/islandearth/rpgregions/RPGRegions.java index 0f20eb49e38326f241971d545abb5720fad44271..0f87e293d8776509e2a9bc2c5e8e95c3a84a02d4 100644 --- a/rpgregions/src/main/java/net/islandearth/rpgregions/RPGRegions.java +++ b/rpgregions/src/main/java/net/islandearth/rpgregions/RPGRegions.java @@ -44,7 +44,9 @@ import net.islandearth.rpgregions.rewards.MessageReward; import net.islandearth.rpgregions.rewards.MoneyReward; import net.islandearth.rpgregions.rewards.PlayerCommandReward; import net.islandearth.rpgregions.rewards.QuestReward; +import net.islandearth.rpgregions.rewards.RegionDiscoverReward; import net.islandearth.rpgregions.rewards.RegionRewardRegistry; +import net.islandearth.rpgregions.rewards.TeleportReward; import net.islandearth.rpgregions.translation.Translations; import net.islandearth.rpgregions.utils.XMaterial; import net.islandearth.rpgregions.utils.XSound; @@ -268,6 +270,8 @@ public final class RPGRegions extends JavaPlugin implements IRPGRegionsAPI, Lang registry.register(PlayerCommandReward.class); registry.register(AlonsoLevelReward.class); registry.register(QuestReward.class); + registry.register(TeleportReward.class); + registry.register(RegionDiscoverReward.class); } private void registerRequirements() { diff --git a/rpgregions/src/main/java/net/islandearth/rpgregions/gui/element/LocationGuiFieldElement.java b/rpgregions/src/main/java/net/islandearth/rpgregions/gui/element/LocationGuiFieldElement.java new file mode 100644 index 0000000000000000000000000000000000000000..520b09cf4529f02a0d97b9374d2598a682151de5 --- /dev/null +++ b/rpgregions/src/main/java/net/islandearth/rpgregions/gui/element/LocationGuiFieldElement.java @@ -0,0 +1,34 @@ +package net.islandearth.rpgregions.gui.element; + +import net.islandearth.rpgregions.gui.IGuiEditable; +import org.apache.commons.lang.reflect.FieldUtils; +import org.bukkit.Location; +import org.bukkit.entity.Player; + +import java.lang.reflect.Field; +import java.util.Arrays; +import java.util.List; +import java.util.concurrent.CompletableFuture; + +public class LocationGuiFieldElement implements IGuiFieldElement { + + @Override + public CompletableFuture<Void> set(Player player, IGuiEditable guiEditable, Field field, Object value) { + try { + FieldUtils.writeField(field, guiEditable, player.getLocation()); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + return CompletableFuture.completedFuture(null); + } + + @Override + public List<Class<?>> getType() { + return Arrays.asList(Location.class); + } + + @Override + public boolean needsValue() { + return true; + } +} diff --git a/rpgregions/src/main/java/net/islandearth/rpgregions/managers/RPGRegionsManagers.java b/rpgregions/src/main/java/net/islandearth/rpgregions/managers/RPGRegionsManagers.java index d17c0b0229f08e40f4d29ea1b6ecf48f3c0f7a72..91d0165ba506a8d26aef5ecd83bbf9f51bc4ecdf 100644 --- a/rpgregions/src/main/java/net/islandearth/rpgregions/managers/RPGRegionsManagers.java +++ b/rpgregions/src/main/java/net/islandearth/rpgregions/managers/RPGRegionsManagers.java @@ -13,6 +13,7 @@ import net.islandearth.rpgregions.gui.element.GuiFieldElementRegistry; import net.islandearth.rpgregions.gui.element.IGuiFieldElementRegistry; import net.islandearth.rpgregions.gui.element.IntegerGuiFieldElement; import net.islandearth.rpgregions.gui.element.ItemStackGuiFieldElement; +import net.islandearth.rpgregions.gui.element.LocationGuiFieldElement; import net.islandearth.rpgregions.managers.data.IRPGRegionsCache; import net.islandearth.rpgregions.managers.data.IStorageManager; import net.islandearth.rpgregions.managers.data.RPGRegionsCache; @@ -152,6 +153,7 @@ public class RPGRegionsManagers implements IRPGRegionsManagers { guiFieldElementRegistry.register(new BooleanGuiFieldElement()); guiFieldElementRegistry.register(new IntegerGuiFieldElement()); guiFieldElementRegistry.register(new ItemStackGuiFieldElement()); + guiFieldElementRegistry.register(new LocationGuiFieldElement()); } @Override diff --git a/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/RegionDiscoverReward.java b/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/RegionDiscoverReward.java new file mode 100644 index 0000000000000000000000000000000000000000..80b33264fbda1bfe70792c39b6104be989499a7e --- /dev/null +++ b/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/RegionDiscoverReward.java @@ -0,0 +1,37 @@ +package net.islandearth.rpgregions.rewards; + +import net.islandearth.rpgregions.api.IRPGRegionsAPI; +import net.islandearth.rpgregions.api.RPGRegionsAPI; +import net.islandearth.rpgregions.gui.GuiEditable; +import net.islandearth.rpgregions.managers.data.region.WorldDiscovery; +import org.bukkit.entity.Player; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +public class RegionDiscoverReward extends DiscoveryReward { + + @GuiEditable("Region") + private String region; + + public RegionDiscoverReward(IRPGRegionsAPI api) { + super(api); + } + + @Override + public String getName() { + return "Region Discovery"; + } + + @Override + public void award(Player player) { + IRPGRegionsAPI api = RPGRegionsAPI.getAPI(); + api.getManagers().getStorageManager().getAccount(player.getUniqueId()).thenAccept(account -> { + LocalDateTime date = LocalDateTime.now(); + DateTimeFormatter format = DateTimeFormatter.ofPattern(api.getConfig().getString("settings.server.discoveries.date.format")); + + String formattedDate = date.format(format); + account.addDiscovery(new WorldDiscovery(formattedDate, region)); + }); + } +} diff --git a/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/TeleportReward.java b/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/TeleportReward.java new file mode 100644 index 0000000000000000000000000000000000000000..df5be2434a05c96190eeddeef153df8e11ee3464 --- /dev/null +++ b/rpgregions/src/main/java/net/islandearth/rpgregions/rewards/TeleportReward.java @@ -0,0 +1,37 @@ +package net.islandearth.rpgregions.rewards; + +import io.papermc.lib.PaperLib; +import net.islandearth.rpgregions.api.IRPGRegionsAPI; +import net.islandearth.rpgregions.gui.GuiEditable; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.entity.Player; + +public class TeleportReward extends DiscoveryReward { + + @GuiEditable("Teleport location") + private Location location; + + public TeleportReward(IRPGRegionsAPI api) { + super(api); + this.location = Bukkit.getWorlds().get(0).getSpawnLocation(); + } + + public Location getLocation() { + return location; + } + + public void setLocation(Location location) { + this.location = location; + } + + @Override + public String getName() { + return "Teleport"; + } + + @Override + public void award(Player player) { + PaperLib.teleportAsync(player, location); + } +}