mirror of
https://github.com/ChestShop-authors/ChestShop-3.git
synced 2024-12-25 09:27:39 +01:00
- Fancy sign formatting :D
- Fixed LWC, Lockette and Default protections - Added restricted signs (Changed how they work) - Added an option to use another name - Fixed a bug where default protection was initialized too many times - Disallowed players to place another chest near a shop chest - Speeded up and fixed enchantment and durability in itemstacks - Changed /iteminfo a bit - Added /chestshop reload - Added many default permission kits - Fixed dye colors - Added an option to allow towny residents place shops in their town
This commit is contained in:
parent
505dfb3449
commit
dc4d9961c1
@ -1,6 +1,8 @@
|
|||||||
package com.Acrobot.ChestShop.Commands;
|
package com.Acrobot.ChestShop.Commands;
|
||||||
|
|
||||||
import com.Acrobot.ChestShop.ChestShop;
|
import com.Acrobot.ChestShop.ChestShop;
|
||||||
|
import com.Acrobot.ChestShop.Config.Config;
|
||||||
|
import com.Acrobot.ChestShop.Config.ConfigObject;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandExecutor;
|
import org.bukkit.command.CommandExecutor;
|
||||||
@ -11,6 +13,11 @@ import org.bukkit.command.CommandSender;
|
|||||||
*/
|
*/
|
||||||
public class Version implements CommandExecutor {
|
public class Version implements CommandExecutor {
|
||||||
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
|
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
|
||||||
|
if (args.length > 0 && args[0].equals("reload")){
|
||||||
|
Config.config = new ConfigObject();
|
||||||
|
sender.sendMessage(ChatColor.DARK_GREEN + "The config was reloaded.");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
sender.sendMessage(ChatColor.GRAY + ChestShop.getPluginName() + "'s version is: " + ChatColor.GREEN + ChestShop.getVersion());
|
sender.sendMessage(ChatColor.GRAY + ChestShop.getPluginName() + "'s version is: " + ChatColor.GREEN + ChestShop.getVersion());
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -6,7 +6,7 @@ import com.nijikokun.register.payment.forChestShop.Methods;
|
|||||||
* @author Acrobot
|
* @author Acrobot
|
||||||
*/
|
*/
|
||||||
public class Config {
|
public class Config {
|
||||||
private static ConfigObject config;
|
public static ConfigObject config;
|
||||||
|
|
||||||
public static void setup(ConfigObject cfg) {
|
public static void setup(ConfigObject cfg) {
|
||||||
config = cfg;
|
config = cfg;
|
||||||
|
@ -27,6 +27,7 @@ public enum Property {
|
|||||||
SHOW_TRANSACTION_INFORMATION_CLIENT(true, "Do you want to show \"You bought/sold... \" messages?"),
|
SHOW_TRANSACTION_INFORMATION_CLIENT(true, "Do you want to show \"You bought/sold... \" messages?"),
|
||||||
SHOW_TRANSACTION_INFORMATION_OWNER(true, "Do you want to show \"Somebody bought/sold... \" messages?"),
|
SHOW_TRANSACTION_INFORMATION_OWNER(true, "Do you want to show \"Somebody bought/sold... \" messages?"),
|
||||||
TOWNY_INTEGRATION(false, "Do you want to only let people build inside shop plots?"),
|
TOWNY_INTEGRATION(false, "Do you want to only let people build inside shop plots?"),
|
||||||
|
TOWNY_SHOPS_FOR_OWNERS_ONLY(true, "If true, only plot owners are able to build inside a shop plot. If false, every town's resident is able to build there."),
|
||||||
WORLDGUARD_INTEGRATION(false, "Do you want to only let people build inside plots?"),
|
WORLDGUARD_INTEGRATION(false, "Do you want to only let people build inside plots?"),
|
||||||
TAX_AMOUNT(0, "Percent of the price that should go to the server's account. (100 = 100 percent)"),
|
TAX_AMOUNT(0, "Percent of the price that should go to the server's account. (100 = 100 percent)"),
|
||||||
SHOP_REFUND_PRICE(0, "How much money do you get back when destroying a sign?"),
|
SHOP_REFUND_PRICE(0, "How much money do you get back when destroying a sign?"),
|
||||||
|
@ -6,6 +6,7 @@ import com.Acrobot.ChestShop.Config.Property;
|
|||||||
|
|
||||||
import javax.persistence.OptimisticLockException;
|
import javax.persistence.OptimisticLockException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Acrobot
|
* @author Acrobot
|
||||||
@ -18,10 +19,27 @@ public class Queue implements Runnable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void run() {
|
public void run() {
|
||||||
ChestShop.getDB().delete(ChestShop.getDB().find(Transaction.class).where().lt("sec", System.currentTimeMillis() / 1000 - Config.getInteger(Property.RECORD_TIME_TO_LIVE)).findList());
|
deleteOld();
|
||||||
|
|
||||||
ArrayList<Transaction> queueCopy = queue;
|
ChestShop.getDB().save(queue);
|
||||||
try { ChestShop.getDB().save(queueCopy); } catch (OptimisticLockException ignored) {}
|
|
||||||
queue.clear();
|
queue.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean deleteOld() {
|
||||||
|
try {
|
||||||
|
ChestShop.getDB().delete(getOld());
|
||||||
|
return true;
|
||||||
|
} catch (OptimisticLockException ex) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static List getOld() throws OptimisticLockException {
|
||||||
|
return ChestShop
|
||||||
|
.getDB()
|
||||||
|
.find(Transaction.class)
|
||||||
|
.where()
|
||||||
|
.lt("sec", System.currentTimeMillis() / 1000 - Config.getInteger(Property.RECORD_TIME_TO_LIVE))
|
||||||
|
.findList();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -31,7 +31,8 @@ public class DataValue {
|
|||||||
materialData = new Wool(DyeColor.valueOf(type));
|
materialData = new Wool(DyeColor.valueOf(type));
|
||||||
break;
|
break;
|
||||||
case INK_SACK:
|
case INK_SACK:
|
||||||
materialData = new Wool(15 - DyeColor.valueOf(type).getData());
|
byte data = (byte) (15 - DyeColor.valueOf(type).getData());
|
||||||
|
materialData = new Wool(DyeColor.getByData(data));
|
||||||
break;
|
break;
|
||||||
case COAL:
|
case COAL:
|
||||||
materialData = new Coal(CoalType.valueOf(type));
|
materialData = new Coal(CoalType.valueOf(type));
|
||||||
|
@ -7,13 +7,18 @@ import org.bukkit.Material;
|
|||||||
import org.bukkit.enchantments.Enchantment;
|
import org.bukkit.enchantments.Enchantment;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Acrobot
|
* @author Acrobot
|
||||||
* Manages ItemStack names and ID's
|
* Manages ItemStack names and ID's
|
||||||
*/
|
*/
|
||||||
public class Items {
|
public class Items {
|
||||||
|
private static final Pattern Durability = Pattern.compile(":(\\d)*");
|
||||||
|
private static final Pattern Enchant = Pattern.compile("-([0-9a-zA-Z])*");
|
||||||
|
|
||||||
public static Material getMaterial(String itemName) {
|
public static Material getMaterial(String itemName) {
|
||||||
if (uNumber.isInteger(itemName)) return Material.getMaterial(Integer.parseInt(itemName));
|
if (uNumber.isInteger(itemName)) return Material.getMaterial(Integer.parseInt(itemName));
|
||||||
@ -46,35 +51,54 @@ public class Items {
|
|||||||
ItemStack toReturn = getFromOddItem(itemName);
|
ItemStack toReturn = getFromOddItem(itemName);
|
||||||
if (toReturn != null) return toReturn;
|
if (toReturn != null) return toReturn;
|
||||||
|
|
||||||
String[] split = itemName.split(":|-");
|
String first = itemName.split(":|-")[0];
|
||||||
|
|
||||||
String[] space = split[0].split(" ");
|
String[] space = first.split(" ");
|
||||||
Material material = getMaterial(split[0]);
|
Material material = getMaterial(first);
|
||||||
|
|
||||||
for (int i = (space.length > 1 ? 1 : 0); i >= 0 && material == null; i--) material = getMaterial(space[i]);
|
for (int i = (space.length > 1 ? 1 : 0); i >= 0 && material == null; i--) material = getMaterial(space[i]);
|
||||||
|
|
||||||
if (material == null) return null;
|
if (material == null) return null;
|
||||||
|
|
||||||
toReturn = new ItemStack(material, 1);
|
toReturn = new ItemStack(material, 1);
|
||||||
|
toReturn = addEnchantments(toReturn, itemName);
|
||||||
|
toReturn = addDurability(toReturn, itemName);
|
||||||
|
|
||||||
for (int i = 1; i < split.length; i++){
|
|
||||||
split[i] = split[i].trim();
|
|
||||||
if (uNumber.isInteger(split[i])) toReturn.setDurability((short) Integer.parseInt(split[i]));
|
|
||||||
else {
|
|
||||||
try{ toReturn.addEnchantments(getEnchantment(split[i]));
|
|
||||||
} catch (Exception ignored){}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
short data = getDataFromWord(space[0], material);
|
short data = getDataFromWord(space[0], material);
|
||||||
if (data != 0) toReturn.setDurability(data);
|
if (data != 0) toReturn.setDurability(data);
|
||||||
|
|
||||||
return toReturn;
|
return toReturn;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static ItemStack addDurability(ItemStack toReturn, String itemName) {
|
||||||
|
Matcher m = Durability.matcher(itemName);
|
||||||
|
if (!m.find()) return toReturn;
|
||||||
|
|
||||||
|
String data = m.group();
|
||||||
|
if (data == null || data.isEmpty()) return toReturn;
|
||||||
|
data = data.substring(1);
|
||||||
|
if (uNumber.isInteger(data)) toReturn.setDurability(Short.valueOf(data));
|
||||||
|
|
||||||
|
return toReturn;
|
||||||
|
}
|
||||||
|
|
||||||
private static Map<Enchantment, Integer> getEnchantment(String itemName){
|
private static Map<Enchantment, Integer> getEnchantment(String itemName){
|
||||||
return uEnchantment.decodeEnchantment(itemName);
|
return uEnchantment.decodeEnchantment(itemName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static Map<Enchantment, Integer> getEnchant(String original){
|
||||||
|
Matcher m = Enchant.matcher(original);
|
||||||
|
if (!m.find()) return new HashMap<Enchantment, Integer>();
|
||||||
|
String group = m.group().substring(1);
|
||||||
|
return getEnchantment(group);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static ItemStack addEnchantments(ItemStack is, String itemname){
|
||||||
|
try{ is.addEnchantments(getEnchant(itemname));
|
||||||
|
} catch (Exception ignored) {}
|
||||||
|
return is;
|
||||||
|
}
|
||||||
|
|
||||||
private static ItemStack getFromOddItem(String itemName) {
|
private static ItemStack getFromOddItem(String itemName) {
|
||||||
return !Odd.isInitialized() ? null : Odd.returnItemStack(itemName.replace(":", ";"));
|
return !Odd.isInitialized() ? null : Odd.returnItemStack(itemName.replace(":", ";"));
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,7 @@ import com.Acrobot.ChestShop.Config.Config;
|
|||||||
import com.Acrobot.ChestShop.Config.Property;
|
import com.Acrobot.ChestShop.Config.Property;
|
||||||
import com.Acrobot.ChestShop.Economy;
|
import com.Acrobot.ChestShop.Economy;
|
||||||
import com.Acrobot.ChestShop.Permission;
|
import com.Acrobot.ChestShop.Permission;
|
||||||
|
import com.Acrobot.ChestShop.Signs.restrictedSign;
|
||||||
import com.Acrobot.ChestShop.Utils.uBlock;
|
import com.Acrobot.ChestShop.Utils.uBlock;
|
||||||
import com.Acrobot.ChestShop.Utils.uLongName;
|
import com.Acrobot.ChestShop.Utils.uLongName;
|
||||||
import com.Acrobot.ChestShop.Utils.uSign;
|
import com.Acrobot.ChestShop.Utils.uSign;
|
||||||
@ -28,9 +29,10 @@ public class blockBreak extends BlockListener {
|
|||||||
public static boolean cancellingBlockBreak(Block block, Player player) {
|
public static boolean cancellingBlockBreak(Block block, Player player) {
|
||||||
if (block == null) return false;
|
if (block == null) return false;
|
||||||
if (player != null && (Permission.has(player, Permission.ADMIN) || Permission.has(player, Permission.MOD))) return false;
|
if (player != null && (Permission.has(player, Permission.ADMIN) || Permission.has(player, Permission.MOD))) return false;
|
||||||
|
|
||||||
if (uSign.isSign(block)) block.getState().update(); //Show the text immediately
|
if (uSign.isSign(block)) block.getState().update(); //Show the text immediately
|
||||||
|
|
||||||
if (restrictedSign(block)) return true; //If the block is a restricted sign (and the player is not an admin/mod)
|
if (restrictedSign(block)) return !restrictedSign.canDestroy(player, uBlock.findRestrictedSign(block));
|
||||||
|
|
||||||
Sign sign = uBlock.findSign(block, (player != null ? uLongName.stripName(player.getName()) : null));
|
Sign sign = uBlock.findSign(block, (player != null ? uLongName.stripName(player.getName()) : null));
|
||||||
if (!isCorrectSign(sign, block)) return false; //It's not a correct shop sign, so don't cancel it
|
if (!isCorrectSign(sign, block)) return false; //It's not a correct shop sign, so don't cancel it
|
||||||
@ -45,8 +47,7 @@ public class blockBreak extends BlockListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static boolean restrictedSign(Block block) {
|
private static boolean restrictedSign(Block block) {
|
||||||
Sign s = uBlock.findRestrictedSign(block);
|
return uBlock.findRestrictedSign(block) != null;
|
||||||
return isCorrectSign(s, block);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onBlockBreak(BlockBreakEvent event) {
|
public void onBlockBreak(BlockBreakEvent event) {
|
||||||
@ -62,7 +63,8 @@ public class blockBreak extends BlockListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static boolean playerIsNotOwner(Player player, Sign sign) {
|
private static boolean playerIsNotOwner(Player player, Sign sign) {
|
||||||
return player == null || (!uLongName.stripName(player.getName()).equals(sign.getLine(0)) && !Permission.has(player, Permission.OTHER_NAME + sign.getLine(0)));
|
return player == null || (!uLongName.stripName(player.getName()).equals(sign.getLine(0))
|
||||||
|
&& !Permission.otherName(player, sign.getLine(0)));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onBlockPistonExtend(BlockPistonExtendEvent event) {
|
public void onBlockPistonExtend(BlockPistonExtendEvent event) {
|
||||||
|
@ -1,7 +1,13 @@
|
|||||||
package com.Acrobot.ChestShop.Listeners;
|
package com.Acrobot.ChestShop.Listeners;
|
||||||
|
|
||||||
|
import com.Acrobot.ChestShop.Config.Config;
|
||||||
|
import com.Acrobot.ChestShop.Config.Language;
|
||||||
|
import com.Acrobot.ChestShop.Protection.Security;
|
||||||
|
import com.Acrobot.ChestShop.Utils.uBlock;
|
||||||
import com.Acrobot.ChestShop.Utils.uSign;
|
import com.Acrobot.ChestShop.Utils.uSign;
|
||||||
|
import org.bukkit.Material;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
|
import org.bukkit.block.Chest;
|
||||||
import org.bukkit.block.Sign;
|
import org.bukkit.block.Sign;
|
||||||
import org.bukkit.event.block.BlockListener;
|
import org.bukkit.event.block.BlockListener;
|
||||||
import org.bukkit.event.block.BlockPlaceEvent;
|
import org.bukkit.event.block.BlockPlaceEvent;
|
||||||
@ -14,6 +20,19 @@ public class blockPlace extends BlockListener {
|
|||||||
Block block = event.getBlockAgainst();
|
Block block = event.getBlockAgainst();
|
||||||
if (uSign.isSign(block) && uSign.isValid((Sign) block.getState())) {
|
if (uSign.isSign(block) && uSign.isValid((Sign) block.getState())) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Block placed = event.getBlockPlaced();
|
||||||
|
if (placed.getType() == Material.CHEST){
|
||||||
|
Chest neighbor = uBlock.findNeighbor(placed);
|
||||||
|
if (neighbor == null) return;
|
||||||
|
|
||||||
|
Block neighborBlock = neighbor.getBlock();
|
||||||
|
if (Security.isProtected(neighborBlock) && !Security.canAccess(event.getPlayer(), neighborBlock)){
|
||||||
|
event.getPlayer().sendMessage(Config.getLocal(Language.ACCESS_DENIED));
|
||||||
|
event.setCancelled(true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,6 @@ import com.Acrobot.ChestShop.Protection.Plugins.Default;
|
|||||||
import com.Acrobot.ChestShop.Shop.ShopManagement;
|
import com.Acrobot.ChestShop.Shop.ShopManagement;
|
||||||
import com.Acrobot.ChestShop.Signs.restrictedSign;
|
import com.Acrobot.ChestShop.Signs.restrictedSign;
|
||||||
import com.Acrobot.ChestShop.Utils.uBlock;
|
import com.Acrobot.ChestShop.Utils.uBlock;
|
||||||
import com.Acrobot.ChestShop.Utils.uLongName;
|
|
||||||
import com.Acrobot.ChestShop.Utils.uSign;
|
import com.Acrobot.ChestShop.Utils.uSign;
|
||||||
import net.minecraft.server.IInventory;
|
import net.minecraft.server.IInventory;
|
||||||
import net.minecraft.server.InventoryLargeChest;
|
import net.minecraft.server.InventoryLargeChest;
|
||||||
@ -64,12 +63,11 @@ public class playerInteract extends PlayerListener {
|
|||||||
|
|
||||||
if (action == Action.RIGHT_CLICK_BLOCK) event.setCancelled(true);
|
if (action == Action.RIGHT_CLICK_BLOCK) event.setCancelled(true);
|
||||||
|
|
||||||
if (uLongName.stripName(player.getName()).equals(sign.getLine(0))) {
|
if (uSign.canAccess(player, sign)) {
|
||||||
if (action != Action.LEFT_CLICK_BLOCK || !Config.getBoolean(Property.ALLOW_LEFT_CLICK_DESTROYING)) showChestGUI(player, block);
|
if (action != Action.LEFT_CLICK_BLOCK || !Config.getBoolean(Property.ALLOW_LEFT_CLICK_DESTROYING)) showChestGUI(player, block);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (restrictedSign.isRestrictedShop(sign) && !restrictedSign.canAccess(sign, player)) {
|
if (restrictedSign.isRestrictedShop(sign) && !restrictedSign.canAccess(sign, player)) {
|
||||||
player.sendMessage(Config.getLocal(Language.ACCESS_DENIED));
|
player.sendMessage(Config.getLocal(Language.ACCESS_DENIED));
|
||||||
return;
|
return;
|
||||||
|
@ -37,6 +37,7 @@ public class pluginEnable extends ServerListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void initializePlugins() {
|
public static void initializePlugins() {
|
||||||
|
Security.protections.add(new Default()); //Initialize basic protection
|
||||||
for (Object plugin : ChestShop.getDependencies()) {
|
for (Object plugin : ChestShop.getDependencies()) {
|
||||||
Plugin pl = ChestShop.pm.getPlugin((String) plugin);
|
Plugin pl = ChestShop.pm.getPlugin((String) plugin);
|
||||||
if (pl != null) initializePlugin((String) plugin, pl);
|
if (pl != null) initializePlugin((String) plugin, pl);
|
||||||
@ -44,7 +45,6 @@ public class pluginEnable extends ServerListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static void initializePlugin(String name, Plugin plugin) { //Really messy, right? But it's short and fast :)
|
private static void initializePlugin(String name, Plugin plugin) { //Really messy, right? But it's short and fast :)
|
||||||
Security.protections.add(new Default()); //Initialize basic protection
|
|
||||||
if (name.equals("Permissions")) {
|
if (name.equals("Permissions")) {
|
||||||
if (Permission.permissions != null) return;
|
if (Permission.permissions != null) return;
|
||||||
Permission.permissions = ((Permissions) plugin).getHandler();
|
Permission.permissions = ((Permissions) plugin).getHandler();
|
||||||
|
@ -49,14 +49,15 @@ public class signChange extends BlockListener {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (restrictedSign.isRestricted(event.getLines())) {
|
if (restrictedSign.isRestricted(line)) {
|
||||||
if (!playerIsAdmin) {
|
if (!restrictedSign.hasPermission(player, line)) {
|
||||||
player.sendMessage(Config.getLocal(Language.ACCESS_DENIED));
|
player.sendMessage(Config.getLocal(Language.ACCESS_DENIED));
|
||||||
dropSign(event);
|
dropSign(event);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Block secondSign = signBlock.getRelative(BlockFace.DOWN);
|
Block secondSign = signBlock.getRelative(BlockFace.DOWN);
|
||||||
if (!uSign.isSign(secondSign) || !uSign.isValid((Sign) secondSign.getState())) dropSign(event);
|
if (!playerIsAdmin && (!uSign.isSign(secondSign) || !uSign.isValid((Sign) secondSign.getState())
|
||||||
|
|| !uSign.canAccess(player, (Sign) secondSign))) dropSign(event);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -94,8 +95,8 @@ public class signChange extends BlockListener {
|
|||||||
dropSign(event);
|
dropSign(event);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
boolean canAccess = !Security.isProtected(chestBlock) || Security.canAccess(player, chestBlock);
|
|
||||||
|
|
||||||
|
boolean canAccess = !Security.isProtected(chestBlock) || Security.canAccess(player, chestBlock);
|
||||||
if (!canAccess) {
|
if (!canAccess) {
|
||||||
player.sendMessage(Config.getLocal(Language.CANNOT_ACCESS_THE_CHEST));
|
player.sendMessage(Config.getLocal(Language.CANNOT_ACCESS_THE_CHEST));
|
||||||
dropSign(event);
|
dropSign(event);
|
||||||
@ -104,6 +105,8 @@ public class signChange extends BlockListener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
float shopCreationPrice = Config.getFloat(Property.SHOP_CREATION_PRICE);
|
float shopCreationPrice = Config.getFloat(Property.SHOP_CREATION_PRICE);
|
||||||
boolean paid = shopCreationPrice != 0 && !isAdminShop;
|
boolean paid = shopCreationPrice != 0 && !isAdminShop;
|
||||||
if (paid) {
|
if (paid) {
|
||||||
@ -162,14 +165,14 @@ public class signChange extends BlockListener {
|
|||||||
else toReturn.append(is.getTypeId());
|
else toReturn.append(is.getTypeId());
|
||||||
|
|
||||||
if (index != -1 && index != 9999) toReturn.append(fourthLine.substring(index));
|
if (index != -1 && index != 9999) toReturn.append(fourthLine.substring(index));
|
||||||
return toReturn.toString();
|
return uSign.capitalizeFirst(toReturn.toString(), ' ');
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean formatFirstLine(String line1, Player player) {
|
private static boolean formatFirstLine(String line1, Player player) {
|
||||||
return line1.isEmpty() ||
|
return line1.isEmpty() ||
|
||||||
(!line1.equals(uLongName.stripName(player.getName()))
|
(!line1.equals(uLongName.stripName(player.getName()))
|
||||||
&& !Permission.has(player, Permission.ADMIN)
|
&& !Permission.has(player, Permission.ADMIN)
|
||||||
&& !Permission.has(player, Permission.OTHER_NAME + line1));
|
&& !Permission.otherName(player, line1));
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void dropSign(SignChangeEvent event) {
|
private static void dropSign(SignChangeEvent event) {
|
||||||
|
@ -14,7 +14,8 @@ public enum Permission {
|
|||||||
SELL("ChestShop.shop.sell"),
|
SELL("ChestShop.shop.sell"),
|
||||||
ADMIN("ChestShop.admin"),
|
ADMIN("ChestShop.admin"),
|
||||||
MOD("ChestShop.mod"),
|
MOD("ChestShop.mod"),
|
||||||
OTHER_NAME("ChestShop.name.");
|
OTHER_NAME("ChestShop.name."),
|
||||||
|
GROUP("ChestShop.group.");
|
||||||
|
|
||||||
private final String permission;
|
private final String permission;
|
||||||
|
|
||||||
@ -33,6 +34,16 @@ public enum Permission {
|
|||||||
return player.hasPermission(node) || player.hasPermission(node.toLowerCase());
|
return player.hasPermission(node) || player.hasPermission(node.toLowerCase());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean otherName(Player p, String name){
|
||||||
|
String node = OTHER_NAME + name;
|
||||||
|
if (permissions != null) return permissions.has(p, node) || permissions.has(p, node.toLowerCase());
|
||||||
|
return hasPermissionSet(p, node) || hasPermissionSet(p, node.toLowerCase());
|
||||||
|
}
|
||||||
|
|
||||||
|
private static boolean hasPermissionSet(Player p, String perm){
|
||||||
|
return p.isPermissionSet(perm) && p.hasPermission(perm);
|
||||||
|
}
|
||||||
|
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return permission;
|
return permission;
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package com.Acrobot.ChestShop.Protection.Plugins;
|
package com.Acrobot.ChestShop.Protection.Plugins;
|
||||||
|
|
||||||
|
import com.Acrobot.ChestShop.Permission;
|
||||||
import com.Acrobot.ChestShop.Protection.Protection;
|
import com.Acrobot.ChestShop.Protection.Protection;
|
||||||
import com.Acrobot.ChestShop.Utils.uBlock;
|
import com.Acrobot.ChestShop.Utils.uBlock;
|
||||||
import com.Acrobot.ChestShop.Utils.uLongName;
|
import com.Acrobot.ChestShop.Utils.uLongName;
|
||||||
@ -24,12 +25,16 @@ public class Default implements Protection {
|
|||||||
String playerName = player.getName();
|
String playerName = player.getName();
|
||||||
|
|
||||||
Sign sign = uBlock.findSign2(block);
|
Sign sign = uBlock.findSign2(block);
|
||||||
if (sign != null) return uLongName.stripName(playerName).equals(sign.getLine(0));
|
|
||||||
|
if (sign != null) return uLongName.stripName(playerName).equals(sign.getLine(0))
|
||||||
|
|| Permission.otherName(player, sign.getLine(0));
|
||||||
|
|
||||||
Chest neighborChest = uBlock.findNeighbor(block);
|
Chest neighborChest = uBlock.findNeighbor(block);
|
||||||
Sign neighborSign = (neighborChest != null ? uBlock.findSign2(neighborChest.getBlock()) : null);
|
Sign neighborSign = (neighborChest != null ? uBlock.findSign2(neighborChest.getBlock()) : null);
|
||||||
|
|
||||||
return neighborSign == null || uLongName.stripName(playerName).equals(neighborSign.getLine(0));
|
return neighborSign == null
|
||||||
|
|| uLongName.stripName(playerName).equals(neighborSign.getLine(0))
|
||||||
|
|| Permission.otherName(player, neighborSign.getLine(0));
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean protect(String name, Block block) {
|
public boolean protect(String name, Block block) {
|
||||||
|
@ -26,7 +26,7 @@ public class LWCplugin implements Protection {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean canAccess(Player player, Block block) {
|
public boolean canAccess(Player player, Block block) {
|
||||||
return lwc.canAccessProtection(player, block);
|
return lwc.findProtection(block) == null || lwc.canAccessProtection(player, block);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean protect(String name, Block block) {
|
public boolean protect(String name, Block block) {
|
||||||
|
@ -16,8 +16,10 @@ public class LockettePlugin implements Protection {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean canAccess(Player player, Block block) {
|
public boolean canAccess(Player player, Block block) {
|
||||||
int length = (player.getName().length() > 15 ? 15 : player.getName().length());
|
String pName = player.getName();
|
||||||
return player.getName().substring(0, length).equals(Lockette.getProtectedOwner(block));
|
int length = (pName.length() > 15 ? 15 : pName.length());
|
||||||
|
String owner = Lockette.getProtectedOwner(block);
|
||||||
|
return owner == null || pName.substring(0, length).equals(owner);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean protect(String name, Block block) {
|
public boolean protect(String name, Block block) {
|
||||||
|
@ -30,19 +30,20 @@ public class Security {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isProtected(Block block) {
|
public static boolean isProtected(Block block) {
|
||||||
boolean isProtected = false;
|
boolean isProt = false;
|
||||||
for (int i = 0; i < protections.size() && !isProtected; i++) isProtected = protections.get(i).isProtected(block);
|
for (int i = 0; i < protections.size() && !isProt; i++) isProt = protections.get(i).isProtected(block);
|
||||||
return isProtected;
|
return isProt;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean canPlaceSign(Player p, Sign sign) {
|
public static boolean canPlaceSign(Player p, Sign sign) {
|
||||||
return !thereIsAnotherSignByPlayer(blockBreak.getAttachedFace(sign), sign.getBlock(), uLongName.stripName(p.getName()));
|
return !thereIsAnotherSignByPlayer(blockBreak.getAttachedFace(sign), sign.getBlock(), uLongName.stripName(p.getName()));
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean thereIsAnotherSignByPlayer(Block baseBlock, Block signBlock, String shortName){
|
private static boolean thereIsAnotherSignByPlayer(Block baseBlock, Block signBlock, String shortName) {
|
||||||
for (BlockFace bf : faces){
|
for (BlockFace bf : faces) {
|
||||||
Block block = baseBlock.getRelative(bf);
|
Block block = baseBlock.getRelative(bf);
|
||||||
if(uSign.isSign(block) && !block.equals(signBlock) && blockBreak.getAttachedFace((Sign) block.getState()).equals(baseBlock) && !((Sign) block.getState()).getLine(0).equals(shortName)) return true;
|
if (uSign.isSign(block) && !block.equals(signBlock) && blockBreak.getAttachedFace((Sign) block.getState()).equals(baseBlock) && !((Sign) block.getState()).getLine(0).equals(shortName))
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -26,16 +26,28 @@ public class restrictedSign {
|
|||||||
|
|
||||||
public static boolean canAccess(Sign sign, Player player) {
|
public static boolean canAccess(Sign sign, Player player) {
|
||||||
Block blockUp = sign.getBlock().getRelative(BlockFace.UP);
|
Block blockUp = sign.getBlock().getRelative(BlockFace.UP);
|
||||||
if (Permission.permissions == null || !uSign.isSign(blockUp) || Permission.has(player, Permission.ADMIN)) return true;
|
return !uSign.isSign(blockUp) || hasPermission(player, ((Sign) blockUp.getState()).getLines());
|
||||||
|
|
||||||
String world = blockUp.getWorld().getName();
|
}
|
||||||
String playerName = player.getName();
|
|
||||||
|
|
||||||
sign = (Sign) blockUp.getState();
|
public static boolean canDestroy(Player p, Sign sign){
|
||||||
|
Sign shopSign = getAssociatedSign(sign);
|
||||||
|
return uSign.canAccess(p, shopSign);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Sign getAssociatedSign(Sign restricted){
|
||||||
|
Block down = restricted.getBlock().getRelative(BlockFace.DOWN);
|
||||||
|
return uSign.isSign(down) ? (Sign) down.getState() : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean hasPermission(Player p, String[] lines){
|
||||||
|
if (Permission.has(p, Permission.ADMIN)) return true;
|
||||||
|
|
||||||
|
String world = p.getWorld().getName();
|
||||||
|
String playerName = p.getName();
|
||||||
for (int i = 1; i <= 3; i++) {
|
for (int i = 1; i <= 3; i++) {
|
||||||
if (Permission.permissions != null && Permission.permissions.inGroup(world, playerName, sign.getLine(i))) return true;
|
if (Permission.permissions != null && Permission.permissions.inGroup(world, playerName, lines[i])) return true;
|
||||||
if (player.hasPermission("ChestShop.group." + sign.getLine(i))) return true;
|
if (p.hasPermission(Permission.GROUP.toString() + lines[i])) return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -51,7 +51,7 @@ public class uInventory {
|
|||||||
amount = 0;
|
amount = 0;
|
||||||
for (ItemStack toAdd : items.values()) amount += toAdd.getAmount();
|
for (ItemStack toAdd : items.values()) amount += toAdd.getAmount();
|
||||||
|
|
||||||
return amount;*/ //TODO: Fix this in CraftBukkit's code
|
return amount;*/ //TODO: revert when Bukkit releases new RB
|
||||||
|
|
||||||
return addManually(inv, item, amount);
|
return addManually(inv, item, amount);
|
||||||
}
|
}
|
||||||
@ -101,6 +101,8 @@ public class uInventory {
|
|||||||
|
|
||||||
public static int fits(Inventory inv, ItemStack item, int amount, short durability) {
|
public static int fits(Inventory inv, ItemStack item, int amount, short durability) {
|
||||||
int maxStackSize = (Config.getBoolean(Property.STACK_UNSTACKABLES) ? 64 : item.getType().getMaxStackSize());
|
int maxStackSize = (Config.getBoolean(Property.STACK_UNSTACKABLES) ? 64 : item.getType().getMaxStackSize());
|
||||||
|
if (item.getType() == Material.POTION) maxStackSize = 1; //TODO Bukkit, can you fix that?
|
||||||
|
|
||||||
int amountLeft = amount;
|
int amountLeft = amount;
|
||||||
|
|
||||||
for (ItemStack currentItem : inv.getContents()) {
|
for (ItemStack currentItem : inv.getContents()) {
|
||||||
|
@ -2,9 +2,11 @@ package com.Acrobot.ChestShop.Utils;
|
|||||||
|
|
||||||
import com.Acrobot.ChestShop.Config.Config;
|
import com.Acrobot.ChestShop.Config.Config;
|
||||||
import com.Acrobot.ChestShop.Config.Property;
|
import com.Acrobot.ChestShop.Config.Property;
|
||||||
|
import com.Acrobot.ChestShop.Permission;
|
||||||
import com.palmergames.bukkit.towny.Towny;
|
import com.palmergames.bukkit.towny.Towny;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.block.Sign;
|
import org.bukkit.block.Sign;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
@ -34,21 +36,21 @@ public class uSign {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isValid(String[] line) {
|
public static boolean isValid(String[] line) {
|
||||||
try {
|
return isValidPreparedSign(line) && (line[2].contains("B") || line[2].contains("S")) && !line[0].isEmpty();
|
||||||
return isValidPreparedSign(line) && (line[2].contains("B") || line[2].contains("S"));
|
}
|
||||||
} catch (Exception e) {
|
|
||||||
return false;
|
public static boolean canAccess(Player p, Sign s) {
|
||||||
}
|
if (p == null) return false;
|
||||||
|
if (s == null) return true;
|
||||||
|
|
||||||
|
String line = s.getLine(0);
|
||||||
|
return uLongName.stripName(p.getName()).equals(line) || Permission.otherName(p, line);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isValidPreparedSign(String[] lines) {
|
public static boolean isValidPreparedSign(String[] lines) {
|
||||||
try {
|
boolean toReturn = true;
|
||||||
boolean toReturn = true;
|
for (int i = 0; i < 4 && toReturn; i++) toReturn = patterns[i].matcher(lines[i]).matches();
|
||||||
for (int i = 0; i < 4 && toReturn; i++) toReturn = patterns[i].matcher(lines[i]).matches();
|
return toReturn && lines[2].indexOf(':') == lines[2].lastIndexOf(':');
|
||||||
return toReturn && lines[2].split(":").length <= 2;
|
|
||||||
} catch (Exception e) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static float buyPrice(String text) {
|
public static float buyPrice(String text) {
|
||||||
@ -83,11 +85,11 @@ public class uSign {
|
|||||||
} else return 1;
|
} else return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String capitalizeFirst(String name){
|
public static String capitalizeFirst(String name) {
|
||||||
return capitalizeFirst(name, '_');
|
return capitalizeFirst(name, '_');
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String capitalizeFirst(String name, char separator){
|
public static String capitalizeFirst(String name, char separator) {
|
||||||
name = name.toLowerCase();
|
name = name.toLowerCase();
|
||||||
String[] split = name.split(Character.toString(separator));
|
String[] split = name.split(Character.toString(separator));
|
||||||
StringBuilder total = new StringBuilder(3);
|
StringBuilder total = new StringBuilder(3);
|
||||||
|
@ -17,7 +17,8 @@ public class uTowny {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isPlotOwner(Player player, Location chestLocation, Location signLocation) {
|
public static boolean isPlotOwner(Player player, Location chestLocation, Location signLocation) {
|
||||||
return isBlockOwner(player, chestLocation) && isBlockOwner(player, signLocation);
|
if (Config.getBoolean(Property.TOWNY_SHOPS_FOR_OWNERS_ONLY)) return isBlockOwner(player, chestLocation) && isBlockOwner(player, signLocation);
|
||||||
|
return isResident(player, chestLocation) && isResident(player, signLocation);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isNotInTheWilderness(Location chestLocation, Location signLocation) {
|
public static boolean isNotInTheWilderness(Location chestLocation, Location signLocation) {
|
||||||
@ -29,8 +30,12 @@ public class uTowny {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static boolean isBlockOwner(Player player, Location location) {
|
private static boolean isBlockOwner(Player player, Location location) {
|
||||||
try {
|
try { return uSign.towny.getTownyUniverse().getTownBlock(location).isOwner(uSign.towny.getTownyUniverse().getResident(player.getName()));
|
||||||
return uSign.towny.getTownyUniverse().getTownBlock(location).isOwner(uSign.towny.getTownyUniverse().getResident(player.getName()));
|
} catch (NotRegisteredException ex) { return false; }
|
||||||
|
}
|
||||||
|
|
||||||
|
private static boolean isResident(Player p, Location l){
|
||||||
|
try { return uSign.towny.getTownyUniverse().getTownBlock(l).getTown().hasResident(p.getName());
|
||||||
} catch (NotRegisteredException ex) { return false; }
|
} catch (NotRegisteredException ex) { return false; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -275,7 +275,7 @@ public abstract class Database {
|
|||||||
currentTable = currentLine.split(" ", 4)[2];
|
currentTable = currentLine.split(" ", 4)[2];
|
||||||
foundTables.put(currentLine.split(" ", 3)[2], scriptLines.size() - 1);
|
foundTables.put(currentLine.split(" ", 3)[2], scriptLines.size() - 1);
|
||||||
}
|
}
|
||||||
else if(currentLine.length() > 0 && currentLine.charAt(0) == ';' && currentTable != null && !currentTable.isEmpty()) {
|
else if(!currentLine.isEmpty() && currentLine.charAt(0) == ';' && currentTable != null && !currentTable.isEmpty()) {
|
||||||
//Found the end of a table definition, so update the entry
|
//Found the end of a table definition, so update the entry
|
||||||
int index = scriptLines.size() - 1;
|
int index = scriptLines.size() - 1;
|
||||||
foundTables.put(currentTable, index);
|
foundTables.put(currentTable, index);
|
||||||
|
@ -7,12 +7,12 @@ import java.util.HashSet;
|
|||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The <code>Methods</code> initializes Methods that utilize the Method interface
|
* The <code>methods</code> initializes methods that utilize the Method interface
|
||||||
* based on a "first come, first served" basis.
|
* based on a "first come, first served" basis.
|
||||||
* <p/>
|
* <p/>
|
||||||
* Allowing you to check whether a payment method exists or not.
|
* Allowing you to check whether a payment method exists or not.
|
||||||
* <p/>
|
* <p/>
|
||||||
* Methods also allows you to set a preferred method of payment before it captures
|
* methods also allows you to set a preferred method of payment before it captures
|
||||||
* payment plugins in the initialization process.
|
* payment plugins in the initialization process.
|
||||||
* <p/>
|
* <p/>
|
||||||
* in <code>bukkit.yml</code>:
|
* in <code>bukkit.yml</code>:
|
||||||
@ -30,18 +30,18 @@ public class Methods {
|
|||||||
private static boolean self = false;
|
private static boolean self = false;
|
||||||
private static Method Method = null;
|
private static Method Method = null;
|
||||||
private static String preferred = "";
|
private static String preferred = "";
|
||||||
private static Set<Method> Methods = new HashSet<Method>();
|
private static Set<Method> methods = new HashSet<Method>();
|
||||||
private static Set<String> Dependencies = new HashSet<String>();
|
private static Set<String> dependencies = new HashSet<String>();
|
||||||
private static Set<Method> Attachables = new HashSet<Method>();
|
private static Set<Method> attachables = new HashSet<Method>();
|
||||||
|
|
||||||
static {
|
static {
|
||||||
_init();
|
init();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Implement all methods along with their respective name & class.
|
* Implement all methods along with their respective name & class.
|
||||||
*/
|
*/
|
||||||
private static void _init() {
|
private static void init() {
|
||||||
addMethod("iConomy", new com.nijikokun.register.payment.forChestShop.methods.iCo6());
|
addMethod("iConomy", new com.nijikokun.register.payment.forChestShop.methods.iCo6());
|
||||||
addMethod("iConomy", new com.nijikokun.register.payment.forChestShop.methods.iCo5());
|
addMethod("iConomy", new com.nijikokun.register.payment.forChestShop.methods.iCo5());
|
||||||
addMethod("iConomy", new com.nijikokun.register.payment.forChestShop.methods.iCo4());
|
addMethod("iConomy", new com.nijikokun.register.payment.forChestShop.methods.iCo4());
|
||||||
@ -50,7 +50,7 @@ public class Methods {
|
|||||||
addMethod("Essentials", new com.nijikokun.register.payment.forChestShop.methods.EE17());
|
addMethod("Essentials", new com.nijikokun.register.payment.forChestShop.methods.EE17());
|
||||||
addMethod("Currency", new com.nijikokun.register.payment.forChestShop.methods.MCUR());
|
addMethod("Currency", new com.nijikokun.register.payment.forChestShop.methods.MCUR());
|
||||||
addMethod("3co", new com.nijikokun.register.payment.forChestShop.methods.ECO3());
|
addMethod("3co", new com.nijikokun.register.payment.forChestShop.methods.ECO3());
|
||||||
Dependencies.add("MultiCurrency");
|
dependencies.add("MultiCurrency");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -70,7 +70,7 @@ public class Methods {
|
|||||||
self = false;
|
self = false;
|
||||||
Method = null;
|
Method = null;
|
||||||
preferred = "";
|
preferred = "";
|
||||||
Attachables.clear();
|
attachables.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -84,13 +84,13 @@ public class Methods {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns an array of payment method names that have been loaded
|
* Returns an array of payment method names that have been loaded
|
||||||
* through the <code>_init</code> method.
|
* through the <code>init</code> method.
|
||||||
*
|
*
|
||||||
* @return <code>Set<String></code> - Array of payment methods that are loaded.
|
* @return <code>Set<String></code> - Array of payment methods that are loaded.
|
||||||
* @see #setMethod(org.bukkit.plugin.PluginManager)
|
* @see #setMethod(org.bukkit.plugin.PluginManager)
|
||||||
*/
|
*/
|
||||||
public static Set<String> getDependencies() {
|
public static Set<String> getDependencies() {
|
||||||
return Dependencies;
|
return dependencies;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -101,18 +101,18 @@ public class Methods {
|
|||||||
* @return Method <em>or</em> Null
|
* @return Method <em>or</em> Null
|
||||||
*/
|
*/
|
||||||
public static Method createMethod(Plugin plugin) {
|
public static Method createMethod(Plugin plugin) {
|
||||||
for (Method method : Methods)
|
for (Method method : methods){
|
||||||
if (method.isCompatible(plugin)) {
|
if (method.isCompatible(plugin)) {
|
||||||
method.setPlugin(plugin);
|
method.setPlugin(plugin);
|
||||||
return method;
|
return method;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void addMethod(String name, Method method) {
|
private static void addMethod(String name, Method method) {
|
||||||
Dependencies.add(name);
|
dependencies.add(name);
|
||||||
Methods.add(method);
|
methods.add(method);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -144,9 +144,9 @@ public class Methods {
|
|||||||
|
|
||||||
int count = 0;
|
int count = 0;
|
||||||
boolean match = false;
|
boolean match = false;
|
||||||
Plugin plugin = null;
|
Plugin plugin;
|
||||||
|
|
||||||
for (String name : getDependencies()) {
|
for (String name : dependencies) {
|
||||||
if (hasMethod())
|
if (hasMethod())
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -161,7 +161,7 @@ public class Methods {
|
|||||||
if (preferred.isEmpty())
|
if (preferred.isEmpty())
|
||||||
Method = current;
|
Method = current;
|
||||||
else
|
else
|
||||||
Attachables.add(current);
|
attachables.add(current);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!preferred.isEmpty()) {
|
if (!preferred.isEmpty()) {
|
||||||
@ -169,7 +169,7 @@ public class Methods {
|
|||||||
if (hasMethod())
|
if (hasMethod())
|
||||||
match = true;
|
match = true;
|
||||||
else {
|
else {
|
||||||
for (Method attached : Attachables) {
|
for (Method attached : attachables) {
|
||||||
if (attached == null) continue;
|
if (attached == null) continue;
|
||||||
|
|
||||||
if (hasMethod()) {
|
if (hasMethod()) {
|
||||||
@ -201,7 +201,7 @@ public class Methods {
|
|||||||
* @return <code>boolean</code>
|
* @return <code>boolean</code>
|
||||||
*/
|
*/
|
||||||
public static boolean setPreferred(String check) {
|
public static boolean setPreferred(String check) {
|
||||||
if (getDependencies().contains(check)) {
|
if (dependencies.contains(check)) {
|
||||||
preferred = check;
|
preferred = check;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -57,10 +57,8 @@ public class iCo5 implements Method {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean createAccount(String name) {
|
public boolean createAccount(String name) {
|
||||||
if(hasAccount(name))
|
return !hasAccount(name) && iConomy.Accounts.create(name);
|
||||||
return false;
|
|
||||||
|
|
||||||
return com.iConomy.iConomy.Accounts.create(name);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean createAccount(String name, double balance) {
|
public boolean createAccount(String name, double balance) {
|
||||||
|
@ -56,17 +56,13 @@ public class iCo6 implements Method {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean createAccount(String name) {
|
public boolean createAccount(String name) {
|
||||||
if(hasAccount(name))
|
return !hasAccount(name) && (new Accounts()).create(name);
|
||||||
return false;
|
|
||||||
|
|
||||||
return (new Accounts()).create(name);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean createAccount(String name, double balance) {
|
public boolean createAccount(String name, double balance) {
|
||||||
if(hasAccount(name))
|
return !hasAccount(name) && (new Accounts()).create(name, balance);
|
||||||
return false;
|
|
||||||
|
|
||||||
return (new Accounts()).create(name, balance);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public MethodAccount getAccount(String name) {
|
public MethodAccount getAccount(String name) {
|
||||||
|
424
plugin.yml
424
plugin.yml
@ -2,7 +2,7 @@ name: ChestShop
|
|||||||
|
|
||||||
main: com.Acrobot.ChestShop.ChestShop
|
main: com.Acrobot.ChestShop.ChestShop
|
||||||
|
|
||||||
version: 3.31
|
version: 3.32
|
||||||
|
|
||||||
|
|
||||||
author: Acrobot
|
author: Acrobot
|
||||||
@ -21,6 +21,7 @@ commands:
|
|||||||
/<command> §7log§f §2(what's the item ID of §7LOG§2?)
|
/<command> §7log§f §2(what's the item ID of §7LOG§2?)
|
||||||
|
|
||||||
csVersion:
|
csVersion:
|
||||||
|
aliases: [chestshop]
|
||||||
description: Shows the ChestShop's version
|
description: Shows the ChestShop's version
|
||||||
usage: /<command>
|
usage: /<command>
|
||||||
|
|
||||||
@ -57,3 +58,424 @@ permissions:
|
|||||||
description: Allows user only to view other store chests, he can't destroy them or create an Admin Shop
|
description: Allows user only to view other store chests, he can't destroy them or create an Admin Shop
|
||||||
ChestShop.name.(some name):
|
ChestShop.name.(some name):
|
||||||
description: Gives you the power to do create shops for (some name), for example your town.
|
description: Gives you the power to do create shops for (some name), for example your town.
|
||||||
|
ChestShop.shop.create.food:
|
||||||
|
description: Allows to create a shop that sells food
|
||||||
|
children:
|
||||||
|
ChestShop.shop.create.297: true #Bread
|
||||||
|
ChestShop.shop.create.354: true #Cake
|
||||||
|
ChestShop.shop.create.357: true #Cookie
|
||||||
|
ChestShop.shop.create.349: true #RawFish
|
||||||
|
ChestShop.shop.create.350: true #CookedFish
|
||||||
|
ChestShop.shop.create.365: true #RawChicken
|
||||||
|
ChestShop.shop.create.366: true #CookedChicken
|
||||||
|
ChestShop.shop.create.363: true #RawSteak
|
||||||
|
ChestShop.shop.create.364: true #CookedSteak
|
||||||
|
ChestShop.shop.create.319: true #RawPork
|
||||||
|
ChestShop.shop.create.320: true #CookedPork
|
||||||
|
ChestShop.shop.create.282: true #MushroomSoup
|
||||||
|
ChestShop.shop.create.360: true #Melon
|
||||||
|
ChestShop.shop.create.260: true #Apple
|
||||||
|
ChestShop.shop.create.322: true #GoldApple
|
||||||
|
ChestShop.shop.create.297: true #Bread
|
||||||
|
ChestShop.shop.create.335: true #Milk
|
||||||
|
ChestShop.shop.create.diamondgrade:
|
||||||
|
description: Allows to create a shop that sells diamond gear
|
||||||
|
children:
|
||||||
|
ChestShop.shop.create.310: true #DiamondHelm
|
||||||
|
ChestShop.shop.create.311: true #DiamondChestplate
|
||||||
|
ChestShop.shop.create.312: true #DiamondLeggings
|
||||||
|
ChestShop.shop.create.313: true #DiamondBoots
|
||||||
|
ChestShop.shop.create.276: true #DiamondSword
|
||||||
|
ChestShop.shop.create.277: true #DiamondShovel
|
||||||
|
ChestShop.shop.create.278: true #DiamondPick
|
||||||
|
ChestShop.shop.create.279: true #DiamondAxe
|
||||||
|
ChestShop.shop.create.293: true #DiamondHoe
|
||||||
|
ChestShop.shop.create.irongrade:
|
||||||
|
description: Allows to create a shop that sells iron gear
|
||||||
|
children:
|
||||||
|
ChestShop.shop.create.306: true #IronHelm
|
||||||
|
ChestShop.shop.create.307: true #IronChestplate
|
||||||
|
ChestShop.shop.create.308: true #IronLeggings
|
||||||
|
ChestShop.shop.create.309: true #IronBoots
|
||||||
|
ChestShop.shop.create.267: true #IronSword
|
||||||
|
ChestShop.shop.create.256: true #IronShovel
|
||||||
|
ChestShop.shop.create.257: true #IronPick
|
||||||
|
ChestShop.shop.create.258: true #IronAxe
|
||||||
|
ChestShop.shop.create.292: true #IronHoe
|
||||||
|
ChestShop.shop.create.goldgrade:
|
||||||
|
description: Allows to create a shop that sells gold gear
|
||||||
|
children:
|
||||||
|
ChestShop.shop.create.314: true #GoldHelm
|
||||||
|
ChestShop.shop.create.315: true #GoldChestplate
|
||||||
|
ChestShop.shop.create.316: true #GoldLeggings
|
||||||
|
ChestShop.shop.create.317: true #GoldBoots
|
||||||
|
ChestShop.shop.create.283: true #GoldSword
|
||||||
|
ChestShop.shop.create.284: true #GoldShovel
|
||||||
|
ChestShop.shop.create.285: true #GoldPick
|
||||||
|
ChestShop.shop.create.286: true #GoldAxe
|
||||||
|
ChestShop.shop.create.294: true #GoldHoe
|
||||||
|
ChestShop.shop.create.stonegrade:
|
||||||
|
description: Allows to create a shop that sells stone tools and chain armor
|
||||||
|
children:
|
||||||
|
ChestShop.shop.create.302: true #ChainHelm
|
||||||
|
ChestShop.shop.create.303: true #ChainChestplate
|
||||||
|
ChestShop.shop.create.304: true #ChainLeggings
|
||||||
|
ChestShop.shop.create.305: true #ChainBoots
|
||||||
|
ChestShop.shop.create.272: true #StoneSword
|
||||||
|
ChestShop.shop.create.273: true #StoneShovel
|
||||||
|
ChestShop.shop.create.274: true #StonePick
|
||||||
|
ChestShop.shop.create.275: true #StoneAxe
|
||||||
|
ChestShop.shop.create.291: true #StoneHoe
|
||||||
|
ChestShop.shop.create.woodgrade:
|
||||||
|
description: Allows to create a shop that sells wood tools and leather armor
|
||||||
|
children:
|
||||||
|
ChestShop.shop.create.298: true #LeatherHelm
|
||||||
|
ChestShop.shop.create.299: true #LeatherChestplate
|
||||||
|
ChestShop.shop.create.300: true #LeatherLeggings
|
||||||
|
ChestShop.shop.create.301: true #LeatherBoots
|
||||||
|
ChestShop.shop.create.268: true #WoodSword
|
||||||
|
ChestShop.shop.create.269: true #WoodShovel
|
||||||
|
ChestShop.shop.create.270: true #WoodPick
|
||||||
|
ChestShop.shop.create.271: true #WoodAxe
|
||||||
|
ChestShop.shop.create.290: true #WoodHoe
|
||||||
|
ChestShop.shop.create.diamondarmor:
|
||||||
|
description: Allows to create a shop that sells diamond armor
|
||||||
|
children:
|
||||||
|
ChestShop.shop.create.310: true #DiamondHelm
|
||||||
|
ChestShop.shop.create.311: true #DiamondChestplate
|
||||||
|
ChestShop.shop.create.312: true #DiamondLeggings
|
||||||
|
ChestShop.shop.create.313: true #DiamondBoots
|
||||||
|
ChestShop.shop.create.diamondtools:
|
||||||
|
description: Allows to create a shop that sells diamond tools
|
||||||
|
children:
|
||||||
|
ChestShop.shop.create.276: true #DiamondSword
|
||||||
|
ChestShop.shop.create.277: true #DiamondShovel
|
||||||
|
ChestShop.shop.create.278: true #DiamondPick
|
||||||
|
ChestShop.shop.create.279: true #DiamondAxe
|
||||||
|
ChestShop.shop.create.293: true #DiamondHoe
|
||||||
|
ChestShop.shop.create.goldarmor:
|
||||||
|
description: Allows to create a shop that sells gold armor
|
||||||
|
children:
|
||||||
|
ChestShop.shop.create.314: true #GoldHelm
|
||||||
|
ChestShop.shop.create.315: true #GoldChestplate
|
||||||
|
ChestShop.shop.create.316: true #GoldLeggings
|
||||||
|
ChestShop.shop.create.317: true #GoldBoots
|
||||||
|
ChestShop.shop.create.goldtools:
|
||||||
|
description: Allows to create a shop that sells gold tools
|
||||||
|
children:
|
||||||
|
ChestShop.shop.create.283: true #GoldSword
|
||||||
|
ChestShop.shop.create.284: true #GoldShovel
|
||||||
|
ChestShop.shop.create.285: true #GoldPick
|
||||||
|
ChestShop.shop.create.286: true #GoldAxe
|
||||||
|
ChestShop.shop.create.294: true #GoldHoe
|
||||||
|
ChestShop.shop.create.ironarmor:
|
||||||
|
description: Allows to create a shop that sells iron armor
|
||||||
|
children:
|
||||||
|
ChestShop.shop.create.306: true #IronHelm
|
||||||
|
ChestShop.shop.create.307: true #IronChestplate
|
||||||
|
ChestShop.shop.create.308: true #IronLeggings
|
||||||
|
ChestShop.shop.create.309: true #IronBoots
|
||||||
|
ChestShop.shop.create.irontools:
|
||||||
|
description: Allows to create a shop that sells iron tools
|
||||||
|
children:
|
||||||
|
ChestShop.shop.create.267: true #IronSword
|
||||||
|
ChestShop.shop.create.256: true #IronShovel
|
||||||
|
ChestShop.shop.create.257: true #IronPick
|
||||||
|
ChestShop.shop.create.258: true #IronAxe
|
||||||
|
ChestShop.shop.create.292: true #IronHoe
|
||||||
|
ChestShop.shop.create.chainarmor:
|
||||||
|
description: Allows to create a shop that sells chain armor
|
||||||
|
children:
|
||||||
|
ChestShop.shop.create.302: true #ChainHelm
|
||||||
|
ChestShop.shop.create.303: true #ChainChestplate
|
||||||
|
ChestShop.shop.create.304: true #ChainLeggings
|
||||||
|
ChestShop.shop.create.305: true #ChainBoots
|
||||||
|
ChestShop.shop.create.stonetools:
|
||||||
|
description: Allows to create a shop that sells stone tools
|
||||||
|
children:
|
||||||
|
ChestShop.shop.create.272: true #StoneSword
|
||||||
|
ChestShop.shop.create.273: true #StoneShovel
|
||||||
|
ChestShop.shop.create.274: true #StonePick
|
||||||
|
ChestShop.shop.create.275: true #StoneAxe
|
||||||
|
ChestShop.shop.create.291: true #StoneHoe
|
||||||
|
ChestShop.shop.create.leatherarmor:
|
||||||
|
description: Allows to create a shop that sells leather armor
|
||||||
|
children:
|
||||||
|
ChestShop.shop.create.298: true #LeatherHelm
|
||||||
|
ChestShop.shop.create.299: true #LeatherChestplate
|
||||||
|
ChestShop.shop.create.300: true #LeatherLeggings
|
||||||
|
ChestShop.shop.create.301: true #LeatherBoots
|
||||||
|
ChestShop.shop.create.woodtools:
|
||||||
|
description: Allows to create a shop that sells wood tools
|
||||||
|
children:
|
||||||
|
ChestShop.shop.create.268: true #WoodSword
|
||||||
|
ChestShop.shop.create.269: true #WoodShovel
|
||||||
|
ChestShop.shop.create.270: true #WoodPick
|
||||||
|
ChestShop.shop.create.271: true #WoodAxe
|
||||||
|
ChestShop.shop.create.290: true #WoodHoe
|
||||||
|
ChestShop.shop.create.bows:
|
||||||
|
description: Allows to create a shop that sells bows & arrows
|
||||||
|
children:
|
||||||
|
ChestShop.shop.create.261: true #Bow
|
||||||
|
ChestShop.shop.create.262: true #Arrow
|
||||||
|
ChestShop.shop.create.misctools:
|
||||||
|
description: Allows to create a shop that sells misc tools
|
||||||
|
children:
|
||||||
|
ChestShop.shop.create.259: true #Flint&Steel
|
||||||
|
ChestShop.shop.create.325: true #Bucket
|
||||||
|
ChestShop.shop.create.326: true #WaterBucket
|
||||||
|
ChestShop.shop.create.327: true #LavaBucket
|
||||||
|
ChestShop.shop.create.345: true #Compass
|
||||||
|
ChestShop.shop.create.346: true #FishingRod
|
||||||
|
ChestShop.shop.create.347: true #Clock
|
||||||
|
ChestShop.shop.create.358: true #Map
|
||||||
|
ChestShop.shop.create.359: true #Sheers
|
||||||
|
ChestShop.shop.create.ore:
|
||||||
|
description: Allows to create a shop that sells ores
|
||||||
|
children:
|
||||||
|
ChestShop.shop.create.16: true #CoalOre
|
||||||
|
ChestShop.shop.create.15: true #IronOre
|
||||||
|
ChestShop.shop.create.21: true #LapisOre
|
||||||
|
ChestShop.shop.create.14: true #GoldOre
|
||||||
|
ChestShop.shop.create.56: true #DiamondOre
|
||||||
|
ChestShop.shop.create.74: true #RedstoneOre
|
||||||
|
ChestShop.shop.create.ingots:
|
||||||
|
description: Allows to create a shop that sells ingots
|
||||||
|
children:
|
||||||
|
ChestShop.shop.create.265: true #IronIngot
|
||||||
|
ChestShop.shop.create.266: true #GoldIngot
|
||||||
|
ChestShop.shop.create.264: true #Diamond
|
||||||
|
ChestShop.shop.create.stairs:
|
||||||
|
description: Allows to create a shop that sells stairs
|
||||||
|
children:
|
||||||
|
ChestShop.shop.create.53: true #WoodStairs
|
||||||
|
ChestShop.shop.create.67: true #CobbleStairs
|
||||||
|
ChestShop.shop.create.108: true #BrickStairs
|
||||||
|
ChestShop.shop.create.109: true #StoneStairs
|
||||||
|
ChestShop.shop.create.114: true #NetherBrickStairs
|
||||||
|
ChestShop.shop.create.monsterdrops:
|
||||||
|
description: Allows to create a shop that sells mob drops
|
||||||
|
children:
|
||||||
|
ChestShop.shop.create.289: true #Sulphur
|
||||||
|
ChestShop.shop.create.288: true #Feather
|
||||||
|
ChestShop.shop.create.287: true #String
|
||||||
|
ChestShop.shop.create.341: true #Slimeball
|
||||||
|
ChestShop.shop.create.344: true #Egg
|
||||||
|
ChestShop.shop.create.352: true #Bone
|
||||||
|
ChestShop.shop.create.334: true #Leather
|
||||||
|
ChestShop.shop.create.367: true #RottenFlesh
|
||||||
|
ChestShop.shop.create.368: true #EnderPearl
|
||||||
|
ChestShop.shop.create.375: true #SpiderEye
|
||||||
|
ChestShop.shop.create.netherdrops:
|
||||||
|
description: Allows to create a shop that sells nether drops
|
||||||
|
children:
|
||||||
|
ChestShop.shop.create.369: true #BlazeRod
|
||||||
|
ChestShop.shop.create.370: true #GhastTear
|
||||||
|
ChestShop.shop.create.371: true #GoldNugget
|
||||||
|
ChestShop.shop.create.378: true #MagmaCream
|
||||||
|
ChestShop.shop.create.plants:
|
||||||
|
description: Allows to create a shop that sells plants
|
||||||
|
children:
|
||||||
|
ChestShop.shop.create.6: true #Sapling
|
||||||
|
ChestShop.shop.create.18: true #LeafBlock
|
||||||
|
ChestShop.shop.create.31: true #TallGrass
|
||||||
|
ChestShop.shop.create.32: true #DeadShrub
|
||||||
|
ChestShop.shop.create.37: true #YellowFlower
|
||||||
|
ChestShop.shop.create.38: true #RedFlower
|
||||||
|
ChestShop.shop.create.39: true #BrownMushroom
|
||||||
|
ChestShop.shop.create.40: true #RedMushroom
|
||||||
|
ChestShop.shop.create.81: true #Cactus
|
||||||
|
ChestShop.shop.create.86: true #Pumpkin
|
||||||
|
ChestShop.shop.create.103: true #MelonBlock
|
||||||
|
ChestShop.shop.create.106: true #Vines
|
||||||
|
ChestShop.shop.create.111: true #LillyPad
|
||||||
|
ChestShop.shop.create.295: true #Seeds
|
||||||
|
ChestShop.shop.create.296: true #Wheat
|
||||||
|
ChestShop.shop.create.338: true #Reeds
|
||||||
|
ChestShop.shop.create.361: true #PumpkinSeeds
|
||||||
|
ChestShop.shop.create.362: true #MelonSeeds
|
||||||
|
ChestShop.shop.create.redstone:
|
||||||
|
descriptions: Allows to create a shop that sells redstone items
|
||||||
|
children:
|
||||||
|
ChestShop.shop.create.69: true #Lever
|
||||||
|
ChestShop.shop.create.77: true #Button
|
||||||
|
ChestShop.shop.create.76: true #TorchOn
|
||||||
|
ChestShop.shop.create.331: true #RedstoneDust
|
||||||
|
ChestShop.shop.create.356: true #RedstoneRepeater
|
||||||
|
ChestShop.shop.create.23: true #Dispenser
|
||||||
|
ChestShop.shop.create.29: true #StickyPiston
|
||||||
|
ChestShop.shop.create.33: true #Piston
|
||||||
|
ChestShop.shop.create.27: true #PowerRail
|
||||||
|
ChestShop.shop.create.28: true #DetectorRail
|
||||||
|
ChestShop.shop.create.66: true #MinecartRail
|
||||||
|
ChestShop.shop.create.70: true #StonePlate
|
||||||
|
ChestShop.shop.create.72: true #WoodPlate
|
||||||
|
ChestShop.shop.create.netherblocks:
|
||||||
|
descriptions: Allows to create a shop that sells netherblocks
|
||||||
|
children:
|
||||||
|
ChestShop.shop.create.87: true #NetherRack
|
||||||
|
ChestShop.shop.create.88: true #SoulSand
|
||||||
|
ChestShop.shop.create.89: true #GlowStone
|
||||||
|
ChestShop.shop.create.112: true #NetherBrick
|
||||||
|
ChestShop.shop.create.113: true #NetherFence
|
||||||
|
ChestShop.shop.create.114: true #NetherStairs
|
||||||
|
ChestShop.shop.create.misc:
|
||||||
|
descriptions: Allows to create a shop that sells misc items
|
||||||
|
children:
|
||||||
|
ChestShop.shop.create.263: true #Coal
|
||||||
|
ChestShop.shop.create.280: true #Stick
|
||||||
|
ChestShop.shop.create.281: true #Bowl
|
||||||
|
ChestShop.shop.create.318: true #Flint
|
||||||
|
ChestShop.shop.create.321: true #Painting
|
||||||
|
ChestShop.shop.create.323: true #Sign
|
||||||
|
ChestShop.shop.create.329: true #Saddle
|
||||||
|
ChestShop.shop.create.332: true #Snowballs
|
||||||
|
ChestShop.shop.create.336: true #Bricks
|
||||||
|
ChestShop.shop.create.337: true #ClayBalls
|
||||||
|
ChestShop.shop.create.339: true #Paper
|
||||||
|
ChestShop.shop.create.340: true #Book
|
||||||
|
ChestShop.shop.create.348: true #GlowstoneDust
|
||||||
|
ChestShop.shop.create.353: true #Sugar
|
||||||
|
ChestShop.shop.create.355: true #Bed
|
||||||
|
ChestShop.shop.create.381: true #EnderEye
|
||||||
|
ChestShop.shop.create.steps:
|
||||||
|
description: Allows to create a shop that sells steps
|
||||||
|
children:
|
||||||
|
ChestShop.shop.create.44: true #Step
|
||||||
|
ChestShop.shop.create.brewing:
|
||||||
|
description: Allows to create a shop that sells brewing materials
|
||||||
|
children:
|
||||||
|
ChestShop.shop.create.335: true #Milk
|
||||||
|
ChestShop.shop.create.372: true #NetherWart
|
||||||
|
ChestShop.shop.create.373: true #WaterBottle
|
||||||
|
ChestShop.shop.create.374: true #Bottle
|
||||||
|
ChestShop.shop.create.376: true #FermentedSpiderEye
|
||||||
|
ChestShop.shop.create.377: true #BlazePowder
|
||||||
|
ChestShop.shop.create.382: true #GlisteringMelon
|
||||||
|
ChestShop.shop.create.basic:
|
||||||
|
description: Allows to create a shop that sells basic blocks
|
||||||
|
children:
|
||||||
|
ChestShop.shop.create.1: true #Stone
|
||||||
|
ChestShop.shop.create.2: true #Grass
|
||||||
|
ChestShop.shop.create.3: true #Dirt
|
||||||
|
ChestShop.shop.create.4: true #Cobble
|
||||||
|
ChestShop.shop.create.5: true #Planks
|
||||||
|
ChestShop.shop.create.12: true #Sand
|
||||||
|
ChestShop.shop.create.13: true #Gravel
|
||||||
|
ChestShop.shop.create.17: true #Log
|
||||||
|
ChestShop.shop.create.20: true #Glass
|
||||||
|
ChestShop.shop.create.22: true #LapisBlock
|
||||||
|
ChestShop.shop.create.24: true #SandStone
|
||||||
|
ChestShop.shop.create.41: true #GoldBlock
|
||||||
|
ChestShop.shop.create.42: true #IronBlock
|
||||||
|
ChestShop.shop.create.45: true #BrickBlock
|
||||||
|
ChestShop.shop.create.46: true #TNT
|
||||||
|
ChestShop.shop.create.47: true #BookShelf
|
||||||
|
ChestShop.shop.create.48: true #MossyCobble
|
||||||
|
ChestShop.shop.create.49: true #Obsidian
|
||||||
|
ChestShop.shop.create.50: true #Torch
|
||||||
|
ChestShop.shop.create.54: true #Chest
|
||||||
|
ChestShop.shop.create.57: true #DiamondBlock
|
||||||
|
ChestShop.shop.create.65: true #Ladder
|
||||||
|
ChestShop.shop.create.79: true #Ice
|
||||||
|
ChestShop.shop.create.80: true #Snow
|
||||||
|
ChestShop.shop.create.82: true #ClayBlock
|
||||||
|
ChestShop.shop.create.91: true #JackoLantern
|
||||||
|
ChestShop.shop.create.98: true #StoneBrick
|
||||||
|
ChestShop.shop.create.99: true #MushroomBlock1
|
||||||
|
ChestShop.shop.create.100: true #MushroomBlock2
|
||||||
|
ChestShop.shop.create.101: true #IronBar
|
||||||
|
ChestShop.shop.create.102: true #GlassPane
|
||||||
|
ChestShop.shop.create.110: true #Mycelium
|
||||||
|
ChestShop.shop.create.121: true #EndStone
|
||||||
|
ChestShop.shop.create.122: true #DragonEgg
|
||||||
|
ChestShop.shop.create.doors:
|
||||||
|
descriptions: Allows to create a shop that sells doors
|
||||||
|
children:
|
||||||
|
ChestShop.shop.create.324: true #WoodDoor
|
||||||
|
ChestShop.shop.create.330: true #IronDoor
|
||||||
|
ChestShop.shop.create.96: true #TrapDoor
|
||||||
|
ChestShop.shop.create.music:
|
||||||
|
description: Allows to create a shop that sells music items
|
||||||
|
children:
|
||||||
|
ChestShop.shop.create.25: true #Noteblock
|
||||||
|
ChestShop.shop.create.84: true #Jukebox
|
||||||
|
ChestShop.shop.create.2256: true #Disk13
|
||||||
|
ChestShop.shop.create.2257: true #Diskcat
|
||||||
|
ChestShop.shop.create.2258: true #Diskblocks
|
||||||
|
ChestShop.shop.create.2259: true #Diskchirp
|
||||||
|
ChestShop.shop.create.2260: true #Diskfar
|
||||||
|
ChestShop.shop.create.2261: true #Diskmall
|
||||||
|
ChestShop.shop.create.2262: true #Diskmellohi
|
||||||
|
ChestShop.shop.create.2263: true #Diskstal
|
||||||
|
ChestShop.shop.create.2264: true #Diskstrad
|
||||||
|
ChestShop.shop.create.2265: true #Diskward
|
||||||
|
ChestShop.shop.create.2266: true #Disk11
|
||||||
|
ChestShop.shop.create.vehicles:
|
||||||
|
description: Allows to create a shop that sells vehicles
|
||||||
|
children:
|
||||||
|
ChestShop.shop.create.328: true #Minecart
|
||||||
|
ChestShop.shop.create.333: true #Boat
|
||||||
|
ChestShop.shop.create.342: true #StorageCart
|
||||||
|
ChestShop.shop.create.343: true #PoweredCart
|
||||||
|
ChestShop.shop.create.wool:
|
||||||
|
description: Allows to create a shop that sells wool and dye
|
||||||
|
children:
|
||||||
|
ChestShop.shop.create.35: true #Wool
|
||||||
|
ChestShop.shop.create.351: true #Dyes
|
||||||
|
ChestShop.shop.create.fence:
|
||||||
|
description: Allows to create a shop that sells fence
|
||||||
|
children:
|
||||||
|
ChestShop.shop.create.85: true #Fence
|
||||||
|
ChestShop.shop.create.101: true #IronBar
|
||||||
|
ChestShop.shop.create.107: true #FenceGate
|
||||||
|
ChestShop.shop.create.113: true #NetherFence
|
||||||
|
ChestShop.shop.create.bench:
|
||||||
|
description: Allows to create a shop that sells crafting blocks
|
||||||
|
children:
|
||||||
|
ChestShop.shop.create.58: true #WorkBench
|
||||||
|
ChestShop.shop.create.61: true #Furnace
|
||||||
|
ChestShop.shop.create.116: true #EnchantingTable
|
||||||
|
ChestShop.shop.create.379: true #BrewingStand
|
||||||
|
ChestShop.shop.create.380: true #Cauldron
|
||||||
|
ChestShop.shop.create.unobtainables:
|
||||||
|
description: Allows to create a shop that sells unobtainable items
|
||||||
|
children:
|
||||||
|
ChestShop.shop.create.7: true #Bedrock
|
||||||
|
ChestShop.shop.create.8: true #Water
|
||||||
|
ChestShop.shop.create.9: true #StillWater
|
||||||
|
ChestShop.shop.create.10: true #Lava
|
||||||
|
ChestShop.shop.create.11: true #StillLava
|
||||||
|
ChestShop.shop.create.19: true #Sponge
|
||||||
|
ChestShop.shop.create.26: true #PlacedBed
|
||||||
|
ChestShop.shop.create.30: true #Cobweb
|
||||||
|
ChestShop.shop.create.34: true #PistonHead
|
||||||
|
ChestShop.shop.create.36: true #MovingPiston
|
||||||
|
ChestShop.shop.create.43: true #Doublestep
|
||||||
|
ChestShop.shop.create.51: true #Fire
|
||||||
|
ChestShop.shop.create.52: true #MobSpawner
|
||||||
|
ChestShop.shop.create.55: true #PlacedRedstone
|
||||||
|
ChestShop.shop.create.59: true #GrowingCrop
|
||||||
|
ChestShop.shop.create.60: true #TilledDirt
|
||||||
|
ChestShop.shop.create.62: true #LitFurnace
|
||||||
|
ChestShop.shop.create.63: true #SignPost
|
||||||
|
ChestShop.shop.create.64: true #PlacedDoor
|
||||||
|
ChestShop.shop.create.68: true #WallSign
|
||||||
|
ChestShop.shop.create.71: true #PlacedIronDoor
|
||||||
|
ChestShop.shop.create.73: true #GlowingRedstoneOre
|
||||||
|
ChestShop.shop.create.75: true #RedstoneTorchOff
|
||||||
|
ChestShop.shop.create.78: true #FallenSnow
|
||||||
|
ChestShop.shop.create.83: true #PlacedReeds
|
||||||
|
ChestShop.shop.create.90: true #Portal
|
||||||
|
ChestShop.shop.create.92: true #PlacedCake
|
||||||
|
ChestShop.shop.create.93: true #PlacedRepeaterOff
|
||||||
|
ChestShop.shop.create.94: true #PlacedRepeaterOn
|
||||||
|
ChestShop.shop.create.95: true #LockedChest
|
||||||
|
ChestShop.shop.create.97: true #MonsterEgg
|
||||||
|
ChestShop.shop.create.104: true #PumpkinStalk
|
||||||
|
ChestShop.shop.create.105: true #MelonStalk
|
||||||
|
ChestShop.shop.create.115: true #GrowingNetherwart
|
||||||
|
ChestShop.shop.create.117: true #BrewingBlock
|
||||||
|
ChestShop.shop.create.118: true #PlacedCauldron
|
||||||
|
ChestShop.shop.create.119: true #EndPortal
|
||||||
|
ChestShop.shop.create.120: true #EndPortalBlock
|
Loading…
Reference in New Issue
Block a user