From f4bfdfa5956aa1d470917c006386bbbc42541137 Mon Sep 17 00:00:00 2001 From: Sn0wStorm Date: Mon, 6 Apr 2020 10:51:44 +0200 Subject: [PATCH] Added config options for Sealing Table Translations for the Sealing Table And a Data Tag for the Block --- resources/config/v13/de/config.yml | 4 ++ resources/config/v13/en/config.yml | 4 ++ resources/languages/de.yml | 2 + resources/languages/en.yml | 2 + src/com/dre/brewery/BSealer.java | 48 +++++++++++++++++-- src/com/dre/brewery/P.java | 4 -- src/com/dre/brewery/filedata/BConfig.java | 16 +++++++ .../dre/brewery/listeners/BlockListener.java | 17 +++---- .../dre/brewery/listeners/PlayerListener.java | 12 +++-- src/com/dre/brewery/lore/BrewLore.java | 14 ------ 10 files changed, 85 insertions(+), 38 deletions(-) diff --git a/resources/config/v13/de/config.yml b/resources/config/v13/de/config.yml index 1f4620f..54ccef5 100644 --- a/resources/config/v13/de/config.yml +++ b/resources/config/v13/de/config.yml @@ -46,6 +46,10 @@ drainItems: # Zeit (in Tagen) die Trunkenheitsdaten nach offlinegehen eines Spielers im Speicher verbleiben, um z.B. Kater-Effekte anzuwenden. [7] hangoverDays: 7 +# Ob das craften und das benutzen des Trank-Versiegelungs-Tisches aktiviert ist (2 Flaschen über 4 Holz) [true, true] +craftSealingTable: true +enableSealingTable: true + # Färben der Iteminformationen je nach Qualität während sie sich 1. im Fass und/oder 2. im Braustand befinden [true, true] colorInBarrels: true colorInBrewer: true diff --git a/resources/config/v13/en/config.yml b/resources/config/v13/en/config.yml index d46b32c..429f699 100644 --- a/resources/config/v13/en/config.yml +++ b/resources/config/v13/en/config.yml @@ -46,6 +46,10 @@ drainItems: # Time (in days) that drunkeness-data stays in memory after a player goes offline, to apply hangover etc. [7] hangoverDays: 7 +# If crafting and using of the Brew Sealing Table is enabled (2 Bottles over 4 Planks) [true, true] +craftSealingTable: true +enableSealingTable: true + # Color the Item information (lore) depending on quality while it is 1. in a barrel and/or 2. in a brewing stand [true, true] colorInBarrels: true colorInBrewer: true diff --git a/resources/languages/de.yml b/resources/languages/de.yml index af59be5..cdf6ee6 100644 --- a/resources/languages/de.yml +++ b/resources/languages/de.yml @@ -34,6 +34,7 @@ CMD_NonStatic: '&eTrank ist wieder veränderlich und kann normal gereift oder de # Error Error_ConfigUpdate: 'Unbekannte Brewery Config Version: v&v1, Config wurde nicht geupdated!' Error_ItemNotPotion: '&cDas Item in deiner Hand konnte nicht als Trank identifiziert werden' +Error_SealingTableDisabled: '&cDer Trankversiegler ist deaktiviert' Error_SealedAlwaysStatic: 'Versiegelte Tränke sind immer unveränderlich!' Error_AlreadyUnlabeled: '&cDer Trank in deiner Hand ist bereits Entlabelt!' Error_NoBarrelAccess: '&cDu hast keine Rechte dieses Fass zu öffnen!' @@ -49,6 +50,7 @@ Error_YmlRead: 'config.yml konnte nicht gelesen werden, ist die Datei im korrekt Etc_Page: Seite Etc_Usage: 'Benutzung:' Etc_Barrel: Fass +Etc_SealingTable: Trankversiegler # Help Help_Copy: '&6/brew Copy [Anzahl]&9 Kopiert den Trank in deiner Hand' diff --git a/resources/languages/en.yml b/resources/languages/en.yml index f4971fb..fe0e103 100644 --- a/resources/languages/en.yml +++ b/resources/languages/en.yml @@ -34,6 +34,7 @@ CMD_UnLabel: '&aLabel removed!' # Error Error_ConfigUpdate: 'Unknown Brewery config version: v&v1, config was not updated!' Error_ItemNotPotion: '&cThe item in your hand could not be identified as a potion!' +Error_SealingTableDisabled: '&cThe Sealing Table is disabled' Error_SealedAlwaysStatic: 'Sealed Brews are always static!' Error_AlreadyUnlabeled: '&cThe Brew in your hand is already unlabeled!' Error_NoBarrelAccess: '&cYou don''t have permissions to access this barrel!' @@ -49,6 +50,7 @@ Error_YmlRead: 'Could not read file config.yml, please make sure the file is in Etc_Barrel: Barrel Etc_Page: Page Etc_Usage: 'Usage:' +Etc_SealingTable: Brew Sealing Table # Help Help_Copy: '&6/brew copy [Quantity]&9 Copies the potion in your hand' diff --git a/src/com/dre/brewery/BSealer.java b/src/com/dre/brewery/BSealer.java index d45be9e..43b9416 100644 --- a/src/com/dre/brewery/BSealer.java +++ b/src/com/dre/brewery/BSealer.java @@ -4,6 +4,9 @@ import org.bukkit.Material; import org.bukkit.NamespacedKey; import org.bukkit.Sound; import org.bukkit.Tag; +import org.bukkit.block.Block; +import org.bukkit.block.Container; +import org.bukkit.block.data.Directional; import org.bukkit.entity.Player; import org.bukkit.event.inventory.InventoryType; import org.bukkit.inventory.Inventory; @@ -11,13 +14,14 @@ import org.bukkit.inventory.InventoryHolder; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.RecipeChoice; import org.bukkit.inventory.ShapedRecipe; -import org.bukkit.inventory.meta.BlockStateMeta; import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.persistence.PersistentDataType; import org.bukkit.scheduler.BukkitTask; import org.jetbrains.annotations.NotNull; public class BSealer implements InventoryHolder { - public static final String TABLE_NAME = "§eBrew Sealing Table"; + public static final NamespacedKey TAG_KEY = new NamespacedKey(P.p, "SealingTable"); + public static boolean recipeRegistered = false; private final Inventory inventory; private final Player player; @@ -27,7 +31,7 @@ public class BSealer implements InventoryHolder { public BSealer(Player player) { this.player = player; - inventory = P.p.getServer().createInventory(this, InventoryType.DISPENSER, "Brew Sealing Table"); + inventory = P.p.getServer().createInventory(this, InventoryType.DISPENSER, P.p.languageReader.get("Etc_SealingTable")); } @Override @@ -86,12 +90,43 @@ public class BSealer implements InventoryHolder { } } + public static boolean isBSealer(Block block) { + if (P.use1_14 && block.getType() == Material.SMOKER) { + Container smoker = (Container) block.getState(); + if (smoker.getCustomName() != null) { + if (smoker.getCustomName().equals("§e" + P.p.languageReader.get("Etc_SealingTable"))) { + return true; + } else + return smoker.getPersistentDataContainer().has(TAG_KEY, PersistentDataType.BYTE); + } + } + return false; + } + + public static void blockPlace(ItemStack item, Block block) { + if (item.getType() == Material.SMOKER && item.hasItemMeta()) { + ItemMeta itemMeta = item.getItemMeta(); + assert itemMeta != null; + if ((itemMeta.hasDisplayName() && itemMeta.getDisplayName().equals("§e" + P.p.languageReader.get("Etc_SealingTable"))) || + itemMeta.getPersistentDataContainer().has(BSealer.TAG_KEY, PersistentDataType.BYTE)) { + Container smoker = (Container) block.getState(); + // Rotate the Block 180° so it doesn't look like a Smoker + Directional dir = (Directional) smoker.getBlockData(); + dir.setFacing(dir.getFacing().getOppositeFace()); + smoker.setBlockData(dir); + smoker.getPersistentDataContainer().set(BSealer.TAG_KEY, PersistentDataType.BYTE, (byte)1); + smoker.update(); + } + } + } public static void registerRecipe() { + recipeRegistered = true; ItemStack sealingTableItem = new ItemStack(Material.SMOKER); ItemMeta meta = P.p.getServer().getItemFactory().getItemMeta(Material.SMOKER); if (meta == null) return; - meta.setDisplayName(TABLE_NAME); + meta.setDisplayName("§e" + P.p.languageReader.get("Etc_SealingTable")); + meta.getPersistentDataContainer().set(TAG_KEY, PersistentDataType.BYTE, (byte)1); sealingTableItem.setItemMeta(meta); ShapedRecipe recipe = new ShapedRecipe(new NamespacedKey(P.p, "SealingTable"), sealingTableItem); @@ -103,4 +138,9 @@ public class BSealer implements InventoryHolder { P.p.getServer().addRecipe(recipe); } + + public static void unregisterRecipe() { + recipeRegistered = false; + P.p.getServer().removeRecipe(new NamespacedKey(P.p, "SealingTable")); + } } diff --git a/src/com/dre/brewery/P.java b/src/com/dre/brewery/P.java index 8b99f50..b215773 100644 --- a/src/com/dre/brewery/P.java +++ b/src/com/dre/brewery/P.java @@ -125,10 +125,6 @@ public class P extends JavaPlugin { p.getServer().getScheduler().runTaskTimer(p, new BreweryRunnable(), 650, 1200); p.getServer().getScheduler().runTaskTimer(p, new DrunkRunnable(), 120, 120); - if (P.use1_14) { - BSealer.registerRecipe(); - } - if (BConfig.updateCheck) { try { p.getServer().getScheduler().runTaskLaterAsynchronously(p, new UpdateChecker(), 135); diff --git a/src/com/dre/brewery/filedata/BConfig.java b/src/com/dre/brewery/filedata/BConfig.java index 5cdf3c0..8d884ad 100644 --- a/src/com/dre/brewery/filedata/BConfig.java +++ b/src/com/dre/brewery/filedata/BConfig.java @@ -1,5 +1,6 @@ package com.dre.brewery.filedata; +import com.dre.brewery.BSealer; import com.dre.brewery.Brew; import com.dre.brewery.DistortChat; import com.dre.brewery.MCBarrel; @@ -75,6 +76,10 @@ public class BConfig { public static boolean alwaysShowQuality; // Always show quality stars public static boolean alwaysShowAlc; // Always show alc% + //Features + public static boolean craftSealingTable; // Allow Crafting of Sealing Table + public static boolean enableSealingTable; // Allow Usage of Sealing Table + //Item public static List customItems = new ArrayList<>(); @@ -221,6 +226,8 @@ public class BConfig { enablePuke = config.getBoolean("enablePuke", false); pukeDespawntime = config.getInt("pukeDespawntime", 60) * 20; homeType = config.getString("homeType", null); + craftSealingTable = config.getBoolean("craftSealingTable", false); + enableSealingTable = config.getBoolean("enableSealingTable", false); colorInBarrels = config.getBoolean("colorInBarrels", false); colorInBrewer = config.getBoolean("colorInBrewer", false); alwaysShowQuality = config.getBoolean("alwaysShowQuality", false); @@ -329,6 +336,15 @@ public class BConfig { DistortChat.log = config.getBoolean("logRealChat", false); DistortChat.doSigns = config.getBoolean("distortSignText", false); + // Register Sealing Table Recipe + if (P.use1_14) { + if (craftSealingTable && !BSealer.recipeRegistered) { + BSealer.registerRecipe(); + } else if (!craftSealingTable && BSealer.recipeRegistered) { + BSealer.unregisterRecipe(); + } + } + // init SQL if (sqlSync != null) { try { diff --git a/src/com/dre/brewery/listeners/BlockListener.java b/src/com/dre/brewery/listeners/BlockListener.java index 382c937..b8f3f71 100644 --- a/src/com/dre/brewery/listeners/BlockListener.java +++ b/src/com/dre/brewery/listeners/BlockListener.java @@ -11,12 +11,16 @@ import org.bukkit.Material; import org.bukkit.Nameable; import org.bukkit.block.Block; import org.bukkit.block.BlockState; +import org.bukkit.block.Container; import org.bukkit.block.data.Directional; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.block.*; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.persistence.PersistentDataType; public class BlockListener implements Listener { @@ -47,17 +51,8 @@ public class BlockListener implements Listener { @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onBlockPlace(BlockPlaceEvent event) { - if (!P.use1_14) return; - if (event.getBlock().getType() == Material.SMOKER) { - BlockState state = event.getBlock().getState(); - Nameable name = (Nameable) state; - if (name.getCustomName() != null && name.getCustomName().equals(BSealer.TABLE_NAME)) { - // Rotate the Block 180° so it doesn't look like a Smoker - Directional dir = (Directional) state.getBlockData(); - dir.setFacing(dir.getFacing().getOppositeFace()); - event.getBlock().setBlockData(dir); - } - } + if (!P.use1_14 || event.getBlock().getType() != Material.SMOKER) return; + BSealer.blockPlace(event.getItemInHand(), event.getBlock()); } @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) diff --git a/src/com/dre/brewery/listeners/PlayerListener.java b/src/com/dre/brewery/listeners/PlayerListener.java index 0ac5c7b..84698c0 100644 --- a/src/com/dre/brewery/listeners/PlayerListener.java +++ b/src/com/dre/brewery/listeners/PlayerListener.java @@ -41,14 +41,16 @@ public class PlayerListener implements Listener { return; } - if (P.use1_14 && type == Material.SMOKER) { - Nameable smoker = (Nameable) clickedBlock.getState(); - if (smoker.getCustomName() != null && smoker.getCustomName().equals(BSealer.TABLE_NAME)) { - event.setCancelled(true); + + if (BSealer.isBSealer(clickedBlock)) { + event.setCancelled(true); + if (BConfig.enableSealingTable) { BSealer sealer = new BSealer(player); event.getPlayer().openInventory(sealer.getInventory()); - return; + } else { + P.p.msg(player, P.p.languageReader.get("Error_SealingTableDisabled")); } + return; } // Do not process Off Hand for Barrel interaction diff --git a/src/com/dre/brewery/lore/BrewLore.java b/src/com/dre/brewery/lore/BrewLore.java index 81f6537..4b4657f 100644 --- a/src/com/dre/brewery/lore/BrewLore.java +++ b/src/com/dre/brewery/lore/BrewLore.java @@ -274,20 +274,6 @@ public class BrewLore { } } - /** - * Show the Seal-bars |*****| around the Lore Quality-Stars - */ - /*public void showSeal() { - int starsLine = Type.STARS.findInLore(lore); - if (starsLine > -1) { - StringBuilder lineEdit = new StringBuilder(lore.get(starsLine)); - int index = Type.STARS.id.length(); - lineEdit.insert(index, "§8["); - lineEdit.append("§8]"); - lore.set(starsLine, lineEdit.toString()); - } - }*/ - public void updateAlc(boolean inDistiller) { if (!brew.isUnlabeled() && (inDistiller || BConfig.alwaysShowAlc) && (!brew.hasRecipe() || brew.getCurrentRecipe().getAlcohol() > 0)) { int alc = brew.getOrCalcAlc();