From 4478a249137f65579a7a6cf1c5beeabd23603a78 Mon Sep 17 00:00:00 2001 From: IzzelAliz Date: Wed, 17 Jun 2020 11:39:20 +0800 Subject: [PATCH] Fix AssignProfessionTask mixin redirect target error. --- .../brain/task/AssignProfessionTaskMixin.java | 33 +++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/entity/ai/brain/task/AssignProfessionTaskMixin.java b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/entity/ai/brain/task/AssignProfessionTaskMixin.java index 634e4b80..9b615fde 100644 --- a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/entity/ai/brain/task/AssignProfessionTaskMixin.java +++ b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/entity/ai/brain/task/AssignProfessionTaskMixin.java @@ -1,19 +1,24 @@ package io.izzel.arclight.common.mixin.core.entity.ai.brain.task; +import net.minecraft.entity.ai.brain.memory.MemoryModuleType; import net.minecraft.entity.ai.brain.task.AssignProfessionTask; import net.minecraft.entity.merchant.villager.VillagerData; import net.minecraft.entity.merchant.villager.VillagerEntity; import net.minecraft.entity.merchant.villager.VillagerProfession; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.math.GlobalPos; +import net.minecraft.util.registry.Registry; +import net.minecraft.world.server.ServerWorld; import org.bukkit.craftbukkit.v.entity.CraftVillager; import org.bukkit.craftbukkit.v.event.CraftEventFactory; import org.bukkit.event.entity.VillagerCareerChangeEvent; import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; +import org.spongepowered.asm.mixin.Overwrite; @Mixin(AssignProfessionTask.class) public class AssignProfessionTaskMixin { + /* @SuppressWarnings("UnresolvedMixinReference") @Redirect(method = "*(Lnet/minecraft/entity/merchant/villager/VillagerEntity;Lnet/minecraft/world/server/ServerWorld;Lnet/minecraft/entity/merchant/villager/VillagerProfession;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/merchant/villager/VillagerEntity;setVillagerData(Lnet/minecraft/entity/merchant/villager/VillagerData;)V")) private void arclight$careerChangeHook(VillagerEntity villagerEntity, VillagerData villagerData) { @@ -23,5 +28,29 @@ public class AssignProfessionTaskMixin { VillagerData newData = villagerEntity.getVillagerData().withProfession(CraftVillager.bukkitToNmsProfession(event.getProfession())); villagerEntity.setVillagerData(newData); } + }*/ + + /** + * @author IzzelAliz + * @reason + */ + @Overwrite + protected void startExecuting(ServerWorld worldIn, VillagerEntity entityIn, long gameTimeIn) { + GlobalPos globalpos = entityIn.getBrain().getMemory(MemoryModuleType.JOB_SITE).get(); + MinecraftServer minecraftserver = worldIn.getServer(); + minecraftserver.getWorld(globalpos.getDimension()).getPointOfInterestManager().getType(globalpos.getPos()).ifPresent((p_220390_2_) -> { + Registry.VILLAGER_PROFESSION.stream().filter((p_220389_1_) -> { + return p_220389_1_.getPointOfInterest() == p_220390_2_; + }).findFirst().ifPresent((p_220388_2_) -> { + VillagerData villagerData = entityIn.getVillagerData().withProfession(p_220388_2_); + VillagerProfession profession = villagerData.getProfession(); + VillagerCareerChangeEvent event = CraftEventFactory.callVillagerCareerChangeEvent(entityIn, CraftVillager.nmsToBukkitProfession(profession), VillagerCareerChangeEvent.ChangeReason.EMPLOYED); + if (!event.isCancelled()) { + VillagerData newData = entityIn.getVillagerData().withProfession(CraftVillager.bukkitToNmsProfession(event.getProfession())); + entityIn.setVillagerData(newData); + entityIn.resetBrain(worldIn); + } + }); + }); } }