добейте выживших (триггеры)

This commit is contained in:
YuRaNnNzZZ 2023-06-09 08:41:27 +03:00
parent 16b28a1d2d
commit b7a8f6db14
Signed by: YuRaNnNzZZ
GPG Key ID: 5F71738C85A6006D
2 changed files with 11 additions and 22 deletions

View File

@ -1,14 +1,7 @@
package ru.dbotthepony.mc.otm.triggers package ru.dbotthepony.mc.otm.triggers
import com.google.gson.JsonObject import com.google.gson.JsonObject
import net.minecraft.advancements.critereon.AbstractCriterionTriggerInstance import net.minecraft.advancements.critereon.*
import net.minecraft.advancements.critereon.DamagePredicate
import net.minecraft.advancements.critereon.DamageSourcePredicate
import net.minecraft.advancements.critereon.DeserializationContext
import net.minecraft.advancements.critereon.EntityPredicate
import net.minecraft.advancements.critereon.MinMaxBounds
import net.minecraft.advancements.critereon.SerializationContext
import net.minecraft.advancements.critereon.SimpleCriterionTrigger
import net.minecraft.resources.ResourceLocation import net.minecraft.resources.ResourceLocation
import net.minecraft.server.level.ServerPlayer import net.minecraft.server.level.ServerPlayer
import net.minecraft.world.damagesource.DamageSource import net.minecraft.world.damagesource.DamageSource
@ -24,11 +17,11 @@ abstract class HurtTrigger : SimpleCriterionTrigger<HurtTrigger.Instance>() {
override fun createInstance( override fun createInstance(
p_66248_: JsonObject, p_66248_: JsonObject,
p_66249_: EntityPredicate.Composite, p_286603_: ContextAwarePredicate,
p_66250_: DeserializationContext p_66250_: DeserializationContext
): Instance { ): Instance {
return Instance( return Instance(
EntityPredicate.Composite.fromJson(p_66248_, "entity_predicate", p_66250_), EntityPredicate.fromJson(p_66248_, "entity_predicate", p_66250_),
(p_66248_["damage"] as? JsonObject)?.let(DamagePredicate::fromJson) ?: DamagePredicate.ANY (p_66248_["damage"] as? JsonObject)?.let(DamagePredicate::fromJson) ?: DamagePredicate.ANY
) )
} }
@ -42,7 +35,7 @@ abstract class HurtTrigger : SimpleCriterionTrigger<HurtTrigger.Instance>() {
} }
inner class Instance( inner class Instance(
val predicate: EntityPredicate.Composite = EntityPredicate.Composite.ANY, val predicate: ContextAwarePredicate = ContextAwarePredicate.ANY,
val damagePredicate: DamagePredicate = DamagePredicate( val damagePredicate: DamagePredicate = DamagePredicate(
MinMaxBounds.Doubles.atLeast(1.0), MinMaxBounds.Doubles.atLeast(1.0),
MinMaxBounds.Doubles.atLeast(1.0), MinMaxBounds.Doubles.atLeast(1.0),
@ -50,7 +43,7 @@ abstract class HurtTrigger : SimpleCriterionTrigger<HurtTrigger.Instance>() {
null, null,
DamageSourcePredicate.ANY DamageSourcePredicate.ANY
) )
) : AbstractCriterionTriggerInstance(ID, EntityPredicate.Composite.ANY) { ) : AbstractCriterionTriggerInstance(ID, ContextAwarePredicate.ANY) {
override fun serializeToJson(pConditions: SerializationContext): JsonObject { override fun serializeToJson(pConditions: SerializationContext): JsonObject {
return super.serializeToJson(pConditions).also { return super.serializeToJson(pConditions).also {
it["entity_predicate"] = predicate.toJson(pConditions) it["entity_predicate"] = predicate.toJson(pConditions)

View File

@ -4,11 +4,7 @@ import com.google.common.collect.ImmutableList
import com.google.gson.JsonArray import com.google.gson.JsonArray
import com.google.gson.JsonObject import com.google.gson.JsonObject
import com.google.gson.JsonSyntaxException import com.google.gson.JsonSyntaxException
import net.minecraft.advancements.critereon.AbstractCriterionTriggerInstance import net.minecraft.advancements.critereon.*
import net.minecraft.advancements.critereon.DeserializationContext
import net.minecraft.advancements.critereon.EntityPredicate
import net.minecraft.advancements.critereon.SerializationContext
import net.minecraft.advancements.critereon.SimpleCriterionTrigger
import net.minecraft.resources.ResourceLocation import net.minecraft.resources.ResourceLocation
import net.minecraft.server.level.ServerPlayer import net.minecraft.server.level.ServerPlayer
import net.minecraft.world.entity.monster.ElderGuardian import net.minecraft.world.entity.monster.ElderGuardian
@ -29,9 +25,9 @@ object KillAsAndroidTrigger : SimpleCriterionTrigger<KillAsAndroidTrigger.Instan
return ID return ID
} }
override fun createInstance(pJson: JsonObject, pPlayer: EntityPredicate.Composite, pContext: DeserializationContext): Instance { override fun createInstance(pJson: JsonObject, pPlayer: ContextAwarePredicate, pContext: DeserializationContext): Instance {
return Instance( return Instance(
predicate = EntityPredicate.Composite.fromJson(pJson, "predicate", pContext), predicate = EntityPredicate.fromJson(pJson, "predicate", pContext),
playerPredicate = pPlayer, playerPredicate = pPlayer,
featurePredicate = (pJson["feature_predicate"] as? JsonObject)?.let(PredicateType::from) ?: throw JsonSyntaxException("Invalid 'feature_predicate': ${pJson["feature_predicate"]}") featurePredicate = (pJson["feature_predicate"] as? JsonObject)?.let(PredicateType::from) ?: throw JsonSyntaxException("Invalid 'feature_predicate': ${pJson["feature_predicate"]}")
) )
@ -168,9 +164,9 @@ object KillAsAndroidTrigger : SimpleCriterionTrigger<KillAsAndroidTrigger.Instan
} }
class Instance( class Instance(
val predicate: EntityPredicate.Composite = EntityPredicate.Composite.ANY, val predicate: ContextAwarePredicate = ContextAwarePredicate.ANY,
val featurePredicate: FeaturePredicate = Always, val featurePredicate: FeaturePredicate = Always,
playerPredicate: EntityPredicate.Composite = EntityPredicate.Composite.ANY, playerPredicate: ContextAwarePredicate = ContextAwarePredicate.ANY,
) : AbstractCriterionTriggerInstance(ID, playerPredicate) { ) : AbstractCriterionTriggerInstance(ID, playerPredicate) {
override fun serializeToJson(pConditions: SerializationContext): JsonObject { override fun serializeToJson(pConditions: SerializationContext): JsonObject {
return super.serializeToJson(pConditions).also { return super.serializeToJson(pConditions).also {
@ -182,7 +178,7 @@ object KillAsAndroidTrigger : SimpleCriterionTrigger<KillAsAndroidTrigger.Instan
fun onKill(event: LivingDeathEvent) { fun onKill(event: LivingDeathEvent) {
if (event.entity is ElderGuardian) { if (event.entity is ElderGuardian) {
val killer = event.entity.combatTracker.killer val killer = event.source.entity
if (killer is ServerPlayer) { if (killer is ServerPlayer) {
val data = killer.matteryPlayer ?: return val data = killer.matteryPlayer ?: return