From 8833d3328636251183e1db8b86647d01eb361b6a Mon Sep 17 00:00:00 2001 From: gnembon Date: Sun, 19 Jul 2020 02:57:14 -0300 Subject: [PATCH] adjusting to 1.16 --- .../java/carpet/fakes/MemoryInterface.java | 6 ++++++ .../carpet/mixins/Memory_scarpetMixin.java | 18 ++++++++++++++++++ .../carpet/mixins/VillagerEntity_aiMixin.java | 4 ++-- .../java/carpet/script/value/EntityValue.java | 13 ++++++++++--- .../carpet/script/value/ValueConversions.java | 9 ++++++++- src/main/resources/carpet.mixins.json | 1 + 6 files changed, 45 insertions(+), 6 deletions(-) create mode 100644 src/main/java/carpet/fakes/MemoryInterface.java create mode 100644 src/main/java/carpet/mixins/Memory_scarpetMixin.java diff --git a/src/main/java/carpet/fakes/MemoryInterface.java b/src/main/java/carpet/fakes/MemoryInterface.java new file mode 100644 index 00000000..8447433c --- /dev/null +++ b/src/main/java/carpet/fakes/MemoryInterface.java @@ -0,0 +1,6 @@ +package carpet.fakes; + +public interface MemoryInterface +{ + long getScarpetExpiry(); +} diff --git a/src/main/java/carpet/mixins/Memory_scarpetMixin.java b/src/main/java/carpet/mixins/Memory_scarpetMixin.java new file mode 100644 index 00000000..d3b4db17 --- /dev/null +++ b/src/main/java/carpet/mixins/Memory_scarpetMixin.java @@ -0,0 +1,18 @@ +package carpet.mixins; + +import carpet.fakes.MemoryInterface; +import net.minecraft.entity.ai.brain.Memory; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; + +@Mixin(Memory.class) +public class Memory_scarpetMixin implements MemoryInterface +{ + @Shadow private long expiry; + + @Override + public long getScarpetExpiry() + { + return expiry; + } +} diff --git a/src/main/java/carpet/mixins/VillagerEntity_aiMixin.java b/src/main/java/carpet/mixins/VillagerEntity_aiMixin.java index f248b669..c2a90c43 100644 --- a/src/main/java/carpet/mixins/VillagerEntity_aiMixin.java +++ b/src/main/java/carpet/mixins/VillagerEntity_aiMixin.java @@ -1,6 +1,7 @@ package carpet.mixins; import carpet.fakes.BrainInterface; +import carpet.fakes.MemoryInterface; import carpet.helpers.ParticleDisplay; import carpet.utils.Messenger; import carpet.utils.MobAI; @@ -69,8 +70,7 @@ public abstract class VillagerEntity_aiMixin extends AbstractTraderEntity } else { - String serialized = last_seen.get().toString(); - time = Integer.parseInt(serialized.substring(11, serialized.length()-1)); + time = ((MemoryInterface)last_seen.get()).getScarpetExpiry(); } boolean recentlySeen = time > 0; Optional optional_11 = this.brain.getOptionalMemory(MemoryModuleType.LAST_SLEPT); diff --git a/src/main/java/carpet/script/value/EntityValue.java b/src/main/java/carpet/script/value/EntityValue.java index 18b363ca..09d3ddab 100644 --- a/src/main/java/carpet/script/value/EntityValue.java +++ b/src/main/java/carpet/script/value/EntityValue.java @@ -1,8 +1,10 @@ package carpet.script.value; +import carpet.fakes.BrainInterface; import carpet.fakes.EntityInterface; import carpet.fakes.ItemEntityInterface; import carpet.fakes.LivingEntityInterface; +import carpet.fakes.MemoryInterface; import carpet.fakes.MobEntityInterface; import carpet.fakes.HungerManagerInterface; import carpet.helpers.Tracer; @@ -13,6 +15,8 @@ import carpet.script.argument.Vector3Argument; import carpet.script.exception.InternalExpressionException; import com.mojang.brigadier.StringReader; import com.mojang.brigadier.exceptions.CommandSyntaxException; +import net.minecraft.entity.ai.brain.Brain; +import net.minecraft.entity.ai.brain.Memory; import net.minecraft.entity.ai.brain.MemoryModuleType; import net.minecraft.entity.ai.pathing.Path; import net.minecraft.nbt.StringTag; @@ -350,9 +354,12 @@ public class EntityValue extends Value if (e instanceof LivingEntity) { LivingEntity livingEntity = (LivingEntity)e; - Optional memory = livingEntity.getBrain().getOptionalMemory(moduleType); - if (memory==null || !memory.isPresent()) return Value.NULL; - return ValueConversions.fromEntityMemory(e, memory.get()); + Brain brain = livingEntity.getBrain(); + Map, Optional>> memories = ((BrainInterface)brain).getMobMemories(); + Optional> optmemory = memories.get(moduleType); + if (optmemory==null || !optmemory.isPresent()) return Value.NULL; + Memory memory = optmemory.get(); + return ValueConversions.fromTimedMemory(e, ((MemoryInterface)memory).getScarpetExpiry(), memory.getValue()); } return Value.NULL; }); diff --git a/src/main/java/carpet/script/value/ValueConversions.java b/src/main/java/carpet/script/value/ValueConversions.java index 4baaa0a2..da8b6433 100644 --- a/src/main/java/carpet/script/value/ValueConversions.java +++ b/src/main/java/carpet/script/value/ValueConversions.java @@ -70,7 +70,14 @@ public class ValueConversions return ListValue.wrap(nodes); } - public static Value fromEntityMemory(Entity e, Object v) + public static Value fromTimedMemory(Entity e, long expiry, Object v) + { + Value ret = fromEntityMemory(e, v); + if (ret == Value.NULL || expiry == Long.MAX_VALUE) return ret; + return ListValue.of(ret, new NumericValue(expiry)); + } + + private static Value fromEntityMemory(Entity e, Object v) { if (v instanceof GlobalPos) { diff --git a/src/main/resources/carpet.mixins.json b/src/main/resources/carpet.mixins.json index f25b946b..304ba955 100644 --- a/src/main/resources/carpet.mixins.json +++ b/src/main/resources/carpet.mixins.json @@ -56,6 +56,7 @@ "VillagerEntity_aiMixin", "Brain_Mixin", + "Memory_scarpetMixin", "ServerWorld_fakePlayersMixin", "ThrownEnderpearlEntity_fakePlayersMixin",