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();
|
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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,3 +32,4 @@ 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."
|
||||||
@@ -32,3 +32,4 @@ vaults-locked: "&cVaults zijn op dit moment op slot terwijl het wordt geconverte
|
|||||||
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."
|
||||||
@@ -32,3 +32,4 @@ vaults-locked: "&cVaults are currently locked while conversion occurs. Please tr
|
|||||||
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."
|
||||||
@@ -32,3 +32,4 @@ 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."
|
||||||
@@ -32,3 +32,4 @@ vaults-locked: "&cDönüşüm gerçekleştiğinde kasalar kilitlenir. Lütfen bi
|
|||||||
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."
|
||||||
Reference in New Issue
Block a user