src/main/java/de/viper/survivalplus/listeners/ToolUpgradeListener.java aktualisiert

This commit is contained in:
2025-09-28 09:00:05 +00:00
parent 39cf666bf4
commit fec84fd8d7

View File

@@ -56,19 +56,12 @@ public class ToolUpgradeListener implements Listener {
if (!(event.getInventory() instanceof CraftingInventory)) return; if (!(event.getInventory() instanceof CraftingInventory)) return;
CraftingInventory inv = (CraftingInventory) event.getInventory(); CraftingInventory inv = (CraftingInventory) event.getInventory();
ItemStack[] matrix = inv.getMatrix(); ItemStack[] matrix = inv.getMatrix();
if (matrix.length < 9) { if (matrix.length < 9) return; // Kein 3x3-Crafting-Tisch
inv.setResult(null);
return;
}
ItemStack center = matrix[4]; ItemStack center = matrix[4];
if (center == null || center.getType() == Material.AIR) { // Nur eingreifen, wenn ein Werkzeug in der Mitte liegt
inv.setResult(null); if (center == null || center.getType() == Material.AIR || !isUpgradeableTool(center.getType()) || isWoodTool(center.getType())) {
return; return; // Standard-Rezepte nicht beeinflussen
}
if (!isUpgradeableTool(center.getType()) || isWoodTool(center.getType())) {
inv.setResult(null);
return;
} }
int currentLevel = getToolLevel(center); int currentLevel = getToolLevel(center);
@@ -83,7 +76,7 @@ public class ToolUpgradeListener implements Listener {
return; return;
} }
// Prüfen ob alle Slots (außer Mitte) mind. 2 Stück vom richtigen Material haben // Prüfen, ob alle Slots (außer Mitte) mind. 2 Stück vom richtigen Material haben
for (int i = 0; i < matrix.length; i++) { for (int i = 0; i < matrix.length; i++) {
if (i == 4) continue; if (i == 4) continue;
if (matrix[i] == null || matrix[i].getType() != requiredMat || matrix[i].getAmount() < REQUIRED_AMOUNT) { if (matrix[i] == null || matrix[i].getType() != requiredMat || matrix[i].getAmount() < REQUIRED_AMOUNT) {
@@ -106,20 +99,33 @@ public class ToolUpgradeListener implements Listener {
ItemStack[] matrix = inv.getMatrix(); ItemStack[] matrix = inv.getMatrix();
ItemStack center = matrix[4]; ItemStack center = matrix[4];
if (center == null || !isUpgradeableTool(center.getType()) || isWoodTool(center.getType())) return; if (center == null || !isUpgradeableTool(center.getType()) || isWoodTool(center.getType())) {
plugin.getLogger().fine("Kein Upgrade-Werkzeug in der Mitte: " + (center != null ? center.getType() : "null"));
return;
}
int currentLevel = getToolLevel(center); int currentLevel = getToolLevel(center);
if (currentLevel >= maxLevel || currentLevel >= getMaxAllowedLevel(center.getType())) return; if (currentLevel >= maxLevel || currentLevel >= getMaxAllowedLevel(center.getType())) {
plugin.getLogger().fine("Maximales Level erreicht für Werkzeug: " + center.getType());
return;
}
Material requiredMat = levelMaterials.get(currentLevel + 1); Material requiredMat = levelMaterials.get(currentLevel + 1);
if (requiredMat == null) return; if (requiredMat == null) {
plugin.getLogger().fine("Kein Material für Level " + (currentLevel + 1));
return;
}
for (int i = 0; i < matrix.length; i++) { for (int i = 0; i < matrix.length; i++) {
if (i == 4) continue; if (i == 4) continue;
if (matrix[i] == null || matrix[i].getType() != requiredMat || matrix[i].getAmount() < REQUIRED_AMOUNT) return; if (matrix[i] == null || matrix[i].getType() != requiredMat || matrix[i].getAmount() < REQUIRED_AMOUNT) {
plugin.getLogger().fine("Ungültiges Material in Slot " + i + ": " + (matrix[i] != null ? matrix[i].getType() : "null"));
return;
}
} }
// Gültig: Event abbrechen, Upgrade geben, Items verbrauchen // Gültig: Event abbrechen, Upgrade geben, Items verbrauchen
plugin.getLogger().info("Werkzeug-Upgrade für " + player.getName() + ": " + center.getType() + " auf Level " + (currentLevel + 1));
event.setCancelled(true); event.setCancelled(true);
ItemStack result = createUpgradedTool(center, currentLevel + 1); ItemStack result = createUpgradedTool(center, currentLevel + 1);
@@ -215,7 +221,9 @@ public class ToolUpgradeListener implements Listener {
n.endsWith("_SWORD"); n.endsWith("_SWORD");
} }
private boolean isWoodTool(Material mat) { return mat.name().startsWith("WOODEN"); } private boolean isWoodTool(Material mat) {
return mat.name().startsWith("WOODEN");
}
private int getMaxAllowedLevel(Material mat) { private int getMaxAllowedLevel(Material mat) {
String s = mat.name(); String s = mat.name();