Added support for copper chests

This commit is contained in:
Intelli 2025-10-01 19:06:00 -06:00
parent 51d4bf27cd
commit 6572946b3d
6 changed files with 60 additions and 2 deletions

View file

@ -1,7 +1,10 @@
package net.coreprotect.bukkit; package net.coreprotect.bukkit;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set;
import org.bukkit.Color; import org.bukkit.Color;
import org.bukkit.DyeColor; import org.bukkit.DyeColor;
@ -85,6 +88,7 @@ public class BukkitAdapter implements BukkitInterface {
} }
// -------------------- Basic data conversion methods -------------------- // -------------------- Basic data conversion methods --------------------
public static Set<Material> EMPTY_SET = new HashSet<>(Arrays.asList());
@Override @Override
public String parseLegacyName(String name) { public String parseLegacyName(String name) {
@ -350,4 +354,14 @@ public class BukkitAdapter implements BukkitInterface {
public Object getRegistryValue(String key, Object tClass) { public Object getRegistryValue(String key, Object tClass) {
return null; return null;
} }
@Override
public boolean isCopperChest(Material material) {
return false;
}
@Override
public Set<Material> copperChestMaterials() {
return EMPTY_SET;
}
} }

View file

@ -2,6 +2,7 @@ package net.coreprotect.bukkit;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.World; import org.bukkit.World;
@ -432,4 +433,8 @@ public interface BukkitInterface {
* @return The parsed name * @return The parsed name
*/ */
String parseLegacyName(String name); String parseLegacyName(String name);
boolean isCopperChest(Material material);
Set<Material> copperChestMaterials();
} }

View file

@ -1,5 +1,7 @@
package net.coreprotect.bukkit; package net.coreprotect.bukkit;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
@ -22,6 +24,8 @@ import net.coreprotect.model.BlockGroup;
*/ */
public class Bukkit_v1_21 extends Bukkit_v1_20 implements BukkitInterface { public class Bukkit_v1_21 extends Bukkit_v1_20 implements BukkitInterface {
public static Set<Material> COPPER_CHESTS = new HashSet<>(Arrays.asList());
/** /**
* Initializes the Bukkit_v1_21 adapter with 1.21-specific block groups and mappings. * Initializes the Bukkit_v1_21 adapter with 1.21-specific block groups and mappings.
* Sets up collections of blocks with similar behavior for efficient handling. * Sets up collections of blocks with similar behavior for efficient handling.
@ -29,6 +33,9 @@ public class Bukkit_v1_21 extends Bukkit_v1_20 implements BukkitInterface {
public Bukkit_v1_21() { public Bukkit_v1_21() {
initializeBlockGroups(); initializeBlockGroups();
initializeTrapdoorBlocks(); initializeTrapdoorBlocks();
BlockGroup.INTERACT_BLOCKS.addAll(copperChestMaterials());
BlockGroup.CONTAINERS.addAll(copperChestMaterials());
BlockGroup.UPDATE_STATE.addAll(copperChestMaterials());
} }
/** /**
@ -154,4 +161,35 @@ public class Bukkit_v1_21 extends Bukkit_v1_20 implements BukkitInterface {
wolf.setVariant(variant); wolf.setVariant(variant);
} }
@Override
public boolean isCopperChest(Material material) {
if (COPPER_CHESTS.contains(material) && material != Material.CHEST) {
return true;
}
return false;
}
@Override
public Set<Material> copperChestMaterials() {
if (COPPER_CHESTS.isEmpty()) {
Material copperChest = Material.getMaterial("COPPER_CHEST");
if (copperChest == null) {
COPPER_CHESTS.add(Material.CHEST);
}
else {
COPPER_CHESTS.add(Material.getMaterial("COPPER_CHEST"));
COPPER_CHESTS.add(Material.getMaterial("EXPOSED_COPPER_CHEST"));
COPPER_CHESTS.add(Material.getMaterial("WEATHERED_COPPER_CHEST"));
COPPER_CHESTS.add(Material.getMaterial("OXIDIZED_COPPER_CHEST"));
COPPER_CHESTS.add(Material.getMaterial("WAXED_COPPER_CHEST"));
COPPER_CHESTS.add(Material.getMaterial("WAXED_EXPOSED_COPPER_CHEST"));
COPPER_CHESTS.add(Material.getMaterial("WAXED_WEATHERED_COPPER_CHEST"));
COPPER_CHESTS.add(Material.getMaterial("WAXED_OXIDIZED_COPPER_CHEST"));
}
}
return COPPER_CHESTS;
}
} }

View file

@ -209,7 +209,7 @@ public class RollbackProcessor {
BlockData checkData = rowType == Material.AIR ? blockData : rawBlockData; BlockData checkData = rowType == Material.AIR ? blockData : rawBlockData;
if (checkData != null) { if (checkData != null) {
if (checkData.getAsString().equals(pendingChangeData.getAsString()) || checkData instanceof org.bukkit.block.data.MultipleFacing || checkData instanceof org.bukkit.block.data.type.Stairs || checkData instanceof org.bukkit.block.data.type.RedstoneWire) { if (checkData.getAsString().equals(pendingChangeData.getAsString()) || checkData instanceof org.bukkit.block.data.MultipleFacing || checkData instanceof org.bukkit.block.data.type.Stairs || checkData instanceof org.bukkit.block.data.type.RedstoneWire) {
if (rowType != Material.CHEST && rowType != Material.TRAPPED_CHEST) { // always update double chests if (rowType != Material.CHEST && rowType != Material.TRAPPED_CHEST && !BukkitAdapter.ADAPTER.isCopperChest(rowType)) { // always update double chests
changeBlock = false; changeBlock = false;
} }
} }

View file

@ -145,7 +145,7 @@ public final class PlayerInteractListener extends Queue implements Listener {
} }
else if (isContainerBlock && Config.getConfig(world).ITEM_TRANSACTIONS) { else if (isContainerBlock && Config.getConfig(world).ITEM_TRANSACTIONS) {
Location location = null; Location location = null;
if (type.equals(Material.CHEST) || type.equals(Material.TRAPPED_CHEST)) { if (type.equals(Material.CHEST) || type.equals(Material.TRAPPED_CHEST) || BukkitAdapter.ADAPTER.isCopperChest(type)) {
Chest chest = (Chest) clickedBlock.getState(); Chest chest = (Chest) clickedBlock.getState();
InventoryHolder inventoryHolder = chest.getInventory().getHolder(); InventoryHolder inventoryHolder = chest.getInventory().getHolder();

View file

@ -208,6 +208,7 @@ public class BlockUtils {
if (blockState instanceof BlockInventoryHolder) { if (blockState instanceof BlockInventoryHolder) {
if (singleBlock) { if (singleBlock) {
List<Material> chests = java.util.Arrays.asList(Material.CHEST, Material.TRAPPED_CHEST); List<Material> chests = java.util.Arrays.asList(Material.CHEST, Material.TRAPPED_CHEST);
chests.addAll(BukkitAdapter.ADAPTER.copperChestMaterials());
Material type = blockState.getType(); Material type = blockState.getType();
if (chests.contains(type)) { if (chests.contains(type)) {
inventory = ((org.bukkit.block.Chest) blockState).getBlockInventory(); inventory = ((org.bukkit.block.Chest) blockState).getBlockInventory();