diff --git a/src/main/java/de/craftinc/replicator/BlockUtil.java b/src/main/java/de/craftinc/replicator/BlockUtil.java new file mode 100644 index 0000000..3cb4dba --- /dev/null +++ b/src/main/java/de/craftinc/replicator/BlockUtil.java @@ -0,0 +1,58 @@ +/* Craft Inc. Replicator + Copyright (C) 2013 Paul Schulze, Maximilian Häckel, Moritz Kaltofen + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ +package de.craftinc.replicator; + +import java.util.Arrays; +import java.util.HashSet; + +public class BlockUtil +{ + /** + * List of blocks considered transparent. Not complete. + */ + public static final HashSet transparentBlocks = new HashSet(Arrays.asList(new Byte[] { + 6, // Sapling + 8, // Flowing Water + 9, // Still Water + 20, // Glass + 30, // Cobweb + 37, // Dandelion + 38, // Rose + 39, // Brown Mushrooom + 40, // Red Mushroom + 44, // Slabs + 50, // Torch + 70, // Stone Pressure Plate + 72, // Wooden Pressure Plate + 75, // Redstone Torch (inactive) + 76, // Redstone Torch (active) + 78, // Snow + 79, // Ice + 102, // Window + 104, // Pumpkin Stem + 105, // Melon Stem + 126, // Wooden Slab + (byte) 131, // Tripwire Hook + (byte) 132, // Tripwire + (byte) 147, // Weighted Pressure Plate (Light) + (byte) 148, // Weighted Pressure Plate (Heavy) + (byte) 149, // Redstone Comparator (inactive) + (byte) 150, // Redstone Comparator (active) + (byte) 151, // Daylight Sensor + + })); +} diff --git a/src/main/java/de/craftinc/replicator/Commands.java b/src/main/java/de/craftinc/replicator/Commands.java index 7eb9136..d4a0ab8 100644 --- a/src/main/java/de/craftinc/replicator/Commands.java +++ b/src/main/java/de/craftinc/replicator/Commands.java @@ -16,11 +16,15 @@ */ package de.craftinc.replicator; +import org.bukkit.Location; +import org.bukkit.block.Block; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import java.util.ArrayList; + public class Commands implements CommandExecutor { @Override @@ -32,5 +36,57 @@ public class Commands implements CommandExecutor sender.sendMessage(Messages.commandIssuedByNonPlayer); return true; } + + // commands + if ( command.getName().equalsIgnoreCase("replicate") || command.getAliases().get(0).equalsIgnoreCase("repli") ) + { + Player player = ( (Player) sender ).getPlayer(); + + // help + if ( args.length == 0 || ( args.length > 0 && args[0].equalsIgnoreCase("help") ) ) + { + sender.sendMessage(Messages.helpGeneral(player)); + return true; + } + + // info + if ( args.length > 0 && args[0].equalsIgnoreCase("info") ) + { + // looking at replicator + if ( args.length == 1 ) + { + // get block where the player is looking at + Block potentialReplicatorBlock = player.getTargetBlock(BlockUtil.transparentBlocks, 100); + + // get zero or more valid replicator centers + ArrayList replicatorCenters = Replicator + .getReplicators(potentialReplicatorBlock.getLocation()); + + if ( replicatorCenters.size() == 0 ) + { + sender.sendMessage(Messages.noReplicatorInSight); + return true; + } + + ArrayList replicators = new ArrayList(); + for ( Location replicatorCenter : replicatorCenters ) + { + replicators.add(Replicator.getOrCreate(replicatorCenter)); + } + sender.sendMessage(Messages.info(replicators)); + return true; + } + // replicator specified as argument + else if ( args.length == 2 ) + { + + } + } + } + + + // if some unknown argument has been given, show help message + sender.sendMessage(Messages.helpGeneral(( (Player) sender ).getPlayer())); + return true; } } diff --git a/src/main/java/de/craftinc/replicator/Messages.java b/src/main/java/de/craftinc/replicator/Messages.java index 775a5c6..1b84488 100644 --- a/src/main/java/de/craftinc/replicator/Messages.java +++ b/src/main/java/de/craftinc/replicator/Messages.java @@ -19,14 +19,25 @@ package de.craftinc.replicator; import org.bukkit.ChatColor; import org.bukkit.entity.Player; +import java.util.ArrayList; + public class Messages { private static final String NEWLINE = "\n"; private static final String pluginName = Plugin.instance.getDescription().getName(); - private static String makeCmd( Player player, String command, String explanation, String[] permissions, String... args ) + private static String makeCmd( Player player, String command, String explanation, String[] permissions, + String... args ) { + for ( String perm : permissions ) + { + if ( !player.hasPermission(perm) ) + { + return ""; + } + } + StringBuilder sb = new StringBuilder(); // command @@ -56,21 +67,16 @@ public class Messages return sb.toString(); } - public static String helpGeneral(Player player) = - ChatColor.GREEN + pluginName + " - Usage:" + NEWLINE + - makeCmd("help", "shows this help", null) + - makeCmd("adduser | deluser", - "Add or remove a player's right to use the replicator in front of you or the replicator given by \"id\".", - null, "", "[id]") + - makeCmd("addowner | delowner", - "Add or remove a player's right to use AND add or remove other users and owners to the replicator in front of you or the replicator given by \"id\".", - null, "", "[id]") + - makeCmd("checkversion", "Checks for a newer version.", new String[]{"craftinc.replicator.update"}); - - public static String borderCreationSuccessful - = ChatColor.YELLOW + "New border was set " + - ChatColor.GREEN + "successfully" + - ChatColor.YELLOW + "!"; + public static String helpGeneral( Player player ) + { + return ChatColor.GREEN + pluginName + " - Usage:" + NEWLINE + + makeCmd(player, "help", "shows this help", null) + + makeCmd(player, "adduser | deluser", "Add or remove a player's right to use the replicator in front of you or the replicator given by \"id\".", null, "", "[id]") + + makeCmd(player, "addowner | delowner", "Add or remove a player's right to use AND add or remove other users and owners to the replicator in front of you or the replicator given by \"id\".", null, "", "[id]") + + makeCmd(player, "list", "Lists all your replicators.", null) + + makeCmd(player, "info", "Get information about the replicator in front of you or the replicator given by \"id\".", null, "[id]") + + makeCmd(player, "checkversion", "Checks for a newer version.", new String[] { "craftinc.replicator.update" }); + } public static String commandIssuedByNonPlayer = ChatColor.RED + "Only a player can use " + pluginName + " commands!"; @@ -81,6 +87,9 @@ public class Messages public static String noPermissionCheckversion = ChatColor.RED + "Sorry, you don't have permission to check for new versions."; + public static String noReplicatorInSight = + ChatColor.RED + "You are not looking at an replicator."; + public static String updateMessage( String newVersion, String curVersion ) { return ChatColor.RED + pluginName + ": New version available!" + NEWLINE + @@ -93,4 +102,26 @@ public class Messages public static String noUpdateAvailable = ChatColor.YELLOW + "No updates available."; + + public static String info( ArrayList replicators ) + { + StringBuilder sb = new StringBuilder(); + sb.append(ChatColor.YELLOW + "The following replicators have been found:" + NEWLINE); + for (Replicator r: replicators) + { + sb.append(ChatColor.GOLD + r.id + " @ " + r.center.getX() + "," + r.center.getZ() + NEWLINE); + sb.append(ChatColor.GREEN + "Owners:" + NEWLINE); + for (String owner: r.getOwners()) + { + sb.append(ChatColor.WHITE + owner + " "); + } + sb.append(NEWLINE + ChatColor.GREEN + "Users:" + NEWLINE); + for (String user: r.getUsers()) + { + sb.append(ChatColor.WHITE + user + " "); + } + sb.append(NEWLINE); + } + return sb.toString(); + } } diff --git a/src/main/java/de/craftinc/replicator/Pattern.java b/src/main/java/de/craftinc/replicator/Pattern.java index 038ce62..e7f8017 100644 --- a/src/main/java/de/craftinc/replicator/Pattern.java +++ b/src/main/java/de/craftinc/replicator/Pattern.java @@ -19,13 +19,6 @@ package de.craftinc.replicator; import org.bukkit.Material; -/** - * Created with IntelliJ IDEA. - * User: Mochaccino - * Date: 18.03.13 - * Time: 20:33 - * To change this template use File | Settings | File Templates. - */ public class Pattern { private static final Material[][][] repPattern = {{{Material.OBSIDIAN,Material.OBSIDIAN,null},{Material.MOSSY_COBBLESTONE,Material.OBSIDIAN,null},{Material.GLOWSTONE,Material.OBSIDIAN,null}}, {{Material.GOLD_BLOCK,Material.DIAMOND_BLOCK,Material.OBSIDIAN},{Material.AIR,Material.JACK_O_LANTERN,Material.OBSIDIAN},{Material.MOSSY_COBBLESTONE,Material.OBSIDIAN,null}}, diff --git a/src/main/java/de/craftinc/replicator/Replicator.java b/src/main/java/de/craftinc/replicator/Replicator.java index 8e1cd95..e35142d 100644 --- a/src/main/java/de/craftinc/replicator/Replicator.java +++ b/src/main/java/de/craftinc/replicator/Replicator.java @@ -23,13 +23,6 @@ import org.bukkit.Material; import java.util.ArrayList; -/** - * Created with IntelliJ IDEA. - * User: starback - * Date: 18.03.13 - * Time: 16:26 - * To change this template use File | Settings | File Templates. - */ public class Replicator { private ArrayList owners; diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index d789c1b..74d9055 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -21,10 +21,10 @@ softdepend: [Multiverse-Core] authors: [ddidderr, beuth_el_max] website: http://www.craftinc.de/craftinc-replicator - commands: replicate: description: Shows help for Craft Inc. Replicate + aliases: [repli] permissions: craftinc.replicator.update: