Add additional holder snapshot bypasses for performance (#1978)

* Add additional holder snapshot bypasses for performance

* Extra optimisation - cuts lookups of block data in the world by half
This commit is contained in:
Maddy Miller 2023-01-19 20:28:54 +10:00 committed by GitHub
parent 46dfb69fb1
commit 1729e5e3d6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -20,6 +20,7 @@
package com.sk89q.worldguard.bukkit.listener.debounce.legacy; package com.sk89q.worldguard.bukkit.listener.debounce.legacy;
import com.sk89q.worldguard.bukkit.listener.debounce.legacy.InventoryMoveItemEventDebounce.Key; import com.sk89q.worldguard.bukkit.listener.debounce.legacy.InventoryMoveItemEventDebounce.Key;
import io.papermc.lib.PaperLib;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.block.Block; import org.bukkit.block.Block;
import org.bukkit.block.BlockState; import org.bukkit.block.BlockState;
@ -44,18 +45,18 @@ protected static class Key {
private final Object target; private final Object target;
public Key(InventoryMoveItemEvent event) { public Key(InventoryMoveItemEvent event) {
cause = transform(event.getInitiator().getHolder()); cause = transform(PaperLib.getHolder(event.getInitiator(), false).getHolder());
source = transform(event.getSource().getHolder()); source = transform(PaperLib.getHolder(event.getSource(), false).getHolder());
target = transform(event.getDestination().getHolder()); target = transform(PaperLib.getHolder(event.getDestination(), false).getHolder());
} }
private Object transform(InventoryHolder holder) { private Object transform(InventoryHolder holder) {
if (holder instanceof BlockState) { if (holder instanceof BlockState blockState) {
return new BlockMaterialKey(((BlockState) holder).getBlock()); return new BlockMaterialKey(blockState);
} else if (holder instanceof DoubleChest) { } else if (holder instanceof DoubleChest doubleChest) {
InventoryHolder left = ((DoubleChest) holder).getLeftSide(); InventoryHolder left = doubleChest.getLeftSide();
if (left instanceof Chest) { if (left instanceof Chest chest) {
return new BlockMaterialKey(((Chest) left).getBlock()); return new BlockMaterialKey(chest);
} else { } else {
return holder; return holder;
} }
@ -94,8 +95,8 @@ private static class BlockMaterialKey {
private final Block block; private final Block block;
private final Material material; private final Material material;
private BlockMaterialKey(Block block) { private BlockMaterialKey(BlockState block) {
this.block = block; this.block = block.getBlock();
material = block.getType(); material = block.getType();
} }