Fixed issue with gate destruction
Added StargateEvent API
This commit is contained in:
parent
1b117c3132
commit
f174d9003b
@ -9,6 +9,9 @@ import java.util.Iterator;
|
|||||||
import java.util.Scanner;
|
import java.util.Scanner;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
|
|
||||||
|
import net.TheDgtl.Stargate.event.StargateCloseEvent;
|
||||||
|
import net.TheDgtl.Stargate.event.StargateOpenEvent;
|
||||||
|
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
@ -215,6 +218,12 @@ public class Portal {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean open(Player openFor, boolean force) {
|
public boolean open(Player openFor, boolean force) {
|
||||||
|
// Call the StargateOpenEvent
|
||||||
|
StargateOpenEvent event = new StargateOpenEvent(openFor, this, force);
|
||||||
|
Stargate.server.getPluginManager().callEvent(event);
|
||||||
|
if (event.isCancelled()) return false;
|
||||||
|
force = event.getForce();
|
||||||
|
|
||||||
if (isOpen() && !force) return false;
|
if (isOpen() && !force) return false;
|
||||||
|
|
||||||
getWorld().loadChunk(getWorld().getChunkAt(topLeft.getBlock()));
|
getWorld().loadChunk(getWorld().getChunkAt(topLeft.getBlock()));
|
||||||
@ -245,7 +254,14 @@ public class Portal {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void close(boolean force) {
|
public void close(boolean force) {
|
||||||
if (isAlwaysOn() && !force) return; // Never close an always open gate
|
if (!isOpen) return;
|
||||||
|
// Call the StargateCloseEvent
|
||||||
|
StargateCloseEvent event = new StargateCloseEvent(this, force);
|
||||||
|
Stargate.server.getPluginManager().callEvent(event);
|
||||||
|
if (event.isCancelled()) return;
|
||||||
|
force = event.getForce();
|
||||||
|
|
||||||
|
if (isAlwaysOn() && !force) return; // Only close always-open if forced
|
||||||
|
|
||||||
// Close this gate, then the dest gate.
|
// Close this gate, then the dest gate.
|
||||||
for (Blox inside : getEntrances()) {
|
for (Blox inside : getEntrances()) {
|
||||||
@ -722,7 +738,6 @@ public class Portal {
|
|||||||
Stargate.debug("createPortal", "h = " + hidden + " a = " + alwaysOn + " p = " + priv + " f = " + free + " b = " + backwards);
|
Stargate.debug("createPortal", "h = " + hidden + " a = " + alwaysOn + " p = " + priv + " f = " + free + " b = " + backwards);
|
||||||
|
|
||||||
if ((network.length() < 1) || (network.length() > 11)) {
|
if ((network.length() < 1) || (network.length() > 11)) {
|
||||||
Stargate.debug("createPortal", "Network name too long. Shortening");
|
|
||||||
network = Stargate.getDefaultNetwork();
|
network = Stargate.getDefaultNetwork();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -348,6 +348,7 @@ public class Stargate extends JavaPlugin {
|
|||||||
// Can access all networks
|
// Can access all networks
|
||||||
if (hasPerm(player, "stargate.network")) return true;
|
if (hasPerm(player, "stargate.network")) return true;
|
||||||
// Can access this network
|
// Can access this network
|
||||||
|
Stargate.debug("canAccessNetwork", "stargate.network." + network);
|
||||||
if (hasPerm(player, "stargate.network." + network)) return true;
|
if (hasPerm(player, "stargate.network." + network)) return true;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -615,7 +616,7 @@ public class Stargate extends JavaPlugin {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Stargate.sendMessage(player, teleMsg);
|
Stargate.sendMessage(player, teleMsg, false);
|
||||||
destination.teleport(player, portal, event);
|
destination.teleport(player, portal, event);
|
||||||
portal.close(false);
|
portal.close(false);
|
||||||
}
|
}
|
||||||
@ -664,9 +665,6 @@ public class Stargate extends JavaPlugin {
|
|||||||
if (block.getType() == Material.WALL_SIGN) {
|
if (block.getType() == Material.WALL_SIGN) {
|
||||||
Portal portal = Portal.getByBlock(block);
|
Portal portal = Portal.getByBlock(block);
|
||||||
if (portal == null) return;
|
if (portal == null) return;
|
||||||
// Cancel item use
|
|
||||||
event.setUseItemInHand(Result.DENY);
|
|
||||||
event.setUseInteractedBlock(Result.DENY);
|
|
||||||
|
|
||||||
if (!Stargate.canAccessNetwork(player, portal.getNetwork())) {
|
if (!Stargate.canAccessNetwork(player, portal.getNetwork())) {
|
||||||
Stargate.sendMessage(player, denyMsg);
|
Stargate.sendMessage(player, denyMsg);
|
||||||
@ -735,6 +733,7 @@ public class Stargate extends JavaPlugin {
|
|||||||
|
|
||||||
if (!Stargate.canDestroy(player, portal)) {
|
if (!Stargate.canDestroy(player, portal)) {
|
||||||
Stargate.sendMessage(player, "Permission Denied");
|
Stargate.sendMessage(player, "Permission Denied");
|
||||||
|
Stargate.log.info("[Stargate] " + player.getName() + " tried to destroy gate");
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -921,6 +920,7 @@ public class Stargate extends JavaPlugin {
|
|||||||
Portal p = iter.next();
|
Portal p = iter.next();
|
||||||
// Skip always open gates
|
// Skip always open gates
|
||||||
if (p.isAlwaysOn()) continue;
|
if (p.isAlwaysOn()) continue;
|
||||||
|
if (!p.isOpen()) continue;
|
||||||
if (time > p.getOpenTime() + Stargate.openTime) {
|
if (time > p.getOpenTime() + Stargate.openTime) {
|
||||||
p.close(false);
|
p.close(false);
|
||||||
iter.remove();
|
iter.remove();
|
||||||
@ -929,6 +929,7 @@ public class Stargate extends JavaPlugin {
|
|||||||
// Deactivate active portals
|
// Deactivate active portals
|
||||||
for (Iterator<Portal> iter = Stargate.activeList.iterator(); iter.hasNext();) {
|
for (Iterator<Portal> iter = Stargate.activeList.iterator(); iter.hasNext();) {
|
||||||
Portal p = iter.next();
|
Portal p = iter.next();
|
||||||
|
if (!p.isActive()) continue;
|
||||||
if (time > p.getOpenTime() + Stargate.activeTime) {
|
if (time > p.getOpenTime() + Stargate.activeTime) {
|
||||||
p.deactivate();
|
p.deactivate();
|
||||||
iter.remove();
|
iter.remove();
|
||||||
|
11
src/net/TheDgtl/Stargate/event/StargateCloseEvent.java
Normal file
11
src/net/TheDgtl/Stargate/event/StargateCloseEvent.java
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
package net.TheDgtl.Stargate.event;
|
||||||
|
|
||||||
|
import net.TheDgtl.Stargate.Portal;
|
||||||
|
|
||||||
|
public class StargateCloseEvent extends StargateEvent {
|
||||||
|
private static final long serialVersionUID = -4382967941863636023L;
|
||||||
|
|
||||||
|
public StargateCloseEvent(Portal portal, boolean force) {
|
||||||
|
super("StargateCloseEvent", portal, force);
|
||||||
|
}
|
||||||
|
}
|
43
src/net/TheDgtl/Stargate/event/StargateEvent.java
Normal file
43
src/net/TheDgtl/Stargate/event/StargateEvent.java
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
package net.TheDgtl.Stargate.event;
|
||||||
|
|
||||||
|
import net.TheDgtl.Stargate.Portal;
|
||||||
|
|
||||||
|
import org.bukkit.event.Cancellable;
|
||||||
|
import org.bukkit.event.Event;
|
||||||
|
|
||||||
|
public class StargateEvent extends Event implements Cancellable {
|
||||||
|
private static final long serialVersionUID = -5079274654178040431L;
|
||||||
|
protected Portal portal;
|
||||||
|
protected boolean cancelled;
|
||||||
|
protected boolean force;
|
||||||
|
|
||||||
|
public StargateEvent(String event, Portal portal, boolean force) {
|
||||||
|
super (event);
|
||||||
|
this.portal = portal;
|
||||||
|
this.cancelled = false;
|
||||||
|
this.force = force;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Portal getPortal() {
|
||||||
|
return portal;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean getForce() {
|
||||||
|
return force;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setForce(boolean force) {
|
||||||
|
this.force = force;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isCancelled() {
|
||||||
|
return this.cancelled;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setCancelled(boolean cancelled) {
|
||||||
|
this.cancelled = cancelled;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
28
src/net/TheDgtl/Stargate/event/StargateListener.java
Normal file
28
src/net/TheDgtl/Stargate/event/StargateListener.java
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
package net.TheDgtl.Stargate.event;
|
||||||
|
|
||||||
|
import org.bukkit.event.CustomEventListener;
|
||||||
|
import org.bukkit.event.Event;
|
||||||
|
import org.bukkit.event.Listener;
|
||||||
|
|
||||||
|
public class StargateListener extends CustomEventListener implements Listener {
|
||||||
|
public StargateListener() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void onStargateOpen(StargateOpenEvent event) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void onStargateClose(StargateCloseEvent event) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onCustomEvent(Event event) {
|
||||||
|
if (event instanceof StargateOpenEvent) {
|
||||||
|
onStargateOpen((StargateOpenEvent)event);
|
||||||
|
} else if (event instanceof StargateCloseEvent) {
|
||||||
|
onStargateClose((StargateCloseEvent)event);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
25
src/net/TheDgtl/Stargate/event/StargateOpenEvent.java
Normal file
25
src/net/TheDgtl/Stargate/event/StargateOpenEvent.java
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
package net.TheDgtl.Stargate.event;
|
||||||
|
|
||||||
|
import net.TheDgtl.Stargate.Portal;
|
||||||
|
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
public class StargateOpenEvent extends StargateEvent {
|
||||||
|
private static final long serialVersionUID = -2804865767733660648L;
|
||||||
|
Player player;
|
||||||
|
|
||||||
|
public StargateOpenEvent(Player player, Portal portal, boolean force) {
|
||||||
|
super ("StargateOpenEvent", portal, force);
|
||||||
|
|
||||||
|
this.player = player;
|
||||||
|
this.portal = portal;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the player than opened the gate.
|
||||||
|
* @return player than opened the gate
|
||||||
|
*/
|
||||||
|
public Player getPlayer() {
|
||||||
|
return player;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user