Skip to content

Commit

Permalink
prevent being unable to use commands when hitting a safe mob
Browse files Browse the repository at this point in the history
  • Loading branch information
ty-a committed Apr 18, 2014
1 parent ec776d5 commit e432bc6
Show file tree
Hide file tree
Showing 4 changed files with 42 additions and 16 deletions.
9 changes: 9 additions & 0 deletions src/main/java/com/faceyspacies/NoEscape/NoEscape.java
Expand Up @@ -18,19 +18,28 @@

import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;

public class NoEscape extends JavaPlugin {

protected static List<Player> NoEscapePlayers = new LinkedList<Player>();
protected static List<EntityType> safeMobs = new LinkedList<EntityType>();

@Override
public void onEnable() {
this.saveDefaultConfig(); // shouldn't override actual config if it exist

getCommand("noescape").setExecutor(this);
getServer().getPluginManager().registerEvents(new NoEscapeListener(this), this);

List<String> safeMobsFromConfig = this.getConfig().getStringList("safe-mobs");
for(String element: safeMobsFromConfig) {
element = element.toUpperCase().replace(" ", "_");
if(EntityType.valueOf(element) != null )
safeMobs.add(EntityType.valueOf(element));
}
}

@Override
Expand Down
36 changes: 21 additions & 15 deletions src/main/java/com/faceyspacies/NoEscape/NoEscapeListener.java
Expand Up @@ -64,26 +64,32 @@ public void dmg(EntityDamageEvent event) {
if(event.getCause() == EntityDamageEvent.DamageCause.ENTITY_ATTACK ||
event.getCause() == EntityDamageEvent.DamageCause.ENTITY_EXPLOSION ||
event.getCause() == EntityDamageEvent.DamageCause.PROJECTILE) {

if( hitPlayer || causedByPlayer ) {

if(!hitPlayer) {
if(NoEscape.safeMobs.contains(event.getEntity().getType())) {
return; // player hit a safe to hit mob
}
}

if( !hitPlayer && causedByPlayer ) {
if(this.plugin.getConfig().getBoolean("PvM")) {
if( hitPlayer && !causedByPlayer ) {
if(!((Player)damagee).hasPermission("noescape.bypass"))
createTask((Player)damagee); // player is hit by entity
}
else if ( !hitPlayer && causedByPlayer ) {
if(this.plugin.getConfig().getBoolean("PvM")) {
if(!((Player)(((EntityDamageByEntityEvent) event).getDamager())).hasPermission("noescape.bypass"))
createTask((Player)(((EntityDamageByEntityEvent) event).getDamager()));
// player is hitting something not human
}
}
if(!((Player)(((EntityDamageByEntityEvent) event).getDamager())).hasPermission("noescape.bypass"))
createTask((Player)(((EntityDamageByEntityEvent) event).getDamager())); // player hit entity
}

if(this.plugin.getConfig().getBoolean("PvP")) {
}

else if( hitPlayer && !causedByPlayer ) {
if(this.plugin.getConfig().getBoolean("PvM")) {
if(!((Player)damagee).hasPermission("noescape.bypass"))
createTask((Player)damagee);
}
}

if(this.plugin.getConfig().getBoolean("PvP")) {
if( hitPlayer && causedByPlayer ) {
if(!((Player)damagee).hasPermission("noescape.bypass"))
createTask((Player)damagee);

if(!((Player)(((EntityDamageByEntityEvent) event).getDamager())).hasPermission("noescape.bypass"))
createTask((Player)(((EntityDamageByEntityEvent) event).getDamager()));
}
Expand Down
11 changes: 11 additions & 0 deletions src/main/resources/config.yml
Expand Up @@ -13,3 +13,14 @@ disabled-in-worlds:
- world_example
#Message that is sent to the players when they try to use commands after receiving damage. Supports & color codes.
message: '&cYou can not use commands when taking damage!'
# Mobs when attacked by the player that will not restrict use of command
safe-mobs:
- cow
- sheep
- chicken
- horse
- pig
- mushroom cow
- squid
- snowman
- villager
2 changes: 1 addition & 1 deletion src/main/resources/plugin.yml
@@ -1,6 +1,6 @@
name: NoEscape
main: com.faceyspacies.NoEscape.NoEscape
version: 1.0
version: 1.1
author: tehTyA

commands:
Expand Down

0 comments on commit e432bc6

Please sign in to comment.