diff --git a/BauSystem_Main/src/BauSystem.properties b/BauSystem_Main/src/BauSystem.properties index e8680519..5d1b2f0c 100644 --- a/BauSystem_Main/src/BauSystem.properties +++ b/BauSystem_Main/src/BauSystem.properties @@ -390,12 +390,14 @@ MATERIAL_SEARCH_GRAVITY=§eFallend MATERIAL_SEARCH_OCCLUDING=§eOccluding MATERIAL_SEARCH_INTERACTEABLE=§eInterargierbar MATERIAL_SEARCH_FLAMMABLE=§eFlammbar +MATERIAL_SEARCH_WATERLOGGABLE=§eWasserspeicherbar MATERIAL_SEARCH_BLASTRESISTANCE=§eBlast Resistance MATERIAL_SEARCH_BLASTRESISTANCE_MIN=§eBlast Resistance mindestens MATERIAL_SEARCH_BLASTRESISTANCE_MAX=§eBlast Resistance maximal MATERIAL_SEARCH_BLASTRESISTANCE_EXACT=§eBlast Resistance MATERIAL_SEARCH_VALUE=§8: §e{0} MATERIAL_BLAST-RESISTANCE=§8- §eBlast Resistance§8: §7{0} +MATERIAL_HARDNESS=§8- §eHärte§8: §7{0} MATERIAL_TNT_BREAKABLE=§8- §eZerstörbar durch TNT MATERIAL_TNT_UNBREAKABLE=§8- §eNicht Zerstörbar durch TNT MATERIAL_TRANSPARENT=§8- §eTransparenter Block @@ -404,6 +406,7 @@ MATERIAL_GRAVITY=§8- §eFallender Block MATERIAL_OCCLUDING=§8- §eOccluding Block MATERIAL_INTERACT-ABLE=§8- §eInterargierbarer Block MATERIAL_FLAMMABLE=§8- §eFlammbarer Block +MATERIAL_WATERLOGGABLE=§8- §eWasserspeicherbarer Block # Redstonetester RT_HELP_1=§8/§eredstonetester §8-§7 Gibt den RedstoneTester RT_GIVEN=§7Messe die Zeit zwischen der Aktivierung zweier Redstone Komponenten diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/util/MaterialCommand.java b/BauSystem_Main/src/de/steamwar/bausystem/features/util/MaterialCommand.java index 152a65ca..dc01955d 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/util/MaterialCommand.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/util/MaterialCommand.java @@ -30,6 +30,8 @@ import de.steamwar.inventory.SWListInv; import lombok.Getter; import lombok.Setter; import org.bukkit.Material; +import org.bukkit.block.data.BlockData; +import org.bukkit.block.data.Waterlogged; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; @@ -40,6 +42,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.regex.Pattern; @Linked(LinkageType.COMMAND) @Linked(LinkageType.LISTENER) @@ -70,24 +73,29 @@ public class MaterialCommand extends SWCommand implements Listener { private String name; private double blastResistance; + private double hardness; private boolean transparent; private boolean solid; private boolean gravity; private boolean occluding; private boolean interacteable; private boolean flammable; + private boolean waterloggable; public MaterialData(Material material) { this.originalMaterial = material; name = material.name(); blastResistance = material.getBlastResistance(); + hardness = material.getHardness(); transparent = material.isTransparent(); solid = material.isSolid(); gravity = material.hasGravity(); occluding = material.isOccluding(); interacteable = material.isInteractable(); flammable = material.isFlammable(); + BlockData blockData = material.createBlockData(); + waterloggable = blockData instanceof Waterlogged; if (material.isItem() && material != Material.AIR) { this.material = material; @@ -100,6 +108,7 @@ public class MaterialCommand extends SWCommand implements Listener { List lore = new ArrayList<>(); lore.add(BauSystem.MESSAGE.parse("MATERIAL_BLAST-RESISTANCE", p, blastResistance)); lore.add(BauSystem.MESSAGE.parse(blastResistance > 9 ? "MATERIAL_TNT_UNBREAKABLE" : "MATERIAL_TNT_BREAKABLE", p)); + lore.add(BauSystem.MESSAGE.parse("MATERIAL_HARDNESS", p, hardness)); if (transparent) { lore.add(BauSystem.MESSAGE.parse("MATERIAL_TRANSPARENT", p)); } @@ -118,7 +127,11 @@ public class MaterialCommand extends SWCommand implements Listener { if (flammable) { lore.add(BauSystem.MESSAGE.parse("MATERIAL_FLAMMABLE", p)); } - return new SWListInv.SWListEntry<>(new SWItem(material, "§e" + name, lore, false, clickType -> {}), originalMaterial); + if (waterloggable) { + lore.add(BauSystem.MESSAGE.parse("MATERIAL_WATTERLOGGABLE", p)); + } + return new SWListInv.SWListEntry<>(new SWItem(material, "§e" + name, lore, false, clickType -> { + }), originalMaterial); } public boolean is(Search search) { @@ -141,6 +154,9 @@ public class MaterialCommand extends SWCommand implements Listener { if (search.flammable) { result &= flammable; } + if (search.waterloggable) { + result &= waterloggable; + } if (!result) { return false; } @@ -150,10 +166,7 @@ public class MaterialCommand extends SWCommand implements Listener { if (search.name.isEmpty()) { return true; } - if (!name.toLowerCase().contains(search.name.toLowerCase())) { - return false; - } - return true; + return Pattern.compile(".*" + search.name.toLowerCase().replace(' ', '.') + ".*").asPredicate().test(name.toLowerCase()); } } @@ -166,6 +179,7 @@ public class MaterialCommand extends SWCommand implements Listener { private boolean occluding = false; private boolean interacteable = false; private boolean flammable = false; + private boolean waterloggable = false; private double blastResistanceMin = 0; private double blastResistanceMax = 5000000; @@ -180,7 +194,8 @@ public class MaterialCommand extends SWCommand implements Listener { swListEntries.add(data.toSWItem(p)); } }); - SWListInv materialSWListInv = new SWListInv<>(p, BauSystem.MESSAGE.parse("MATERIAL_INV_NAME", p, swListEntries.size(), materialData.size()), false, swListEntries, (clickType, material) -> {}); + SWListInv materialSWListInv = new SWListInv<>(p, BauSystem.MESSAGE.parse("MATERIAL_INV_NAME", p, swListEntries.size(), materialData.size()), false, swListEntries, (clickType, material) -> { + }); materialSWListInv.setItem(49, new SWItem(Material.NAME_TAG, BauSystem.MESSAGE.parse("MATERIAL_SEARCH", p), clickType -> { searchGUI(p); })); @@ -225,6 +240,10 @@ public class MaterialCommand extends SWCommand implements Listener { search.flammable = !search.flammable; searchGUI(p); })); + swInventory.setItem(25, new SWItem(Material.WATER_BUCKET, BauSystem.MESSAGE.parse("MATERIAL_SEARCH_WATERLOGGABLE", p) + BauSystem.MESSAGE.parse("MATERIAL_SEARCH_VALUE", p, search.waterloggable), clickType -> { + search.waterloggable = !search.waterloggable; + searchGUI(p); + })); swInventory.setItem(28, new SWItem(Material.FIRE_CHARGE, BauSystem.MESSAGE.parse("MATERIAL_SEARCH_BLASTRESISTANCE_MIN", p) + BauSystem.MESSAGE.parse("MATERIAL_SEARCH_VALUE", p, search.blastResistanceMin), clickType -> { SWAnvilInv swAnvilInv = new SWAnvilInv(p, BauSystem.MESSAGE.parse("MATERIAL_SEARCH_BLASTRESISTANCE", p), search.blastResistanceMin + ""); swAnvilInv.setCallback(s -> { @@ -232,7 +251,8 @@ public class MaterialCommand extends SWCommand implements Listener { search.blastResistanceMin = Double.parseDouble(s); if (search.blastResistanceMin < 0) search.blastResistanceMin = 0; if (search.blastResistanceMin > 5000000) search.blastResistanceMin = 5000000; - if (search.blastResistanceMin > search.blastResistanceMax) search.blastResistanceMin = search.blastResistanceMax; + if (search.blastResistanceMin > search.blastResistanceMax) + search.blastResistanceMin = search.blastResistanceMax; } catch (NumberFormatException e) { // Ignored } @@ -247,7 +267,8 @@ public class MaterialCommand extends SWCommand implements Listener { search.blastResistanceMax = Double.parseDouble(s); if (search.blastResistanceMax > 5000000) search.blastResistanceMax = 5000000; if (search.blastResistanceMax < 0) search.blastResistanceMax = 0; - if (search.blastResistanceMax < search.blastResistanceMin) search.blastResistanceMax = search.blastResistanceMin; + if (search.blastResistanceMax < search.blastResistanceMin) + search.blastResistanceMax = search.blastResistanceMin; } catch (NumberFormatException e) { // Ignored }