diff --git a/common/src/main/java/net/mca/advancement/criterion/BabyCriterion.java b/common/src/main/java/net/mca/advancement/criterion/BabyCriterion.java index 565faec389..ed2ec4ed2d 100644 --- a/common/src/main/java/net/mca/advancement/criterion/BabyCriterion.java +++ b/common/src/main/java/net/mca/advancement/criterion/BabyCriterion.java @@ -1,39 +1,31 @@ package net.mca.advancement.criterion; import com.google.gson.JsonObject; -import net.mca.MCA; import net.minecraft.advancement.criterion.AbstractCriterion; import net.minecraft.advancement.criterion.AbstractCriterionConditions; import net.minecraft.predicate.NumberRange; import net.minecraft.predicate.entity.AdvancementEntityPredicateDeserializer; -import net.minecraft.predicate.entity.AdvancementEntityPredicateSerializer; import net.minecraft.predicate.entity.LootContextPredicate; import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.util.Identifier; -public class BabyCriterion extends AbstractCriterion { - private static final Identifier ID = MCA.locate("baby"); - - @Override - public Identifier getId() { - return ID; - } +import java.util.Optional; +public class BabyCriterion extends AbstractCriterion { @Override - public Conditions conditionsFromJson(JsonObject json, LootContextPredicate player, AdvancementEntityPredicateDeserializer deserializer) { + public Conditions conditionsFromJson(JsonObject json, Optional player, AdvancementEntityPredicateDeserializer deserializer) { NumberRange.IntRange c = NumberRange.IntRange.fromJson(json.get("count")); return new Conditions(player, c); } public void trigger(ServerPlayerEntity player, int c) { - trigger(player, (conditions) -> conditions.test(c)); + trigger(player, conditions -> conditions.test(c)); } public static class Conditions extends AbstractCriterionConditions { private final NumberRange.IntRange count; - public Conditions(LootContextPredicate player, NumberRange.IntRange count) { - super(BabyCriterion.ID, player); + public Conditions(Optional player, NumberRange.IntRange count) { + super(player); this.count = count; } @@ -42,8 +34,8 @@ public boolean test(int c) { } @Override - public JsonObject toJson(AdvancementEntityPredicateSerializer serializer) { - JsonObject json = super.toJson(serializer); + public JsonObject toJson() { + JsonObject json = super.toJson(); json.add("count", count.toJson()); return json; } diff --git a/common/src/main/java/net/mca/advancement/criterion/BabyDroppedCriterion.java b/common/src/main/java/net/mca/advancement/criterion/BabyDroppedCriterion.java index 64a8321dec..41493206f3 100644 --- a/common/src/main/java/net/mca/advancement/criterion/BabyDroppedCriterion.java +++ b/common/src/main/java/net/mca/advancement/criterion/BabyDroppedCriterion.java @@ -1,39 +1,31 @@ package net.mca.advancement.criterion; import com.google.gson.JsonObject; -import net.mca.MCA; import net.minecraft.advancement.criterion.AbstractCriterion; import net.minecraft.advancement.criterion.AbstractCriterionConditions; import net.minecraft.predicate.NumberRange; import net.minecraft.predicate.entity.AdvancementEntityPredicateDeserializer; -import net.minecraft.predicate.entity.AdvancementEntityPredicateSerializer; import net.minecraft.predicate.entity.LootContextPredicate; import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.util.Identifier; -public class BabyDroppedCriterion extends AbstractCriterion { - private static final Identifier ID = MCA.locate("baby_dropped"); - - @Override - public Identifier getId() { - return ID; - } +import java.util.Optional; +public class BabyDroppedCriterion extends AbstractCriterion { @Override - public Conditions conditionsFromJson(JsonObject json, LootContextPredicate player, AdvancementEntityPredicateDeserializer deserializer) { + public Conditions conditionsFromJson(JsonObject json, Optional player, AdvancementEntityPredicateDeserializer deserializer) { NumberRange.IntRange c = NumberRange.IntRange.atLeast(json.get("count").getAsInt()); return new Conditions(player, c); } public void trigger(ServerPlayerEntity player, int c) { - trigger(player, (conditions) -> conditions.test(c)); + trigger(player, conditions -> conditions.test(c)); } public static class Conditions extends AbstractCriterionConditions { private final NumberRange.IntRange count; - public Conditions(LootContextPredicate player, NumberRange.IntRange count) { - super(BabyDroppedCriterion.ID, player); + public Conditions(Optional player, NumberRange.IntRange count) { + super(player); this.count = count; } @@ -42,8 +34,8 @@ public boolean test(int c) { } @Override - public JsonObject toJson(AdvancementEntityPredicateSerializer serializer) { - JsonObject json = super.toJson(serializer); + public JsonObject toJson() { + JsonObject json = super.toJson(); json.add("count", count.toJson()); return json; } diff --git a/common/src/main/java/net/mca/advancement/criterion/BabySirbenSmeltedCriterion.java b/common/src/main/java/net/mca/advancement/criterion/BabySirbenSmeltedCriterion.java index ee7e4f45d1..17009a706b 100644 --- a/common/src/main/java/net/mca/advancement/criterion/BabySirbenSmeltedCriterion.java +++ b/common/src/main/java/net/mca/advancement/criterion/BabySirbenSmeltedCriterion.java @@ -1,39 +1,31 @@ package net.mca.advancement.criterion; import com.google.gson.JsonObject; -import net.mca.MCA; import net.minecraft.advancement.criterion.AbstractCriterion; import net.minecraft.advancement.criterion.AbstractCriterionConditions; import net.minecraft.predicate.NumberRange; import net.minecraft.predicate.entity.AdvancementEntityPredicateDeserializer; -import net.minecraft.predicate.entity.AdvancementEntityPredicateSerializer; import net.minecraft.predicate.entity.LootContextPredicate; import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.util.Identifier; -public class BabySirbenSmeltedCriterion extends AbstractCriterion { - private static final Identifier ID = MCA.locate("baby_sirben_smelted"); - - @Override - public Identifier getId() { - return ID; - } +import java.util.Optional; +public class BabySirbenSmeltedCriterion extends AbstractCriterion { @Override - public Conditions conditionsFromJson(JsonObject json, LootContextPredicate player, AdvancementEntityPredicateDeserializer deserializer) { + public Conditions conditionsFromJson(JsonObject json, Optional player, AdvancementEntityPredicateDeserializer deserializer) { NumberRange.IntRange c = NumberRange.IntRange.atLeast(json.get("count").getAsInt()); return new Conditions(player, c); } public void trigger(ServerPlayerEntity player, int c) { - trigger(player, (conditions) -> conditions.test(c)); + trigger(player, conditions -> conditions.test(c)); } public static class Conditions extends AbstractCriterionConditions { private final NumberRange.IntRange count; - public Conditions(LootContextPredicate player, NumberRange.IntRange count) { - super(BabySirbenSmeltedCriterion.ID, player); + public Conditions(Optional player, NumberRange.IntRange count) { + super(player); this.count = count; } @@ -42,8 +34,8 @@ public boolean test(int c) { } @Override - public JsonObject toJson(AdvancementEntityPredicateSerializer serializer) { - JsonObject json = super.toJson(serializer); + public JsonObject toJson() { + JsonObject json = super.toJson(); json.add("count", count.toJson()); return json; } diff --git a/common/src/main/java/net/mca/advancement/criterion/BabySmeltedCriterion.java b/common/src/main/java/net/mca/advancement/criterion/BabySmeltedCriterion.java index 4a8a514a86..100fae1bca 100644 --- a/common/src/main/java/net/mca/advancement/criterion/BabySmeltedCriterion.java +++ b/common/src/main/java/net/mca/advancement/criterion/BabySmeltedCriterion.java @@ -1,39 +1,31 @@ package net.mca.advancement.criterion; import com.google.gson.JsonObject; -import net.mca.MCA; import net.minecraft.advancement.criterion.AbstractCriterion; import net.minecraft.advancement.criterion.AbstractCriterionConditions; import net.minecraft.predicate.NumberRange; import net.minecraft.predicate.entity.AdvancementEntityPredicateDeserializer; -import net.minecraft.predicate.entity.AdvancementEntityPredicateSerializer; import net.minecraft.predicate.entity.LootContextPredicate; import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.util.Identifier; -public class BabySmeltedCriterion extends AbstractCriterion { - private static final Identifier ID = MCA.locate("baby_smelted"); - - @Override - public Identifier getId() { - return ID; - } +import java.util.Optional; +public class BabySmeltedCriterion extends AbstractCriterion { @Override - public Conditions conditionsFromJson(JsonObject json, LootContextPredicate player, AdvancementEntityPredicateDeserializer deserializer) { + public Conditions conditionsFromJson(JsonObject json, Optional player, AdvancementEntityPredicateDeserializer deserializer) { NumberRange.IntRange c = NumberRange.IntRange.atLeast(json.get("count").getAsInt()); return new Conditions(player, c); } public void trigger(ServerPlayerEntity player, int c) { - trigger(player, (conditions) -> conditions.test(c)); + trigger(player, conditions -> conditions.test(c)); } public static class Conditions extends AbstractCriterionConditions { private final NumberRange.IntRange count; - public Conditions(LootContextPredicate player, NumberRange.IntRange count) { - super(BabySmeltedCriterion.ID, player); + public Conditions(Optional player, NumberRange.IntRange count) { + super(player); this.count = count; } @@ -42,8 +34,8 @@ public boolean test(int c) { } @Override - public JsonObject toJson(AdvancementEntityPredicateSerializer serializer) { - JsonObject json = super.toJson(serializer); + public JsonObject toJson() { + JsonObject json = super.toJson(); json.add("count", count.toJson()); return json; } diff --git a/common/src/main/java/net/mca/advancement/criterion/ChildAgeStateChangeCriterion.java b/common/src/main/java/net/mca/advancement/criterion/ChildAgeStateChangeCriterion.java index 5c0756817f..a2c2346bd0 100644 --- a/common/src/main/java/net/mca/advancement/criterion/ChildAgeStateChangeCriterion.java +++ b/common/src/main/java/net/mca/advancement/criterion/ChildAgeStateChangeCriterion.java @@ -2,38 +2,30 @@ import com.google.gson.JsonObject; import com.google.gson.JsonPrimitive; -import net.mca.MCA; import net.minecraft.advancement.criterion.AbstractCriterion; import net.minecraft.advancement.criterion.AbstractCriterionConditions; import net.minecraft.predicate.entity.AdvancementEntityPredicateDeserializer; -import net.minecraft.predicate.entity.AdvancementEntityPredicateSerializer; import net.minecraft.predicate.entity.LootContextPredicate; import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.util.Identifier; -public class ChildAgeStateChangeCriterion extends AbstractCriterion { - private static final Identifier ID = MCA.locate("child_age_state_change"); - - @Override - public Identifier getId() { - return ID; - } +import java.util.Optional; +public class ChildAgeStateChangeCriterion extends AbstractCriterion { @Override - public Conditions conditionsFromJson(JsonObject json, LootContextPredicate player, AdvancementEntityPredicateDeserializer deserializer) { + public Conditions conditionsFromJson(JsonObject json, Optional player, AdvancementEntityPredicateDeserializer deserializer) { String event = json.has("state") ? json.get("state").getAsString() : ""; return new Conditions(player, event); } public void trigger(ServerPlayerEntity player, String event) { - trigger(player, (conditions) -> conditions.test(event)); + trigger(player, conditions -> conditions.test(event)); } public static class Conditions extends AbstractCriterionConditions { private final String event; - public Conditions(LootContextPredicate player, String event) { - super(ChildAgeStateChangeCriterion.ID, player); + public Conditions(Optional player, String event) { + super(player); this.event = event; } @@ -42,8 +34,8 @@ public boolean test(String event) { } @Override - public JsonObject toJson(AdvancementEntityPredicateSerializer serializer) { - JsonObject json = super.toJson(serializer); + public JsonObject toJson() { + JsonObject json = super.toJson(); json.add("state", new JsonPrimitive(event)); return json; } diff --git a/common/src/main/java/net/mca/advancement/criterion/CriterionMCA.java b/common/src/main/java/net/mca/advancement/criterion/CriterionMCA.java index da51e11a35..fcd71c6b3a 100644 --- a/common/src/main/java/net/mca/advancement/criterion/CriterionMCA.java +++ b/common/src/main/java/net/mca/advancement/criterion/CriterionMCA.java @@ -1,23 +1,24 @@ package net.mca.advancement.criterion; -import net.mca.mixin.MixinCriteria; +import net.minecraft.advancement.criterion.Criteria; import net.minecraft.advancement.criterion.Criterion; public interface CriterionMCA { - BabyCriterion BABY_CRITERION = register(new BabyCriterion()); - BabyDroppedCriterion BABY_DROPPED_CRITERION = register(new BabyDroppedCriterion()); - BabySmeltedCriterion BABY_SMELTED_CRITERION = register(new BabySmeltedCriterion()); - BabySirbenSmeltedCriterion BABY_SIRBEN_SMELTED_CRITERION = register(new BabySirbenSmeltedCriterion()); - HeartsCriterion HEARTS_CRITERION = register(new HeartsCriterion()); - GenericEventCriterion GENERIC_EVENT_CRITERION = register(new GenericEventCriterion()); - ChildAgeStateChangeCriterion CHILD_AGE_STATE_CHANGE = register(new ChildAgeStateChangeCriterion()); - FamilyCriterion FAMILY = register(new FamilyCriterion()); - RankCriterion RANK = register(new RankCriterion()); - VillagerFateCriterion FATE = register(new VillagerFateCriterion()); + BabyCriterion BABY = register("baby", new BabyCriterion()); + BabyDroppedCriterion BABY_DROPPED = register("baby_dropped", new BabyDroppedCriterion()); + BabySmeltedCriterion BABY_SMELTED = register("baby_smelted", new BabySmeltedCriterion()); + BabySirbenSmeltedCriterion BABY_SIRBEN_SMELTED = register("baby_sirben_smelted", new BabySirbenSmeltedCriterion()); + HeartsCriterion HEARTS = register("hearts", new HeartsCriterion()); + GenericEventCriterion GENERIC_EVENT = register("generic_event", new GenericEventCriterion()); + ChildAgeStateChangeCriterion CHILD_AGE_STATE_CHANGE = register("child_age_state_change", new ChildAgeStateChangeCriterion()); + FamilyCriterion FAMILY = register("family", new FamilyCriterion()); + RankCriterion RANK = register("rank", new RankCriterion()); + VillagerFateCriterion VILLAGER_FATE = register("villager_fate", new VillagerFateCriterion()); - static > T register(T obj) { - return MixinCriteria.register(obj); + static > T register(String id, T obj) { + return Criteria.register("mca:" + id, obj); } - static void bootstrap() { } + static void bootstrap() { + } } diff --git a/common/src/main/java/net/mca/advancement/criterion/FamilyCriterion.java b/common/src/main/java/net/mca/advancement/criterion/FamilyCriterion.java index c5507feacd..c4493e2cd2 100644 --- a/common/src/main/java/net/mca/advancement/criterion/FamilyCriterion.java +++ b/common/src/main/java/net/mca/advancement/criterion/FamilyCriterion.java @@ -1,28 +1,20 @@ package net.mca.advancement.criterion; import com.google.gson.JsonObject; -import net.mca.MCA; import net.mca.server.world.data.FamilyTree; import net.mca.server.world.data.FamilyTreeNode; import net.minecraft.advancement.criterion.AbstractCriterion; import net.minecraft.advancement.criterion.AbstractCriterionConditions; import net.minecraft.predicate.NumberRange; import net.minecraft.predicate.entity.AdvancementEntityPredicateDeserializer; -import net.minecraft.predicate.entity.AdvancementEntityPredicateSerializer; import net.minecraft.predicate.entity.LootContextPredicate; import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.util.Identifier; -public class FamilyCriterion extends AbstractCriterion { - private static final Identifier ID = MCA.locate("family"); - - @Override - public Identifier getId() { - return ID; - } +import java.util.Optional; +public class FamilyCriterion extends AbstractCriterion { @Override - public Conditions conditionsFromJson(JsonObject json, LootContextPredicate player, AdvancementEntityPredicateDeserializer deserializer) { + public Conditions conditionsFromJson(JsonObject json, Optional player, AdvancementEntityPredicateDeserializer deserializer) { // quite limited, but I do not assume any more use cases NumberRange.IntRange c = NumberRange.IntRange.fromJson(json.get("children")); NumberRange.IntRange gc = NumberRange.IntRange.fromJson(json.get("grandchildren")); @@ -41,8 +33,8 @@ public static class Conditions extends AbstractCriterionConditions { private final NumberRange.IntRange children; private final NumberRange.IntRange grandchildren; - public Conditions(LootContextPredicate player, NumberRange.IntRange children, NumberRange.IntRange grandchildren) { - super(FamilyCriterion.ID, player); + public Conditions(Optional player, NumberRange.IntRange children, NumberRange.IntRange grandchildren) { + super(player); this.children = children; this.grandchildren = grandchildren; } @@ -52,8 +44,8 @@ public boolean test(int c, int gc) { } @Override - public JsonObject toJson(AdvancementEntityPredicateSerializer serializer) { - JsonObject json = super.toJson(serializer); + public JsonObject toJson() { + JsonObject json = super.toJson(); json.add("children", children.toJson()); json.add("grandchildren", grandchildren.toJson()); return json; diff --git a/common/src/main/java/net/mca/advancement/criterion/GenericEventCriterion.java b/common/src/main/java/net/mca/advancement/criterion/GenericEventCriterion.java index 3514d8e0bd..0c0518ba2a 100644 --- a/common/src/main/java/net/mca/advancement/criterion/GenericEventCriterion.java +++ b/common/src/main/java/net/mca/advancement/criterion/GenericEventCriterion.java @@ -2,38 +2,30 @@ import com.google.gson.JsonObject; import com.google.gson.JsonPrimitive; -import net.mca.MCA; import net.minecraft.advancement.criterion.AbstractCriterion; import net.minecraft.advancement.criterion.AbstractCriterionConditions; import net.minecraft.predicate.entity.AdvancementEntityPredicateDeserializer; -import net.minecraft.predicate.entity.AdvancementEntityPredicateSerializer; import net.minecraft.predicate.entity.LootContextPredicate; import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.util.Identifier; -public class GenericEventCriterion extends AbstractCriterion { - private static final Identifier ID = MCA.locate("generic_event"); - - @Override - public Identifier getId() { - return ID; - } +import java.util.Optional; +public class GenericEventCriterion extends AbstractCriterion { @Override - public Conditions conditionsFromJson(JsonObject json, LootContextPredicate player, AdvancementEntityPredicateDeserializer deserializer) { + public Conditions conditionsFromJson(JsonObject json, Optional player, AdvancementEntityPredicateDeserializer deserializer) { String event = json.has("event") ? json.get("event").getAsString() : ""; return new Conditions(player, event); } public void trigger(ServerPlayerEntity player, String event) { - trigger(player, (conditions) -> conditions.test(event)); + trigger(player, conditions -> conditions.test(event)); } public static class Conditions extends AbstractCriterionConditions { private final String event; - public Conditions(LootContextPredicate player, String event) { - super(GenericEventCriterion.ID, player); + public Conditions(Optional player, String event) { + super(player); this.event = event; } @@ -42,8 +34,8 @@ public boolean test(String event) { } @Override - public JsonObject toJson(AdvancementEntityPredicateSerializer serializer) { - JsonObject json = super.toJson(serializer); + public JsonObject toJson() { + JsonObject json = super.toJson(); json.add("event", new JsonPrimitive(event)); return json; } diff --git a/common/src/main/java/net/mca/advancement/criterion/HeartsCriterion.java b/common/src/main/java/net/mca/advancement/criterion/HeartsCriterion.java index 81f43c8154..236410d5a4 100644 --- a/common/src/main/java/net/mca/advancement/criterion/HeartsCriterion.java +++ b/common/src/main/java/net/mca/advancement/criterion/HeartsCriterion.java @@ -7,21 +7,14 @@ import net.minecraft.advancement.criterion.AbstractCriterionConditions; import net.minecraft.predicate.NumberRange; import net.minecraft.predicate.entity.AdvancementEntityPredicateDeserializer; -import net.minecraft.predicate.entity.AdvancementEntityPredicateSerializer; import net.minecraft.predicate.entity.LootContextPredicate; import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.util.Identifier; -public class HeartsCriterion extends AbstractCriterion { - private static final Identifier ID = MCA.locate("hearts"); - - @Override - public Identifier getId() { - return ID; - } +import java.util.Optional; +public class HeartsCriterion extends AbstractCriterion { @Override - public Conditions conditionsFromJson(JsonObject json, LootContextPredicate player, AdvancementEntityPredicateDeserializer deserializer) { + public Conditions conditionsFromJson(JsonObject json, Optional player, AdvancementEntityPredicateDeserializer deserializer) { NumberRange.IntRange hearts = NumberRange.IntRange.fromJson(json.get("hearts")); NumberRange.IntRange increase = NumberRange.IntRange.fromJson(json.get("increase")); String source = json.has("source") ? json.get("source").getAsString() : ""; @@ -29,7 +22,7 @@ public Conditions conditionsFromJson(JsonObject json, LootContextPredicate playe } public void trigger(ServerPlayerEntity player, int hearts, int increase, String source) { - trigger(player, (conditions) -> conditions.test(hearts, increase, source)); + trigger(player, conditions -> conditions.test(hearts, increase, source)); } public static class Conditions extends AbstractCriterionConditions { @@ -37,8 +30,8 @@ public static class Conditions extends AbstractCriterionConditions { private final NumberRange.IntRange increase; private final String source; - public Conditions(LootContextPredicate player, NumberRange.IntRange hearts, NumberRange.IntRange increase, String source) { - super(HeartsCriterion.ID, player); + public Conditions(Optional player, NumberRange.IntRange hearts, NumberRange.IntRange increase, String source) { + super(player); this.hearts = hearts; this.increase = increase; this.source = source; @@ -50,8 +43,8 @@ public boolean test(int hearts, int increase, String source) { } @Override - public JsonObject toJson(AdvancementEntityPredicateSerializer serializer) { - JsonObject json = super.toJson(serializer); + public JsonObject toJson() { + JsonObject json = super.toJson(); json.add("hearts", hearts.toJson()); json.add("increase", increase.toJson()); json.add("source", new JsonPrimitive(source)); diff --git a/common/src/main/java/net/mca/advancement/criterion/RankCriterion.java b/common/src/main/java/net/mca/advancement/criterion/RankCriterion.java index 605276956e..4e2a677884 100644 --- a/common/src/main/java/net/mca/advancement/criterion/RankCriterion.java +++ b/common/src/main/java/net/mca/advancement/criterion/RankCriterion.java @@ -2,39 +2,31 @@ import com.google.gson.JsonObject; import com.google.gson.JsonPrimitive; -import net.mca.MCA; import net.mca.resources.Rank; import net.minecraft.advancement.criterion.AbstractCriterion; import net.minecraft.advancement.criterion.AbstractCriterionConditions; import net.minecraft.predicate.entity.AdvancementEntityPredicateDeserializer; -import net.minecraft.predicate.entity.AdvancementEntityPredicateSerializer; import net.minecraft.predicate.entity.LootContextPredicate; import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.util.Identifier; -public class RankCriterion extends AbstractCriterion { - private static final Identifier ID = MCA.locate("rank"); - - @Override - public Identifier getId() { - return ID; - } +import java.util.Optional; +public class RankCriterion extends AbstractCriterion { @Override - public Conditions conditionsFromJson(JsonObject json, LootContextPredicate player, AdvancementEntityPredicateDeserializer deserializer) { + public Conditions conditionsFromJson(JsonObject json, Optional player, AdvancementEntityPredicateDeserializer deserializer) { Rank rank = Rank.fromName(json.get("rank").getAsString()); return new Conditions(player, rank); } public void trigger(ServerPlayerEntity player, Rank rank) { - trigger(player, (conditions) -> conditions.test(rank)); + trigger(player, conditions -> conditions.test(rank)); } public static class Conditions extends AbstractCriterionConditions { private final Rank rank; - public Conditions(LootContextPredicate player, Rank rank) { - super(RankCriterion.ID, player); + public Conditions(Optional player, Rank rank) { + super(player); this.rank = rank; } @@ -43,8 +35,8 @@ public boolean test(Rank rank) { } @Override - public JsonObject toJson(AdvancementEntityPredicateSerializer serializer) { - JsonObject json = super.toJson(serializer); + public JsonObject toJson() { + JsonObject json = super.toJson(); json.add("rank", new JsonPrimitive(rank.name())); return json; } diff --git a/common/src/main/java/net/mca/advancement/criterion/VillagerFateCriterion.java b/common/src/main/java/net/mca/advancement/criterion/VillagerFateCriterion.java index e799459119..68091e161e 100644 --- a/common/src/main/java/net/mca/advancement/criterion/VillagerFateCriterion.java +++ b/common/src/main/java/net/mca/advancement/criterion/VillagerFateCriterion.java @@ -2,42 +2,34 @@ import com.google.gson.JsonObject; import com.google.gson.JsonPrimitive; -import net.mca.MCA; import net.mca.resources.Rank; import net.minecraft.advancement.criterion.AbstractCriterion; import net.minecraft.advancement.criterion.AbstractCriterionConditions; import net.minecraft.predicate.entity.AdvancementEntityPredicateDeserializer; -import net.minecraft.predicate.entity.AdvancementEntityPredicateSerializer; -import net.minecraft.predicate.entity.EntityPredicate; import net.minecraft.predicate.entity.LootContextPredicate; import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.util.Identifier; -public class VillagerFateCriterion extends AbstractCriterion { - private static final Identifier ID = MCA.locate("villager_fate"); - - @Override - public Identifier getId() { - return ID; - } +import java.util.Optional; +public class VillagerFateCriterion extends AbstractCriterion { @Override - public VillagerFateCriterion.Conditions conditionsFromJson(JsonObject json, LootContextPredicate player, AdvancementEntityPredicateDeserializer deserializer) { + public VillagerFateCriterion.Conditions conditionsFromJson(JsonObject json, Optional player, AdvancementEntityPredicateDeserializer deserializer) { Rank userRelation = Rank.fromName(json.get("user_relation").getAsString()); Identifier cause = Identifier.tryParse(json.get("cause").getAsString()); return new Conditions(player, cause, userRelation); } public void trigger(ServerPlayerEntity player, Identifier cause, Rank userRelation) { - trigger(player, (conditions) -> conditions.test(cause, userRelation)); + trigger(player, conditions -> conditions.test(cause, userRelation)); } public static class Conditions extends AbstractCriterionConditions { private final Rank userRelation; private final Identifier cause; - public Conditions(LootContextPredicate player, Identifier cause, Rank userRelation) { - super(VillagerFateCriterion.ID, player); + public Conditions(Optional player, Identifier cause, Rank userRelation) { + super(player); this.userRelation = userRelation; this.cause = cause; } @@ -47,8 +39,8 @@ public boolean test(Identifier cause, Rank userRelation) { } @Override - public JsonObject toJson(AdvancementEntityPredicateSerializer serializer) { - JsonObject json = super.toJson(serializer); + public JsonObject toJson() { + JsonObject json = super.toJson(); json.add("cause", new JsonPrimitive(cause.toString())); json.add("user_relation", new JsonPrimitive(userRelation.name())); return json; diff --git a/common/src/main/java/net/mca/client/gui/BlueprintScreen.java b/common/src/main/java/net/mca/client/gui/BlueprintScreen.java index d06a7c767c..336f9eb7fc 100644 --- a/common/src/main/java/net/mca/client/gui/BlueprintScreen.java +++ b/common/src/main/java/net/mca/client/gui/BlueprintScreen.java @@ -1,6 +1,7 @@ package net.mca.client.gui; import net.mca.MCA; +import net.mca.client.gui.widget.OldTexturedButtonWidget; import net.mca.client.gui.widget.TooltipButtonWidget; import net.mca.client.gui.widget.WidgetUtils; import net.mca.cobalt.network.NetworkHandler; @@ -18,7 +19,6 @@ import net.mca.util.localization.FlowingText; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.widget.TextFieldWidget; -import net.minecraft.client.gui.widget.TexturedButtonWidget; import net.minecraft.client.network.ClientPlayerEntity; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.registry.Registries; @@ -243,8 +243,9 @@ private void setPage(String page) { catalogButtons.clear(); for (BuildingType bt : BuildingTypes.getInstance()) { if (bt.visible()) { - TexturedButtonWidget widget = new TexturedButtonWidget( - row * size + x + 10, col * size + y - 10, 20, 20, bt.iconU(), bt.iconV() + 20, 20, ICON_TEXTURES, 256, 256, button -> { + OldTexturedButtonWidget widget = new OldTexturedButtonWidget( + row * size + x + 10, col * size + y - 10, 20, 20, + bt.iconU(), bt.iconV() + 20, 20, ICON_TEXTURES, 256, 256, button -> { selectBuilding(bt); button.active = false; catalogButtons.forEach(b -> b.active = true); @@ -313,8 +314,8 @@ public boolean shouldPause() { } @Override - public void render(DrawContext context, int sizeX, int sizeY, float offset) { - renderBackground(context); + public void render(DrawContext context, int sizeX, int sizeY, float delta) { + super.render(context, sizeX, sizeY, delta); assert client != null; this.mouseX = (int) (client.mouse.getX() * width / client.getWindow().getFramebufferWidth()); @@ -323,7 +324,7 @@ public void render(DrawContext context, int sizeX, int sizeY, float offset) { switch (page) { case "waiting" -> context.drawCenteredTextWithShadow(textRenderer, Text.translatable("gui.blueprint.waiting"), width / 2, height / 2, 0xffaaaaaa); - case "empty" -> + case "empty" -> context.drawCenteredTextWithShadow(textRenderer, Text.translatable("gui.blueprint.empty"), width / 2, height / 2 - 20, 0xffaaaaaa); case "map" -> { renderStats(context); @@ -342,8 +343,6 @@ public void render(DrawContext context, int sizeX, int sizeY, float offset) { case "villagers" -> renderVillagers(context); case "rules" -> renderRules(context); } - - super.render(context, sizeX, sizeY, offset); } private void renderName(DrawContext context) { diff --git a/common/src/main/java/net/mca/client/gui/DestinyScreen.java b/common/src/main/java/net/mca/client/gui/DestinyScreen.java index 4ae09e52ad..9c18afe34f 100644 --- a/common/src/main/java/net/mca/client/gui/DestinyScreen.java +++ b/common/src/main/java/net/mca/client/gui/DestinyScreen.java @@ -60,7 +60,7 @@ protected String[] getPages() { } @Override - public void renderBackground(DrawContext context) { + public void renderBackground(DrawContext context, int mouseX, int mouseY, float delta) { assert MinecraftClient.getInstance().world != null; renderBackgroundTexture(context); } diff --git a/common/src/main/java/net/mca/client/gui/ExtendedBookScreen.java b/common/src/main/java/net/mca/client/gui/ExtendedBookScreen.java index 0fc328fa82..8ff18d26d9 100644 --- a/common/src/main/java/net/mca/client/gui/ExtendedBookScreen.java +++ b/common/src/main/java/net/mca/client/gui/ExtendedBookScreen.java @@ -14,6 +14,7 @@ import net.minecraft.text.Style; import net.minecraft.text.Text; import net.minecraft.util.math.MathHelper; +import org.jetbrains.annotations.Nullable; public class ExtendedBookScreen extends Screen { private int pageIndex; @@ -51,13 +52,16 @@ protected void init() { } protected void addCloseButton() { - addDrawableChild(new ButtonWidget(width / 2 - 100, 196, 200, 20, ScreenTexts.DONE, (buttonWidget) -> this.client.setScreen(null))); + addDrawableChild(new ButtonWidget(width / 2 - 100, 196, 200, 20, ScreenTexts.DONE, buttonWidget -> { + assert this.client != null; + this.client.setScreen(null); + })); } protected void addPageButtons() { int i = (width - 192) / 2; - nextPageButton = addDrawableChild(new ExtendedPageTurnWidget(i + 116, 159, true, (buttonWidget) -> goToNextPage(), book.hasPageTurnSound(), book.getBackground())); - previousPageButton = addDrawableChild(new ExtendedPageTurnWidget(i + 43, 159, false, (buttonWidget) -> goToPreviousPage(), book.hasPageTurnSound(), book.getBackground())); + nextPageButton = addDrawableChild(new ExtendedPageTurnWidget(i + 116, 159, true, buttonWidget -> goToNextPage(), book.hasPageTurnSound(), book.getBackground())); + previousPageButton = addDrawableChild(new ExtendedPageTurnWidget(i + 43, 159, false, buttonWidget -> goToPreviousPage(), book.hasPageTurnSound(), book.getBackground())); updatePageButtons(); } @@ -92,16 +96,17 @@ public boolean keyPressed(int keyCode, int scanCode, int modifiers) { return true; } - switch (keyCode) { - case 266: + return switch (keyCode) { + case 266 -> { this.previousPageButton.onPress(); - return true; - case 267: + yield true; + } + case 267 -> { this.nextPageButton.onPress(); - return true; - default: - return false; - } + yield true; + } + default -> false; + }; } public TextRenderer getTextRenderer() { @@ -110,7 +115,7 @@ public TextRenderer getTextRenderer() { @Override public void render(DrawContext context, int mouseX, int mouseY, float delta) { - renderBackground(context); + renderBackground(context, mouseX, mouseY, delta); // background int i = (width - 192) / 2; @@ -132,12 +137,11 @@ public void render(DrawContext context, int mouseX, int mouseY, float delta) { } @Override - public boolean mouseClicked(double mouseX, double mouseY, int button) { - return super.mouseClicked(mouseX, mouseY, button); - } + public boolean handleTextClick(@Nullable Style style) { + if (style == null) { + return false; + } - @Override - public boolean handleTextClick(Style style) { ClickEvent clickEvent = style.getClickEvent(); if (clickEvent == null) { return false; @@ -153,6 +157,7 @@ public boolean handleTextClick(Style style) { boolean handled = super.handleTextClick(style); if (handled && clickEvent.getAction() == ClickEvent.Action.RUN_COMMAND) { + assert client != null; client.setScreen(null); } diff --git a/common/src/main/java/net/mca/client/gui/FamilyTreeScreen.java b/common/src/main/java/net/mca/client/gui/FamilyTreeScreen.java index 61d1df12bd..20d3048eae 100644 --- a/common/src/main/java/net/mca/client/gui/FamilyTreeScreen.java +++ b/common/src/main/java/net/mca/client/gui/FamilyTreeScreen.java @@ -114,7 +114,7 @@ public boolean mouseClicked(double mouseX, double mouseY, int button) { @Override public void render(DrawContext context, int mouseX, int mouseY, float delta) { - renderBackground(context); + renderBackground(context, mouseX, mouseY, delta); context.fill(0, 30, width, height - 30, 0x66000000); diff --git a/common/src/main/java/net/mca/client/gui/FamilyTreeSearchScreen.java b/common/src/main/java/net/mca/client/gui/FamilyTreeSearchScreen.java index 2e390e9eaa..af5862a497 100644 --- a/common/src/main/java/net/mca/client/gui/FamilyTreeSearchScreen.java +++ b/common/src/main/java/net/mca/client/gui/FamilyTreeSearchScreen.java @@ -7,7 +7,6 @@ import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.widget.TextFieldWidget; -import net.minecraft.client.util.math.MatrixStack; import net.minecraft.text.Text; import java.io.Serializable; @@ -71,7 +70,7 @@ public void render(DrawContext context, int mouseX, int mouseY, float delta) { context.fill(width / 2 - DATA_WIDTH / 2 - 10, height / 2 - 110, width / 2 + DATA_WIDTH / 2 + 10, height / 2 + 110, 0x66000000); - renderBackground(context); + renderBackground(context, mouseX, mouseY, delta); renderVillagers(context); diff --git a/common/src/main/java/net/mca/client/gui/InteractScreen.java b/common/src/main/java/net/mca/client/gui/InteractScreen.java index f31d0b7db0..d6cf21f454 100644 --- a/common/src/main/java/net/mca/client/gui/InteractScreen.java +++ b/common/src/main/java/net/mca/client/gui/InteractScreen.java @@ -1,6 +1,5 @@ package net.mca.client.gui; -import com.mojang.blaze3d.systems.RenderSystem; import net.mca.MCA; import net.mca.cobalt.network.NetworkHandler; import net.mca.entity.VillagerLike; @@ -85,6 +84,11 @@ public void tick() { timeSinceLastClick++; } + @Override + public void renderBackground(DrawContext context, int mouseX, int mouseY, float delta) { + // nop + } + @Override public void render(DrawContext context, int mouseX, int mouseY, float tickDelta) { super.render(context, mouseX, mouseY, tickDelta); @@ -94,14 +98,14 @@ public void render(DrawContext context, int mouseX, int mouseY, float tickDelta) } @Override - public boolean mouseScrolled(double x, double y, double d) { - if (d < 0) { + public boolean mouseScrolled(double mouseX, double mouseY, double horizontalAmount, double verticalAmount) { + if (verticalAmount < 0) { player.getInventory().selectedSlot = player.getInventory().selectedSlot == 8 ? 0 : player.getInventory().selectedSlot + 1; - } else if (d > 0) { + } else if (verticalAmount > 0) { player.getInventory().selectedSlot = player.getInventory().selectedSlot == 0 ? 8 : player.getInventory().selectedSlot - 1; } - return super.mouseScrolled(x, y, d); + return super.mouseScrolled(mouseX, mouseY, horizontalAmount, verticalAmount); } @Override @@ -196,7 +200,7 @@ private void drawTextPopups(DrawContext context) { //traits Set traits = villager.getTraits().getTraits(); - if (traits.size() > 0) { + if (!traits.isEmpty()) { if (hoveringOverText(10, 30 + h * 4, 128)) { //details List traitText = traits.stream().map(Traits.Trait::getDescription).collect(Collectors.toList()); @@ -206,7 +210,7 @@ private void drawTextPopups(DrawContext context) { //list MutableText traitText = Text.translatable("traits.title"); traits.stream().map(Traits.Trait::getName).forEach(t -> { - if (traitText.getSiblings().size() > 0) { + if (!traitText.getSiblings().isEmpty()) { traitText.append(Text.literal(", ")); } traitText.append(t); diff --git a/common/src/main/java/net/mca/client/gui/NameBabyScreen.java b/common/src/main/java/net/mca/client/gui/NameBabyScreen.java index 4c6ce93326..ec5df7aeaa 100644 --- a/common/src/main/java/net/mca/client/gui/NameBabyScreen.java +++ b/common/src/main/java/net/mca/client/gui/NameBabyScreen.java @@ -8,7 +8,6 @@ import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.widget.TextFieldWidget; -import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.text.Text; @@ -26,21 +25,14 @@ public NameBabyScreen(PlayerEntity player, ItemStack baby) { this.player = player; } - @Override - public void tick() { - super.tick(); - - babyNameTextField.tick(); - } - @Override public void init() { - addDrawableChild(new ButtonWidget(width / 2 - 40, height / 2 + 20, 80, 20, Text.translatable("gui.button.done"), (b) -> { + addDrawableChild(new ButtonWidget(width / 2 - 40, height / 2 + 20, 80, 20, Text.translatable("gui.button.done"), b -> { NetworkHandler.sendToServer(new BabyNamingVillagerMessage(player.getInventory().selectedSlot, babyNameTextField.getText().trim())); Objects.requireNonNull(this.client).setScreen(null); })); - addDrawableChild(new ButtonWidget(width / 2 + 105, height / 2 - 20, 60, 20, Text.translatable("gui.button.random"), (b) -> { - NetworkHandler.sendToServer(new BabyNameRequest(((BabyItem)baby.getItem()).getGender())); + addDrawableChild(new ButtonWidget(width / 2 + 105, height / 2 - 20, 60, 20, Text.translatable("gui.button.random"), b -> { + NetworkHandler.sendToServer(new BabyNameRequest(((BabyItem) baby.getItem()).getGender())); })); babyNameTextField = new TextFieldWidget(this.textRenderer, width / 2 - 100, height / 2 - 20, 200, 20, Text.translatable("structure_block.structure_name")); @@ -55,16 +47,16 @@ public boolean shouldPause() { } @Override - public void render(DrawContext context, int w, int h, float scale) { - renderBackground(context); + public void render(DrawContext context, int mouseX, int mouseY, float delta) { + renderBackground(context, mouseX, mouseY, delta); setFocused(babyNameTextField); context.drawCenteredTextWithShadow(this.textRenderer, this.title, this.width / 2, 70, 16777215); - babyNameTextField.render(context, width / 2 - 100, height / 2 - 20, scale); + babyNameTextField.render(context, width / 2 - 100, height / 2 - 20, delta); - super.render(context, w, h, scale); + super.render(context, mouseX, mouseY, delta); } public void setBabyName(String name) { diff --git a/common/src/main/java/net/mca/client/gui/SkinLibraryScreen.java b/common/src/main/java/net/mca/client/gui/SkinLibraryScreen.java index cc71e8230a..3517f04d6e 100644 --- a/common/src/main/java/net/mca/client/gui/SkinLibraryScreen.java +++ b/common/src/main/java/net/mca/client/gui/SkinLibraryScreen.java @@ -157,7 +157,7 @@ public SkinLibraryScreen(VillagerEditorScreen screen, VillagerEntityMCA villager } @Override - public void renderBackground(DrawContext context) { + public void renderBackground(DrawContext context, int mouseX, int mouseY, float delta) { if (previousScreen instanceof DestinyScreen) { assert MinecraftClient.getInstance().world != null; renderBackgroundTexture(context); @@ -258,15 +258,17 @@ private void loadPage(boolean force) { @Override public void render(DrawContext context, int mouseX, int mouseY, float delta) { - final MatrixStack matrices = context.getMatrices(); + super.render(context, mouseX, mouseY, delta); - renderBackground(context); + final MatrixStack matrices = context.getMatrices(); hoveredContent = null; villagerVisualization.setBreedingAge(0); villagerVisualization.calculateDimensions(); + List tooltip = null; + switch (page) { case LIBRARY -> { int i = 0; @@ -282,11 +284,11 @@ public void render(DrawContext context, int mouseX, int mouseY, float delta) { if (Math.abs(cx - mouseX) <= 15 && Math.abs(cy - mouseY - 25) <= 24) { hoveredContent = c; - context.drawTooltip(textRenderer, getMetaDataText(c), mouseX, mouseY); + tooltip = getMetaDataText(c); } villagerVisualization.getGenetics().setGender(SkinCache.getMeta(c).map(SkinMeta::getGender).orElse(Gender.MALE).binary()); - InventoryScreen.drawEntity(context, cx, cy, hoveredContent == c ? 30 : 28, -(mouseX - cx) / 2.0f, -(mouseY - cy) / 2.0f, villagerVisualization); + InventoryScreen.drawEntity(context, cx - 100, cy - 150, cx + 100, cy + 95, hoveredContent == c ? 30 : 28, 0.0625F, mouseX, 10 + mouseY, villagerVisualization); i++; } else { break; @@ -444,7 +446,7 @@ public void render(DrawContext context, int mouseX, int mouseY, float delta) { int cy = height / 2 + 50; villagerVisualization.getGenetics().setGender(SkinCache.getMeta(focusedContent).map(SkinMeta::getGender).orElse(Gender.MALE).binary()); - InventoryScreen.drawEntity(context, cx, cy, 60, -(mouseX - cx) / 2.0f, -(mouseY - cy) / 2.0f, villagerVisualization); + InventoryScreen.drawEntity(context, cx - 100, cy - 150, cx + 100, cy + 30, 60, 0.0625F, mouseX, 30 + mouseY, villagerVisualization); //metadata context.drawTooltip(textRenderer, getMetaDataText(focusedContent), width / 2 + 200, height / 2 - 50); @@ -454,11 +456,13 @@ public void render(DrawContext context, int mouseX, int mouseY, float delta) { } } + if (tooltip != null) { + context.drawTooltip(textRenderer, tooltip, mouseX, mouseY); + } + if (error != null) { context.drawCenteredTextWithShadow(textRenderer, error, width / 2, height / 2, 0xFFFF0000); } - - super.render(context, mouseX, mouseY, delta); } private void setDummyTexture(LiteContent content) { @@ -617,9 +621,9 @@ public boolean mouseDragged(double mouseX, double mouseY, int button, double del } @Override - public boolean mouseScrolled(double mouseX, double mouseY, double amount) { + public boolean mouseScrolled(double mouseX, double mouseY, double horizontalAmount, double verticalAmount) { if (page == Page.EDITOR) { - float zoom = (float) (amount * 0.2f) * (x1 - x0); + float zoom = (float) (verticalAmount * 0.2f) * (x1 - x0); float ox = getPixelX() / 64.0f; x0 = x0 - zoom * ox; @@ -630,7 +634,7 @@ public boolean mouseScrolled(double mouseX, double mouseY, double amount) { y1 = y1 + zoom * (1 - oy); } - return super.mouseScrolled(mouseX, mouseY, amount); + return super.mouseScrolled(mouseX, mouseY, horizontalAmount, verticalAmount); } @Override @@ -957,7 +961,7 @@ private void rebuild() { //add tag addDrawableChild(new TooltipButtonWidget(width / 2 - 100, height / 2 - 100, 40, 20, "gui.skin_library.add", sender -> { String tag = tagNameWidget.getText().trim().toLowerCase(Locale.ROOT); - if (tag.length() > 0) { + if (!tag.isEmpty()) { setTag(focusedContent.contentid(), tag, true); tagNameWidget.setText(""); rebuild(); diff --git a/common/src/main/java/net/mca/client/gui/VillagerEditorScreen.java b/common/src/main/java/net/mca/client/gui/VillagerEditorScreen.java index 705793ea46..1b8cad7702 100644 --- a/common/src/main/java/net/mca/client/gui/VillagerEditorScreen.java +++ b/common/src/main/java/net/mca/client/gui/VillagerEditorScreen.java @@ -771,7 +771,7 @@ protected boolean shouldPrintPlayerHint() { @Override public void render(DrawContext context, int mouseX, int mouseY, float delta) { - renderBackground(context); + renderBackground(context, mouseX, mouseY, delta); context.fill(0, 20, width, height - 20, 0x66000000); @@ -786,9 +786,9 @@ public void render(DrawContext context, int mouseX, int mouseY, float delta) { int y = height / 2 + 70; if (villagerUUID.equals(playerUUID) && shouldUsePlayerModel()) { assert MinecraftClient.getInstance().player != null; - InventoryScreen.drawEntity(context, x, y, 60, x - mouseX, y - 50 - mouseY, MinecraftClient.getInstance().player); + InventoryScreen.drawEntity(context, x - 100, y - 150, x + 100, y + 20, 60, 0.0625F, mouseX, 30 + mouseY, MinecraftClient.getInstance().player); } else { - InventoryScreen.drawEntity(context, x, y, 60, x - mouseX, y - 50 - mouseY, villager); + InventoryScreen.drawEntity(context, x - 100, y - 150, x + 100, y + 20, 60, 0.0625F, mouseX, 30 + mouseY, villager); } // hint for confused people @@ -828,8 +828,9 @@ public void render(DrawContext context, int mouseX, int mouseY, float delta) { hoveredClothingId = index; } - InventoryScreen.drawEntity(context, cx, cy, (hoveredClothingId == index) ? 35 : 30, - -(mouseX - cx) / 2.0f, -(mouseY - cy - 64) / 2.0f, villagerVisualization); + InventoryScreen.drawEntity(context, cx - 100, cy - 150, cx + 100, cy + 105, + (hoveredClothingId == index) ? 35 : 30, 0.0625F, + mouseX, 20 + mouseY, villagerVisualization); i++; } else { break; diff --git a/common/src/main/java/net/mca/client/gui/WhistleScreen.java b/common/src/main/java/net/mca/client/gui/WhistleScreen.java index a38408443c..f90960a4ce 100644 --- a/common/src/main/java/net/mca/client/gui/WhistleScreen.java +++ b/common/src/main/java/net/mca/client/gui/WhistleScreen.java @@ -10,7 +10,6 @@ import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.ingame.InventoryScreen; -import net.minecraft.client.util.math.MatrixStack; import net.minecraft.nbt.NbtCompound; import net.minecraft.text.Text; import org.jetbrains.annotations.NotNull; @@ -73,7 +72,7 @@ public void init() { villagerNameButton = addDrawableChild(new ButtonWidget(width / 2 - 100, height / 2 + 65, 200, 20, Text.literal(""), b -> { })); - callButton = addDrawableChild(new ButtonWidget(width / 2 - 100, height / 2 + 90, 60, 20, Text.translatable("gui.button.call"), (b) -> { + callButton = addDrawableChild(new ButtonWidget(width / 2 - 100, height / 2 + 90, 60, 20, Text.translatable("gui.button.call"), b -> { NetworkHandler.sendToServer(new CallToPlayerMessage(UUID.fromString(keys.get(selectedIndex)))); Objects.requireNonNull(this.client).setScreen(null); })); @@ -89,8 +88,8 @@ public boolean shouldPause() { } @Override - public void render(DrawContext context, int sizeX, int sizeY, float offset) { - renderBackground(context); + public void render(DrawContext context, int mouseX, int mouseY, float delta) { + renderBackground(context, mouseX, mouseY, delta); context.drawCenteredTextWithShadow(textRenderer, Text.translatable("gui.whistle.title"), width / 2, height / 2 - 100, 0xffffff); @@ -98,23 +97,23 @@ public void render(DrawContext context, int sizeX, int sizeY, float offset) { String loadingMsg = new String(new char[(loadingAnimationTicks / 5) % 4]).replace("\0", "."); context.drawTextWithShadow(textRenderer, Text.translatable("gui.loading").append(Text.literal(loadingMsg)), width / 2 - 20, height / 2 - 10, 0xffffff); } else { - if (keys.size() == 0) { + if (keys.isEmpty()) { context.drawCenteredTextWithShadow(textRenderer, Text.translatable("gui.whistle.noFamily"), width / 2, height / 2 + 50, 0xffffff); } else { context.drawCenteredTextWithShadow(textRenderer, (selectedIndex + 1) + " / " + keys.size(), width / 2, height / 2 + 50, 0xffffff); } } - drawDummy(context); + drawDummy(context, mouseX, mouseY); - super.render(context, sizeX, sizeY, offset); + super.render(context, mouseX, mouseY, delta); } - private void drawDummy(DrawContext context) { + private void drawDummy(DrawContext context, int mouseX, int mouseY) { final int posX = width / 2; int posY = height / 2 + 45; if (dummy != null) { - InventoryScreen.drawEntity(context, posX, posY, 60, 0, 0, dummy); + InventoryScreen.drawEntity(context, posX - 100, posY - 150, posX + 100, posY + 20, 60, 0.0625F, mouseX, 20 + mouseY, dummy); } } @@ -128,10 +127,11 @@ public void setVillagerData(@NotNull NbtCompound data) { } private void setVillagerData(int index) { - if (keys.size() > 0) { + if (!keys.isEmpty()) { NbtCompound firstData = villagerData.getCompound(keys.get(index)); dummy = EntitiesMCA.MALE_VILLAGER.get().create(MinecraftClient.getInstance().world); + assert dummy != null; dummy.readCustomDataFromNbt(firstData); villagerNameButton.setMessage(dummy.getDisplayName()); diff --git a/common/src/main/java/net/mca/client/gui/widget/ExtendedSliderWidget.java b/common/src/main/java/net/mca/client/gui/widget/ExtendedSliderWidget.java index bf9ed1876c..d99cc80344 100644 --- a/common/src/main/java/net/mca/client/gui/widget/ExtendedSliderWidget.java +++ b/common/src/main/java/net/mca/client/gui/widget/ExtendedSliderWidget.java @@ -1,17 +1,18 @@ package net.mca.client.gui.widget; -import com.mojang.blaze3d.systems.RenderSystem; import net.mca.util.localization.FlowingText; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.widget.SliderWidget; -import net.minecraft.client.util.math.MatrixStack; import net.minecraft.text.Text; +import net.minecraft.util.Identifier; import java.util.function.Consumer; import java.util.function.Supplier; public abstract class ExtendedSliderWidget extends SliderWidget { + private static final Identifier TEXTURE = new Identifier("widget/slider"); + private T oldValue; final Consumer onApplyValue; protected final Supplier tooltipSupplier; @@ -31,8 +32,8 @@ protected double getOpticalValue() { @Override public void renderButton(DrawContext context, int mouseX, int mouseY, float delta) { int i = (this.isHovered() ? 2 : 1) * 20; - context.drawTexture(WIDGETS_TEXTURE, this.getX() + (int) (getOpticalValue() * (double) (this.width - 8)), this.getY(), 0, 46 + i, 4, 20); - context.drawTexture(WIDGETS_TEXTURE, this.getX() + (int) (getOpticalValue() * (double) (this.width - 8)) + 4, this.getY(), 196, 46 + i, 4, 20); + context.drawTexture(TEXTURE, this.getX() + (int) (getOpticalValue() * (double) (this.width - 8)), this.getY(), 0, 46 + i, 4, 20); + context.drawTexture(TEXTURE, this.getX() + (int) (getOpticalValue() * (double) (this.width - 8)) + 4, this.getY(), 196, 46 + i, 4, 20); super.renderButton(context, mouseX, mouseY, delta); diff --git a/common/src/main/java/net/mca/client/gui/widget/OldTexturedButtonWidget.java b/common/src/main/java/net/mca/client/gui/widget/OldTexturedButtonWidget.java new file mode 100644 index 0000000000..c935cf02b0 --- /dev/null +++ b/common/src/main/java/net/mca/client/gui/widget/OldTexturedButtonWidget.java @@ -0,0 +1,32 @@ +package net.mca.client.gui.widget; + +import net.minecraft.client.gui.DrawContext; +import net.minecraft.client.gui.widget.ButtonWidget; +import net.minecraft.text.MutableText; +import net.minecraft.util.Identifier; + +public class OldTexturedButtonWidget extends ButtonWidget { + protected final int u; + protected final int v; + protected final Identifier texture; + protected final int highlightOffset; + protected final int tw; + protected final int th; + + public OldTexturedButtonWidget(int x, int y, int width, int height, int u, int v, int highlightOffset, Identifier texture, int tw, int th, ButtonWidget.PressAction pressAction, MutableText text) { + super(x, y, width, height, text, pressAction, DEFAULT_NARRATION_SUPPLIER); + + this.u = u; + this.v = v; + this.texture = texture; + this.highlightOffset = highlightOffset; + this.tw = tw; + this.th = th; + } + + @Override + public void renderButton(DrawContext context, int mouseX, int mouseY, float delta) { + context.drawTexture(texture, getX(), getY() + (isHovered() ? highlightOffset : 0), u, v, width, height, tw, th); + } +} + diff --git a/common/src/main/java/net/mca/client/render/VillagerLikeEntityMCARenderer.java b/common/src/main/java/net/mca/client/render/VillagerLikeEntityMCARenderer.java index daa2a9d726..eb6af1b081 100644 --- a/common/src/main/java/net/mca/client/render/VillagerLikeEntityMCARenderer.java +++ b/common/src/main/java/net/mca/client/render/VillagerLikeEntityMCARenderer.java @@ -1,6 +1,5 @@ package net.mca.client.render; -import com.mojang.authlib.minecraft.MinecraftProfileTexture; import net.mca.Config; import net.mca.client.gui.VillagerEditorScreen; import net.mca.client.model.VillagerEntityBaseModelMCA; @@ -15,16 +14,12 @@ import net.minecraft.client.render.entity.BipedEntityRenderer; import net.minecraft.client.render.entity.EntityRendererFactory; import net.minecraft.client.render.entity.feature.ArmorFeatureRenderer; -import net.minecraft.client.util.DefaultSkinHelper; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.mob.MobEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.util.Identifier; -import net.minecraft.util.Uuids; import org.jetbrains.annotations.Nullable; -import java.util.Map; - public class VillagerLikeEntityMCARenderer> extends BipedEntityRenderer> { public VillagerLikeEntityMCARenderer(EntityRendererFactory.Context ctx, VillagerEntityModelMCA model) { super(ctx, model, 0.5F); @@ -52,22 +47,6 @@ protected void scale(T villager, MatrixStack matrices, float tickDelta) { @Nullable @Override protected RenderLayer getRenderLayer(T entity, boolean showBody, boolean translucent, boolean showOutlines) { - if (entity.hasCustomSkin()) { - //custom skin - MinecraftClient minecraftClient = MinecraftClient.getInstance(); - Map map = minecraftClient.getSkinProvider().getTextures(entity.getGameProfile()); - return map.containsKey(MinecraftProfileTexture.Type.SKIN) ? - RenderLayer.getEntityTranslucent( - minecraftClient.getSkinProvider().loadSkin( - map.get(MinecraftProfileTexture.Type.SKIN), MinecraftProfileTexture.Type.SKIN - )) : - RenderLayer.getEntityCutoutNoCull( - DefaultSkinHelper.getTexture( - Uuids.getUuidFromProfile(entity.getGameProfile()) - ) - ); - } - //setting the type to null prevents it from rendering //we need a skin layer anyway because of the color return null; diff --git a/common/src/main/java/net/mca/client/render/layer/VillagerLayer.java b/common/src/main/java/net/mca/client/render/layer/VillagerLayer.java index 8b7958b467..8f80a4cd23 100644 --- a/common/src/main/java/net/mca/client/render/layer/VillagerLayer.java +++ b/common/src/main/java/net/mca/client/render/layer/VillagerLayer.java @@ -68,10 +68,6 @@ public void render(MatrixStack transform, VertexConsumerProvider provider, int l return; } - if (getVillager(villager).hasCustomSkin()) { - return; - } - if (villager instanceof PlayerEntity && !MCAClient.useVillagerRenderer(villager.getUuid())) { return; } diff --git a/common/src/main/java/net/mca/entity/VillagerEntityMCA.java b/common/src/main/java/net/mca/entity/VillagerEntityMCA.java index 9e7b5b31da..3dc7c0c71d 100644 --- a/common/src/main/java/net/mca/entity/VillagerEntityMCA.java +++ b/common/src/main/java/net/mca/entity/VillagerEntityMCA.java @@ -1,6 +1,5 @@ package net.mca.entity; -import com.mojang.authlib.GameProfile; import com.mojang.serialization.Dynamic; import net.mca.*; import net.mca.advancement.criterion.CriterionMCA; @@ -24,7 +23,6 @@ import net.mca.util.network.datasync.CDataManager; import net.mca.util.network.datasync.CDataParameter; import net.mca.util.network.datasync.CParameter; -import net.minecraft.block.entity.SkullBlockEntity; import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.entity.*; import net.minecraft.entity.ai.brain.BlockPosLookTarget; @@ -120,7 +118,6 @@ public class VillagerEntityMCA extends VillagerEntity implements VillagerLike gameProfile = profile); - } else { - gameProfile = null; - } - } - @Override public CDataManager getTypeDataManager() { return DATA; @@ -876,7 +858,7 @@ public void tickRiding() { if (isClient() && MCAClient.useGeneticsRenderer(vehicle.getUuid())) { float height = getVillager(vehicle).getRawScaleFactor(); offset = offset.multiply(1.0f, height, 1.0f); - offset = offset.add(0.0f, vehicle.getMountedHeightOffset() * height - vehicle.getMountedHeightOffset(), 0.0f); + offset = offset.add(0.0f, vehicle.getRidingOffset(this) * height - vehicle.getRidingOffset(this), 0.0f); } Vec3d pos = this.getPos(); @@ -889,12 +871,12 @@ public void tickRiding() { } @Override - public double getHeightOffset() { + public float getRidingOffset(Entity entity) { Entity vehicle = getVehicle(); if (vehicle instanceof PlayerEntity) { - return -0.2; + return -0.2f; } - return -0.35; + return -0.35f; } @Override @@ -951,7 +933,7 @@ public void onDeath(DamageSource cause) { servRef.getPlayers().forEach(player -> { Rank relationToVillage = Tasks.getRank(village.get(), player); Identifier causeId = EntityType.getId(cause.getAttacker().getType()); - CriterionMCA.FATE.trigger(player, causeId, relationToVillage); + CriterionMCA.VILLAGER_FATE.trigger(player, causeId, relationToVillage); }); } @@ -1423,7 +1405,7 @@ public void onStruckByLightning(ServerWorld world, LightningEntity lightning) { } @Override - public void attack(LivingEntity target, float pullProgress) { + public void shootAt(LivingEntity target, float pullProgress) { setTarget(target); attackedEntity(target); diff --git a/common/src/main/java/net/mca/entity/VillagerLike.java b/common/src/main/java/net/mca/entity/VillagerLike.java index 01c497f685..6a8a12ef49 100644 --- a/common/src/main/java/net/mca/entity/VillagerLike.java +++ b/common/src/main/java/net/mca/entity/VillagerLike.java @@ -2,7 +2,6 @@ import com.google.common.base.Strings; import com.mojang.authlib.GameProfile; -import com.mojang.authlib.minecraft.MinecraftProfileTexture; import net.mca.Config; import net.mca.MCA; import net.mca.entity.ai.DialogueType; @@ -21,7 +20,6 @@ import net.mca.server.world.data.FamilyTreeNode; import net.mca.server.world.data.PlayerSaveData; import net.mca.util.network.datasync.*; -import net.minecraft.client.MinecraftClient; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityType; import net.minecraft.entity.EquipmentSlot; @@ -43,7 +41,10 @@ import net.minecraft.util.math.random.Random; import net.minecraft.village.VillagerDataContainer; -import java.util.*; +import java.util.Locale; +import java.util.Optional; +import java.util.Set; +import java.util.UUID; public interface VillagerLike> extends CTrackedEntity, VillagerDataContainer, Infectable, Messenger { CDataParameter VILLAGER_NAME = CParameter.create("villagerName", ""); @@ -127,16 +128,6 @@ default GameProfile getGameProfile() { return null; } - default boolean hasCustomSkin() { - if (!MCA.isBlankString(getTrackedValue(CUSTOM_SKIN)) && getGameProfile() != null) { - MinecraftClient minecraftClient = MinecraftClient.getInstance(); - Map map = minecraftClient.getSkinProvider().getTextures(getGameProfile()); - return map.containsKey(MinecraftProfileTexture.Type.SKIN); - } else { - return false; - } - } - /** * @param villager the villager to check * @return the set of "valid" genders diff --git a/common/src/main/java/net/mca/entity/ZombieVillagerEntityMCA.java b/common/src/main/java/net/mca/entity/ZombieVillagerEntityMCA.java index 10cb34f029..e89c0dfc8f 100644 --- a/common/src/main/java/net/mca/entity/ZombieVillagerEntityMCA.java +++ b/common/src/main/java/net/mca/entity/ZombieVillagerEntityMCA.java @@ -114,11 +114,6 @@ public final Text getCustomName() { return MCA.isBlankString(value) ? null : Text.literal(value).formatted(Formatting.RED); } - @Override - public double getHeightOffset() { - return -0.35; - } - @Override public EntityDimensions getDimensions(EntityPose pose) { @@ -145,11 +140,9 @@ protected float getActiveEyeHeight(EntityPose pose, EntityDimensions size) { @Override public final ActionResult interactAt(PlayerEntity player, Vec3d pos, @NotNull Hand hand) { ItemStack stack = player.getStackInHand(hand); - if (hand.equals(Hand.MAIN_HAND) && !stack.isIn(TagsMCA.Items.ZOMBIE_EGGS) && stack.getItem() != Items.GOLDEN_APPLE) { - if (player instanceof ServerPlayerEntity) { - String t = new String(new char[getRandom().nextInt(8) + 2]).replace("\0", ". "); - sendChatMessage(Text.literal(t), player); - } + if (hand.equals(Hand.MAIN_HAND) && !stack.isIn(TagsMCA.Items.ZOMBIE_EGGS) && stack.getItem() != Items.GOLDEN_APPLE && player instanceof ServerPlayerEntity) { + String t = new String(new char[getRandom().nextInt(8) + 2]).replace("\0", ". "); + sendChatMessage(Text.literal(t), player); } return super.interactAt(player, pos, hand); } @@ -240,7 +233,7 @@ public void setInventory(UpdatableInventory inventory) { public T convertTo(EntityType type, boolean keepInventory) { T mob; if (!isRemoved() && type == EntityType.VILLAGER) { - mob = (T)super.convertTo(getGenetics().getGender().getVillagerType(), keepInventory); + mob = (T) super.convertTo(getGenetics().getGender().getVillagerType(), keepInventory); } else { mob = super.convertTo(type, keepInventory); } diff --git a/common/src/main/java/net/mca/entity/ai/BreedableRelationship.java b/common/src/main/java/net/mca/entity/ai/BreedableRelationship.java index 128172d52f..2564561b33 100644 --- a/common/src/main/java/net/mca/entity/ai/BreedableRelationship.java +++ b/common/src/main/java/net/mca/entity/ai/BreedableRelationship.java @@ -189,7 +189,7 @@ private void acceptGift(ItemStack stack, GiftType gift, ServerPlayerEntity playe //modify mood and hearts entity.getVillagerBrain().modifyMoodValue((int) (desaturatedSatisfaction * Config.getInstance().giftMoodEffect + Config.getInstance().baseGiftMoodEffect * MathHelper.sign(desaturatedSatisfaction))); - CriterionMCA.HEARTS_CRITERION.trigger(player, memory.getHearts(), desaturatedSatisfaction, "gift"); + CriterionMCA.HEARTS.trigger(player, memory.getHearts(), desaturatedSatisfaction, "gift"); memory.modHearts(desaturatedSatisfaction); } diff --git a/common/src/main/java/net/mca/entity/ai/Pregnancy.java b/common/src/main/java/net/mca/entity/ai/Pregnancy.java index f1e36d5aec..ccbea09dad 100644 --- a/common/src/main/java/net/mca/entity/ai/Pregnancy.java +++ b/common/src/main/java/net/mca/entity/ai/Pregnancy.java @@ -141,7 +141,7 @@ public void procreate(Entity spouse) { // advancement if (spouse instanceof ServerPlayerEntity player) { - CriterionMCA.BABY_CRITERION.trigger(player, count); + CriterionMCA.BABY.trigger(player, count); } long seed = random.nextLong(); diff --git a/common/src/main/java/net/mca/entity/ai/brain/VillagerBrain.java b/common/src/main/java/net/mca/entity/ai/brain/VillagerBrain.java index 8c02f17f7c..de649922ba 100644 --- a/common/src/main/java/net/mca/entity/ai/brain/VillagerBrain.java +++ b/common/src/main/java/net/mca/entity/ai/brain/VillagerBrain.java @@ -271,7 +271,7 @@ public void rewardHearts(ServerPlayerEntity player, int hearts) { memory.modInteractionFatigue(1); memory.modHearts(hearts); - CriterionMCA.HEARTS_CRITERION.trigger(player, memory.getHearts(), hearts, "interaction"); + CriterionMCA.HEARTS.trigger(player, memory.getHearts(), hearts, "interaction"); entity.getVillagerBrain().modifyMoodValue(hearts); } } diff --git a/common/src/main/java/net/mca/entity/ai/brain/tasks/BowTask.java b/common/src/main/java/net/mca/entity/ai/brain/tasks/BowTask.java index 1b96f4f493..bbbf5b9e5c 100644 --- a/common/src/main/java/net/mca/entity/ai/brain/tasks/BowTask.java +++ b/common/src/main/java/net/mca/entity/ai/brain/tasks/BowTask.java @@ -53,7 +53,7 @@ protected void keepRunning(ServerWorld world, E entity, long time) { //shoot if (entity.age - lastShot > fireInterval) { - entity.attack(target, 1.0F); + entity.shoot(target, 1.0F); lastShot = entity.age; } } diff --git a/common/src/main/java/net/mca/entity/ai/gpt3Modules/PlayerModule.java b/common/src/main/java/net/mca/entity/ai/gpt3Modules/PlayerModule.java index 78814bcae8..8d5407ec60 100644 --- a/common/src/main/java/net/mca/entity/ai/gpt3Modules/PlayerModule.java +++ b/common/src/main/java/net/mca/entity/ai/gpt3Modules/PlayerModule.java @@ -2,7 +2,7 @@ import net.mca.Config; import net.mca.entity.VillagerEntityMCA; -import net.minecraft.advancement.Advancement; +import net.minecraft.advancement.AdvancementEntry; import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.util.Identifier; @@ -11,7 +11,7 @@ import java.util.Objects; public class PlayerModule { - private final static Map advancements = Map.of( + private static final Map advancements = Map.of( new Identifier("story/mine_diamond"), "$player found diamonds.", new Identifier("story/enter_the_nether"), "$player explored the nether.", new Identifier("story/enchant_item"), "$player enchanted items.", @@ -24,7 +24,7 @@ public class PlayerModule { public static void apply(List input, VillagerEntityMCA villager, ServerPlayerEntity player) { if (Config.getInstance().villagerChatAIIntelligence >= 5) { for (Map.Entry entry : advancements.entrySet()) { - Advancement advancement = Objects.requireNonNull(player.getServer()).getAdvancementLoader().get(entry.getKey()); + AdvancementEntry advancement = Objects.requireNonNull(player.getServer()).getAdvancementLoader().get(entry.getKey()); if (player.getAdvancementTracker().getProgress(advancement).isDone()) { input.add(entry.getValue() + " "); } diff --git a/common/src/main/java/net/mca/entity/ai/relationship/EntityRelationship.java b/common/src/main/java/net/mca/entity/ai/relationship/EntityRelationship.java index 86a7fce405..efe90a47cb 100644 --- a/common/src/main/java/net/mca/entity/ai/relationship/EntityRelationship.java +++ b/common/src/main/java/net/mca/entity/ai/relationship/EntityRelationship.java @@ -93,21 +93,21 @@ default void onTragedy(DamageSource cause, @Nullable BlockPos burialSite, Relati default void marry(Entity spouse) { RelationshipState state = spouse instanceof PlayerEntity ? RelationshipState.MARRIED_TO_PLAYER : RelationshipState.MARRIED_TO_VILLAGER; if (spouse instanceof ServerPlayerEntity spouseEntity) { - CriterionMCA.GENERIC_EVENT_CRITERION.trigger(spouseEntity, "marriage"); + CriterionMCA.GENERIC_EVENT.trigger(spouseEntity, "marriage"); } getFamilyEntry().updatePartner(spouse, state); } default void engage(Entity spouse) { if (spouse instanceof ServerPlayerEntity spouseEntity) { - CriterionMCA.GENERIC_EVENT_CRITERION.trigger(spouseEntity, "engage"); + CriterionMCA.GENERIC_EVENT.trigger(spouseEntity, "engage"); } getFamilyEntry().updatePartner(spouse, RelationshipState.ENGAGED); } default void promise(Entity spouse) { if (spouse instanceof ServerPlayerEntity spouseEntity) { - CriterionMCA.GENERIC_EVENT_CRITERION.trigger(spouseEntity, "promise"); + CriterionMCA.GENERIC_EVENT.trigger(spouseEntity, "promise"); } getFamilyEntry().updatePartner(spouse, RelationshipState.PROMISED); } diff --git a/common/src/main/java/net/mca/entity/interaction/VillagerCommandHandler.java b/common/src/main/java/net/mca/entity/interaction/VillagerCommandHandler.java index 5b370baf67..c84a40562e 100644 --- a/common/src/main/java/net/mca/entity/interaction/VillagerCommandHandler.java +++ b/common/src/main/java/net/mca/entity/interaction/VillagerCommandHandler.java @@ -54,7 +54,7 @@ public boolean handle(ServerPlayerEntity player, String command) { if (Chore.byCommand(command).filter(chore -> { entity.getVillagerBrain().assignJob(chore, player); - CriterionMCA.GENERIC_EVENT_CRITERION.trigger(player, "chores"); + CriterionMCA.GENERIC_EVENT.trigger(player, "chores"); entity.sendChatMessage(Text.translatable("adult.chore.success"), player); return true; }).isPresent()) { diff --git a/common/src/main/java/net/mca/entity/interaction/gifts/GiftPredicate.java b/common/src/main/java/net/mca/entity/interaction/gifts/GiftPredicate.java index ae50981880..d8e4b75912 100644 --- a/common/src/main/java/net/mca/entity/interaction/gifts/GiftPredicate.java +++ b/common/src/main/java/net/mca/entity/interaction/gifts/GiftPredicate.java @@ -3,7 +3,6 @@ import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonSyntaxException; -import net.mca.entity.interaction.Constraint; import net.mca.entity.VillagerEntityMCA; import net.mca.entity.ai.Chore; import net.mca.entity.ai.LongTermMemory; @@ -12,9 +11,10 @@ import net.mca.entity.ai.relationship.AgeState; import net.mca.entity.ai.relationship.Gender; import net.mca.entity.ai.relationship.Personality; +import net.mca.entity.interaction.Constraint; import net.mca.resources.Rank; import net.mca.resources.Tasks; -import net.minecraft.advancement.Advancement; +import net.minecraft.advancement.AdvancementEntry; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; @@ -51,17 +51,6 @@ public static float divideAndAdd(JsonObject json, long value) { AgeState.valueOf(JsonHelper.asString(json, name).toUpperCase(Locale.ENGLISH)), group -> (villager, stack, player) -> villager.getAgeState() == group ? 1.0f : 0.0f); register("gender", (json, name) -> Gender.valueOf(JsonHelper.asString(json, name).toUpperCase(Locale.ENGLISH)), gender -> (villager, stack, player) -> villager.getGenetics().getGender() == gender ? 1.0f : 0.0f); - register("has_item", (json, name) -> - Ingredient.fromJson(json), item -> - (villager, stack, player) -> { - for (int i = 0; i < villager.getInventory().size(); i++) { - if (item.test(villager.getInventory().getStack(i))) { - return 1.0f; - } - } - return 0.0f; - } - ); register("min_health", JsonHelper::asFloat, health -> (villager, stack, player) -> villager.getHealth() > health ? 1.0f : 0.0f @@ -175,8 +164,8 @@ public static float divideAndAdd(JsonObject json, long value) { ); register("advancement", (json, name) -> new Identifier(JsonHelper.asString(json, name)), id -> (villager, stack, player) -> { assert player != null; - Advancement advancement = Objects.requireNonNull(player.getServer()).getAdvancementLoader().get(id); - return (advancement != null && player.getAdvancementTracker().getProgress(advancement).isDone()) ? 1.0f : 0.0f; + AdvancementEntry advancement = Objects.requireNonNull(player.getServer()).getAdvancementLoader().get(id); + return player.getAdvancementTracker().getProgress(advancement).isDone() ? 1.0f : 0.0f; }); register("constraints", (json, name) -> Constraint.fromStringList(JsonHelper.asString(json, name)), constraints -> (villager, stack, player) -> { Set c = Constraint.allMatching(villager, player); @@ -228,7 +217,7 @@ public float test(VillagerEntityMCA recipient, ItemStack stack, @Nullable Server } public int getSatisfactionFor(VillagerEntityMCA recipient, ItemStack stack, @Nullable ServerPlayerEntity player) { - return (int)(test(recipient, stack, player) * satisfactionBoost); + return (int) (test(recipient, stack, player) * satisfactionBoost); } public interface Factory { diff --git a/common/src/main/java/net/mca/item/BabyItem.java b/common/src/main/java/net/mca/item/BabyItem.java index 91867cce25..46561a1aad 100644 --- a/common/src/main/java/net/mca/item/BabyItem.java +++ b/common/src/main/java/net/mca/item/BabyItem.java @@ -121,7 +121,7 @@ public boolean onDropped(ItemStack stack, PlayerEntity player) { count = stack.getOrCreateNbt().getInt("dropAttempts") + 1; } stack.getOrCreateNbt().putInt("dropAttempts", count); - CriterionMCA.BABY_DROPPED_CRITERION.trigger((ServerPlayerEntity)player, count); + CriterionMCA.BABY_DROPPED.trigger((ServerPlayerEntity)player, count); player.sendMessage(Text.translatable("item.mca.baby.no_drop"), true); } return false; @@ -142,7 +142,7 @@ public void inventoryTick(ItemStack stack, World world, Entity entity, int slot, stack.removeCustomName(); if (entity instanceof ServerPlayerEntity player) { - CriterionMCA.GENERIC_EVENT_CRITERION.trigger(player, "rename_baby"); + CriterionMCA.GENERIC_EVENT.trigger(player, "rename_baby"); } } diff --git a/common/src/main/java/net/mca/item/ScytheItem.java b/common/src/main/java/net/mca/item/ScytheItem.java index e3a0cacab9..c2b53bec37 100644 --- a/common/src/main/java/net/mca/item/ScytheItem.java +++ b/common/src/main/java/net/mca/item/ScytheItem.java @@ -116,7 +116,7 @@ public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attack sound = SoundEvents.BLOCK_BELL_RESONATE; if (attacker instanceof ServerPlayerEntity) { - CriterionMCA.GENERIC_EVENT_CRITERION.trigger((ServerPlayerEntity)attacker, "scytheKill"); + CriterionMCA.GENERIC_EVENT.trigger((ServerPlayerEntity)attacker, "scytheKill"); } } @@ -150,7 +150,7 @@ public static ActionResult use(ItemUsageContext context, boolean cure) { if (state.isIn(TagsMCA.Blocks.TOMBSTONES)) { return TombstoneBlock.Data.of(world.getBlockEntity(pos)).filter(TombstoneBlock.Data::hasEntity).map(data -> { if (!context.getWorld().isClient) { - CriterionMCA.GENERIC_EVENT_CRITERION.trigger((ServerPlayerEntity)context.getPlayer(), cure ? "staffOfLife" : "scytheRevive"); + CriterionMCA.GENERIC_EVENT.trigger((ServerPlayerEntity)context.getPlayer(), cure ? "staffOfLife" : "scytheRevive"); } if (!world.isClient && !data.isResurrecting()) { diff --git a/common/src/main/java/net/mca/mixin/MixinAbstractFurnaceBlockEntity.java b/common/src/main/java/net/mca/mixin/MixinAbstractFurnaceBlockEntity.java index e609cefe58..ebbd48be8e 100644 --- a/common/src/main/java/net/mca/mixin/MixinAbstractFurnaceBlockEntity.java +++ b/common/src/main/java/net/mca/mixin/MixinAbstractFurnaceBlockEntity.java @@ -27,9 +27,9 @@ public void onDropExperience(ServerPlayerEntity player, CallbackInfo ci) { boolean isBaby = identifier.equals(MCA.locate("baby_boy_from_smelting")); boolean isSirbenBaby = identifier.equals(MCA.locate("baby_sirben_boy_from_smelting")); if (isBaby || isSirbenBaby) { - CriterionMCA.BABY_SMELTED_CRITERION.trigger(player, count); + CriterionMCA.BABY_SMELTED.trigger(player, count); if (isSirbenBaby) { - CriterionMCA.BABY_SIRBEN_SMELTED_CRITERION.trigger(player, count); + CriterionMCA.BABY_SIRBEN_SMELTED.trigger(player, count); } } } diff --git a/common/src/main/java/net/mca/mixin/MixinCriteria.java b/common/src/main/java/net/mca/mixin/MixinCriteria.java deleted file mode 100644 index 4a59796ae2..0000000000 --- a/common/src/main/java/net/mca/mixin/MixinCriteria.java +++ /dev/null @@ -1,14 +0,0 @@ -package net.mca.mixin; - -import net.minecraft.advancement.criterion.Criteria; -import net.minecraft.advancement.criterion.Criterion; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Invoker; - -@Mixin(Criteria.class) -public interface MixinCriteria { - @Invoker("register") - static > T register(T object) { - return null; - } -} diff --git a/common/src/main/java/net/mca/mixin/MixinGoatEntity.java b/common/src/main/java/net/mca/mixin/MixinGoatEntity.java index 4202c91aa0..de7b5ce3af 100644 --- a/common/src/main/java/net/mca/mixin/MixinGoatEntity.java +++ b/common/src/main/java/net/mca/mixin/MixinGoatEntity.java @@ -51,7 +51,7 @@ protected void getMilkingSound(CallbackInfoReturnable cir) { //advancement ((ServerWorld)this.getWorld()).getPlayers().stream().filter(p -> p.distanceTo(this) < 30).forEach(p -> { - CriterionMCA.GENERIC_EVENT_CRITERION.trigger(p, "ancient_cultists"); + CriterionMCA.GENERIC_EVENT.trigger(p, "ancient_cultists"); }); //remove the goat diff --git a/common/src/main/java/net/mca/network/NbtDataMessage.java b/common/src/main/java/net/mca/network/NbtDataMessage.java index 4942f5134f..a51bda6e30 100644 --- a/common/src/main/java/net/mca/network/NbtDataMessage.java +++ b/common/src/main/java/net/mca/network/NbtDataMessage.java @@ -32,12 +32,12 @@ private static final class Data implements Serializable { @Serial private void writeObject(ObjectOutputStream out) throws IOException { - NbtIo.write(nbt, out); + NbtIo.writeCompound(nbt, out); } @Serial private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException { - nbt = NbtIo.read(in); + nbt = NbtIo.readCompound(in); } } } diff --git a/common/src/main/java/net/mca/resources/data/tasks/AdvancementTask.java b/common/src/main/java/net/mca/resources/data/tasks/AdvancementTask.java index 7ac9bb9f6c..99c5edde71 100644 --- a/common/src/main/java/net/mca/resources/data/tasks/AdvancementTask.java +++ b/common/src/main/java/net/mca/resources/data/tasks/AdvancementTask.java @@ -2,7 +2,7 @@ import com.google.gson.JsonObject; import net.mca.server.world.data.Village; -import net.minecraft.advancement.Advancement; +import net.minecraft.advancement.AdvancementEntry; import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.util.Identifier; import net.minecraft.util.JsonHelper; @@ -23,7 +23,7 @@ public AdvancementTask(JsonObject json) { @Override public boolean isCompleted(Village village, ServerPlayerEntity player) { - Advancement advancement = Objects.requireNonNull(player.getServer()).getAdvancementLoader().get(new Identifier(identifier)); + AdvancementEntry advancement = Objects.requireNonNull(player.getServer()).getAdvancementLoader().get(new Identifier(identifier)); return player.getAdvancementTracker().getProgress(advancement).isDone(); } } diff --git a/common/src/main/java/net/mca/server/world/data/CustomClothingManager.java b/common/src/main/java/net/mca/server/world/data/CustomClothingManager.java index b147bb68ea..80a9131728 100644 --- a/common/src/main/java/net/mca/server/world/data/CustomClothingManager.java +++ b/common/src/main/java/net/mca/server/world/data/CustomClothingManager.java @@ -8,9 +8,11 @@ import net.mca.resources.data.skin.Clothing; import net.mca.resources.data.skin.Hair; import net.mca.resources.data.skin.SkinListEntry; +import net.mca.util.WorldUtils; import net.minecraft.nbt.NbtCompound; import net.minecraft.server.MinecraftServer; import net.minecraft.server.network.ServerPlayerEntity; +import net.minecraft.server.world.ServerWorld; import net.minecraft.world.PersistentState; import java.util.HashMap; @@ -25,8 +27,7 @@ public class CustomClothingManager { public static Storage getClothing() { Optional server = MCA.getServer(); if (server.isPresent()) { - return server.get().getOverworld().getPersistentStateManager() - .getOrCreate(nbt -> new Storage<>(nbt, Clothing::new), Storage::new, "immersive_library_clothing"); + return WorldUtils.loadData(server.get().getOverworld(), nbt -> new Storage<>(nbt, Clothing::new), Storage::new, "immersive_library_clothing"); } else { return CLOTHING_DUMMY; } @@ -35,8 +36,7 @@ public static Storage getClothing() { public static Storage getHair() { Optional server = MCA.getServer(); if (server.isPresent()) { - return server.get().getOverworld().getPersistentStateManager() - .getOrCreate(nbt -> new Storage<>(nbt, Hair::new), Storage::new, "immersive_library_hair"); + return WorldUtils.loadData(server.get().getOverworld(), nbt -> new Storage<>(nbt, Hair::new), Storage::new, "immersive_library_hair"); } else { return HAIR_DUMMY; } @@ -48,6 +48,10 @@ public static class Storage extends PersistentState { public Storage() { } + public Storage(ServerWorld serverWorld) { + this(); + } + public Storage(NbtCompound nbt, BiFunction entryFromNbt) { Gson gson = new Gson(); for (String identifier : nbt.getKeys()) { diff --git a/common/src/main/java/net/mca/server/world/data/PlayerSaveData.java b/common/src/main/java/net/mca/server/world/data/PlayerSaveData.java index 1c7d4b98bd..f3a33a597c 100644 --- a/common/src/main/java/net/mca/server/world/data/PlayerSaveData.java +++ b/common/src/main/java/net/mca/server/world/data/PlayerSaveData.java @@ -60,7 +60,9 @@ public static PlayerSaveData get(ServerWorld world, UUID uuid) { } public static Optional getIfPresent(ServerWorld world, UUID uuid) { - return Optional.ofNullable(world.getPersistentStateManager().get(nbt -> new PlayerSaveData(world, uuid, nbt), "mca_player_" + uuid)); + return Optional.ofNullable( + WorldUtils.getData(world.getServer().getOverworld(), nbt -> new PlayerSaveData(world, uuid, nbt), w -> new PlayerSaveData(world, uuid), "mca_player_" + uuid) + ); } PlayerSaveData(ServerWorld world, UUID uuid) { diff --git a/common/src/main/java/net/mca/server/world/data/VillageManager.java b/common/src/main/java/net/mca/server/world/data/VillageManager.java index 1742dbb8fd..9e9d88ff0a 100644 --- a/common/src/main/java/net/mca/server/world/data/VillageManager.java +++ b/common/src/main/java/net/mca/server/world/data/VillageManager.java @@ -180,7 +180,7 @@ private void startBountyHunterWave(ServerPlayerEntity player, Village sender) { } //trigger advancement - CriterionMCA.GENERIC_EVENT_CRITERION.trigger(player, "bounty_hunter"); + CriterionMCA.GENERIC_EVENT.trigger(player, "bounty_hunter"); //spawn the bois for (int c = 0; c < count; c++) { diff --git a/common/src/main/java/net/mca/util/WorldUtils.java b/common/src/main/java/net/mca/util/WorldUtils.java index 6a6abd54dd..9ef16c226c 100644 --- a/common/src/main/java/net/mca/util/WorldUtils.java +++ b/common/src/main/java/net/mca/util/WorldUtils.java @@ -1,6 +1,7 @@ package net.mca.util; import com.mojang.datafixers.util.Pair; +import net.minecraft.datafixer.DataFixTypes; import net.minecraft.entity.Entity; import net.minecraft.entity.SpawnReason; import net.minecraft.entity.mob.MobEntity; @@ -22,19 +23,11 @@ import java.util.function.Function; public interface WorldUtils { - static List getCloseEntities(World world, Entity e) { - return getCloseEntities(world, e, 256.0); - } - static List getCloseEntities(World world, Entity e, double range) { Vec3d pos = e.getPos(); return world.getOtherEntities(e, new Box(pos, pos).expand(range)); } - static List getCloseEntities(World world, Entity e, Class c) { - return getCloseEntities(world, e, 256.0, c); - } - static List getCloseEntities(World world, Entity e, double range, Class c) { return getCloseEntities(world, e.getPos(), range, c); } @@ -43,8 +36,21 @@ static List getCloseEntities(World world, Vec3d pos, doubl return world.getNonSpectatingEntities(c, new Box(pos, pos).expand(range)); } + static PersistentState.Type getType(ServerWorld world, Function loader, Function factory) { + return new PersistentState.Type<>( + () -> { + return factory.apply(world); + }, + loader, DataFixTypes.SAVED_DATA_RANDOM_SEQUENCES // Yes, wrong fixer but we do not need one and null is invalid + ); + } + static T loadData(ServerWorld world, Function loader, Function factory, String dataId) { - return world.getPersistentStateManager().getOrCreate(loader, () -> factory.apply(world), dataId); + return world.getPersistentStateManager().getOrCreate(getType(world, loader, factory), dataId); + } + + static T getData(ServerWorld world, Function loader, Function factory, String dataId) { + return world.getPersistentStateManager().get(getType(world, loader, factory), dataId); } static void spawnEntity(World world, MobEntity entity, SpawnReason reason) { diff --git a/common/src/main/resources/mca.mixin.json b/common/src/main/resources/mca.mixin.json index 9fe5ba9161..2302879c06 100644 --- a/common/src/main/resources/mca.mixin.json +++ b/common/src/main/resources/mca.mixin.json @@ -4,7 +4,7 @@ "package": "net.mca.mixin", "compatibilityLevel": "JAVA_17", "mixins": [ - "MixinAbstractFurnaceBlockEntity", "MixinActivity", "MixinCriteria", "MixinDefaultParticleType", "MixinEntityType", + "MixinAbstractFurnaceBlockEntity", "MixinActivity", "MixinDefaultParticleType", "MixinEntityType", "MixinGoatEntity", "MixinHorseBaseEntity", "MixinMemoryModuleType", "MixinMilkBucketItem", "MixinPlayerEntity", "MixinPlayerInventory", "MixinProtoChunk", "MixinSensorType", "MixinServerPlayNetworkHandler", "MixinServerWorld", "MixinTranslatableText", "MixinVillagerEntity", "MixinVillagerEntityInvoker", "MixinVillagerProfession", diff --git a/forge/src/main/java/net/mca/forge/cobalt/network/NetworkHandlerImpl.java b/forge/src/main/java/net/mca/forge/cobalt/network/NetworkHandlerImpl.java index 2acd7c36a8..9323fd0c5d 100644 --- a/forge/src/main/java/net/mca/forge/cobalt/network/NetworkHandlerImpl.java +++ b/forge/src/main/java/net/mca/forge/cobalt/network/NetworkHandlerImpl.java @@ -5,46 +5,47 @@ import net.mca.cobalt.network.NetworkHandler; import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.util.Identifier; -import net.minecraftforge.network.NetworkRegistry; +import net.minecraftforge.network.Channel; +import net.minecraftforge.network.ChannelBuilder; import net.minecraftforge.network.PacketDistributor; -import net.minecraftforge.network.simple.SimpleChannel; +import net.minecraftforge.network.SimpleChannel; public class NetworkHandlerImpl extends NetworkHandler.Impl { - private final String PROTOCOL_VERSION = "1"; - private final SimpleChannel channel = NetworkRegistry.newSimpleChannel( - new Identifier(MCA.MOD_ID, "main"), - () -> PROTOCOL_VERSION, - PROTOCOL_VERSION::equals, - PROTOCOL_VERSION::equals - ); + private static final int PROTOCOL_VERSION = 1; + + private final SimpleChannel channel = ChannelBuilder.named(new Identifier(MCA.MOD_ID, "main")) + .networkProtocolVersion(PROTOCOL_VERSION) + .acceptedVersions(Channel.VersionTest.exact(PROTOCOL_VERSION)) + .simpleChannel(); + private int id = 0; - @SuppressWarnings("unchecked") @Override public void registerMessage(Class msg) { - channel.registerMessage(id++, msg, - Message::encode, - b -> (T) Message.decode(b), - (m, ctx) -> { - ctx.get().enqueueWork(() -> { - ServerPlayerEntity sender = ctx.get().getSender(); + this.channel.messageBuilder(msg, id++) + .encoder(Message::encode) + .decoder(b -> (T) Message.decode(b)) + .consumerNetworkThread((m, ctx) -> { + ctx.enqueueWork(() -> { + ServerPlayerEntity sender = ctx.getSender(); if (sender == null) { m.receive(); } else { m.receive(sender); } }); - ctx.get().setPacketHandled(true); - }); + ctx.setPacketHandled(true); + }) + .add(); } @Override public void sendToServer(Message m) { - channel.sendToServer(m); + channel.send(m, PacketDistributor.SERVER.noArg()); } @Override public void sendToPlayer(Message m, ServerPlayerEntity e) { - channel.send(PacketDistributor.PLAYER.with(() -> e), m); + channel.send(m, PacketDistributor.PLAYER.with(e)); } -} +} \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 3ac792d3c7..71f7deefd1 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,15 +3,15 @@ org.gradle.daemon=false # Fabric Properties # check these on https://fabricmc.net/develop/ -minecraft_version=1.20.1 -yarn_mappings=1.20.1+build.2 -loader_version=0.14.21 -fabric_version=0.83.0+1.20.1 -forge_version=47.0.3 -architectury_version=9.0.8 -quilt_loader_version=0.19.1 -quilt_fabric_api_version=7.0.2+0.83.0-1.20.1 -quilt_qsl_version=6.0.3+1.20.1 +minecraft_version=1.20.2 +yarn_mappings=1.20.2+build.4 +loader_version=0.15.6 +fabric_version=0.91.6+1.20.2 +forge_version=48.0.0 +architectury_version=10.0.17 +quilt_loader_version=0.23.1 +quilt_fabric_api_version=8.0.0-alpha.3+0.91.2-1.20.2 +quilt_qsl_version=7.0.0-alpha.9+1.20.2 # Mod Properties group=net.mca