mirror of
https://github.com/songoda/UltimateTimber.git
synced 2024-12-01 14:23:24 +01:00
Even more boilerplate code
This commit is contained in:
parent
665ece06da
commit
4192e5ba74
@ -4,7 +4,7 @@ stages:
|
||||
variables:
|
||||
name: "UltimateTimber"
|
||||
path: "/builds/$CI_PROJECT_PATH"
|
||||
version: "1.0.14"
|
||||
version: "2.0.0"
|
||||
|
||||
build:
|
||||
stage: build
|
||||
|
@ -11,11 +11,16 @@ import org.bukkit.Bukkit;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
public class UltimateTimber extends JavaPlugin {
|
||||
|
||||
private static final CommandSender console = Bukkit.getConsoleSender();
|
||||
private static UltimateTimber INSTANCE;
|
||||
|
||||
private Set<Manager> managers;
|
||||
|
||||
private VersionAdapter versionAdapter;
|
||||
private ConfigurationManager configurationManager;
|
||||
private DisabledWorldManager disabledWorldManager;
|
||||
@ -24,6 +29,7 @@ public class UltimateTimber extends JavaPlugin {
|
||||
private SettingsManager settingsManager;
|
||||
private TreeAnimationManager treeAnimationManager;
|
||||
private TreeDefinitionManager treeDefinitionManager;
|
||||
private TreeDetectionManager treeDetectionManager;
|
||||
private TreeFallManager treeFallManager;
|
||||
|
||||
public static UltimateTimber getInstance() {
|
||||
@ -38,14 +44,16 @@ public class UltimateTimber extends JavaPlugin {
|
||||
console.sendMessage(Methods.formatText("&7" + this.getDescription().getName() + " " + this.getDescription().getVersion() + " by &5Songoda <3&7!"));
|
||||
console.sendMessage(Methods.formatText("&7Action: &aEnabling&7..."));
|
||||
|
||||
this.configurationManager = new ConfigurationManager(this);
|
||||
this.disabledWorldManager = new DisabledWorldManager(this);
|
||||
this.hookManager = new HookManager(this);
|
||||
this.messageManager = new MessageManager(this);
|
||||
this.settingsManager = new SettingsManager(this);
|
||||
this.treeAnimationManager = new TreeAnimationManager(this);
|
||||
this.treeDefinitionManager = new TreeDefinitionManager(this);
|
||||
this.treeFallManager = new TreeFallManager(this);
|
||||
this.managers = new HashSet<>();
|
||||
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();
|
||||
@ -61,7 +69,7 @@ public class UltimateTimber extends JavaPlugin {
|
||||
console.sendMessage(Methods.formatText("&7" + this.getDescription().getName() + " " + this.getDescription().getVersion() + " by &5Songoda <3&7!"));
|
||||
console.sendMessage(Methods.formatText("&7Action: &cDisabling&7..."));
|
||||
|
||||
|
||||
this.disable();
|
||||
|
||||
console.sendMessage(Methods.formatText("&a============================="));
|
||||
}
|
||||
@ -70,7 +78,14 @@ public class UltimateTimber extends JavaPlugin {
|
||||
* Reloads the plugin's settings
|
||||
*/
|
||||
public void reload() {
|
||||
this.managers.forEach(Manager::reload);
|
||||
}
|
||||
|
||||
/**
|
||||
* Disables most of the plugin
|
||||
*/
|
||||
public void disable() {
|
||||
this.managers.forEach(Manager::disable);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -84,6 +99,28 @@ public class UltimateTimber extends JavaPlugin {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Registers a manager
|
||||
*
|
||||
* @param managerClass The class of the manager to create a new instance of
|
||||
* @param <T> extends Manager
|
||||
* @return A new instance of the given manager class
|
||||
*/
|
||||
private <T extends Manager> T registerManager(Class<T> managerClass) {
|
||||
try {
|
||||
T newManager = managerClass.getConstructor(UltimateTimber.class).newInstance(this);
|
||||
this.managers.add(newManager);
|
||||
return newManager;
|
||||
} catch (Exception ignored) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the active version adapter being used
|
||||
*
|
||||
* @return The VersionAdapter being used for the plugin
|
||||
*/
|
||||
public VersionAdapter getVersionAdapter() {
|
||||
return this.versionAdapter;
|
||||
}
|
||||
@ -151,6 +188,15 @@ public class UltimateTimber extends JavaPlugin {
|
||||
return treeDefinitionManager;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the tree detection manager
|
||||
*
|
||||
* @return The TreeDetectionManager instance
|
||||
*/
|
||||
public TreeDetectionManager getTreeDetectionManager() {
|
||||
return treeDetectionManager;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the tree fall manager
|
||||
*
|
||||
|
@ -1,8 +1,10 @@
|
||||
package com.songoda.ultimatetimber.adapter;
|
||||
|
||||
import com.songoda.ultimatetimber.tree.FallingTreeBlock;
|
||||
import com.songoda.ultimatetimber.tree.TreeBlock;
|
||||
import com.songoda.ultimatetimber.tree.TreeBlockSet;
|
||||
import com.songoda.ultimatetimber.tree.TreeDefinition;
|
||||
import jdk.nashorn.internal.ir.Block;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import java.util.Set;
|
||||
@ -33,6 +35,30 @@ public interface VersionAdapter {
|
||||
* @param treeBlocks The Set of tree blocks that are being broken
|
||||
* @param tool The tool to apply damage to
|
||||
*/
|
||||
void applyToolDurability(Set<TreeBlock> treeBlocks, ItemStack tool);
|
||||
void applyToolDurability(TreeBlockSet<Block> treeBlocks, ItemStack tool);
|
||||
|
||||
/**
|
||||
* Plays particles to indicate a tree has started falling
|
||||
*/
|
||||
void playFallingParticles(TreeBlockSet<Block> treeBlocks);
|
||||
|
||||
/**
|
||||
* Plays particles to indicate a tree block has hit the ground
|
||||
*/
|
||||
void playLandingParticles(FallingTreeBlock treeBlock);
|
||||
|
||||
/**
|
||||
* Plays a sound to indicate a tree block has started falling
|
||||
*
|
||||
* @param treeBlocks The TreeBlocks to play the sound for
|
||||
*/
|
||||
void playFallingSound(TreeBlockSet<Block> treeBlocks);
|
||||
|
||||
/**
|
||||
* Plays a sound to indicate a tree block has hit the ground
|
||||
*
|
||||
* @param treeBlock The FallingTreeBlock to play the sound for
|
||||
*/
|
||||
void playLandingSound(FallingTreeBlock treeBlock);
|
||||
|
||||
}
|
||||
|
@ -2,8 +2,11 @@ package com.songoda.ultimatetimber.adapter.current;
|
||||
|
||||
import com.songoda.ultimatetimber.adapter.VersionAdapter;
|
||||
import com.songoda.ultimatetimber.adapter.VersionAdapterType;
|
||||
import com.songoda.ultimatetimber.tree.FallingTreeBlock;
|
||||
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.inventory.ItemStack;
|
||||
|
||||
import java.util.Set;
|
||||
@ -26,7 +29,27 @@ public class CurrentAdapter implements VersionAdapter {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void applyToolDurability(Set<TreeBlock> blocks, ItemStack tool) {
|
||||
public void applyToolDurability(TreeBlockSet<Block> treeBlocks, ItemStack tool) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void playFallingParticles(TreeBlockSet<Block> treeBlocks) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void playLandingParticles(FallingTreeBlock treeBlock) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void playFallingSound(TreeBlockSet<Block> treeBlocks) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void playLandingSound(FallingTreeBlock treeBlock) {
|
||||
|
||||
}
|
||||
|
||||
|
@ -2,8 +2,11 @@ package com.songoda.ultimatetimber.adapter.legacy;
|
||||
|
||||
import com.songoda.ultimatetimber.adapter.VersionAdapter;
|
||||
import com.songoda.ultimatetimber.adapter.VersionAdapterType;
|
||||
import com.songoda.ultimatetimber.tree.FallingTreeBlock;
|
||||
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.inventory.ItemStack;
|
||||
|
||||
import java.util.Set;
|
||||
@ -26,7 +29,27 @@ public class LegacyAdapter implements VersionAdapter {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void applyToolDurability(Set<TreeBlock> blocks, ItemStack tool) {
|
||||
public void applyToolDurability(TreeBlockSet<Block> treeBlocks, ItemStack tool) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void playFallingParticles(TreeBlockSet<Block> treeBlocks) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void playLandingParticles(FallingTreeBlock treeBlock) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void playFallingSound(TreeBlockSet<Block> treeBlocks) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void playLandingSound(FallingTreeBlock treeBlock) {
|
||||
|
||||
}
|
||||
|
||||
|
@ -3,7 +3,7 @@ package com.songoda.ultimatetimber.commands;
|
||||
import org.bukkit.command.CommandSender;
|
||||
|
||||
import com.songoda.ultimatetimber.UltimateTimber;
|
||||
import com.songoda.ultimatetimber.treefall.CustomLoot;
|
||||
import com.songoda.ultimatetimber.old_code.CustomLoot;
|
||||
import com.songoda.ultimatetimber.utils.Methods;
|
||||
|
||||
class ReloadCommand {
|
||||
|
@ -4,7 +4,7 @@ import org.bukkit.block.Block;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.player.PlayerEvent;
|
||||
|
||||
import com.songoda.ultimatetimber.treefall.TreeChecker;
|
||||
import com.songoda.ultimatetimber.old_code.TreeChecker;
|
||||
|
||||
/**
|
||||
* Abstract tree event containing tree's blocks and broke block
|
||||
|
@ -5,7 +5,7 @@ import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.Cancellable;
|
||||
import org.bukkit.event.HandlerList;
|
||||
|
||||
import com.songoda.ultimatetimber.treefall.TreeChecker;
|
||||
import com.songoda.ultimatetimber.old_code.TreeChecker;
|
||||
|
||||
/**
|
||||
* Called when a tree will fall
|
||||
|
@ -4,7 +4,7 @@ import org.bukkit.block.Block;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.HandlerList;
|
||||
|
||||
import com.songoda.ultimatetimber.treefall.TreeChecker;
|
||||
import com.songoda.ultimatetimber.old_code.TreeChecker;
|
||||
|
||||
/**
|
||||
* Called when a tree fell
|
||||
|
@ -1,23 +1,19 @@
|
||||
package com.songoda.ultimatetimber.hooks;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.bukkit.GameMode;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import com.gamingmesh.jobs.Jobs;
|
||||
import com.gamingmesh.jobs.actions.BlockActionInfo;
|
||||
import com.gamingmesh.jobs.container.ActionType;
|
||||
import com.gamingmesh.jobs.container.JobsPlayer;
|
||||
import com.songoda.ultimatetimber.utils.WoodToLogConverter;
|
||||
import com.songoda.ultimatetimber.tree.ITreeBlock;
|
||||
import com.songoda.ultimatetimber.tree.TreeBlockSet;
|
||||
import org.bukkit.GameMode;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
public class JobsHook implements TimberHook {
|
||||
|
||||
@Override
|
||||
public void apply(Player player, HashSet<Block> treeBlocks) throws Exception {
|
||||
public void apply(Player player, TreeBlockSet<Block> treeBlocks) throws Exception {
|
||||
if (player.getGameMode().equals(GameMode.CREATIVE))
|
||||
return;
|
||||
|
||||
@ -26,10 +22,10 @@ public class JobsHook implements TimberHook {
|
||||
if (jPlayer == null)
|
||||
return;
|
||||
|
||||
Set<Block> logs = treeBlocks.stream().filter(x -> WoodToLogConverter.convert(x.getType()).name().endsWith("LOG")).collect(Collectors.toSet());
|
||||
for (Block log : logs) {
|
||||
BlockActionInfo bInfo = new BlockActionInfo(log, ActionType.BREAK);
|
||||
Jobs.action(jPlayer, bInfo, log);
|
||||
for (ITreeBlock<Block> treeBlock : treeBlocks.getLogBlocks()) {
|
||||
Block block = treeBlock.getBlock();
|
||||
BlockActionInfo bInfo = new BlockActionInfo(block, ActionType.BREAK);
|
||||
Jobs.action(jPlayer, bInfo, block);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,16 +1,15 @@
|
||||
package com.songoda.ultimatetimber.hooks;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.Set;
|
||||
|
||||
import com.songoda.ultimatetimber.tree.TreeBlock;
|
||||
import com.gmail.nossr50.api.ExperienceAPI;
|
||||
import com.gmail.nossr50.config.experience.ExperienceConfig;
|
||||
import com.songoda.ultimatetimber.tree.ITreeBlock;
|
||||
import com.songoda.ultimatetimber.tree.TreeBlockSet;
|
||||
import org.bukkit.GameMode;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import com.gmail.nossr50.api.ExperienceAPI;
|
||||
import com.gmail.nossr50.config.experience.ExperienceConfig;
|
||||
import java.lang.reflect.Method;
|
||||
|
||||
public class McMMOHook implements TimberHook {
|
||||
|
||||
@ -42,13 +41,14 @@ public class McMMOHook implements TimberHook {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void apply(Player player, Set<TreeBlock> treeBlocks) throws Exception {
|
||||
public void apply(Player player, TreeBlockSet<Block> treeBlocks) throws Exception {
|
||||
if (player.getGameMode().equals(GameMode.CREATIVE))
|
||||
return;
|
||||
|
||||
int xp = 0;
|
||||
for (Block block : treeBlocks) {
|
||||
Material material = WoodToLogConverter.convert(block.getType());
|
||||
for (ITreeBlock<Block> treeBlock : treeBlocks.getLogBlocks()) {
|
||||
Block block = treeBlock.getBlock();
|
||||
Material material = block.getType();
|
||||
if (!material.name().endsWith("LOG")) continue;
|
||||
xp += (int) getXpMethod.invoke(ExperienceConfig.getInstance(), woodcuttingEnum, material);
|
||||
}
|
||||
|
@ -1,6 +1,8 @@
|
||||
package com.songoda.ultimatetimber.hooks;
|
||||
|
||||
import com.songoda.ultimatetimber.tree.TreeBlock;
|
||||
import com.songoda.ultimatetimber.tree.TreeBlockSet;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.util.Set;
|
||||
@ -10,6 +12,6 @@ public interface TimberHook {
|
||||
/**
|
||||
* Applies the hook
|
||||
*/
|
||||
void apply(Player player, Set<TreeBlock> treeBlocks) throws Exception;
|
||||
void apply(Player player, TreeBlockSet<Block> treeBlocks) throws Exception;
|
||||
|
||||
}
|
||||
|
@ -7,6 +7,7 @@ import com.songoda.ultimatetimber.UltimateTimber;
|
||||
import com.songoda.ultimatetimber.hooks.JobsHook;
|
||||
import com.songoda.ultimatetimber.hooks.McMMOHook;
|
||||
import com.songoda.ultimatetimber.hooks.TimberHook;
|
||||
import com.songoda.ultimatetimber.tree.TreeBlockSet;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.entity.Player;
|
||||
@ -21,20 +22,15 @@ public class HookManager extends Manager {
|
||||
|
||||
@Override
|
||||
public void reload() {
|
||||
this.hooks.clear();
|
||||
|
||||
this.tryHook("mcMMO", McMMOHook.class);
|
||||
this.tryHook("Jobs", JobsHook.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void disable() {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Hooks into compatible plugins
|
||||
*/
|
||||
public void hook() {
|
||||
this.tryHook("mcMMO", McMMOHook.class);
|
||||
this.tryHook("Jobs", JobsHook.class);
|
||||
this.hooks.clear();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -61,7 +57,7 @@ public class HookManager extends Manager {
|
||||
* @param player The player to apply the hook for
|
||||
* @param treeBlocks The blocks of the tree that were broken
|
||||
*/
|
||||
public void applyHooks(Player player, HashSet<Block> treeBlocks) {
|
||||
public void applyHooks(Player player, TreeBlockSet treeBlocks) {
|
||||
Set<TimberHook> invalidHooks = new HashSet<>();
|
||||
for (TimberHook hook : this.hooks) {
|
||||
try {
|
||||
|
@ -2,7 +2,7 @@ package com.songoda.ultimatetimber.manager;
|
||||
|
||||
import com.songoda.ultimatetimber.UltimateTimber;
|
||||
|
||||
abstract class Manager {
|
||||
public abstract class Manager {
|
||||
|
||||
protected UltimateTimber ultimateTimber;
|
||||
|
||||
@ -13,11 +13,11 @@ abstract class Manager {
|
||||
/**
|
||||
* Reloads the Manager's settings
|
||||
*/
|
||||
abstract void reload();
|
||||
public abstract void reload();
|
||||
|
||||
/**
|
||||
* Cleans up the Manager's resources
|
||||
*/
|
||||
abstract void disable();
|
||||
public abstract void disable();
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,23 @@
|
||||
package com.songoda.ultimatetimber.manager;
|
||||
|
||||
import com.songoda.ultimatetimber.UltimateTimber;
|
||||
|
||||
public class TreeDetectionManager extends Manager {
|
||||
|
||||
private UltimateTimber ultimateTimber;
|
||||
|
||||
public TreeDetectionManager(UltimateTimber ultimateTimber) {
|
||||
super(ultimateTimber);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void reload() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void disable() {
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
package com.songoda.ultimatetimber.treefall;
|
||||
package com.songoda.ultimatetimber.old_code;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Random;
|
||||
@ -49,7 +49,7 @@ public class AxeDurability {
|
||||
|
||||
item.setItemMeta((ItemMeta) damageableMeta);
|
||||
|
||||
if (item.getDurability() >= item.getType().getMaxDurability())
|
||||
if (damageableMeta.getDamage() >= item.getType().getMaxDurability())
|
||||
player.getInventory().setItemInMainHand(new ItemStack(Material.AIR));
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
package com.songoda.ultimatetimber.treefall;
|
||||
package com.songoda.ultimatetimber.old_code;
|
||||
|
||||
import com.songoda.ultimatetimber.UltimateTimber;
|
||||
import com.songoda.ultimatetimber.configurations.DefaultConfig;
|
@ -1,4 +1,4 @@
|
||||
package com.songoda.ultimatetimber.treefall;
|
||||
package com.songoda.ultimatetimber.old_code;
|
||||
|
||||
import com.songoda.ultimatetimber.UltimateTimber;
|
||||
import com.songoda.ultimatetimber.configurations.DefaultConfig;
|
@ -1,4 +1,4 @@
|
||||
package com.songoda.ultimatetimber.treefall;
|
||||
package com.songoda.ultimatetimber.old_code;
|
||||
|
||||
import java.util.HashSet;
|
||||
|
@ -1,4 +1,4 @@
|
||||
package com.songoda.ultimatetimber.treefall;
|
||||
package com.songoda.ultimatetimber.old_code;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Comparator;
|
@ -1,4 +1,4 @@
|
||||
package com.songoda.ultimatetimber.treefall;
|
||||
package com.songoda.ultimatetimber.old_code;
|
||||
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.FallingBlock;
|
@ -1,4 +1,4 @@
|
||||
package com.songoda.ultimatetimber.treefall;
|
||||
package com.songoda.ultimatetimber.old_code;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
@ -1,4 +1,4 @@
|
||||
package com.songoda.ultimatetimber.treefall;
|
||||
package com.songoda.ultimatetimber.old_code;
|
||||
|
||||
import java.util.HashSet;
|
||||
|
@ -1,4 +1,4 @@
|
||||
package com.songoda.ultimatetimber.treefall;
|
||||
package com.songoda.ultimatetimber.old_code;
|
||||
|
||||
import java.util.Random;
|
||||
|
@ -1,4 +1,4 @@
|
||||
package com.songoda.ultimatetimber.treefall;
|
||||
package com.songoda.ultimatetimber.old_code;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
@ -1,4 +1,4 @@
|
||||
package com.songoda.ultimatetimber.treefall;
|
||||
package com.songoda.ultimatetimber.old_code;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
@ -0,0 +1,25 @@
|
||||
package com.songoda.ultimatetimber.tree;
|
||||
|
||||
import org.bukkit.entity.FallingBlock;
|
||||
|
||||
public class FallingTreeBlock implements ITreeBlock<FallingBlock> {
|
||||
|
||||
private final FallingBlock fallingBlock;
|
||||
private final TreeBlockType treeBlockType;
|
||||
|
||||
public FallingTreeBlock(FallingBlock fallingBlock, TreeBlockType treeBlockType) {
|
||||
this.fallingBlock = fallingBlock;
|
||||
this.treeBlockType = treeBlockType;
|
||||
}
|
||||
|
||||
@Override
|
||||
public FallingBlock getBlock() {
|
||||
return this.fallingBlock;
|
||||
}
|
||||
|
||||
@Override
|
||||
public TreeBlockType getTreeBlockType() {
|
||||
return this.treeBlockType;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,19 @@
|
||||
package com.songoda.ultimatetimber.tree;
|
||||
|
||||
public interface ITreeBlock<BlockType> {
|
||||
|
||||
/**
|
||||
* Gets the block this TreeBlock represents
|
||||
*
|
||||
* @return The Block for this TreeBlock
|
||||
*/
|
||||
BlockType getBlock();
|
||||
|
||||
/**
|
||||
* Gets what type of TreeBlock this is
|
||||
*
|
||||
* @return The TreeBlockType
|
||||
*/
|
||||
TreeBlockType getTreeBlockType();
|
||||
|
||||
}
|
@ -1,8 +0,0 @@
|
||||
package com.songoda.ultimatetimber.tree;
|
||||
|
||||
public enum TreeAnimationType {
|
||||
FANCY,
|
||||
DISENTIGRATE,
|
||||
CHAOS,
|
||||
NONE
|
||||
}
|
@ -2,7 +2,7 @@ package com.songoda.ultimatetimber.tree;
|
||||
|
||||
import org.bukkit.block.Block;
|
||||
|
||||
public class TreeBlock {
|
||||
public class TreeBlock implements ITreeBlock<Block> {
|
||||
|
||||
private final Block block;
|
||||
private final TreeBlockType treeBlockType;
|
||||
@ -12,10 +12,12 @@ public class TreeBlock {
|
||||
this.treeBlockType = treeBlockType;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Block getBlock() {
|
||||
return this.block;
|
||||
}
|
||||
|
||||
@Override
|
||||
public TreeBlockType getTreeBlockType() {
|
||||
return this.treeBlockType;
|
||||
}
|
||||
|
@ -2,14 +2,27 @@ package com.songoda.ultimatetimber.tree;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
public class TreeBlockSet implements Collection {
|
||||
public class TreeBlockSet<BlockType> implements Collection {
|
||||
|
||||
private Set<TreeBlock> logBlocks;
|
||||
private Set<TreeBlock> leafBlocks;
|
||||
private final ITreeBlock<BlockType> initialLogBlock;
|
||||
private final Set<ITreeBlock<BlockType>> logBlocks;
|
||||
private final Set<ITreeBlock<BlockType>> leafBlocks;
|
||||
|
||||
public TreeBlockSet() {
|
||||
public TreeBlockSet(ITreeBlock<BlockType> initialLogBlock) {
|
||||
this.initialLogBlock = initialLogBlock;
|
||||
this.logBlocks = new HashSet<>();
|
||||
this.leafBlocks = new HashSet<>();
|
||||
|
||||
this.logBlocks.add(initialLogBlock);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the TreeBlock that initiated the tree topple
|
||||
*
|
||||
* @return The TreeBlock of the initial topple point
|
||||
*/
|
||||
public ITreeBlock<BlockType> getInitialLogBlock() {
|
||||
return this.initialLogBlock;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -17,7 +30,7 @@ public class TreeBlockSet implements Collection {
|
||||
*
|
||||
* @return A Set of TreeBlocks
|
||||
*/
|
||||
public Set<TreeBlock> getLogBlocks() {
|
||||
public Set<ITreeBlock<BlockType>> getLogBlocks() {
|
||||
return Collections.unmodifiableSet(this.logBlocks);
|
||||
}
|
||||
|
||||
@ -26,7 +39,7 @@ public class TreeBlockSet implements Collection {
|
||||
*
|
||||
* @return A Set of TreeBlocks
|
||||
*/
|
||||
public Set<TreeBlock> getLeafBlocks() {
|
||||
public Set<ITreeBlock<BlockType>> getLeafBlocks() {
|
||||
return Collections.unmodifiableSet(this.leafBlocks);
|
||||
}
|
||||
|
||||
@ -35,8 +48,8 @@ public class TreeBlockSet implements Collection {
|
||||
*
|
||||
* @return A Set of all TreeBlocks
|
||||
*/
|
||||
public Set<TreeBlock> getAllTreeBlocks() {
|
||||
Set<TreeBlock> treeBlocks = new HashSet<>();
|
||||
public Set<ITreeBlock<BlockType>> getAllTreeBlocks() {
|
||||
Set<ITreeBlock<BlockType>> treeBlocks = new HashSet<>();
|
||||
treeBlocks.addAll(this.logBlocks);
|
||||
treeBlocks.addAll(this.leafBlocks);
|
||||
return treeBlocks;
|
||||
@ -69,8 +82,7 @@ public class TreeBlockSet implements Collection {
|
||||
|
||||
@Override
|
||||
public boolean add(Object o) {
|
||||
if (!(o instanceof TreeBlock)) return false;
|
||||
TreeBlock treeBlock = (TreeBlock) o;
|
||||
ITreeBlock<BlockType> treeBlock = (ITreeBlock<BlockType>) o;
|
||||
switch (treeBlock.getTreeBlockType()) {
|
||||
case LOG:
|
||||
return this.logBlocks.add(treeBlock);
|
||||
@ -82,8 +94,7 @@ public class TreeBlockSet implements Collection {
|
||||
|
||||
@Override
|
||||
public boolean remove(Object o) {
|
||||
if (!(o instanceof TreeBlock)) return false;
|
||||
TreeBlock treeBlock = (TreeBlock) o;
|
||||
ITreeBlock<BlockType> treeBlock = (ITreeBlock<BlockType>) o;
|
||||
switch (treeBlock.getTreeBlockType()) {
|
||||
case LOG:
|
||||
return this.logBlocks.remove(treeBlock);
|
||||
@ -146,10 +157,10 @@ public class TreeBlockSet implements Collection {
|
||||
|
||||
@Override
|
||||
public Object[] toArray(Object[] a) {
|
||||
Set<TreeBlock> treeBlocks = new HashSet<>();
|
||||
Set<ITreeBlock<BlockType>> treeBlocks = new HashSet<>();
|
||||
for (Object o : a)
|
||||
if (o instanceof TreeBlock)
|
||||
treeBlocks.add((TreeBlock)o);
|
||||
if (o instanceof ITreeBlock)
|
||||
treeBlocks.add((ITreeBlock<BlockType>)o);
|
||||
return treeBlocks.toArray();
|
||||
}
|
||||
|
||||
|
@ -1,9 +1,124 @@
|
||||
package com.songoda.ultimatetimber.tree;
|
||||
|
||||
import org.bukkit.block.BlockState;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.Set;
|
||||
|
||||
public class TreeDefinition {
|
||||
|
||||
public TreeDefinition() {
|
||||
private final String key;
|
||||
private final Set<BlockState> logBlockStates, leafBlockStates;
|
||||
private final BlockState saplingBlockState;
|
||||
private final int maxLeafDistanceFromLog;
|
||||
private final boolean dropOriginalLog, dropOriginalLeaf;
|
||||
private final Set<TreeLoot> customLogLoot, customLeafLoot;
|
||||
private final Set<ItemStack> requiredTools;
|
||||
|
||||
public TreeDefinition(String key, Set<BlockState> logBlocks, Set<BlockState> leafBlocks, BlockState saplingBlockState,
|
||||
int maxLeafDistanceFromLog, boolean dropOriginalLog, boolean dropOriginalLeaf,
|
||||
Set<TreeLoot> customLogLoot, Set<TreeLoot> customLeafLoot, Set<ItemStack> requiredTools) {
|
||||
this.key = key;
|
||||
this.logBlockStates = logBlocks;
|
||||
this.leafBlockStates = leafBlocks;
|
||||
this.saplingBlockState = saplingBlockState;
|
||||
this.maxLeafDistanceFromLog = maxLeafDistanceFromLog;
|
||||
this.dropOriginalLog = dropOriginalLog;
|
||||
this.dropOriginalLeaf = dropOriginalLeaf;
|
||||
this.customLogLoot = customLogLoot;
|
||||
this.customLeafLoot = customLeafLoot;
|
||||
this.requiredTools = requiredTools;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the key of this TreeDefinition in the config
|
||||
*
|
||||
* @return The key
|
||||
*/
|
||||
public String getKey() {
|
||||
return this.key;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets a set of valid log block states for this TreeDefinition
|
||||
*
|
||||
* @return A Set of BlockStates
|
||||
*/
|
||||
public Set<BlockState> getLogBlockStates() {
|
||||
return Collections.unmodifiableSet(this.logBlockStates);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets a set of valid leaf block states for this TreeDefinition
|
||||
*
|
||||
* @return A Set of BlockStates
|
||||
*/
|
||||
public Set<BlockState> getLeafBlockStates() {
|
||||
return Collections.unmodifiableSet(this.leafBlockStates);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the sapling block state of this TreeDefinition
|
||||
*
|
||||
* @return A BlockState for the sapling
|
||||
*/
|
||||
public BlockState getSaplingBlockState() {
|
||||
return this.saplingBlockState;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the max distance away a leaf can be from a log in order to be part of the tree
|
||||
*
|
||||
* @return The max distance a leaf can be from a log
|
||||
*/
|
||||
public int getMaxLeafDistanceFromLog() {
|
||||
return this.maxLeafDistanceFromLog;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets if the logs of this tree should drop their original block
|
||||
*
|
||||
* @return True if the original log block should be dropped, otherwise false
|
||||
*/
|
||||
public boolean shouldDropOriginalLog() {
|
||||
return this.dropOriginalLog;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets if the leaves of this tree should drop their original block
|
||||
*
|
||||
* @return True if the original leaf block should be dropped, otherwise false
|
||||
*/
|
||||
public boolean shouldDropOriginalLeaf() {
|
||||
return this.dropOriginalLeaf;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the custom log loot for this TreeDefinition
|
||||
*
|
||||
* @return A Set of TreeLoot
|
||||
*/
|
||||
public Set<TreeLoot> getCustomLogLoot() {
|
||||
return Collections.unmodifiableSet(this.customLogLoot);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the custom leaf loot for this TreeDefinition
|
||||
*
|
||||
* @return A Set of TreeLoot
|
||||
*/
|
||||
public Set<TreeLoot> getCustomLeafLoot() {
|
||||
return Collections.unmodifiableSet(this.customLeafLoot);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the tools that can be used to activate this tree topple
|
||||
*
|
||||
* @return A Set of ItemStacks
|
||||
*/
|
||||
public Set<ItemStack> getRequiredTools() {
|
||||
return Collections.unmodifiableSet(this.requiredTools);
|
||||
}
|
||||
|
||||
}
|
||||
|
23
src/main/java/com/songoda/ultimatetimber/tree/TreeLoot.java
Normal file
23
src/main/java/com/songoda/ultimatetimber/tree/TreeLoot.java
Normal file
@ -0,0 +1,23 @@
|
||||
package com.songoda.ultimatetimber.tree;
|
||||
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
public class TreeLoot {
|
||||
|
||||
private final TreeBlockType treeBlockType;
|
||||
private final ItemStack item;
|
||||
private final String command;
|
||||
private final double chance;
|
||||
|
||||
public TreeLoot(TreeBlockType treeBlockType, ItemStack item, String command, double chance) {
|
||||
this.treeBlockType = treeBlockType;
|
||||
this.item = item;
|
||||
this.command = command;
|
||||
this.chance = chance;
|
||||
}
|
||||
|
||||
public void tryDropLoot(ITreeBlock treeBlock) {
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,21 @@
|
||||
package com.songoda.ultimatetimber.tree.animation;
|
||||
|
||||
import com.songoda.ultimatetimber.tree.TreeBlockSet;
|
||||
import com.songoda.ultimatetimber.tree.TreeDefinition;
|
||||
import org.bukkit.block.Block;
|
||||
|
||||
public abstract class TreeAnimation {
|
||||
|
||||
protected final TreeAnimationType treeAnimationType;
|
||||
protected final TreeBlockSet<Block> treeBlocks;
|
||||
protected final TreeDefinition treeDefinition;
|
||||
|
||||
TreeAnimation(TreeAnimationType treeAnimationType, TreeBlockSet<Block> treeBlocks, TreeDefinition treeDefinition) {
|
||||
this.treeAnimationType = treeAnimationType;
|
||||
this.treeBlocks = treeBlocks;
|
||||
this.treeDefinition = treeDefinition;
|
||||
}
|
||||
|
||||
abstract void playAnimation();
|
||||
|
||||
}
|
@ -0,0 +1,18 @@
|
||||
package com.songoda.ultimatetimber.tree.animation;
|
||||
|
||||
import com.songoda.ultimatetimber.tree.TreeBlock;
|
||||
import com.songoda.ultimatetimber.tree.TreeBlockSet;
|
||||
import com.songoda.ultimatetimber.tree.TreeDefinition;
|
||||
|
||||
public class TreeAnimationChaos extends TreeAnimation {
|
||||
|
||||
public TreeAnimationChaos(TreeBlockSet<TreeBlock> treeBlocks, TreeDefinition treeDefinition) {
|
||||
super(TreeAnimationType.CHAOS, treeBlocks, treeDefinition);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void playAnimation() {
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,18 @@
|
||||
package com.songoda.ultimatetimber.tree.animation;
|
||||
|
||||
import com.songoda.ultimatetimber.tree.TreeBlock;
|
||||
import com.songoda.ultimatetimber.tree.TreeBlockSet;
|
||||
import com.songoda.ultimatetimber.tree.TreeDefinition;
|
||||
|
||||
public class TreeAnimationDisintegrate extends TreeAnimation {
|
||||
|
||||
public TreeAnimationDisintegrate(TreeBlockSet<TreeBlock> treeBlocks, TreeDefinition treeDefinition) {
|
||||
super(TreeAnimationType.DISINTIGRATE, treeBlocks, treeDefinition);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void playAnimation() {
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,18 @@
|
||||
package com.songoda.ultimatetimber.tree.animation;
|
||||
|
||||
import com.songoda.ultimatetimber.tree.TreeBlock;
|
||||
import com.songoda.ultimatetimber.tree.TreeBlockSet;
|
||||
import com.songoda.ultimatetimber.tree.TreeDefinition;
|
||||
|
||||
public class TreeAnimationFancy extends TreeAnimation {
|
||||
|
||||
public TreeAnimationFancy(TreeBlockSet<TreeBlock> treeBlocks, TreeDefinition treeDefinition) {
|
||||
super(TreeAnimationType.FANCY, treeBlocks, treeDefinition);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void playAnimation() {
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,18 @@
|
||||
package com.songoda.ultimatetimber.tree.animation;
|
||||
|
||||
import com.songoda.ultimatetimber.tree.TreeBlock;
|
||||
import com.songoda.ultimatetimber.tree.TreeBlockSet;
|
||||
import com.songoda.ultimatetimber.tree.TreeDefinition;
|
||||
|
||||
public class TreeAnimationNone extends TreeAnimation {
|
||||
|
||||
public TreeAnimationNone(TreeBlockSet<TreeBlock> treeBlocks, TreeDefinition treeDefinition) {
|
||||
super(TreeAnimationType.NONE, treeBlocks, treeDefinition);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void playAnimation() {
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
package com.songoda.ultimatetimber.tree.animation;
|
||||
|
||||
/**
|
||||
* The types of tree animations that are available
|
||||
*/
|
||||
public enum TreeAnimationType {
|
||||
FANCY,
|
||||
DISINTIGRATE,
|
||||
CHAOS,
|
||||
NONE
|
||||
}
|
@ -11,7 +11,7 @@ server-type: CURRENT
|
||||
|
||||
# A list of worlds that the plugin is disabled in
|
||||
# Default:
|
||||
# - 'disabled_world_name'
|
||||
# - disabled_world_name
|
||||
disabled-worlds:
|
||||
- disabled_world_name
|
||||
|
||||
@ -51,6 +51,10 @@ allow-creative-mode: true
|
||||
# Default: true
|
||||
require-chop-permission: true
|
||||
|
||||
# Allow players to topple trees regardless of what they are holding in their hand
|
||||
# Default: false
|
||||
ignore-required-tools: false
|
||||
|
||||
# Automatically replant saplings when a tree is toppled
|
||||
# Default: true
|
||||
replant-saplings: true
|
||||
@ -98,6 +102,7 @@ scatter-tree-blocks-on-ground: false
|
||||
|
||||
# Mix all the tree types below and consider all of them as a single tree type
|
||||
# Useful for EpicWorldGenerator and similar plugins that make custom trees
|
||||
# Warning: Custom loot can get messy with this enabled
|
||||
# Default: false
|
||||
mix-all-tree-types: false
|
||||
|
||||
@ -266,7 +271,7 @@ global-custom-log-loot:
|
||||
chance: 0
|
||||
2:
|
||||
material: GOLDEN_APPLE
|
||||
command: 'broadcast %player% found a golden apple in a tree!'
|
||||
command: 'broadcast %player% found a golden apple in a %type% tree!'
|
||||
chance: 0
|
||||
|
||||
# Custom loot that is available for all tree types
|
||||
|
@ -12,7 +12,7 @@ server-type: LEGACY
|
||||
|
||||
# A list of worlds that the plugin is disabled in
|
||||
# Default:
|
||||
# - 'disabled_world_name'
|
||||
# - disabled_world_name
|
||||
disabled-worlds:
|
||||
- disabled_world_name
|
||||
|
||||
@ -52,6 +52,10 @@ allow-creative-mode: true
|
||||
# Default: true
|
||||
require-chop-permission: true
|
||||
|
||||
# Allow players to topple trees regardless of what they are holding in their hand
|
||||
# Default: false
|
||||
ignore-required-tools: false
|
||||
|
||||
# Automatically replant saplings when a tree is toppled
|
||||
# Default: true
|
||||
replant-saplings: true
|
||||
@ -92,13 +96,13 @@ use-custom-sounds: true
|
||||
# Types: FANCY, DISINTEGRATE, CHAOS, NONE
|
||||
tree-animation-type: FANCY
|
||||
|
||||
# If the tree-animation-type is FANCY, make the blocks stick to the ground
|
||||
# Does nothing if tree-animation-type is not FANCY
|
||||
# If the tree-animation-type uses falling block entities, make the falling blocks stick to the ground
|
||||
# Default: false
|
||||
scatter-tree-blocks-on-ground: false
|
||||
|
||||
# Mix all the tree types below and consider all of them as a single tree type
|
||||
# Useful for EpicWorldGenerator and similar plugins that make custom trees
|
||||
# Warning: Custom loot can get messy with this enabled
|
||||
# Default: false
|
||||
mix-all-tree-types: false
|
||||
|
||||
@ -303,11 +307,11 @@ global-custom-log-loot:
|
||||
material: DIAMOND
|
||||
chance: 0
|
||||
1:
|
||||
command: 'eco give %player% 5'
|
||||
command: 'eco give %player 5'
|
||||
chance: 0
|
||||
2:
|
||||
material: GOLDEN_APPLE
|
||||
command: 'broadcast %player% found a golden apple in a tree!'
|
||||
command: 'broadcast %player% found a golden apple in a %type tree!'
|
||||
chance: 0
|
||||
|
||||
# Custom loot that is available for all tree types
|
||||
|
Loading…
Reference in New Issue
Block a user