Skip to content
This repository has been archived by the owner on Apr 12, 2022. It is now read-only.

Commit

Permalink
Entity Killed and Death
Browse files Browse the repository at this point in the history
Added some missing documentation as well as damage determination.
  • Loading branch information
Xenmai committed Mar 24, 2017
1 parent 94f55bd commit 24991f5
Show file tree
Hide file tree
Showing 6 changed files with 233 additions and 6 deletions.
Expand Up @@ -14,14 +14,12 @@
import com.denizenscript.denizen2sponge.commands.world.EditBlockCommand;
import com.denizenscript.denizen2sponge.commands.world.PlayEffectCommand;
import com.denizenscript.denizen2sponge.commands.world.SetBlockCommand;
import com.denizenscript.denizen2sponge.events.entity.EntityDamagedScriptEvent;
import com.denizenscript.denizen2sponge.events.entity.*;
import com.denizenscript.denizen2sponge.events.player.*;
import com.denizenscript.denizen2sponge.events.entity.EntityMovesScriptEvent;
import com.denizenscript.denizen2sponge.events.server.ClientPingsServerScriptEvent;
import com.denizenscript.denizen2sponge.events.server.InternalScriptEvent;
import com.denizenscript.denizen2sponge.events.server.ServerStopsScriptEvent;
import com.denizenscript.denizen2sponge.events.world.BlockChangeScriptEvent;
import com.denizenscript.denizen2sponge.events.entity.EntitySpawnScriptEvent;
import com.denizenscript.denizen2sponge.spongecommands.ExCommand;
import com.denizenscript.denizen2sponge.spongeevents.Denizen2SpongeLoadedEvent;
import com.denizenscript.denizen2sponge.spongeevents.Denizen2SpongeLoadingEvent;
Expand Down Expand Up @@ -139,6 +137,8 @@ public void onServerStart(GamePreInitializationEvent event) {
Denizen2Core.register(new SetBlockCommand());
// Events: Entity
Denizen2Core.register(new EntityDamagedScriptEvent());
Denizen2Core.register(new EntityDiesScriptEvent());
Denizen2Core.register(new EntityKilledScriptEvent());
Denizen2Core.register(new EntityMovesScriptEvent());
Denizen2Core.register(new EntitySpawnScriptEvent());
// Events: Player
Expand Down
Expand Up @@ -8,17 +8,20 @@
import com.denizenscript.denizen2sponge.tags.objects.*;
import org.spongepowered.api.Sponge;
import org.spongepowered.api.event.Listener;
import org.spongepowered.api.event.cause.entity.damage.DamageModifier;
import org.spongepowered.api.event.entity.DamageEntityEvent;
import org.spongepowered.api.util.Tuple;

import java.util.HashMap;
import java.util.function.Function;

public class EntityDamagedScriptEvent extends ScriptEvent {

// <--[event]
// @Events
// entity damaged
//
// @Updated 2016/09/28
// @Updated 2017/03/24
//
// @Group Entity
//
Expand All @@ -33,7 +36,7 @@ public class EntityDamagedScriptEvent extends ScriptEvent {
// damage (NumberTag) returns the amount of damage applied.
//
// @Determinations
// None.
// damage (NumberTag) to set the amount of damage applied.
// -->

@Override
Expand Down Expand Up @@ -89,6 +92,16 @@ public void onEntityDamaged(DamageEntityEvent evt) {

@Override
public void applyDetermination(boolean errors, String determination, AbstractTagObject value) {
super.applyDetermination(errors, determination, value);
if (determination.equals("damage")) {
NumberTag nt = NumberTag.getFor(this::error, value);
damage = nt;
internal.setBaseDamage(nt.getInternal());
for (Tuple<DamageModifier, Function<? super Double,Double>> tuple : internal.getModifiers()) {
internal.setDamage(tuple.getFirst(), (x) -> 0.0);
}
}
else {
super.applyDetermination(errors, determination, value);
}
}
}
@@ -0,0 +1,110 @@
package com.denizenscript.denizen2sponge.events.entity;

import com.denizenscript.denizen2core.events.ScriptEvent;
import com.denizenscript.denizen2core.tags.AbstractTagObject;
import com.denizenscript.denizen2core.tags.objects.BooleanTag;
import com.denizenscript.denizen2core.tags.objects.NumberTag;
import com.denizenscript.denizen2sponge.Denizen2Sponge;
import com.denizenscript.denizen2sponge.events.D2SpongeEventHelper;
import com.denizenscript.denizen2sponge.tags.objects.EntityTag;
import com.denizenscript.denizen2sponge.tags.objects.FormattedTextTag;
import org.spongepowered.api.Sponge;
import org.spongepowered.api.event.Listener;
import org.spongepowered.api.event.cause.entity.damage.DamageModifier;
import org.spongepowered.api.event.entity.DamageEntityEvent;
import org.spongepowered.api.event.entity.DestructEntityEvent;
import org.spongepowered.api.util.Tuple;

import java.util.HashMap;
import java.util.function.Function;

public class EntityDiesScriptEvent extends ScriptEvent {

// <--[event]
// @Events
// entity dies
//
// @Updated 2017/03/24
//
// @Group Entity
//
// @Cancellable false
//
// @Triggers when an entity dies.
//
// @Switch type (EntityTypeTag) checks the entity type.
//
// @Context
// entity (EntityTag) returns the entity that died.
// message (FormattedTextTag) returns the message that will be broadcast to the server.
//
// @Determinations
// message (FormattedTextTag) to set the message displayed when the entity dies.
// cancel_message (BooleanTag) to set whether the death message is cancelled.
// -->

@Override
public String getName() {
return "EntityDies";
}

@Override
public boolean couldMatch(ScriptEventData data) {
return data.eventPath.startsWith("entity dies");
}

@Override
public boolean matches(ScriptEventData data) {
return D2SpongeEventHelper.checkEntityType(entity.getInternal().getType(), data, this::error);
}

public EntityTag entity;

public FormattedTextTag message;

public DestructEntityEvent.Death internal;

@Override
public HashMap<String, AbstractTagObject> getDefinitions(ScriptEventData data) {
HashMap<String, AbstractTagObject> defs = super.getDefinitions(data);
defs.put("entity", entity);
defs.put("message", message);
return defs;
}

@Override
public void enable() {
Sponge.getEventManager().registerListeners(Denizen2Sponge.instance, this);
}

@Override
public void disable() {
Sponge.getEventManager().unregisterListeners(this);
}

@Listener
public void onEntityDies(DestructEntityEvent.Death evt) {
EntityDiesScriptEvent event = (EntityDiesScriptEvent) clone();
event.internal = evt;
event.entity = new EntityTag(evt.getTargetEntity());
event.message = new FormattedTextTag(evt.getMessage());
event.run();
}

@Override
public void applyDetermination(boolean errors, String determination, AbstractTagObject value) {
if (determination.equals("message")) {
FormattedTextTag ftt = FormattedTextTag.getFor(this::error, value);
message = ftt;
internal.setMessage(ftt.getInternal());
}
else if (determination.equals("cancel_message")) {
// TODO: Context for this?
BooleanTag bt = BooleanTag.getFor(this::error, value);
internal.setMessageCancelled(bt.getInternal());
}
else {
super.applyDetermination(errors, determination, value);
}
}
}
@@ -0,0 +1,100 @@
package com.denizenscript.denizen2sponge.events.entity;

import com.denizenscript.denizen2core.events.ScriptEvent;
import com.denizenscript.denizen2core.tags.AbstractTagObject;
import com.denizenscript.denizen2core.tags.objects.NumberTag;
import com.denizenscript.denizen2sponge.Denizen2Sponge;
import com.denizenscript.denizen2sponge.events.D2SpongeEventHelper;
import com.denizenscript.denizen2sponge.tags.objects.EntityTag;
import org.spongepowered.api.Sponge;
import org.spongepowered.api.event.Listener;
import org.spongepowered.api.event.cause.entity.damage.DamageModifier;
import org.spongepowered.api.event.entity.DamageEntityEvent;
import org.spongepowered.api.util.Tuple;

import java.util.HashMap;
import java.util.function.Function;

public class EntityKilledScriptEvent extends ScriptEvent {

// <--[event]
// @Events
// entity killed
//
// @Updated 2017/03/24
//
// @Group Entity
//
// @Cancellable true
//
// @Triggers when an entity is killed.
//
// @Switch type (EntityTypeTag) checks the entity type.
//
// @Context
// entity (EntityTag) returns the entity that was killed.
// damage (NumberTag) returns the amount of damage applied.
//
// @Determinations
// None.
// -->

@Override
public String getName() {
return "EntityKilled";
}

@Override
public boolean couldMatch(ScriptEventData data) {
return data.eventPath.startsWith("entity killed");
}

@Override
public boolean matches(ScriptEventData data) {
return D2SpongeEventHelper.checkEntityType(entity.getInternal().getType(), data, this::error);
}

public EntityTag entity;

public NumberTag damage;

public DamageEntityEvent internal;

@Override
public HashMap<String, AbstractTagObject> getDefinitions(ScriptEventData data) {
HashMap<String, AbstractTagObject> defs = super.getDefinitions(data);
defs.put("entity", entity);
defs.put("damage", damage);
return defs;
}

@Override
public void enable() {
Sponge.getEventManager().registerListeners(Denizen2Sponge.instance, this);
}

@Override
public void disable() {
Sponge.getEventManager().unregisterListeners(this);
}

@Listener
public void onEntityKilled(DamageEntityEvent evt) {
EntityKilledScriptEvent event = (EntityKilledScriptEvent) clone();
event.internal = evt;
if (!evt.willCauseDeath()) {
return;
}
event.entity = new EntityTag(evt.getTargetEntity());
event.damage = new NumberTag(evt.getFinalDamage());
event.cancelled = evt.isCancelled();
// TODO: Cause viewing
event.run();
evt.setCancelled(event.cancelled);
}

@Override
public void applyDetermination(boolean errors, String determination, AbstractTagObject value) {
super.applyDetermination(errors, determination, value);
}
}
Expand Up @@ -32,6 +32,8 @@ public class PlayerBreaksBlockScriptEvent extends ScriptEvent {
//
// @Triggers when a player breaks a block.
//
// @Switch type (BlockTypeTag) checks the block type.
//
// @Context
// player (PlayerTag) returns the player that broke the block.
// material (BlockTypeTag) returns the broken material.
Expand Down
Expand Up @@ -31,6 +31,8 @@ public class PlayerPlacesBlockScriptEvent extends ScriptEvent {
//
// @Triggers when a player places a block.
//
// @Switch type (BlockTypeTag) checks the block type.
//
// @Context
// player (PlayerTag) returns the player that broke the block.
// material (BlockTypeTag) returns the placed material.
Expand Down

0 comments on commit 24991f5

Please sign in to comment.