diff --git a/src/main/java/circuitlord/reactivemusic/PlayerThread.java b/src/main/java/circuitlord/reactivemusic/PlayerThread.java index 3dab344..f7e975b 100644 --- a/src/main/java/circuitlord/reactivemusic/PlayerThread.java +++ b/src/main/java/circuitlord/reactivemusic/PlayerThread.java @@ -235,7 +235,7 @@ public void processRealGain() { /* public int getFramesPlayed() { return player == null ? 0 : player.getFrames(); }*/ - +@SuppressWarnings("removal") public void forceKill() { try { resetPlayer(); diff --git a/src/main/java/circuitlord/reactivemusic/SongPicker.java b/src/main/java/circuitlord/reactivemusic/SongPicker.java index 12b5ab0..f256232 100644 --- a/src/main/java/circuitlord/reactivemusic/SongPicker.java +++ b/src/main/java/circuitlord/reactivemusic/SongPicker.java @@ -53,6 +53,9 @@ public final class SongPicker { public static boolean wasSleeping = false; + public static long lastCombatTime = -1; + public static final long COMBAT_TIMEOUT = 200; // ticks (5 seconds) + static { for (Field field : BIOME_TAG_FIELDS) { @@ -243,6 +246,10 @@ public static void tickEventMap() { } + // Check if player was recently in combat (attacked or was attacked) + boolean inCombat = (world.getTime() - lastCombatTime) < COMBAT_TIMEOUT; + songpackEventMap.put(SongpackEventType.COMBAT, inCombat); + //songpackEventMap.put(SongpackEventType.HOSTILE_MOBS, aggroMobsCount >= 4); diff --git a/src/main/java/circuitlord/reactivemusic/SongpackEventType.java b/src/main/java/circuitlord/reactivemusic/SongpackEventType.java index baea764..f0236f0 100644 --- a/src/main/java/circuitlord/reactivemusic/SongpackEventType.java +++ b/src/main/java/circuitlord/reactivemusic/SongpackEventType.java @@ -52,6 +52,8 @@ public enum SongpackEventType { NEARBY_MOBS, + COMBAT, + diff --git a/src/main/java/circuitlord/reactivemusic/mixin/PlayerEntityMixin.java b/src/main/java/circuitlord/reactivemusic/mixin/PlayerEntityMixin.java new file mode 100644 index 0000000..2f27bd0 --- /dev/null +++ b/src/main/java/circuitlord/reactivemusic/mixin/PlayerEntityMixin.java @@ -0,0 +1,42 @@ +package circuitlord.reactivemusic.mixin; + +import circuitlord.reactivemusic.SongPicker; +import net.minecraft.client.network.ClientPlayerEntity; +import net.minecraft.entity.Entity; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.damage.DamageSource; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.server.world.ServerWorld; +import net.minecraft.world.World; +import org.slf4j.Logger; +import org.spongepowered.asm.mixin.Final; +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; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(PlayerEntity.class) +public abstract class PlayerEntityMixin { + @Shadow @Final private static Logger LOGGER; + + @Inject(method = "attack", at = @At("HEAD")) + private void onAttack(Entity target, CallbackInfo ci) { + if ((Object)this instanceof ClientPlayerEntity) { + ClientPlayerEntity player = (ClientPlayerEntity)(Object)this; + World world = player.getWorld(); + LOGGER.info("Player attacked: {} at time: {}", player.getName().getString(), world.getTime()); + SongPicker.lastCombatTime = world.getTime(); + } + } + @Inject(method = "damage", at = @At("HEAD")) + private void onDamage(ServerWorld world, DamageSource source, float amount, CallbackInfoReturnable cir) { + PlayerEntity player = (PlayerEntity) (Object) this; + World playerWorld = player.getWorld(); + // cause of source + if (source.getAttacker() != null) { + SongPicker.lastCombatTime = playerWorld.getTime(); + } + } +} \ No newline at end of file diff --git a/src/main/java/rm_javazoom/jl/player/PlayerApplet.java b/src/main/java/rm_javazoom/jl/player/PlayerApplet.java index 2f75666..839c00a 100644 --- a/src/main/java/rm_javazoom/jl/player/PlayerApplet.java +++ b/src/main/java/rm_javazoom/jl/player/PlayerApplet.java @@ -35,6 +35,7 @@ * @author Mat McGowan * @since 0.0.8 */ +@SuppressWarnings("removal") public class PlayerApplet extends Applet implements Runnable { static public final String AUDIO_PARAMETER = "audioURL"; diff --git a/src/main/resources/reactivemusic.mixins.json b/src/main/resources/reactivemusic.mixins.json index 3d71331..ee399e8 100644 --- a/src/main/resources/reactivemusic.mixins.json +++ b/src/main/resources/reactivemusic.mixins.json @@ -11,6 +11,7 @@ "MinecraftClientMixin", "MusicTrackerMixin", "BossBarHudAccessor", - "SoundManagerMixin" + "SoundManagerMixin", + "PlayerEntityMixin" ] } \ No newline at end of file