From 6548861d489e3fe2fb9f47ec29a2d3f508f85636 Mon Sep 17 00:00:00 2001 From: David Cernat Date: Fri, 11 Oct 2013 11:27:35 +0300 Subject: [PATCH] Add Persistent argument to Spawn, to allow you to spawn monsters that don't get removed completely when you move far away. Some entities, such as animals, are persistent by default in Minecraft. --- .../net/aufdemrand/denizen/objects/dEntity.java | 2 +- .../scripts/commands/CommandRegistry.java | 4 ++-- .../scripts/commands/entity/SpawnCommand.java | 16 ++++++++++++++-- 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/main/java/net/aufdemrand/denizen/objects/dEntity.java b/src/main/java/net/aufdemrand/denizen/objects/dEntity.java index f4e9e5e798..f318d91b3f 100644 --- a/src/main/java/net/aufdemrand/denizen/objects/dEntity.java +++ b/src/main/java/net/aufdemrand/denizen/objects/dEntity.java @@ -1525,7 +1525,7 @@ else if ((float) getLivingEntity().getHealth() / maxHealth < 1) // --> if (attribute.startsWith("is_persistent")) { if (isLivingEntity()) - return new Element(getLivingEntity().getRemoveWhenFarAway()) + return new Element(!getLivingEntity().getRemoveWhenFarAway()) .getAttribute(attribute.fulfill(1)); else return Element.FALSE diff --git a/src/main/java/net/aufdemrand/denizen/scripts/commands/CommandRegistry.java b/src/main/java/net/aufdemrand/denizen/scripts/commands/CommandRegistry.java index 9c41dc0f8b..bba3fec42b 100644 --- a/src/main/java/net/aufdemrand/denizen/scripts/commands/CommandRegistry.java +++ b/src/main/java/net/aufdemrand/denizen/scripts/commands/CommandRegistry.java @@ -1980,7 +1980,7 @@ public void registerCoreMembers() { // <--[command] // @Name Spawn - // @Usage spawn [|...] () (target:) + // @Usage spawn [|...] () (target:) (persistent) // @Required 1 // @Stable stable // @Short Spawns a list of entities at a certain location. @@ -1994,7 +1994,7 @@ public void registerCoreMembers() { // Todo // --> registerCoreMember(SpawnCommand.class, - "SPAWN", "spawn [|...] () (target:)", 1); + "SPAWN", "spawn [|...] () (target:) (persistent)", 1); // <--[command] diff --git a/src/main/java/net/aufdemrand/denizen/scripts/commands/entity/SpawnCommand.java b/src/main/java/net/aufdemrand/denizen/scripts/commands/entity/SpawnCommand.java index c284b16a2f..6f66acab85 100644 --- a/src/main/java/net/aufdemrand/denizen/scripts/commands/entity/SpawnCommand.java +++ b/src/main/java/net/aufdemrand/denizen/scripts/commands/entity/SpawnCommand.java @@ -57,6 +57,12 @@ else if (!scriptEntry.hasObject("spread") scriptEntry.addObject("spread", arg.asElement()); } + else if (!scriptEntry.hasObject("persistent") + && arg.matches("persistent")) { + + scriptEntry.addObject("persistent", ""); + } + else dB.echoError(dB.Messages.ERROR_UNKNOWN_ARGUMENT, arg.raw_value); } @@ -82,12 +88,14 @@ public void execute(final ScriptEntry scriptEntry) throws CommandExecutionExcept dLocation location = (dLocation) scriptEntry.getObject("location"); dEntity target = (dEntity) scriptEntry.getObject("target"); Element spread = scriptEntry.getElement("spread"); + boolean persistent = scriptEntry.hasObject("persistent"); // Report to dB dB.report(getName(), aH.debugObj("entities", entities.toString()) + location.debug() + - (spread != null?spread.debug():"") + - (target != null ? target.debug() : "")); + (spread != null ?spread.debug() : "") + + (target != null ? target.debug() : "") + + (persistent == true ? aH.debugObj("persistent", persistent) : "")); // Keep a dList of entities that can be called using // later in the script queue @@ -113,6 +121,10 @@ public void execute(final ScriptEntry scriptEntry) throws CommandExecutionExcept entityList.add(entity.toString()); + if (persistent && entity.isLivingEntity()) { + entity.getLivingEntity().setRemoveWhenFarAway(false); + } + if (target != null && target.isLivingEntity()) { entity.target(target.getLivingEntity()); }