Prevent items the server deems invalid from getting into vaults
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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."
|
||||
@@ -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."
|
||||
@@ -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."
|
||||
@@ -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."
|
||||
@@ -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."
|
||||
Reference in New Issue
Block a user