forked from Upstream/CommandPanels
Merge pull request #255 from TinyTank800/master
Added custom model data to item-paywall=
This commit is contained in:
commit
39cf3de5ef
@ -200,22 +200,34 @@ public class CommandTags {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
case "item-paywall=": {
|
case "item-paywall=": {
|
||||||
//if player uses item-paywall= [Material] [Amount] [Id]
|
//if player uses item-paywall= [Material] [Amount] <id:#> <custom-data:#>
|
||||||
//player can use item-paywall= [custom-item]
|
//player can use item-paywall= [custom-item]
|
||||||
List<ItemStack> cont = new ArrayList<>(Arrays.asList(plugin.inventorySaver.getNormalInventory(p)));
|
List<ItemStack> cont = new ArrayList<>(Arrays.asList(plugin.inventorySaver.getNormalInventory(p)));
|
||||||
List<ItemStack> remCont = new ArrayList<>();
|
List<ItemStack> remCont = new ArrayList<>();
|
||||||
|
String[] args = command.split("\\s");
|
||||||
try {
|
try {
|
||||||
short id = 0;
|
byte id = -1;
|
||||||
if (command.split("\\s").length == 4) {
|
int customData = 0;
|
||||||
id = Short.parseShort(command.split("\\s")[3]);
|
boolean noCustom = false;
|
||||||
|
for(String val : args) {
|
||||||
|
if(val.startsWith("id:")) {
|
||||||
|
id = Byte.parseByte(val.substring(3));
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if(val.startsWith("custom-data:")) {
|
||||||
|
customData = Integer.parseInt(val.substring(12));
|
||||||
|
}
|
||||||
|
if(val.contains("NOCUSTOMDATA")) {
|
||||||
|
noCustom = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//create the item to be removed
|
//create the item to be removed
|
||||||
ItemStack sellItem;
|
ItemStack sellItem;
|
||||||
if (Material.matchMaterial(command.split("\\s")[1]) == null) {
|
if (Material.matchMaterial(args[1]) == null) {
|
||||||
sellItem = plugin.itemCreate.makeCustomItemFromConfig(panel, PanelPosition.Top, panel.getConfig().getConfigurationSection("custom-item." + command.split("\\s")[1]), p, true, true, false);
|
sellItem = plugin.itemCreate.makeCustomItemFromConfig(panel, PanelPosition.Top, panel.getConfig().getConfigurationSection("custom-item." + args[1]), p, true, true, false);
|
||||||
} else {
|
} else {
|
||||||
sellItem = new ItemStack(Objects.requireNonNull(Material.matchMaterial(command.split("\\s")[1])), Integer.parseInt(command.split("\\s")[2]), id);
|
sellItem = new ItemStack(Objects.requireNonNull(Material.matchMaterial(args[1])), Integer.parseInt(args[2]));
|
||||||
}
|
}
|
||||||
//this is not a boolean because it needs to return an int
|
//this is not a boolean because it needs to return an int
|
||||||
PaywallOutput removedItem = PaywallOutput.Blocked;
|
PaywallOutput removedItem = PaywallOutput.Blocked;
|
||||||
@ -229,9 +241,11 @@ public class CommandTags {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Material.matchMaterial(command.split("\\s")[1]) == null) {
|
ItemStack itm = cont.get(f);
|
||||||
|
|
||||||
|
if (Material.matchMaterial(args[1]) == null) {
|
||||||
//item-paywall is a custom item as it is not a material
|
//item-paywall is a custom item as it is not a material
|
||||||
if (plugin.itemCreate.isIdentical(sellItem, cont.get(f))) {
|
if (plugin.itemCreate.isIdentical(sellItem, itm)) {
|
||||||
ItemStack add = new ItemStack(p.getInventory().getItem(f).getType(), p.getInventory().getItem(f).getAmount(), (short) f);
|
ItemStack add = new ItemStack(p.getInventory().getItem(f).getType(), p.getInventory().getItem(f).getAmount(), (short) f);
|
||||||
remainingAmount -= add.getAmount();
|
remainingAmount -= add.getAmount();
|
||||||
remCont.add(add);
|
remCont.add(add);
|
||||||
@ -243,23 +257,23 @@ public class CommandTags {
|
|||||||
|
|
||||||
//if custom item is a mmo item (1.14+ for the API)
|
//if custom item is a mmo item (1.14+ for the API)
|
||||||
try {
|
try {
|
||||||
if (plugin.getServer().getPluginManager().isPluginEnabled("MMOItems") && panel.getConfig().getString("custom-item." + command.split("\\s")[1] + ".material").startsWith("mmo=")) {
|
if (plugin.getServer().getPluginManager().isPluginEnabled("MMOItems") && panel.getConfig().getString("custom-item." + args[1] + ".material").startsWith("mmo=")) {
|
||||||
String customItemMaterial = panel.getConfig().getString("custom-item." + command.split("\\s")[1] + ".material");
|
String customItemMaterial = panel.getConfig().getString("custom-item." + args[1] + ".material");
|
||||||
String mmoType = customItemMaterial.split("\\s")[1];
|
String mmoType = customItemMaterial.split("\\s")[1];
|
||||||
String mmoID = customItemMaterial.split("\\s")[2];
|
String mmoID = customItemMaterial.split("\\s")[2];
|
||||||
|
|
||||||
if (plugin.isMMOItem(cont.get(f), mmoType, mmoID) && sellItem.getAmount() <= cont.get(f).getAmount()) {
|
if (plugin.isMMOItem(itm, mmoType, mmoID) && sellItem.getAmount() <= itm.getAmount()) {
|
||||||
if (plugin.inventorySaver.hasNormalInventory(p)) {
|
if (plugin.inventorySaver.hasNormalInventory(p)) {
|
||||||
p.getInventory().getItem(f).setAmount(cont.get(f).getAmount() - sellItem.getAmount());
|
p.getInventory().getItem(f).setAmount(itm.getAmount() - sellItem.getAmount());
|
||||||
p.updateInventory();
|
p.updateInventory();
|
||||||
} else {
|
} else {
|
||||||
cont.get(f).setAmount(cont.get(f).getAmount() - sellItem.getAmount());
|
itm.setAmount(itm.getAmount() - sellItem.getAmount());
|
||||||
plugin.inventorySaver.inventoryConfig.set(p.getUniqueId().toString(), plugin.itemSerializer.itemStackArrayToBase64(cont.toArray(new ItemStack[0])));
|
plugin.inventorySaver.inventoryConfig.set(p.getUniqueId().toString(), plugin.itemSerializer.itemStackArrayToBase64(cont.toArray(new ItemStack[0])));
|
||||||
}
|
}
|
||||||
removedItem = PaywallOutput.Passed;
|
removedItem = PaywallOutput.Passed;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (plugin.isMMOItem(cont.get(f), mmoType, mmoID)) {
|
if (plugin.isMMOItem(itm, mmoType, mmoID)) {
|
||||||
ItemStack add = new ItemStack(p.getInventory().getItem(f).getType(), p.getInventory().getItem(f).getAmount(), (short) f);
|
ItemStack add = new ItemStack(p.getInventory().getItem(f).getType(), p.getInventory().getItem(f).getAmount(), (short) f);
|
||||||
remainingAmount -= add.getAmount();
|
remainingAmount -= add.getAmount();
|
||||||
remCont.add(add);
|
remCont.add(add);
|
||||||
@ -275,8 +289,31 @@ public class CommandTags {
|
|||||||
|
|
||||||
} else {
|
} else {
|
||||||
//if the item is a standard material
|
//if the item is a standard material
|
||||||
if (cont.get(f).getType() == sellItem.getType()) {
|
if (itm.getType() == sellItem.getType()) {
|
||||||
ItemStack add = new ItemStack(cont.get(f).getType(), cont.get(f).getAmount(), (short) f);
|
//Checking for custom model data. If it does not have or not the correct number go to next in loop.
|
||||||
|
if(customData != 0){
|
||||||
|
if(!itm.hasItemMeta()){
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if(Objects.requireNonNull(itm.getItemMeta()).getCustomModelData() != customData){
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//Check if the item matches the id set. If not continue to next in loop.
|
||||||
|
if(id != -1 && itm.getDurability() != id){
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Check if noCustom is set and if the item has custom data. If so continue to next in loop.
|
||||||
|
if(noCustom && itm.hasItemMeta()){
|
||||||
|
if(Objects.requireNonNull(itm.getItemMeta()).hasCustomModelData()){
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//Adding item to the remove list then checking if we have reached the required amount.
|
||||||
|
ItemStack add = new ItemStack(itm.getType(), itm.getAmount(), (short) f);
|
||||||
remainingAmount -= add.getAmount();
|
remainingAmount -= add.getAmount();
|
||||||
remCont.add(add);
|
remCont.add(add);
|
||||||
if (remainingAmount <= 0) {
|
if (remainingAmount <= 0) {
|
||||||
@ -291,6 +328,7 @@ public class CommandTags {
|
|||||||
for (int f = 0; f <= remCont.size() - 1; f++) {
|
for (int f = 0; f <= remCont.size() - 1; f++) {
|
||||||
ItemStack remItem = remCont.get(f);
|
ItemStack remItem = remCont.get(f);
|
||||||
|
|
||||||
|
//Check if its the last item in the loop and only subtract the remaining amount.
|
||||||
if(f == remCont.size() - 1){
|
if(f == remCont.size() - 1){
|
||||||
if (plugin.inventorySaver.hasNormalInventory(p)) {
|
if (plugin.inventorySaver.hasNormalInventory(p)) {
|
||||||
p.getInventory().getItem((int)remItem.getDurability()).setAmount(remItem.getAmount() - sellItem.getAmount());
|
p.getInventory().getItem((int)remItem.getDurability()).setAmount(remItem.getAmount() - sellItem.getAmount());
|
||||||
@ -299,7 +337,7 @@ public class CommandTags {
|
|||||||
cont.get((int)remItem.getDurability()).setAmount(remItem.getAmount() - sellItem.getAmount());
|
cont.get((int)remItem.getDurability()).setAmount(remItem.getAmount() - sellItem.getAmount());
|
||||||
plugin.inventorySaver.inventoryConfig.set(p.getUniqueId().toString(), plugin.itemSerializer.itemStackArrayToBase64(cont.toArray(new ItemStack[0])));
|
plugin.inventorySaver.inventoryConfig.set(p.getUniqueId().toString(), plugin.itemSerializer.itemStackArrayToBase64(cont.toArray(new ItemStack[0])));
|
||||||
}
|
}
|
||||||
} else {
|
} else { //If its anywhere but the last in loop just get rid of the items.
|
||||||
if (plugin.inventorySaver.hasNormalInventory(p)) {
|
if (plugin.inventorySaver.hasNormalInventory(p)) {
|
||||||
p.getInventory().getItem(remItem.getDurability()).setAmount(0);
|
p.getInventory().getItem(remItem.getDurability()).setAmount(0);
|
||||||
p.updateInventory();
|
p.updateInventory();
|
||||||
|
@ -29,7 +29,7 @@ public class SellItemTags implements Listener {
|
|||||||
public void commandTag(CommandTagEvent e){
|
public void commandTag(CommandTagEvent e){
|
||||||
if(e.name.equalsIgnoreCase("sell=")){
|
if(e.name.equalsIgnoreCase("sell=")){
|
||||||
e.commandTagUsed();
|
e.commandTagUsed();
|
||||||
//if player uses sell= it will be eg. sell= <total cashback> <item> <amount of item> [enchanted:KNOCKBACK:1] [potion:JUMP]
|
//if player uses sell= it will be eg. sell= <total cashback> <item> <amount of item> [enchanted:KNOCKBACK:1] [potion:JUMP] [custom-data:#]
|
||||||
try {
|
try {
|
||||||
if (plugin.econ != null) {
|
if (plugin.econ != null) {
|
||||||
int sold = removeItem(e.p, e.args, false);
|
int sold = removeItem(e.p, e.args, false);
|
||||||
@ -98,6 +98,24 @@ public class SellItemTags implements Listener {
|
|||||||
//get inventory slots and then an empty list to store slots that have the item to sell
|
//get inventory slots and then an empty list to store slots that have the item to sell
|
||||||
List<ItemStack> cont = new ArrayList<>(Arrays.asList(plugin.inventorySaver.getNormalInventory(p)));
|
List<ItemStack> cont = new ArrayList<>(Arrays.asList(plugin.inventorySaver.getNormalInventory(p)));
|
||||||
List<ItemStack> remCont = new ArrayList<>();
|
List<ItemStack> remCont = new ArrayList<>();
|
||||||
|
byte id = -1;
|
||||||
|
String potion = "false";
|
||||||
|
int customData = 0;
|
||||||
|
boolean noCustom = false;
|
||||||
|
for(String argsTemp : args){
|
||||||
|
if(argsTemp.startsWith("potion:")){
|
||||||
|
potion = argsTemp.replace("potion:","");
|
||||||
|
}
|
||||||
|
if (argsTemp.startsWith("id:")) {
|
||||||
|
id = Byte.parseByte(argsTemp.replace("id:", ""));
|
||||||
|
}
|
||||||
|
if (argsTemp.startsWith("custom-data:")) {
|
||||||
|
customData = Integer.parseInt(argsTemp.replace("custom-data:", ""));
|
||||||
|
}
|
||||||
|
if (argsTemp.contains("NOCUSTOMDATA")) {
|
||||||
|
noCustom = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//create an itemstack of the item to sell and the amount to sell (0 if all as args[2] will not be an amount)
|
//create an itemstack of the item to sell and the amount to sell (0 if all as args[2] will not be an amount)
|
||||||
ItemStack sellItem = new ItemStack(Objects.requireNonNull(Material.matchMaterial(args[1])), removeAll ? 0 : Integer.parseInt(args[2]));
|
ItemStack sellItem = new ItemStack(Objects.requireNonNull(Material.matchMaterial(args[1])), removeAll ? 0 : Integer.parseInt(args[2]));
|
||||||
@ -107,23 +125,6 @@ public class SellItemTags implements Listener {
|
|||||||
ItemStack remItm;
|
ItemStack remItm;
|
||||||
if (itm != null && itm.getType().equals(sellItem.getType())) {
|
if (itm != null && itm.getType().equals(sellItem.getType())) {
|
||||||
remItm = new ItemStack(itm.getType(), itm.getAmount(), (short)f);
|
remItm = new ItemStack(itm.getType(), itm.getAmount(), (short)f);
|
||||||
//determine if the command contains parameters for extensions
|
|
||||||
String potion = "false";
|
|
||||||
for(String argsTemp : args){
|
|
||||||
if(argsTemp.startsWith("potion:")){
|
|
||||||
potion = argsTemp.replace("potion:","");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//legacy ID
|
|
||||||
byte id = -1;
|
|
||||||
if(plugin.legacy.LOCAL_VERSION.lessThanOrEqualTo(MinecraftVersions.v1_15)) {
|
|
||||||
for (String argsTemp : args) {
|
|
||||||
if (argsTemp.startsWith("id:")) {
|
|
||||||
id = Byte.parseByte(argsTemp.replace("id:", ""));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//check to ensure any extensions are checked
|
//check to ensure any extensions are checked
|
||||||
try {
|
try {
|
||||||
if (!potion.equals("false")) {
|
if (!potion.equals("false")) {
|
||||||
@ -134,10 +135,25 @@ public class SellItemTags implements Listener {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (id != -1) {
|
//Check if the item matches the id set. If not continue to next in loop.
|
||||||
if (itm.getDurability() != id) {
|
if(id != -1 && itm.getDurability() != id){
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
//Check if noCustom is set and if the item has custom data. If so continue to next in loop.
|
||||||
|
if(noCustom && cont.get(f).hasItemMeta()){
|
||||||
|
if(Objects.requireNonNull(cont.get(f).getItemMeta()).hasCustomModelData()){
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//Check if custom model data is set and if the item has that data. If not continue to next in loop.
|
||||||
|
if (customData != 0) {
|
||||||
|
if (!itm.hasItemMeta()) {
|
||||||
|
continue;
|
||||||
|
} else {
|
||||||
|
if(Objects.requireNonNull(itm.getItemMeta()).getCustomModelData() != customData){
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}catch(Exception exc){
|
}catch(Exception exc){
|
||||||
//skip if it cannot do unless plugin.debug is enabled
|
//skip if it cannot do unless plugin.debug is enabled
|
||||||
|
Loading…
Reference in New Issue
Block a user