Added the ability to change gate block types. Issue #26.
Refactoring: Added a ConfigurationUtil class. Moved all configuration keys into it.
This commit is contained in:
parent
260cabc509
commit
e9a454182a
@ -7,3 +7,4 @@ gateTeleportMessage: "Thank you for traveling with Craft Inc. Gates."
|
|||||||
showTeleportMessage: true
|
showTeleportMessage: true
|
||||||
gateTeleportNoPermissionMessage: "You are not allowed to use this gate!"
|
gateTeleportNoPermissionMessage: "You are not allowed to use this gate!"
|
||||||
showTeleportNoPermissionMessage: true
|
showTeleportNoPermissionMessage: true
|
||||||
|
gateMaterial: "nether portal"
|
@ -16,6 +16,7 @@
|
|||||||
*/
|
*/
|
||||||
package de.craftinc.gates;
|
package de.craftinc.gates;
|
||||||
|
|
||||||
|
import de.craftinc.gates.util.ConfigurationUtil;
|
||||||
import de.craftinc.gates.util.FloodUtil;
|
import de.craftinc.gates.util.FloodUtil;
|
||||||
import de.craftinc.gates.persistence.LocationUtil;
|
import de.craftinc.gates.persistence.LocationUtil;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
@ -57,7 +58,7 @@ public class Gate implements ConfigurationSerializable
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @return This method might return a 'null' value.
|
* @return This method might return a 'null' data.
|
||||||
*/
|
*/
|
||||||
public Location getLocation()
|
public Location getLocation()
|
||||||
{
|
{
|
||||||
@ -100,7 +101,7 @@ public class Gate implements ConfigurationSerializable
|
|||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @param exit Supplying 'null' is permitted.
|
* @param exit Supplying 'null' is permitted.
|
||||||
* @throws Exception An exception will be thrown if 'null' value is supplied and this gate is open. Note that the
|
* @throws Exception An exception will be thrown if 'null' data is supplied and this gate is open. Note that the
|
||||||
* supplied 'exit' will be set even if an exception is thrown. Note that this gate will be closed if an
|
* supplied 'exit' will be set even if an exception is thrown. Note that this gate will be closed if an
|
||||||
* exception is thrown.
|
* exception is thrown.
|
||||||
*/
|
*/
|
||||||
@ -235,7 +236,7 @@ public class Gate implements ConfigurationSerializable
|
|||||||
throw new Exception("Gate got closed. The frame is missing or broken. (no gate blocks)");
|
throw new Exception("Gate got closed. The frame is missing or broken. (no gate blocks)");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!isHidden() && Plugin.getPlugin().getConfig().getBoolean(Plugin.confCheckForBrokenGateFramesKey)) {
|
if (!isHidden() && Plugin.getPlugin().getConfig().getBoolean(ConfigurationUtil.confCheckForBrokenGateFramesKey)) {
|
||||||
|
|
||||||
for (Block b : gateFrameBlocks) {
|
for (Block b : gateFrameBlocks) {
|
||||||
|
|
||||||
|
@ -24,6 +24,7 @@ import java.util.*;
|
|||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
|
|
||||||
import de.craftinc.gates.persistence.MigrationUtil;
|
import de.craftinc.gates.persistence.MigrationUtil;
|
||||||
|
import de.craftinc.gates.util.ConfigurationUtil;
|
||||||
import org.bukkit.Chunk;
|
import org.bukkit.Chunk;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
@ -193,7 +194,7 @@ public class GatesManager
|
|||||||
protected int getChunkRadius()
|
protected int getChunkRadius()
|
||||||
{
|
{
|
||||||
if (this.chunkRadius == 0) {
|
if (this.chunkRadius == 0) {
|
||||||
this.chunkRadius = Plugin.getPlugin().getConfig().getInt(Plugin.confPlayerGateBlockUpdateRadiusKey);
|
this.chunkRadius = Plugin.getPlugin().getConfig().getInt(ConfigurationUtil.confPlayerGateBlockUpdateRadiusKey);
|
||||||
this.chunkRadius = this.chunkRadius >> 4;
|
this.chunkRadius = this.chunkRadius >> 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -23,6 +23,7 @@ import java.util.logging.Logger;
|
|||||||
|
|
||||||
|
|
||||||
import de.craftinc.gates.listeners.*;
|
import de.craftinc.gates.listeners.*;
|
||||||
|
import de.craftinc.gates.util.ConfigurationUtil;
|
||||||
import net.milkbowl.vault.permission.Permission;
|
import net.milkbowl.vault.permission.Permission;
|
||||||
|
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
@ -43,16 +44,6 @@ public class Plugin extends JavaPlugin
|
|||||||
public static final String permissionManage = "craftincgates.manage";
|
public static final String permissionManage = "craftincgates.manage";
|
||||||
public static final String permissionUse = "craftincgates.use";
|
public static final String permissionUse = "craftincgates.use";
|
||||||
|
|
||||||
public static final String confMaxGateBlocksKey = "maxGateBlocks";
|
|
||||||
public static final String confPlayerGateBlockUpdateRadiusKey = "playerGateBlockUpdateRadius";
|
|
||||||
public static final String confCheckForBrokenGateFramesKey = "checkForBrokenGateFrames";
|
|
||||||
public static final String confGateTeleportMessageKey = "gateTeleportMessage";
|
|
||||||
public static final String confShowTeleportMessageKey = "showTeleportMessage";
|
|
||||||
public static final String confGateTeleportNoPermissionMessageKey = "gateTeleportNoPermissionMessage";
|
|
||||||
public static final String confShowTeleportNoPermissionMessageKey = "showTeleportNoPermissionMessage";
|
|
||||||
public static final String confSaveOnChangesKey = "saveOnChanges";
|
|
||||||
public static final String confHighlightDurationKey = "highlightDuration";
|
|
||||||
|
|
||||||
private static Plugin instance;
|
private static Plugin instance;
|
||||||
private static Permission permission;
|
private static Permission permission;
|
||||||
|
|
||||||
@ -184,7 +175,7 @@ public class Plugin extends JavaPlugin
|
|||||||
pm.registerEvents(this.worldChangeListener, this);
|
pm.registerEvents(this.worldChangeListener, this);
|
||||||
pm.registerEvents(this.joinListener, this);
|
pm.registerEvents(this.joinListener, this);
|
||||||
|
|
||||||
if (getConfig().getBoolean(confCheckForBrokenGateFramesKey)) {
|
if (getConfig().getBoolean(ConfigurationUtil.confCheckForBrokenGateFramesKey)) {
|
||||||
pm.registerEvents(this.blockBreakListener, this);
|
pm.registerEvents(this.blockBreakListener, this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -19,6 +19,7 @@ package de.craftinc.gates.commands;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import de.craftinc.gates.util.ConfigurationUtil;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
@ -69,7 +70,7 @@ public abstract class BaseCommand
|
|||||||
|
|
||||||
this.perform();
|
this.perform();
|
||||||
|
|
||||||
if (this.shouldPersistToDisk && Plugin.getPlugin().getConfig().getBoolean(Plugin.confSaveOnChangesKey)) {
|
if (this.shouldPersistToDisk && Plugin.getPlugin().getConfig().getBoolean(ConfigurationUtil.confSaveOnChangesKey)) {
|
||||||
Plugin.getPlugin().getGatesManager().saveGatesToDisk();
|
Plugin.getPlugin().getGatesManager().saveGatesToDisk();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -19,6 +19,7 @@ package de.craftinc.gates.listeners;
|
|||||||
import java.util.Calendar;
|
import java.util.Calendar;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
|
||||||
|
import de.craftinc.gates.util.ConfigurationUtil;
|
||||||
import de.craftinc.gates.util.GateBlockChangeSender;
|
import de.craftinc.gates.util.GateBlockChangeSender;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
@ -70,7 +71,7 @@ public class PlayerMoveListener implements Listener
|
|||||||
|
|
||||||
// Check for permission
|
// Check for permission
|
||||||
if (!hasPermission(event.getPlayer(), gateAtLocation)
|
if (!hasPermission(event.getPlayer(), gateAtLocation)
|
||||||
&& Plugin.getPlugin().getConfig().getBoolean(Plugin.confShowTeleportNoPermissionMessageKey)) {
|
&& Plugin.getPlugin().getConfig().getBoolean(ConfigurationUtil.confShowTeleportNoPermissionMessageKey)) {
|
||||||
|
|
||||||
String playerName = event.getPlayer().getName();
|
String playerName = event.getPlayer().getName();
|
||||||
|
|
||||||
@ -84,7 +85,7 @@ public class PlayerMoveListener implements Listener
|
|||||||
// do not display messages more often than once per second
|
// do not display messages more often than once per second
|
||||||
if (!this.lastNoPermissionMessages.containsKey(playerName) || this.lastNoPermissionMessages.get(playerName) < now - 10000L) {
|
if (!this.lastNoPermissionMessages.containsKey(playerName) || this.lastNoPermissionMessages.get(playerName) < now - 10000L) {
|
||||||
|
|
||||||
String noPermissionString = Plugin.getPlugin().getConfig().getString(Plugin.confGateTeleportNoPermissionMessageKey);
|
String noPermissionString = Plugin.getPlugin().getConfig().getString(ConfigurationUtil.confGateTeleportNoPermissionMessageKey);
|
||||||
event.getPlayer().sendMessage(ChatColor.RED + noPermissionString);
|
event.getPlayer().sendMessage(ChatColor.RED + noPermissionString);
|
||||||
this.lastNoPermissionMessages.put(playerName, now);
|
this.lastNoPermissionMessages.put(playerName, now);
|
||||||
}
|
}
|
||||||
@ -114,8 +115,8 @@ public class PlayerMoveListener implements Listener
|
|||||||
|
|
||||||
p.teleport(destLocation);
|
p.teleport(destLocation);
|
||||||
|
|
||||||
if (Plugin.getPlugin().getConfig().getBoolean(Plugin.confShowTeleportMessageKey)) {
|
if (Plugin.getPlugin().getConfig().getBoolean(ConfigurationUtil.confShowTeleportMessageKey)) {
|
||||||
String teleporMessage = Plugin.getPlugin().getConfig().getString(Plugin.confGateTeleportMessageKey);
|
String teleporMessage = Plugin.getPlugin().getConfig().getString(ConfigurationUtil.confGateTeleportMessageKey);
|
||||||
p.sendMessage(ChatColor.DARK_AQUA + teleporMessage);
|
p.sendMessage(ChatColor.DARK_AQUA + teleporMessage);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
110
src/de/craftinc/gates/util/ConfigurationUtil.java
Normal file
110
src/de/craftinc/gates/util/ConfigurationUtil.java
Normal file
@ -0,0 +1,110 @@
|
|||||||
|
package de.craftinc.gates.util;
|
||||||
|
|
||||||
|
|
||||||
|
import de.craftinc.gates.Plugin;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
|
||||||
|
import java.util.logging.Level;
|
||||||
|
|
||||||
|
|
||||||
|
public class ConfigurationUtil
|
||||||
|
{
|
||||||
|
public static final String confMaxGateBlocksKey = "maxGateBlocks";
|
||||||
|
public static final String confPlayerGateBlockUpdateRadiusKey = "playerGateBlockUpdateRadius";
|
||||||
|
public static final String confCheckForBrokenGateFramesKey = "checkForBrokenGateFrames";
|
||||||
|
public static final String confGateTeleportMessageKey = "gateTeleportMessage";
|
||||||
|
public static final String confShowTeleportMessageKey = "showTeleportMessage";
|
||||||
|
public static final String confGateTeleportNoPermissionMessageKey = "gateTeleportNoPermissionMessage";
|
||||||
|
public static final String confShowTeleportNoPermissionMessageKey = "showTeleportNoPermissionMessage";
|
||||||
|
public static final String confSaveOnChangesKey = "saveOnChanges";
|
||||||
|
public static final String confHighlightDurationKey = "highlightDuration";
|
||||||
|
public static final String confGateMaterialKey = "gateMaterial";
|
||||||
|
|
||||||
|
|
||||||
|
public static GateMaterial getPortalMaterial()
|
||||||
|
{
|
||||||
|
String materialString = Plugin.getPlugin().getConfig().getString(confGateMaterialKey);
|
||||||
|
GateMaterial material = new GateMaterial();
|
||||||
|
|
||||||
|
if (materialString.equals("sapling")) {
|
||||||
|
material.material = Material.SAPLING;
|
||||||
|
}
|
||||||
|
else if (materialString.equals("water")) {
|
||||||
|
material.material = Material.STATIONARY_WATER;
|
||||||
|
}
|
||||||
|
else if (materialString.equals("lava")) {
|
||||||
|
material.material = Material.STATIONARY_LAVA;
|
||||||
|
}
|
||||||
|
else if (materialString.equals("cobweb")) {
|
||||||
|
material.material = Material.WEB;
|
||||||
|
}
|
||||||
|
else if (materialString.equals("grass")) {
|
||||||
|
material.material = Material.LONG_GRASS;
|
||||||
|
material.data = 1;
|
||||||
|
}
|
||||||
|
else if (materialString.equals("dead bush")) {
|
||||||
|
material.material = Material.DEAD_BUSH;
|
||||||
|
}
|
||||||
|
else if (materialString.equals("dandelion")) {
|
||||||
|
material.material = Material.YELLOW_FLOWER; // TODO: this will change with minecraft 1.7
|
||||||
|
}
|
||||||
|
else if (materialString.equals("poppy")) {
|
||||||
|
material.material = Material.RED_ROSE; // TODO: this will change with minecraft 1.7
|
||||||
|
}
|
||||||
|
else if (materialString.equals("brown mushroom")) {
|
||||||
|
material.material = Material.BROWN_MUSHROOM;
|
||||||
|
}
|
||||||
|
else if (materialString.equals("red mushroom")) {
|
||||||
|
material.material = Material.RED_MUSHROOM;
|
||||||
|
}
|
||||||
|
else if (materialString.equals("torch")) {
|
||||||
|
material.material = Material.TORCH;
|
||||||
|
}
|
||||||
|
else if (materialString.equals("redstone torch (off)")) {
|
||||||
|
material.material = Material.REDSTONE_TORCH_OFF;
|
||||||
|
}
|
||||||
|
else if (materialString.equals("redstone torch (on)")) {
|
||||||
|
material.material = Material.REDSTONE_TORCH_ON;
|
||||||
|
}
|
||||||
|
else if (materialString.equals("fence")) {
|
||||||
|
material.material = Material.FENCE;
|
||||||
|
}
|
||||||
|
else if (materialString.equals("nether portal")) {
|
||||||
|
material.material = Material.PORTAL;
|
||||||
|
}
|
||||||
|
else if (materialString.equals("iron bars")) {
|
||||||
|
material.material = Material.IRON_FENCE;
|
||||||
|
}
|
||||||
|
else if (materialString.equals("glass pane")) {
|
||||||
|
material.material = Material.THIN_GLASS;
|
||||||
|
}
|
||||||
|
else if (materialString.equals("fence gate")) {
|
||||||
|
material.material = Material.FENCE_GATE;
|
||||||
|
}
|
||||||
|
else if (materialString.equals("nether brick fence")) {
|
||||||
|
material.material = Material.NETHER_FENCE;
|
||||||
|
}
|
||||||
|
else if (materialString.equals("nether wart")) {
|
||||||
|
material.material = Material.NETHER_WARTS;
|
||||||
|
}
|
||||||
|
else if (materialString.equals("end portal")) {
|
||||||
|
material.material = Material.ENDER_PORTAL;
|
||||||
|
}
|
||||||
|
else if (materialString.equals("cobblestone wall")) {
|
||||||
|
material.material = Material.COBBLE_WALL;
|
||||||
|
}
|
||||||
|
else { // fallback!
|
||||||
|
material.material = Material.PORTAL;
|
||||||
|
Plugin.log(Level.WARNING, "Gate material invalid! Please check and correct your configuration file!");
|
||||||
|
}
|
||||||
|
|
||||||
|
return material;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class GateMaterial
|
||||||
|
{
|
||||||
|
public Material material = Material.PORTAL;
|
||||||
|
public byte data = 0;
|
||||||
|
}
|
@ -148,7 +148,7 @@ public class FloodUtil
|
|||||||
throw new IllegalArgumentException("'block' must not be 'null'");
|
throw new IllegalArgumentException("'block' must not be 'null'");
|
||||||
}
|
}
|
||||||
|
|
||||||
int frameBlockSearchLimit = Plugin.getPlugin().getConfig().getInt(Plugin.confMaxGateBlocksKey);
|
int frameBlockSearchLimit = Plugin.getPlugin().getConfig().getInt(ConfigurationUtil.confMaxGateBlocksKey);
|
||||||
|
|
||||||
Set<Block> blocks1 = getAirFloodBlocks(block, new HashSet<Block>(), exp1, frameBlockSearchLimit);
|
Set<Block> blocks1 = getAirFloodBlocks(block, new HashSet<Block>(), exp1, frameBlockSearchLimit);
|
||||||
Set<Block> blocks2 = getAirFloodBlocks(block, new HashSet<Block>(), exp2, frameBlockSearchLimit);
|
Set<Block> blocks2 = getAirFloodBlocks(block, new HashSet<Block>(), exp2, frameBlockSearchLimit);
|
||||||
|
@ -19,6 +19,7 @@ package de.craftinc.gates.util;
|
|||||||
|
|
||||||
import de.craftinc.gates.Plugin;
|
import de.craftinc.gates.Plugin;
|
||||||
import de.craftinc.gates.Gate;
|
import de.craftinc.gates.Gate;
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
@ -33,7 +34,7 @@ public class GateBlockChangeSender
|
|||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Replaces gate frame blocks with glowstone for a short period of time.
|
* Replaces gate frame blocks with glowstone for a short period of time.
|
||||||
* Uses the value stored in 'highlightDuration' inside the config file
|
* Uses the data stored in 'highlightDuration' inside the config file
|
||||||
* for determining when to de-highlight the frames.
|
* for determining when to de-highlight the frames.
|
||||||
* @param player The player for whom the frame should be highlighted.
|
* @param player The player for whom the frame should be highlighted.
|
||||||
* Must not be null!
|
* Must not be null!
|
||||||
@ -55,7 +56,7 @@ public class GateBlockChangeSender
|
|||||||
|
|
||||||
|
|
||||||
Plugin plugin = Plugin.getPlugin();
|
Plugin plugin = Plugin.getPlugin();
|
||||||
long highlightDuration = 20 * plugin.getConfig().getLong(Plugin.confHighlightDurationKey);
|
long highlightDuration = 20 * plugin.getConfig().getLong(ConfigurationUtil.confHighlightDurationKey);
|
||||||
|
|
||||||
Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() {
|
Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
@ -109,6 +110,7 @@ public class GateBlockChangeSender
|
|||||||
}
|
}
|
||||||
|
|
||||||
Set<Gate> gatesNearby = Plugin.getPlugin().getGatesManager().getNearbyGates(location.getChunk());
|
Set<Gate> gatesNearby = Plugin.getPlugin().getGatesManager().getNearbyGates(location.getChunk());
|
||||||
|
GateMaterial gateMaterial = ConfigurationUtil.getPortalMaterial();
|
||||||
|
|
||||||
if (gatesNearby == null) {
|
if (gatesNearby == null) {
|
||||||
return; // no gates nearby
|
return; // no gates nearby
|
||||||
@ -123,7 +125,7 @@ public class GateBlockChangeSender
|
|||||||
for (Location l : g.getGateBlockLocations()) {
|
for (Location l : g.getGateBlockLocations()) {
|
||||||
|
|
||||||
if (l.getBlock().getType() == Material.AIR) {
|
if (l.getBlock().getType() == Material.AIR) {
|
||||||
player.sendBlockChange(l, Material.PORTAL, (byte)0);
|
player.sendBlockChange(l, gateMaterial.material, gateMaterial.data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -186,7 +188,7 @@ public class GateBlockChangeSender
|
|||||||
|
|
||||||
ArrayList<Player> playersNearby = new ArrayList<Player>();
|
ArrayList<Player> playersNearby = new ArrayList<Player>();
|
||||||
|
|
||||||
int searchRadius = Plugin.getPlugin().getConfig().getInt(Plugin.confPlayerGateBlockUpdateRadiusKey);
|
int searchRadius = Plugin.getPlugin().getConfig().getInt(ConfigurationUtil.confPlayerGateBlockUpdateRadiusKey);
|
||||||
|
|
||||||
for (Player p : Plugin.getPlugin().getServer().getOnlinePlayers()) {
|
for (Player p : Plugin.getPlugin().getServer().getOnlinePlayers()) {
|
||||||
|
|
||||||
@ -195,10 +197,13 @@ public class GateBlockChangeSender
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GateMaterial gateMaterial = ConfigurationUtil.getPortalMaterial();
|
||||||
Material material;
|
Material material;
|
||||||
|
byte data = 0;
|
||||||
|
|
||||||
if (gate.isOpen() && !gate.isHidden() && !remove) {
|
if (gate.isOpen() && !gate.isHidden() && !remove) {
|
||||||
material = Material.PORTAL;
|
material = gateMaterial.material;
|
||||||
|
data = gateMaterial.data;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
material = Material.AIR;
|
material = Material.AIR;
|
||||||
@ -209,7 +214,7 @@ public class GateBlockChangeSender
|
|||||||
for (Location l : gate.getGateBlockLocations()) {
|
for (Location l : gate.getGateBlockLocations()) {
|
||||||
|
|
||||||
if (l.getBlock().getType() == Material.AIR) { // on server-side a gate is always made out of AIR
|
if (l.getBlock().getType() == Material.AIR) { // on server-side a gate is always made out of AIR
|
||||||
p.sendBlockChange(l, material, (byte)0);
|
p.sendBlockChange(l, material, data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user