mirror of
https://github.com/songoda/UltimateTimber.git
synced 2025-02-27 09:01:29 +01:00
Tree animation disintegrate added
This commit is contained in:
parent
fdac6ef040
commit
d00668bfbb
@ -13,6 +13,7 @@ import org.bukkit.Material;
|
|||||||
import org.bukkit.Particle;
|
import org.bukkit.Particle;
|
||||||
import org.bukkit.Sound;
|
import org.bukkit.Sound;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
|
import org.bukkit.block.data.BlockData;
|
||||||
import org.bukkit.enchantments.Enchantment;
|
import org.bukkit.enchantments.Enchantment;
|
||||||
import org.bukkit.entity.FallingBlock;
|
import org.bukkit.entity.FallingBlock;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
@ -94,27 +95,39 @@ public class CurrentAdapter implements VersionAdapter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void playFallingParticles(TreeBlockSet<Block> treeBlocks) {
|
public void playFallingParticles(ITreeBlock treeBlock) {
|
||||||
for (ITreeBlock<Block> treeBlock : treeBlocks.getAllTreeBlocks()) {
|
BlockData blockData;
|
||||||
|
if (treeBlock.getBlock() instanceof Block) {
|
||||||
|
blockData = ((Block)treeBlock.getBlock()).getBlockData();
|
||||||
|
} else if (treeBlock.getBlock() instanceof FallingBlock) {
|
||||||
|
blockData = ((FallingBlock)treeBlock.getBlock()).getBlockData();
|
||||||
|
} else return;
|
||||||
|
|
||||||
Location location = treeBlock.getLocation().clone().add(0.5, 0.5, 0.5);
|
Location location = treeBlock.getLocation().clone().add(0.5, 0.5, 0.5);
|
||||||
location.getWorld().spawnParticle(Particle.BLOCK_DUST, location, 10, 0.25, 0.25, 0.25, treeBlock.getBlock().getBlockData());
|
location.getWorld().spawnParticle(Particle.BLOCK_DUST, location, 10, 0.25, 0.25, 0.25, blockData);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void playLandingParticles(FallingTreeBlock treeBlock) {
|
public void playLandingParticles(ITreeBlock treeBlock) {
|
||||||
|
BlockData blockData;
|
||||||
|
if (treeBlock.getBlock() instanceof Block) {
|
||||||
|
blockData = ((Block)treeBlock.getBlock()).getBlockData();
|
||||||
|
} else if (treeBlock.getBlock() instanceof FallingBlock) {
|
||||||
|
blockData = ((FallingBlock)treeBlock.getBlock()).getBlockData();
|
||||||
|
} else return;
|
||||||
|
|
||||||
Location location = treeBlock.getLocation().clone().add(0.5, 0.5, 0.5);
|
Location location = treeBlock.getLocation().clone().add(0.5, 0.5, 0.5);
|
||||||
location.getWorld().spawnParticle(Particle.BLOCK_CRACK, location, 10, 0.25, 0.25, 0.25, treeBlock.getBlock().getBlockData());
|
location.getWorld().spawnParticle(Particle.BLOCK_CRACK, location, 10, 0.25, 0.25, 0.25, blockData);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void playFallingSound(TreeBlockSet<Block> treeBlocks) {
|
public void playFallingSound(ITreeBlock treeBlock) {
|
||||||
Location location = treeBlocks.getInitialLogBlock().getLocation();
|
Location location = treeBlock.getLocation();
|
||||||
location.getWorld().playSound(location, Sound.BLOCK_CHEST_OPEN, 3F, 0.1F);
|
location.getWorld().playSound(location, Sound.BLOCK_CHEST_OPEN, 3F, 0.1F);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void playLandingSound(FallingTreeBlock treeBlock) {
|
public void playLandingSound(ITreeBlock treeBlock) {
|
||||||
Location location = treeBlock.getLocation();
|
Location location = treeBlock.getLocation();
|
||||||
location.getWorld().playSound(location, Sound.BLOCK_WOOD_FALL, 3F, 0.1F);
|
location.getWorld().playSound(location, Sound.BLOCK_WOOD_FALL, 3F, 0.1F);
|
||||||
}
|
}
|
||||||
|
@ -59,18 +59,18 @@ public class LegacyAdapter implements VersionAdapter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void playFallingParticles(TreeBlockSet<Block> treeBlocks) {
|
public void playFallingParticles(ITreeBlock treeBlock) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void playLandingParticles(FallingTreeBlock treeBlock) {
|
public void playLandingParticles(ITreeBlock treeBlock) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void playFallingSound(TreeBlockSet<Block> treeBlocks) {
|
public void playFallingSound(ITreeBlock treeBlock) {
|
||||||
Location location = treeBlocks.getInitialLogBlock().getLocation();
|
Location location = treeBlock.getLocation();
|
||||||
if (NMSUtil.getVersionNumber() > 8) {
|
if (NMSUtil.getVersionNumber() > 8) {
|
||||||
location.getWorld().playSound(location, Sound.BLOCK_CHEST_OPEN, 3F, 0.1F);
|
location.getWorld().playSound(location, Sound.BLOCK_CHEST_OPEN, 3F, 0.1F);
|
||||||
} else {
|
} else {
|
||||||
@ -79,7 +79,7 @@ public class LegacyAdapter implements VersionAdapter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void playLandingSound(FallingTreeBlock treeBlock) {
|
public void playLandingSound(ITreeBlock treeBlock) {
|
||||||
Location location = treeBlock.getLocation();
|
Location location = treeBlock.getLocation();
|
||||||
if (NMSUtil.getVersionNumber() > 8) {
|
if (NMSUtil.getVersionNumber() > 8) {
|
||||||
location.getWorld().playSound(location, Sound.BLOCK_WOOD_FALL, 3F, 0.1F);
|
location.getWorld().playSound(location, Sound.BLOCK_WOOD_FALL, 3F, 0.1F);
|
||||||
|
@ -75,27 +75,31 @@ public interface VersionAdapter {
|
|||||||
void removeItemInHand(Player player);
|
void removeItemInHand(Player player);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Plays particles to indicate a tree has started falling
|
* Plays particles to indicate a tree block has started falling
|
||||||
|
*
|
||||||
|
* @param treeBlock The TreeBlock to play the particles for
|
||||||
*/
|
*/
|
||||||
void playFallingParticles(TreeBlockSet<Block> treeBlocks);
|
void playFallingParticles(ITreeBlock treeBlock);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Plays particles to indicate a tree block has hit the ground
|
* Plays particles to indicate a tree block has hit the ground
|
||||||
|
*
|
||||||
|
* @param treeBlock The TreeBlock to play the particles for
|
||||||
*/
|
*/
|
||||||
void playLandingParticles(FallingTreeBlock treeBlock);
|
void playLandingParticles(ITreeBlock treeBlock);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Plays a sound to indicate a tree block has started falling
|
* Plays a sound to indicate a tree block has started falling
|
||||||
*
|
*
|
||||||
* @param treeBlocks The TreeBlocks to play the sound for
|
* @param treeBlock The TreeBlock to play the sound for
|
||||||
*/
|
*/
|
||||||
void playFallingSound(TreeBlockSet<Block> treeBlocks);
|
void playFallingSound(ITreeBlock treeBlock);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Plays a sound to indicate a tree block has hit the ground
|
* Plays a sound to indicate a tree block has hit the ground
|
||||||
*
|
*
|
||||||
* @param treeBlock The FallingTreeBlock to play the sound for
|
* @param treeBlock The TreeBlock to play the sound for
|
||||||
*/
|
*/
|
||||||
void playLandingSound(FallingTreeBlock treeBlock);
|
void playLandingSound(ITreeBlock treeBlock);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,10 +1,19 @@
|
|||||||
package com.songoda.ultimatetimber.animation;
|
package com.songoda.ultimatetimber.animation;
|
||||||
|
|
||||||
|
import com.songoda.ultimatetimber.UltimateTimber;
|
||||||
|
import com.songoda.ultimatetimber.adapter.VersionAdapter;
|
||||||
|
import com.songoda.ultimatetimber.manager.ConfigurationManager;
|
||||||
|
import com.songoda.ultimatetimber.manager.TreeDefinitionManager;
|
||||||
import com.songoda.ultimatetimber.tree.DetectedTree;
|
import com.songoda.ultimatetimber.tree.DetectedTree;
|
||||||
|
import com.songoda.ultimatetimber.tree.ITreeBlock;
|
||||||
import com.songoda.ultimatetimber.tree.TreeBlockSet;
|
import com.songoda.ultimatetimber.tree.TreeBlockSet;
|
||||||
import com.songoda.ultimatetimber.tree.TreeDefinition;
|
import com.songoda.ultimatetimber.tree.TreeDefinition;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.scheduler.BukkitRunnable;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
public class TreeAnimationDisintegrate extends TreeAnimation {
|
public class TreeAnimationDisintegrate extends TreeAnimation {
|
||||||
|
|
||||||
@ -14,7 +23,62 @@ public class TreeAnimationDisintegrate extends TreeAnimation {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void playAnimation(Runnable whenFinished) {
|
public void playAnimation(Runnable whenFinished) {
|
||||||
|
UltimateTimber ultimateTimber = UltimateTimber.getInstance();
|
||||||
|
TreeDefinitionManager treeDefinitionManager = ultimateTimber.getTreeDefinitionManager();
|
||||||
|
VersionAdapter versionAdapter = ultimateTimber.getVersionAdapter();
|
||||||
|
|
||||||
|
boolean useCustomSound = ConfigurationManager.Setting.USE_CUSTOM_SOUNDS.getBoolean();
|
||||||
|
boolean useCustomParticles = ConfigurationManager.Setting.USE_CUSTOM_PARTICLES.getBoolean();
|
||||||
|
|
||||||
|
if (useCustomSound)
|
||||||
|
versionAdapter.playFallingSound(this.detectedTree.getDetectedTreeBlocks().getInitialLogBlock());
|
||||||
|
|
||||||
|
List<ITreeBlock<Block>> orderedLogBlocks = new ArrayList<>(this.detectedTree.getDetectedTreeBlocks().getLogBlocks());
|
||||||
|
orderedLogBlocks.sort(Comparator.comparingInt(x -> x.getLocation().getBlockY()));
|
||||||
|
|
||||||
|
List<ITreeBlock<Block>> leafBlocks = new ArrayList<>(this.detectedTree.getDetectedTreeBlocks().getLeafBlocks());
|
||||||
|
Collections.shuffle(leafBlocks);
|
||||||
|
|
||||||
|
Player p = this.player;
|
||||||
|
TreeDefinition td = this.detectedTree.getTreeDefinition();
|
||||||
|
|
||||||
|
new BukkitRunnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
List<ITreeBlock<Block>> toDestroy = new ArrayList<>();
|
||||||
|
|
||||||
|
if (!orderedLogBlocks.isEmpty()) {
|
||||||
|
ITreeBlock<Block> treeBlock = orderedLogBlocks.get(0);
|
||||||
|
orderedLogBlocks.remove(treeBlock);
|
||||||
|
toDestroy.add(treeBlock);
|
||||||
|
} else if (!leafBlocks.isEmpty()) {
|
||||||
|
ITreeBlock<Block> treeBlock = leafBlocks.get(0);
|
||||||
|
leafBlocks.remove(treeBlock);
|
||||||
|
toDestroy.add(treeBlock);
|
||||||
|
|
||||||
|
if (!leafBlocks.isEmpty()) {
|
||||||
|
treeBlock = leafBlocks.get(0);
|
||||||
|
leafBlocks.remove(treeBlock);
|
||||||
|
toDestroy.add(treeBlock);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!toDestroy.isEmpty()) {
|
||||||
|
ITreeBlock<Block> first = toDestroy.get(0);
|
||||||
|
if (useCustomSound)
|
||||||
|
versionAdapter.playLandingSound(first);
|
||||||
|
|
||||||
|
for (ITreeBlock<Block> treeBlock : toDestroy) {
|
||||||
|
if (useCustomParticles)
|
||||||
|
versionAdapter.playFallingParticles(treeBlock);
|
||||||
|
treeDefinitionManager.dropTreeLoot(td, treeBlock, p);
|
||||||
|
TreeAnimationDisintegrate.this.replaceBlock(treeBlock.getBlock());
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
this.cancel();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}.runTaskTimer(ultimateTimber, 0, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -23,10 +23,11 @@ public class TreeAnimationNone extends TreeAnimation {
|
|||||||
VersionAdapter versionAdapter = UltimateTimber.getInstance().getVersionAdapter();
|
VersionAdapter versionAdapter = UltimateTimber.getInstance().getVersionAdapter();
|
||||||
|
|
||||||
if (ConfigurationManager.Setting.USE_CUSTOM_SOUNDS.getBoolean())
|
if (ConfigurationManager.Setting.USE_CUSTOM_SOUNDS.getBoolean())
|
||||||
versionAdapter.playFallingSound(this.detectedTree.getDetectedTreeBlocks());
|
versionAdapter.playFallingSound(this.detectedTree.getDetectedTreeBlocks().getInitialLogBlock());
|
||||||
|
|
||||||
if (ConfigurationManager.Setting.USE_CUSTOM_PARTICLES.getBoolean())
|
if (ConfigurationManager.Setting.USE_CUSTOM_PARTICLES.getBoolean())
|
||||||
versionAdapter.playFallingParticles(this.detectedTree.getDetectedTreeBlocks());
|
for (ITreeBlock<Block> treeBlock : this.detectedTree.getDetectedTreeBlocks().getAllTreeBlocks())
|
||||||
|
versionAdapter.playFallingParticles(treeBlock);
|
||||||
|
|
||||||
for (ITreeBlock<Block> treeBlock : this.detectedTree.getDetectedTreeBlocks().getAllTreeBlocks()) {
|
for (ITreeBlock<Block> treeBlock : this.detectedTree.getDetectedTreeBlocks().getAllTreeBlocks()) {
|
||||||
treeDefinitionManager.dropTreeLoot(this.detectedTree.getTreeDefinition(), treeBlock, this.player);
|
treeDefinitionManager.dropTreeLoot(this.detectedTree.getTreeDefinition(), treeBlock, this.player);
|
||||||
|
Loading…
Reference in New Issue
Block a user