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();
if (player.hasPermission("playervaults.bypassblockeditems")) {
return;
}
Inventory clickedInventory = event.getClickedInventory();
if (clickedInventory != null) {
@@ -119,7 +116,13 @@ public class Listeners implements Listener {
String inventoryTitle = event.getView().getTitle();
String title = Lang.VAULT_TITLE.toString().replace("%number", String.valueOf(num)).replace("%p", info.getVaultName());
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);
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!"),
HELP("help", "/pv <number>"),
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 final String path;
@@ -19,6 +19,7 @@
package com.drtshock.playervaults.vaultmanagement;
import com.drtshock.playervaults.PlayerVaults;
import org.bukkit.Bukkit;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
@@ -36,20 +37,37 @@ public class Base64Serialization {
public static String toBase64(Inventory inventory, int size) {
try {
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
BukkitObjectOutputStream dataOutput = new BukkitObjectOutputStream(outputStream);
ByteArrayOutputStream finalOutputStream = new ByteArrayOutputStream();
ByteArrayOutputStream temporaryOutputStream = new ByteArrayOutputStream();
BukkitObjectOutputStream dataOutput = new BukkitObjectOutputStream(temporaryOutputStream);
int failedItems = 0;
// Write the size of the inventory
dataOutput.writeInt(size);
// Save every element in the list
for (int i = 0; i < inventory.getSize(); 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
dataOutput.close();
return Base64Coder.encodeLines(outputStream.toByteArray());
return Base64Coder.encodeLines(finalOutputStream.toByteArray());
} catch (Exception e) {
throw new IllegalStateException("Cannot into itemstacksz!", e);
}
+1
View File
@@ -32,3 +32,4 @@ vaults-locked: "&cСейфовете са заключени докато теч
help: "/pv <номер>"
blocked-item: "&6%m &cне може да се слага в сейфове."
signs-disabled: "&cVault signs are currently disabled."
blocked-bad-item: "&cThis item is not allowed in a vault."
+1
View File
@@ -32,3 +32,4 @@ vaults-locked: "&cVaults zijn op dit moment op slot terwijl het wordt geconverte
help: "/pv <number>"
blocked-item: "&6%m &cis geblokkeer van vaults."
signs-disabled: "&cVault signs are currently disabled."
blocked-bad-item: "&cThis item is not allowed in a vault."
+1
View File
@@ -32,3 +32,4 @@ vaults-locked: "&cVaults are currently locked while conversion occurs. Please tr
help: "/pv <number>"
blocked-item: "&6%m &cis blocked from vaults."
signs-disabled: "&cVault signs are currently disabled."
blocked-bad-item: "&cThis item is not allowed in a vault."
+1
View File
@@ -32,3 +32,4 @@ vaults-locked: "&cХранилища сейчас заблокированы, п
help: "/pv <номер>"
blocked-item: "&cПредмет «&6%m&c» &cзаблокирован хранилищем."
signs-disabled: "&cVault signs are currently disabled."
blocked-bad-item: "&cThis item is not allowed in a vault."
+1
View File
@@ -32,3 +32,4 @@ vaults-locked: "&cDönüşüm gerçekleştiğinde kasalar kilitlenir. Lütfen bi
help: "/pv <numara>"
blocked-item: "&6%m &cdepoda barındırılamaz!"
signs-disabled: "&cVault signs are currently disabled."
blocked-bad-item: "&cThis item is not allowed in a vault."