Hook system rewrite
This commit is contained in:
parent
a52ba616fe
commit
5ce176841e
|
@ -1,10 +1,6 @@
|
|||
/*
|
||||
* This file was generated by the Gradle 'init' task.
|
||||
*/
|
||||
|
||||
dependencies {
|
||||
compile project(':UltimateTimber-Core')
|
||||
compileOnly 'org.spigotmc:spigot:1.13.2'
|
||||
compileOnly 'org.spigotmc:spigot:1.14'
|
||||
compileOnly 'com.gmail.nossr50:mcmmo:1.5.09'
|
||||
compileOnly 'com.gamingmesh:jobs:4.6.0'
|
||||
compileOnly 'com.gamingmesh:jobs:4.10.3'
|
||||
}
|
||||
|
|
|
@ -1,59 +0,0 @@
|
|||
package com.songoda.ultimatetimber.adapter.current.hooks;
|
||||
|
||||
import com.gmail.nossr50.api.ExperienceAPI;
|
||||
import com.gmail.nossr50.config.experience.ExperienceConfig;
|
||||
import com.songoda.ultimatetimber.hook.TimberHook;
|
||||
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 java.lang.reflect.Method;
|
||||
|
||||
public class CurrentMcMMOHook implements TimberHook {
|
||||
|
||||
private Enum<?> woodcuttingEnum;
|
||||
private Method getXpMethod;
|
||||
|
||||
public CurrentMcMMOHook() throws NoSuchMethodException, SecurityException, ClassNotFoundException {
|
||||
try { // Try to find mcMMO Overhaul
|
||||
Class<?> primarySkillTypeClass = Class.forName("com.gmail.nossr50.datatypes.skills.PrimarySkillType");
|
||||
for (Object enumValue : primarySkillTypeClass.getEnumConstants()) {
|
||||
Enum<?> primarySkillTypeEnum = (Enum<?>) enumValue;
|
||||
if (primarySkillTypeEnum.name().equals("WOODCUTTING")) {
|
||||
this.woodcuttingEnum = primarySkillTypeEnum;
|
||||
break;
|
||||
}
|
||||
}
|
||||
this.getXpMethod = ExperienceConfig.class.getMethod("getXp", this.woodcuttingEnum.getClass(), Material.class);
|
||||
} catch (Exception ex) {
|
||||
Class<?> skillTypeClass = Class.forName("com.gmail.nossr50.datatypes.skills.SkillType");
|
||||
for (Object enumValue : skillTypeClass.getEnumConstants()) {
|
||||
Enum<?> skillTypeEnum = (Enum<?>) enumValue;
|
||||
if (skillTypeEnum.name().equals("WOODCUTTING")) {
|
||||
this.woodcuttingEnum = skillTypeEnum;
|
||||
break;
|
||||
}
|
||||
}
|
||||
this.getXpMethod = ExperienceConfig.class.getMethod("getXp", this.woodcuttingEnum.getClass(), Material.class);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void apply(Player player, TreeBlockSet<Block> treeBlocks) throws Exception {
|
||||
if (player.getGameMode().equals(GameMode.CREATIVE))
|
||||
return;
|
||||
|
||||
int xp = 0;
|
||||
for (ITreeBlock<Block> treeBlock : treeBlocks.getLogBlocks()) {
|
||||
Block block = treeBlock.getBlock();
|
||||
Material material = block.getType();
|
||||
xp += (int) this.getXpMethod.invoke(ExperienceConfig.getInstance(), this.woodcuttingEnum, material);
|
||||
}
|
||||
|
||||
ExperienceAPI.addXP(player, "woodcutting", xp, "pve");
|
||||
}
|
||||
|
||||
}
|
|
@ -1,10 +1,6 @@
|
|||
/*
|
||||
* This file was generated by the Gradle 'init' task.
|
||||
*/
|
||||
|
||||
dependencies {
|
||||
compile project(':UltimateTimber-Core')
|
||||
compileOnly 'org.spigotmc:spigot:1.12.2'
|
||||
compileOnly 'com.gmail.nossr50:mcmmo:1.5.09'
|
||||
compileOnly 'com.gamingmesh:jobs:4.6.0'
|
||||
compileOnly 'com.gamingmesh:jobs:4.10.3'
|
||||
}
|
||||
|
|
|
@ -1,33 +0,0 @@
|
|||
package com.songoda.ultimatetimber.adapter.legacy.hooks;
|
||||
|
||||
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.hook.TimberHook;
|
||||
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 LegacyJobsHook implements TimberHook {
|
||||
|
||||
@Override
|
||||
public void apply(Player player, TreeBlockSet<Block> treeBlocks) throws Exception {
|
||||
if (player.getGameMode().equals(GameMode.CREATIVE))
|
||||
return;
|
||||
|
||||
// Replicate the same code that Jobs Reborn uses
|
||||
JobsPlayer jPlayer = Jobs.getPlayerManager().getJobsPlayer(player);
|
||||
if (jPlayer == null)
|
||||
return;
|
||||
|
||||
for (ITreeBlock<Block> treeBlock : treeBlocks.getLogBlocks()) {
|
||||
Block block = treeBlock.getBlock();
|
||||
BlockActionInfo bInfo = new BlockActionInfo(block, ActionType.BREAK);
|
||||
Jobs.action(jPlayer, bInfo, block);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -1,60 +0,0 @@
|
|||
package com.songoda.ultimatetimber.adapter.legacy.hooks;
|
||||
|
||||
import com.gmail.nossr50.api.ExperienceAPI;
|
||||
import com.gmail.nossr50.config.experience.ExperienceConfig;
|
||||
import com.songoda.ultimatetimber.hook.TimberHook;
|
||||
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 java.lang.reflect.Method;
|
||||
|
||||
public class LegacyMcMMOHook implements TimberHook {
|
||||
|
||||
private Enum<?> woodcuttingEnum;
|
||||
private Method getXpMethod;
|
||||
|
||||
public LegacyMcMMOHook() throws NoSuchMethodException, SecurityException, ClassNotFoundException {
|
||||
try { // Try to find mcMMO Overhaul
|
||||
Class<?> primarySkillTypeClass = Class.forName("com.gmail.nossr50.datatypes.skills.PrimarySkillType");
|
||||
for (Object enumValue : primarySkillTypeClass.getEnumConstants()) {
|
||||
Enum<?> primarySkillTypeEnum = (Enum<?>) enumValue;
|
||||
if (primarySkillTypeEnum.name().equals("WOODCUTTING")) {
|
||||
this.woodcuttingEnum = primarySkillTypeEnum;
|
||||
break;
|
||||
}
|
||||
}
|
||||
this.getXpMethod = ExperienceConfig.class.getMethod("getXp", this.woodcuttingEnum.getClass(), Material.class);
|
||||
} catch (Exception ex) {
|
||||
Class<?> skillTypeClass = Class.forName("com.gmail.nossr50.datatypes.skills.SkillType");
|
||||
for (Object enumValue : skillTypeClass.getEnumConstants()) {
|
||||
Enum<?> skillTypeEnum = (Enum<?>) enumValue;
|
||||
if (skillTypeEnum.name().equals("WOODCUTTING")) {
|
||||
this.woodcuttingEnum = skillTypeEnum;
|
||||
break;
|
||||
}
|
||||
}
|
||||
this.getXpMethod = ExperienceConfig.class.getMethod("getXp", this.woodcuttingEnum.getClass(), Material.class);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void apply(Player player, TreeBlockSet<Block> treeBlocks) throws Exception {
|
||||
if (player.getGameMode().equals(GameMode.CREATIVE))
|
||||
return;
|
||||
|
||||
int xp = 0;
|
||||
for (ITreeBlock<Block> treeBlock : treeBlocks.getLogBlocks()) {
|
||||
Block block = treeBlock.getBlock();
|
||||
Material material = block.getType();
|
||||
if (!material.name().endsWith("LOG")) continue;
|
||||
xp += (int) this.getXpMethod.invoke(ExperienceConfig.getInstance(), this.woodcuttingEnum, material);
|
||||
}
|
||||
|
||||
ExperienceAPI.addXP(player, "woodcutting", xp, "pve");
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,5 @@
|
|||
dependencies {
|
||||
compile project(':UltimateTimber-Core')
|
||||
compileOnly 'org.spigotmc:spigot:1.14'
|
||||
compileOnly 'com.gamingmesh:jobs:4.10.3'
|
||||
}
|
|
@ -1,24 +1,22 @@
|
|||
package com.songoda.ultimatetimber.adapter.current.hooks;
|
||||
package com.songoda.ultimatetimber.hook;
|
||||
|
||||
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.hook.TimberHook;
|
||||
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 CurrentJobsHook implements TimberHook {
|
||||
public class JobsHook implements TimberHook {
|
||||
|
||||
@Override
|
||||
public void apply(Player player, TreeBlockSet<Block> treeBlocks) {
|
||||
public void applyExperience(Player player, TreeBlockSet<Block> treeBlocks) {
|
||||
if (player.getGameMode().equals(GameMode.CREATIVE))
|
||||
return;
|
||||
|
||||
// Replicate the same code that Jobs Reborn uses
|
||||
|
||||
JobsPlayer jPlayer = Jobs.getPlayerManager().getJobsPlayer(player);
|
||||
if (jPlayer == null)
|
||||
return;
|
||||
|
@ -30,4 +28,14 @@ public class CurrentJobsHook implements TimberHook {
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldApplyDoubleDrops(Player player) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isUsingAbility(Player player) {
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,5 @@
|
|||
dependencies {
|
||||
compile project(':UltimateTimber-Core')
|
||||
compileOnly 'org.spigotmc:spigot:1.14'
|
||||
compileOnly 'com.gmail.nossr50:mcmmo:2.1.50'
|
||||
}
|
|
@ -0,0 +1,57 @@
|
|||
package com.songoda.ultimatetimber.hook;
|
||||
|
||||
import com.gmail.nossr50.api.AbilityAPI;
|
||||
import com.gmail.nossr50.api.ExperienceAPI;
|
||||
import com.gmail.nossr50.config.experience.ExperienceConfig;
|
||||
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||
import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
|
||||
import com.gmail.nossr50.datatypes.skills.SubSkillType;
|
||||
import com.gmail.nossr50.datatypes.skills.SuperAbilityType;
|
||||
import com.gmail.nossr50.mcMMO;
|
||||
import com.gmail.nossr50.util.Permissions;
|
||||
import com.gmail.nossr50.util.player.UserManager;
|
||||
import com.gmail.nossr50.util.random.RandomChanceUtil;
|
||||
import com.gmail.nossr50.util.skills.PerksUtils;
|
||||
import com.gmail.nossr50.util.skills.RankUtils;
|
||||
import com.gmail.nossr50.util.skills.SkillActivationType;
|
||||
import com.gmail.nossr50.util.skills.SkillUtils;
|
||||
import com.songoda.ultimatetimber.tree.ITreeBlock;
|
||||
import com.songoda.ultimatetimber.tree.TreeBlockSet;
|
||||
import org.bukkit.GameMode;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.block.data.BlockData;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
public class McMMOHook implements TimberHook {
|
||||
|
||||
@Override
|
||||
public void applyExperience(Player player, TreeBlockSet<Block> treeBlocks) {
|
||||
if (player.getGameMode().equals(GameMode.CREATIVE))
|
||||
return;
|
||||
|
||||
int xp = 0;
|
||||
for (ITreeBlock<Block> treeBlock : treeBlocks.getLogBlocks()) {
|
||||
Block block = treeBlock.getBlock();
|
||||
BlockData blockData = block.getBlockData();
|
||||
xp += ExperienceConfig.getInstance().getXp(PrimarySkillType.WOODCUTTING, blockData);
|
||||
}
|
||||
|
||||
ExperienceAPI.addXP(player, "woodcutting", xp, "pve");
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldApplyDoubleDrops(Player player) {
|
||||
if (PrimarySkillType.WOODCUTTING.getDoubleDropsDisabled())
|
||||
return false;
|
||||
|
||||
return Permissions.isSubSkillEnabled(player, SubSkillType.WOODCUTTING_HARVEST_LUMBER)
|
||||
&& RankUtils.hasReachedRank(1, player, SubSkillType.WOODCUTTING_HARVEST_LUMBER)
|
||||
&& RandomChanceUtil.isActivationSuccessful(SkillActivationType.RANDOM_LINEAR_100_SCALE_WITH_CAP, SubSkillType.WOODCUTTING_HARVEST_LUMBER, player);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isUsingAbility(Player player) {
|
||||
return AbilityAPI.treeFellerEnabled(player);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,5 @@
|
|||
dependencies {
|
||||
compile project(':UltimateTimber-Core')
|
||||
compileOnly 'org.spigotmc:spigot:1.12.2'
|
||||
compileOnly 'com.gmail.nossr50:mcmmo:1.5.10'
|
||||
}
|
|
@ -0,0 +1,52 @@
|
|||
package com.songoda.ultimatetimber.hook;
|
||||
|
||||
import com.gmail.nossr50.api.AbilityAPI;
|
||||
import com.gmail.nossr50.api.ExperienceAPI;
|
||||
import com.gmail.nossr50.config.experience.ExperienceConfig;
|
||||
import com.gmail.nossr50.datatypes.skills.SecondaryAbility;
|
||||
import com.gmail.nossr50.datatypes.skills.SkillType;
|
||||
import com.gmail.nossr50.util.Permissions;
|
||||
import com.gmail.nossr50.util.player.UserManager;
|
||||
import com.gmail.nossr50.util.skills.PerksUtils;
|
||||
import com.gmail.nossr50.util.skills.SkillUtils;
|
||||
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;
|
||||
import org.bukkit.material.MaterialData;
|
||||
|
||||
public class McMMOClassic12Hook implements TimberHook {
|
||||
|
||||
@Override
|
||||
public void applyExperience(Player player, TreeBlockSet<Block> treeBlocks) {
|
||||
if (player.getGameMode().equals(GameMode.CREATIVE))
|
||||
return;
|
||||
|
||||
int xp = 0;
|
||||
for (ITreeBlock<Block> treeBlock : treeBlocks.getLogBlocks()) {
|
||||
Block block = treeBlock.getBlock();
|
||||
MaterialData materialData = block.getState().getData();
|
||||
xp += ExperienceConfig.getInstance().getXp(SkillType.WOODCUTTING, materialData);
|
||||
}
|
||||
|
||||
ExperienceAPI.addXP(player, "woodcutting", xp, "pve");
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldApplyDoubleDrops(Player player) {
|
||||
if (SkillType.WOODCUTTING.getDoubleDropsDisabled())
|
||||
return false;
|
||||
|
||||
int skillLevel = UserManager.getPlayer(player).getSkillLevel(SkillType.WOODCUTTING);
|
||||
int activationChance = PerksUtils.handleLuckyPerks(player, SkillType.WOODCUTTING);
|
||||
return Permissions.secondaryAbilityEnabled(player, SecondaryAbility.WOODCUTTING_DOUBLE_DROPS)
|
||||
&& SkillUtils.activationSuccessful(SecondaryAbility.WOODCUTTING_DOUBLE_DROPS, player, skillLevel, activationChance);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isUsingAbility(Player player) {
|
||||
return AbilityAPI.treeFellerEnabled(player);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,5 @@
|
|||
dependencies {
|
||||
compile project(':UltimateTimber-Core')
|
||||
compileOnly 'org.spigotmc:spigot:1.14'
|
||||
compileOnly 'com.gmail.nossr50:mcmmo:1.6.0'
|
||||
}
|
|
@ -0,0 +1,53 @@
|
|||
package com.songoda.ultimatetimber.hook;
|
||||
|
||||
import com.gmail.nossr50.api.AbilityAPI;
|
||||
import com.gmail.nossr50.api.ExperienceAPI;
|
||||
import com.gmail.nossr50.config.experience.ExperienceConfig;
|
||||
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||
import com.gmail.nossr50.datatypes.skills.SecondaryAbility;
|
||||
import com.gmail.nossr50.datatypes.skills.SkillType;
|
||||
import com.gmail.nossr50.util.Permissions;
|
||||
import com.gmail.nossr50.util.player.UserManager;
|
||||
import com.gmail.nossr50.util.skills.PerksUtils;
|
||||
import com.gmail.nossr50.util.skills.SkillUtils;
|
||||
import com.songoda.ultimatetimber.tree.ITreeBlock;
|
||||
import com.songoda.ultimatetimber.tree.TreeBlockSet;
|
||||
import org.bukkit.GameMode;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.block.data.BlockData;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
public class McMMOClassic13Hook implements TimberHook {
|
||||
|
||||
@Override
|
||||
public void applyExperience(Player player, TreeBlockSet<Block> treeBlocks) {
|
||||
if (player.getGameMode().equals(GameMode.CREATIVE))
|
||||
return;
|
||||
|
||||
int xp = 0;
|
||||
for (ITreeBlock<Block> treeBlock : treeBlocks.getLogBlocks()) {
|
||||
Block block = treeBlock.getBlock();
|
||||
BlockData blockData = block.getBlockData();
|
||||
xp += ExperienceConfig.getInstance().getXp(SkillType.WOODCUTTING, blockData);
|
||||
}
|
||||
|
||||
ExperienceAPI.addXP(player, "woodcutting", xp, "pve");
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldApplyDoubleDrops(Player player) {
|
||||
if (SkillType.WOODCUTTING.getDoubleDropsDisabled())
|
||||
return false;
|
||||
|
||||
int skillLevel = UserManager.getPlayer(player).getSkillLevel(SkillType.WOODCUTTING);
|
||||
int activationChance = PerksUtils.handleLuckyPerks(player, SkillType.WOODCUTTING);
|
||||
return Permissions.secondaryAbilityEnabled(player, SecondaryAbility.WOODCUTTING_DOUBLE_DROPS)
|
||||
&& SkillUtils.activationSuccessful(SecondaryAbility.WOODCUTTING_DOUBLE_DROPS, player, skillLevel, activationChance);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isUsingAbility(Player player) {
|
||||
return AbilityAPI.treeFellerEnabled(player);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,5 @@
|
|||
dependencies {
|
||||
compile project(':UltimateTimber-Core')
|
||||
compileOnly 'org.spigotmc:spigot:1.8.8'
|
||||
compileOnly 'com.gmail.nossr50:mcmmo:1.5.04'
|
||||
}
|
|
@ -0,0 +1,52 @@
|
|||
package com.songoda.ultimatetimber.hook;
|
||||
|
||||
import com.gmail.nossr50.api.AbilityAPI;
|
||||
import com.gmail.nossr50.api.ExperienceAPI;
|
||||
import com.gmail.nossr50.config.experience.ExperienceConfig;
|
||||
import com.gmail.nossr50.datatypes.skills.SecondaryAbility;
|
||||
import com.gmail.nossr50.datatypes.skills.SkillType;
|
||||
import com.gmail.nossr50.util.Permissions;
|
||||
import com.gmail.nossr50.util.player.UserManager;
|
||||
import com.gmail.nossr50.util.skills.PerksUtils;
|
||||
import com.gmail.nossr50.util.skills.SkillUtils;
|
||||
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;
|
||||
|
||||
public class McMMOClassic8Hook implements TimberHook {
|
||||
|
||||
@Override
|
||||
public void applyExperience(Player player, TreeBlockSet<Block> treeBlocks) {
|
||||
if (player.getGameMode().equals(GameMode.CREATIVE))
|
||||
return;
|
||||
|
||||
int xp = 0;
|
||||
for (ITreeBlock<Block> treeBlock : treeBlocks.getLogBlocks()) {
|
||||
Block block = treeBlock.getBlock();
|
||||
Material material = block.getType();
|
||||
xp += ExperienceConfig.getInstance().getXp(SkillType.WOODCUTTING, material);
|
||||
}
|
||||
|
||||
ExperienceAPI.addXP(player, "woodcutting", xp, "pve");
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldApplyDoubleDrops(Player player) {
|
||||
if (SkillType.WOODCUTTING.getDoubleDropsDisabled())
|
||||
return false;
|
||||
|
||||
int skillLevel = UserManager.getPlayer(player).getSkillLevel(SkillType.WOODCUTTING);
|
||||
int activationChance = PerksUtils.handleLuckyPerks(player, SkillType.WOODCUTTING);
|
||||
return Permissions.secondaryAbilityEnabled(player, SecondaryAbility.WOODCUTTING_DOUBLE_DROPS)
|
||||
&& SkillUtils.activationSuccessful(SecondaryAbility.WOODCUTTING_DOUBLE_DROPS, player, skillLevel, activationChance);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isUsingAbility(Player player) {
|
||||
return AbilityAPI.treeFellerEnabled(player);
|
||||
}
|
||||
|
||||
}
|
|
@ -1,7 +1,3 @@
|
|||
/*
|
||||
* This file was generated by the Gradle 'init' task.
|
||||
*/
|
||||
|
||||
dependencies {
|
||||
compileOnly 'org.spigotmc:spigot:1.13.2'
|
||||
compileOnly 'org.spigotmc:spigot:1.14'
|
||||
}
|
||||
|
|
|
@ -5,10 +5,29 @@ import org.bukkit.block.Block;
|
|||
import org.bukkit.entity.Player;
|
||||
|
||||
public interface TimberHook {
|
||||
|
||||
|
||||
/**
|
||||
* Applies the hook
|
||||
* Applies experience to a player for a fallen tree
|
||||
*
|
||||
* @param player The player
|
||||
* @param treeBlocks The tree blocks that were broken
|
||||
*/
|
||||
void apply(Player player, TreeBlockSet<Block> treeBlocks) throws Exception;
|
||||
void applyExperience(Player player, TreeBlockSet<Block> treeBlocks);
|
||||
|
||||
/**
|
||||
* Checks if double drops should be applied
|
||||
*
|
||||
* @param player The player
|
||||
* @return True if double drops should be applied, otherwise false
|
||||
*/
|
||||
boolean shouldApplyDoubleDrops(Player player);
|
||||
|
||||
/**
|
||||
* Checks if a player is using an ability
|
||||
*
|
||||
* @param player The player
|
||||
* @return True if an ability is being used, otherwise false
|
||||
*/
|
||||
boolean isUsingAbility(Player player);
|
||||
|
||||
}
|
||||
|
|
|
@ -4,10 +4,14 @@ dependencies {
|
|||
compile project(':UltimateTimber-Core')
|
||||
compile project(':UltimateTimber-CurrentAdapter')
|
||||
compile project(':UltimateTimber-LegacyAdapter')
|
||||
compileOnly 'org.spigotmc:spigot:1.13.2'
|
||||
compile project(':UltimateTimber-Jobs')
|
||||
compile project(':UltimateTimber-McMMO')
|
||||
compile project(':UltimateTimber-McMMOClassic13')
|
||||
compile project(':UltimateTimber-McMMOClassic12')
|
||||
compile project(':UltimateTimber-McMMOClassic8')
|
||||
compileOnly 'org.spigotmc:spigot:1.14'
|
||||
}
|
||||
|
||||
|
||||
processResources {
|
||||
from (sourceSets.main.resources.srcDirs) {
|
||||
include '**/*.yml'
|
||||
|
|
|
@ -7,5 +7,18 @@ public enum TreeAnimationType {
|
|||
FANCY,
|
||||
DISINTIGRATE,
|
||||
CRUMBLE,
|
||||
NONE
|
||||
NONE;
|
||||
|
||||
/**
|
||||
* Gets a TreeAnimationType from a given string
|
||||
*
|
||||
* @param string The string
|
||||
* @return The TreeAnimationType, returns FANCY if the string is an invalid type
|
||||
*/
|
||||
public static TreeAnimationType fromString(String string) {
|
||||
for (TreeAnimationType value : values())
|
||||
if (value.name().equalsIgnoreCase(string))
|
||||
return value;
|
||||
return TreeAnimationType.FANCY;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -36,6 +36,9 @@ public class ConfigurationManager extends Manager {
|
|||
USE_CUSTOM_SOUNDS(SettingType.BOOLEAN),
|
||||
USE_CUSTOM_PARTICLES(SettingType.BOOLEAN),
|
||||
BONUS_LOOT_MULTIPLIER(SettingType.DOUBLE),
|
||||
HOOKS_APPLY_EXPERIENCE(SettingType.BOOLEAN),
|
||||
HOOKS_APPLY_EXTRA_DROPS(SettingType.BOOLEAN),
|
||||
HOOKS_REQUIRE_ABILITY_ACTIVE(SettingType.BOOLEAN),
|
||||
TREE_ANIMATION_TYPE(SettingType.STRING),
|
||||
SCATTER_TREE_BLOCKS_ON_GROUND(SettingType.BOOLEAN),
|
||||
MIX_ALL_TREE_TYPES(SettingType.BOOLEAN);
|
||||
|
|
|
@ -2,15 +2,18 @@ package com.songoda.ultimatetimber.manager;
|
|||
|
||||
import com.songoda.ultimatetimber.UltimateTimber;
|
||||
import com.songoda.ultimatetimber.adapter.VersionAdapterType;
|
||||
import com.songoda.ultimatetimber.adapter.current.hooks.CurrentJobsHook;
|
||||
import com.songoda.ultimatetimber.adapter.current.hooks.CurrentMcMMOHook;
|
||||
import com.songoda.ultimatetimber.adapter.legacy.hooks.LegacyJobsHook;
|
||||
import com.songoda.ultimatetimber.adapter.legacy.hooks.LegacyMcMMOHook;
|
||||
import com.songoda.ultimatetimber.hook.JobsHook;
|
||||
import com.songoda.ultimatetimber.hook.McMMOClassic12Hook;
|
||||
import com.songoda.ultimatetimber.hook.McMMOClassic13Hook;
|
||||
import com.songoda.ultimatetimber.hook.McMMOClassic8Hook;
|
||||
import com.songoda.ultimatetimber.hook.McMMOHook;
|
||||
import com.songoda.ultimatetimber.utils.NMSUtil;
|
||||
import com.songoda.ultimatetimber.hook.TimberHook;
|
||||
import com.songoda.ultimatetimber.tree.TreeBlockSet;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
@ -28,12 +31,24 @@ public class HookManager extends Manager {
|
|||
public void reload() {
|
||||
this.hooks.clear();
|
||||
|
||||
this.tryHook("Jobs", JobsHook.class);
|
||||
|
||||
if (this.ultimateTimber.getVersionAdapter().getVersionAdapterType().equals(VersionAdapterType.CURRENT)) {
|
||||
this.tryHook("mcMMO", CurrentMcMMOHook.class);
|
||||
this.tryHook("Jobs", CurrentJobsHook.class);
|
||||
Plugin mcMMO = Bukkit.getPluginManager().getPlugin("mcMMO");
|
||||
if (mcMMO != null) {
|
||||
String version = mcMMO.getDescription().getVersion();
|
||||
if (version.startsWith("2")) {
|
||||
this.tryHook("mcMMO", McMMOHook.class);
|
||||
} else {
|
||||
this.tryHook("mcMMO", McMMOClassic13Hook.class);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
this.tryHook("mcMMO", LegacyMcMMOHook.class);
|
||||
this.tryHook("Jobs", LegacyJobsHook.class);
|
||||
if (NMSUtil.getVersionNumber() == 12) {
|
||||
this.tryHook("mcMMO", McMMOClassic12Hook.class);
|
||||
} else if (NMSUtil.getVersionNumber() == 8) {
|
||||
this.tryHook("mcMMO", McMMOClassic8Hook.class);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -61,23 +76,47 @@ public class HookManager extends Manager {
|
|||
}
|
||||
|
||||
/**
|
||||
* Applies the loaded hooks
|
||||
*
|
||||
* @param player The player to apply the hook for
|
||||
* Applies experience to the loaded hooks
|
||||
*
|
||||
* @param player The player to apply experience to
|
||||
* @param treeBlocks The blocks of the tree that were broken
|
||||
*/
|
||||
public void applyHooks(Player player, TreeBlockSet<Block> treeBlocks) {
|
||||
Set<TimberHook> invalidHooks = new HashSet<>();
|
||||
for (TimberHook hook : this.hooks) {
|
||||
try {
|
||||
hook.apply(player, treeBlocks);
|
||||
} catch (Exception ex) {
|
||||
invalidHooks.add(hook);
|
||||
}
|
||||
}
|
||||
|
||||
for (TimberHook hook : invalidHooks)
|
||||
this.hooks.remove(hook);
|
||||
public void applyExperienceHooks(Player player, TreeBlockSet<Block> treeBlocks) {
|
||||
if (!ConfigurationManager.Setting.HOOKS_APPLY_EXPERIENCE.getBoolean())
|
||||
return;
|
||||
|
||||
for (TimberHook hook : this.hooks)
|
||||
hook.applyExperience(player, treeBlocks);
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if double drops should be applied from the loaded hooks
|
||||
*
|
||||
* @param player The player to check
|
||||
*/
|
||||
public boolean shouldApplyDoubleDropsHooks(Player player) {
|
||||
if (!ConfigurationManager.Setting.HOOKS_APPLY_EXTRA_DROPS.getBoolean())
|
||||
return false;
|
||||
|
||||
for (TimberHook hook : this.hooks)
|
||||
if (hook.shouldApplyDoubleDrops(player))
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if a player is using an ability from the loaded hooks
|
||||
*
|
||||
* @param player The player to check
|
||||
*/
|
||||
public boolean isUsingAbilityHooks(Player player) {
|
||||
if (!ConfigurationManager.Setting.HOOKS_APPLY_EXTRA_DROPS.getBoolean() || this.hooks.isEmpty())
|
||||
return true;
|
||||
|
||||
for (TimberHook hook : this.hooks)
|
||||
if (hook.isUsingAbility(player))
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -217,6 +217,7 @@ public class TreeDefinitionManager extends Manager {
|
|||
*/
|
||||
public void dropTreeLoot(TreeDefinition treeDefinition, ITreeBlock treeBlock, Player player, boolean hasSilkTouch) {
|
||||
VersionAdapter versionAdapter = this.ultimateTimber.getVersionAdapter();
|
||||
HookManager hookManager = this.ultimateTimber.getHookManager();
|
||||
|
||||
boolean addToInventory = ConfigurationManager.Setting.ADD_ITEMS_TO_INVENTORY.getBoolean();
|
||||
boolean hasBonusChance = player.hasPermission("ultimatetimber.bonusloot");
|
||||
|
@ -250,10 +251,18 @@ public class TreeDefinitionManager extends Manager {
|
|||
double chance = hasBonusChance ? treeLoot.getChance() * bonusLootMultiplier : treeLoot.getChance();
|
||||
if (this.random.nextDouble() > chance / 100)
|
||||
continue;
|
||||
if (treeLoot.hasItem())
|
||||
|
||||
if (treeLoot.hasItem()) {
|
||||
if (hookManager.shouldApplyDoubleDropsHooks(player))
|
||||
lootedItems.add(treeLoot.getItem());
|
||||
lootedItems.add(treeLoot.getItem());
|
||||
if (treeLoot.hasCommand())
|
||||
}
|
||||
|
||||
if (treeLoot.hasCommand()) {
|
||||
if (hookManager.shouldApplyDoubleDropsHooks(player))
|
||||
lootedCommands.add(treeLoot.getCommand());
|
||||
lootedCommands.add(treeLoot.getCommand());
|
||||
}
|
||||
}
|
||||
|
||||
// Add to inventory or drop on ground
|
||||
|
|
|
@ -12,8 +12,11 @@ import org.bukkit.block.Block;
|
|||
import org.bukkit.block.BlockFace;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
public class TreeDetectionManager extends Manager {
|
||||
|
@ -21,8 +24,8 @@ public class TreeDetectionManager extends Manager {
|
|||
private final Set<Vector> VALID_TRUNK_OFFSETS, VALID_BRANCH_OFFSETS, VALID_LEAF_OFFSETS;
|
||||
|
||||
private TreeDefinitionManager treeDefinitionManager;
|
||||
private int maxBranchBlocksAllowed, numLeavesRequiredForTree;
|
||||
private boolean onlyBreakLogsUpwards, destroyBaseLog, entireTreeBase, destroyLeaves;
|
||||
private int maxLogBlocksAllowed, numLeavesRequiredForTree;
|
||||
private boolean onlyBreakLogsUpwards, entireTreeBase, destroyLeaves;
|
||||
|
||||
public TreeDetectionManager(UltimateTimber ultimateTimber) {
|
||||
super(ultimateTimber);
|
||||
|
@ -32,14 +35,14 @@ public class TreeDetectionManager extends Manager {
|
|||
this.VALID_LEAF_OFFSETS = new HashSet<>();
|
||||
|
||||
// 3x2x3 centered around log, excluding -y axis
|
||||
for (int x = -1; x <= 1; x++)
|
||||
for (int y = 0; y <= 1; y++)
|
||||
for (int y = 0; y <= 1; y++)
|
||||
for (int x = -1; x <= 1; x++)
|
||||
for (int z = -1; z <= 1; z++)
|
||||
this.VALID_BRANCH_OFFSETS.add(new Vector(x, y, z));
|
||||
|
||||
// 3x3x3 centered around log
|
||||
for (int x = -1; x <= 1; x++)
|
||||
for (int y = -1; y <= 1; y++)
|
||||
for (int y = -1; y <= 1; y++)
|
||||
for (int x = -1; x <= 1; x++)
|
||||
for (int z = -1; z <= 1; z++)
|
||||
this.VALID_TRUNK_OFFSETS.add(new Vector(x, y, z));
|
||||
|
||||
|
@ -54,10 +57,9 @@ public class TreeDetectionManager extends Manager {
|
|||
@Override
|
||||
public void reload() {
|
||||
this.treeDefinitionManager = this.ultimateTimber.getTreeDefinitionManager();
|
||||
this.maxBranchBlocksAllowed = ConfigurationManager.Setting.MAX_LOGS_PER_CHOP.getInt();
|
||||
this.maxLogBlocksAllowed = ConfigurationManager.Setting.MAX_LOGS_PER_CHOP.getInt();
|
||||
this.numLeavesRequiredForTree = ConfigurationManager.Setting.LEAVES_REQUIRED_FOR_TREE.getInt();
|
||||
this.onlyBreakLogsUpwards = ConfigurationManager.Setting.ONLY_DETECT_LOGS_UPWARDS.getBoolean();
|
||||
this.destroyBaseLog = ConfigurationManager.Setting.DESTROY_INITIATED_BLOCK.getBoolean();
|
||||
this.entireTreeBase = ConfigurationManager.Setting.BREAK_ENTIRE_TREE_BASE.getBoolean();
|
||||
this.destroyLeaves = ConfigurationManager.Setting.DESTROY_LEAVES.getBoolean();
|
||||
}
|
||||
|
@ -84,18 +86,19 @@ public class TreeDetectionManager extends Manager {
|
|||
return null;
|
||||
|
||||
// Detect tree trunk
|
||||
Set<Block> trunkBlocks = new HashSet<>();
|
||||
List<Block> trunkBlocks = new ArrayList<>();
|
||||
trunkBlocks.add(initialBlock);
|
||||
Block targetBlock = initialBlock;
|
||||
while (this.isValidLogType(possibleTreeDefinitions, (targetBlock = targetBlock.getRelative(BlockFace.UP)))) {
|
||||
TreeBlock treeBlock = new TreeBlock(targetBlock, TreeBlockType.LOG);
|
||||
detectedTreeBlocks.add(treeBlock);
|
||||
trunkBlocks.add(targetBlock);
|
||||
possibleTreeDefinitions.retainAll(this.treeDefinitionManager.narrowTreeDefinition(possibleTreeDefinitions, targetBlock, TreeBlockType.LOG));
|
||||
}
|
||||
|
||||
// Lowest blocks at the front of the list
|
||||
Collections.reverse(trunkBlocks);
|
||||
|
||||
// Tree must be at least 2 blocks tall
|
||||
if (detectedTreeBlocks.size() < 2)
|
||||
if (trunkBlocks.size() < 2)
|
||||
return null;
|
||||
|
||||
// Detect branches off the main trunk
|
||||
|
@ -137,10 +140,6 @@ public class TreeDetectionManager extends Manager {
|
|||
}
|
||||
}
|
||||
|
||||
// Delete the starting block if applicable
|
||||
if (this.destroyBaseLog)
|
||||
detectedTreeBlocks.remove(initialTreeBlock);
|
||||
|
||||
// Remove all leaves if applicable
|
||||
if (!this.destroyLeaves)
|
||||
detectedTreeBlocks.removeAll(TreeBlockType.LEAF);
|
||||
|
@ -157,7 +156,7 @@ public class TreeDetectionManager extends Manager {
|
|||
* @param startingBlockY The Y coordinate of the initial block
|
||||
*/
|
||||
private void recursiveBranchSearch(Set<TreeDefinition> treeDefinitions, TreeBlockSet<Block> treeBlocks, Block block, int startingBlockY) {
|
||||
if (treeBlocks.size() > this.maxBranchBlocksAllowed)
|
||||
if (treeBlocks.size() > this.maxLogBlocksAllowed)
|
||||
return;
|
||||
|
||||
for (Vector offset : this.onlyBreakLogsUpwards ? this.VALID_BRANCH_OFFSETS : this.VALID_TRUNK_OFFSETS) {
|
||||
|
|
|
@ -7,6 +7,7 @@ import com.songoda.ultimatetimber.events.TreeFellEvent;
|
|||
import com.songoda.ultimatetimber.tree.DetectedTree;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.GameMode;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
|
@ -32,11 +33,8 @@ public class TreeFallManager extends Manager implements Listener {
|
|||
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST)
|
||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||
public void onBlockBreak(BlockBreakEvent event) {
|
||||
if (event.isCancelled())
|
||||
return;
|
||||
|
||||
TreeDefinitionManager treeDefinitionManager = this.ultimateTimber.getTreeDefinitionManager();
|
||||
TreeDetectionManager treeDetectionManager = this.ultimateTimber.getTreeDetectionManager();
|
||||
TreeAnimationManager treeAnimationManager = this.ultimateTimber.getTreeAnimationManager();
|
||||
|
@ -79,6 +77,9 @@ public class TreeFallManager extends Manager implements Listener {
|
|||
if (!treeDefinitionManager.isToolValidForAnyTreeDefinition(tool))
|
||||
isValid = false;
|
||||
|
||||
if (!hookManager.isUsingAbilityHooks(player))
|
||||
isValid = false;
|
||||
|
||||
boolean alwaysReplantSapling = ConfigurationManager.Setting.ALWAYS_REPLANT_SAPLING.getBoolean();
|
||||
if (!isValid && !alwaysReplantSapling)
|
||||
return;
|
||||
|
@ -111,9 +112,15 @@ public class TreeFallManager extends Manager implements Listener {
|
|||
// Valid tree and meets all conditions past this point
|
||||
event.setCancelled(true);
|
||||
|
||||
// Destroy initiated block if enabled
|
||||
if (ConfigurationManager.Setting.DESTROY_INITIATED_BLOCK.getBoolean()) {
|
||||
detectedTree.getDetectedTreeBlocks().getInitialLogBlock().getBlock().setType(Material.AIR);
|
||||
detectedTree.getDetectedTreeBlocks().remove(detectedTree.getDetectedTreeBlocks().getInitialLogBlock());
|
||||
}
|
||||
|
||||
if (!player.getGameMode().equals(GameMode.CREATIVE)) {
|
||||
versionAdapter.applyToolDurability(player, toolDamage);
|
||||
hookManager.applyHooks(player, detectedTree.getDetectedTreeBlocks());
|
||||
hookManager.applyExperienceHooks(player, detectedTree.getDetectedTreeBlocks());
|
||||
}
|
||||
|
||||
treeAnimationManager.runAnimation(detectedTree, player);
|
||||
|
|
|
@ -116,6 +116,21 @@ use-custom-particles: true
|
|||
# Default: 2
|
||||
bonus-loot-multiplier: 2
|
||||
|
||||
# Applies experience when using Jobs/mcMMO
|
||||
# Only does something if Jobs or mcMMO is installed
|
||||
# Default: true
|
||||
hooks-apply-experience: true
|
||||
|
||||
# Applies extra drops passive ability when using mcMMO
|
||||
# Only does something if mcMMO is installed
|
||||
# Default: true
|
||||
hooks-apply-extra-drops: true
|
||||
|
||||
# Requires the tree feller ability in mcMMO to be active to use timber
|
||||
# Only does something if mcMMO is installed
|
||||
# Default: false
|
||||
hooks-require-ability-active: false
|
||||
|
||||
# The type of animation to use for tree toppling
|
||||
# Types: FANCY, DISINTEGRATE, CRUMBLE, NONE
|
||||
tree-animation-type: FANCY
|
||||
|
@ -340,12 +355,3 @@ global-required-tools:
|
|||
- IRON_AXE
|
||||
- GOLDEN_AXE
|
||||
- DIAMOND_AXE
|
||||
|
||||
# Hooks into other plugins to apply exp gain/abilities
|
||||
hooks:
|
||||
jobs:
|
||||
enabled: false
|
||||
mcmmo:
|
||||
enabled: false
|
||||
require-tree-feller-ability-active: false
|
||||
apply-extra-drops-multiplier: true
|
||||
|
|
|
@ -117,6 +117,21 @@ use-custom-particles: true
|
|||
# Default: 2
|
||||
bonus-loot-multiplier: 2
|
||||
|
||||
# Applies experience when using Jobs/mcMMO
|
||||
# Only does something if Jobs or mcMMO is installed
|
||||
# Default: true
|
||||
hooks-apply-experience: true
|
||||
|
||||
# Applies extra drops passive ability when using mcMMO
|
||||
# Only does something if mcMMO is installed
|
||||
# Default: true
|
||||
hooks-apply-extra-drops: true
|
||||
|
||||
# Requires the tree feller ability in mcMMO to be active to use timber
|
||||
# Only does something if mcMMO is installed
|
||||
# Default: false
|
||||
hooks-require-ability-active: false
|
||||
|
||||
# The type of animation to use for tree toppling
|
||||
# Types: FANCY, DISINTEGRATE, CRUMBLE, NONE
|
||||
tree-animation-type: FANCY
|
||||
|
@ -323,12 +338,3 @@ global-required-tools:
|
|||
- IRON_AXE
|
||||
- GOLD_AXE
|
||||
- DIAMOND_AXE
|
||||
|
||||
# Hooks into other plugins to apply exp gain/abilities
|
||||
hooks:
|
||||
jobs:
|
||||
enabled: false
|
||||
mcmmo:
|
||||
enabled: false
|
||||
require-tree-feller-ability-active: false
|
||||
apply-extra-drops-multiplier: true
|
||||
|
|
|
@ -21,6 +21,11 @@ dependencies {
|
|||
compile project(':UltimateTimber-Core')
|
||||
compile project(':UltimateTimber-CurrentAdapter')
|
||||
compile project(':UltimateTimber-LegacyAdapter')
|
||||
compile project(':UltimateTimber-Jobs')
|
||||
compile project(':UltimateTimber-McMMO')
|
||||
compile project(':UltimateTimber-McMMOClassic13')
|
||||
compile project(':UltimateTimber-McMMOClassic12')
|
||||
compile project(':UltimateTimber-McMMOClassic8')
|
||||
compile project(':UltimateTimber-Plugin')
|
||||
}
|
||||
|
||||
|
|
|
@ -1,13 +1,28 @@
|
|||
/*
|
||||
* This file was generated by the Gradle 'init' task.
|
||||
*/
|
||||
|
||||
rootProject.name = 'UltimateTimber'
|
||||
|
||||
include(':UltimateTimber-Core')
|
||||
include(':UltimateTimber-CurrentAdapter')
|
||||
include(':UltimateTimber-LegacyAdapter')
|
||||
include(':UltimateTimber-Plugin')
|
||||
project(':UltimateTimber-Core').projectDir = file('UltimateTimber/Core')
|
||||
|
||||
include(':UltimateTimber-CurrentAdapter')
|
||||
project(':UltimateTimber-CurrentAdapter').projectDir = file('UltimateTimber-Adapter/Current')
|
||||
|
||||
include(':UltimateTimber-LegacyAdapter')
|
||||
project(':UltimateTimber-LegacyAdapter').projectDir = file('UltimateTimber-Adapter/Legacy')
|
||||
|
||||
include(':UltimateTimber-Jobs')
|
||||
project(':UltimateTimber-Jobs').projectDir = file('UltimateTimber-Hook/Jobs')
|
||||
|
||||
include(':UltimateTimber-McMMO')
|
||||
project(':UltimateTimber-McMMO').projectDir = file('UltimateTimber-Hook/McMMO')
|
||||
|
||||
include(':UltimateTimber-McMMOClassic13')
|
||||
project(':UltimateTimber-McMMOClassic13').projectDir = file('UltimateTimber-Hook/McMMOClassic13')
|
||||
|
||||
include(':UltimateTimber-McMMOClassic12')
|
||||
project(':UltimateTimber-McMMOClassic12').projectDir = file('UltimateTimber-Hook/McMMOClassic12')
|
||||
|
||||
include(':UltimateTimber-McMMOClassic8')
|
||||
project(':UltimateTimber-McMMOClassic8').projectDir = file('UltimateTimber-Hook/McMMOClassic8')
|
||||
|
||||
include(':UltimateTimber-Plugin')
|
||||
project(':UltimateTimber-Plugin').projectDir = file('UltimateTimber/Plugin')
|
||||
|
|
Loading…
Reference in New Issue