diff --git a/.gitignore b/.gitignore index aa5a461..471d272 100644 --- a/.gitignore +++ b/.gitignore @@ -104,3 +104,4 @@ target/classes/config\.yml \.idea/libraries/Maven__org_yaml_snakeyaml_1_18\.xml target/classes/com/songoda/ultimatetimber/utils/VersionChecker\.class +target/UltimateTimber-maven-version-number.jar diff --git a/src/main/java/com/songoda/ultimatetimber/commands/ReloadCommand.java b/src/main/java/com/songoda/ultimatetimber/commands/ReloadCommand.java index ac4a8dd..bd586de 100644 --- a/src/main/java/com/songoda/ultimatetimber/commands/ReloadCommand.java +++ b/src/main/java/com/songoda/ultimatetimber/commands/ReloadCommand.java @@ -3,11 +3,23 @@ package com.songoda.ultimatetimber.commands; import com.songoda.ultimatetimber.UltimateTimber; import com.songoda.ultimatetimber.treefall.CustomLoot; import com.songoda.ultimatetimber.utils.Methods; +import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; public class ReloadCommand { public static void reloadConfig(CommandSender commandSender) { + + if(commandSender instanceof Player){ + + if(!commandSender.hasPermission("ut.reload")){ + commandSender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&cYou don't have permission!")); + return; + } + + } + UltimateTimber plugin = UltimateTimber.getInstance(); plugin.reloadConfig(); CustomLoot.initializeCustomItems(); diff --git a/src/main/java/com/songoda/ultimatetimber/treefall/CustomLoot.java b/src/main/java/com/songoda/ultimatetimber/treefall/CustomLoot.java index eac35b5..acf5bdc 100644 --- a/src/main/java/com/songoda/ultimatetimber/treefall/CustomLoot.java +++ b/src/main/java/com/songoda/ultimatetimber/treefall/CustomLoot.java @@ -31,6 +31,8 @@ public class CustomLoot { public static void initializeCustomItems() { + itemMap.clear(); + FileConfiguration fileConfiguration = UltimateTimber.getInstance().getConfig(); List arrayList = (List) fileConfiguration.getList(DefaultConfig.CUSTOM_LOOT_LIST); diff --git a/src/main/java/com/songoda/ultimatetimber/treefall/NoAnimationTreeDestroyer.java b/src/main/java/com/songoda/ultimatetimber/treefall/NoAnimationTreeDestroyer.java index 03520d0..c4315b6 100644 --- a/src/main/java/com/songoda/ultimatetimber/treefall/NoAnimationTreeDestroyer.java +++ b/src/main/java/com/songoda/ultimatetimber/treefall/NoAnimationTreeDestroyer.java @@ -1,31 +1,54 @@ package com.songoda.ultimatetimber.treefall; import com.songoda.ultimatetimber.utils.LeafToSaplingConverter; +import org.bukkit.Bukkit; +import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.inventory.ItemStack; +import sun.reflect.generics.tree.Tree; import java.util.HashSet; import java.util.concurrent.ThreadLocalRandom; +import java.util.stream.Collectors; public class NoAnimationTreeDestroyer { /* Only ever triggers when people have tree falling animations off in the config */ - public static void destroyTree(HashSet blocks, boolean hasBonusLoot, boolean hasSilkTouch) { + public static void destroyTree(HashSet blocks, boolean hasBonusLoot, boolean hasSilkTouch, Block minedLog) { + + Material leavesType = null; + + if(!blocks.stream().filter(b -> b.getType() == Material.BROWN_MUSHROOM_BLOCK).collect(Collectors.toList()).isEmpty()){ + + leavesType = Material.BROWN_MUSHROOM_BLOCK; + + } else if(!blocks.stream().filter(b -> b.getType() == Material.RED_MUSHROOM_BLOCK).collect(Collectors.toList()).isEmpty()){ + leavesType = Material.RED_MUSHROOM_BLOCK; + } else { + } for (Block block : blocks) { + if(leavesType != null){ + TreeReplant.replaceOriginalBlock(block, leavesType); + } else{ + TreeReplant.replaceOriginalBlock(block); + } + Material material = LeafToSaplingConverter.convertLeaves(block.getType()); if (material.equals(Material.AIR)) continue; if (material.equals(Material.VINE)) continue; + ItemStack toDrop = getItem(material); + if (hasSilkTouch) { if (hasBonusLoot) - block.getWorld().dropItem(block.getLocation(), new ItemStack(block.getType(), 1)); - block.getWorld().dropItem(block.getLocation(), new ItemStack(block.getType(), 1)); + block.getWorld().dropItem(block.getLocation(), toDrop.clone()); + block.getWorld().dropItem(block.getLocation(), toDrop.clone()); CustomLoot.doCustomItemDrop(block.getLocation()); block.setType(Material.AIR); continue; @@ -40,9 +63,9 @@ public class NoAnimationTreeDestroyer { if (ThreadLocalRandom.current().nextDouble() < 0.05) { if (hasBonusLoot) { - block.getWorld().dropItem(block.getLocation(), new ItemStack(material, 1)); + block.getWorld().dropItem(block.getLocation(), toDrop.clone()); } - block.getWorld().dropItem(block.getLocation(), new ItemStack(material, 1)); + block.getWorld().dropItem(block.getLocation(), toDrop.clone()); block.setType(Material.AIR); CustomLoot.doCustomItemDrop(block.getLocation()); continue; @@ -55,13 +78,57 @@ public class NoAnimationTreeDestroyer { } if (hasBonusLoot) - block.getWorld().dropItem(block.getLocation(), new ItemStack(material, 1)); - block.getWorld().dropItem(block.getLocation(), new ItemStack(material, 1)); + block.getWorld().dropItem(block.getLocation(), toDrop.clone()); + block.getWorld().dropItem(block.getLocation(), toDrop.clone()); + + block.setType(Material.AIR); CustomLoot.doCustomItemDrop(block.getLocation()); } + + } + + static Block getMainLog(Location loc){ + + int maxHeight = 7; + + Location clonedLocation = loc.getBlock().getLocation(); + Block toReturn = null; + + Location check1 = clonedLocation.clone(); + + if(check1.add(0,-1,0).getBlock().getType() != loc.getBlock().getType()){ + return clonedLocation.getBlock(); + } + + for(int i = 0; i < maxHeight;i++){ + + if(clonedLocation.add(0,-1,0).getBlock().getType() == loc.getBlock().getType()){ + + Location secondClone = clonedLocation.clone(); + + if(secondClone.add(0,-1,0).getBlock().getType() != loc.getBlock().getType()){ + toReturn = clonedLocation.getBlock(); + } + + } + + } + return toReturn; + + } + + static ItemStack getItem(Material material){ + + if(material == Material.BROWN_MUSHROOM_BLOCK){ + return new ItemStack(Material.BROWN_MUSHROOM, 1); + } else if(material == Material.RED_MUSHROOM_BLOCK){ + return new ItemStack(Material.RED_MUSHROOM, 1); + } + return new ItemStack(material, 1); + } } diff --git a/src/main/java/com/songoda/ultimatetimber/treefall/TreeChecker.java b/src/main/java/com/songoda/ultimatetimber/treefall/TreeChecker.java index dbc0496..f0a56c1 100644 --- a/src/main/java/com/songoda/ultimatetimber/treefall/TreeChecker.java +++ b/src/main/java/com/songoda/ultimatetimber/treefall/TreeChecker.java @@ -24,12 +24,15 @@ public class TreeChecker { boolean containsLeaves = false; - for (Block localBlock : blocks) + for (Block localBlock : blocks) { if (TreeChecker.validTreeMaterials.contains(localBlock.getType())) { containsLeaves = true; break; + } else if(TreeChecker.validMaterials.contains(localBlock.getType())){ + containsLeaves = true; + break; } - + } if (!containsLeaves) return null; @@ -54,7 +57,7 @@ public class TreeChecker { offset determines the search radius around the main trunk maxheight sets the maximum height the plugin will crawl through to find a tree */ - int offset = 5; + int offset = 7; int maxHeight = 31; /* @@ -138,11 +141,11 @@ public class TreeChecker { int radMin, radMax; if (i > 5) { - radMin = -3; - radMax = 4; + radMin = -4; + radMax = 6; } else { - radMin = -2; - radMax = 3; + radMin = -3; + radMax = 5; } diff --git a/src/main/java/com/songoda/ultimatetimber/treefall/TreeFallAnimation.java b/src/main/java/com/songoda/ultimatetimber/treefall/TreeFallAnimation.java index 6903051..2957ef6 100644 --- a/src/main/java/com/songoda/ultimatetimber/treefall/TreeFallAnimation.java +++ b/src/main/java/com/songoda/ultimatetimber/treefall/TreeFallAnimation.java @@ -128,9 +128,10 @@ public class TreeFallAnimation implements Listener { for (Block block : blocks) { - FallingBlock fallingBlock = block.getWorld().spawnFallingBlock(block.getLocation(), block.getBlockData()); + FallingBlock fallingBlock = block.getWorld().spawnFallingBlock(block.getLocation().clone().add(0.5,0,0.5), block.getBlockData()); fallingBlock.setDropItem(false); + registerFallingBlock(fallingBlock); /* @@ -138,7 +139,7 @@ public class TreeFallAnimation implements Listener { */ if (block.getType().equals(Material.AIR)) continue; - /* + /* Remove original block */ TreeReplant.replaceOriginalBlock(block); diff --git a/src/main/java/com/songoda/ultimatetimber/treefall/TreeFallEvent.java b/src/main/java/com/songoda/ultimatetimber/treefall/TreeFallEvent.java index c0c22ed..75db0ad 100644 --- a/src/main/java/com/songoda/ultimatetimber/treefall/TreeFallEvent.java +++ b/src/main/java/com/songoda/ultimatetimber/treefall/TreeFallEvent.java @@ -2,6 +2,7 @@ package com.songoda.ultimatetimber.treefall; import com.songoda.ultimatetimber.UltimateTimber; import com.songoda.ultimatetimber.configurations.DefaultConfig; +import org.bukkit.Bukkit; import org.bukkit.block.Block; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.enchantments.Enchantment; @@ -26,12 +27,12 @@ public class TreeFallEvent implements Listener { if (event.getBlock() != null && event.getBlock().getType().name().contains("SAPLING") && fileConfiguration.getBoolean(DefaultConfig.TIMEOUT_BREAK) && TreeReplant.isTimeout(event.getBlock())) event.setCancelled(true); - if (!EventFilter.eventIsValid(event)) return; + if(fileConfiguration.getBoolean(DefaultConfig.SNEAK_ONLY) && !event.getPlayer().isSneaking()) return; + TreeChecker treeChecker = new TreeChecker(); HashSet blocks = treeChecker.validTreeHandler(event.getBlock()); - /* Previous list will be null if no valid tree is found */ @@ -52,7 +53,7 @@ public class TreeFallEvent implements Listener { treeFallAnimation.startAnimation(event.getBlock(), blocks, event.getPlayer()); } else { NoAnimationTreeDestroyer.destroyTree(blocks, event.getPlayer().hasPermission("ultimatetimber.bonusloot"), - event.getPlayer().getInventory().getItemInMainHand().containsEnchantment(Enchantment.SILK_TOUCH)); + event.getPlayer().getInventory().getItemInMainHand().containsEnchantment(Enchantment.SILK_TOUCH), event.getBlock()); } } diff --git a/src/main/java/com/songoda/ultimatetimber/treefall/TreeLoot.java b/src/main/java/com/songoda/ultimatetimber/treefall/TreeLoot.java index a6746f5..88ead78 100644 --- a/src/main/java/com/songoda/ultimatetimber/treefall/TreeLoot.java +++ b/src/main/java/com/songoda/ultimatetimber/treefall/TreeLoot.java @@ -4,6 +4,7 @@ import com.songoda.ultimatetimber.utils.LeafToSaplingConverter; import org.bukkit.Material; import org.bukkit.entity.FallingBlock; import org.bukkit.inventory.ItemStack; +import org.bukkit.material.MaterialData; import java.util.concurrent.ThreadLocalRandom; diff --git a/src/main/java/com/songoda/ultimatetimber/treefall/TreeReplant.java b/src/main/java/com/songoda/ultimatetimber/treefall/TreeReplant.java index 1e3e269..d22a11e 100644 --- a/src/main/java/com/songoda/ultimatetimber/treefall/TreeReplant.java +++ b/src/main/java/com/songoda/ultimatetimber/treefall/TreeReplant.java @@ -20,6 +20,7 @@ public class TreeReplant { public static void replaceOriginalBlock(Block block) { + boolean isTimeout = UltimateTimber.getInstance().getConfig().getBoolean(DefaultConfig.TIMEOUT_BREAK); if (!UltimateTimber.getInstance().getConfig().getBoolean(DefaultConfig.REPLANT_SAPLING)) { @@ -28,7 +29,71 @@ public class TreeReplant { } if (!block.getLocation().clone().subtract(new Vector(0, 1, 0)).getBlock().getType().equals(Material.DIRT) && - !block.getLocation().clone().subtract(new Vector(0, 1, 0)).getBlock().getType().equals(Material.COARSE_DIRT)) { + !block.getLocation().clone().subtract(new Vector(0, 1, 0)).getBlock().getType().equals(Material.COARSE_DIRT) && !block.getLocation().clone().subtract(new Vector(0,1,0)).getBlock().getType().equals(Material.PODZOL)) { + block.setType(Material.AIR); + return; + } + + Material material = block.getType(); + + if (isTimeout) { + timeout.add(block.getLocation()); + Bukkit.getScheduler().scheduleSyncDelayedTask(UltimateTimber.getInstance(), () -> timeout.remove(block.getLocation()), 20 * 5); + } + + new BukkitRunnable() { + @Override + public void run() { + switch (material) { + case ACACIA_LOG: + case STRIPPED_ACACIA_LOG: + block.setType(Material.ACACIA_SAPLING); + return; + case BIRCH_LOG: + case STRIPPED_BIRCH_LOG: + block.setType(Material.BIRCH_SAPLING); + return; + case DARK_OAK_LOG: + case STRIPPED_DARK_OAK_LOG: + block.setType(Material.DARK_OAK_SAPLING); + return; + case JUNGLE_LOG: + case STRIPPED_JUNGLE_LOG: + block.setType(Material.JUNGLE_SAPLING); + return; + case OAK_LOG: + case STRIPPED_OAK_LOG: + block.setType(Material.OAK_SAPLING); + return; + case SPRUCE_LOG: + case STRIPPED_SPRUCE_LOG: + block.setType(Material.SPRUCE_SAPLING); + return; + case BROWN_MUSHROOM_BLOCK: + block.setType(Material.BROWN_MUSHROOM); + return; + case RED_MUSHROOM_BLOCK: + block.setType(Material.RED_MUSHROOM); + return; + default: + block.setType(Material.AIR); + } + } + }.runTaskLater(UltimateTimber.getInstance(), 1); + + } + + public static void replaceOriginalBlock(Block block, Material leavesType) { + + boolean isTimeout = UltimateTimber.getInstance().getConfig().getBoolean(DefaultConfig.TIMEOUT_BREAK); + + if (!UltimateTimber.getInstance().getConfig().getBoolean(DefaultConfig.REPLANT_SAPLING)) { + block.setType(Material.AIR); + return; + } + + if (!block.getLocation().clone().subtract(new Vector(0, 1, 0)).getBlock().getType().equals(Material.DIRT) && + !block.getLocation().clone().subtract(new Vector(0, 1, 0)).getBlock().getType().equals(Material.COARSE_DIRT) && !block.getLocation().clone().subtract(new Vector(0,1,0)).getBlock().getType().equals(Material.PODZOL)) { block.setType(Material.AIR); return; } @@ -69,7 +134,13 @@ public class TreeReplant { block.setType(Material.SPRUCE_SAPLING); return; default: - block.setType(Material.AIR); + if(leavesType == Material.BROWN_MUSHROOM_BLOCK){ + block.setType(Material.BROWN_MUSHROOM); + } else if(leavesType == Material.RED_MUSHROOM_BLOCK){ + block.setType(Material.RED_MUSHROOM); + } else{ + block.setType(Material.AIR); + } } } }.runTaskLater(UltimateTimber.getInstance(), 1); diff --git a/src/main/java/com/songoda/ultimatetimber/treefall/TreeSounds.java b/src/main/java/com/songoda/ultimatetimber/treefall/TreeSounds.java index 3d46139..a196795 100644 --- a/src/main/java/com/songoda/ultimatetimber/treefall/TreeSounds.java +++ b/src/main/java/com/songoda/ultimatetimber/treefall/TreeSounds.java @@ -1,5 +1,6 @@ package com.songoda.ultimatetimber.treefall; +import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Sound; import org.bukkit.entity.FallingBlock; @@ -8,11 +9,22 @@ public class TreeSounds { public static void tipOverNoise(Location location) { - location.getWorld().playSound(location, Sound.BLOCK_CHEST_OPEN, 3F, 0.1F); + if(Bukkit.getServer().getClass().getPackage().toString().contains("8")){ + location.getWorld().playSound(location, Sound.valueOf("CHEST_OPEN"), 3f,0.1f); + } else { + + location.getWorld().playSound(location, Sound.BLOCK_CHEST_OPEN, 3F, 0.1F); + } } public static void fallNoise(FallingBlock fallingBlock) { + + if(Bukkit.getServer().getClass().getPackage().toString().contains("8")){ + fallingBlock.getWorld().playSound(fallingBlock.getLocation(), Sound.valueOf("ANVIL_LAND"), 3F, 0.1F); + return; + } + if (fallingBlock.getTicksLived() < 20) fallingBlock.getWorld().playSound(fallingBlock.getLocation(), Sound.BLOCK_ANVIL_FALL, 3F, 0.1F); else diff --git a/target/UltimateTimber-Legacy-maven-version-number.jar b/target/UltimateTimber-Legacy-maven-version-number.jar new file mode 100644 index 0000000..0e048ae Binary files /dev/null and b/target/UltimateTimber-Legacy-maven-version-number.jar differ diff --git a/target/UltimateTimber-Legacy.jar b/target/UltimateTimber-Legacy.jar new file mode 100644 index 0000000..dd9eec9 Binary files /dev/null and b/target/UltimateTimber-Legacy.jar differ diff --git a/target/classes/com/songoda/ultimatetimber/treefall/TreeReplant$3.class b/target/classes/com/songoda/ultimatetimber/treefall/TreeReplant$3.class new file mode 100644 index 0000000..cc041ad Binary files /dev/null and b/target/classes/com/songoda/ultimatetimber/treefall/TreeReplant$3.class differ diff --git a/target/maven-status/maven-compiler-plugin/compile/java-compile/createdFiles.lst b/target/maven-status/maven-compiler-plugin/compile/java-compile/createdFiles.lst new file mode 100644 index 0000000..e3ed024 --- /dev/null +++ b/target/maven-status/maven-compiler-plugin/compile/java-compile/createdFiles.lst @@ -0,0 +1,2 @@ +com\songoda\ultimatetimber\treefall\TreeReplant$3.class +com\songoda\ultimatetimber\utils\VersionChecker.class diff --git a/target/maven-status/maven-compiler-plugin/compile/java-compile/inputFiles.lst b/target/maven-status/maven-compiler-plugin/compile/java-compile/inputFiles.lst new file mode 100644 index 0000000..cbbb490 --- /dev/null +++ b/target/maven-status/maven-compiler-plugin/compile/java-compile/inputFiles.lst @@ -0,0 +1,18 @@ +G:\work\ultimatetimber\src\main\java\com\songoda\ultimatetimber\treefall\CustomLoot.java +G:\work\ultimatetimber\src\main\java\com\songoda\ultimatetimber\treefall\TreeSounds.java +G:\work\ultimatetimber\src\main\java\com\songoda\ultimatetimber\treefall\NoAnimationTreeDestroyer.java +G:\work\ultimatetimber\src\main\java\com\songoda\ultimatetimber\commands\CommandHandler.java +G:\work\ultimatetimber\src\main\java\com\songoda\ultimatetimber\treefall\TreeFallEvent.java +G:\work\ultimatetimber\src\main\java\com\songoda\ultimatetimber\treefall\TreeFallAnimation.java +G:\work\ultimatetimber\src\main\java\com\songoda\ultimatetimber\configurations\DefaultConfig.java +G:\work\ultimatetimber\src\main\java\com\songoda\ultimatetimber\treefall\TreeEntityDamage.java +G:\work\ultimatetimber\src\main\java\com\songoda\ultimatetimber\commands\ReloadCommand.java +G:\work\ultimatetimber\src\main\java\com\songoda\ultimatetimber\utils\Methods.java +G:\work\ultimatetimber\src\main\java\com\songoda\ultimatetimber\treefall\TreeLoot.java +G:\work\ultimatetimber\src\main\java\com\songoda\ultimatetimber\utils\VersionChecker.java +G:\work\ultimatetimber\src\main\java\com\songoda\ultimatetimber\utils\LeafToSaplingConverter.java +G:\work\ultimatetimber\src\main\java\com\songoda\ultimatetimber\treefall\TreeChecker.java +G:\work\ultimatetimber\src\main\java\com\songoda\ultimatetimber\UltimateTimber.java +G:\work\ultimatetimber\src\main\java\com\songoda\ultimatetimber\treefall\AxeDurability.java +G:\work\ultimatetimber\src\main\java\com\songoda\ultimatetimber\treefall\TreeReplant.java +G:\work\ultimatetimber\src\main\java\com\songoda\ultimatetimber\treefall\EventFilter.java