Renamed 2.1 -> trunk

git-svn-id: https://svn.java.net/svn/essentials~svn/trunk@1017 e251c2fe-e539-e718-e476-b85c1f46cddb
This commit is contained in:
Zenexer 2011-03-30 04:04:57 +00:00
commit cbbe0d8beb
56 changed files with 1578 additions and 2421 deletions

View File

@ -628,13 +628,6 @@ is divided into following sections:
<param name="call.target" value="jar"/>
<param name="transfer.built-jar.properties" value="${built-jar.properties}"/>
</antcall>
<antcall target="-maybe-call-dep">
<param name="call.built.properties" value="${built-jar.properties}"/>
<param location="${project.EssentialsServerlist}" name="call.subproject"/>
<param location="${project.EssentialsServerlist}/build.xml" name="call.script"/>
<param name="call.target" value="jar"/>
<param name="transfer.built-jar.properties" value="${built-jar.properties}"/>
</antcall>
<antcall target="-maybe-call-dep">
<param name="call.built.properties" value="${built-jar.properties}"/>
<param location="${project.EssentialsSpawn}" name="call.subproject"/>
@ -1113,13 +1106,6 @@ is divided into following sections:
<param name="call.target" value="clean"/>
<param name="transfer.built-clean.properties" value="${built-clean.properties}"/>
</antcall>
<antcall target="-maybe-call-dep">
<param name="call.built.properties" value="${built-clean.properties}"/>
<param location="${project.EssentialsServerlist}" name="call.subproject"/>
<param location="${project.EssentialsServerlist}/build.xml" name="call.script"/>
<param name="call.target" value="clean"/>
<param name="transfer.built-clean.properties" value="${built-clean.properties}"/>
</antcall>
<antcall target="-maybe-call-dep">
<param name="call.built.properties" value="${built-clean.properties}"/>
<param location="${project.EssentialsSpawn}" name="call.subproject"/>

View File

@ -1,8 +1,8 @@
build.xml.data.CRC32=36e85771
build.xml.data.CRC32=60061751
build.xml.script.CRC32=7a797370
build.xml.stylesheet.CRC32=28e38971@1.42.1.45
# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
nbproject/build-impl.xml.data.CRC32=36e85771
nbproject/build-impl.xml.script.CRC32=eaedfa13
nbproject/build-impl.xml.data.CRC32=60061751
nbproject/build-impl.xml.script.CRC32=5fce336c
nbproject/build-impl.xml.stylesheet.CRC32=19debb58@1.42.1.45

View File

@ -0,0 +1,6 @@
compile.on.save=false
do.depend=false
do.jar=true
javac.debug=true
javadoc.preview=true
user.properties.file=C:\\Users\\Paul\\.netbeans\\7.0beta2\\build.properties

View File

@ -34,7 +34,6 @@ javac.classpath=\
${reference.EssentialsGroupBridge.jar}:\
${reference.EssentialsGroupManager.jar}:\
${reference.EssentialsProtect.jar}:\
${reference.EssentialsServerlist.jar}:\
${reference.EssentialsSpawn.jar}
# Space-separated list of extra javac options
javac.compilerargs=
@ -69,14 +68,12 @@ project.EssentialsChat=../EssentialsChat
project.EssentialsGroupBridge=../EssentialsGroupBridge
project.EssentialsGroupManager=../EssentialsGroupManager
project.EssentialsProtect=../EssentialsProtect
project.EssentialsServerlist=../EssentialsServerlist
project.EssentialsSpawn=../EssentialsSpawn
reference.Essentials.jar=${project.Essentials}/dist/Essentials.jar
reference.EssentialsChat.jar=${project.EssentialsChat}/dist/EssentialsChat.jar
reference.EssentialsGroupBridge.jar=${project.EssentialsGroupBridge}/dist/EssentialsGroupBridge.jar
reference.EssentialsGroupManager.jar=${project.EssentialsGroupManager}/dist/EssentialsGroupManager.jar
reference.EssentialsProtect.jar=${project.EssentialsProtect}/dist/original-EssentialsProtect.jar
reference.EssentialsServerlist.jar=${project.EssentialsServerlist}/dist/EssentialsServerlist.jar
reference.EssentialsSpawn.jar=${project.EssentialsSpawn}/dist/EssentialsSpawn.jar
run.classpath=\
${javac.classpath}:\

View File

@ -55,14 +55,6 @@
<clean-target>clean</clean-target>
<id>jar</id>
</reference>
<reference>
<foreign-project>EssentialsServerlist</foreign-project>
<artifact-type>jar</artifact-type>
<script>build.xml</script>
<target>jar</target>
<clean-target>clean</clean-target>
<id>jar</id>
</reference>
<reference>
<foreign-project>EssentialsSpawn</foreign-project>
<artifact-type>jar</artifact-type>

View File

@ -0,0 +1 @@
user.properties.file=C:\\Users\\Paul\\.netbeans\\7.0beta2\\build.properties

View File

@ -159,25 +159,23 @@ public class Essentials extends JavaPlugin
pm.registerEvent(Type.PLAYER_MOVE, playerListener, Priority.High, this);
pm.registerEvent(Type.PLAYER_LOGIN, playerListener, Priority.High, this);
pm.registerEvent(Type.PLAYER_TELEPORT, playerListener, Priority.High, this);
pm.registerEvent(Type.PLAYER_INTERACT, playerListener, Priority.Monitor, this);
blockListener = new EssentialsBlockListener(this);
pm.registerEvent(Type.SIGN_CHANGE, blockListener, Priority.Monitor, this);
pm.registerEvent(Type.BLOCK_RIGHTCLICKED, blockListener, Priority.Monitor, this);
pm.registerEvent(Type.BLOCK_INTERACT, blockListener, Priority.Monitor, this);
pm.registerEvent(Type.BLOCK_BREAK, blockListener, Priority.Monitor, this);
pm.registerEvent(Type.BLOCK_PLACED, blockListener, Priority.Monitor, this);
pm.registerEvent(Type.BLOCK_PLACE, blockListener, Priority.Monitor, this);
entityListener = new EssentialsEntityListener(this);
pm.registerEvent(Type.ENTITY_DAMAGED, entityListener, Priority.Lowest, this);
pm.registerEvent(Type.ENTITY_DAMAGE, entityListener, Priority.Lowest, this);
pm.registerEvent(Type.ENTITY_COMBUST, entityListener, Priority.Lowest, this);
pm.registerEvent(Type.ENTITY_DEATH, entityListener, Priority.Lowest, this);
jail = new Jail(this.getDataFolder());
confList.add(jail);
pm.registerEvent(Type.BLOCK_BREAK, jail, Priority.High, this);
pm.registerEvent(Type.BLOCK_DAMAGED, jail, Priority.High, this);
pm.registerEvent(Type.BLOCK_INTERACT, jail, Priority.High, this);
pm.registerEvent(Type.BLOCK_PLACED, jail, Priority.High, this);
pm.registerEvent(Type.BLOCK_DAMAGE, jail, Priority.High, this);
pm.registerEvent(Type.BLOCK_PLACE, jail, Priority.High, this);
attachEcoListeners();
@ -665,8 +663,6 @@ public class Essentials extends JavaPlugin
{
PluginManager pm = getServer().getPluginManager();
EssentialsEcoBlockListener blockListener = new EssentialsEcoBlockListener();
pm.registerEvent(Type.BLOCK_INTERACT, blockListener, Priority.Lowest, this);
pm.registerEvent(Type.BLOCK_RIGHTCLICKED, blockListener, Priority.High, this);
pm.registerEvent(Type.BLOCK_BREAK, blockListener, Priority.High, this);
pm.registerEvent(Type.SIGN_CHANGE, blockListener, Priority.Monitor, this);
}

View File

@ -1,21 +1,16 @@
package com.earth2me.essentials;
import java.util.ArrayList;
import java.util.List;
import net.minecraft.server.InventoryPlayer;
import org.bukkit.*;
import org.bukkit.block.*;
import org.bukkit.craftbukkit.block.CraftSign;
import org.bukkit.craftbukkit.inventory.CraftInventoryPlayer;
import org.bukkit.entity.Player;
import org.bukkit.event.block.*;
import org.bukkit.inventory.ItemStack;
public class EssentialsBlockListener extends BlockListener
{
private final Essentials parent;
private final static ArrayList<Material> protectedBlocks = new ArrayList<Material>(4);
public final static ArrayList<Material> protectedBlocks = new ArrayList<Material>(4);
static
{
@ -53,40 +48,6 @@ public class EssentialsBlockListener extends BlockListener
}
}
@Override
public void onBlockInteract(BlockInteractEvent event)
{
if (event.isCancelled()) return;
if (!(event.getEntity() instanceof Player)) return;
User user = User.get((Player)event.getEntity());
if (!Essentials.getSettings().areSignsDisabled() && protectedBlocks.contains(event.getBlock().getType()))
{
if (!user.isAuthorized("essentials.signs.protection.override"))
{
if (isBlockProtected(event.getBlock(), user))
{
event.setCancelled(true);
user.sendMessage("§cYou do not have permission to access that chest.");
return;
}
}
}
if (Essentials.getSettings().getBedSetsHome() && event.getBlock().getType() == Material.BED_BLOCK)
{
try
{
user.setHome();
user.sendMessage("§7Your home is now set to this bed.");
}
catch (Throwable ex)
{
}
}
}
@Override
public void onSignChange(SignChangeEvent event)
{
@ -146,60 +107,6 @@ public class EssentialsBlockListener extends BlockListener
}
}
@Override
public void onBlockRightClick(BlockRightClickEvent event)
{
User user = User.get(event.getPlayer());
if (user.isJailed()) return;
if (Essentials.getSettings().areSignsDisabled()) return;
if (event.getBlock().getType() != Material.WALL_SIGN && event.getBlock().getType() != Material.SIGN_POST)
return;
Sign sign = new CraftSign(event.getBlock());
try
{
if (sign.getLine(0).equals("§1[Free]") && user.isAuthorized("essentials.signs.free.use"))
{
ItemStack item = ItemDb.get(sign.getLine(1));
CraftInventoryPlayer inv = new CraftInventoryPlayer(new InventoryPlayer(user.getHandle()));
inv.clear();
item.setAmount(9 * 4 * 64);
inv.addItem(item);
user.showInventory(inv);
return;
}
if (sign.getLine(0).equals("§1[Disposal]") && user.isAuthorized("essentials.signs.disposal.use"))
{
CraftInventoryPlayer inv = new CraftInventoryPlayer(new InventoryPlayer(user.getHandle()));
inv.clear();
user.showInventory(inv);
return;
}
if (sign.getLine(0).equals("§1[Heal]") && user.isAuthorized("essentials.signs.heal.use"))
{
user.setHealth(20);
user.sendMessage("§7You have been healed.");
return;
}
if (sign.getLine(0).equals("§1[Mail]") && user.isAuthorized("essentials.signs.mail.use") && user.isAuthorized("essentials.mail"))
{
List<String> mail = Essentials.readMail(user);
if (mail.isEmpty())
{
user.sendMessage("§cYou do not have any mail!");
return;
}
for (String s : mail) user.sendMessage(s);
user.sendMessage("§cTo mark your mail as read, type §c/mail clear");
return;
}
}
catch (Throwable ex)
{
user.sendMessage("§cError: " + ex.getMessage());
}
}
@Override
public void onBlockPlace(BlockPlaceEvent event) {
Block signBlock = event.getBlockAgainst();
@ -230,7 +137,7 @@ public class EssentialsBlockListener extends BlockListener
private static final int ALLOWED = 1;
private static final int NOSIGN = 2;
private int checkProtectionSign(Block block, User user)
private static int checkProtectionSign(Block block, User user)
{
if (block.getType() == Material.SIGN_POST || block.getType() == Material.WALL_SIGN)
{
@ -255,7 +162,7 @@ public class EssentialsBlockListener extends BlockListener
return NOSIGN;
}
private Block[] getAdjacentBlocks(Block block)
private static Block[] getAdjacentBlocks(Block block)
{
return new Block[]
{
@ -268,7 +175,7 @@ public class EssentialsBlockListener extends BlockListener
};
}
private boolean isBlockProtected(Block block, User user)
public static boolean isBlockProtected(Block block, User user)
{
Block[] faces = getAdjacentBlocks(block);
boolean protect = false;

View File

@ -81,6 +81,7 @@ public class EssentialsConf extends Configuration
ostr.write(buffer, 0, length);
length = istr.read(buffer);
}
ostr.close();
istr.close();
}
catch (IOException ex)
@ -92,9 +93,7 @@ public class EssentialsConf extends Configuration
{
try
{
if (ostr != null) {
ostr.close();
}
ostr.close();
}
catch (IOException ex)
{

View File

@ -1,15 +1,11 @@
package com.earth2me.essentials;
import com.earth2me.essentials.Essentials;
import com.earth2me.essentials.ItemDb;
import com.earth2me.essentials.User;
import org.bukkit.Material;
import org.bukkit.block.Sign;
import org.bukkit.craftbukkit.block.CraftSign;
import org.bukkit.craftbukkit.inventory.CraftInventory;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.event.block.BlockListener;
import org.bukkit.event.block.BlockRightClickEvent;
import org.bukkit.event.block.SignChangeEvent;
import org.bukkit.inventory.ItemStack;
@ -69,132 +65,6 @@ public class EssentialsEcoBlockListener extends BlockListener
}
}
@Override
public void onBlockRightClick(BlockRightClickEvent event)
{
if (Essentials.getSettings().areSignsDisabled()) return;
User user = User.get(event.getPlayer());
if (event.getBlock().getType() != Material.WALL_SIGN && event.getBlock().getType() != Material.SIGN_POST)
return;
Sign sign = new CraftSign(event.getBlock());
if (sign.getLine(0).equals("§1[Buy]") && user.isAuthorized("essentials.signs.buy.use"))
{
try
{
int amount = Integer.parseInt(sign.getLine(1));
ItemStack item = ItemDb.get(sign.getLine(2), amount);
int cost = Integer.parseInt(sign.getLine(3).substring(1));
if (user.getMoney() < cost) throw new Exception("You do not have sufficient funds.");
user.takeMoney(cost);
user.getInventory().addItem(item);
user.updateInventory();
}
catch (Throwable ex)
{
user.sendMessage("§cError: " + ex.getMessage());
}
return;
}
if (sign.getLine(0).equals("§1[Sell]") && user.isAuthorized("essentials.signs.sell.use"))
{
try
{
int amount = Integer.parseInt(sign.getLine(1));
ItemStack item = ItemDb.get(sign.getLine(2), amount);
int cost = Integer.parseInt(sign.getLine(3).substring(1));
if (!InventoryWorkaround.containsItem((CraftInventory)user.getInventory(), true, item)) throw new Exception("You do not have enough items to sell.");
user.giveMoney(cost);
InventoryWorkaround.removeItem((CraftInventory)user.getInventory(), true, item);
user.updateInventory();
}
catch (Throwable ex)
{
user.sendMessage("§cError: " + ex.getMessage());
}
return;
}
if (sign.getLine(0).equals("§1[Trade]") && user.isAuthorized("essentials.signs.trade.use"))
{
try
{
String[] l1 = sign.getLines()[1].split("[ :-]+");
String[] l2 = sign.getLines()[2].split("[ :-]+");
boolean m1 = l1[0].matches("\\$[0-9]+");
boolean m2 = l2[0].matches("\\$[0-9]+");
int q1 = Integer.parseInt(m1 ? l1[0].substring(1) : l1[0]);
int q2 = Integer.parseInt(m2 ? l2[0].substring(1) : l2[0]);
int r1 = Integer.parseInt(l1[m1 ? 1 : 2]);
int r2 = Integer.parseInt(l2[m2 ? 1 : 2]);
r1 = r1 - r1 % q1;
r2 = r2 - r2 % q2;
if (q1 < 1 || q2 < 1) throw new Exception("Quantities must be greater than 0.");
ItemStack i1 = m1 || r1 <= 0? null : ItemDb.get(l1[1], r1);
ItemStack qi1 = m1 ? null : ItemDb.get(l1[1], q1);
ItemStack qi2 = m2 ? null : ItemDb.get(l2[1], q2);
if (user.getName().equals(sign.getLines()[3].substring(2)))
{
if (m1)
{
user.giveMoney(r1);
}
else if (i1 != null)
{
user.getInventory().addItem(i1);
user.updateInventory();
}
r1 = 0;
sign.setLine(1, (m1 ? "$" + q1 : q1 + " " + l1[1]) + ":" + r1);
}
else
{
if (m1)
{
if (user.getMoney() < q1)
throw new Exception("You do not have sufficient funds.");
}
else
{
if (!InventoryWorkaround.containsItem((CraftInventory)user.getInventory(), true, qi1))
throw new Exception("You do not have " + q1 + "x " + l1[1] + ".");
}
if (r2 < q2) throw new Exception("The trade sign does not have enough supply left.");
if (m1)
user.takeMoney(q1);
else
InventoryWorkaround.removeItem((CraftInventory)user.getInventory(), true, qi1);
if (m2)
user.giveMoney(q2);
else
user.getInventory().addItem(qi2);
user.updateInventory();
r1 += q1;
r2 -= q2;
sign.setLine(0, "§1[Trade]");
sign.setLine(1, (m1 ? "$" + q1 : q1 + " " + l1[1]) + ":" + r1);
sign.setLine(2, (m2 ? "$" + q2 : q2 + " " + l2[1]) + ":" + r2);
user.sendMessage("§7Trade completed.");
}
}
catch (Throwable ex)
{
user.sendMessage("§cError: " + ex.getMessage());
}
return;
}
}
@Override
public void onSignChange(SignChangeEvent event)
{

View File

@ -2,10 +2,16 @@ package com.earth2me.essentials;
import java.util.List;
import java.util.logging.Logger;
import net.minecraft.server.InventoryPlayer;
import org.bukkit.*;
import org.bukkit.block.Block;
import org.bukkit.block.Sign;
import org.bukkit.craftbukkit.block.CraftSign;
import org.bukkit.craftbukkit.inventory.CraftInventory;
import org.bukkit.craftbukkit.inventory.CraftInventoryPlayer;
import org.bukkit.event.player.*;
import org.bukkit.event.player.PlayerLoginEvent.Result;
import org.bukkit.inventory.ItemStack;
public class EssentialsPlayerListener extends PlayerListener
@ -20,6 +26,224 @@ public class EssentialsPlayerListener extends PlayerListener
this.server = parent.getServer();
}
private void onPlayerInteractEco(PlayerInteractEvent event)
{
if (Essentials.getSettings().areSignsDisabled()) return;
User user = User.get(event.getPlayer());
if (event.getClickedBlock().getType() != Material.WALL_SIGN && event.getClickedBlock().getType() != Material.SIGN_POST)
return;
Sign sign = new CraftSign(event.getClickedBlock());
if (sign.getLine(0).equals("§1[Buy]") && user.isAuthorized("essentials.signs.buy.use"))
{
try
{
int amount = Integer.parseInt(sign.getLine(1));
ItemStack item = ItemDb.get(sign.getLine(2), amount);
int cost = Integer.parseInt(sign.getLine(3).substring(1));
if (user.getMoney() < cost) throw new Exception("You do not have sufficient funds.");
user.takeMoney(cost);
user.getInventory().addItem(item);
user.updateInventory();
}
catch (Throwable ex)
{
user.sendMessage("§cError: " + ex.getMessage());
}
return;
}
if (sign.getLine(0).equals("§1[Sell]") && user.isAuthorized("essentials.signs.sell.use"))
{
try
{
int amount = Integer.parseInt(sign.getLine(1));
ItemStack item = ItemDb.get(sign.getLine(2), amount);
int cost = Integer.parseInt(sign.getLine(3).substring(1));
if (!InventoryWorkaround.containsItem((CraftInventory)user.getInventory(), true, item)) throw new Exception("You do not have enough items to sell.");
user.giveMoney(cost);
InventoryWorkaround.removeItem((CraftInventory)user.getInventory(), true, item);
user.updateInventory();
}
catch (Throwable ex)
{
user.sendMessage("§cError: " + ex.getMessage());
}
return;
}
if (sign.getLine(0).equals("§1[Trade]") && user.isAuthorized("essentials.signs.trade.use"))
{
try
{
String[] l1 = sign.getLines()[1].split("[ :-]+");
String[] l2 = sign.getLines()[2].split("[ :-]+");
boolean m1 = l1[0].matches("\\$[0-9]+");
boolean m2 = l2[0].matches("\\$[0-9]+");
int q1 = Integer.parseInt(m1 ? l1[0].substring(1) : l1[0]);
int q2 = Integer.parseInt(m2 ? l2[0].substring(1) : l2[0]);
int r1 = Integer.parseInt(l1[m1 ? 1 : 2]);
int r2 = Integer.parseInt(l2[m2 ? 1 : 2]);
r1 = r1 - r1 % q1;
r2 = r2 - r2 % q2;
if (q1 < 1 || q2 < 1) throw new Exception("Quantities must be greater than 0.");
ItemStack i1 = m1 || r1 <= 0 ? null : ItemDb.get(l1[1], r1);
ItemStack qi1 = m1 ? null : ItemDb.get(l1[1], q1);
ItemStack qi2 = m2 ? null : ItemDb.get(l2[1], q2);
if (user.getName().equals(sign.getLines()[3].substring(2)))
{
if (m1)
{
user.giveMoney(r1);
}
else if (i1 != null)
{
user.getInventory().addItem(i1);
user.updateInventory();
}
r1 = 0;
sign.setLine(1, (m1 ? "$" + q1 : q1 + " " + l1[1]) + ":" + r1);
}
else
{
if (m1)
{
if (user.getMoney() < q1)
throw new Exception("You do not have sufficient funds.");
}
else
{
if (!InventoryWorkaround.containsItem((CraftInventory)user.getInventory(), true, qi1))
throw new Exception("You do not have " + q1 + "x " + l1[1] + ".");
}
if (r2 < q2) throw new Exception("The trade sign does not have enough supply left.");
if (m1)
user.takeMoney(q1);
else
InventoryWorkaround.removeItem((CraftInventory)user.getInventory(), true, qi1);
if (m2)
user.giveMoney(q2);
else
user.getInventory().addItem(qi2);
user.updateInventory();
r1 += q1;
r2 -= q2;
sign.setLine(0, "§1[Trade]");
sign.setLine(1, (m1 ? "$" + q1 : q1 + " " + l1[1]) + ":" + r1);
sign.setLine(2, (m2 ? "$" + q2 : q2 + " " + l2[1]) + ":" + r2);
user.sendMessage("§7Trade completed.");
}
}
catch (Throwable ex)
{
user.sendMessage("§cError: " + ex.getMessage());
}
return;
}
}
@Override
public void onPlayerInteract(PlayerInteractEvent event)
{
if (event.isCancelled()) return;
User user = User.get(event.getPlayer());
if (user.isJailed())
{
event.setCancelled(true);
return;
}
onPlayerInteractEco(event);
onPlayerInteractSigns(event);
if (!Essentials.getSettings().areSignsDisabled() && EssentialsBlockListener.protectedBlocks.contains(event.getClickedBlock().getType()))
{
if (!user.isAuthorized("essentials.signs.protection.override"))
{
if (EssentialsBlockListener.isBlockProtected(event.getClickedBlock(), user))
{
event.setCancelled(true);
user.sendMessage("§cYou do not have permission to access that chest.");
return;
}
}
}
if (Essentials.getSettings().getBedSetsHome() && event.getClickedBlock().getType() == Material.BED_BLOCK)
{
try
{
user.setHome();
user.sendMessage("§7Your home is now set to this bed.");
}
catch (Throwable ex)
{
}
}
}
private void onPlayerInteractSigns(PlayerInteractEvent event)
{
User user = User.get(event.getPlayer());
if (user.isJailed()) return;
if (Essentials.getSettings().areSignsDisabled()) return;
if (event.getClickedBlock().getType() != Material.WALL_SIGN && event.getClickedBlock().getType() != Material.SIGN_POST)
return;
Sign sign = new CraftSign(event.getClickedBlock());
try
{
if (sign.getLine(0).equals("§1[Free]") && user.isAuthorized("essentials.signs.free.use"))
{
ItemStack item = ItemDb.get(sign.getLine(1));
CraftInventoryPlayer inv = new CraftInventoryPlayer(new InventoryPlayer(user.getHandle()));
inv.clear();
item.setAmount(9 * 4 * 64);
inv.addItem(item);
user.showInventory(inv);
return;
}
if (sign.getLine(0).equals("§1[Disposal]") && user.isAuthorized("essentials.signs.disposal.use"))
{
CraftInventoryPlayer inv = new CraftInventoryPlayer(new InventoryPlayer(user.getHandle()));
inv.clear();
user.showInventory(inv);
return;
}
if (sign.getLine(0).equals("§1[Heal]") && user.isAuthorized("essentials.signs.heal.use"))
{
user.setHealth(20);
user.sendMessage("§7You have been healed.");
return;
}
if (sign.getLine(0).equals("§1[Mail]") && user.isAuthorized("essentials.signs.mail.use") && user.isAuthorized("essentials.mail"))
{
List<String> mail = Essentials.readMail(user);
if (mail.isEmpty())
{
user.sendMessage("§cYou do not have any mail!");
return;
}
for (String s : mail) user.sendMessage(s);
user.sendMessage("§cTo mark your mail as read, type §c/mail clear");
return;
}
}
catch (Throwable ex)
{
user.sendMessage("§cError: " + ex.getMessage());
}
}
@Override
public void onPlayerRespawn(PlayerRespawnEvent event)
{
@ -99,9 +323,12 @@ public class EssentialsPlayerListener extends PlayerListener
event.setFrom(loc);
event.setTo(loc);
try {
try
{
user.teleportToNow(loc);
} catch (Exception ex) {
}
catch (Exception ex)
{
user.sendMessage(ex.getMessage());
}
user.setJustPortaled(true);
@ -115,12 +342,11 @@ public class EssentialsPlayerListener extends PlayerListener
}
@Override
public void onPlayerQuit(PlayerEvent event)
public void onPlayerQuit(PlayerQuitEvent event)
{
if (!Essentials.getSettings().getReclaimSetting())
{
return;
}
User.get(event.getPlayer()).dispose();
Thread thread = new Thread(new Runnable()
{
@ -149,7 +375,7 @@ public class EssentialsPlayerListener extends PlayerListener
}
@Override
public void onPlayerJoin(PlayerEvent event)
public void onPlayerJoin(PlayerJoinEvent event)
{
Essentials.getStatic().backup.onPlayerJoin();
User user = User.get(event.getPlayer());
@ -186,7 +412,7 @@ public class EssentialsPlayerListener extends PlayerListener
User user = User.get(event.getPlayer());
if (event.getResult() != Result.ALLOWED)
return;
if (user.isBanned())
{
event.disallow(Result.KICK_BANNED, "The Ban Hammer has spoken!");
@ -215,7 +441,7 @@ public class EssentialsPlayerListener extends PlayerListener
}
@Override
public void onPlayerTeleport(PlayerMoveEvent event)
public void onPlayerTeleport(PlayerTeleportEvent event)
{
User user = User.get(event.getPlayer());
if (user.currentJail == null || user.currentJail.isEmpty())

View File

@ -7,23 +7,25 @@ import java.util.Map;
import java.util.logging.Logger;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.entity.Player;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.event.block.BlockDamageEvent;
import org.bukkit.event.block.BlockInteractEvent;
import org.bukkit.event.block.BlockListener;
import org.bukkit.event.block.BlockPlaceEvent;
public class Jail extends BlockListener implements IConf {
public class Jail extends BlockListener implements IConf
{
private static final Logger logger = Logger.getLogger("Minecraft");
private EssentialsConf config;
public Jail(File dataFolder) {
public Jail(File dataFolder)
{
config = new EssentialsConf(new File(dataFolder, "jail.yml"));
config.load();
}
public void setJail(Location loc, String jailName) throws Exception {
public void setJail(Location loc, String jailName) throws Exception
{
Map<String, Object> map = new HashMap<String, Object>();
map.put("world", loc.getWorld().getName());
map.put("x", loc.getX());
@ -35,8 +37,10 @@ public class Jail extends BlockListener implements IConf {
config.save();
}
public Location getJail(String jailName) throws Exception {
if (config.getProperty(jailName.toLowerCase()) == null) {
public Location getJail(String jailName) throws Exception
{
if (config.getProperty(jailName.toLowerCase()) == null)
{
throw new Exception("That jail does not exist");
}
@ -45,10 +49,12 @@ public class Jail extends BlockListener implements IConf {
double x = config.getDouble(jailName + ".x", 0); // wh.spawnX
double y = config.getDouble(jailName + ".y", 0); // wh.spawnY
double z = config.getDouble(jailName + ".z", 0); // wh.spawnZ
float yaw = (float) config.getDouble(jailName + ".yaw", 0);
float pitch = (float) config.getDouble(jailName + ".pitch", 0);
for (World w : Essentials.getStatic().getServer().getWorlds()) {
if (w.getName().equalsIgnoreCase(world)) {
float yaw = (float)config.getDouble(jailName + ".yaw", 0);
float pitch = (float)config.getDouble(jailName + ".pitch", 0);
for (World w : Essentials.getStatic().getServer().getWorlds())
{
if (w.getName().equalsIgnoreCase(world))
{
jWorld = w;
break;
}
@ -57,41 +63,34 @@ public class Jail extends BlockListener implements IConf {
return new Location(jWorld, x, y, z, yaw, pitch);
}
public void sendToJail(User user, String jail) throws Exception {
user.teleportTo(getJail(jail));
public void sendToJail(User user, String jail) throws Exception
{
user.teleport(getJail(jail));
user.currentJail = jail;
}
public void delJail(String jail) throws Exception {
public void delJail(String jail) throws Exception
{
config.removeProperty(jail.toLowerCase());
config.save();
}
public List<String> getJails() throws Exception {
public List<String> getJails() throws Exception
{
return config.getKeys(null);
}
public void reloadConfig() {
public void reloadConfig()
{
config.load();
}
@Override
public void onBlockBreak(BlockBreakEvent event)
{
User user = User.get(event.getPlayer());
if (user.isJailed()) {
event.setCancelled(true);
}
}
@Override
public void onBlockInteract(BlockInteractEvent event)
{
if (!event.isPlayer()) {
return;
}
User user = User.get((Player)event.getEntity());
if (user.isJailed()) {
if (user.isJailed())
{
event.setCancelled(true);
}
}
@ -100,15 +99,18 @@ public class Jail extends BlockListener implements IConf {
public void onBlockPlace(BlockPlaceEvent event)
{
User user = User.get(event.getPlayer());
if (user.isJailed()) {
if (user.isJailed())
{
event.setCancelled(true);
}
}
@Override
public void onBlockDamage(BlockDamageEvent event) {
public void onBlockDamage(BlockDamageEvent event)
{
User user = User.get(event.getPlayer());
if (user.isJailed()) {
if (user.isJailed())
{
event.setCancelled(true);
}
}

View File

@ -283,4 +283,69 @@ public class OfflinePlayer implements Player
public void sendRawMessage(String string) {
throw new UnsupportedOperationException("Not supported yet.");
}
public Location getCompassTarget()
{
throw new UnsupportedOperationException("Not supported yet.");
}
public int getMaximumNoDamageTicks()
{
throw new UnsupportedOperationException("Not supported yet.");
}
public void setMaximumNoDamageTicks(int i)
{
throw new UnsupportedOperationException("Not supported yet.");
}
public int getLastDamage()
{
throw new UnsupportedOperationException("Not supported yet.");
}
public void setLastDamage(int i)
{
throw new UnsupportedOperationException("Not supported yet.");
}
public int getNoDamageTicks()
{
throw new UnsupportedOperationException("Not supported yet.");
}
public void setNoDamageTicks(int i)
{
throw new UnsupportedOperationException("Not supported yet.");
}
public boolean teleport(Location lctn)
{
throw new UnsupportedOperationException("Not supported yet.");
}
public boolean teleport(Entity entity)
{
throw new UnsupportedOperationException("Not supported yet.");
}
public Entity getPassenger()
{
throw new UnsupportedOperationException("Not supported yet.");
}
public boolean setPassenger(Entity entity)
{
throw new UnsupportedOperationException("Not supported yet.");
}
public boolean isEmpty()
{
throw new UnsupportedOperationException("Not supported yet.");
}
public boolean eject()
{
throw new UnsupportedOperationException("Not supported yet.");
}
}

View File

@ -154,15 +154,15 @@ public class PlayerWrapper implements Player
}
@Override
public void teleportTo(Location lctn)
public boolean teleport(Location lctn)
{
base.teleportTo(lctn);
return base.teleport(lctn);
}
@Override
public void teleportTo(Entity entity)
public boolean teleport(Entity entity)
{
base.teleportTo(entity);
return base.teleport(entity);
}
@Override
@ -329,7 +329,88 @@ public class PlayerWrapper implements Player
return base.getEyeLocation();
}
@Override
public void sendRawMessage(String string) {
base.sendRawMessage(string);
}
@Override
public Location getCompassTarget()
{
return base.getCompassTarget();
}
@Override
public int getMaximumNoDamageTicks()
{
return base.getMaximumNoDamageTicks();
}
@Override
public void setMaximumNoDamageTicks(int i)
{
base.setMaximumNoDamageTicks(i);
}
@Override
public int getLastDamage()
{
return base.getLastDamage();
}
@Override
public void setLastDamage(int i)
{
base.setLastDamage(i);
}
@Override
public int getNoDamageTicks()
{
return base.getNoDamageTicks();
}
@Override
public void setNoDamageTicks(int i)
{
base.setNoDamageTicks(i);
}
@Override
public Entity getPassenger()
{
return base.getPassenger();
}
@Override
public boolean setPassenger(Entity entity)
{
return base.setPassenger(entity);
}
@Override
public boolean isEmpty()
{
return base.isEmpty();
}
@Override
public boolean eject()
{
return base.eject();
}
@Override
@Deprecated
public void teleportTo(Location lctn)
{
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
@Deprecated
public void teleportTo(Entity entity)
{
throw new UnsupportedOperationException("Not supported yet.");
}
}

View File

@ -91,7 +91,7 @@ public class User extends PlayerExtension implements Comparable<User>
public void respawn(Spawn spawn, final String chargeFor) throws Exception
{
teleportTo(getSafeDestination(spawn.getSpawn(getGroup())), chargeFor);
teleport(getSafeDestination(spawn.getSpawn(getGroup())), chargeFor);
}
private User update(Player base)
@ -383,7 +383,7 @@ public class User extends PlayerExtension implements Comparable<User>
cancelTeleport(false);
}
public void teleportTo(final Location loc, final String chargeFor)
public boolean teleport(final Location loc, final String chargeFor)
{
final long delay = Essentials.getSettings().getTeleportDelay();
@ -393,13 +393,13 @@ public class User extends PlayerExtension implements Comparable<User>
{
if (chargeFor != null) charge(chargeFor);
teleportCooldown(false);
teleportToNow(loc);
return teleportToNow(loc);
}
catch (Throwable ex)
{
sendMessage("§cError: " + ex.getMessage());
return false;
}
return;
}
cancelTeleport();
@ -424,15 +424,16 @@ public class User extends PlayerExtension implements Comparable<User>
cancelTeleport();
}
}, 10, 10);
return true;
}
@Override
public void teleportTo(final Location loc)
public boolean teleport(final Location loc)
{
teleportTo(loc, null);
return teleport(loc, null);
}
public void teleportTo(final Entity entity, final String chargeFor)
public boolean teleport(final Entity entity, final String chargeFor)
{
final long delay = Essentials.getSettings().getTeleportDelay();
@ -442,13 +443,13 @@ public class User extends PlayerExtension implements Comparable<User>
{
if (chargeFor != null) charge(chargeFor);
teleportCooldown(false);
teleportToNow(entity);
return teleportToNow(entity);
}
catch (Throwable ex)
{
sendMessage("§cError: " + ex.getMessage());
return false;
}
return;
}
cancelTeleport();
@ -473,12 +474,13 @@ public class User extends PlayerExtension implements Comparable<User>
cancelTeleport();
}
}, 10, 10);
return true;
}
@Override
public void teleportTo(final Entity entity)
public boolean teleport(final Entity entity)
{
teleportTo(entity, null);
return teleport(entity, null);
}
public Location getHome() throws Exception
@ -579,23 +581,23 @@ public class User extends PlayerExtension implements Comparable<User>
teleportToHome(null);
}
public void teleportToNow(Location loc) throws Exception
public boolean teleportToNow(Location loc) throws Exception
{
cancelTeleport();
lastLocation = getLocation();
getBase().teleportTo(getSafeDestination(loc));
return getBase().teleport(getSafeDestination(loc));
}
public void teleportToNow(Entity entity)
public boolean teleportToNow(Entity entity)
{
cancelTeleport();
lastLocation = getLocation();
getBase().teleportTo(entity);
return getBase().teleport(entity);
}
public void teleportBack(final String chargeFor)
{
teleportTo(lastLocation, chargeFor);
teleport(lastLocation, chargeFor);
}
public void teleportBack()
@ -667,7 +669,7 @@ public class User extends PlayerExtension implements Comparable<User>
{
lastLocation = getLocation();
Location loc = Essentials.getWarps().getWarp(warp);
teleportTo(loc, chargeFor);
teleport(loc, chargeFor);
sendMessage("§7Warping to " + warp + ".");
}

View File

@ -45,6 +45,6 @@ public class Commandjump extends EssentialsCommand
}
user.canAfford(this);
user.teleportTo(loc, this.getName());
user.teleport(loc, this.getName());
}
}

View File

@ -21,6 +21,11 @@ public class Commandme extends EssentialsCommand
@Override
public void run(Server server, Essentials parent, User user, String commandLabel, String[] args) throws Exception
{
if (user.isMuted())
{ user.sendMessage("§7Your voice has been silenced");
return;
}
if (args.length < 1)
{
user.sendMessage("§cUsage: /me [description]");

View File

@ -20,7 +20,7 @@ public class Commandtop extends EssentialsCommand
int topZ = user.getLocation().getBlockZ();
int topY = user.getWorld().getHighestBlockYAt(topX, topZ);
user.charge(this);
user.teleportTo(new Location(user.getWorld(), user.getLocation().getX(), topY + 1, user.getLocation().getZ()), this.getName());
user.teleport(new Location(user.getWorld(), user.getLocation().getX(), topY + 1, user.getLocation().getZ()), this.getName());
user.sendMessage("§7Teleporting to top.");
}
}

View File

@ -28,7 +28,7 @@ public class Commandtp extends EssentialsCommand
if (!p.isTeleEnabled()) throw new Exception(p.getDisplayName() + " has teleportation disabled.");
user.sendMessage("§7Teleporting...");
user.canAfford(this);
user.teleportTo(p, this.getName());
user.teleport(p, this.getName());
break;
case 2:

View File

@ -27,14 +27,14 @@ public class Commandtpaccept extends EssentialsCommand
user.canAfford(this);
user.sendMessage("§7Teleport request accepted.");
p.sendMessage("§7Teleport request accepted.");
user.teleportTo(p, this.getName());
user.teleport(p, this.getName());
}
else
{
user.canAfford(this);
user.sendMessage("§7Teleport request accepted.");
p.sendMessage("§7Teleport request accepted.");
p.teleportTo(user, this.getName());
p.teleport(user, this.getName());
}
}
}

View File

@ -37,6 +37,6 @@ public class Commandtppos extends EssentialsCommand
user.canAfford(this);
user.teleportCooldown();
user.sendMessage("§7Teleporting...");
user.teleportTo(user.getSafeDestination(l), this.getName());
user.teleport(user.getSafeDestination(l), this.getName());
}
}

View File

@ -34,9 +34,9 @@ public class Commandwhois extends EssentialsCommand
sender.sendMessage("");
sender.sendMessage(u.getDisplayName() + " is " + u.getName());
sender.sendMessage(ChatColor.BLUE + " - Health: " + u.getHealth() + "/20");
sender.sendMessage(ChatColor.BLUE + " - Location: (" + u.getLocation().getWorld().getName() + ", " + u.getLocation().getBlockX() + ", " + u.getLocation().getBlockY() + ", " + u.getLocation().getBlockZ() + ")");
sender.sendMessage(ChatColor.BLUE + " - Location: (" + u.getLocation().getBlockX() + ", " + u.getLocation().getBlockY() + ", " + u.getLocation().getBlockZ() + ")");
if (!parent.getConfiguration().getBoolean("disable-eco", false)) sender.sendMessage(ChatColor.BLUE + " - Money: $" + u.getMoney());
sender.sendMessage(ChatColor.BLUE + " - Status: " + (parent.away.contains(u) ? "§cAway§f" : "Available"));
sender.sendMessage(ChatColor.BLUE + " - Status: " + (parent.away.contains(u) ? "§cAway" : "Available"));
sender.sendMessage(ChatColor.BLUE + " - IP Address: " + u.getAddress().getAddress().toString());
}

View File

@ -62,6 +62,6 @@ public class Commandworld extends EssentialsCommand
user.canAfford(this);
user.teleportCooldown();
user.teleportTo(loc, this.getName());
user.teleport(loc, this.getName());
}
}

View File

@ -268,7 +268,7 @@ protect:
mysqlDb: 'jdbc:mysql://localhost:3306/minecraft'
# For which block types would you like to be alerted?
# You can find a list of IDs in plugins/Essentials/Items.db after loading Essentials for the first time.
# You can find a list of IDs in plugins/Essentials/Items.csv after loading Essentials for the first time.
alert:
# 10: lava
# 11: still lava
@ -347,7 +347,7 @@ protect:
# Should damage via lava be disabled? Items that fall into lava will still burn to a crisp. ;)
lavadmg: false
# Should arrows cause damage?
# Should arrow damage be disabled
projectiles: false
# This will disable damage from touching cacti.

View File

@ -28,62 +28,14 @@ ironore,15,0
iore,15,0
coalore,16,0
core,16,0
tree,17,0
log,17,0
trunk,17,0
wood,17,0
redtree,17,1
redlog,17,1
redtrunk,17,1
redwood,17,1
darktree,17,1
darklog,17,1
darktrunk,17,1
darkwood,17,1
blacktree,17,1
blacklog,17,1
blacktrunk,17,1
blackwood,17,1
rtree,17,1
rlog,17,1
rtrunk,17,1
rwood,17,1
dtree,17,1
dlog,17,1
dtrunk,17,1
dwood,17,1
bltree,17,1
bllog,17,1
bltrunk,17,1
blwood,17,1
birchtree,17,2
birchlog,17,2
birchtrunk,17,2
birchwood,17,2
pandatree,17,2
pandalog,17,2
pandatrunk,17,2
pandawood,17,2
whitetree,17,2
whitelog,17,2
whitetrunk,17,2
whitewood,17,2
bitree,17,2
bilog,17,2
bitrunk,17,2
biwood,17,2
btree,17,2
blog,17,2
btrunk,17,2
bwood,17,2
ptree,17,2
plog,17,2
ptrunk,17,2
pwood,17,2
wtree,17,2
wlog,17,2
wtrunk,17,2
wwood,17,2
redwood,5,1
rwood,5,1
birchwood,5,2
birch,5,2
bwood,5,2
leaves,18,0
sponge,19,0
glass,20,0

1 #item id metadata
28 iore 15 0
29 coalore 16 0
30 core 16 0
tree 17 0
31 log 17 0
32 trunk 17 0
33 wood 17 0
34 redtree redwood 17 5 1
35 redlog rwood 17 5 1
36 redtrunk birchwood 17 5 1 2
37 redwood birch 17 5 1 2
38 darktree bwood 17 5 1 2
darklog 17 1
darktrunk 17 1
darkwood 17 1
blacktree 17 1
blacklog 17 1
blacktrunk 17 1
blackwood 17 1
rtree 17 1
rlog 17 1
rtrunk 17 1
rwood 17 1
dtree 17 1
dlog 17 1
dtrunk 17 1
dwood 17 1
bltree 17 1
bllog 17 1
bltrunk 17 1
blwood 17 1
birchtree 17 2
birchlog 17 2
birchtrunk 17 2
birchwood 17 2
pandatree 17 2
pandalog 17 2
pandatrunk 17 2
pandawood 17 2
whitetree 17 2
whitelog 17 2
whitetrunk 17 2
whitewood 17 2
bitree 17 2
bilog 17 2
bitrunk 17 2
biwood 17 2
btree 17 2
blog 17 2
btrunk 17 2
bwood 17 2
ptree 17 2
plog 17 2
ptrunk 17 2
pwood 17 2
wtree 17 2
wlog 17 2
wtrunk 17 2
wwood 17 2
39 leaves 18 0
40 sponge 19 0
41 glass 20 0

View File

@ -0,0 +1 @@
user.properties.file=C:\\Users\\Paul\\.netbeans\\7.0beta2\\build.properties

View File

@ -2,10 +2,7 @@ package com.earth2me.essentials.chat;
import com.earth2me.essentials.Essentials;
import org.bukkit.Server;
import org.bukkit.event.player.PlayerChatEvent;
import org.bukkit.event.player.PlayerEvent;
import org.bukkit.event.player.PlayerListener;
import org.bukkit.event.player.PlayerRespawnEvent;
import org.bukkit.event.player.*;
public class EssentialsChatPlayerListener extends PlayerListener
@ -19,7 +16,7 @@ public class EssentialsChatPlayerListener extends PlayerListener
@Override
@SuppressWarnings("CallToThreadDumpStack")
public void onPlayerJoin(PlayerEvent event)
public void onPlayerJoin(PlayerJoinEvent event)
{
try
{

View File

@ -0,0 +1 @@
user.properties.file=C:\\Users\\Paul\\.netbeans\\7.0beta2\\build.properties

View File

@ -0,0 +1 @@
user.properties.file=C:\\Users\\Paul\\.netbeans\\7.0beta2\\build.properties

View File

@ -1,144 +1,172 @@
# "For a more advanced configuration example utilizing the advanced features of GroupManager, se http://pastebin.com/MeCpqVZv"
groups:
Default:
default: true
permissions:
- essentials.help
- essentials.helpop
- essentials.list
- essentials.motd
- essentials.rules
- essentials.spawn
inheritance: []
info:
prefix: '&e'
build: false
suffix: ''
SemiAdmin:
default: false
permissions:
- essentials.clearinventory
- essentials.cooldown.bypass
- essentials.deljail
- essentials.give
- essentials.god
- essentials.heal
- essentials.heal.others
- essentials.invsee
- essentials.item
- essentials.jails
- essentials.kit.*
- essentials.mute
- essentials.reloadall
- essentials.setjail
- essentials.signs.disposal.create
- essentials.spawmob
- essentials.togglejail
- groupmanager.*
inheritance:
- moderator
info:
prefix: '&1'
build: true
suffix: ''
Builder:
default: false
permissions:
- essentials.afk
- essentials.back.death
- essentials.balance
- essentials.chat.shout
- essentials.home
- essentials.kit
- essentials.kit.tools
- essentials.mail
- essentials.mail.send
- essentials.me
- essentials.msg
- essentials.nick
- essentials.pay
- essentials.portal
- essentials.protect
- essentials.sell
- essentials.sethome
- essentials.signs.buy.use
- essentials.signs.disposal.use
- essentials.signs.free.use
- essentials.signs.heal.use
- essentials.signs.mail.create
- essentials.signs.mail.use
- essentials.signs.protection.create
- essentials.signs.protection.use
- essentials.signs.sell.use
- essentials.signs.trade.create
- essentials.signs.trade.use
- essentials.tpa
- essentials.tpaccept
- essentials.tpahere
- essentials.tpdeny
- essentials.warp
- essentials.warp.list
- essentials.worth
inheritance:
- default
info:
prefix: '&5'
build: true
suffix: ''
Moderator:
default: false
permissions:
- essentials.back
- essentials.ban
- essentials.banip
- essentials.broadcast
- essentials.compass
- essentials.delwarp
- essentials.depth
- essentials.eco
- essentials.getpos
- essentials.jump
- essentials.kick
- essentials.kill
- essentials.setwarp
- essentials.time
- essentials.togglejail
- essentials.top
- essentials.tp
- essentials.tpa
- essentials.tpaaccept
- essentials.tpahere
- essentials.tpdeny
- essentials.tphere
- essentials.tpo
- essentials.tpohere
- essentials.tppos
- essentials.tptoggle
- essentials.unban
- essentials.unbanip
- essentials.whois
- essentials.world
- groupmanager.listgroups
- groupmanager.mandemote
- groupmanager.manload
- groupmanager.manpromote
- groupmanager.mansave
- groupmanager.manselect
- groupmanager.manuadd
- groupmanager.manudel
inheritance:
- builder
info:
prefix: '&9'
build: true
suffix: ''
Admin:
default: false
permissions:
- '*'
inheritance:
- semiadmin
info:
prefix: '&4'
build: true
suffix: ''
groups:
Default:
default: true
permissions:
- essentials.help
- essentials.home
- essentials.motd
- essentials.sethome
- essentials.spawn
inheritance: []
info:
prefix: ''
build: false
suffix: ''
SemiAdmin:
default: false
permissions:
- +groupmanager.mandemote
- +groupmanager.manpromote
- -groupmanager.*
- '*'
inheritance:
- moderator
info:
prefix: '&c'
build: true
suffix: SemiAdmin
RedFaction:
default: false
permissions: []
inheritance:
- peasant
info:
prefix: '&c'
roles-category: faction
build: true
suffix: Red
Farmer:
default: false
permissions:
- essentials.kit
- essentials.kit.farmer
- essentials.spawnmob
inheritance: []
info:
roles-requirement:
- BlueFaction
- RedFaction
prefix: ''
roles-category: job
build: false
suffix: ''
Healer:
default: false
permissions:
- essentials.kit
- essentials.kit.healer
- essentials.heal
inheritance: []
info:
roles-requirement:
- BlueFaction
- RedFaction
prefix: ''
roles-category: job
build: false
suffix: ''
Fighter:
default: false
permissions:
- essentials.kit
- essentials.kit.fighter
inheritance: []
info:
prefix: ''
roles-category: skill
build: false
suffix: ''
Admin:
default: false
permissions:
- '*'
inheritance:
- semiadmin
info:
prefix: ''
build: true
suffix: ''
Miner:
default: false
permissions:
- essentials.kit
- essentials.kit.miner
- flashlight.regular
inheritance: []
info:
roles-requirement:
- BlueFaction
- RedFaction
prefix: ''
roles-category: job
build: false
suffix: ''
FlyingMan:
default: false
permissions:
- nocheat.moving
inheritance: []
info:
roles-requirement: Fighter&SuperCart
prefix: ''
roles-category: skill
build: false
suffix: ''
Peasant:
default: false
permissions:
- roles.joinrole
- roles.leaverole
- roles.myroles
inheritance:
- default
info:
prefix: '&e'
build: true
suffix: Peasant
BlueFaction:
default: false
permissions: []
inheritance:
- peasant
info:
prefix: '&d'
roles-category: faction
build: true
suffix: Blue
Railer:
default: false
permissions:
- essentials.kit
- essentials.kit.railer
inheritance: []
info:
roles-requirement: Miner
prefix: ''
roles-category: subjob
build: false
suffix: ''
SuperCart:
default: false
permissions:
- minecartmania.*
inheritance: []
info:
roles-requirement: Railer
prefix: ''
roles-category: skill
build: false
suffix: ''
Moderator:
default: false
permissions:
- essentials.tp
- essentials.tphere
- essentials.item
- essentials.give
inheritance:
- default
info:
prefix: '&c'
build: true
suffix: Mod

View File

@ -1,15 +1,59 @@
# "For a more advanced configuration example utilizing the advanced features of GroupManager, see http://pastebin.com/a8ZA0j5G"
users:
kimkandor:
subgroups: []
permissions: []
group: Admin
mudzereli:
subgroups: []
permissions: []
group: Builder
zenexer:
subgroups: []
permissions: []
group: Admin
users:
aMiner:
subgroups:
- Miner
permissions: []
group: BlueFaction
info:
prefix: '&d'
suffix: Miner
gmcouto:
subgroups: []
permissions: []
group: SemiAdmin
tempRailer:
subgroups:
- Miner
- Railer
permissions: []
group: BlueFaction
info:
prefix: '&d'
suffix: Miner
anjocaido:
subgroups: []
permissions: []
group: Admin
info:
prefix: '&c'
suffix: King
aFarmer:
subgroups:
- Farmer
permissions: []
group: RedFaction
info:
prefix: '&d'
suffix: Farmer
zenexer:
subgroups: []
permissions:
- essentials.god
group: Moderator
Teste:
subgroups:
- Miner
- Railer
- SuperCart
- Fighter
- FlyingMan
permissions: []
group: BlueFaction
aHealer:
subgroups:
- Healer
permissions: []
group: RedFaction
info:
prefix: '&d'
suffix: Healer

View File

@ -0,0 +1 @@
user.properties.file=C:\\Users\\Paul\\.netbeans\\7.0beta2\\build.properties

View File

@ -26,6 +26,7 @@ dist.jar=${dist.dir}/original-EssentialsProtect.jar
dist.javadoc.dir=${dist.dir}/javadoc
endorsed.classpath=
excludes=
file.reference.c3p0-0.9.1.2.jar=..\\lib\\c3p0-0.9.1.2.jar
file.reference.craftbukkit-0.0.1-SNAPSHOT.jar=..\\lib\\craftbukkit-0.0.1-SNAPSHOT.jar
file.reference.mysql.jar=..\\lib\\mysql.jar
file.reference.sqlite.jar=..\\lib\\sqlite.jar
@ -37,7 +38,8 @@ javac.classpath=\
${reference.Essentials.jar}:\
${file.reference.mysql.jar}:\
${file.reference.sqlite.jar}:\
${file.reference.craftbukkit-0.0.1-SNAPSHOT.jar}
${file.reference.craftbukkit-0.0.1-SNAPSHOT.jar}:\
${file.reference.c3p0-0.9.1.2.jar}
# Space-separated list of extra javac options
javac.compilerargs=
javac.deprecation=false

View File

@ -1,7 +1,13 @@
package com.earth2me.essentials.protect;
import com.earth2me.essentials.Essentials;
import com.earth2me.essentials.IConf;
import com.earth2me.essentials.User;
import com.earth2me.essentials.protect.data.IProtectedBlock;
import com.earth2me.essentials.protect.data.ProtectedBlockMemory;
import com.earth2me.essentials.protect.data.ProtectedBlockMySQL;
import com.earth2me.essentials.protect.data.ProtectedBlockSQLite;
import java.beans.PropertyVetoException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.logging.Level;
@ -15,7 +21,7 @@ import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.java.JavaPlugin;
public class EssentialsProtect extends JavaPlugin
public class EssentialsProtect extends JavaPlugin implements IConf
{
private EssentialsProtectBlockListener blockListener = null;
private EssentialsProtectPlayerListener playerListener = null;
@ -33,6 +39,8 @@ public class EssentialsProtect extends JavaPlugin
public static ArrayList onUseAlert = null;
public static ArrayList onBreakAlert = null;
private IProtectedBlock storage = null;
private static EssentialsProtect instance = null;
public EssentialsProtect()
{
@ -42,27 +50,27 @@ public class EssentialsProtect extends JavaPlugin
{
PluginManager pm = this.getServer().getPluginManager();
Essentials ess = (Essentials)pm.getPlugin("Essentials");
if (!ess.isEnabled())
if (!ess.isEnabled()) {
pm.enablePlugin(ess);
}
instance = this;
reloadConfig();
playerListener = new EssentialsProtectPlayerListener(this);
blockListener = new EssentialsProtectBlockListener(this);
entityListener = new EssentialsProtectEntityListener(this);
pm.registerEvent(Type.PLAYER_ITEM, playerListener, Priority.Low, this);
// Why is this commented?
//pm.registerEvent(Type.BLOCK_DAMAGED, blockListener, Priority.High, this);
pm.registerEvent(Type.BLOCK_RIGHTCLICKED, blockListener, Priority.Low, this);
pm.registerEvent(Type.BLOCK_PLACED, blockListener, Priority.Highest, this);
pm.registerEvent(Type.BLOCK_INTERACT, blockListener, Priority.Highest, this);
pm.registerEvent(Type.BLOCK_FLOW, blockListener, Priority.Highest, this);
pm.registerEvent(Type.PLAYER_PICKUP_ITEM, playerListener, Priority.Low, this);
pm.registerEvent(Type.PLAYER_INTERACT, playerListener, Priority.Low, this);
pm.registerEvent(Type.BLOCK_PLACE, blockListener, Priority.Highest, this);
pm.registerEvent(Type.BLOCK_FROMTO, blockListener, Priority.Highest, this);
pm.registerEvent(Type.BLOCK_IGNITE, blockListener, Priority.Highest, this);
pm.registerEvent(Type.BLOCK_BURN, blockListener, Priority.Highest, this);
pm.registerEvent(Type.ENTITY_EXPLODE, entityListener, Priority.Highest, this);
pm.registerEvent(Type.ENTITY_DAMAGED, entityListener, Priority.Highest, this);
pm.registerEvent(Type.ENTITY_DAMAGE, entityListener, Priority.Highest, this);
pm.registerEvent(Type.BLOCK_BREAK, blockListener, Priority.Highest, this);
pm.registerEvent(Type.CREATURE_SPAWN, entityListener, Priority.Highest, this);
loadSettings();
if (!this.getDescription().getVersion().equals(Essentials.getStatic().getDescription().getVersion())) {
logger.log(Level.WARNING, "Version mismatch! Please update all Essentials jars to the same version.");
}
@ -94,8 +102,23 @@ public class EssentialsProtect extends JavaPlugin
onBreakAlert = null;
}
public static void loadSettings()
public void alert(User user, String item, String type)
{
Location loc = user.getLocation();
for (Player p : this.getServer().getOnlinePlayers())
{
User alertUser = User.get(p);
if (alertUser.isAuthorized("essentials.protect.alerts"))
alertUser.sendMessage(ChatColor.DARK_AQUA + "[" + user.getName() + "] " + ChatColor.WHITE + type + ChatColor.GOLD + item + " at: " + formatCoords(loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()));
}
}
public static String formatCoords(int x, int y, int z)
{
return x + "," + y + "," + z;
}
public void reloadConfig() {
dataSettings = Essentials.getSettings().getEpDBSettings();
genSettings = Essentials.getSettings().getEpSettings();
guardSettings = Essentials.getSettings().getEpGuardSettings();
@ -106,17 +129,26 @@ public class EssentialsProtect extends JavaPlugin
onUseAlert = Essentials.getSettings().getEpAlertOnUse();
onBreakAlert = Essentials.getSettings().getEpAlertOnBreak();
playerSettings = Essentials.getSettings().getEpPlayerSettings();
EssentialsProtectData.createSqlTable();
}
public void alert(User user, String item, String type)
{
Location loc = user.getLocation();
for (Player p : this.getServer().getOnlinePlayers())
{
User alertUser = User.get(p);
if (alertUser.isAuthorized("essentials.protect.alerts"))
alertUser.sendMessage(ChatColor.DARK_AQUA + "[" + user.getName() + "] " + ChatColor.WHITE + type + ChatColor.GOLD + item + " at: " + EssentialsProtectData.formatCoords(loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()));
if (dataSettings.get("protect.datatype").equals("mysql")) {
try {
storage = new ProtectedBlockMySQL(dataSettings.get("protect.mysqlDb"), dataSettings.get("protect.username"), dataSettings.get("protect.password"));
} catch (PropertyVetoException ex) {
logger.log(Level.SEVERE, null, ex);
}
} else {
try {
storage = new ProtectedBlockSQLite("jdbc:sqlite:plugins/Essentials/EssentialsProtect.db");
} catch (PropertyVetoException ex) {
logger.log(Level.SEVERE, null, ex);
}
}
if (genSettings.get("protect.memstore")) {
storage = new ProtectedBlockMemory(storage);
}
}
public static IProtectedBlock getStorage() {
return EssentialsProtect.instance.storage;
}
}

View File

@ -2,28 +2,24 @@ package com.earth2me.essentials.protect;
import com.earth2me.essentials.Essentials;
import com.earth2me.essentials.User;
import org.bukkit.ChatColor;
import java.util.ArrayList;
import java.util.List;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.entity.Player;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.event.block.BlockBurnEvent;
import org.bukkit.event.block.BlockFromToEvent;
import org.bukkit.event.block.BlockIgniteEvent;
import org.bukkit.event.block.BlockInteractEvent;
import org.bukkit.event.block.BlockListener;
import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.event.block.BlockRightClickEvent;
import org.bukkit.inventory.ItemStack;
public class EssentialsProtectBlockListener extends BlockListener
{
private EssentialsProtect parent;
private int railBlockX;
private int railBlockY;
private int railBlockZ;
private EssentialsProtectData spData;
public EssentialsProtectBlockListener(EssentialsProtect parent)
{
@ -31,34 +27,10 @@ public class EssentialsProtectBlockListener extends BlockListener
this.parent = parent;
}
private void initialize()
{
if (spData != null) return;
spData = new EssentialsProtectData();
}
@Override
public void onBlockRightClick(BlockRightClickEvent event)
{
initialize();
User user = User.get(event.getPlayer());
if (user.isAuthorized("essentials.protect.admin"))
{
String ownerName = spData.getBlockOwner(user.getWorld().getName(), user.getName(),
event.getBlock());
if (ownerName != null)
{
user.sendMessage(ChatColor.GOLD + "[EssentialsProtect] Protection owner: "
+ ownerName);
}
}
}
@Override
public void onBlockPlace(BlockPlaceEvent event)
{
if (event.isCancelled()) return;
initialize();
ItemStack item = event.getItemInHand();
User user = User.get(event.getPlayer());
@ -68,7 +40,6 @@ public class EssentialsProtectBlockListener extends BlockListener
return;
}
Block blockPlaced = event.getBlockAgainst();
int id = event.getBlockPlaced().getTypeId();
if (EssentialsProtect.checkProtectionItems(EssentialsProtect.blackListPlace, id) && !user.isAuthorized("essentials.protect.exemptplacement"))
@ -82,33 +53,48 @@ public class EssentialsProtectBlockListener extends BlockListener
parent.alert(user, item.getType().toString(), "placed: ");
}
if (spData.isBlockAboveProtectedRail(blockPlaced))
{
Block blockPlaced = event.getBlockPlaced();
Block below = blockPlaced.getFace(BlockFace.DOWN);
if (below.getType() == Material.RAILS) {
if (EssentialsProtect.genSettings.get("protect.protect.prevent.block-on-rail"))
{
event.setCancelled(true);
return;
if (EssentialsProtect.getStorage().isProtected(below, user.getName())) {
event.setCancelled(true);
return;
}
}
}
if (item.getTypeId() == 66)
{
List<Block> protect = new ArrayList<Block>();
if (blockPlaced.getType() == Material.RAILS) {
if (EssentialsProtect.genSettings.get("protect.protect.rails"))
{
if (user.isAuthorized("essentials.protect"))
{
railBlockX = blockPlaced.getX();
railBlockY = blockPlaced.getY();
railBlockZ = blockPlaced.getZ();
spData.insertProtectionIntoDb(user.getWorld().getName(), user.getName(), railBlockX, railBlockY + 1, railBlockZ);
protect.add(blockPlaced);
if (EssentialsProtect.genSettings.get("protect.protect.block-below"))
{
spData.insertProtectionIntoDb(user.getWorld().getName(), user.getName(), railBlockX, railBlockY, railBlockZ);
protect.add(blockPlaced.getFace(BlockFace.DOWN));
}
}
}
}
if (blockPlaced.getType() == Material.SIGN_POST || blockPlaced.getType() == Material.WALL_SIGN) {
if (EssentialsProtect.genSettings.get("protect.protect.signs"))
{
if (user.isAuthorized("essentials.protect"))
{
protect.add(blockPlaced);
if (EssentialsProtect.genSettings.get("protect.protect.block-below"))
{
protect.add(event.getBlockAgainst());
}
}
}
}
for (Block block : protect) {
EssentialsProtect.getStorage().protectBlock(block, user.getName());
}
}
@Override
@ -145,7 +131,7 @@ public class EssentialsProtectBlockListener extends BlockListener
}
@Override
public void onBlockFlow(BlockFromToEvent event)
public void onBlockFromTo(BlockFromToEvent event)
{
if (event.isCancelled()) return;
Block block = event.getBlock();
@ -179,22 +165,6 @@ public class EssentialsProtectBlockListener extends BlockListener
}
}
@Override
public void onBlockInteract(BlockInteractEvent event)
{
if (event.isCancelled()) return;
if (!event.isPlayer()) return;
User user = User.get((Player)event.getEntity());
if (EssentialsProtect.playerSettings.get("protect.disable.build") && !user.canBuild())
{
event.setCancelled(true);
return;
}
}
@Override
public void onBlockBurn(BlockBurnEvent event)
{
@ -220,7 +190,6 @@ public class EssentialsProtectBlockListener extends BlockListener
public void onBlockBreak(BlockBreakEvent event)
{
if (event.isCancelled()) return;
initialize();
User user = User.get(event.getPlayer());
Block block = event.getBlock();
if (EssentialsProtect.playerSettings.get("protect.disable.build") && !user.canBuild())
@ -244,28 +213,57 @@ public class EssentialsProtectBlockListener extends BlockListener
{
if (block.getType() == Material.WALL_SIGN || block.getType() == Material.SIGN_POST || block.getType() == Material.RAILS)
{
spData.removeProtectionFromDB(block, true);
EssentialsProtect.getStorage().unprotectBlock(block);
if (block.getType() == Material.RAILS || block.getType() == Material.SIGN_POST) {
Block below = block.getFace(BlockFace.DOWN);
EssentialsProtect.getStorage().unprotectBlock(below);
} else {
BlockFace[] faces = new BlockFace[] {
BlockFace.NORTH,
BlockFace.EAST,
BlockFace.SOUTH,
BlockFace.WEST
};
for (BlockFace blockFace : faces) {
Block against = block.getFace(blockFace);
EssentialsProtect.getStorage().unprotectBlock(against);
}
}
}
else
{
spData.removeProtectionFromDB(block);
EssentialsProtect.getStorage().unprotectBlock(block);
}
return;
}
else
{
boolean canDestroy = spData.canDestroy(user.getWorld().getName(), user.getName(), block);
if (canDestroy)
{
boolean isProtected = EssentialsProtect.getStorage().isProtected(block, user.getName());
if (!isProtected) {
if (block.getType() == Material.WALL_SIGN || block.getType() == Material.SIGN_POST || block.getType() == Material.RAILS)
{
spData.removeProtectionFromDB(block, true);
{
EssentialsProtect.getStorage().unprotectBlock(block);
if (block.getType() == Material.RAILS || block.getType() == Material.SIGN_POST) {
Block below = block.getFace(BlockFace.DOWN);
EssentialsProtect.getStorage().unprotectBlock(below);
} else {
BlockFace[] faces = new BlockFace[] {
BlockFace.NORTH,
BlockFace.EAST,
BlockFace.SOUTH,
BlockFace.WEST
};
for (BlockFace blockFace : faces) {
Block against = block.getFace(blockFace);
EssentialsProtect.getStorage().unprotectBlock(against);
}
}
}
else
{
spData.removeProtectionFromDB(block);
EssentialsProtect.getStorage().unprotectBlock(block);
}
return;
}
event.setCancelled(true);
return;

View File

@ -2,39 +2,60 @@ package com.earth2me.essentials.protect;
import com.earth2me.essentials.Essentials;
import com.earth2me.essentials.User;
import org.bukkit.block.Block;
import org.bukkit.event.player.PlayerItemEvent;
import org.bukkit.ChatColor;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.player.PlayerListener;
import org.bukkit.event.player.PlayerPickupItemEvent;
import org.bukkit.inventory.ItemStack;
public class EssentialsProtectPlayerListener extends PlayerListener
{
private EssentialsProtect parent;
private int signBlockX;
private int signBlockY;
private int signBlockZ;
private EssentialsProtectData spData = null;
public EssentialsProtectPlayerListener(EssentialsProtect parent)
{
Essentials.loadClasses();
this.parent = parent;
}
public void initialize()
@Override
public void onPlayerInteract(PlayerInteractEvent event)
{
if (spData != null) return;
spData = new EssentialsProtectData();
if (event.isCancelled()) return;
User user = User.get(event.getPlayer());
if (EssentialsProtect.playerSettings.get("protect.disable.build") && !user.canBuild())
{
event.setCancelled(true);
return;
}
if (user.isAuthorized("essentials.protect.admin"))
{
StringBuilder sb = new StringBuilder();
boolean first = true;
for (String owner : EssentialsProtect.getStorage().getOwners(event.getClickedBlock())) {
if (!first) {
sb.append(", ");
}
first = false;
sb.append(owner);
}
String ownerNames = sb.toString();
if (ownerNames != null)
{
user.sendMessage(ChatColor.GOLD + "[EssentialsProtect] Protection owners: " + ownerNames);
}
}
}
@Override
public void onPlayerItem(PlayerItemEvent event)
public void onPlayerPickupItem(PlayerPickupItemEvent event)
{
if(event.isCancelled()) return;
ItemStack item = event.getItem();
ItemStack item = event.getItem().getItemStack();
User user = User.get(event.getPlayer());
Block blockPlaced = event.getBlockClicked();
if (EssentialsProtect.checkProtectionItems(EssentialsProtect.usageList, item.getTypeId()) && !user.isAuthorized("essentials.protect.exemptusage"))
{
event.setCancelled(true);
@ -45,29 +66,5 @@ public class EssentialsProtectPlayerListener extends PlayerListener
{
parent.alert(user, item.getType().toString(), "used: ");
}
if (item.getTypeId() == 323)
{
if (EssentialsProtect.genSettings.get("protect.protect.signs"))
{
if (user.isAuthorized("essentials.protect"))
{
signBlockX = blockPlaced.getX();
signBlockY = blockPlaced.getY();
signBlockZ = blockPlaced.getZ();
initialize();
spData.insertProtectionIntoDb(user.getWorld().getName(), user.getName(), signBlockX,
signBlockY + 1, signBlockZ);
if (EssentialsProtect.genSettings.get("protect.protect.block-below"))
{
spData.insertProtectionIntoDb(user.getWorld().getName(), user.getName(), signBlockX,
signBlockY, signBlockZ);
}
}
}
}
}
}

View File

@ -0,0 +1,15 @@
package com.earth2me.essentials.protect.data;
import java.util.List;
import java.util.Set;
import org.bukkit.block.Block;
public interface IProtectedBlock {
public void clearProtections();
public void importProtections(List<OwnedBlock> blocks);
public List<OwnedBlock> exportProtections();
public void protectBlock(Block block, String playerName);
public boolean isProtected(Block block, String playerName);
public List<String> getOwners(Block block);
public int unprotectBlock(Block block);
}

View File

@ -0,0 +1,9 @@
package com.earth2me.essentials.protect.data;
public class OwnedBlock {
int x;
int y;
int z;
String world;
String playerName;
}

View File

@ -0,0 +1,292 @@
package com.earth2me.essentials.protect.data;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import java.beans.PropertyVetoException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.bukkit.block.Block;
public abstract class ProtectedBlockJDBC implements IProtectedBlock {
protected static final Logger logger = Logger.getLogger("Minecraft");
protected ComboPooledDataSource cpds;
protected abstract PreparedStatement getStatementCreateTable(Connection conn) throws SQLException;
protected abstract PreparedStatement getStatementDeleteAll(Connection conn) throws SQLException;
protected abstract PreparedStatement getStatementInsert(Connection conn, String world, int x, int y, int z, String playerName) throws SQLException;
protected abstract PreparedStatement getStatementPlayerCountByLocation(Connection conn, String world, int x, int y, int z, String playerName) throws SQLException;
protected abstract PreparedStatement getStatementPlayersByLocation(Connection conn, String name, int x, int y, int z) throws SQLException;
protected abstract PreparedStatement getStatementDeleteByLocation(Connection conn, String world, int x, int y, int z) throws SQLException;
protected abstract PreparedStatement getStatementAllBlocks(Connection conn) throws SQLException;
public ProtectedBlockJDBC(String driver, String url) throws PropertyVetoException {
this(driver, url, null, null);
}
public ProtectedBlockJDBC(String driver, String url, String username, String password) throws PropertyVetoException {
cpds = new ComboPooledDataSource();
cpds.setDriverClass(driver);
cpds.setJdbcUrl(url);
if (username != null) {
cpds.setUser(username);
cpds.setPassword(password);
}
cpds.setMaxStatements(20);
createAndConvertTable();
}
private void createAndConvertTable() {
Connection conn = null;
PreparedStatement ps = null;
try {
conn = cpds.getConnection();
ps = getStatementCreateTable(conn);
ps.execute();
} catch (SQLException ex) {
logger.log(Level.SEVERE, null, ex);
} finally {
if (ps != null) {
try {
ps.close();
} catch (SQLException ex) {
logger.log(Level.SEVERE, null, ex);
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException ex) {
logger.log(Level.SEVERE, null, ex);
}
}
}
}
public void clearProtections() {
Connection conn = null;
PreparedStatement ps = null;
try {
conn = cpds.getConnection();
ps = getStatementDeleteAll(conn);
ps.executeUpdate();
} catch (SQLException ex) {
logger.log(Level.SEVERE, null, ex);
} finally {
if (ps != null) {
try {
ps.close();
} catch (SQLException ex) {
logger.log(Level.SEVERE, null, ex);
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException ex) {
logger.log(Level.SEVERE, null, ex);
}
}
}
}
public void importProtections(List<OwnedBlock> blocks) {
for (OwnedBlock ownedBlock : blocks) {
if (ownedBlock.playerName == null) {
continue;
}
protectBlock(ownedBlock.world, ownedBlock.x, ownedBlock.y, ownedBlock.z, ownedBlock.playerName);
}
}
public List<OwnedBlock> exportProtections() {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
List<OwnedBlock> blocks = new ArrayList<OwnedBlock>();
try {
conn = cpds.getConnection();
ps = getStatementAllBlocks(conn);
rs = ps.executeQuery();
while (rs.next()) {
OwnedBlock ob = new OwnedBlock();
ob.world = rs.getString(1);
ob.x = rs.getInt(2);
ob.y = rs.getInt(3);
ob.z = rs.getInt(4);
ob.playerName = rs.getString(5);
blocks.add(ob);
}
return blocks;
} catch (SQLException ex) {
logger.log(Level.SEVERE, null, ex);
return blocks;
} finally {
if (rs != null) {
try {
rs.close();
} catch (SQLException ex) {
logger.log(Level.SEVERE, null, ex);
}
}
if (ps != null) {
try {
ps.close();
} catch (SQLException ex) {
logger.log(Level.SEVERE, null, ex);
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException ex) {
logger.log(Level.SEVERE, null, ex);
}
}
}
}
public void protectBlock(Block block, String playerName) {
protectBlock(block.getWorld().getName(), block.getX(), block.getY(), block.getZ(), playerName);
}
private void protectBlock(String world, int x, int y, int z, String playerName) {
Connection conn = null;
PreparedStatement ps = null;
try {
conn = cpds.getConnection();
ps = getStatementInsert(conn, world, x, y, z, playerName);
ps.executeUpdate();
} catch (SQLException ex) {
logger.log(Level.SEVERE, null, ex);
} finally {
if (ps != null) {
try {
ps.close();
} catch (SQLException ex) {
logger.log(Level.SEVERE, null, ex);
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException ex) {
logger.log(Level.SEVERE, null, ex);
}
}
}
}
public boolean isProtected(Block block, String playerName) {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
conn = cpds.getConnection();
ps = getStatementPlayerCountByLocation(conn, block.getWorld().getName(), block.getX(), block.getY(), block.getZ(), playerName);
rs = ps.executeQuery();
rs.next();
return rs.getInt(1) > 0 && rs.getInt(2) == 0;
} catch (SQLException ex) {
logger.log(Level.SEVERE, null, ex);
return true;
} finally {
if (rs != null) {
try {
rs.close();
} catch (SQLException ex) {
logger.log(Level.SEVERE, null, ex);
}
}
if (ps != null) {
try {
ps.close();
} catch (SQLException ex) {
logger.log(Level.SEVERE, null, ex);
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException ex) {
logger.log(Level.SEVERE, null, ex);
}
}
}
}
public List<String> getOwners(Block block) {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
List<String> owners = new ArrayList<String>();
try {
conn = cpds.getConnection();
ps = getStatementPlayersByLocation(conn, block.getWorld().getName(), block.getX(), block.getY(), block.getZ());
rs = ps.executeQuery();
while (rs.next()) {
owners.add(rs.getString(1));
}
return owners;
} catch (SQLException ex) {
logger.log(Level.SEVERE, null, ex);
return owners;
} finally {
if (rs != null) {
try {
rs.close();
} catch (SQLException ex) {
logger.log(Level.SEVERE, null, ex);
}
}
if (ps != null) {
try {
ps.close();
} catch (SQLException ex) {
logger.log(Level.SEVERE, null, ex);
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException ex) {
logger.log(Level.SEVERE, null, ex);
}
}
}
}
public int unprotectBlock(Block block) {
Connection conn = null;
PreparedStatement ps = null;
try {
conn = cpds.getConnection();
ps = getStatementDeleteByLocation(conn, block.getWorld().getName(), block.getX(), block.getY(), block.getZ());
return ps.executeUpdate();
} catch (SQLException ex) {
logger.log(Level.SEVERE, null, ex);
return 0;
} finally {
if (ps != null) {
try {
ps.close();
} catch (SQLException ex) {
logger.log(Level.SEVERE, null, ex);
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException ex) {
logger.log(Level.SEVERE, null, ex);
}
}
}
}
}

View File

@ -0,0 +1,205 @@
package com.earth2me.essentials.protect.data;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map.Entry;
import java.util.Set;
import org.bukkit.World;
import org.bukkit.block.Block;
import org.bukkit.plugin.Plugin;
public class ProtectedBlockMemory implements IProtectedBlock {
List<String> worlds = new ArrayList<String>();
List<String> playerNames = new ArrayList<String>();
IProtectedBlock storage;
Plugin plugin;
class ProtectedLocation {
int x;
int y;
int z;
int w;
private ProtectedLocation(Block block, int worldId) {
this.x = block.getX();
this.y = block.getY();
this.z = block.getZ();
this.w = worldId;
}
private ProtectedLocation(OwnedBlock ownedBlock, int worldId) {
this.x = ownedBlock.x;
this.y = ownedBlock.y;
this.z = ownedBlock.z;
this.w = worldId;
}
@Override
public boolean equals(Object o) {
if (o instanceof ProtectedLocation) {
ProtectedLocation pl = (ProtectedLocation) o;
return x == pl.x && y == pl.y && z == pl.z && w == pl.w;
}
return false;
}
@Override
public int hashCode() {
return x ^ y ^ z ^ w;
}
}
class ProtectedBy {
private int playerId = -1;
private Set<Integer> playerIds;
private ProtectedBy() {
}
private void add(int playerId) {
if (this.playerId == -1 || this.playerId == playerId) {
this.playerId = playerId;
} else {
if (playerIds == null) {
playerIds = new HashSet<Integer>(4);
playerIds.add(this.playerId);
}
playerIds.add(playerId);
}
}
private boolean contains(int playerId) {
if (playerIds == null) {
return this.playerId == playerId;
}
return playerIds.contains(playerId);
}
private List<String> getPlayers(List<String> playerNames) {
if (playerIds == null) {
List<String> list = new ArrayList<String>(2);
list.add(playerNames.get(playerId));
return list;
}
List<String> list = new ArrayList<String>(playerIds.size());
for (Integer integer : playerIds) {
list.add(playerNames.get(integer));
}
return list;
}
private int size() {
if (playerIds == null) {
return 1;
}
return playerIds.size();
}
}
HashMap<ProtectedLocation, ProtectedBy> blocks = new HashMap<ProtectedLocation, ProtectedBy>();
public ProtectedBlockMemory(IProtectedBlock storage) {
this.storage = storage;
importProtections(storage.exportProtections());
}
public void clearProtections() {
blocks.clear();
}
public final void importProtections(List<OwnedBlock> blocks) {
for (OwnedBlock ownedBlock : blocks) {
ProtectedLocation pl = new ProtectedLocation(ownedBlock, getWorldId(ownedBlock.world));
if (ownedBlock.playerName == null) {
continue;
}
protectBlock(pl, ownedBlock.playerName);
}
}
public List<OwnedBlock> exportProtections() {
List<OwnedBlock> blockList = new ArrayList<OwnedBlock>(blocks.size());
for (Entry<ProtectedLocation, ProtectedBy> entry : blocks.entrySet()) {
for (String name : entry.getValue().getPlayers(playerNames)) {
OwnedBlock ob = new OwnedBlock();
ob.x = entry.getKey().x;
ob.y = entry.getKey().y;
ob.z = entry.getKey().z;
ob.world = worlds.get(entry.getKey().w);
ob.playerName = name;
blockList.add(ob);
}
}
return blockList;
}
public void protectBlock(final Block block, final String playerName) {
ProtectedLocation pl = new ProtectedLocation(block, getWorldId(block.getWorld()));
protectBlock(pl, playerName);
plugin.getServer().getScheduler().scheduleAsyncDelayedTask(plugin, new Runnable() {
public void run() {
storage.protectBlock(block, playerName);
}
});
}
private void protectBlock(ProtectedLocation pl, String playerName) {
int playerId = getPlayerId(playerName);
ProtectedBy pb = blocks.get(pl);
if (pb == null) {
pb = new ProtectedBy();
blocks.put(pl, pb);
}
pb.add(playerId);
}
public boolean isProtected(Block block, String playerName) {
int playerId = getPlayerId(playerName);
ProtectedLocation pl = new ProtectedLocation(block, getWorldId(block.getWorld()));
ProtectedBy pb = blocks.get(pl);
return !pb.contains(playerId);
}
public List<String> getOwners(Block block) {
ProtectedLocation pl = new ProtectedLocation(block, getWorldId(block.getWorld()));
ProtectedBy pb = blocks.get(pl);
return pb.getPlayers(playerNames);
}
public int unprotectBlock(final Block block) {
ProtectedLocation pl = new ProtectedLocation(block, getWorldId(block.getWorld()));
ProtectedBy pb = blocks.remove(pl);
plugin.getServer().getScheduler().scheduleAsyncDelayedTask(plugin, new Runnable() {
public void run() {
storage.unprotectBlock(block);
}
});
return pb.size();
}
private int getPlayerId(String playername) {
int id = playerNames.indexOf(playername);
if (id < 0) {
playerNames.add(playername);
id = playerNames.indexOf(playername);
}
return id;
}
private int getWorldId(World world) {
return getWorldId(world.getName());
}
private int getWorldId(String name) {
int id = worlds.indexOf(name);
if (id < 0) {
worlds.add(name);
id = worlds.indexOf(name);
}
return id;
}
}

View File

@ -0,0 +1,89 @@
package com.earth2me.essentials.protect.data;
import java.beans.PropertyVetoException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class ProtectedBlockMySQL extends ProtectedBlockJDBC {
public ProtectedBlockMySQL(String url, String username, String password) throws PropertyVetoException {
super("com.mysql.jdbc.Driver", url, username, password);
}
private static final String QueryCreateTable =
"CREATE TABLE IF NOT EXISTS `EssentialsProtectedBlocks` ("
+ "`worldName` varchar(150) NOT NULL,"
+ "`x` int(11) NOT NULL, `y` int(11) NOT NULL, `z` int(11) NOT NULL,"
+ "`playerName` varchar(150) NOT NULL,"
+ ") ENGINE=MyISAM DEFAULT CHARSET=utf8";
@Override
protected PreparedStatement getStatementCreateTable(Connection conn) throws SQLException {
return conn.prepareStatement(QueryCreateTable);
}
private static final String QueryDeleteAll = "DELETE FROM EssentialsProtectedBlocks;";
@Override
protected PreparedStatement getStatementDeleteAll(Connection conn) throws SQLException {
return conn.prepareStatement(QueryDeleteAll);
}
private static final String QueryInsert =
"INSERT INTO EssentialsProtectedBlocks (worldName, x, y, z, playerName) VALUES (?, ?, ?, ?, ?);";
@Override
protected PreparedStatement getStatementInsert(Connection conn, String world, int x, int y, int z, String playerName) throws SQLException {
PreparedStatement ps = conn.prepareStatement(QueryInsert);
ps.setString(1, world);
ps.setInt(2, x);
ps.setInt(3, y);
ps.setInt(4, z);
ps.setString(5, playerName);
return ps;
}
private static final String QueryCountByPlayer =
"SELECT COUNT(playerName), SUM(playerName = ?) FROM EssentialsProtectedBlocks "
+ "WHERE worldName = ? AND x = ? AND y = ? AND z = ? GROUP BY x;";
@Override
protected PreparedStatement getStatementPlayerCountByLocation(Connection conn, String world, int x, int y, int z, String playerName) throws SQLException {
PreparedStatement ps = conn.prepareStatement(QueryCountByPlayer);
ps.setString(1, playerName);
ps.setString(2, world);
ps.setInt(3, x);
ps.setInt(4, y);
ps.setInt(5, z);
return ps;
}
private static final String QueryPlayersByLocation =
"SELECT playerName FROM EssentialsProtectedBlocks WHERE worldname = ? AND x = ? AND y = ? AND z = ?;";
@Override
protected PreparedStatement getStatementPlayersByLocation(Connection conn, String world, int x, int y, int z) throws SQLException {
PreparedStatement ps = conn.prepareStatement(QueryPlayersByLocation);
ps.setString(1, world);
ps.setInt(2, x);
ps.setInt(3, y);
ps.setInt(4, z);
return ps;
}
private static final String QueryDeleteByLocation =
"DELETE FROM EssentialsProtectedBlocks WHERE worldName = ? AND x = ? AND y = ? AND z = ?;";
@Override
protected PreparedStatement getStatementDeleteByLocation(Connection conn, String world, int x, int y, int z) throws SQLException {
PreparedStatement ps = conn.prepareStatement(QueryDeleteByLocation);
ps.setString(1, world);
ps.setInt(2, x);
ps.setInt(3, y);
ps.setInt(4, z);
return ps;
}
private static final String QueryAllBlocks =
"SELECT worldName, x, y, z, playerName FROM EssentialsProtectedBlocks;";
@Override
protected PreparedStatement getStatementAllBlocks(Connection conn) throws SQLException {
return conn.prepareStatement(QueryAllBlocks);
}
}

View File

@ -0,0 +1,87 @@
package com.earth2me.essentials.protect.data;
import java.beans.PropertyVetoException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class ProtectedBlockSQLite extends ProtectedBlockJDBC {
public ProtectedBlockSQLite(String url) throws PropertyVetoException {
super("org.sqlite.JDBC", url);
}
private static final String QueryCreateTable =
"CREATE TABLE IF NOT EXISTS EssentialsProtect ("
+ "worldName TEXT ,playerName TEXT, "
+ "x NUMERIC, y NUMERIC, z NUMERIC)";
@Override
protected PreparedStatement getStatementCreateTable(Connection conn) throws SQLException {
return conn.prepareStatement(QueryCreateTable);
}
private static final String QueryDeleteAll = "DELETE FROM EssentialsProtectedBlocks;";
@Override
protected PreparedStatement getStatementDeleteAll(Connection conn) throws SQLException {
return conn.prepareStatement(QueryDeleteAll);
}
private static final String QueryInsert =
"INSERT INTO EssentialsProtectedBlocks (worldName, x, y, z, playerName) VALUES (?, ?, ?, ?, ?);";
@Override
protected PreparedStatement getStatementInsert(Connection conn, String world, int x, int y, int z, String playerName) throws SQLException {
PreparedStatement ps = conn.prepareStatement(QueryInsert);
ps.setString(1, world);
ps.setInt(2, x);
ps.setInt(3, y);
ps.setInt(4, z);
ps.setString(5, playerName);
return ps;
}
private static final String QueryPlayerCountByLocation =
"SELECT COUNT(playerName), SUM(playerName = ?) FROM EssentialsProtectedBlocks "
+ "WHERE worldName = ? AND x = ? AND y = ? AND z = ? GROUP BY x;";
@Override
protected PreparedStatement getStatementPlayerCountByLocation(Connection conn, String world, int x, int y, int z, String playerName) throws SQLException {
PreparedStatement ps = conn.prepareStatement(QueryPlayerCountByLocation);
ps.setString(1, playerName);
ps.setString(2, world);
ps.setInt(3, x);
ps.setInt(4, y);
ps.setInt(5, z);
return ps;
}
private static final String QueryPlayersByLocation =
"SELECT playerName FROM EssentialsProtectedBlocks WHERE worldname = ? AND x = ? AND y = ? AND z = ?;";
@Override
protected PreparedStatement getStatementPlayersByLocation(Connection conn, String world, int x, int y, int z) throws SQLException {
PreparedStatement ps = conn.prepareStatement(QueryPlayersByLocation);
ps.setString(1, world);
ps.setInt(2, x);
ps.setInt(3, y);
ps.setInt(4, z);
return ps;
}
private static final String QueryDeleteByLocation =
"DELETE FROM EssentialsProtectedBlocks WHERE worldName = ? AND x = ? AND y = ? AND z = ?;";
@Override
protected PreparedStatement getStatementDeleteByLocation(Connection conn, String world, int x, int y, int z) throws SQLException {
PreparedStatement ps = conn.prepareStatement(QueryDeleteByLocation);
ps.setString(1, world);
ps.setInt(2, x);
ps.setInt(3, y);
ps.setInt(4, z);
return ps;
}
private static final String QueryAllBlocks =
"SELECT worldName, x, y, z, playerName FROM EssentialsProtectedBlocks;";
@Override
protected PreparedStatement getStatementAllBlocks(Connection conn) throws SQLException {
return conn.prepareStatement(QueryAllBlocks);
}
}

View File

@ -1,76 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE project [ <!ENTITY buildinc SYSTEM "../build.inc.xml"> ]>
<!-- You may freely edit this file. See commented blocks below for -->
<!-- some examples of how to customize the build. -->
<!-- (If you delete it and reopen the project it will be recreated.) -->
<!-- By default, only the Clean and Build commands use this build script. -->
<!-- Commands such as Run, Debug, and Test only use this build script if -->
<!-- the Compile on Save feature is turned off for the project. -->
<!-- You can turn off the Compile on Save (or Deploy on Save) setting -->
<!-- in the project's Project Properties dialog box.-->
<project name="EssentialsServerlist" default="default" basedir=".">
<description>Builds, tests, and runs the project EssentialsServerlist.</description>
<import file="nbproject/build-impl.xml"/>
&buildinc;
<!--
There exist several targets which are by default empty and which can be
used for execution of your tasks. These targets are usually executed
before and after some main targets. They are:
-pre-init: called before initialization of project properties
-post-init: called after initialization of project properties
-pre-compile: called before javac compilation
-post-compile: called after javac compilation
-pre-compile-single: called before javac compilation of single file
-post-compile-single: called after javac compilation of single file
-pre-compile-test: called before javac compilation of JUnit tests
-post-compile-test: called after javac compilation of JUnit tests
-pre-compile-test-single: called before javac compilation of single JUnit test
-post-compile-test-single: called after javac compilation of single JUunit test
-pre-jar: called before JAR building
-post-jar: called after JAR building
-post-clean: called after cleaning build products
(Targets beginning with '-' are not intended to be called on their own.)
Example of inserting an obfuscator after compilation could look like this:
<target name="-post-compile">
<obfuscate>
<fileset dir="${build.classes.dir}"/>
</obfuscate>
</target>
For list of available properties check the imported
nbproject/build-impl.xml file.
Another way to customize the build is by overriding existing main targets.
The targets of interest are:
-init-macrodef-javac: defines macro for javac compilation
-init-macrodef-junit: defines macro for junit execution
-init-macrodef-debug: defines macro for class debugging
-init-macrodef-java: defines macro for class execution
-do-jar-with-manifest: JAR building (if you are using a manifest)
-do-jar-without-manifest: JAR building (if you are not using a manifest)
run: execution of project
-javadoc-build: Javadoc generation
test-report: JUnit report generation
An example of overriding the target for project execution could look like this:
<target name="run" depends="EssentialsServerlist-impl.jar">
<exec dir="bin" executable="launcher.exe">
<arg file="${dist.jar}"/>
</exec>
</target>
Notice that the overridden target depends on the jar target and not only on
the compile target as the regular run target does. Again, for a list of available
properties which you can use, check the target you are overriding in the
nbproject/build-impl.xml file.
-->
</project>

File diff suppressed because it is too large Load Diff

View File

@ -1,8 +0,0 @@
build.xml.data.CRC32=b3f32d5a
build.xml.script.CRC32=d07c143a
build.xml.stylesheet.CRC32=28e38971@1.38.2.45
# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
nbproject/build-impl.xml.data.CRC32=28f52c06
nbproject/build-impl.xml.script.CRC32=bdef3982
nbproject/build-impl.xml.stylesheet.CRC32=19debb58@1.42.1.45

View File

@ -1,76 +0,0 @@
annotation.processing.enabled=true
annotation.processing.enabled.in.editor=false
annotation.processing.run.all.processors=true
annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output
application.title=EssentialsServerlist
application.vendor=Paul
build.classes.dir=${build.dir}/classes
build.classes.excludes=**/*.java,**/*.form
# This directory is removed when the project is cleaned:
build.dir=build
build.generated.dir=${build.dir}/generated
build.generated.sources.dir=${build.dir}/generated-sources
# Only compile against the classpath explicitly listed here:
build.sysclasspath=ignore
build.test.classes.dir=${build.dir}/test/classes
build.test.results.dir=${build.dir}/test/results
# Uncomment to specify the preferred debugger connection transport:
#debug.transport=dt_socket
debug.classpath=\
${run.classpath}
debug.test.classpath=\
${run.test.classpath}
# This directory is removed when the project is cleaned:
dist.dir=dist
dist.jar=${dist.dir}/EssentialsServerlist.jar
dist.javadoc.dir=${dist.dir}/javadoc
endorsed.classpath=
excludes=
file.reference.craftbukkit-0.0.1-SNAPSHOT.jar-1=..\\lib\\craftbukkit-0.0.1-SNAPSHOT.jar
includes=**
jar.compress=false
javac.classpath=\
${reference.Essentials.jar}:\
${file.reference.craftbukkit-0.0.1-SNAPSHOT.jar-1}
# Space-separated list of extra javac options
javac.compilerargs=
javac.deprecation=false
javac.processorpath=\
${javac.classpath}
javac.source=1.5
javac.target=1.5
javac.test.classpath=\
${javac.classpath}:\
${build.classes.dir}:\
${libs.junit.classpath}:\
${libs.junit_4.classpath}
javac.test.processorpath=\
${javac.test.classpath}
javadoc.additionalparam=
javadoc.author=false
javadoc.encoding=${source.encoding}
javadoc.noindex=false
javadoc.nonavbar=false
javadoc.notree=false
javadoc.private=false
javadoc.splitindex=true
javadoc.use=true
javadoc.version=false
javadoc.windowtitle=
meta.inf.dir=${src.dir}/META-INF
platform.active=default_platform
project.Essentials=../Essentials
reference.Essentials.jar=${project.Essentials}/dist/Essentials.jar
run.classpath=\
${javac.classpath}:\
${build.classes.dir}
# Space-separated list of JVM arguments used when running the project
# (you may also define separate properties like run-sys-prop.name=value instead of -Dname=value
# or test-sys-prop.name=value to set system properties for unit tests):
run.jvmargs=
run.test.classpath=\
${javac.test.classpath}:\
${build.test.classes.dir}
source.encoding=UTF-8
src.dir=src
test.src.dir=test

View File

@ -1,28 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://www.netbeans.org/ns/project/1">
<type>org.netbeans.modules.java.j2seproject</type>
<configuration>
<data xmlns="http://www.netbeans.org/ns/j2se-project/3">
<name>EssentialsServerlist</name>
<source-roots>
<root id="src.dir"/>
</source-roots>
<test-roots>
<root id="test.src.dir"/>
</test-roots>
</data>
<libraries xmlns="http://www.netbeans.org/ns/ant-project-libraries/1">
<definitions>../lib\nblibraries.properties</definitions>
</libraries>
<references xmlns="http://www.netbeans.org/ns/ant-project-references/1">
<reference>
<foreign-project>Essentials</foreign-project>
<artifact-type>jar</artifact-type>
<script>build.xml</script>
<target>jar</target>
<clean-target>clean</clean-target>
<id>jar</id>
</reference>
</references>
</configuration>
</project>

View File

@ -1,149 +0,0 @@
package net.mcserverlist.bukkit;
import com.earth2me.essentials.Essentials;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.event.Event;
import org.bukkit.event.Event.Priority;
import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.PluginDescriptionFile;
import org.bukkit.plugin.java.JavaPlugin;
public class Mcsl extends JavaPlugin
{
private static final Logger logger = Logger.getLogger("Minecraft");
private McslPlayerListener playerListener;
public final String author;
public Mcsl() throws IOException
{
PluginDescriptionFile desc = this.getDescription();
// Compile author list
List<String> authors = new ArrayList<String>();
authors.add("Vimae Development");
int alen = authors.size();
if (alen == 1)
{
author = " by " + authors.get(0);
}
else if (alen > 1)
{
int i = 0;
StringBuilder bldr = new StringBuilder();
for (String a : desc.getAuthors())
{
if (i + 1 == alen)
{
if (alen > 2) bldr.append(",");
bldr.append(" and ");
}
else if (i++ > 0)
{
bldr.append(", ");
}
bldr.append(a);
}
bldr.insert(0, " by ");
author = bldr.toString();
}
else
{
author = "";
}
}
@Override
public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args)
{
McslCommands mcslCmd;
try
{
switch (McslCommands.valueOf(cmd.getName().toUpperCase()))
{
case WHITELIST:
whitelist(sender, WhitelistCommands.valueOf(args[0].toUpperCase()), args);
return true;
default:
return false;
}
}
catch (IllegalArgumentException ex)
{
return false;
}
catch (Exception ex)
{
logger.log(Level.WARNING, "MCSL encountered an unknown error.", ex);
sender.sendMessage("MCSL encountered an unknown error.");
return true;
}
}
@SuppressWarnings("LoggerStringConcat")
public void onEnable()
{
Plugin p = this.getServer().getPluginManager().getPlugin("Essentials");
if (p != null) {
if (!this.getServer().getPluginManager().isPluginEnabled(p)) {
this.getServer().getPluginManager().enablePlugin(p);
}
}
playerListener = new McslPlayerListener(this);
getServer().getPluginManager().registerEvent(Event.Type.PLAYER_JOIN, playerListener, Priority.Monitor, this);
getServer().getPluginManager().registerEvent(Event.Type.PLAYER_QUIT, playerListener, Priority.Monitor, this);
getServer().getPluginManager().registerEvent(Event.Type.PLAYER_LOGIN, playerListener, Priority.Lowest, this);
if (!this.getDescription().getVersion().equals(Essentials.getStatic().getDescription().getVersion())) {
logger.log(Level.WARNING, "Version mismatch! Please update all Essentials jars to the same version.");
}
logger.info(getDescription().getName() + " version " + getDescription().getVersion() + author + " enabled.");
}
@SuppressWarnings("LoggerStringConcat")
public void onDisable()
{
logger.info(getDescription().getName() + " version " + getDescription().getVersion() + " disabled.");
}
private void whitelist(CommandSender sender, WhitelistCommands cmd, String[] args)
{
if (!playerListener.isWhitelistEnabled())
{
sender.sendMessage("§cThe whitelist is disabled.");
return;
}
if (!sender.isOp())
{
sender.sendMessage("§cYou must be an operator to manage the whitelist.");
return;
}
switch (cmd)
{
case RELOAD:
playerListener.whitelistReload();
sender.sendMessage("A whitelist updated has been queued.");
break;
}
}
private enum McslCommands
{
WHITELIST
}
private enum WhitelistCommands
{
RELOAD
}
}

View File

@ -1,209 +0,0 @@
package net.mcserverlist.bukkit;
import com.earth2me.essentials.Essentials;
import java.io.*;
import java.net.*;
import java.util.logging.*;
import org.bukkit.*;
import org.bukkit.entity.*;
import org.bukkit.event.player.*;
public class McslPlayerListener extends PlayerListener
{
private final static Logger logger = Logger.getLogger("Minecraft");
private boolean running = true;
private final Server server;
private Thread thread;
private Whitelist whitelist = null;
private volatile boolean updateNeeded = true;
@SuppressWarnings("CallToThreadStartDuringObjectConstruction")
public McslPlayerListener(Mcsl parent)
{
this.server = parent.getServer();
// Get the data from the server.properties file as the server sees it, rather than reading it manually
try
{
this.whitelist = new Whitelist(server);
}
catch (Throwable ex)
{
// Disable the plugin
logger.log(Level.WARNING, "Error encountered while initializing MCServerlist plugin.", ex);
parent.getPluginLoader().disablePlugin(parent);
return;
}
// Run Update on a set interval of 1 minute with an initial delay of 10 seconds
thread = new Thread(new UpdateRunnable());
thread.setDaemon(true);
thread.start();
}
@Override
@SuppressWarnings("FinalizeDeclaration")
protected void finalize() throws Throwable
{
// Stop the timer
if (thread != null && thread.isAlive())
{
running = false;
thread.join();
}
super.finalize();
}
@Override
public void onPlayerLogin(PlayerLoginEvent event)
{
if (event.getResult() != PlayerLoginEvent.Result.ALLOWED)
return;
Player player = event.getPlayer();
// Check the whitelist
if (!Essentials.getSettings().getWhitelistEnabled() || player.isOp() || whitelist == null || whitelist.isAllowed(player.getName()))
{
// Player is an op, there is no whitelist, or the player is whitelisted.
return;
}
// Player is not whitelisted.
event.disallow(PlayerLoginEvent.Result.KICK_OTHER, "This server employs a whitelist.");
}
@Override
public void onPlayerJoin(PlayerEvent event)
{
update();
}
@Override
public void onPlayerQuit(PlayerEvent event)
{
update();
}
public boolean isWhitelistEnabled()
{
return whitelist != null;
}
public void whitelistReload()
{
whitelist.update();
}
public void update()
{
updateNeeded = true;
}
private class UpdateRunnable implements Runnable
{
@SuppressWarnings("SleepWhileInLoop")
public void run()
{
do
{
if (updateNeeded)
{
updateNeeded = false;
update();
}
try
{
Thread.sleep(60000);
}
catch (InterruptedException ex)
{
logger.info("Forcing MCServerlist update.");
}
}
while (running);
}
@SuppressWarnings("CallToThreadDumpStack")
public void update()
{
// Check that we aren't receiving an event inappropriately
if (Essentials.getSettings().getMcslKey() == null || Essentials.getSettings().getMcslKey().equals("")) return;
// Compile a comma-space-delimted list of players
Player[] players = server.getOnlinePlayers();
StringBuilder list = new StringBuilder();
if (players.length > 0)
{
for (int i = 0; i < players.length; i++)
{
if (i > 0) list.append(", ");
list.append(players[i].getName());
}
}
try
{
// Compile POST data
StringBuilder data = new StringBuilder();
data.append("key=");
data.append(URLEncoder.encode(Essentials.getSettings().getMcslKey(), "UTF-8"));
data.append("&player_count=");
data.append(Integer.toString(players.length));
data.append("&max_players=");
data.append(Integer.toString(server.getMaxPlayers()));
data.append("&player_list=");
data.append(URLEncoder.encode(list.toString(), "UTF-8"));
OutputStreamWriter tx = null;
BufferedReader rx = null;
try
{
// Send POST request
URL url = new URL("http://mcserverlist.net/api/update");
// Swap line for testing purposes
//URL url = new URL("http://localhost/mcsl/update.php");
HttpURLConnection http = (HttpURLConnection)url.openConnection();
http.setRequestMethod("POST");
http.setUseCaches(false);
http.setConnectTimeout(1000);
http.setAllowUserInteraction(false);
http.setInstanceFollowRedirects(true);
http.setRequestProperty("User-Agent", "Java;Mcsl");
http.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
http.setRequestProperty("X-Mcsl-Key", Essentials.getSettings().getMcslKey());
http.setRequestProperty("X-Minecraft-Name", URLEncoder.encode(server.getName(), "UTF-8"));
http.setRequestProperty("X-Minecraft-Version", server.getVersion());
http.setDoInput(true);
http.setDoOutput(true);
tx = new OutputStreamWriter(http.getOutputStream());
tx.write(data.toString());
tx.flush();
// Get the HTTP response
rx = new BufferedReader(new InputStreamReader(http.getInputStream()));
for (String l = ""; rx.ready(); l = rx.readLine())
{
if ("".equals(l)) continue;
else if (l.startsWith("i:")) logger.info(l.substring(2));
else if (l.startsWith("w:")) logger.warning(l.substring(2));
else System.out.println(l);
}
}
finally
{
if (tx != null) tx.close();
if (rx != null) rx.close();
}
}
catch (Exception ex)
{
logger.log(Level.WARNING, "Error communication with MCServerlist.", ex);
ex.printStackTrace();
}
}
}
}

View File

@ -1,107 +0,0 @@
package net.mcserverlist.bukkit;
import com.earth2me.essentials.Essentials;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.bukkit.Server;
public class Whitelist
{
private static final Logger logger = Logger.getLogger("Minecraft");
private List<String> allowed = new ArrayList<String>();
private final Object allowedLock = new Object();
private Server server;
public Whitelist(Server server)
{
this.server = server;
}
public void update()
{
Thread thread = new Thread(new UpdateRunnable());
thread.setDaemon(true);
thread.start();
}
public boolean isAllowed(String player)
{
String p = player.toLowerCase();
synchronized (allowedLock)
{
return allowed.contains(p);
}
}
private class UpdateRunnable implements Runnable
{
@SuppressWarnings("CallToThreadDumpStack")
public void run()
{
// Check that we aren't receiving an event inappropriately
if (Essentials.getSettings().getMcslKey() == null || Essentials.getSettings().getMcslKey().equals("")) return;
try
{
OutputStreamWriter tx = null;
BufferedReader rx = null;
try
{
// Send GET request
URL url = new URL("http://mcserverlist.net/api/whitelist");
// Swap line for testing purposes
//URL url = new URL("http://localhost/mcsl/whitelist.php");
HttpURLConnection http = (HttpURLConnection)url.openConnection();
http.setRequestMethod("POST");
http.setUseCaches(false);
http.setConnectTimeout(1000);
http.setAllowUserInteraction(false);
http.setInstanceFollowRedirects(true);
http.setRequestProperty("User-Agent", "Java;Mcsl");
http.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
http.setRequestProperty("X-Mcsl-Key", Essentials.getSettings().getMcslKey());
http.setRequestProperty("X-Minecraft-Name", URLEncoder.encode(server.getName(), "UTF-8"));
http.setRequestProperty("X-Minecraft-Version", server.getVersion());
http.setDoInput(true);
http.setDoOutput(false);
// Get the HTTP response
rx = new BufferedReader(new InputStreamReader(http.getInputStream()));
List<String> allowed = new ArrayList<String>();
for (String l = ""; rx.ready(); l = rx.readLine())
{
if ("".equals(l)) continue;
else if (l.startsWith("i:")) logger.info(l.substring(2));
else if (l.startsWith("w:")) logger.warning(l.substring(2));
else allowed.add(l.toLowerCase()); // Add to whitelist
}
synchronized (Whitelist.this.allowedLock)
{
Whitelist.this.allowed = allowed;
allowed = null; // Remove our reference so that we don't accidentally use it
}
}
finally
{
if (tx != null) tx.close();
if (rx != null) rx.close();
}
}
catch (Exception ex)
{
logger.log(Level.WARNING, "Error communication with MCServerlist.", ex);
ex.printStackTrace();
}
}
}
}

View File

@ -1,5 +0,0 @@
name: EssentialsServerlist
main: net.mcserverlist.bukkit.Mcsl
version: TeamCity
website: http://mcserverlist.net/
description: Official MCServerlist API implementation

View File

@ -0,0 +1 @@
user.properties.file=C:\\Users\\Paul\\.netbeans\\7.0beta2\\build.properties

View File

@ -4,7 +4,7 @@ import com.earth2me.essentials.Essentials;
import com.earth2me.essentials.User;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.bukkit.event.player.PlayerEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerListener;
import org.bukkit.event.player.PlayerRespawnEvent;
@ -32,7 +32,7 @@ public class EssentialsSpawnPlayerListener extends PlayerListener
}
@Override
public void onPlayerJoin(PlayerEvent event)
public void onPlayerJoin(PlayerJoinEvent event)
{
Essentials.loadClasses();
User user = User.get(event.getPlayer());

BIN
lib/c3p0-0.9.1.2.jar Normal file

Binary file not shown.

Binary file not shown.