mirror of
https://github.com/garbagemule/MobArena.git
synced 2025-02-20 06:21:59 +01:00
TNT no longer hurts other players with PvP disabled.
This commit is contained in:
parent
1c45d45e91
commit
0be1a7e4c9
@ -67,6 +67,9 @@ import org.bukkit.material.Attachable;
|
|||||||
import org.bukkit.material.Bed;
|
import org.bukkit.material.Bed;
|
||||||
import org.bukkit.material.Door;
|
import org.bukkit.material.Door;
|
||||||
import org.bukkit.material.Redstone;
|
import org.bukkit.material.Redstone;
|
||||||
|
import org.bukkit.metadata.FixedMetadataValue;
|
||||||
|
import org.bukkit.metadata.MetadataValue;
|
||||||
|
import org.bukkit.metadata.Metadatable;
|
||||||
import org.bukkit.potion.PotionEffect;
|
import org.bukkit.potion.PotionEffect;
|
||||||
import org.bukkit.potion.PotionEffectType;
|
import org.bukkit.potion.PotionEffectType;
|
||||||
|
|
||||||
@ -235,12 +238,16 @@ public class ArenaListener
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// If the block is TNT, replace with a TNTPrimed
|
// If the block is TNT, set its planter
|
||||||
if (autoIgniteTNT && b.getType() == Material.TNT) {
|
if (b.getType() == Material.TNT) {
|
||||||
event.setCancelled(true);
|
if (autoIgniteTNT) {
|
||||||
event.getPlayer().getInventory().removeItem(new ItemStack(Material.TNT, 1));
|
event.setCancelled(true);
|
||||||
b.getWorld().spawn(b.getRelative(BlockFace.UP).getLocation(), TNTPrimed.class);
|
event.getPlayer().getInventory().removeItem(new ItemStack(Material.TNT, 1));
|
||||||
return;
|
TNTPrimed tnt = b.getWorld().spawn(b.getRelative(BlockFace.UP).getLocation(), TNTPrimed.class);
|
||||||
|
setPlanter(tnt, event.getPlayer());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
setPlanter(b, event.getPlayer());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Otherwise, block was placed during a session.
|
// Otherwise, block was placed during a session.
|
||||||
@ -252,6 +259,20 @@ public class ArenaListener
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void setPlanter(Metadatable tnt, Player planter) {
|
||||||
|
tnt.setMetadata("mobarena-planter", new FixedMetadataValue(plugin, planter));
|
||||||
|
}
|
||||||
|
|
||||||
|
private Player getPlanter(Metadatable tnt) {
|
||||||
|
List<MetadataValue> values = tnt.getMetadata("mobarena-planter");
|
||||||
|
for (MetadataValue value : values) {
|
||||||
|
if (value.getOwningPlugin().equals(plugin)) {
|
||||||
|
return (Player) value.value();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
public void onBlockForm(BlockFormEvent event) {
|
public void onBlockForm(BlockFormEvent event) {
|
||||||
if (!arena.getRegion().contains(event.getBlock().getLocation()))
|
if (!arena.getRegion().contains(event.getBlock().getLocation()))
|
||||||
return;
|
return;
|
||||||
@ -262,20 +283,29 @@ public class ArenaListener
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void onBlockIgnite(BlockIgniteEvent event) {
|
public void onBlockIgnite(BlockIgniteEvent event) {
|
||||||
if (!arena.getRegion().contains(event.getBlock().getLocation()))
|
Block b = event.getBlock();
|
||||||
|
if (!arena.getRegion().contains(b.getLocation()))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
switch (event.getCause()){
|
switch (event.getCause()) {
|
||||||
|
case FLINT_AND_STEEL:
|
||||||
|
if (arena.isRunning()) {
|
||||||
|
if (b.getType() == Material.TNT) {
|
||||||
|
Player planter = getPlanter(b);
|
||||||
|
if (planter != null) {
|
||||||
|
b.setTypeId(0);
|
||||||
|
TNTPrimed tnt = b.getWorld().spawn(b.getLocation(), TNTPrimed.class);
|
||||||
|
setPlanter(tnt, planter);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
arena.addBlock(event.getBlock().getRelative(BlockFace.UP));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
case LIGHTNING:
|
case LIGHTNING:
|
||||||
case SPREAD:
|
case SPREAD:
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
break;
|
break;
|
||||||
case FLINT_AND_STEEL:
|
|
||||||
if (arena.isRunning())
|
|
||||||
arena.addBlock(event.getBlock().getRelative(BlockFace.UP));
|
|
||||||
else
|
|
||||||
event.setCancelled(true);
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -484,6 +514,8 @@ public class ArenaListener
|
|||||||
|
|
||||||
if (damager instanceof Projectile) {
|
if (damager instanceof Projectile) {
|
||||||
damager = ((Projectile) damager).getShooter();
|
damager = ((Projectile) damager).getShooter();
|
||||||
|
} else if (damager instanceof TNTPrimed) {
|
||||||
|
damager = getPlanter(damager);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -517,7 +549,7 @@ public class ArenaListener
|
|||||||
}
|
}
|
||||||
// If PvP is disabled and damager is a player, cancel damage
|
// If PvP is disabled and damager is a player, cancel damage
|
||||||
else if (arena.inArena(player)) {
|
else if (arena.inArena(player)) {
|
||||||
if (!pvpEnabled && (damager instanceof Player || damager instanceof Wolf)) {
|
if (!pvpEnabled && ((damager instanceof Player && !damager.equals(player)) || damager instanceof Wolf)) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user