mirror of
https://github.com/mcMMO-Dev/mcMMO.git
synced 2025-06-25 02:04:44 +02:00
Added fail safes against bonus drop meta not being cleaned up
This commit is contained in:
@ -140,7 +140,7 @@ public class BlockListener implements Listener {
|
||||
movedBlock = block.getRelative(direction);
|
||||
|
||||
if(BlockUtils.isWithinWorldBounds(movedBlock)) {
|
||||
mcMMO.getPlaceStore().setTrue(movedBlock);
|
||||
BlockUtils.setUnnaturalBlock(block);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -166,12 +166,13 @@ public class BlockListener implements Listener {
|
||||
|
||||
//Spigot makes bad things happen in its API
|
||||
if(BlockUtils.isWithinWorldBounds(movedBlock)) {
|
||||
mcMMO.getPlaceStore().setTrue(movedBlock);
|
||||
BlockUtils.setUnnaturalBlock(movedBlock);
|
||||
}
|
||||
|
||||
for (Block block : event.getBlocks()) {
|
||||
if(BlockUtils.isWithinWorldBounds(block)) {
|
||||
mcMMO.getPlaceStore().setTrue(block.getRelative(direction));
|
||||
if(BlockUtils.isWithinWorldBounds(block) && BlockUtils.isWithinWorldBounds(block.getRelative(direction))) {
|
||||
Block relativeBlock = block.getRelative(direction);
|
||||
BlockUtils.setUnnaturalBlock(relativeBlock);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -189,14 +190,13 @@ public class BlockListener implements Listener {
|
||||
if(WorldBlacklist.isWorldBlacklisted(event.getBlock().getWorld()))
|
||||
return;
|
||||
|
||||
|
||||
BlockState blockState = event.getNewState();
|
||||
|
||||
if(ExperienceConfig.getInstance().isSnowExploitPrevented() && BlockUtils.shouldBeWatched(blockState)) {
|
||||
Block block = blockState.getBlock();
|
||||
|
||||
if(BlockUtils.isWithinWorldBounds(block)) {
|
||||
mcMMO.getPlaceStore().setTrue(block);
|
||||
BlockUtils.setUnnaturalBlock(block);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -217,8 +217,9 @@ public class BlockListener implements Listener {
|
||||
BlockState newState = event.getNewState();
|
||||
|
||||
if(newState.getType() != Material.OBSIDIAN && ExperienceConfig.getInstance().doesBlockGiveSkillXP(PrimarySkillType.MINING, newState.getBlockData())) {
|
||||
if(BlockUtils.isWithinWorldBounds(newState.getBlock())) {
|
||||
mcMMO.getPlaceStore().setTrue(newState);
|
||||
Block block = newState.getBlock();
|
||||
if(BlockUtils.isWithinWorldBounds(block)) {
|
||||
BlockUtils.setUnnaturalBlock(block);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -245,7 +246,7 @@ public class BlockListener implements Listener {
|
||||
if(BlockUtils.isWithinWorldBounds(block)) {
|
||||
//NOTE: BlockMultiPlace has its own logic so don't handle anything that would overlap
|
||||
if (!(event instanceof BlockMultiPlaceEvent)) {
|
||||
mcMMO.getPlaceStore().setTrue(blockState);
|
||||
BlockUtils.setUnnaturalBlock(block);
|
||||
}
|
||||
}
|
||||
|
||||
@ -289,8 +290,8 @@ public class BlockListener implements Listener {
|
||||
}
|
||||
|
||||
//Track unnatural blocks
|
||||
for(BlockState replacedStates : event.getReplacedBlockStates()) {
|
||||
mcMMO.getPlaceStore().setTrue(replacedStates);
|
||||
for(BlockState replacedState : event.getReplacedBlockStates()) {
|
||||
BlockUtils.setUnnaturalBlock(replacedState.getBlock());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -245,7 +245,7 @@ public class EntityListener implements Listener {
|
||||
metaCleanupTask.runTaskTimer(pluginRef, 20, 20*60); //6000 ticks is 5 minutes
|
||||
}
|
||||
else if (isTracked) {
|
||||
mcMMO.getPlaceStore().setTrue(block);
|
||||
BlockUtils.setUnnaturalBlock(block);
|
||||
entity.removeMetadata(MetadataConstants.METADATA_KEY_TRAVELING_BLOCK, pluginRef);
|
||||
}
|
||||
} else if ((block.getType() == Material.REDSTONE_ORE || block.getType().getKey().getKey().equalsIgnoreCase("deepslate_redstone_ore"))) {
|
||||
|
@ -35,7 +35,7 @@ public class PistonTrackerTask extends BukkitRunnable {
|
||||
Block nextBlock = b.getRelative(direction);
|
||||
|
||||
if (nextBlock.hasMetadata(MetadataConstants.METADATA_KEY_PISTON_TRACKING)) {
|
||||
mcMMO.getPlaceStore().setTrue(nextBlock);
|
||||
BlockUtils.setUnnaturalBlock(nextBlock);
|
||||
nextBlock.removeMetadata(MetadataConstants.METADATA_KEY_PISTON_TRACKING, mcMMO.p);
|
||||
}
|
||||
else if (mcMMO.getPlaceStore().isTrue(nextBlock)) {
|
||||
|
@ -30,6 +30,6 @@ public class StickyPistonTrackerTask extends BukkitRunnable {
|
||||
|
||||
// The sticky piston actually pulled the block so move the PlaceStore data
|
||||
mcMMO.getPlaceStore().setFalse(movedBlock.getRelative(direction));
|
||||
mcMMO.getPlaceStore().setTrue(movedBlock);
|
||||
BlockUtils.setUnnaturalBlock(movedBlock);
|
||||
}
|
||||
}
|
||||
|
@ -38,6 +38,18 @@ public final class BlockUtils {
|
||||
blockState.setMetadata(MetadataConstants.METADATA_KEY_BONUS_DROPS, new BonusDropMeta(1, mcMMO.p));
|
||||
}
|
||||
|
||||
/**
|
||||
* Set up the state for a block to be seen as unnatural and cleanup any unwanted metadata from the block
|
||||
* @param block target block
|
||||
*/
|
||||
public static void setUnnaturalBlock(@NotNull Block block) {
|
||||
mcMMO.getPlaceStore().setTrue(block);
|
||||
|
||||
// Failsafe against lingering metadata
|
||||
if(block.hasMetadata(MetadataConstants.METADATA_KEY_BONUS_DROPS))
|
||||
block.removeMetadata(MetadataConstants.METADATA_KEY_BONUS_DROPS, mcMMO.p);
|
||||
}
|
||||
|
||||
/**
|
||||
* Cleans up some block metadata when a block breaks and the metadata is no longer needed
|
||||
* This also sets the blocks coords to false in our chunk store
|
||||
|
Reference in New Issue
Block a user