Additional boilerplate, actually start implementing some stuff

This commit is contained in:
Esophose 2019-03-28 00:42:22 -06:00
parent 4192e5ba74
commit a267bd745c
24 changed files with 291 additions and 159 deletions

View File

@ -14,6 +14,9 @@ import org.bukkit.plugin.java.JavaPlugin;
import java.util.HashSet;
import java.util.Set;
/**
* @author Esophose
*/
public class UltimateTimber extends JavaPlugin {
private static final CommandSender console = Bukkit.getConsoleSender();
@ -22,11 +25,11 @@ public class UltimateTimber extends JavaPlugin {
private Set<Manager> managers;
private VersionAdapter versionAdapter;
private ChoppingManager choppingManager;
private CommandManager commandManager;
private ConfigurationManager configurationManager;
private DisabledWorldManager disabledWorldManager;
private HookManager hookManager;
private MessageManager messageManager;
private SettingsManager settingsManager;
private TreeAnimationManager treeAnimationManager;
private TreeDefinitionManager treeDefinitionManager;
private TreeDetectionManager treeDetectionManager;
@ -45,18 +48,17 @@ public class UltimateTimber extends JavaPlugin {
console.sendMessage(Methods.formatText("&7Action: &aEnabling&7..."));
this.managers = new HashSet<>();
this.choppingManager = this.registerManager(ChoppingManager.class);
this.commandManager = this.registerManager(CommandManager.class);
this.configurationManager = this.registerManager(ConfigurationManager.class);
this.disabledWorldManager = this.registerManager(DisabledWorldManager.class);
this.hookManager = this.registerManager(HookManager.class);
this.messageManager = this.registerManager(MessageManager.class);
this.settingsManager = this.registerManager(SettingsManager.class);
this.treeAnimationManager = this.registerManager(TreeAnimationManager.class);
this.treeDefinitionManager = this.registerManager(TreeDefinitionManager.class);
this.treeDetectionManager = this.registerManager(TreeDetectionManager.class);
this.treeFallManager = this.registerManager(TreeFallManager.class);
this.setupVersionAdapter();
this.reload();
new Metrics(this);
@ -110,6 +112,7 @@ public class UltimateTimber extends JavaPlugin {
try {
T newManager = managerClass.getConstructor(UltimateTimber.class).newInstance(this);
this.managers.add(newManager);
newManager.reload();
return newManager;
} catch (Exception ignored) {
return null;
@ -125,6 +128,24 @@ public class UltimateTimber extends JavaPlugin {
return this.versionAdapter;
}
/**
* Gets the chopping manager
*
* @return The ChoppingManager instance
*/
public ChoppingManager getChoppingManager() {
return this.choppingManager;
}
/**
* Gets the command manager
*
* @return The CommandManager instance
*/
public CommandManager getCommandManager() {
return this.commandManager;
}
/**
* Gets the configuration manager
*
@ -134,15 +155,6 @@ public class UltimateTimber extends JavaPlugin {
return configurationManager;
}
/**
* Gets the disabled world manager
*
* @return The DisabledWorldManager instance
*/
public DisabledWorldManager getDisabledWorldManager() {
return disabledWorldManager;
}
/**
* Gets the hook manager
*
@ -161,15 +173,6 @@ public class UltimateTimber extends JavaPlugin {
return messageManager;
}
/**
* Gets the settings manager
*
* @return The SettingsManager instance
*/
public SettingsManager getSettingsManager() {
return settingsManager;
}
/**
* Gets the tree animation manager
*

View File

@ -5,6 +5,7 @@ import com.songoda.ultimatetimber.tree.TreeBlock;
import com.songoda.ultimatetimber.tree.TreeBlockSet;
import com.songoda.ultimatetimber.tree.TreeDefinition;
import org.bukkit.block.Block;
import org.bukkit.block.BlockState;
import org.bukkit.inventory.ItemStack;
import java.util.Set;
@ -14,11 +15,20 @@ public interface VersionAdapter {
VersionAdapterType getVersionAdapterType();
/**
* Loads a Set of TreeDefinitions from the config
* Parses a String into a BlockState
*
* @return A Set of loaded TreeDefinitions
* @param blockStateString The String to parse
* @return A BlockState that the given String represents
*/
Set<TreeDefinition> loadTreeDefinitions();
BlockState parseBlockStateFromString(String blockStateString);
/**
* Parses a String into an ItemStack
*
* @param itemStackString The String to parse
* @return An ItemStack that the given String represents
*/
ItemStack parseItemStackFromString(String itemStackString);
/**
* Get the items that a tree block should drop when it breaks

View File

@ -7,6 +7,7 @@ import com.songoda.ultimatetimber.tree.TreeBlock;
import com.songoda.ultimatetimber.tree.TreeBlockSet;
import com.songoda.ultimatetimber.tree.TreeDefinition;
import org.bukkit.block.Block;
import org.bukkit.block.BlockState;
import org.bukkit.inventory.ItemStack;
import java.util.Set;
@ -19,7 +20,12 @@ public class CurrentAdapter implements VersionAdapter {
}
@Override
public Set<TreeDefinition> loadTreeDefinitions() {
public BlockState parseBlockStateFromString(String blockStateString) {
return null;
}
@Override
public ItemStack parseItemStackFromString(String itemStackString) {
return null;
}

View File

@ -7,6 +7,7 @@ import com.songoda.ultimatetimber.tree.TreeBlock;
import com.songoda.ultimatetimber.tree.TreeBlockSet;
import com.songoda.ultimatetimber.tree.TreeDefinition;
import org.bukkit.block.Block;
import org.bukkit.block.BlockState;
import org.bukkit.inventory.ItemStack;
import java.util.Set;
@ -19,7 +20,12 @@ public class LegacyAdapter implements VersionAdapter {
}
@Override
public Set<TreeDefinition> loadTreeDefinitions() {
public BlockState parseBlockStateFromString(String blockStateString) {
return null;
}
@Override
public ItemStack parseItemStackFromString(String itemStackString) {
return null;
}

View File

@ -1,19 +0,0 @@
package com.songoda.ultimatetimber.commands;
import org.bukkit.command.CommandSender;
import com.songoda.ultimatetimber.UltimateTimber;
import com.songoda.ultimatetimber.old_code.CustomLoot;
import com.songoda.ultimatetimber.utils.Methods;
class ReloadCommand {
static void reloadConfig(CommandSender commandSender) {
UltimateTimber plugin = UltimateTimber.getInstance();
plugin.reloadConfig();
plugin.reloadValidWorlds();
CustomLoot.initializeCustomItems();
commandSender.sendMessage(Methods.formatText(plugin.getPrefix() + " &7Configuration reloaded"));
}
}

View File

@ -1,18 +0,0 @@
package com.songoda.ultimatetimber.commands;
import com.songoda.ultimatetimber.UltimateTimber;
import com.songoda.ultimatetimber.utils.Methods;
import org.bukkit.entity.Player;
public class ToggleCommand {
public static void toggleChopping(Player player) {
if (UltimateTimber.getInstance().toggleChopping(player)) {
player.sendMessage(Methods.formatText(UltimateTimber.getInstance().getPrefix() + " Chopping Mode: &aEnabled"));
} else {
player.sendMessage(Methods.formatText(UltimateTimber.getInstance().getPrefix() + " Chopping Mode: &cDisabled"));
}
}
}

View File

@ -0,0 +1,55 @@
package com.songoda.ultimatetimber.manager;
import com.songoda.ultimatetimber.UltimateTimber;
import org.bukkit.entity.Player;
import java.util.HashSet;
import java.util.Set;
import java.util.UUID;
public class ChoppingManager extends Manager {
private Set<UUID> disabledPlayers;
public ChoppingManager(UltimateTimber ultimateTimber) {
super(ultimateTimber);
this.disabledPlayers = new HashSet<>();
}
@Override
public void reload() {
}
@Override
public void disable() {
this.disabledPlayers.clear();
}
/**
* Toggles a player's chopping status
*
* @param player The player to toggle
* @return True if the player has chopping enabled, or false if they have it disabled
*/
public boolean togglePlayer(Player player) {
if (this.disabledPlayers.contains(player.getUniqueId())) {
this.disabledPlayers.remove(player.getUniqueId());
return true;
} else {
this.disabledPlayers.add(player.getUniqueId());
return false;
}
}
/**
* Checks if a player has chopping enabled
*
* @param player The player to check
* @return True if the player has chopping enabled, or false if they have it disabled
*/
public boolean isChopping(Player player) {
return !this.disabledPlayers.contains(player.getUniqueId());
}
}

View File

@ -1,46 +1,67 @@
package com.songoda.ultimatetimber.commands;
package com.songoda.ultimatetimber.manager;
import com.songoda.ultimatetimber.UltimateTimber;
import com.songoda.ultimatetimber.utils.Methods;
import org.bukkit.command.*;
import org.bukkit.entity.Player;
import org.bukkit.util.StringUtil;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.command.TabCompleter;
import org.bukkit.entity.Player;
import org.bukkit.util.StringUtil;
public class CommandManager extends Manager implements CommandExecutor, TabCompleter {
import com.songoda.ultimatetimber.UltimateTimber;
import com.songoda.ultimatetimber.utils.Methods;
public CommandManager(UltimateTimber ultimateTimber) {
super(ultimateTimber);
public class CommandHandler implements CommandExecutor, TabCompleter {
PluginCommand command = ultimateTimber.getCommand("ultimatetimber");
command.setExecutor(this);
command.setTabCompleter(this);
}
@Override
public void reload() {
}
@Override
public void disable() {
}
@Override
public boolean onCommand(CommandSender commandSender, Command command, String s, String[] args) {
if (args.length > 0) {
if (args[0].equalsIgnoreCase("reload")) {
if (commandSender instanceof Player && !permCheck((Player) commandSender, "ultimatetimber.reload")) {
if (commandSender instanceof Player && !permCheck((Player) commandSender, "ultimatetimber.reload"))
return true;
}
ReloadCommand.reloadConfig(commandSender);
UltimateTimber.getInstance().reload();
commandSender.sendMessage(Methods.formatText(UltimateTimber.getInstance().getMessageManager().getPrefix() + " &7Configuration reloaded"));
return true;
} else if (args[0].equalsIgnoreCase("toggle")) {
if (commandSender instanceof Player) {
if (!permCheck((Player) commandSender, "ultimatetimber.toggle")) {
return true;
}
ToggleCommand.toggleChopping((Player) commandSender);
if (!(commandSender instanceof Player)) {
commandSender.sendMessage(Methods.formatText("&cConsole cannot toggle chopping mode!"));
return true;
}
commandSender.sendMessage(Methods.formatText("&cConsole cannot toggle chopping mode!"));
if (!permCheck((Player) commandSender, "ultimatetimber.toggle"))
return true;
if (UltimateTimber.getInstance().getChoppingManager().togglePlayer((Player)commandSender)) {
commandSender.sendMessage(Methods.formatText(UltimateTimber.getInstance().getMessageManager().getPrefix() + " Chopping Mode: &aEnabled"));
} else {
commandSender.sendMessage(Methods.formatText(UltimateTimber.getInstance().getMessageManager().getPrefix() + " Chopping Mode: &cDisabled"));
}
return true;
}
}
commandSender.sendMessage("");
commandSender.sendMessage(Methods.formatText(UltimateTimber.getInstance().getPrefix() + " &7Version " + UltimateTimber.getInstance().getDescription().getVersion() + " Created with <3 by &5&l&oSongoda"));
commandSender.sendMessage(Methods.formatText(UltimateTimber.getInstance().getMessageManager().getPrefix() + " &7Version " + UltimateTimber.getInstance().getDescription().getVersion() + " Created with <3 by &5&l&oSongoda"));
commandSender.sendMessage(Methods.formatText("&8 - &a/ut reload &7 - Reloads the config."));
commandSender.sendMessage(Methods.formatText("&8 - &a/ut toggle &7 - Toggles your chopping mode"));
commandSender.sendMessage("");
@ -59,20 +80,20 @@ public class CommandHandler implements CommandExecutor, TabCompleter {
@Override
public List<String> onTabComplete(CommandSender commandSender, Command command, String s, String[] args) {
List<String> completions = new ArrayList<>();
if (args.length == 0 || args.length > 1)
if (args.length == 0 || args.length > 1)
return completions;
Set<String> possibleCompletions = new HashSet<>();
if (commandSender.hasPermission("ultimatetimber.reload"))
if (commandSender.hasPermission("ultimatetimber.reload"))
possibleCompletions.add("reload");
if (commandSender.hasPermission("ultimatetimber.toggle") && commandSender instanceof Player)
possibleCompletions.add("toggle");
StringUtil.copyPartialMatches(args[0], possibleCompletions, completions);
return completions;
}

View File

@ -1,21 +1,140 @@
package com.songoda.ultimatetimber.manager;
import com.songoda.ultimatetimber.UltimateTimber;
import com.songoda.ultimatetimber.adapter.VersionAdapterType;
import org.bukkit.configuration.file.YamlConfiguration;
import java.io.File;
import java.util.List;
public class ConfigurationManager extends Manager {
public enum Setting {
DISABLED_WORLDS,
MAX_LOGS_PER_CHOP,
LEAVES_REQUIRED_FOR_TREE,
REALISTIC_TOOL_DAMAGE,
BREAK_ENTIRE_TREE_BASE,
DESTROY_INITIATED_BLOCK,
ONLY_DETECT_LOGS_UPWARDS,
ONLY_TOPPLE_WHILE_SNEAKING,
ALLOW_CREATIVE_MODE,
REQUIRE_CHOP_PERMISSION,
IGNORE_REQUIRED_TOOLS,
REPLANT_SAPLINGS,
REPLANT_SAPLINGS_COOLDOWN,
FALLING_BLOCKS_REPLANT_SAPLINGS,
FALLING_BLOCKS_REPLANT_SAPLINGS_CHANCE,
FALLING_BLOCKS_DEAL_DAMAGE,
FALLING_BLOCK_DAMAGE,
ADD_ITEMS_TO_INVENTORY,
USE_CUSTOM_SOUNDS,
SCATTER_TREE_BLOCKS_ON_GROUND,
MIX_ALL_TREE_TYPES;
private Object value = null;
/**
* Gets the setting as a boolean
*
* @return The setting as a boolean
*/
public boolean getBoolean() {
this.loadValue();
return (boolean)value;
}
/**
* Gets the setting as an int
*
* @return The setting as an int
*/
public int getInt() {
this.loadValue();
return (int)value;
}
/**
* Gets the setting as a string list
*
* @return The setting as a string list
*/
@SuppressWarnings("unchecked")
public List<String> getStringList() {
this.loadValue();
return (List<String>)value;
}
/**
* Resets the cached value
*/
public void reset() {
this.value = null;
}
/**
* Loads the value from the config and caches it if it isn't set yet
*/
private void loadValue() {
if (this.value == null)
value = UltimateTimber.getInstance().getConfigurationManager().getConfig().get(this.getNameAsKey());
}
/**
* Gets the name of this Setting as a config-compatible key
*
* @return The key in the config
*/
private String getNameAsKey() {
return this.name().replace("_", "-").toLowerCase();
}
}
private YamlConfiguration configuration;
public ConfigurationManager(UltimateTimber ultimateTimber) {
super(ultimateTimber);
}
@Override
public void reload() {
File configFile = new File(ultimateTimber.getDataFolder() + "/config.yml");
// If an old config still exists, rename it so it doesn't interfere
if (configFile.exists() && ultimateTimber.getConfig().get("server-type") == null) {
File renameConfigTo = new File(ultimateTimber.getDataFolder() + "/config-old.yml");
configFile.renameTo(renameConfigTo);
configFile = new File(ultimateTimber.getDataFolder() + "/config.yml");
}
// Create the new config if it doesn't exist
if (!configFile.exists()) {
boolean isCurrentConfig = ultimateTimber.getVersionAdapter().getVersionAdapterType() == VersionAdapterType.CURRENT;
String newConfigName = "config-" + (isCurrentConfig ? "current" : "legacy") + ".yml";
File newConfigFile = new File(ultimateTimber.getDataFolder() + "/" + newConfigName);
ultimateTimber.saveResource(newConfigName, false);
newConfigFile.renameTo(configFile);
}
this.configuration = YamlConfiguration.loadConfiguration(configFile);
for (Setting setting : Setting.values())
setting.reset();
}
@Override
public void disable() {
for (Setting setting : Setting.values())
setting.reset();
}
/**
* Gets the config.yml as a YamlConfiguration
*
* @return The YamlConfiguration of the config.yml
*/
public YamlConfiguration getConfig() {
return this.configuration;
}
}

View File

@ -1,27 +0,0 @@
package com.songoda.ultimatetimber.manager;
import com.songoda.ultimatetimber.UltimateTimber;
import java.util.HashSet;
import java.util.Set;
public class DisabledWorldManager extends Manager {
private Set<String> disabledWorldNames;
public DisabledWorldManager(UltimateTimber ultimateTimber) {
super(ultimateTimber);
this.disabledWorldNames = new HashSet<>();
}
@Override
public void reload() {
}
@Override
public void disable() {
}
}

View File

@ -1,21 +0,0 @@
package com.songoda.ultimatetimber.manager;
import com.songoda.ultimatetimber.UltimateTimber;
public class SettingsManager extends Manager {
public SettingsManager(UltimateTimber ultimateTimber) {
super(ultimateTimber);
}
@Override
public void reload() {
}
@Override
public void disable() {
}
}

View File

@ -20,7 +20,7 @@ public class TreeDefinitionManager extends Manager {
public void reload() {
this.treeDefinitions.clear();
this.treeDefinitions = this.ultimateTimber.getVersionAdapter().loadTreeDefinitions();
ConfigurationManager configurationManager = ultimateTimber.getConfigurationManager();
}
@Override

View File

@ -1,7 +1,6 @@
package com.songoda.ultimatetimber.old_code;
import com.songoda.ultimatetimber.UltimateTimber;
import com.songoda.ultimatetimber.configurations.DefaultConfig;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Material;

View File

@ -1,4 +1,4 @@
package com.songoda.ultimatetimber.configurations;
package com.songoda.ultimatetimber.old_code;
import com.songoda.ultimatetimber.UltimateTimber;
import org.bukkit.Bukkit;

View File

@ -1,7 +1,6 @@
package com.songoda.ultimatetimber.old_code;
import com.songoda.ultimatetimber.UltimateTimber;
import com.songoda.ultimatetimber.configurations.DefaultConfig;
import org.bukkit.GameMode;
import org.bukkit.Material;
import org.bukkit.configuration.file.FileConfiguration;

View File

@ -12,7 +12,6 @@ import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.util.Vector;
import com.songoda.ultimatetimber.UltimateTimber;
import com.songoda.ultimatetimber.configurations.DefaultConfig;
import com.songoda.ultimatetimber.utils.LogToLeafConverter;
public class TreeChecker {

View File

@ -20,7 +20,6 @@ import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.util.Vector;
import com.songoda.ultimatetimber.UltimateTimber;
import com.songoda.ultimatetimber.configurations.DefaultConfig;
public class TreeFallAnimation implements Listener, Runnable {

View File

@ -12,7 +12,6 @@ import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockBreakEvent;
import com.songoda.ultimatetimber.UltimateTimber;
import com.songoda.ultimatetimber.configurations.DefaultConfig;
import com.songoda.ultimatetimber.events.TreeFallEvent;
import com.songoda.ultimatetimber.events.TreeFellEvent;
import com.songoda.ultimatetimber.manager.HookManager;

View File

@ -13,7 +13,6 @@ import org.bukkit.entity.FallingBlock;
import org.bukkit.util.Vector;
import com.songoda.ultimatetimber.UltimateTimber;
import com.songoda.ultimatetimber.configurations.DefaultConfig;
import com.songoda.ultimatetimber.utils.WoodToLogConverter;
class TreeReplant {

View File

@ -81,8 +81,10 @@ public class TreeBlockSet<BlockType> implements Collection {
}
@Override
@SuppressWarnings("unchecked")
public boolean add(Object o) {
ITreeBlock<BlockType> treeBlock = (ITreeBlock<BlockType>) o;
if (!(o instanceof ITreeBlock)) return false;
ITreeBlock treeBlock = (ITreeBlock) o;
switch (treeBlock.getTreeBlockType()) {
case LOG:
return this.logBlocks.add(treeBlock);
@ -94,7 +96,8 @@ public class TreeBlockSet<BlockType> implements Collection {
@Override
public boolean remove(Object o) {
ITreeBlock<BlockType> treeBlock = (ITreeBlock<BlockType>) o;
if (!(o instanceof ITreeBlock)) return false;
ITreeBlock treeBlock = (ITreeBlock) o;
switch (treeBlock.getTreeBlockType()) {
case LOG:
return this.logBlocks.remove(treeBlock);

View File

@ -1,12 +1,12 @@
package com.songoda.ultimatetimber.tree.animation;
import com.songoda.ultimatetimber.tree.TreeBlock;
import com.songoda.ultimatetimber.tree.TreeBlockSet;
import com.songoda.ultimatetimber.tree.TreeDefinition;
import org.bukkit.block.Block;
public class TreeAnimationChaos extends TreeAnimation {
public TreeAnimationChaos(TreeBlockSet<TreeBlock> treeBlocks, TreeDefinition treeDefinition) {
public TreeAnimationChaos(TreeBlockSet<Block> treeBlocks, TreeDefinition treeDefinition) {
super(TreeAnimationType.CHAOS, treeBlocks, treeDefinition);
}

View File

@ -1,12 +1,12 @@
package com.songoda.ultimatetimber.tree.animation;
import com.songoda.ultimatetimber.tree.TreeBlock;
import com.songoda.ultimatetimber.tree.TreeBlockSet;
import com.songoda.ultimatetimber.tree.TreeDefinition;
import org.bukkit.block.Block;
public class TreeAnimationDisintegrate extends TreeAnimation {
public TreeAnimationDisintegrate(TreeBlockSet<TreeBlock> treeBlocks, TreeDefinition treeDefinition) {
public TreeAnimationDisintegrate(TreeBlockSet<Block> treeBlocks, TreeDefinition treeDefinition) {
super(TreeAnimationType.DISINTIGRATE, treeBlocks, treeDefinition);
}

View File

@ -1,12 +1,12 @@
package com.songoda.ultimatetimber.tree.animation;
import com.songoda.ultimatetimber.tree.TreeBlock;
import com.songoda.ultimatetimber.tree.TreeBlockSet;
import com.songoda.ultimatetimber.tree.TreeDefinition;
import org.bukkit.block.Block;
public class TreeAnimationFancy extends TreeAnimation {
public TreeAnimationFancy(TreeBlockSet<TreeBlock> treeBlocks, TreeDefinition treeDefinition) {
public TreeAnimationFancy(TreeBlockSet<Block> treeBlocks, TreeDefinition treeDefinition) {
super(TreeAnimationType.FANCY, treeBlocks, treeDefinition);
}

View File

@ -1,12 +1,12 @@
package com.songoda.ultimatetimber.tree.animation;
import com.songoda.ultimatetimber.tree.TreeBlock;
import com.songoda.ultimatetimber.tree.TreeBlockSet;
import com.songoda.ultimatetimber.tree.TreeDefinition;
import org.bukkit.block.Block;
public class TreeAnimationNone extends TreeAnimation {
public TreeAnimationNone(TreeBlockSet<TreeBlock> treeBlocks, TreeDefinition treeDefinition) {
public TreeAnimationNone(TreeBlockSet<Block> treeBlocks, TreeDefinition treeDefinition) {
super(TreeAnimationType.NONE, treeBlocks, treeDefinition);
}