Added 1.16 support.

This commit is contained in:
Brianna 2020-06-28 19:18:23 -05:00
parent 5e1a913ac4
commit e020a96488
11 changed files with 205 additions and 181 deletions

View File

@ -25,5 +25,11 @@
<version>${project.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.songoda</groupId>
<artifactId>SongodaCore</artifactId>
<version>LATEST</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>

View File

@ -1,5 +1,6 @@
package com.songoda.ultimatetimber.adapter.current;
import com.songoda.core.compatibility.CompatibleMaterial;
import com.songoda.ultimatetimber.adapter.IBlockData;
import com.songoda.ultimatetimber.adapter.VersionAdapter;
import com.songoda.ultimatetimber.adapter.VersionAdapterType;
@ -34,12 +35,16 @@ public class CurrentAdapter implements VersionAdapter {
@Override
public IBlockData parseBlockDataFromString(String blockDataString) {
return new CurrentBlockData(Material.matchMaterial(blockDataString));
Material material = Material.matchMaterial(blockDataString);
if (material == null) return null;
return new CurrentBlockData(material);
}
@Override
public ItemStack parseItemStackFromString(String itemStackString) {
return new ItemStack(Material.matchMaterial(itemStackString));
CompatibleMaterial compatibleMaterial = CompatibleMaterial.getMaterial(itemStackString);
if (compatibleMaterial == null) return null;
return compatibleMaterial.getItem();
}
@Override

View File

@ -74,7 +74,7 @@
<dependency>
<groupId>org.spigotmc</groupId>
<artifactId>spigot</artifactId>
<version>1.15</version>
<version>1.16.1</version>
<scope>provided</scope>
</dependency>
<dependency>

View File

@ -360,6 +360,48 @@ trees:
chance: 25
entire-tree-loot: []
required-tools: []
huge_crimson_fungus:
logs:
- CRIMSON_STEM
- STRIPPED_CRIMSON_STEM
- CRIMSON_HYPHAE
- STRIPPED_CRIMSON_HYPHAE
leaves:
- NETHER_WART_BLOCK
- SHROOMLIGHT
sapling: CRIMSON_FUNGUS
plantable-soil:
- CRIMSON_NYLIUM
max-log-distance-from-trunk: 27
max-leaf-distance-from-log: 5
search-for-leaves-diagonally: false
drop-original-log: true
drop-original-leaf: true
log-loot: []
leaf-loot: []
entire-tree-loot: []
required-tools: []
huge_warpped_fungus:
logs:
- WARPED_STEM
- STRIPPED_WARPED_STEM
- WARPED_HYPHAE
- STRIPPED_WARPED_HYPHAE
leaves:
- WARPED_WART_BLOCK
- SHROOMLIGHT
sapling: CRIMSON_FUNGUS
plantable-soil:
- WARPED_NYLIUM
max-log-distance-from-trunk: 27
max-leaf-distance-from-log: 5
search-for-leaves-diagonally: false
drop-original-log: true
drop-original-leaf: true
log-loot: []
leaf-loot: []
entire-tree-loot: []
required-tools: []
# All soil types that the tree type's saplings can be planted on
global-plantable-soil:
@ -414,3 +456,4 @@ global-required-tools:
- IRON_AXE
- GOLDEN_AXE
- DIAMOND_AXE
- NETHERITE_AXE

View File

@ -9,10 +9,10 @@ general:
command:
reload:
description: '&8 - &a/ut reload &7 - Reloads the config.'
description: 'Reloads the config.'
reloaded: '&7Configuration and locale files have been reloaded.'
toggle:
description: '&8 - &a/ut toggle &7 - Toggles your chopping mode'
description: 'Toggles your chopping mode'
enabled: '&7Chopping Mode: &aEnabled'
disabled: '&7Chopping Mode: &cDisabled'

View File

@ -5,10 +5,10 @@ main: com.songoda.ultimatetimber.UltimateTimber
api-version: 1.13
softdepend: [mcMMO, Jobs]
commands:
ultimatetimber:
ut:
description: Reloads the configuration file
usage: /ultimatetimber reload
aliases: [ut]
aliases: [ultimatetimber]
permissions:
ultimatetimber.*:
description: Inherits all plugin permissions

View File

@ -7,17 +7,9 @@ import com.songoda.core.configuration.Config;
import com.songoda.ultimatetimber.adapter.VersionAdapter;
import com.songoda.ultimatetimber.adapter.current.CurrentAdapter;
import com.songoda.ultimatetimber.adapter.legacy.LegacyAdapter;
import com.songoda.ultimatetimber.manager.ChoppingManager;
import com.songoda.ultimatetimber.manager.CommandManager;
import com.songoda.ultimatetimber.manager.ConfigurationManager;
import com.songoda.ultimatetimber.manager.HookManager;
import com.songoda.ultimatetimber.manager.Manager;
import com.songoda.ultimatetimber.manager.PlacedBlockManager;
import com.songoda.ultimatetimber.manager.SaplingManager;
import com.songoda.ultimatetimber.manager.TreeAnimationManager;
import com.songoda.ultimatetimber.manager.TreeDefinitionManager;
import com.songoda.ultimatetimber.manager.TreeDetectionManager;
import com.songoda.ultimatetimber.manager.TreeFallManager;
import com.songoda.ultimatetimber.commands.CommandReload;
import com.songoda.ultimatetimber.commands.CommandToggle;
import com.songoda.ultimatetimber.manager.*;
import com.songoda.ultimatetimber.utils.NMSUtil;
import java.util.HashSet;
@ -35,9 +27,9 @@ public class UltimateTimber extends SongodaPlugin {
private VersionAdapter versionAdapter;
private ChoppingManager choppingManager;
private CommandManager commandManager;
private ConfigurationManager configurationManager;
private HookManager hookManager;
private com.songoda.core.commands.CommandManager commandManager;
private PlacedBlockManager placedBlockManager;
private SaplingManager saplingManager;
private TreeAnimationManager treeAnimationManager;
@ -59,10 +51,16 @@ public class UltimateTimber extends SongodaPlugin {
// Run Songoda Updater
SongodaCore.registerPlugin(this, 18, CompatibleMaterial.IRON_AXE);
// Setup plugin commands
this.commandManager = new com.songoda.core.commands.CommandManager(this);
this.commandManager.addMainCommand("ut")
.addSubCommands(new CommandReload(this),
new CommandToggle(this)
);
// Register managers
this.managers = new HashSet<>();
this.choppingManager = this.registerManager(ChoppingManager.class);
this.commandManager = this.registerManager(CommandManager.class);
this.configurationManager = new ConfigurationManager(this);
this.hookManager = this.registerManager(HookManager.class);
this.placedBlockManager = this.registerManager(PlacedBlockManager.class);
@ -74,7 +72,7 @@ public class UltimateTimber extends SongodaPlugin {
// Load version adapter and managers
this.setupVersionAdapter();
this.reload();
this.reloadConfig();
}
@Override
@ -84,7 +82,9 @@ public class UltimateTimber extends SongodaPlugin {
@Override
public void onConfigReload() {
reload();
this.configurationManager.reload();
this.managers.forEach(Manager::reload);
this.setLocale(getConfig().getString("locale"), true);
}
@Override
@ -92,15 +92,6 @@ public class UltimateTimber extends SongodaPlugin {
return null;
}
/**
* Reloads the plugin's settings
*/
public void reload() {
this.configurationManager.reload();
this.managers.forEach(Manager::reload);
this.setLocale(getConfig().getString("locale"), true);
}
/**
* Disables most of the plugin
*/
@ -124,7 +115,7 @@ public class UltimateTimber extends SongodaPlugin {
* Registers a manager
*
* @param managerClass The class of the manager to create a new instance of
* @param <T> extends Manager
* @param <T> extends Manager
* @return A new instance of the given manager class
*/
private <T extends Manager> T registerManager(Class<T> managerClass) {
@ -156,15 +147,6 @@ public class UltimateTimber extends SongodaPlugin {
return this.choppingManager;
}
/**
* Gets the command manager
*
* @return The CommandManager instance
*/
public CommandManager getCommandManager() {
return this.commandManager;
}
/**
* Gets the configuration manager
*

View File

@ -0,0 +1,45 @@
package com.songoda.ultimatetimber.commands;
import com.songoda.core.commands.AbstractCommand;
import com.songoda.ultimatetimber.UltimateTimber;
import org.bukkit.command.CommandSender;
import java.util.List;
public class CommandReload extends AbstractCommand {
private final UltimateTimber plugin;
public CommandReload(UltimateTimber plugin) {
super(CommandType.CONSOLE_OK, "reload");
this.plugin = plugin;
}
@Override
protected ReturnType runCommand(CommandSender sender, String... args) {
plugin.reloadConfig();
plugin.getLocale().getMessage("command.reload.reloaded").sendPrefixedMessage(sender);
return ReturnType.SUCCESS;
}
@Override
protected List<String> onTab(CommandSender sender, String... args) {
return null;
}
@Override
public String getPermissionNode() {
return "ultimatetimber.reload";
}
@Override
public String getSyntax() {
return "reload";
}
@Override
public String getDescription() {
return plugin.getLocale().getMessage("command.reload.description").getMessage();
}
}

View File

@ -0,0 +1,49 @@
package com.songoda.ultimatetimber.commands;
import com.songoda.core.commands.AbstractCommand;
import com.songoda.ultimatetimber.UltimateTimber;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import java.util.List;
public class CommandToggle extends AbstractCommand {
private final UltimateTimber plugin;
public CommandToggle(UltimateTimber plugin) {
super(CommandType.CONSOLE_OK, "toggle");
this.plugin = plugin;
}
@Override
protected ReturnType runCommand(CommandSender sender, String... args) {
if (UltimateTimber.getInstance().getChoppingManager().togglePlayer((Player) sender)) {
plugin.getLocale().getMessage("command.toggle.enabled").sendPrefixedMessage(sender);
} else {
plugin.getLocale().getMessage("command.toggle.disabled").sendPrefixedMessage(sender);
}
return ReturnType.SUCCESS;
}
@Override
protected List<String> onTab(CommandSender sender, String... args) {
return null;
}
@Override
public String getPermissionNode() {
return "ultimatetimber.toggle";
}
@Override
public String getSyntax() {
return "toggle";
}
@Override
public String getDescription() {
return plugin.getLocale().getMessage("command.toggle.description").getMessage();
}
}

View File

@ -1,115 +0,0 @@
package com.songoda.ultimatetimber.manager;
import com.songoda.core.locale.Locale;
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;
public class CommandManager extends Manager implements CommandExecutor, TabCompleter {
public CommandManager(UltimateTimber plugin) {
super(plugin);
PluginCommand command = plugin.getCommand("ultimatetimber");
if (command != null) {
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) {
Locale locale = this.plugin.getLocale();
if (args.length > 0) {
if (args[0].equalsIgnoreCase("reload")) {
if (commandSender instanceof Player && this.doesntHavePermission(commandSender, "ultimatetimber.reload", locale))
return true;
UltimateTimber.getInstance().reload();
locale.getMessage("command.reload.reloaded").sendPrefixedMessage(commandSender);
return true;
} else if (args[0].equalsIgnoreCase("toggle")) {
if (!(commandSender instanceof Player)) {
commandSender.sendMessage(Methods.formatText("&cConsole cannot toggle chopping mode!"));
return true;
}
if (this.doesntHavePermission(commandSender, "ultimatetimber.toggle", locale))
return true;
if (UltimateTimber.getInstance().getChoppingManager().togglePlayer((Player) commandSender)) {
locale.getMessage("command.toggle.enabled").sendPrefixedMessage(commandSender);
} else {
locale.getMessage("command.toggle.disabled").sendPrefixedMessage(commandSender);
}
return true;
}
}
commandSender.sendMessage("");
locale.newMessage("&7Version " + plugin.getDescription().getVersion()
+ " Created with <3 by &5&l&oSongoda").sendPrefixedMessage(commandSender);
locale.getMessage("command.reload.description").sendMessage(commandSender);
locale.getMessage("command.toggle.description").sendMessage(commandSender);
commandSender.sendMessage("");
return true;
}
@Override
public List<String> onTabComplete(CommandSender commandSender, Command command, String s, String[] args) {
List<String> completions = new ArrayList<>();
if (args.length < 1)
return completions;
Set<String> possibleCompletions = new HashSet<>();
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;
}
/**
* Checks if a player does have a permission
* Sends them an error message if they don't
*
* @param sender The CommandSender to check
* @param permission The permission to check for
* @param locale The LocaleManager instance
* @return True if the player has permission, otherwise false and sends a message
*/
private boolean doesntHavePermission(CommandSender sender, String permission, Locale locale) {
if (!sender.hasPermission(permission)) {
locale.getMessage("general.nopermission").sendPrefixedMessage(sender);
return true;
}
return false;
}
}

View File

@ -15,11 +15,7 @@ import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Random;
import java.util.Set;
import java.util.*;
public class TreeDefinitionManager extends Manager {
@ -55,6 +51,7 @@ public class TreeDefinitionManager extends Manager {
// Load tree settings
ConfigurationSection treeSection = config.getConfigurationSection("trees");
top:
for (String key : treeSection.getKeys(false)) {
ConfigurationSection tree = treeSection.getConfigurationSection(key);
@ -72,11 +69,17 @@ public class TreeDefinitionManager extends Manager {
Set<TreeLoot> entireTreeLoot = new HashSet<>();
Set<ItemStack> requiredTools = new HashSet<>();
for (String blockDataString : tree.getStringList("logs"))
logBlockData.add(versionAdapter.parseBlockDataFromString(blockDataString));
for (String blockDataString : tree.getStringList("logs")) {
IBlockData blockData = versionAdapter.parseBlockDataFromString(blockDataString);
if (blockData == null || blockData.getMaterial() == null) continue top;
logBlockData.add(blockData);
}
for (String blockDataString : tree.getStringList("leaves"))
leafBlockData.add(versionAdapter.parseBlockDataFromString(blockDataString));
for (String blockDataString : tree.getStringList("leaves")) {
IBlockData blockData = versionAdapter.parseBlockDataFromString(blockDataString);
if (blockData == null || blockData.getMaterial() == null) continue top;
leafBlockData.add(blockData);
}
saplingBlockData = versionAdapter.parseBlockDataFromString(tree.getString("sapling"));
@ -104,8 +107,11 @@ public class TreeDefinitionManager extends Manager {
for (String lootKey : entireTreeLootSection.getKeys(false))
entireTreeLoot.add(this.getTreeLootEntry(versionAdapter, TreeBlockType.LEAF, entireTreeLootSection.getConfigurationSection(lootKey)));
for (String itemStackString : tree.getStringList("required-tools"))
requiredTools.add(versionAdapter.parseItemStackFromString(itemStackString));
for (String itemStackString : tree.getStringList("required-tools")) {
ItemStack tool = versionAdapter.parseItemStackFromString(itemStackString);
if (tool == null) continue top;
requiredTools.add(tool);
}
this.treeDefinitions.add(new TreeDefinition(key, logBlockData, leafBlockData, saplingBlockData, plantableSoilBlockData, maxLogDistanceFromTrunk,
maxLeafDistanceFromLog, detectLeavesDiagonally, dropOriginalLog, dropOriginalLeaf, logLoot, leafLoot, entireTreeLoot, requiredTools));
@ -134,8 +140,11 @@ public class TreeDefinitionManager extends Manager {
this.globalEntireTreeLoot.add(this.getTreeLootEntry(versionAdapter, TreeBlockType.LOG, entireTreeSection.getConfigurationSection(lootKey)));
// Load global tools
for (String itemStackString : config.getStringList("global-required-tools"))
this.globalRequiredTools.add(versionAdapter.parseItemStackFromString(itemStackString));
for (String itemStackString : config.getStringList("global-required-tools")) {
ItemStack tool = versionAdapter.parseItemStackFromString(itemStackString);
if (tool == null) continue;
this.globalRequiredTools.add(tool);
}
}
@Override
@ -157,8 +166,8 @@ public class TreeDefinitionManager extends Manager {
* Narrows a Set of TreeDefinitions down to ones matching the given Block and TreeBlockType
*
* @param possibleTreeDefinitions The possible TreeDefinitions
* @param block The Block to narrow to
* @param treeBlockType The TreeBlockType of the given Block
* @param block The Block to narrow to
* @param treeBlockType The TreeBlockType of the given Block
* @return A Set of TreeDefinitions narrowed down
*/
public Set<TreeDefinition> narrowTreeDefinition(Set<TreeDefinition> possibleTreeDefinitions, Block block, TreeBlockType treeBlockType) {
@ -212,7 +221,7 @@ public class TreeDefinitionManager extends Manager {
* Checks if a given tool is valid for a given tree definition, also takes into account global tools
*
* @param treeDefinition The TreeDefinition to use
* @param tool The tool to check
* @param tool The tool to check
* @return True if the tool is allowed for toppling the given TreeDefinition
*/
public boolean isToolValidForTreeDefinition(TreeDefinition treeDefinition, ItemStack tool) {
@ -230,9 +239,9 @@ public class TreeDefinitionManager extends Manager {
/**
* Tries to spawn loot for a given TreeBlock with the given TreeDefinition for a given Player
*
* @param treeDefinition The TreeDefinition to use
* @param treeBlock The TreeBlock to drop for
* @param player The Player to drop for
* @param treeDefinition The TreeDefinition to use
* @param treeBlock The TreeBlock to drop for
* @param player The Player to drop for
* @param isForEntireTree If the loot is for the entire tree
*/
public void dropTreeLoot(TreeDefinition treeDefinition, ITreeBlock treeBlock, Player player, boolean hasSilkTouch, boolean isForEntireTree) {
@ -316,10 +325,10 @@ public class TreeDefinitionManager extends Manager {
for (String lootedCommand : lootedCommands)
Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(),
lootedCommand.replace("%player%", player.getName())
.replace("%type%", treeDefinition.getKey())
.replace("%xPos%", treeBlock.getLocation().getBlockX() + "")
.replace("%yPos%", treeBlock.getLocation().getBlockY() + "")
.replace("%zPos%", treeBlock.getLocation().getBlockZ() + ""));
.replace("%type%", treeDefinition.getKey())
.replace("%xPos%", treeBlock.getLocation().getBlockX() + "")
.replace("%yPos%", treeBlock.getLocation().getBlockY() + "")
.replace("%zPos%", treeBlock.getLocation().getBlockZ() + ""));
}
/**
@ -338,8 +347,8 @@ public class TreeDefinitionManager extends Manager {
/**
* Gets a TreeLoot entry from a ConfigurationSection
*
* @param versionAdapter The VersionAdapter to use
* @param treeBlockType The TreeBlockType to use
* @param versionAdapter The VersionAdapter to use
* @param treeBlockType The TreeBlockType to use
* @param configurationSection The ConfigurationSection
* @return A TreeLoot entry from the section
*/