diff --git a/src/main/java/net/knarcraft/stargate/Stargate.java b/src/main/java/net/knarcraft/stargate/Stargate.java index 2cb40b1..7e8f62c 100644 --- a/src/main/java/net/knarcraft/stargate/Stargate.java +++ b/src/main/java/net/knarcraft/stargate/Stargate.java @@ -365,7 +365,7 @@ public class Stargate extends JavaPlugin { this.registerCommands(); //Check for any available updates - UpdateChecker.checkForUpdate(this, "https://api.spigotmc.org/legacy/update.php?resource=97784", + UpdateChecker.checkForUpdate(this, "https://api.spigotmc.org/legacy/update.php?resource=87978", Stargate::getPluginVersion, Stargate::setUpdateAvailable); } diff --git a/src/main/java/net/knarcraft/stargate/portal/property/gate/Gate.java b/src/main/java/net/knarcraft/stargate/portal/property/gate/Gate.java index 0ba8b49..563a93f 100644 --- a/src/main/java/net/knarcraft/stargate/portal/property/gate/Gate.java +++ b/src/main/java/net/knarcraft/stargate/portal/property/gate/Gate.java @@ -301,7 +301,7 @@ public class Gate { saveEconomyValues(bufferedWriter); //Store material types to use for frame blocks - saveFrameBlockTypes(bufferedWriter); + saveFrameBlockType(bufferedWriter); bufferedWriter.newLine(); @@ -342,24 +342,38 @@ public class Gate { * @param bufferedWriter

The buffered writer to write to

* @throws IOException

If unable to write to the buffered writer

*/ - private void saveFrameBlockTypes(BufferedWriter bufferedWriter) throws IOException { - for (Map.Entry entry : characterMaterialMap.entrySet()) { - Character type = entry.getKey(); - Material value = entry.getValue(); + private void saveFrameBlockType(BufferedWriter bufferedWriter) throws IOException { + for (Map.Entry entry : this.characterMaterialMap.entrySet()) { + Character key = entry.getKey(); //Skip characters not part of the frame - if (type.equals(GateHandler.getAnythingCharacter()) || - type.equals(GateHandler.getEntranceCharacter()) || - type.equals(GateHandler.getExitCharacter())) { + if (key.equals(GateHandler.getAnythingCharacter()) || + key.equals(GateHandler.getEntranceCharacter()) || + key.equals(GateHandler.getExitCharacter())) { continue; } - - bufferedWriter.append(type); - bufferedWriter.append('='); - if (value != null) { - bufferedWriter.append(value.toString()); - } - bufferedWriter.newLine(); + saveFrameBlockType(key, entry.getValue().toString(), bufferedWriter); } + for (Map.Entry> entry : this.characterTagMap.entrySet()) { + saveFrameBlockType(entry.getKey(), "#" + entry.getValue().getKey().toString().replaceFirst( + "minecraft:", ""), bufferedWriter); + } + } + + /** + * Saves a type of block used for the gate frame/border using a buffered writer + * + * @param key

The character key to store

+ * @param value

The string value to store

+ * @param bufferedWriter

The buffered writer to write to

+ * @throws IOException

If unable to write to the buffered writer

+ */ + private void saveFrameBlockType(Character key, String value, BufferedWriter bufferedWriter) throws IOException { + bufferedWriter.append(key.toString()); + bufferedWriter.append('='); + if (value != null) { + bufferedWriter.append(value); + } + bufferedWriter.newLine(); } /** diff --git a/src/main/java/net/knarcraft/stargate/portal/property/gate/GateHandler.java b/src/main/java/net/knarcraft/stargate/portal/property/gate/GateHandler.java index 438346e..aca723a 100644 --- a/src/main/java/net/knarcraft/stargate/portal/property/gate/GateHandler.java +++ b/src/main/java/net/knarcraft/stargate/portal/property/gate/GateHandler.java @@ -3,7 +3,9 @@ package net.knarcraft.stargate.portal.property.gate; import net.knarcraft.stargate.Stargate; import net.knarcraft.stargate.utility.GateReader; import net.knarcraft.stargate.utility.MaterialHelper; +import org.bukkit.Bukkit; import org.bukkit.Material; +import org.bukkit.NamespacedKey; import org.bukkit.Tag; import org.bukkit.block.Block; @@ -90,18 +92,16 @@ public class GateHandler { if (blockId != null) { if (!controlBlocks.containsKey(blockId)) { controlBlocks.put(blockId, new ArrayList<>()); - } else { - controlBlocks.get(blockId).add(gate); } + controlBlocks.get(blockId).add(gate); return; } Tag materialTag = gate.getControlBlockTag(); if (!controlBlockTags.containsKey(materialTag.getKey().toString())) { controlBlockTags.put(materialTag.getKey().toString(), new ArrayList<>()); - } else { - controlBlockTags.get(materialTag.getKey().toString()).add(gate); } + controlBlockTags.get(materialTag.getKey().toString()).add(gate); } /** @@ -274,6 +274,7 @@ public class GateHandler { loadGateFromJar("watergate.gate", gateFolder); loadGateFromJar("endgate.gate", gateFolder); loadGateFromJar("squarenetherglowstonegate.gate", gateFolder); + loadGateFromJar("wool.gate", gateFolder); } /** @@ -318,14 +319,25 @@ public class GateHandler { * @return

A list of gates using the given material for control block

*/ public static Gate[] getGatesByControlBlock(Material type) { - Gate[] result = new Gate[0]; - List lookup = controlBlocks.get(type); - - if (lookup != null) { - result = lookup.toArray(result); + List result = new ArrayList<>(); + List fromId = controlBlocks.get(type); + List fromTag = null; + for (String tagString : controlBlockTags.keySet()) { + Tag tag = Bukkit.getTag(Tag.REGISTRY_BLOCKS, NamespacedKey.minecraft(tagString.replaceFirst( + "minecraft:", "")), Material.class); + if (tag != null && tag.isTagged(type)) { + fromTag = controlBlockTags.get(tag.getKey().toString()); + } } - return result; + if (fromId != null) { + result.addAll(fromId); + } + if (fromTag != null) { + result.addAll(fromTag); + } + + return result.toArray(new Gate[0]); } /** @@ -353,6 +365,7 @@ public class GateHandler { public static void clearGates() { gates.clear(); controlBlocks.clear(); + controlBlockTags.clear(); } } diff --git a/src/main/resources/gates/wool.gate b/src/main/resources/gates/wool.gate new file mode 100644 index 0000000..c7d53e1 --- /dev/null +++ b/src/main/resources/gates/wool.gate @@ -0,0 +1,12 @@ +portal-open=WATER +portal-closed=AIR +button=STONE_BUTTON +toowner=false +X=#WOOL +-=#WOOL + +XXXXX +X...X +-...- +X.*.X +XXXXX \ No newline at end of file