forked from github-mirror/CoreProtect
Improved painting variant handling
This commit is contained in:
1 parent
eaae2afaf8
commit
cce8c9eb51
7 files changed
+88
-7
No files matched your search
@@ -3,9 +3,11 @@ package net.coreprotect.bukkit;
|
|||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
|
import org.bukkit.Art;
|
||||||
import org.bukkit.Color;
|
import org.bukkit.Color;
|
||||||
import org.bukkit.DyeColor;
|
import org.bukkit.DyeColor;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
@@ -22,6 +24,7 @@ import org.bukkit.entity.Entity;
|
|||||||
import org.bukkit.entity.EntityType;
|
import org.bukkit.entity.EntityType;
|
||||||
import org.bukkit.entity.ItemFrame;
|
import org.bukkit.entity.ItemFrame;
|
||||||
import org.bukkit.entity.LivingEntity;
|
import org.bukkit.entity.LivingEntity;
|
||||||
|
import org.bukkit.entity.Painting;
|
||||||
import org.bukkit.event.Event;
|
import org.bukkit.event.Event;
|
||||||
import org.bukkit.event.block.BlockExplodeEvent;
|
import org.bukkit.event.block.BlockExplodeEvent;
|
||||||
import org.bukkit.event.block.SignChangeEvent;
|
import org.bukkit.event.block.SignChangeEvent;
|
||||||
@@ -384,6 +387,25 @@ public class BukkitAdapter implements BukkitInterface {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getPaintingArtKey(Painting painting) {
|
||||||
|
try {
|
||||||
|
return painting.getArt().name();
|
||||||
|
}
|
||||||
|
catch (IncompatibleClassChangeError e) {
|
||||||
|
return painting.getArt().toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Art getPaintingArt(String name) {
|
||||||
|
if (name == null || name.isBlank()) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return Art.getByName(name.toUpperCase(Locale.ROOT));
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isCrafter(InventoryType type) {
|
public boolean isCrafter(InventoryType type) {
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import java.util.List;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
|
import org.bukkit.Art;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
@@ -14,6 +15,7 @@ import org.bukkit.entity.Arrow;
|
|||||||
import org.bukkit.entity.Entity;
|
import org.bukkit.entity.Entity;
|
||||||
import org.bukkit.entity.EntityType;
|
import org.bukkit.entity.EntityType;
|
||||||
import org.bukkit.entity.LivingEntity;
|
import org.bukkit.entity.LivingEntity;
|
||||||
|
import org.bukkit.entity.Painting;
|
||||||
import org.bukkit.event.Event;
|
import org.bukkit.event.Event;
|
||||||
import org.bukkit.event.block.BlockExplodeEvent;
|
import org.bukkit.event.block.BlockExplodeEvent;
|
||||||
import org.bukkit.event.block.SignChangeEvent;
|
import org.bukkit.event.block.SignChangeEvent;
|
||||||
@@ -498,6 +500,10 @@ public interface BukkitInterface {
|
|||||||
*/
|
*/
|
||||||
Object getRegistryValue(String key, Object tClass);
|
Object getRegistryValue(String key, Object tClass);
|
||||||
|
|
||||||
|
String getPaintingArtKey(Painting painting);
|
||||||
|
|
||||||
|
Art getPaintingArt(String name);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parses a legacy material name.
|
* Parses a legacy material name.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -3,8 +3,10 @@ package net.coreprotect.bukkit;
|
|||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
|
import org.bukkit.Art;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.ExplosionResult;
|
import org.bukkit.ExplosionResult;
|
||||||
import org.bukkit.Keyed;
|
import org.bukkit.Keyed;
|
||||||
@@ -15,6 +17,7 @@ import org.bukkit.Tag;
|
|||||||
import org.bukkit.block.BlockType;
|
import org.bukkit.block.BlockType;
|
||||||
import org.bukkit.block.data.BlockData;
|
import org.bukkit.block.data.BlockData;
|
||||||
import org.bukkit.entity.EntityType;
|
import org.bukkit.entity.EntityType;
|
||||||
|
import org.bukkit.entity.Painting;
|
||||||
import org.bukkit.event.Event;
|
import org.bukkit.event.Event;
|
||||||
import org.bukkit.event.block.BlockExplodeEvent;
|
import org.bukkit.event.block.BlockExplodeEvent;
|
||||||
import org.bukkit.event.entity.EntityExplodeEvent;
|
import org.bukkit.event.entity.EntityExplodeEvent;
|
||||||
@@ -194,6 +197,51 @@ public class Bukkit_v1_21 extends Bukkit_v1_20 {
|
|||||||
return Bukkit.getRegistry((Class) tClass).get(namespacedKey);
|
return Bukkit.getRegistry((Class) tClass).get(namespacedKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getPaintingArtKey(Painting painting) {
|
||||||
|
try {
|
||||||
|
NamespacedKey key = Registry.ART.getKey(painting.getArt());
|
||||||
|
if (key != null) {
|
||||||
|
return normalizePaintingArtKey(key.toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception e) {
|
||||||
|
}
|
||||||
|
|
||||||
|
return normalizePaintingArtKey(super.getPaintingArtKey(painting));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Art getPaintingArt(String name) {
|
||||||
|
NamespacedKey key = NamespacedKey.fromString(normalizePaintingArtLookupKey(name));
|
||||||
|
if (key != null) {
|
||||||
|
Art art = Registry.ART.get(key);
|
||||||
|
if (art != null) {
|
||||||
|
return art;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return super.getPaintingArt(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
private String normalizePaintingArtKey(String name) {
|
||||||
|
if (name == null) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
String normalized = name.toLowerCase(Locale.ROOT).trim();
|
||||||
|
if (normalized.startsWith("minecraft:")) {
|
||||||
|
return normalized.substring("minecraft:".length());
|
||||||
|
}
|
||||||
|
|
||||||
|
return normalized;
|
||||||
|
}
|
||||||
|
|
||||||
|
private String normalizePaintingArtLookupKey(String name) {
|
||||||
|
String normalized = normalizePaintingArtKey(name);
|
||||||
|
return normalized.contains(":") ? normalized : "minecraft:" + normalized;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the wolf variant and adds it to the info list.
|
* Gets the wolf variant and adds it to the info list.
|
||||||
* This functionality is specific to Minecraft 1.21+.
|
* This functionality is specific to Minecraft 1.21+.
|
||||||
|
|||||||
@@ -32,6 +32,9 @@ public class BlockBreakLogger {
|
|||||||
if (blockKey.length() == 0 && checkType != null) {
|
if (blockKey.length() == 0 && checkType != null) {
|
||||||
blockKey = checkType.getKey().toString();
|
blockKey = checkType.getKey().toString();
|
||||||
}
|
}
|
||||||
|
else if (checkType != null && (checkType == Material.PAINTING || BukkitAdapter.ADAPTER.isItemFrame(checkType))) {
|
||||||
|
blockKey = checkType.getKey().toString();
|
||||||
|
}
|
||||||
|
|
||||||
if (checkType == null && blockKey.length() == 0) {
|
if (checkType == null && blockKey.length() == 0) {
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -57,6 +57,9 @@ public class BlockPlaceLogger {
|
|||||||
}
|
}
|
||||||
blockKey = type.getKey().toString();
|
blockKey = type.getKey().toString();
|
||||||
}
|
}
|
||||||
|
else if (type != null && (type == Material.PAINTING || BukkitAdapter.ADAPTER.isItemFrame(type))) {
|
||||||
|
blockKey = type.getKey().toString();
|
||||||
|
}
|
||||||
|
|
||||||
if (type != null && (type.equals(Material.AIR) || type.equals(Material.CAVE_AIR)) && BlockTypeUtils.isAir(blockKey)) {
|
if (type != null && (type.equals(Material.AIR) || type.equals(Material.CAVE_AIR)) && BlockTypeUtils.isAir(blockKey)) {
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -184,12 +184,7 @@ public class MaterialUtils extends Queue {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static String getPaintingArtName(Painting painting) {
|
public static String getPaintingArtName(Painting painting) {
|
||||||
try {
|
return net.coreprotect.bukkit.BukkitAdapter.ADAPTER.getPaintingArtKey(painting);
|
||||||
return painting.getArt().name();
|
|
||||||
}
|
|
||||||
catch (IncompatibleClassChangeError e) {
|
|
||||||
return painting.getArt().toString();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getArtName(int id) {
|
public static String getArtName(int id) {
|
||||||
|
|||||||
@@ -101,7 +101,11 @@ public class HangingUtil {
|
|||||||
if (faceSet != null && face != null) {
|
if (faceSet != null && face != null) {
|
||||||
if (rowType.equals(Material.PAINTING)) {
|
if (rowType.equals(Material.PAINTING)) {
|
||||||
String name = MaterialUtils.getArtName(rowData);
|
String name = MaterialUtils.getArtName(rowData);
|
||||||
Art painting = Art.getByName(name.toUpperCase(Locale.ROOT));
|
Art painting = BukkitAdapter.ADAPTER.getPaintingArt(name);
|
||||||
|
if (painting == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
int height = painting.getBlockHeight();
|
int height = painting.getBlockHeight();
|
||||||
int width = painting.getBlockWidth();
|
int width = painting.getBlockWidth();
|
||||||
int paintingX = x;
|
int paintingX = x;
|
||||||
|
|||||||
Reference in new issue
Block a user