Fixed a bug with worlds in subfolders

Fixed gates being destroyed with explosions
Added stargate.destroy.owner
This commit is contained in:
Drakia 2011-03-13 03:07:17 -07:00
parent a9461846de
commit 432ab3bbc8
3 changed files with 45 additions and 11 deletions

9
README
View File

@ -21,7 +21,9 @@ Known Issues
============= =============
- stargate.use - Allow this player/group to use stargates. - stargate.use - Allow this player/group to use stargates.
- stargate.create - Allow this player/group to create new stargates. - stargate.create - Allow this player/group to create new stargates.
- stargate.destroy - Allow this player/group to destroy existing stargates. - stargate.destroy - Allow this player/group to destroy existing stargates. (Deprecated)
- stargate.destroy.all - Allow this player/group to destroy any existing stargate (Replaces stargate.destroy)
- stargate.destroy.owner - Allow this player/group to destroy any stargate that they are the owner of.
- stargate.hidden - Allow this player/group to see all hidden stargates. - stargate.hidden - Allow this player/group to see all hidden stargates.
- stargate.private - Allow this player/group to use all private stargates. - stargate.private - Allow this player/group to use all private stargates.
@ -78,10 +80,15 @@ other-side-blocked-message - The message when the gate you're dialing is open
teleport-message - The message when you are teleported teleport-message - The message when you are teleported
portal-folder - The folder your portal databases are saved in portal-folder - The folder your portal databases are saved in
gate-folder - The folder containing your .gate files gate-folder - The folder containing your .gate files
destroyexplosion - Whether to destroy a stargate with explosions, or stop an explosion if it contains a gates controls.
============= =============
Changes Changes
============= =============
[Version 0.25]
- Fixed a bug with worlds in subfolders
- Fixed gates being destroyed with explosions
- Added stargate.destroy.owner
[Version 0.24] [Version 0.24]
- Fixed a loading bug in which invalid gates caused file truncation - Fixed a loading bug in which invalid gates caused file truncation
[Version 0.23] [Version 0.23]

View File

@ -23,6 +23,8 @@ import org.bukkit.event.block.BlockPhysicsEvent;
import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.event.block.BlockRightClickEvent; import org.bukkit.event.block.BlockRightClickEvent;
import org.bukkit.event.block.SignChangeEvent; import org.bukkit.event.block.SignChangeEvent;
import org.bukkit.event.entity.EntityExplodeEvent;
import org.bukkit.event.entity.EntityListener;
import org.bukkit.event.player.PlayerListener; import org.bukkit.event.player.PlayerListener;
import org.bukkit.event.player.PlayerMoveEvent; import org.bukkit.event.player.PlayerMoveEvent;
import org.bukkit.event.vehicle.VehicleListener; import org.bukkit.event.vehicle.VehicleListener;
@ -52,6 +54,7 @@ public class Stargate extends JavaPlugin {
private final pListener playerListener = new pListener(); private final pListener playerListener = new pListener();
private final vListener vehicleListener = new vListener(); private final vListener vehicleListener = new vListener();
private final wListener worldListener = new wListener(); private final wListener worldListener = new wListener();
private final eListener entityListener = new eListener();
public static Logger log; public static Logger log;
private Configuration config; private Configuration config;
private PluginManager pm; private PluginManager pm;
@ -65,6 +68,7 @@ public class Stargate extends JavaPlugin {
private static String invMsg = "Invalid Destination"; private static String invMsg = "Invalid Destination";
private static String blockMsg = "Destination Blocked"; private static String blockMsg = "Destination Blocked";
private static String defNetwork = "central"; private static String defNetwork = "central";
private static boolean destroyExplosion = false;
private static int activeLimit = 10; private static int activeLimit = 10;
private static int openLimit = 10; private static int openLimit = 10;
@ -115,6 +119,8 @@ public class Stargate extends JavaPlugin {
pm.registerEvent(Event.Type.WORLD_LOADED, worldListener, Priority.Normal, this); pm.registerEvent(Event.Type.WORLD_LOADED, worldListener, Priority.Normal, this);
pm.registerEvent(Event.Type.ENTITY_EXPLODE, entityListener, Priority.Normal, this);
getServer().getScheduler().scheduleSyncRepeatingTask(this, new SGThread(), 0L, 100L); getServer().getScheduler().scheduleSyncRepeatingTask(this, new SGThread(), 0L, 100L);
} }
@ -129,6 +135,7 @@ public class Stargate extends JavaPlugin {
invMsg = config.getString("not-selected-message", invMsg); invMsg = config.getString("not-selected-message", invMsg);
blockMsg = config.getString("other-side-blocked-message", blockMsg); blockMsg = config.getString("other-side-blocked-message", blockMsg);
defNetwork = config.getString("default-gate-network", defNetwork).trim(); defNetwork = config.getString("default-gate-network", defNetwork).trim();
destroyExplosion = config.getBoolean("destroyexplosion", destroyExplosion);
saveConfig(); saveConfig();
} }
@ -142,6 +149,7 @@ public class Stargate extends JavaPlugin {
config.setProperty("not-selected-message", invMsg); config.setProperty("not-selected-message", invMsg);
config.setProperty("other-side-blocked-message", blockMsg); config.setProperty("other-side-blocked-message", blockMsg);
config.setProperty("default-gate-network", defNetwork); config.setProperty("default-gate-network", defNetwork);
config.setProperty("destroyexplosion", destroyExplosion);
config.save(); config.save();
} }
@ -165,6 +173,7 @@ public class Stargate extends JavaPlugin {
} }
File newFile = new File(portalFolder, getServer().getWorlds().get(0).getName() + ".db"); File newFile = new File(portalFolder, getServer().getWorlds().get(0).getName() + ".db");
if (!newFile.exists()) { if (!newFile.exists()) {
newFile.getParentFile().mkdirs();
// Migrate not-so-old stargate db // Migrate not-so-old stargate db
File oldishFile = new File("plugins/Stargate/stargate.db"); File oldishFile = new File("plugins/Stargate/stargate.db");
if (oldishFile.exists()) { if (oldishFile.exists()) {
@ -417,17 +426,17 @@ public class Stargate extends JavaPlugin {
Portal portal = Portal.getByBlock(block); Portal portal = Portal.getByBlock(block);
if (portal == null) return; if (portal == null) return;
if (!hasPerm(player, "stargate.destroy", player.isOp())) { if (hasPerm(player, "stargate.destroy", player.isOp()) || hasPerm(player, "stargate.destroy.all", player.isOp()) ||
event.setCancelled(true); ( portal.getOwner().equalsIgnoreCase(player.getName()) && hasPerm(player, "stargate.destroy.owner", false) )) {
return;
}
portal.unregister(); portal.unregister();
if (!dmgMsg.isEmpty()) { if (!dmgMsg.isEmpty()) {
player.sendMessage(ChatColor.RED + dmgMsg); player.sendMessage(ChatColor.RED + dmgMsg);
} }
} }
event.setCancelled(true);
}
@Override @Override
public void onBlockPhysics(BlockPhysicsEvent event) { public void onBlockPhysics(BlockPhysicsEvent event) {
Block block = event.getBlock(); Block block = event.getBlock();
@ -457,6 +466,24 @@ public class Stargate extends JavaPlugin {
} }
} }
private class eListener extends EntityListener {
@Override
public void onEntityExplode(EntityExplodeEvent event) {
if (event.isCancelled()) return;
for (Block b : event.blockList()) {
if (b.getTypeId() != Material.WALL_SIGN.getId() && b.getTypeId() != Material.STONE_BUTTON.getId()) continue;
Portal portal = Portal.getByBlock(b);
if (portal == null) continue;
if (destroyExplosion) {
portal.unregister();
} else {
b.setType(b.getType());
event.setCancelled(true);
}
}
}
}
private class SGThread implements Runnable { private class SGThread implements Runnable {
public void run() { public void run() {
long time = System.currentTimeMillis() / 1000; long time = System.currentTimeMillis() / 1000;

View File

@ -1,6 +1,6 @@
name: Stargate name: Stargate
main: net.TheDgtl.Stargate.Stargate main: net.TheDgtl.Stargate.Stargate
version: 0.24 version: 0.25
description: Stargate mod for Bukkit description: Stargate mod for Bukkit
author: Drakia author: Drakia
website: http://www.thedgtl.net website: http://www.thedgtl.net