From c2cdae13b8a002ef9fbdb56f38d7ae5465ee85b2 Mon Sep 17 00:00:00 2001 From: Sam Date: Mon, 30 Dec 2019 15:59:51 +0000 Subject: [PATCH] Start reward work --- gradlew | 22 +++---------------- gradlew.bat | 18 +-------------- .../islandearth/rpgregions/RPGRegions.java | 21 ++++++++++++++++-- .../worldguard/WorldGuardIntegration.java | 8 +++++++ .../commands/RPGRegionsCommand.java | 15 +++++++++++++ .../managers/RPGRegionsManagers.java | 8 +++++++ .../managers/data/RPGRegionsCache.java | 6 +++++ .../rpgregions/managers/data/StorageType.java | 2 +- .../rpgregions/rewards/DiscoveryReward.java | 18 +++++++++++++++ .../rpgregions/rewards/ExperienceReward.java | 18 +++++++++++++++ .../rpgregions/rewards/ItemReward.java | 21 ++++++++++++++++++ 11 files changed, 118 insertions(+), 39 deletions(-) create mode 100644 src/main/java/net/islandearth/rpgregions/commands/RPGRegionsCommand.java create mode 100644 src/main/java/net/islandearth/rpgregions/managers/data/RPGRegionsCache.java create mode 100644 src/main/java/net/islandearth/rpgregions/rewards/DiscoveryReward.java create mode 100644 src/main/java/net/islandearth/rpgregions/rewards/ExperienceReward.java create mode 100644 src/main/java/net/islandearth/rpgregions/rewards/ItemReward.java diff --git a/gradlew b/gradlew index 83f2acf..af6708f 100644 --- a/gradlew +++ b/gradlew @@ -1,21 +1,5 @@ #!/usr/bin/env sh -# -# Copyright 2015 the original author or authors. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - ############################################################################## ## ## Gradle start up script for UN*X @@ -44,7 +28,7 @@ APP_NAME="Gradle" APP_BASE_NAME=`basename "$0"` # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' +DEFAULT_JVM_OPTS='"-Xmx64m"' # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD="maximum" @@ -125,8 +109,8 @@ if $darwin; then GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" fi -# For Cygwin or MSYS, switch paths to Windows format before running java -if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then +# For Cygwin, switch paths to Windows format before running java +if $cygwin ; then APP_HOME=`cygpath --path --mixed "$APP_HOME"` CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` JAVACMD=`cygpath --unix "$JAVACMD"` diff --git a/gradlew.bat b/gradlew.bat index 9618d8d..6d57edc 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -1,19 +1,3 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - @if "%DEBUG%" == "" @echo off @rem ########################################################################## @rem @@ -30,7 +14,7 @@ set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" +set DEFAULT_JVM_OPTS="-Xmx64m" @rem Find java.exe if defined JAVA_HOME goto findJavaFromJavaHome diff --git a/src/main/java/net/islandearth/rpgregions/RPGRegions.java b/src/main/java/net/islandearth/rpgregions/RPGRegions.java index 7cea4f2..5b79ee2 100644 --- a/src/main/java/net/islandearth/rpgregions/RPGRegions.java +++ b/src/main/java/net/islandearth/rpgregions/RPGRegions.java @@ -1,5 +1,8 @@ package net.islandearth.rpgregions; +import co.aikar.idb.DB; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; import net.islandearth.languagy.language.LanguagyImplementation; import net.islandearth.languagy.language.LanguagyPluginHook; import net.islandearth.languagy.language.Translator; @@ -8,6 +11,7 @@ import net.islandearth.rpgregions.listener.ConnectionListener; import net.islandearth.rpgregions.listener.MoveListener; import net.islandearth.rpgregions.listener.RegionListener; import net.islandearth.rpgregions.managers.RPGRegionsManagers; +import net.islandearth.rpgregions.rewards.DiscoveryReward; import net.islandearth.rpgregions.translation.Translations; import org.bukkit.Bukkit; import org.bukkit.Material; @@ -16,8 +20,11 @@ import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.java.JavaPlugin; -public final class RPGRegions extends JavaPlugin implements RPGRegionsAPI, LanguagyPluginHook { +import java.util.HashMap; +import java.util.Map; +public final class RPGRegions extends JavaPlugin implements RPGRegionsAPI, LanguagyPluginHook { + private RPGRegionsManagers managers; private static RPGRegions plugin; @@ -38,7 +45,13 @@ public final class RPGRegions extends JavaPlugin implements RPGRegionsAPI, Langu @Override public void onDisable() { - // Plugin shutdown logic + // Save all player data (quit event not called for shutdown) + Bukkit.getOnlinePlayers().forEach(player -> { + this.getManagers().getStorageManager().removeCachedAccount(player.getUniqueId()); + }); + + // Close database connection + DB.close(); } @Override @@ -86,4 +99,8 @@ public final class RPGRegions extends JavaPlugin implements RPGRegionsAPI, Langu public void onLanguagyHook() { translator.setDisplay(Material.MAP); } + + public Gson getGson() { + return new GsonBuilder().setPrettyPrinting().serializeNulls().create(); + } } diff --git a/src/main/java/net/islandearth/rpgregions/api/integrations/worldguard/WorldGuardIntegration.java b/src/main/java/net/islandearth/rpgregions/api/integrations/worldguard/WorldGuardIntegration.java index 40ed5fd..675b937 100644 --- a/src/main/java/net/islandearth/rpgregions/api/integrations/worldguard/WorldGuardIntegration.java +++ b/src/main/java/net/islandearth/rpgregions/api/integrations/worldguard/WorldGuardIntegration.java @@ -4,13 +4,21 @@ import com.sk89q.worldedit.bukkit.BukkitAdapter; import com.sk89q.worldedit.math.BlockVector3; import com.sk89q.worldguard.WorldGuard; import com.sk89q.worldguard.protection.regions.ProtectedRegion; +import net.islandearth.rpgregions.RPGRegions; import net.islandearth.rpgregions.api.integrations.IntegrationManager; import org.bukkit.Location; +import java.util.HashSet; import java.util.Set; public class WorldGuardIntegration implements IntegrationManager { + private final RPGRegions plugin; + + public WorldGuardIntegration(RPGRegions plugin) { + this.plugin = plugin; + } + @Override public boolean isInRegion(Location location) { return WorldGuard.getInstance().getPlatform() diff --git a/src/main/java/net/islandearth/rpgregions/commands/RPGRegionsCommand.java b/src/main/java/net/islandearth/rpgregions/commands/RPGRegionsCommand.java new file mode 100644 index 0000000..c0cdefe --- /dev/null +++ b/src/main/java/net/islandearth/rpgregions/commands/RPGRegionsCommand.java @@ -0,0 +1,15 @@ +package net.islandearth.rpgregions.commands; + +import co.aikar.commands.BaseCommand; +import co.aikar.commands.annotation.CommandAlias; +import co.aikar.commands.annotation.Default; +import org.bukkit.entity.Player; + +@CommandAlias("rpgregions") +public class RPGRegionsCommand extends BaseCommand { + + @Default + public void onDefault(Player player, String[] args) { + + } +} diff --git a/src/main/java/net/islandearth/rpgregions/managers/RPGRegionsManagers.java b/src/main/java/net/islandearth/rpgregions/managers/RPGRegionsManagers.java index 1492993..8caeee8 100644 --- a/src/main/java/net/islandearth/rpgregions/managers/RPGRegionsManagers.java +++ b/src/main/java/net/islandearth/rpgregions/managers/RPGRegionsManagers.java @@ -3,6 +3,7 @@ package net.islandearth.rpgregions.managers; import net.islandearth.rpgregions.RPGRegions; import net.islandearth.rpgregions.api.integrations.IntegrationManager; import net.islandearth.rpgregions.api.integrations.IntegrationType; +import net.islandearth.rpgregions.managers.data.RPGRegionsCache; import net.islandearth.rpgregions.managers.data.StorageManager; import net.islandearth.rpgregions.managers.data.StorageType; @@ -10,6 +11,7 @@ public class RPGRegionsManagers { private StorageManager storageManager; private IntegrationManager integrationManager; + private RPGRegionsCache regionsCache; public RPGRegionsManagers(RPGRegions plugin) { StorageType.valueOf(plugin.getConfig().getString("settings.storage.mode").toUpperCase()) @@ -21,6 +23,8 @@ public class RPGRegionsManagers { .get() .ifPresent(integrationManager1 -> integrationManager = integrationManager1); if (integrationManager == null) throw new IllegalStateException("Could not find StorageManager!"); + + this.regionsCache = new RPGRegionsCache(plugin); } public StorageManager getStorageManager() { @@ -30,4 +34,8 @@ public class RPGRegionsManagers { public IntegrationManager getIntegrationManager() { return integrationManager; } + + public RPGRegionsCache getRegionsCache() { + return regionsCache; + } } diff --git a/src/main/java/net/islandearth/rpgregions/managers/data/RPGRegionsCache.java b/src/main/java/net/islandearth/rpgregions/managers/data/RPGRegionsCache.java new file mode 100644 index 0000000..6106845 --- /dev/null +++ b/src/main/java/net/islandearth/rpgregions/managers/data/RPGRegionsCache.java @@ -0,0 +1,6 @@ +package net.islandearth.rpgregions.managers.data; + +public class RPGRegionsCache { + + +} diff --git a/src/main/java/net/islandearth/rpgregions/managers/data/StorageType.java b/src/main/java/net/islandearth/rpgregions/managers/data/StorageType.java index 02bb43c..fd19b20 100644 --- a/src/main/java/net/islandearth/rpgregions/managers/data/StorageType.java +++ b/src/main/java/net/islandearth/rpgregions/managers/data/StorageType.java @@ -24,7 +24,7 @@ public enum StorageType { plugin.getLogger().info("Loading StorageManager implementation..."); StorageManager generatedClazz = null; try { - generatedClazz = clazz.getConstructor().newInstance(); + generatedClazz = clazz.getConstructor(RPGRegions.class).newInstance(JavaPlugin.getPlugin(RPGRegions.class)); plugin.getLogger().info("Loaded StorageManager implementation " + clazz.getName() + "."); } catch (InstantiationException | InvocationTargetException | NoSuchMethodException | IllegalAccessException e) { plugin.getLogger().severe("Unable to load StorageManager (" + clazz.getName() + ")! Plugin will disable."); diff --git a/src/main/java/net/islandearth/rpgregions/rewards/DiscoveryReward.java b/src/main/java/net/islandearth/rpgregions/rewards/DiscoveryReward.java new file mode 100644 index 0000000..fabbb5d --- /dev/null +++ b/src/main/java/net/islandearth/rpgregions/rewards/DiscoveryReward.java @@ -0,0 +1,18 @@ +package net.islandearth.rpgregions.rewards; + +import org.bukkit.entity.Player; + +public abstract class DiscoveryReward { + + private final String region; + + DiscoveryReward(String region) { + this.region = region; + } + + public String getRegion() { + return region; + } + + abstract void award(Player player); +} diff --git a/src/main/java/net/islandearth/rpgregions/rewards/ExperienceReward.java b/src/main/java/net/islandearth/rpgregions/rewards/ExperienceReward.java new file mode 100644 index 0000000..c61aad0 --- /dev/null +++ b/src/main/java/net/islandearth/rpgregions/rewards/ExperienceReward.java @@ -0,0 +1,18 @@ +package net.islandearth.rpgregions.rewards; + +import org.bukkit.entity.Player; + +public class ExperienceReward extends DiscoveryReward { + + private final int xp; + + ExperienceReward(String region, int xp) { + super(region); + this.xp = xp; + } + + @Override + void award(Player player) { + player.giveExp(xp); + } +} diff --git a/src/main/java/net/islandearth/rpgregions/rewards/ItemReward.java b/src/main/java/net/islandearth/rpgregions/rewards/ItemReward.java new file mode 100644 index 0000000..fcc482a --- /dev/null +++ b/src/main/java/net/islandearth/rpgregions/rewards/ItemReward.java @@ -0,0 +1,21 @@ +package net.islandearth.rpgregions.rewards; + +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; + +public class ItemReward extends DiscoveryReward { + + private final ItemStack item; + + ItemReward(String region, ItemStack item) { + super(region); + this.item = item; + } + + @Override + void award(Player player) { + player.getInventory().addItem(item).forEach((pos, item) -> { + player.getLocation().getWorld().dropItemNaturally(player.getLocation(), item); + }); + } +}