Skip to content

Commit

Permalink
Fixed blocks broken by pistons not being tracked correctly (#1728)
Browse files Browse the repository at this point in the history
  • Loading branch information
OmerBenGera committed Sep 1, 2023
1 parent aa5aeb8 commit 0879fba
Show file tree
Hide file tree
Showing 14 changed files with 101 additions and 6 deletions.
Expand Up @@ -14,6 +14,7 @@
import com.bgsoftware.superiorskyblock.nms.ICachedBlock;
import com.bgsoftware.superiorskyblock.nms.NMSWorld;
import com.bgsoftware.superiorskyblock.nms.algorithms.NMSCachedBlock;
import com.bgsoftware.superiorskyblock.nms.bridge.PistonPushReaction;
import com.bgsoftware.superiorskyblock.nms.v117.generator.IslandsGeneratorImpl;
import com.bgsoftware.superiorskyblock.nms.v117.spawners.TickingSpawnerBlockEntityNotifier;
import com.bgsoftware.superiorskyblock.nms.v117.world.KeyBlocksCache;
Expand Down Expand Up @@ -273,6 +274,12 @@ public boolean isWaterLogged(org.bukkit.block.Block block) {
return blockData instanceof Waterlogged && ((Waterlogged) blockData).isWaterlogged();
}

@Override
public PistonPushReaction getPistonReaction(org.bukkit.block.Block block) {
BlockState blockState = ((CraftBlock) block).getNMS();
return PistonPushReaction.values()[blockState.getPistonPushReaction().ordinal()];
}

@Override
public int getDefaultAmount(org.bukkit.block.Block bukkitBlock) {
BlockState blockState = ((CraftBlock) bukkitBlock).getNMS();
Expand Down
Expand Up @@ -14,6 +14,7 @@
import com.bgsoftware.superiorskyblock.nms.ICachedBlock;
import com.bgsoftware.superiorskyblock.nms.NMSWorld;
import com.bgsoftware.superiorskyblock.nms.algorithms.NMSCachedBlock;
import com.bgsoftware.superiorskyblock.nms.bridge.PistonPushReaction;
import com.bgsoftware.superiorskyblock.nms.v1182.generator.IslandsGeneratorImpl;
import com.bgsoftware.superiorskyblock.nms.v1182.spawners.TickingSpawnerBlockEntityNotifier;
import com.bgsoftware.superiorskyblock.nms.v1182.world.KeyBlocksCache;
Expand Down Expand Up @@ -274,6 +275,12 @@ public boolean isWaterLogged(org.bukkit.block.Block block) {
return blockData instanceof Waterlogged && ((Waterlogged) blockData).isWaterlogged();
}

@Override
public PistonPushReaction getPistonReaction(org.bukkit.block.Block block) {
BlockState blockState = ((CraftBlock) block).getNMS();
return PistonPushReaction.values()[blockState.getPistonPushReaction().ordinal()];
}

@Override
public int getDefaultAmount(org.bukkit.block.Block bukkitBlock) {
BlockState blockState = ((CraftBlock) bukkitBlock).getNMS();
Expand Down
Expand Up @@ -14,6 +14,7 @@
import com.bgsoftware.superiorskyblock.nms.ICachedBlock;
import com.bgsoftware.superiorskyblock.nms.NMSWorld;
import com.bgsoftware.superiorskyblock.nms.algorithms.NMSCachedBlock;
import com.bgsoftware.superiorskyblock.nms.bridge.PistonPushReaction;
import com.bgsoftware.superiorskyblock.nms.v119.generator.IslandsGeneratorImpl;
import com.bgsoftware.superiorskyblock.nms.v119.spawners.TickingSpawnerBlockEntityNotifier;
import com.bgsoftware.superiorskyblock.nms.v119.world.KeyBlocksCache;
Expand Down Expand Up @@ -274,6 +275,12 @@ public boolean isWaterLogged(org.bukkit.block.Block block) {
return blockData instanceof Waterlogged && ((Waterlogged) blockData).isWaterlogged();
}

@Override
public PistonPushReaction getPistonReaction(org.bukkit.block.Block block) {
BlockState blockState = ((CraftBlock) block).getNMS();
return PistonPushReaction.values()[blockState.getPistonPushReaction().ordinal()];
}

@Override
public int getDefaultAmount(org.bukkit.block.Block bukkitBlock) {
BlockState blockState = ((CraftBlock) bukkitBlock).getNMS();
Expand Down
Expand Up @@ -14,6 +14,7 @@
import com.bgsoftware.superiorskyblock.nms.ICachedBlock;
import com.bgsoftware.superiorskyblock.nms.NMSWorld;
import com.bgsoftware.superiorskyblock.nms.algorithms.NMSCachedBlock;
import com.bgsoftware.superiorskyblock.nms.bridge.PistonPushReaction;
import com.bgsoftware.superiorskyblock.nms.v1191.generator.IslandsGeneratorImpl;
import com.bgsoftware.superiorskyblock.nms.v1191.spawners.TickingSpawnerBlockEntityNotifier;
import com.bgsoftware.superiorskyblock.nms.v1191.world.KeyBlocksCache;
Expand Down Expand Up @@ -274,6 +275,12 @@ public boolean isWaterLogged(org.bukkit.block.Block block) {
return blockData instanceof Waterlogged && ((Waterlogged) blockData).isWaterlogged();
}

@Override
public PistonPushReaction getPistonReaction(org.bukkit.block.Block block) {
BlockState blockState = ((CraftBlock) block).getNMS();
return PistonPushReaction.values()[blockState.getPistonPushReaction().ordinal()];
}

@Override
public int getDefaultAmount(org.bukkit.block.Block bukkitBlock) {
BlockState blockState = ((CraftBlock) bukkitBlock).getNMS();
Expand Down
Expand Up @@ -14,6 +14,7 @@
import com.bgsoftware.superiorskyblock.nms.ICachedBlock;
import com.bgsoftware.superiorskyblock.nms.NMSWorld;
import com.bgsoftware.superiorskyblock.nms.algorithms.NMSCachedBlock;
import com.bgsoftware.superiorskyblock.nms.bridge.PistonPushReaction;
import com.bgsoftware.superiorskyblock.nms.v1192.generator.IslandsGeneratorImpl;
import com.bgsoftware.superiorskyblock.nms.v1192.spawners.TickingSpawnerBlockEntityNotifier;
import com.bgsoftware.superiorskyblock.nms.v1192.world.KeyBlocksCache;
Expand Down Expand Up @@ -274,6 +275,12 @@ public boolean isWaterLogged(org.bukkit.block.Block block) {
return blockData instanceof Waterlogged && ((Waterlogged) blockData).isWaterlogged();
}

@Override
public PistonPushReaction getPistonReaction(org.bukkit.block.Block block) {
BlockState blockState = ((CraftBlock) block).getNMS();
return PistonPushReaction.values()[blockState.getPistonPushReaction().ordinal()];
}

@Override
public int getDefaultAmount(org.bukkit.block.Block bukkitBlock) {
BlockState blockState = ((CraftBlock) bukkitBlock).getNMS();
Expand Down
Expand Up @@ -14,6 +14,7 @@
import com.bgsoftware.superiorskyblock.nms.ICachedBlock;
import com.bgsoftware.superiorskyblock.nms.NMSWorld;
import com.bgsoftware.superiorskyblock.nms.algorithms.NMSCachedBlock;
import com.bgsoftware.superiorskyblock.nms.bridge.PistonPushReaction;
import com.bgsoftware.superiorskyblock.nms.v1193.generator.IslandsGeneratorImpl;
import com.bgsoftware.superiorskyblock.nms.v1193.spawners.TickingSpawnerBlockEntityNotifier;
import com.bgsoftware.superiorskyblock.nms.v1193.world.KeyBlocksCache;
Expand Down Expand Up @@ -274,6 +275,12 @@ public boolean isWaterLogged(org.bukkit.block.Block block) {
return blockData instanceof Waterlogged && ((Waterlogged) blockData).isWaterlogged();
}

@Override
public PistonPushReaction getPistonReaction(org.bukkit.block.Block block) {
BlockState blockState = ((CraftBlock) block).getNMS();
return PistonPushReaction.values()[blockState.getPistonPushReaction().ordinal()];
}

@Override
public int getDefaultAmount(org.bukkit.block.Block bukkitBlock) {
BlockState blockState = ((CraftBlock) bukkitBlock).getNMS();
Expand Down
Expand Up @@ -14,6 +14,7 @@
import com.bgsoftware.superiorskyblock.nms.ICachedBlock;
import com.bgsoftware.superiorskyblock.nms.NMSWorld;
import com.bgsoftware.superiorskyblock.nms.algorithms.NMSCachedBlock;
import com.bgsoftware.superiorskyblock.nms.bridge.PistonPushReaction;
import com.bgsoftware.superiorskyblock.nms.v1194.generator.IslandsGeneratorImpl;
import com.bgsoftware.superiorskyblock.nms.v1194.spawners.TickingSpawnerBlockEntityNotifier;
import com.bgsoftware.superiorskyblock.nms.v1194.world.KeyBlocksCache;
Expand Down Expand Up @@ -274,6 +275,12 @@ public boolean isWaterLogged(org.bukkit.block.Block block) {
return blockData instanceof Waterlogged && ((Waterlogged) blockData).isWaterlogged();
}

@Override
public PistonPushReaction getPistonReaction(org.bukkit.block.Block block) {
BlockState blockState = ((CraftBlock) block).getNMS();
return PistonPushReaction.values()[blockState.getPistonPushReaction().ordinal()];
}

@Override
public int getDefaultAmount(org.bukkit.block.Block bukkitBlock) {
BlockState blockState = ((CraftBlock) bukkitBlock).getNMS();
Expand Down
Expand Up @@ -14,6 +14,7 @@
import com.bgsoftware.superiorskyblock.nms.ICachedBlock;
import com.bgsoftware.superiorskyblock.nms.NMSWorld;
import com.bgsoftware.superiorskyblock.nms.algorithms.NMSCachedBlock;
import com.bgsoftware.superiorskyblock.nms.bridge.PistonPushReaction;
import com.bgsoftware.superiorskyblock.nms.v1201.generator.IslandsGeneratorImpl;
import com.bgsoftware.superiorskyblock.nms.v1201.spawners.TickingSpawnerBlockEntityNotifier;
import com.bgsoftware.superiorskyblock.nms.v1201.world.KeyBlocksCache;
Expand Down Expand Up @@ -274,6 +275,12 @@ public boolean isWaterLogged(org.bukkit.block.Block block) {
return blockData instanceof Waterlogged && ((Waterlogged) blockData).isWaterlogged();
}

@Override
public PistonPushReaction getPistonReaction(org.bukkit.block.Block block) {
BlockState blockState = ((CraftBlock) block).getNMS();
return PistonPushReaction.values()[blockState.getPistonPushReaction().ordinal()];
}

@Override
public int getDefaultAmount(org.bukkit.block.Block bukkitBlock) {
BlockState blockState = ((CraftBlock) bukkitBlock).getNMS();
Expand Down
Expand Up @@ -11,6 +11,7 @@
import com.bgsoftware.superiorskyblock.listener.SignsListener;
import com.bgsoftware.superiorskyblock.nms.ICachedBlock;
import com.bgsoftware.superiorskyblock.nms.NMSWorld;
import com.bgsoftware.superiorskyblock.nms.bridge.PistonPushReaction;
import com.bgsoftware.superiorskyblock.nms.v1_12_R1.generator.IslandsGeneratorImpl;
import com.bgsoftware.superiorskyblock.nms.v1_12_R1.spawners.MobSpawnerAbstractNotifier;
import com.bgsoftware.superiorskyblock.nms.v1_12_R1.world.KeyBlocksCache;
Expand Down Expand Up @@ -42,6 +43,7 @@
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.craftbukkit.v1_12_R1.CraftWorld;
import org.bukkit.craftbukkit.v1_12_R1.block.CraftBlock;
import org.bukkit.craftbukkit.v1_12_R1.block.CraftSign;
import org.bukkit.craftbukkit.v1_12_R1.entity.CraftPlayer;
import org.bukkit.entity.Player;
Expand Down Expand Up @@ -213,6 +215,14 @@ public boolean isWaterLogged(org.bukkit.block.Block block) {
return blockType == Material.WATER || blockType == Material.STATIONARY_WATER;
}

@Override
public PistonPushReaction getPistonReaction(org.bukkit.block.Block block) {
WorldServer worldServer = ((CraftWorld) block.getWorld()).getHandle();
BlockPosition blockPosition = new BlockPosition(block.getX(), block.getY(), block.getZ());
IBlockData blockData = worldServer.getType(blockPosition);
return PistonPushReaction.values()[blockData.o().ordinal()];
}

@Override
public int getDefaultAmount(org.bukkit.block.Block block) {
Location blockLocation = block.getLocation();
Expand Down
Expand Up @@ -14,6 +14,7 @@
import com.bgsoftware.superiorskyblock.nms.ICachedBlock;
import com.bgsoftware.superiorskyblock.nms.NMSWorld;
import com.bgsoftware.superiorskyblock.nms.algorithms.NMSCachedBlock;
import com.bgsoftware.superiorskyblock.nms.bridge.PistonPushReaction;
import com.bgsoftware.superiorskyblock.nms.v1_16_R3.generator.IslandsGeneratorImpl;
import com.bgsoftware.superiorskyblock.nms.v1_16_R3.spawners.TileEntityMobSpawnerNotifier;
import com.bgsoftware.superiorskyblock.nms.v1_16_R3.world.BlockStatesMapper;
Expand Down Expand Up @@ -254,6 +255,12 @@ public boolean isWaterLogged(org.bukkit.block.Block block) {
return blockData instanceof Waterlogged && ((Waterlogged) blockData).isWaterlogged();
}

@Override
public PistonPushReaction getPistonReaction(org.bukkit.block.Block block) {
IBlockData blockData = ((CraftBlock) block).getNMS();
return PistonPushReaction.values()[blockData.getPushReaction().ordinal()];
}

@Override
public int getDefaultAmount(org.bukkit.block.Block block) {
IBlockData blockData = ((CraftBlock) block).getNMS();
Expand Down
Expand Up @@ -11,6 +11,7 @@
import com.bgsoftware.superiorskyblock.listener.SignsListener;
import com.bgsoftware.superiorskyblock.nms.ICachedBlock;
import com.bgsoftware.superiorskyblock.nms.NMSWorld;
import com.bgsoftware.superiorskyblock.nms.bridge.PistonPushReaction;
import com.bgsoftware.superiorskyblock.nms.v1_8_R3.generator.IslandsGeneratorImpl;
import com.bgsoftware.superiorskyblock.nms.v1_8_R3.spawners.MobSpawnerAbstractNotifier;
import com.bgsoftware.superiorskyblock.nms.v1_8_R3.world.KeyBlocksCache;
Expand Down Expand Up @@ -42,6 +43,7 @@
import org.bukkit.craftbukkit.v1_8_R3.CraftWorld;
import org.bukkit.craftbukkit.v1_8_R3.block.CraftSign;
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer;
import org.bukkit.craftbukkit.v1_8_R3.util.CraftMagicNumbers;
import org.bukkit.entity.Player;
import org.bukkit.event.block.SignChangeEvent;
import org.bukkit.generator.ChunkGenerator;
Expand Down Expand Up @@ -218,6 +220,12 @@ public boolean isWaterLogged(org.bukkit.block.Block block) {
return blockType == Material.WATER || blockType == Material.STATIONARY_WATER;
}

@Override
public PistonPushReaction getPistonReaction(org.bukkit.block.Block block) {
Block nmsBlock = CraftMagicNumbers.getBlock(block);
return PistonPushReaction.values()[nmsBlock.getMaterial().getPushReaction()];
}

@Override
public int getDefaultAmount(org.bukkit.block.Block block) {
Location blockLocation = block.getLocation();
Expand Down
Expand Up @@ -13,6 +13,7 @@
import com.bgsoftware.superiorskyblock.core.key.KeyMaps;
import com.bgsoftware.superiorskyblock.core.key.Keys;
import com.bgsoftware.superiorskyblock.core.threads.BukkitExecutor;
import com.bgsoftware.superiorskyblock.nms.bridge.PistonPushReaction;
import com.bgsoftware.superiorskyblock.world.BukkitEntities;
import org.bukkit.Bukkit;
import org.bukkit.Location;
Expand Down Expand Up @@ -308,11 +309,10 @@ private void onDragonEggDrop(ItemSpawnEvent e) {
}

@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
private void onDragonEggDrop(BlockPistonExtendEvent e) {
private void onPistonExtend(BlockPistonExtendEvent e) {
for (Block block : e.getBlocks()) {
if (block.getType() == Material.DRAGON_EGG) {
onBlockBreak(ConstantKeys.DRAGON_EGG, block.getLocation(), 1,
Flag.DIRTY_CHUNK, Flag.SAVE_BLOCK_COUNT);
if (plugin.getNMSWorld().getPistonReaction(block) == PistonPushReaction.DESTROY) {
onBlockBreak(Keys.of(block), block.getLocation(), 1, Flag.DIRTY_CHUNK, Flag.SAVE_BLOCK_COUNT);
}
}
}
Expand Down Expand Up @@ -477,8 +477,7 @@ public void onBlockDestroy(com.destroystokyo.paper.event.block.BlockDestroyEvent
return;

int blockCount = plugin.getNMSWorld().getDefaultAmount(e.getBlock());
onBlockBreak(Keys.of(e.getBlock()), e.getBlock().getLocation(), blockCount,
Flag.HANDLE_NEARBY_BLOCKS, Flag.DIRTY_CHUNK);
onBlockBreak(Keys.of(e.getBlock()), e.getBlock().getLocation(), blockCount, Flag.DIRTY_CHUNK);
}

}
Expand Down
Expand Up @@ -4,6 +4,7 @@
import com.bgsoftware.superiorskyblock.api.island.Island;
import com.bgsoftware.superiorskyblock.api.key.Key;
import com.bgsoftware.superiorskyblock.api.wrappers.SuperiorPlayer;
import com.bgsoftware.superiorskyblock.nms.bridge.PistonPushReaction;
import com.bgsoftware.superiorskyblock.nms.world.WorldEditSession;
import com.bgsoftware.superiorskyblock.tag.CompoundTag;
import org.bukkit.ChunkSnapshot;
Expand Down Expand Up @@ -38,6 +39,8 @@ public interface NMSWorld {

boolean isWaterLogged(Block block);

PistonPushReaction getPistonReaction(Block block);

int getDefaultAmount(Block block);

void placeSign(Island island, Location location);
Expand Down
@@ -0,0 +1,12 @@
package com.bgsoftware.superiorskyblock.nms.bridge;

public enum PistonPushReaction {

/* Keep in sync with PushReaction nms */
NORMAL,
DESTROY,
BLOCK,
IGNORE,
PUSH_ONLY

}

0 comments on commit 0879fba

Please sign in to comment.