mirror of
https://github.com/ChestShop-authors/ChestShop-3.git
synced 2025-01-25 00:01:21 +01:00
Allow configuring what containers can be used for shops (Fixes #175)
This commit is contained in:
parent
b5f77d67b5
commit
fe85dafec5
@ -0,0 +1,22 @@
|
|||||||
|
package com.Acrobot.Breeze.Configuration.Annotations;
|
||||||
|
|
||||||
|
import com.Acrobot.Breeze.Configuration.ValueParser;
|
||||||
|
|
||||||
|
import java.lang.annotation.ElementType;
|
||||||
|
import java.lang.annotation.Retention;
|
||||||
|
import java.lang.annotation.RetentionPolicy;
|
||||||
|
import java.lang.annotation.Target;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Annotation for a parser
|
||||||
|
*/
|
||||||
|
@Retention(RetentionPolicy.RUNTIME)
|
||||||
|
@Target(ElementType.FIELD)
|
||||||
|
public @interface Parser {
|
||||||
|
/**
|
||||||
|
* This option's comment
|
||||||
|
*
|
||||||
|
* @return Comment
|
||||||
|
*/
|
||||||
|
public String value();
|
||||||
|
}
|
@ -7,8 +7,11 @@ import java.io.FileWriter;
|
|||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.lang.reflect.Modifier;
|
import java.lang.reflect.Modifier;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Scanner;
|
import java.util.Scanner;
|
||||||
|
|
||||||
|
import com.Acrobot.Breeze.Configuration.Annotations.Parser;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.configuration.file.FileConfiguration;
|
import org.bukkit.configuration.file.FileConfiguration;
|
||||||
import org.bukkit.configuration.file.YamlConfiguration;
|
import org.bukkit.configuration.file.YamlConfiguration;
|
||||||
@ -21,6 +24,9 @@ import com.Acrobot.Breeze.Configuration.Annotations.PrecededBySpace;
|
|||||||
* @author Acrobot
|
* @author Acrobot
|
||||||
*/
|
*/
|
||||||
public class Configuration {
|
public class Configuration {
|
||||||
|
private static Map<String, ValueParser> parsers = new HashMap<>();
|
||||||
|
public static ValueParser DEFAULT_PARSER = new ValueParser();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Loads a YAML-formatted file into a class and modifies the file if some of class's fields are missing
|
* Loads a YAML-formatted file into a class and modifies the file if some of class's fields are missing
|
||||||
*
|
*
|
||||||
@ -46,9 +52,9 @@ public class Configuration {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
if (config.isSet(path)) {
|
if (config.isSet(path)) {
|
||||||
field.set(null, ValueParser.parseToJava(config.get(path)));
|
field.set(null, getParser(field).parseToJava(config.get(path)));
|
||||||
} else if (config.isSet(path.toLowerCase())) {
|
} else if (config.isSet(path.toLowerCase())) {
|
||||||
field.set(null, ValueParser.parseToJava(config.get(path.toLowerCase())));
|
field.set(null, getParser(field).parseToJava(config.get(path.toLowerCase())));
|
||||||
} else {
|
} else {
|
||||||
if (field.isAnnotationPresent(PrecededBySpace.class)) {
|
if (field.isAnnotationPresent(PrecededBySpace.class)) {
|
||||||
writer.newLine();
|
writer.newLine();
|
||||||
@ -99,7 +105,7 @@ public class Configuration {
|
|||||||
* @return Parsed output
|
* @return Parsed output
|
||||||
*/
|
*/
|
||||||
public static String parseToConfig(Object value) {
|
public static String parseToConfig(Object value) {
|
||||||
return ValueParser.parseToYAML(value);
|
return DEFAULT_PARSER.parseToYAML(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -111,4 +117,38 @@ public class Configuration {
|
|||||||
public static String getColoured(String string) {
|
public static String getColoured(String string) {
|
||||||
return ChatColor.translateAlternateColorCodes('&', string);
|
return ChatColor.translateAlternateColorCodes('&', string);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register a parser
|
||||||
|
* @param name The name of the parser
|
||||||
|
* @param valueParser The parser itself
|
||||||
|
*/
|
||||||
|
public static void registerParser(String name, ValueParser valueParser) {
|
||||||
|
parsers.put(name.toLowerCase(), valueParser);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a registered parser
|
||||||
|
* @param name The name of the parser
|
||||||
|
* @return The parser or null if it doesn't exist
|
||||||
|
*/
|
||||||
|
public static ValueParser getParser(String name) {
|
||||||
|
return parsers.get(name.toLowerCase());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the parser that should be used for a field
|
||||||
|
* @param field The field
|
||||||
|
* @return The registered parser if the field has a Parser annotation or the default one
|
||||||
|
*/
|
||||||
|
public static ValueParser getParser(Field field) {
|
||||||
|
ValueParser parser = null;
|
||||||
|
if (field.isAnnotationPresent(Parser.class)) {
|
||||||
|
parser = Configuration.getParser(field.getAnnotation(Parser.class).value());
|
||||||
|
}
|
||||||
|
if (parser == null) {
|
||||||
|
parser = Configuration.DEFAULT_PARSER;
|
||||||
|
}
|
||||||
|
return parser;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package com.Acrobot.Breeze.Configuration;
|
package com.Acrobot.Breeze.Configuration;
|
||||||
|
|
||||||
import com.Acrobot.Breeze.Configuration.Annotations.ConfigurationComment;
|
import com.Acrobot.Breeze.Configuration.Annotations.ConfigurationComment;
|
||||||
|
import com.Acrobot.Breeze.Configuration.Annotations.Parser;
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
|
|
||||||
@ -21,8 +22,10 @@ public class FieldParser {
|
|||||||
builder.append('#').append(field.getAnnotation(ConfigurationComment.class).value()).append('\n');
|
builder.append('#').append(field.getAnnotation(ConfigurationComment.class).value()).append('\n');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ValueParser parser = Configuration.getParser(field);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
builder.append(field.getName()).append(": ").append(ValueParser.parseToYAML(field.get(null)));
|
builder.append(field.getName()).append(": ").append(parser.parseToYAML(field.get(null)));
|
||||||
} catch (IllegalAccessException e) {
|
} catch (IllegalAccessException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
return "";
|
return "";
|
||||||
|
@ -2,6 +2,7 @@ package com.Acrobot.Breeze.Configuration;
|
|||||||
|
|
||||||
import org.bukkit.configuration.ConfigurationSection;
|
import org.bukkit.configuration.ConfigurationSection;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@ -16,12 +17,12 @@ public class ValueParser {
|
|||||||
* @param object Object to parse
|
* @param object Object to parse
|
||||||
* @return YAML string
|
* @return YAML string
|
||||||
*/
|
*/
|
||||||
public static String parseToYAML(Object object) {
|
public String parseToYAML(Object object) {
|
||||||
if (object instanceof Number || object instanceof Boolean) {
|
if (object instanceof Number || object instanceof Boolean) {
|
||||||
return String.valueOf(object);
|
return String.valueOf(object);
|
||||||
} else if (object instanceof List) {
|
} else if (object instanceof Collection) {
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
for (Object o : (List) object) {
|
for (Object o : (Collection) object) {
|
||||||
sb.append("\n- ").append(parseToYAML(o));
|
sb.append("\n- ").append(parseToYAML(o));
|
||||||
}
|
}
|
||||||
return sb.toString();
|
return sb.toString();
|
||||||
@ -36,7 +37,7 @@ public class ValueParser {
|
|||||||
* @param object Object to parse
|
* @param object Object to parse
|
||||||
* @return Java-compatible object
|
* @return Java-compatible object
|
||||||
*/
|
*/
|
||||||
public static Object parseToJava(Object object) {
|
public Object parseToJava(Object object) {
|
||||||
if (object instanceof ConfigurationSection) {
|
if (object instanceof ConfigurationSection) {
|
||||||
Map<String, List<String>> map = new HashMap<String, List<String>>();
|
Map<String, List<String>> map = new HashMap<String, List<String>>();
|
||||||
|
|
||||||
|
@ -1,15 +1,57 @@
|
|||||||
package com.Acrobot.ChestShop.Configuration;
|
package com.Acrobot.ChestShop.Configuration;
|
||||||
|
|
||||||
import com.Acrobot.Breeze.Configuration.Annotations.ConfigurationComment;
|
import com.Acrobot.Breeze.Configuration.Annotations.ConfigurationComment;
|
||||||
|
import com.Acrobot.Breeze.Configuration.Annotations.Parser;
|
||||||
import com.Acrobot.Breeze.Configuration.Annotations.PrecededBySpace;
|
import com.Acrobot.Breeze.Configuration.Annotations.PrecededBySpace;
|
||||||
|
import com.Acrobot.Breeze.Configuration.Configuration;
|
||||||
|
import com.Acrobot.Breeze.Configuration.ValueParser;
|
||||||
|
import com.Acrobot.ChestShop.ChestShop;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.EnumSet;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.LinkedHashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.logging.Level;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Acrobot
|
* @author Acrobot
|
||||||
*/
|
*/
|
||||||
public class Properties {
|
public class Properties {
|
||||||
|
static {
|
||||||
|
Configuration.registerParser("StringSet", new ValueParser(){
|
||||||
|
public Object parseToJava(Object object) {
|
||||||
|
if (object instanceof Collection) {
|
||||||
|
return new LinkedHashSet<>((Collection<String>) object);
|
||||||
|
}
|
||||||
|
return object;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Configuration.registerParser("MaterialSet", new ValueParser(){
|
||||||
|
public Object parseToJava(Object object) {
|
||||||
|
if (object instanceof Collection) {
|
||||||
|
EnumSet<Material> set = EnumSet.noneOf(Material.class);
|
||||||
|
for (Object o : (Collection) object) {
|
||||||
|
if (o instanceof Material) {
|
||||||
|
set.add((Material) o);
|
||||||
|
} else if (o instanceof String) {
|
||||||
|
try {
|
||||||
|
set.add(Material.getMaterial(((String) o).toUpperCase()));
|
||||||
|
} catch (IllegalArgumentException e) {
|
||||||
|
ChestShop.getBukkitLogger().log(Level.WARNING, o + " is not a valid Material name in the config!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return set;
|
||||||
|
}
|
||||||
|
return object;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
@ConfigurationComment("Do you want to turn off the automatic updates of ChestShop?")
|
@ConfigurationComment("Do you want to turn off the automatic updates of ChestShop?")
|
||||||
public static boolean TURN_OFF_UPDATES = false;
|
public static boolean TURN_OFF_UPDATES = false;
|
||||||
|
|
||||||
@ -17,6 +59,14 @@ public class Properties {
|
|||||||
@ConfigurationComment("How large should the internal caches be?")
|
@ConfigurationComment("How large should the internal caches be?")
|
||||||
public static int CACHE_SIZE = 1000;
|
public static int CACHE_SIZE = 1000;
|
||||||
|
|
||||||
|
@PrecededBySpace
|
||||||
|
@ConfigurationComment("What containers are allowed to hold a shop? (Only blocks with inventories work!)")
|
||||||
|
@Parser("MaterialSet")
|
||||||
|
public static Set<Material> SHOP_CONTAINERS = EnumSet.of(
|
||||||
|
Material.CHEST,
|
||||||
|
Material.TRAPPED_CHEST
|
||||||
|
);
|
||||||
|
|
||||||
@PrecededBySpace
|
@PrecededBySpace
|
||||||
@ConfigurationComment("(In 1/1000th of a second) How often can a player use the shop sign?")
|
@ConfigurationComment("(In 1/1000th of a second) How often can a player use the shop sign?")
|
||||||
public static int SHOP_INTERACTION_INTERVAL = 250;
|
public static int SHOP_INTERACTION_INTERVAL = 250;
|
||||||
@ -47,7 +97,8 @@ public class Properties {
|
|||||||
public static boolean REMOVE_EMPTY_CHESTS = false;
|
public static boolean REMOVE_EMPTY_CHESTS = false;
|
||||||
|
|
||||||
@ConfigurationComment("A list of worlds in which to remove empty shops with the previous config. Case sensitive. An empty list means all worlds.")
|
@ConfigurationComment("A list of worlds in which to remove empty shops with the previous config. Case sensitive. An empty list means all worlds.")
|
||||||
public static List<String> REMOVE_EMPTY_WORLDS = Arrays.asList("world1", "world2");
|
@Parser("StringSet")
|
||||||
|
public static Set<String> REMOVE_EMPTY_WORLDS = new LinkedHashSet<>(Arrays.asList("world1", "world2"));
|
||||||
|
|
||||||
@PrecededBySpace
|
@PrecededBySpace
|
||||||
@ConfigurationComment("First line of your Admin Shop's sign should look like this:")
|
@ConfigurationComment("First line of your Admin Shop's sign should look like this:")
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package com.Acrobot.ChestShop.Events;
|
package com.Acrobot.ChestShop.Events;
|
||||||
|
|
||||||
import org.bukkit.block.Chest;
|
import org.bukkit.block.Chest;
|
||||||
|
import org.bukkit.block.Container;
|
||||||
import org.bukkit.block.Sign;
|
import org.bukkit.block.Sign;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.Event;
|
import org.bukkit.event.Event;
|
||||||
@ -20,12 +21,17 @@ public class ShopCreatedEvent extends Event {
|
|||||||
|
|
||||||
private final Sign sign;
|
private final Sign sign;
|
||||||
private final String[] signLines;
|
private final String[] signLines;
|
||||||
@Nullable private final Chest chest;
|
@Nullable private final Container container;
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
public ShopCreatedEvent(Player creator, Sign sign, @Nullable Chest chest, String[] signLines) {
|
public ShopCreatedEvent(Player creator, Sign sign, @Nullable Chest chest, String[] signLines) {
|
||||||
|
this(creator, sign, (Container) chest, signLines);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ShopCreatedEvent(Player creator, Sign sign, @Nullable Container container, String[] signLines) {
|
||||||
this.creator = creator;
|
this.creator = creator;
|
||||||
this.sign = sign;
|
this.sign = sign;
|
||||||
this.chest = chest;
|
this.container = container;
|
||||||
this.signLines = signLines.clone();
|
this.signLines = signLines.clone();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -67,12 +73,20 @@ public class ShopCreatedEvent extends Event {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the shop's chest (if applicable)
|
* Returns the shop's container (if applicable)
|
||||||
*
|
*
|
||||||
* @return Shop's chest
|
* @return Shop's container
|
||||||
*/
|
*/
|
||||||
|
@Nullable public Container getContainer() {
|
||||||
|
return container;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated Use {@link #getContainer()}
|
||||||
|
*/
|
||||||
|
@Deprecated
|
||||||
@Nullable public Chest getChest() {
|
@Nullable public Chest getChest() {
|
||||||
return chest;
|
return container instanceof Chest ? (Chest) container : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public HandlerList getHandlers() {
|
public HandlerList getHandlers() {
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package com.Acrobot.ChestShop.Events;
|
package com.Acrobot.ChestShop.Events;
|
||||||
|
|
||||||
import org.bukkit.block.Chest;
|
import org.bukkit.block.Chest;
|
||||||
|
import org.bukkit.block.Container;
|
||||||
import org.bukkit.block.Sign;
|
import org.bukkit.block.Sign;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.Event;
|
import org.bukkit.event.Event;
|
||||||
@ -19,12 +20,17 @@ public class ShopDestroyedEvent extends Event {
|
|||||||
private final Player destroyer;
|
private final Player destroyer;
|
||||||
|
|
||||||
private final Sign sign;
|
private final Sign sign;
|
||||||
private final Chest chest;
|
private final Container container;
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
public ShopDestroyedEvent(@Nullable Player destroyer, Sign sign, @Nullable Chest chest) {
|
public ShopDestroyedEvent(@Nullable Player destroyer, Sign sign, @Nullable Chest chest) {
|
||||||
|
this(destroyer, sign, (Container) chest);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ShopDestroyedEvent(@Nullable Player destroyer, Sign sign, @Nullable Container container) {
|
||||||
this.destroyer = destroyer;
|
this.destroyer = destroyer;
|
||||||
this.sign = sign;
|
this.sign = sign;
|
||||||
this.chest = chest;
|
this.container = container;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -37,8 +43,16 @@ public class ShopDestroyedEvent extends Event {
|
|||||||
/**
|
/**
|
||||||
* @return Shop's chest
|
* @return Shop's chest
|
||||||
*/
|
*/
|
||||||
|
@Nullable public Container getContainer() {
|
||||||
|
return container;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated Use {@link #getContainer()}
|
||||||
|
*/
|
||||||
|
@Deprecated
|
||||||
@Nullable public Chest getChest() {
|
@Nullable public Chest getChest() {
|
||||||
return chest;
|
return container instanceof Chest ? (Chest) container : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package com.Acrobot.ChestShop.Listeners.Block;
|
package com.Acrobot.ChestShop.Listeners.Block;
|
||||||
|
|
||||||
import com.Acrobot.Breeze.Utils.BlockUtil;
|
|
||||||
import com.Acrobot.ChestShop.Configuration.Messages;
|
import com.Acrobot.ChestShop.Configuration.Messages;
|
||||||
import com.Acrobot.ChestShop.Permission;
|
import com.Acrobot.ChestShop.Permission;
|
||||||
import com.Acrobot.ChestShop.Security;
|
import com.Acrobot.ChestShop.Security;
|
||||||
@ -21,10 +20,10 @@ public class BlockPlace implements Listener {
|
|||||||
private static BlockFace[] SEARCH_DIRECTIONS = {BlockFace.EAST, BlockFace.WEST, BlockFace.NORTH, BlockFace.SOUTH, BlockFace.UP, BlockFace.DOWN};
|
private static BlockFace[] SEARCH_DIRECTIONS = {BlockFace.EAST, BlockFace.WEST, BlockFace.NORTH, BlockFace.SOUTH, BlockFace.UP, BlockFace.DOWN};
|
||||||
|
|
||||||
@EventHandler(ignoreCancelled = true)
|
@EventHandler(ignoreCancelled = true)
|
||||||
public static void onChestPlace(BlockPlaceEvent event) {
|
public static void onContainerPlace(BlockPlaceEvent event) {
|
||||||
Block placed = event.getBlockPlaced();
|
Block placed = event.getBlockPlaced();
|
||||||
|
|
||||||
if (!BlockUtil.isChest(placed)) {
|
if (!uBlock.couldBeShopContainer(placed)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -70,7 +69,7 @@ public class BlockPlace implements Listener {
|
|||||||
for (BlockFace face : SEARCH_DIRECTIONS) {
|
for (BlockFace face : SEARCH_DIRECTIONS) {
|
||||||
Block relative = placed.getRelative(face);
|
Block relative = placed.getRelative(face);
|
||||||
|
|
||||||
if (!BlockUtil.isChest(relative)) {
|
if (!uBlock.couldBeShopContainer(relative)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
package com.Acrobot.ChestShop.Listeners.Block.Break;
|
package com.Acrobot.ChestShop.Listeners.Block.Break;
|
||||||
|
|
||||||
import com.Acrobot.Breeze.Utils.BlockUtil;
|
|
||||||
import com.Acrobot.ChestShop.Configuration.Properties;
|
import com.Acrobot.ChestShop.Configuration.Properties;
|
||||||
import com.Acrobot.ChestShop.Listeners.Player.PlayerInteract;
|
import com.Acrobot.ChestShop.Listeners.Player.PlayerInteract;
|
||||||
import com.Acrobot.ChestShop.Plugins.ChestShop;
|
import com.Acrobot.ChestShop.Plugins.ChestShop;
|
||||||
import com.Acrobot.ChestShop.Signs.ChestShopSign;
|
import com.Acrobot.ChestShop.Signs.ChestShopSign;
|
||||||
|
import com.Acrobot.ChestShop.Utils.uBlock;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
@ -18,7 +18,7 @@ import org.bukkit.event.entity.EntityExplodeEvent;
|
|||||||
public class ChestBreak implements Listener {
|
public class ChestBreak implements Listener {
|
||||||
@EventHandler(ignoreCancelled = true)
|
@EventHandler(ignoreCancelled = true)
|
||||||
public static void onChestBreak(BlockBreakEvent event) {
|
public static void onChestBreak(BlockBreakEvent event) {
|
||||||
if (!canChestBeBroken(event.getBlock(), event.getPlayer())) {
|
if (!canBeBroken(event.getBlock(), event.getPlayer())) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -30,18 +30,18 @@ public class ChestBreak implements Listener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (Block block : event.blockList()) {
|
for (Block block : event.blockList()) {
|
||||||
if (!canChestBeBroken(block, null)) {
|
if (!canBeBroken(block, null)) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean canChestBeBroken(Block chest, Player breaker) {
|
private static boolean canBeBroken(Block block, Player breaker) {
|
||||||
if (!BlockUtil.isChest(chest) || !Properties.USE_BUILT_IN_PROTECTION || !ChestShopSign.isShopChest(chest)) {
|
if (!uBlock.couldBeShopContainer(block) || !Properties.USE_BUILT_IN_PROTECTION || !ChestShopSign.isShopChest(block)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return breaker != null && (PlayerInteract.canOpenOtherShops(breaker) || ChestShop.canAccess(breaker, chest));
|
return breaker != null && (PlayerInteract.canOpenOtherShops(breaker) || ChestShop.canAccess(breaker, block));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -10,7 +10,7 @@ import com.Acrobot.ChestShop.Utils.uBlock;
|
|||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.block.BlockFace;
|
import org.bukkit.block.BlockFace;
|
||||||
import org.bukkit.block.Chest;
|
import org.bukkit.block.Container;
|
||||||
import org.bukkit.block.Sign;
|
import org.bukkit.block.Sign;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.Event;
|
import org.bukkit.event.Event;
|
||||||
@ -159,13 +159,13 @@ public class SignBreak implements Listener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static void sendShopDestroyedEvent(Sign sign, Player player) {
|
private static void sendShopDestroyedEvent(Sign sign, Player player) {
|
||||||
Chest connectedChest = null;
|
Container connectedContainer = null;
|
||||||
|
|
||||||
if (!ChestShopSign.isAdminShop(sign)) {
|
if (!ChestShopSign.isAdminShop(sign)) {
|
||||||
connectedChest = uBlock.findConnectedChest(sign.getBlock());
|
connectedContainer = uBlock.findConnectedContainer(sign.getBlock());
|
||||||
}
|
}
|
||||||
|
|
||||||
Event event = new ShopDestroyedEvent(player, sign, connectedChest);
|
Event event = new ShopDestroyedEvent(player, sign, connectedContainer);
|
||||||
ChestShop.callEvent(event);
|
ChestShop.callEvent(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -42,7 +42,7 @@ public class SignCreate implements Listener {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
ShopCreatedEvent postEvent = new ShopCreatedEvent(preEvent.getPlayer(), preEvent.getSign(), uBlock.findConnectedChest(preEvent.getSign()), preEvent.getSignLines());
|
ShopCreatedEvent postEvent = new ShopCreatedEvent(preEvent.getPlayer(), preEvent.getSign(), uBlock.findConnectedContainer(preEvent.getSign()), preEvent.getSignLines());
|
||||||
ChestShop.callEvent(postEvent);
|
ChestShop.callEvent(postEvent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -80,7 +80,7 @@ public class VaultListener implements Listener {
|
|||||||
|
|
||||||
double balance = 0;
|
double balance = 0;
|
||||||
//String lastSeen = NameManager.getLastSeenName(event.getAccount());
|
//String lastSeen = NameManager.getLastSeenName(event.getAccount());
|
||||||
OfflinePlayer lastSeen = Bukkit.getOfflinePlayer(event.getAccount());
|
OfflinePlayer lastSeen = Bukkit.getOfflinePlayer(event.getAccount());
|
||||||
|
|
||||||
if (lastSeen != null) {
|
if (lastSeen != null) {
|
||||||
balance = provider.getBalance(lastSeen, event.getWorld().getName());
|
balance = provider.getBalance(lastSeen, event.getWorld().getName());
|
||||||
@ -101,7 +101,7 @@ public class VaultListener implements Listener {
|
|||||||
|
|
||||||
World world = event.getWorld();
|
World world = event.getWorld();
|
||||||
//String lastSeen = NameManager.getLastSeenName(event.getAccount());
|
//String lastSeen = NameManager.getLastSeenName(event.getAccount());
|
||||||
OfflinePlayer lastSeen = Bukkit.getOfflinePlayer(event.getAccount());
|
OfflinePlayer lastSeen = Bukkit.getOfflinePlayer(event.getAccount());
|
||||||
|
|
||||||
if (lastSeen != null) {
|
if (lastSeen != null) {
|
||||||
if (provider.has(lastSeen, world.getName(), event.getDoubleAmount())) {
|
if (provider.has(lastSeen, world.getName(), event.getDoubleAmount())) {
|
||||||
@ -120,7 +120,7 @@ public class VaultListener implements Listener {
|
|||||||
|
|
||||||
World world = event.getWorld();
|
World world = event.getWorld();
|
||||||
//String lastSeen = NameManager.getLastSeenName(event.getAccount());
|
//String lastSeen = NameManager.getLastSeenName(event.getAccount());
|
||||||
OfflinePlayer lastSeen = Bukkit.getOfflinePlayer(event.getAccount());
|
OfflinePlayer lastSeen = Bukkit.getOfflinePlayer(event.getAccount());
|
||||||
|
|
||||||
event.hasAccount(lastSeen != null && provider.hasAccount(lastSeen, world.getName()));
|
event.hasAccount(lastSeen != null && provider.hasAccount(lastSeen, world.getName()));
|
||||||
}
|
}
|
||||||
@ -143,7 +143,7 @@ public class VaultListener implements Listener {
|
|||||||
|
|
||||||
World world = event.getWorld();
|
World world = event.getWorld();
|
||||||
//String lastSeen = NameManager.getLastSeenName(event.getTarget());
|
//String lastSeen = NameManager.getLastSeenName(event.getTarget());
|
||||||
OfflinePlayer lastSeen = Bukkit.getOfflinePlayer(event.getTarget());
|
OfflinePlayer lastSeen = Bukkit.getOfflinePlayer(event.getTarget());
|
||||||
|
|
||||||
if (lastSeen != null) {
|
if (lastSeen != null) {
|
||||||
EconomyResponse response = provider.depositPlayer(lastSeen, world.getName(), event.getDoubleAmount());
|
EconomyResponse response = provider.depositPlayer(lastSeen, world.getName(), event.getDoubleAmount());
|
||||||
@ -159,7 +159,7 @@ public class VaultListener implements Listener {
|
|||||||
|
|
||||||
World world = event.getWorld();
|
World world = event.getWorld();
|
||||||
//String lastSeen = NameManager.getLastSeenName(event.getTarget());
|
//String lastSeen = NameManager.getLastSeenName(event.getTarget());
|
||||||
OfflinePlayer lastSeen = Bukkit.getOfflinePlayer(event.getTarget());
|
OfflinePlayer lastSeen = Bukkit.getOfflinePlayer(event.getTarget());
|
||||||
|
|
||||||
if (lastSeen != null) {
|
if (lastSeen != null) {
|
||||||
EconomyResponse response = provider.withdrawPlayer(lastSeen, world.getName(), event.getDoubleAmount());
|
EconomyResponse response = provider.withdrawPlayer(lastSeen, world.getName(), event.getDoubleAmount());
|
||||||
@ -193,7 +193,7 @@ public class VaultListener implements Listener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//String lastSeen = NameManager.getLastSeenName(event.getAccount());
|
//String lastSeen = NameManager.getLastSeenName(event.getAccount());
|
||||||
OfflinePlayer lastSeen = Bukkit.getOfflinePlayer(event.getAccount());
|
OfflinePlayer lastSeen = Bukkit.getOfflinePlayer(event.getAccount());
|
||||||
String world = event.getWorld().getName();
|
String world = event.getWorld().getName();
|
||||||
|
|
||||||
if (lastSeen == null) {
|
if (lastSeen == null) {
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package com.Acrobot.ChestShop.Listeners.Item;
|
package com.Acrobot.ChestShop.Listeners.Item;
|
||||||
|
|
||||||
import com.Acrobot.Breeze.Utils.BlockUtil;
|
|
||||||
import com.Acrobot.ChestShop.Signs.ChestShopSign;
|
import com.Acrobot.ChestShop.Signs.ChestShopSign;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.EventPriority;
|
import org.bukkit.event.EventPriority;
|
||||||
@ -14,11 +13,11 @@ public class ItemMoveListener implements Listener {
|
|||||||
|
|
||||||
@EventHandler(ignoreCancelled = true, priority = EventPriority.HIGHEST)
|
@EventHandler(ignoreCancelled = true, priority = EventPriority.HIGHEST)
|
||||||
public static void onItemMove(InventoryMoveItemEvent event) {
|
public static void onItemMove(InventoryMoveItemEvent event) {
|
||||||
if (event.getSource() == null || !BlockUtil.isChest(event.getSource().getHolder())) {
|
if (event.getSource() == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!ChestShopSign.isShopChest(event.getSource().getHolder())) {
|
if (!ChestShopSign.isShopBlock(event.getSource().getHolder())) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -19,7 +19,7 @@ import org.bukkit.ChatColor;
|
|||||||
import org.bukkit.GameMode;
|
import org.bukkit.GameMode;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.block.Chest;
|
import org.bukkit.block.Container;
|
||||||
import org.bukkit.block.Sign;
|
import org.bukkit.block.Sign;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
@ -31,7 +31,6 @@ import org.bukkit.event.player.PlayerInteractEvent;
|
|||||||
import org.bukkit.inventory.Inventory;
|
import org.bukkit.inventory.Inventory;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
import static com.Acrobot.Breeze.Utils.BlockUtil.isChest;
|
|
||||||
import static com.Acrobot.Breeze.Utils.BlockUtil.isSign;
|
import static com.Acrobot.Breeze.Utils.BlockUtil.isSign;
|
||||||
import static com.Acrobot.ChestShop.Events.TransactionEvent.TransactionType;
|
import static com.Acrobot.ChestShop.Events.TransactionEvent.TransactionType;
|
||||||
import static com.Acrobot.ChestShop.Events.TransactionEvent.TransactionType.BUY;
|
import static com.Acrobot.ChestShop.Events.TransactionEvent.TransactionType.BUY;
|
||||||
@ -54,7 +53,7 @@ public class PlayerInteract implements Listener {
|
|||||||
Action action = event.getAction();
|
Action action = event.getAction();
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
|
|
||||||
if (Properties.USE_BUILT_IN_PROTECTION && isChest(block)) {
|
if (Properties.USE_BUILT_IN_PROTECTION && isShopBlock(block)) {
|
||||||
if (Properties.TURN_OFF_DEFAULT_PROTECTION_WHEN_PROTECTED_EXTERNALLY) {
|
if (Properties.TURN_OFF_DEFAULT_PROTECTION_WHEN_PROTECTED_EXTERNALLY) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -161,8 +160,8 @@ public class PlayerInteract implements Listener {
|
|||||||
Action buy = Properties.REVERSE_BUTTONS ? LEFT_CLICK_BLOCK : RIGHT_CLICK_BLOCK;
|
Action buy = Properties.REVERSE_BUTTONS ? LEFT_CLICK_BLOCK : RIGHT_CLICK_BLOCK;
|
||||||
double price = (action == buy ? PriceUtil.getBuyPrice(prices) : PriceUtil.getSellPrice(prices));
|
double price = (action == buy ? PriceUtil.getBuyPrice(prices) : PriceUtil.getSellPrice(prices));
|
||||||
|
|
||||||
Chest chest = uBlock.findConnectedChest(sign);
|
Container shopBlock = uBlock.findConnectedContainer(sign);
|
||||||
Inventory ownerInventory = (adminShop ? new AdminInventory() : chest != null ? chest.getInventory() : null);
|
Inventory ownerInventory = (adminShop ? new AdminInventory() : shopBlock != null ? shopBlock.getInventory() : null);
|
||||||
|
|
||||||
ItemStack item = MaterialUtil.getItem(material);
|
ItemStack item = MaterialUtil.getItem(material);
|
||||||
if (item == null || !NumberUtil.isInteger(quantity)) {
|
if (item == null || !NumberUtil.isInteger(quantity)) {
|
||||||
@ -218,9 +217,9 @@ public class PlayerInteract implements Listener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static void showChestGUI(Player player, Block signBlock) {
|
private static void showChestGUI(Player player, Block signBlock) {
|
||||||
Chest chest = uBlock.findConnectedChest(signBlock);
|
Container container = uBlock.findConnectedContainer(signBlock);
|
||||||
|
|
||||||
if (chest == null) {
|
if (container == null) {
|
||||||
player.sendMessage(Messages.prefix(Messages.NO_CHEST_DETECTED));
|
player.sendMessage(Messages.prefix(Messages.NO_CHEST_DETECTED));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -229,6 +228,6 @@ public class PlayerInteract implements Listener {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
BlockUtil.openBlockGUI(chest, player);
|
BlockUtil.openBlockGUI(container, player);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package com.Acrobot.ChestShop.Listeners.PostShopCreation;
|
package com.Acrobot.ChestShop.Listeners.PostShopCreation;
|
||||||
|
|
||||||
import com.Acrobot.Breeze.Utils.BlockUtil;
|
|
||||||
import com.Acrobot.ChestShop.Configuration.Properties;
|
import com.Acrobot.ChestShop.Configuration.Properties;
|
||||||
import com.Acrobot.ChestShop.Events.ShopCreatedEvent;
|
import com.Acrobot.ChestShop.Events.ShopCreatedEvent;
|
||||||
import com.Acrobot.ChestShop.Signs.ChestShopSign;
|
import com.Acrobot.ChestShop.Signs.ChestShopSign;
|
||||||
@ -38,16 +37,16 @@ public class SignSticker implements Listener {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
BlockFace chestFace = null;
|
BlockFace shopBlockFace = null;
|
||||||
|
|
||||||
for (BlockFace face : uBlock.CHEST_EXTENSION_FACES) {
|
for (BlockFace face : uBlock.CHEST_EXTENSION_FACES) {
|
||||||
if (BlockUtil.isChest(signBlock.getRelative(face))) {
|
if (uBlock.couldBeShopContainer(signBlock.getRelative(face))) {
|
||||||
chestFace = face;
|
shopBlockFace = face;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (chestFace == null) {
|
if (shopBlockFace == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -57,7 +56,7 @@ public class SignSticker implements Listener {
|
|||||||
org.bukkit.block.Sign sign = (org.bukkit.block.Sign) signBlock.getState();
|
org.bukkit.block.Sign sign = (org.bukkit.block.Sign) signBlock.getState();
|
||||||
|
|
||||||
Sign signMaterial = (Sign) Bukkit.createBlockData(Material.WALL_SIGN);
|
Sign signMaterial = (Sign) Bukkit.createBlockData(Material.WALL_SIGN);
|
||||||
signMaterial.setRotation(chestFace.getOppositeFace());
|
signMaterial.setRotation(shopBlockFace.getOppositeFace());
|
||||||
sign.setBlockData(signMaterial);
|
sign.setBlockData(signMaterial);
|
||||||
|
|
||||||
for (int i = 0; i < lines.length; ++i) {
|
for (int i = 0; i < lines.length; ++i) {
|
||||||
|
@ -8,7 +8,7 @@ import com.Acrobot.ChestShop.Events.TransactionEvent;
|
|||||||
import com.Acrobot.ChestShop.Signs.ChestShopSign;
|
import com.Acrobot.ChestShop.Signs.ChestShopSign;
|
||||||
import com.Acrobot.ChestShop.Utils.uBlock;
|
import com.Acrobot.ChestShop.Utils.uBlock;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.block.Chest;
|
import org.bukkit.block.Container;
|
||||||
import org.bukkit.block.Sign;
|
import org.bukkit.block.Sign;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.EventPriority;
|
import org.bukkit.event.EventPriority;
|
||||||
@ -29,7 +29,7 @@ public class EmptyShopDeleter implements Listener {
|
|||||||
|
|
||||||
Inventory ownerInventory = event.getOwnerInventory();
|
Inventory ownerInventory = event.getOwnerInventory();
|
||||||
Sign sign = event.getSign();
|
Sign sign = event.getSign();
|
||||||
Chest connectedChest = uBlock.findConnectedChest(sign);
|
Container connectedContainer = uBlock.findConnectedContainer(sign);
|
||||||
|
|
||||||
if (!shopShouldBeRemoved(ownerInventory, event.getStock())) {
|
if (!shopShouldBeRemoved(ownerInventory, event.getStock())) {
|
||||||
return;
|
return;
|
||||||
@ -39,13 +39,13 @@ public class EmptyShopDeleter implements Listener {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
ShopDestroyedEvent destroyedEvent = new ShopDestroyedEvent(null, event.getSign(), connectedChest);
|
ShopDestroyedEvent destroyedEvent = new ShopDestroyedEvent(null, event.getSign(), connectedContainer);
|
||||||
ChestShop.callEvent(destroyedEvent);
|
ChestShop.callEvent(destroyedEvent);
|
||||||
|
|
||||||
sign.getBlock().setType(Material.AIR);
|
sign.getBlock().setType(Material.AIR);
|
||||||
|
|
||||||
if (Properties.REMOVE_EMPTY_CHESTS && !ChestShopSign.isAdminShop(ownerInventory) && InventoryUtil.isEmpty(ownerInventory)) {
|
if (Properties.REMOVE_EMPTY_CHESTS && !ChestShopSign.isAdminShop(ownerInventory) && InventoryUtil.isEmpty(ownerInventory)) {
|
||||||
connectedChest.getBlock().setType(Material.AIR);
|
connectedContainer.getBlock().setType(Material.AIR);
|
||||||
} else {
|
} else {
|
||||||
ownerInventory.addItem(new ItemStack(Material.SIGN, 1));
|
ownerInventory.addItem(new ItemStack(Material.SIGN, 1));
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,7 @@ import com.Acrobot.ChestShop.Permission;
|
|||||||
import com.Acrobot.ChestShop.Security;
|
import com.Acrobot.ChestShop.Security;
|
||||||
import com.Acrobot.ChestShop.Signs.ChestShopSign;
|
import com.Acrobot.ChestShop.Signs.ChestShopSign;
|
||||||
import com.Acrobot.ChestShop.Utils.uBlock;
|
import com.Acrobot.ChestShop.Utils.uBlock;
|
||||||
import org.bukkit.block.Chest;
|
import org.bukkit.block.Container;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.EventPriority;
|
import org.bukkit.event.EventPriority;
|
||||||
@ -29,9 +29,9 @@ public class ChestChecker implements Listener {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Chest connectedChest = uBlock.findConnectedChest(event.getSign().getBlock());
|
Container connectedContainer = uBlock.findConnectedContainer(event.getSign().getBlock());
|
||||||
|
|
||||||
if (connectedChest == null) {
|
if (connectedContainer == null) {
|
||||||
event.setOutcome(NO_CHEST);
|
event.setOutcome(NO_CHEST);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -42,7 +42,7 @@ public class ChestChecker implements Listener {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!Security.canAccess(player, connectedChest.getBlock())) {
|
if (!Security.canAccess(player, connectedContainer.getBlock())) {
|
||||||
event.setOutcome(NO_PERMISSION_FOR_CHEST);
|
event.setOutcome(NO_PERMISSION_FOR_CHEST);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,7 @@ import com.Acrobot.ChestShop.Events.PreShopCreationEvent;
|
|||||||
import com.Acrobot.ChestShop.Signs.ChestShopSign;
|
import com.Acrobot.ChestShop.Signs.ChestShopSign;
|
||||||
import com.Acrobot.ChestShop.Utils.uBlock;
|
import com.Acrobot.ChestShop.Utils.uBlock;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.block.Chest;
|
import org.bukkit.block.Container;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.EventPriority;
|
import org.bukkit.event.EventPriority;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
@ -34,9 +34,9 @@ public class ItemChecker implements Listener {
|
|||||||
|
|
||||||
if (item == null) {
|
if (item == null) {
|
||||||
if (Properties.ALLOW_AUTO_ITEM_FILL && itemCode.equals(AUTOFILL_CODE)) {
|
if (Properties.ALLOW_AUTO_ITEM_FILL && itemCode.equals(AUTOFILL_CODE)) {
|
||||||
Chest chest = uBlock.findConnectedChest(event.getSign());
|
Container container = uBlock.findConnectedContainer(event.getSign());
|
||||||
if (chest != null) {
|
if (container != null) {
|
||||||
for (ItemStack stack : chest.getInventory().getContents()) {
|
for (ItemStack stack : container.getInventory().getContents()) {
|
||||||
if (!MaterialUtil.isEmpty(stack)) {
|
if (!MaterialUtil.isEmpty(stack)) {
|
||||||
item = stack;
|
item = stack;
|
||||||
break;
|
break;
|
||||||
|
@ -8,7 +8,7 @@ import com.Acrobot.ChestShop.Security;
|
|||||||
import com.Acrobot.ChestShop.Signs.ChestShopSign;
|
import com.Acrobot.ChestShop.Signs.ChestShopSign;
|
||||||
import com.Acrobot.ChestShop.Utils.uBlock;
|
import com.Acrobot.ChestShop.Utils.uBlock;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.block.Chest;
|
import org.bukkit.block.Container;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
@ -41,10 +41,10 @@ public class TerrainChecker implements Listener {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Chest connectedChest = uBlock.findConnectedChest(event.getSign().getBlock());
|
Container connectedContainer = uBlock.findConnectedContainer(event.getSign().getBlock());
|
||||||
Location chestLocation = (connectedChest != null ? connectedChest.getLocation() : null);
|
Location containerLocation = (connectedContainer != null ? connectedContainer.getLocation() : null);
|
||||||
|
|
||||||
BuildPermissionEvent bEvent = new BuildPermissionEvent(player, chestLocation, event.getSign().getLocation());
|
BuildPermissionEvent bEvent = new BuildPermissionEvent(player, containerLocation, event.getSign().getLocation());
|
||||||
ChestShop.callEvent(bEvent);
|
ChestShop.callEvent(bEvent);
|
||||||
|
|
||||||
if (!bEvent.isAllowed()) {
|
if (!bEvent.isAllowed()) {
|
||||||
|
@ -6,14 +6,12 @@ import com.Acrobot.ChestShop.Signs.ChestShopSign;
|
|||||||
import com.Acrobot.ChestShop.UUIDs.NameManager;
|
import com.Acrobot.ChestShop.UUIDs.NameManager;
|
||||||
import com.Acrobot.ChestShop.Utils.uBlock;
|
import com.Acrobot.ChestShop.Utils.uBlock;
|
||||||
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.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.Event;
|
import org.bukkit.event.Event;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
|
|
||||||
import static com.Acrobot.Breeze.Utils.BlockUtil.isChest;
|
|
||||||
import static com.Acrobot.Breeze.Utils.BlockUtil.isSign;
|
import static com.Acrobot.Breeze.Utils.BlockUtil.isSign;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -51,8 +49,8 @@ public class ChestShop implements Listener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isChest(block)) {
|
if (uBlock.couldBeShopContainer(block)) {
|
||||||
Sign sign = uBlock.getConnectedSign((Chest) block.getState());
|
Sign sign = uBlock.getConnectedSign(block);
|
||||||
|
|
||||||
if (sign != null && !isShopMember(player, sign)) {
|
if (sign != null && !isShopMember(player, sign)) {
|
||||||
return false;
|
return false;
|
||||||
@ -63,7 +61,7 @@ public class ChestShop implements Listener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static boolean canBeProtected(Block block) {
|
private static boolean canBeProtected(Block block) {
|
||||||
return isSign(block) || isChest(block);
|
return isSign(block) || uBlock.couldBeShopContainer(block);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean isShopMember(Player player, Sign sign) {
|
private static boolean isShopMember(Player player, Sign sign) {
|
||||||
|
@ -12,6 +12,7 @@ import com.griefcraft.model.Protection;
|
|||||||
import com.griefcraft.scripting.event.LWCProtectionRegisterEvent;
|
import com.griefcraft.scripting.event.LWCProtectionRegisterEvent;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.block.Chest;
|
import org.bukkit.block.Chest;
|
||||||
|
import org.bukkit.block.Container;
|
||||||
import org.bukkit.block.Sign;
|
import org.bukkit.block.Sign;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.Event;
|
import org.bukkit.event.Event;
|
||||||
@ -32,7 +33,7 @@ public class LightweightChestProtection implements Listener {
|
|||||||
public static void onShopCreation(ShopCreatedEvent event) {
|
public static void onShopCreation(ShopCreatedEvent event) {
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
Sign sign = event.getSign();
|
Sign sign = event.getSign();
|
||||||
Chest connectedChest = event.getChest();
|
Container connectedContainer = event.getContainer();
|
||||||
|
|
||||||
if (Properties.PROTECT_SIGN_WITH_LWC) {
|
if (Properties.PROTECT_SIGN_WITH_LWC) {
|
||||||
if (!Security.protect(player, sign.getBlock())) {
|
if (!Security.protect(player, sign.getBlock())) {
|
||||||
@ -40,7 +41,7 @@ public class LightweightChestProtection implements Listener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Properties.PROTECT_CHEST_WITH_LWC && connectedChest != null && Security.protect(player, connectedChest.getBlock())) {
|
if (Properties.PROTECT_CHEST_WITH_LWC && connectedContainer != null && Security.protect(player, connectedContainer.getBlock())) {
|
||||||
player.sendMessage(Messages.prefix(Messages.PROTECTED_SHOP));
|
player.sendMessage(Messages.prefix(Messages.PROTECTED_SHOP));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -114,11 +115,11 @@ public class LightweightChestProtection implements Listener {
|
|||||||
signProtection.remove();
|
signProtection.remove();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (event.getChest() == null || !Properties.REMOVE_LWC_PROTECTION_AUTOMATICALLY) {
|
if (event.getContainer() == null || !Properties.REMOVE_LWC_PROTECTION_AUTOMATICALLY) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Protection chestProtection = lwc.findProtection(event.getChest().getBlock());
|
Protection chestProtection = lwc.findProtection(event.getContainer().getBlock());
|
||||||
|
|
||||||
if (chestProtection != null) {
|
if (chestProtection != null) {
|
||||||
chestProtection.remove();
|
chestProtection.remove();
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
package com.Acrobot.ChestShop;
|
package com.Acrobot.ChestShop;
|
||||||
|
|
||||||
import com.Acrobot.Breeze.Utils.BlockUtil;
|
import com.Acrobot.Breeze.Utils.BlockUtil;
|
||||||
import com.Acrobot.Breeze.Utils.NameUtil;
|
|
||||||
import com.Acrobot.ChestShop.Configuration.Properties;
|
import com.Acrobot.ChestShop.Configuration.Properties;
|
||||||
import com.Acrobot.ChestShop.Database.Account;
|
import com.Acrobot.ChestShop.Database.Account;
|
||||||
import com.Acrobot.ChestShop.Events.Protection.ProtectBlockEvent;
|
import com.Acrobot.ChestShop.Events.Protection.ProtectBlockEvent;
|
||||||
import com.Acrobot.ChestShop.Events.Protection.ProtectionCheckEvent;
|
import com.Acrobot.ChestShop.Events.Protection.ProtectionCheckEvent;
|
||||||
import com.Acrobot.ChestShop.Signs.ChestShopSign;
|
import com.Acrobot.ChestShop.Signs.ChestShopSign;
|
||||||
import com.Acrobot.ChestShop.UUIDs.NameManager;
|
import com.Acrobot.ChestShop.UUIDs.NameManager;
|
||||||
|
import com.Acrobot.ChestShop.Utils.uBlock;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.block.BlockFace;
|
import org.bukkit.block.BlockFace;
|
||||||
import org.bukkit.block.Sign;
|
import org.bukkit.block.Sign;
|
||||||
@ -53,7 +53,7 @@ public class Security {
|
|||||||
for (BlockFace face : BLOCKS_AROUND) {
|
for (BlockFace face : BLOCKS_AROUND) {
|
||||||
Block block = sign.getRelative(face);
|
Block block = sign.getRelative(face);
|
||||||
|
|
||||||
if (!BlockUtil.isChest(block)) {
|
if (!uBlock.couldBeShopContainer(block)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (!canAccess(player, block)) {
|
if (!canAccess(player, block)) {
|
||||||
|
@ -7,6 +7,7 @@ import com.Acrobot.ChestShop.Containers.AdminInventory;
|
|||||||
import com.Acrobot.ChestShop.UUIDs.NameManager;
|
import com.Acrobot.ChestShop.UUIDs.NameManager;
|
||||||
import com.Acrobot.ChestShop.Utils.uBlock;
|
import com.Acrobot.ChestShop.Utils.uBlock;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
|
import org.bukkit.block.BlockState;
|
||||||
import org.bukkit.block.Chest;
|
import org.bukkit.block.Chest;
|
||||||
import org.bukkit.block.DoubleChest;
|
import org.bukkit.block.DoubleChest;
|
||||||
import org.bukkit.block.Sign;
|
import org.bukkit.block.Sign;
|
||||||
@ -58,6 +59,10 @@ public class ChestShopSign {
|
|||||||
return BlockUtil.isSign(sign) && isValid((Sign) sign.getState());
|
return BlockUtil.isSign(sign) && isValid((Sign) sign.getState());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated Use {@link #isShopBlock(Block}
|
||||||
|
*/
|
||||||
|
@Deprecated
|
||||||
public static boolean isShopChest(Block chest) {
|
public static boolean isShopChest(Block chest) {
|
||||||
if (!BlockUtil.isChest(chest)) {
|
if (!BlockUtil.isChest(chest)) {
|
||||||
return false;
|
return false;
|
||||||
@ -66,6 +71,18 @@ public class ChestShopSign {
|
|||||||
return uBlock.getConnectedSign((Chest) chest.getState()) != null;
|
return uBlock.getConnectedSign((Chest) chest.getState()) != null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean isShopBlock(Block block) {
|
||||||
|
if (!uBlock.couldBeShopContainer(block)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return uBlock.getConnectedSign(block) != null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated Use {@link #isShopBlock(InventoryHolder}
|
||||||
|
*/
|
||||||
|
@Deprecated
|
||||||
public static boolean isShopChest(InventoryHolder holder) {
|
public static boolean isShopChest(InventoryHolder holder) {
|
||||||
if (!BlockUtil.isChest(holder)) {
|
if (!BlockUtil.isChest(holder)) {
|
||||||
return false;
|
return false;
|
||||||
@ -80,6 +97,10 @@ public class ChestShopSign {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean isShopBlock(InventoryHolder holder) {
|
||||||
|
return holder instanceof BlockState && isShopBlock(((BlockState) holder).getBlock());
|
||||||
|
}
|
||||||
|
|
||||||
public static boolean canAccess(Player player, Sign sign) {
|
public static boolean canAccess(Player player, Sign sign) {
|
||||||
if (player == null) return false;
|
if (player == null) return false;
|
||||||
if (sign == null) return true;
|
if (sign == null) return true;
|
||||||
|
@ -1,12 +1,16 @@
|
|||||||
package com.Acrobot.ChestShop.Utils;
|
package com.Acrobot.ChestShop.Utils;
|
||||||
|
|
||||||
import com.Acrobot.Breeze.Utils.BlockUtil;
|
import com.Acrobot.Breeze.Utils.BlockUtil;
|
||||||
|
import com.Acrobot.ChestShop.Configuration.Properties;
|
||||||
import com.Acrobot.ChestShop.Signs.ChestShopSign;
|
import com.Acrobot.ChestShop.Signs.ChestShopSign;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.block.BlockFace;
|
import org.bukkit.block.BlockFace;
|
||||||
|
import org.bukkit.block.BlockState;
|
||||||
|
import org.bukkit.block.Container;
|
||||||
import org.bukkit.block.Sign;
|
import org.bukkit.block.Sign;
|
||||||
import org.bukkit.block.data.BlockData;
|
import org.bukkit.block.data.BlockData;
|
||||||
import org.bukkit.block.data.type.Chest;
|
import org.bukkit.block.data.type.Chest;
|
||||||
|
import org.bukkit.inventory.InventoryHolder;
|
||||||
import org.bukkit.material.Attachable;
|
import org.bukkit.material.Attachable;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -18,17 +22,8 @@ public class uBlock {
|
|||||||
@Deprecated
|
@Deprecated
|
||||||
public static final BlockFace[] NEIGHBOR_FACES = {BlockFace.EAST, BlockFace.NORTH, BlockFace.WEST, BlockFace.SOUTH};
|
public static final BlockFace[] NEIGHBOR_FACES = {BlockFace.EAST, BlockFace.NORTH, BlockFace.WEST, BlockFace.SOUTH};
|
||||||
|
|
||||||
public static Sign getConnectedSign(org.bukkit.block.Chest chest) {
|
public static Sign getConnectedSign(BlockState blockState) {
|
||||||
Sign sign = uBlock.findAnyNearbyShopSign(chest.getBlock());
|
return getConnectedSign(blockState.getBlock());
|
||||||
|
|
||||||
if (sign == null) {
|
|
||||||
Block neighbor = findNeighbor(chest.getBlock());
|
|
||||||
if (neighbor != null) {
|
|
||||||
sign = uBlock.findAnyNearbyShopSign(neighbor);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return sign;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Sign getConnectedSign(Block block) {
|
public static Sign getConnectedSign(Block block) {
|
||||||
@ -44,6 +39,10 @@ public class uBlock {
|
|||||||
return sign;
|
return sign;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated Use {@link #findConnectedContainer(Sign)}
|
||||||
|
*/
|
||||||
|
@Deprecated
|
||||||
public static org.bukkit.block.Chest findConnectedChest(Sign sign) {
|
public static org.bukkit.block.Chest findConnectedChest(Sign sign) {
|
||||||
BlockFace signFace = null;
|
BlockFace signFace = null;
|
||||||
if (((org.bukkit.material.Sign) sign.getData()).isWallSign()) {
|
if (((org.bukkit.material.Sign) sign.getData()).isWallSign()) {
|
||||||
@ -52,6 +51,10 @@ public class uBlock {
|
|||||||
return findConnectedChest(sign.getBlock(), signFace);
|
return findConnectedChest(sign.getBlock(), signFace);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated Use {@link #findConnectedContainer(Block)}
|
||||||
|
*/
|
||||||
|
@Deprecated
|
||||||
public static org.bukkit.block.Chest findConnectedChest(Block block) {
|
public static org.bukkit.block.Chest findConnectedChest(Block block) {
|
||||||
BlockFace signFace = null;
|
BlockFace signFace = null;
|
||||||
if (BlockUtil.isSign(block)) {
|
if (BlockUtil.isSign(block)) {
|
||||||
@ -63,6 +66,10 @@ public class uBlock {
|
|||||||
return findConnectedChest(block, signFace);
|
return findConnectedChest(block, signFace);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated Use {@link #findConnectedContainer(Block, BlockFace)}
|
||||||
|
*/
|
||||||
|
@Deprecated
|
||||||
private static org.bukkit.block.Chest findConnectedChest(Block block, BlockFace signFace) {
|
private static org.bukkit.block.Chest findConnectedChest(Block block, BlockFace signFace) {
|
||||||
if (signFace != null) {
|
if (signFace != null) {
|
||||||
Block faceBlock = block.getRelative(signFace);
|
Block faceBlock = block.getRelative(signFace);
|
||||||
@ -82,6 +89,44 @@ public class uBlock {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Container findConnectedContainer(Sign sign) {
|
||||||
|
BlockFace signFace = null;
|
||||||
|
if (((org.bukkit.material.Sign) sign.getData()).isWallSign()) {
|
||||||
|
signFace = ((Attachable) sign.getData()).getAttachedFace();
|
||||||
|
}
|
||||||
|
return findConnectedContainer(sign.getBlock(), signFace);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Container findConnectedContainer(Block block) {
|
||||||
|
BlockFace signFace = null;
|
||||||
|
if (BlockUtil.isSign(block)) {
|
||||||
|
Sign sign = (Sign) block.getState();
|
||||||
|
if (((org.bukkit.material.Sign) sign.getData()).isWallSign()) {
|
||||||
|
signFace = ((Attachable) sign.getData()).getAttachedFace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return findConnectedContainer(block, signFace);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Container findConnectedContainer(Block block, BlockFace signFace) {
|
||||||
|
if (signFace != null) {
|
||||||
|
Block faceBlock = block.getRelative(signFace);
|
||||||
|
if (uBlock.couldBeShopContainer(faceBlock)) {
|
||||||
|
return (Container) faceBlock.getState();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (BlockFace bf : SHOP_FACES) {
|
||||||
|
if (bf != signFace) {
|
||||||
|
Block faceBlock = block.getRelative(bf);
|
||||||
|
if (uBlock.couldBeShopContainer(faceBlock)) {
|
||||||
|
return (Container) faceBlock.getState();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
public static Sign findValidShopSign(Block block, String originalName) {
|
public static Sign findValidShopSign(Block block, String originalName) {
|
||||||
Sign ownerShopSign = null;
|
Sign ownerShopSign = null;
|
||||||
|
|
||||||
@ -167,4 +212,12 @@ public class uBlock {
|
|||||||
private static boolean signIsAttachedToBlock(Sign sign, Block block) {
|
private static boolean signIsAttachedToBlock(Sign sign, Block block) {
|
||||||
return sign.getBlock().equals(block) || BlockUtil.getAttachedBlock(sign).equals(block);
|
return sign.getBlock().equals(block) || BlockUtil.getAttachedBlock(sign).equals(block);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean couldBeShopContainer(Block block) {
|
||||||
|
return block != null && Properties.SHOP_CONTAINERS.contains(block.getType());
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean couldBeShopContainer(InventoryHolder holder) {
|
||||||
|
return holder instanceof Container && couldBeShopContainer(((Container) holder).getBlock());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user