diff --git a/src/main/java/carpet/fakes/BrainInterface.java b/src/main/java/carpet/fakes/BrainInterface.java new file mode 100644 index 00000000..b45b9778 --- /dev/null +++ b/src/main/java/carpet/fakes/BrainInterface.java @@ -0,0 +1,12 @@ +package carpet.fakes; + +import net.minecraft.entity.ai.brain.Memory; +import net.minecraft.entity.ai.brain.MemoryModuleType; + +import java.util.Map; +import java.util.Optional; + +public interface BrainInterface +{ + Map, Optional>> getMobMemories(); +} diff --git a/src/main/java/carpet/mixins/Brain_Mixin.java b/src/main/java/carpet/mixins/Brain_Mixin.java new file mode 100644 index 00000000..161a1e9d --- /dev/null +++ b/src/main/java/carpet/mixins/Brain_Mixin.java @@ -0,0 +1,25 @@ +package carpet.mixins; + +import carpet.fakes.BrainInterface; +import net.minecraft.entity.ai.brain.Brain; +import net.minecraft.entity.ai.brain.Memory; +import net.minecraft.entity.ai.brain.MemoryModuleType; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; + +import java.util.Map; +import java.util.Optional; + +@Mixin(Brain.class) +public class Brain_Mixin implements BrainInterface +{ + + @Shadow @Final private Map, Optional>> memories; + + @Override + public Map, Optional>> getMobMemories() + { + return memories; + } +} diff --git a/src/main/java/carpet/mixins/VillagerEntity_aiMixin.java b/src/main/java/carpet/mixins/VillagerEntity_aiMixin.java index ef4ee7ff..f248b669 100644 --- a/src/main/java/carpet/mixins/VillagerEntity_aiMixin.java +++ b/src/main/java/carpet/mixins/VillagerEntity_aiMixin.java @@ -1,12 +1,12 @@ package carpet.mixins; +import carpet.fakes.BrainInterface; import carpet.helpers.ParticleDisplay; import carpet.utils.Messenger; import carpet.utils.MobAI; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityInteraction; import net.minecraft.entity.EntityType; import net.minecraft.entity.ai.brain.Activity; +import net.minecraft.entity.ai.brain.Memory; import net.minecraft.entity.ai.brain.MemoryModuleType; import net.minecraft.entity.ai.pathing.Path; import net.minecraft.entity.passive.AbstractTraderEntity; @@ -62,13 +62,15 @@ public abstract class VillagerEntity_aiMixin extends AbstractTraderEntity if (MobAI.isTracking(this, MobAI.TrackingType.IRON_GOLEM_SPAWNING)) { long time; - Optional optional_1 = this.brain.getOptionalMemory(MemoryModuleType.GOLEM_DETECTED_RECENTLY); - if (!optional_1.isPresent()) { + Optional> last_seen = ((BrainInterface)this.brain).getMobMemories().get(MemoryModuleType.GOLEM_DETECTED_RECENTLY); + if (!last_seen.isPresent()) + { time = 0; - } else { - //Long long_2 = optional_1.get(); #TODO fixme need last seen golem time. - //time = long_2+600 - getEntityWorld().getTime(); - time = 600; + } + else + { + String serialized = last_seen.get().toString(); + time = Integer.parseInt(serialized.substring(11, serialized.length()-1)); } boolean recentlySeen = time > 0; Optional optional_11 = this.brain.getOptionalMemory(MemoryModuleType.LAST_SLEPT); diff --git a/src/main/resources/carpet.mixins.json b/src/main/resources/carpet.mixins.json index 6a20aac3..f25b946b 100644 --- a/src/main/resources/carpet.mixins.json +++ b/src/main/resources/carpet.mixins.json @@ -55,6 +55,7 @@ "EntityTrackerEntry_leashFixMixin", "VillagerEntity_aiMixin", + "Brain_Mixin", "ServerWorld_fakePlayersMixin", "ThrownEnderpearlEntity_fakePlayersMixin",