Skip to content

Commit

Permalink
Triggers: Implement EntityDamage and EntityDeath
Browse files Browse the repository at this point in the history
  • Loading branch information
camnwalter committed Mar 7, 2024
1 parent 2b4e9ac commit f2ad6fc
Show file tree
Hide file tree
Showing 5 changed files with 67 additions and 4 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.chattriggers.ctjs.internal.mixins;

import com.chattriggers.ctjs.api.triggers.TriggerType;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityType;
import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.damage.DamageSource;
import net.minecraft.world.World;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

@Mixin(LivingEntity.class)
public abstract class LivingEntityMixin extends Entity {
public LivingEntityMixin(EntityType<?> type, World world) {
super(type, world);
}

@Inject(method = "onDeath", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/LivingEntity;setPose(Lnet/minecraft/entity/EntityPose;)V"))
private void chattriggers$entityDeath(DamageSource damageSource, CallbackInfo ci) {
if (getWorld().isClient) {
TriggerType.ENTITY_DEATH.triggerAll(this);
}
}
}
Original file line number Diff line number Diff line change
@@ -1,27 +1,64 @@
package com.chattriggers.ctjs.internal.mixins;

import com.chattriggers.ctjs.api.triggers.TriggerType;
import com.chattriggers.ctjs.internal.NameTagOverridable;
import com.chattriggers.ctjs.api.message.TextComponent;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityType;
import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.text.MutableText;
import net.minecraft.world.World;
import org.jetbrains.annotations.Nullable;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Unique;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.ModifyVariable;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

@Mixin(PlayerEntity.class)
public class PlayerEntityMixin implements NameTagOverridable {
public abstract class PlayerEntityMixin extends LivingEntity implements NameTagOverridable {
@Unique
private TextComponent overriddenNametagName;

protected PlayerEntityMixin(EntityType<? extends LivingEntity> entityType, World world) {
super(entityType, world);
}

@ModifyVariable(method = "getDisplayName", at = @At(value = "STORE", ordinal = 0))
private MutableText injectGetName(MutableText original) {
if (overriddenNametagName != null)
return overriddenNametagName.toMutableText$ctjs();
return original;
}

@Inject(
method = "attack",
at = @At(
value = "INVOKE",
target = "Lnet/minecraft/entity/Entity;damage(Lnet/minecraft/entity/damage/DamageSource;F)Z"
)
)
private void chattriggers$entityDamage(Entity target, CallbackInfo ci) {
if (getWorld().isClient) {
TriggerType.ENTITY_DAMAGE.triggerAll(com.chattriggers.ctjs.api.entity.Entity.fromMC(target));
}
}

@Inject(
method = "attack",
at = @At(
value = "INVOKE",
target = "Lnet/minecraft/entity/LivingEntity;damage(Lnet/minecraft/entity/damage/DamageSource;F)Z"
)
)
private void chattriggers$entityDamageSweeping(Entity target, CallbackInfo ci) {
if (getWorld().isClient) {
TriggerType.ENTITY_DAMAGE.triggerAll(com.chattriggers.ctjs.api.entity.Entity.fromMC(target));
}
}

@Override
public void ctjs_setOverriddenNametagName(@Nullable TextComponent component) {
overriddenNametagName = component;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,6 @@ enum class TriggerType : ITriggerType {
ENTITY_DAMAGE,

// misc
MIXIN,
COMMAND,
OTHER
}
Expand Down
3 changes: 1 addition & 2 deletions src/main/kotlin/com/chattriggers/ctjs/engine/Register.kt
Original file line number Diff line number Diff line change
Expand Up @@ -498,9 +498,8 @@ object Register {
/**
* Registers a new trigger that runs before an entity is damaged
*
* Passes through two arguments:
* Passes through one argument:
* - The target Entity that is damaged
* - The PlayerMP attacker
*
* @param method The method to call when the event is fired
* @return The trigger for additional modification
Expand Down
1 change: 1 addition & 0 deletions src/main/resources/chattriggers.mixins.json
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
"InGameHudMixin",
"ItemStackMixin",
"KeyBindingAccessor",
"LivingEntityMixin",
"MinecraftClientMixin",
"MouseMixin",
"NbtCompoundAccessor",
Expand Down

0 comments on commit f2ad6fc

Please sign in to comment.