mirror of
https://github.com/songoda/UltimateTimber.git
synced 2024-11-29 13:25:23 +01:00
Disintegrate/Crumble block integrity checks
This commit is contained in:
parent
53ba40fb65
commit
90ba6bbf02
@ -8,6 +8,7 @@ import com.songoda.ultimatetimber.tree.FallingTreeBlock;
|
|||||||
import com.songoda.ultimatetimber.tree.ITreeBlock;
|
import com.songoda.ultimatetimber.tree.ITreeBlock;
|
||||||
import com.songoda.ultimatetimber.tree.TreeBlock;
|
import com.songoda.ultimatetimber.tree.TreeBlock;
|
||||||
import com.songoda.ultimatetimber.tree.TreeBlockSet;
|
import com.songoda.ultimatetimber.tree.TreeBlockSet;
|
||||||
|
import com.songoda.ultimatetimber.tree.TreeBlockType;
|
||||||
import com.songoda.ultimatetimber.tree.TreeDefinition;
|
import com.songoda.ultimatetimber.tree.TreeDefinition;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
@ -61,6 +62,14 @@ public class TreeAnimationCrumble extends TreeAnimation {
|
|||||||
List<ITreeBlock<Block>> partition = treeBlocks.get(0);
|
List<ITreeBlock<Block>> partition = treeBlocks.get(0);
|
||||||
for (int i = 0; i < 3 && !partition.isEmpty(); i++) {
|
for (int i = 0; i < 3 && !partition.isEmpty(); i++) {
|
||||||
ITreeBlock<Block> treeBlock = partition.remove(0);
|
ITreeBlock<Block> treeBlock = partition.remove(0);
|
||||||
|
if (treeBlock.getTreeBlockType().equals(TreeBlockType.LOG)) {
|
||||||
|
if (td.getLogBlockData().stream().noneMatch(x -> x.isSimilar(treeBlock.getBlock())))
|
||||||
|
continue;
|
||||||
|
} else if (treeBlock.getTreeBlockType().equals(TreeBlockType.LEAF)) {
|
||||||
|
if (td.getLeafBlockData().stream().noneMatch(x -> x.isSimilar(treeBlock.getBlock())))
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
FallingTreeBlock fallingTreeBlock = TreeAnimationCrumble.this.convertToFallingBlock((TreeBlock)treeBlock);
|
FallingTreeBlock fallingTreeBlock = TreeAnimationCrumble.this.convertToFallingBlock((TreeBlock)treeBlock);
|
||||||
if (fallingTreeBlock == null)
|
if (fallingTreeBlock == null)
|
||||||
continue;
|
continue;
|
||||||
|
@ -7,7 +7,9 @@ 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.ITreeBlock;
|
||||||
import com.songoda.ultimatetimber.tree.TreeBlock;
|
import com.songoda.ultimatetimber.tree.TreeBlock;
|
||||||
|
import com.songoda.ultimatetimber.tree.TreeBlockType;
|
||||||
import com.songoda.ultimatetimber.tree.TreeDefinition;
|
import com.songoda.ultimatetimber.tree.TreeDefinition;
|
||||||
|
import org.bukkit.Material;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.entity.FallingBlock;
|
import org.bukkit.entity.FallingBlock;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
@ -73,10 +75,18 @@ public class TreeAnimationDisintegrate extends TreeAnimation {
|
|||||||
versionAdapter.playLandingSound(first);
|
versionAdapter.playLandingSound(first);
|
||||||
|
|
||||||
for (ITreeBlock<Block> treeBlock : toDestroy) {
|
for (ITreeBlock<Block> treeBlock : toDestroy) {
|
||||||
|
if (treeBlock.getTreeBlockType().equals(TreeBlockType.LOG)) {
|
||||||
|
if (td.getLogBlockData().stream().noneMatch(x -> x.isSimilar(treeBlock.getBlock())))
|
||||||
|
continue;
|
||||||
|
} else if (treeBlock.getTreeBlockType().equals(TreeBlockType.LEAF)) {
|
||||||
|
if (td.getLeafBlockData().stream().noneMatch(x -> x.isSimilar(treeBlock.getBlock())))
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if (useCustomParticles)
|
if (useCustomParticles)
|
||||||
versionAdapter.playFallingParticles(td, treeBlock);
|
versionAdapter.playFallingParticles(td, treeBlock);
|
||||||
treeDefinitionManager.dropTreeLoot(td, treeBlock, p, hst);
|
treeDefinitionManager.dropTreeLoot(td, treeBlock, p, hst);
|
||||||
TreeAnimationDisintegrate.this.replaceBlock((TreeBlock)treeBlock);
|
TreeAnimationDisintegrate.this.replaceBlock((TreeBlock) treeBlock);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
this.cancel();
|
this.cancel();
|
||||||
|
@ -1,17 +1,11 @@
|
|||||||
package com.songoda.ultimatetimber.manager;
|
package com.songoda.ultimatetimber.manager;
|
||||||
|
|
||||||
import com.songoda.ultimatetimber.UltimateTimber;
|
import com.songoda.ultimatetimber.UltimateTimber;
|
||||||
import com.songoda.ultimatetimber.adapter.IBlockData;
|
|
||||||
import com.songoda.ultimatetimber.events.TreeFellEvent;
|
import com.songoda.ultimatetimber.events.TreeFellEvent;
|
||||||
import com.songoda.ultimatetimber.tree.ITreeBlock;
|
import com.songoda.ultimatetimber.tree.ITreeBlock;
|
||||||
import com.songoda.ultimatetimber.tree.TreeBlockType;
|
|
||||||
import com.songoda.ultimatetimber.tree.TreeDefinition;
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.Material;
|
|
||||||
import org.bukkit.Particle;
|
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.block.BlockFace;
|
|
||||||
import org.bukkit.block.BlockState;
|
import org.bukkit.block.BlockState;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.EventPriority;
|
import org.bukkit.event.EventPriority;
|
||||||
@ -21,31 +15,34 @@ import org.bukkit.event.block.BlockPlaceEvent;
|
|||||||
import org.bukkit.event.block.LeavesDecayEvent;
|
import org.bukkit.event.block.LeavesDecayEvent;
|
||||||
import org.bukkit.event.world.StructureGrowEvent;
|
import org.bukkit.event.world.StructureGrowEvent;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.Collections;
|
||||||
import java.util.HashSet;
|
import java.util.LinkedHashMap;
|
||||||
import java.util.List;
|
import java.util.Map;
|
||||||
import java.util.Random;
|
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
public class PlacedBlockManager extends Manager implements Listener {
|
public class PlacedBlockManager extends Manager implements Listener {
|
||||||
|
|
||||||
private List<Location> placedBlocks;
|
private Set<Location> placedBlocks;
|
||||||
private boolean ignorePlacedBlocks;
|
private boolean ignorePlacedBlocks;
|
||||||
private int maxPlacedBlockMemorySize;
|
private int maxPlacedBlockMemorySize;
|
||||||
|
|
||||||
public PlacedBlockManager(UltimateTimber ultimateTimber) {
|
public PlacedBlockManager(UltimateTimber ultimateTimber) {
|
||||||
super(ultimateTimber);
|
super(ultimateTimber);
|
||||||
this.placedBlocks = new ArrayList<>();
|
|
||||||
this.ignorePlacedBlocks = true;
|
|
||||||
this.maxPlacedBlockMemorySize = 10000;
|
|
||||||
Bukkit.getPluginManager().registerEvents(this, ultimateTimber);
|
Bukkit.getPluginManager().registerEvents(this, ultimateTimber);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void reload() {
|
public void reload() {
|
||||||
this.placedBlocks.clear();
|
|
||||||
this.ignorePlacedBlocks = ConfigurationManager.Setting.IGNORE_PLACED_BLOCKS.getBoolean();
|
this.ignorePlacedBlocks = ConfigurationManager.Setting.IGNORE_PLACED_BLOCKS.getBoolean();
|
||||||
this.maxPlacedBlockMemorySize = ConfigurationManager.Setting.IGNORE_PLACED_BLOCKS_MEMORY_SIZE.getInt();
|
this.maxPlacedBlockMemorySize = ConfigurationManager.Setting.IGNORE_PLACED_BLOCKS_MEMORY_SIZE.getInt();
|
||||||
|
|
||||||
|
// Ensures the oldest entry is removed if it exceeds the limit
|
||||||
|
this.placedBlocks = Collections.newSetFromMap(new LinkedHashMap<Location, Boolean>() {
|
||||||
|
@Override
|
||||||
|
protected boolean removeEldestEntry(Map.Entry<Location, Boolean> eldest) {
|
||||||
|
return this.size() > PlacedBlockManager.this.maxPlacedBlockMemorySize;
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -104,8 +101,6 @@ public class PlacedBlockManager extends Manager implements Listener {
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
this.placedBlocks.add(block.getLocation());
|
this.placedBlocks.add(block.getLocation());
|
||||||
if (this.placedBlocks.size() > this.maxPlacedBlockMemorySize)
|
|
||||||
this.placedBlocks.remove(0);
|
|
||||||
} else {
|
} else {
|
||||||
this.placedBlocks.remove(block.getLocation());
|
this.placedBlocks.remove(block.getLocation());
|
||||||
}
|
}
|
||||||
|
@ -123,9 +123,9 @@ bonus-loot-multiplier: 2
|
|||||||
ignore-placed-blocks: true
|
ignore-placed-blocks: true
|
||||||
|
|
||||||
# The maximum number of blocks to keep track of in memory at once
|
# The maximum number of blocks to keep track of in memory at once
|
||||||
# Use a lower number if this starts to take up too much memory
|
# Use a lower number if this starts to take up too much memory or trees start taking too long to detect
|
||||||
# Default: 10000
|
# Default: 5000
|
||||||
ignore-placed-blocks-memory-size: 10000
|
ignore-placed-blocks-memory-size: 5000
|
||||||
|
|
||||||
# Applies experience when using Jobs/mcMMO
|
# Applies experience when using Jobs/mcMMO
|
||||||
# Only does something if Jobs or mcMMO is installed
|
# Only does something if Jobs or mcMMO is installed
|
||||||
|
@ -124,9 +124,9 @@ bonus-loot-multiplier: 2
|
|||||||
ignore-placed-blocks: true
|
ignore-placed-blocks: true
|
||||||
|
|
||||||
# The maximum number of blocks to keep track of in memory at once
|
# The maximum number of blocks to keep track of in memory at once
|
||||||
# Use a lower number if this starts to take up too much memory
|
# Use a lower number if this starts to take up too much memory or trees start taking too long to detect
|
||||||
# Default: 10000
|
# Default: 5000
|
||||||
ignore-placed-blocks-memory-size: 10000
|
ignore-placed-blocks-memory-size: 5000
|
||||||
|
|
||||||
# Applies experience when using Jobs/mcMMO
|
# Applies experience when using Jobs/mcMMO
|
||||||
# Only does something if Jobs or mcMMO is installed
|
# Only does something if Jobs or mcMMO is installed
|
||||||
|
Loading…
Reference in New Issue
Block a user