Prevent items the server deems invalid from getting into vaults

This commit is contained in:
CmdrKittens
2020-03-28 19:53:00 -04:00
parent 2ee0888847
commit ebfee098c1
8 changed files with 41 additions and 14 deletions
@@ -107,9 +107,6 @@ public class Listeners implements Listener {
} }
Player player = (Player) event.getWhoClicked(); Player player = (Player) event.getWhoClicked();
if (player.hasPermission("playervaults.bypassblockeditems")) {
return;
}
Inventory clickedInventory = event.getClickedInventory(); Inventory clickedInventory = event.getClickedInventory();
if (clickedInventory != null) { if (clickedInventory != null) {
@@ -119,7 +116,13 @@ public class Listeners implements Listener {
String inventoryTitle = event.getView().getTitle(); String inventoryTitle = event.getView().getTitle();
String title = Lang.VAULT_TITLE.toString().replace("%number", String.valueOf(num)).replace("%p", info.getVaultName()); String title = Lang.VAULT_TITLE.toString().replace("%number", String.valueOf(num)).replace("%p", info.getVaultName());
if (((inventoryTitle.equalsIgnoreCase(title)) || event.getCurrentItem() != null)) { if (((inventoryTitle.equalsIgnoreCase(title)) || event.getCurrentItem() != null)) {
if (event.getCurrentItem() != null && PlayerVaults.getInstance().isBlockedMaterial(event.getCurrentItem().getType())) { try {
event.getCurrentItem().toString();
} catch (Exception e) {
player.sendMessage(Lang.TITLE.toString() + Lang.BLOCKED_BAD_ITEM);
event.setCancelled(true);
}
if (!player.hasPermission("playervaults.bypassblockeditems") && event.getCurrentItem() != null && PlayerVaults.getInstance().isBlockedMaterial(event.getCurrentItem().getType())) {
event.setCancelled(true); event.setCancelled(true);
player.sendMessage(Lang.TITLE.toString() + Lang.BLOCKED_ITEM.toString().replace("%m", event.getCurrentItem().getType().name())); player.sendMessage(Lang.TITLE.toString() + Lang.BLOCKED_ITEM.toString().replace("%m", event.getCurrentItem().getType().name()));
} }
@@ -53,7 +53,8 @@ public enum Lang {
LOCKED("vaults-locked", "&cVaults are currently locked while conversion occurs. Please try again in a moment!"), LOCKED("vaults-locked", "&cVaults are currently locked while conversion occurs. Please try again in a moment!"),
HELP("help", "/pv <number>"), HELP("help", "/pv <number>"),
BLOCKED_ITEM("blocked-item", "&6%m &cis blocked from vaults"), BLOCKED_ITEM("blocked-item", "&6%m &cis blocked from vaults"),
SIGNS_DISABLED("signs-disabled", "&cVault signs are currently disabled."); SIGNS_DISABLED("signs-disabled", "&cVault signs are currently disabled."),
BLOCKED_BAD_ITEM("blocked-bad-item", "&cThis item is not allowed in a vault.");
private static YamlConfiguration LANG; private static YamlConfiguration LANG;
private final String path; private final String path;
@@ -19,6 +19,7 @@
package com.drtshock.playervaults.vaultmanagement; package com.drtshock.playervaults.vaultmanagement;
import com.drtshock.playervaults.PlayerVaults;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.inventory.Inventory; import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
@@ -36,20 +37,37 @@ public class Base64Serialization {
public static String toBase64(Inventory inventory, int size) { public static String toBase64(Inventory inventory, int size) {
try { try {
ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); ByteArrayOutputStream finalOutputStream = new ByteArrayOutputStream();
BukkitObjectOutputStream dataOutput = new BukkitObjectOutputStream(outputStream); ByteArrayOutputStream temporaryOutputStream = new ByteArrayOutputStream();
BukkitObjectOutputStream dataOutput = new BukkitObjectOutputStream(temporaryOutputStream);
int failedItems = 0;
// Write the size of the inventory // Write the size of the inventory
dataOutput.writeInt(size); dataOutput.writeInt(size);
// Save every element in the list // Save every element in the list
for (int i = 0; i < inventory.getSize(); i++) { for (int i = 0; i < inventory.getSize(); i++) {
dataOutput.writeObject(inventory.getItem(i)); try {
dataOutput.writeObject(inventory.getItem(i));
} catch (Exception ignored) {
failedItems++;
temporaryOutputStream.reset();
} finally {
if (temporaryOutputStream.size() == 0) {
dataOutput.writeObject(null);
}
finalOutputStream.write(temporaryOutputStream.toByteArray());
temporaryOutputStream.reset();
}
}
if (failedItems > 0) {
PlayerVaults.getInstance().getLogger().severe("Failed to save " + failedItems + " invalid items to vault");
} }
// Serialize that array // Serialize that array
dataOutput.close(); dataOutput.close();
return Base64Coder.encodeLines(outputStream.toByteArray()); return Base64Coder.encodeLines(finalOutputStream.toByteArray());
} catch (Exception e) { } catch (Exception e) {
throw new IllegalStateException("Cannot into itemstacksz!", e); throw new IllegalStateException("Cannot into itemstacksz!", e);
} }
+2 -1
View File
@@ -31,4 +31,5 @@ conversion-background: "&fЗапочнахме конвертирането на
vaults-locked: "&cСейфовете са заключени докато тече конвертиране. Моля, опитайте пак по-късно!" vaults-locked: "&cСейфовете са заключени докато тече конвертиране. Моля, опитайте пак по-късно!"
help: "/pv <номер>" help: "/pv <номер>"
blocked-item: "&6%m &cне може да се слага в сейфове." blocked-item: "&6%m &cне може да се слага в сейфове."
signs-disabled: "&cVault signs are currently disabled." signs-disabled: "&cVault signs are currently disabled."
blocked-bad-item: "&cThis item is not allowed in a vault."
+2 -1
View File
@@ -31,4 +31,5 @@ conversion-background: "&fHet converteren is naar de achtergrond geplaatst. Chec
vaults-locked: "&cVaults zijn op dit moment op slot terwijl het wordt geconverteerd. Probeer het later opnieuw!" vaults-locked: "&cVaults zijn op dit moment op slot terwijl het wordt geconverteerd. Probeer het later opnieuw!"
help: "/pv <number>" help: "/pv <number>"
blocked-item: "&6%m &cis geblokkeer van vaults." blocked-item: "&6%m &cis geblokkeer van vaults."
signs-disabled: "&cVault signs are currently disabled." signs-disabled: "&cVault signs are currently disabled."
blocked-bad-item: "&cThis item is not allowed in a vault."
+2 -1
View File
@@ -31,4 +31,5 @@ conversion-background: "&fConversion has been forked to the background. See cons
vaults-locked: "&cVaults are currently locked while conversion occurs. Please try again in a moment!" vaults-locked: "&cVaults are currently locked while conversion occurs. Please try again in a moment!"
help: "/pv <number>" help: "/pv <number>"
blocked-item: "&6%m &cis blocked from vaults." blocked-item: "&6%m &cis blocked from vaults."
signs-disabled: "&cVault signs are currently disabled." signs-disabled: "&cVault signs are currently disabled."
blocked-bad-item: "&cThis item is not allowed in a vault."
+2 -1
View File
@@ -31,4 +31,5 @@ conversion-background: "&fКонвертирование просходит в
vaults-locked: "&cХранилища сейчас заблокированы, пока конвертируются. Пожалуйста, попробуйте чуть позже!" vaults-locked: "&cХранилища сейчас заблокированы, пока конвертируются. Пожалуйста, попробуйте чуть позже!"
help: "/pv <номер>" help: "/pv <номер>"
blocked-item: "&cПредмет «&6%m&c» &cзаблокирован хранилищем." blocked-item: "&cПредмет «&6%m&c» &cзаблокирован хранилищем."
signs-disabled: "&cVault signs are currently disabled." signs-disabled: "&cVault signs are currently disabled."
blocked-bad-item: "&cThis item is not allowed in a vault."
+2 -1
View File
@@ -31,4 +31,5 @@ conversion-background: "&fDönüşüm, arka plana aktarıldı. Detaylar için ko
vaults-locked: "&cDönüşüm gerçekleştiğinde kasalar kilitlenir. Lütfen biraz sonra tekrar deneyin!" vaults-locked: "&cDönüşüm gerçekleştiğinde kasalar kilitlenir. Lütfen biraz sonra tekrar deneyin!"
help: "/pv <numara>" help: "/pv <numara>"
blocked-item: "&6%m &cdepoda barındırılamaz!" blocked-item: "&6%m &cdepoda barındırılamaz!"
signs-disabled: "&cVault signs are currently disabled." signs-disabled: "&cVault signs are currently disabled."
blocked-bad-item: "&cThis item is not allowed in a vault."