Fix class cast exception on mod villagers

This commit is contained in:
IzzelAliz 2021-01-10 16:49:17 +08:00
parent d6bf0f12ea
commit 13c956e833
4 changed files with 23 additions and 35 deletions

View File

@ -0,0 +1,19 @@
package io.izzel.arclight.common.mixin.bukkit;
import net.minecraft.entity.merchant.villager.AbstractVillagerEntity;
import org.bukkit.craftbukkit.v.entity.CraftAbstractVillager;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Overwrite;
@Mixin(CraftAbstractVillager.class)
public class CraftAbstractVillagerMixin extends CraftEntityMixin {
/**
* @author IzzelAliz
* @reason
*/
@Overwrite
public AbstractVillagerEntity getHandle() {
return (AbstractVillagerEntity) this.entity;
}
}

View File

@ -10,7 +10,6 @@ import io.izzel.arclight.common.mod.server.entity.ArclightModMinecartContainer;
import io.izzel.arclight.common.mod.server.entity.ArclightModMob; import io.izzel.arclight.common.mod.server.entity.ArclightModMob;
import io.izzel.arclight.common.mod.server.entity.ArclightModProjectile; import io.izzel.arclight.common.mod.server.entity.ArclightModProjectile;
import io.izzel.arclight.common.mod.server.entity.ArclightModRaider; import io.izzel.arclight.common.mod.server.entity.ArclightModRaider;
import io.izzel.arclight.common.mod.server.entity.ArclightModVillager;
import net.minecraft.entity.AgeableEntity; import net.minecraft.entity.AgeableEntity;
import net.minecraft.entity.Entity; import net.minecraft.entity.Entity;
import net.minecraft.entity.FlyingEntity; import net.minecraft.entity.FlyingEntity;
@ -18,7 +17,6 @@ import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.MobEntity; import net.minecraft.entity.MobEntity;
import net.minecraft.entity.item.minecart.AbstractMinecartEntity; import net.minecraft.entity.item.minecart.AbstractMinecartEntity;
import net.minecraft.entity.item.minecart.ContainerMinecartEntity; import net.minecraft.entity.item.minecart.ContainerMinecartEntity;
import net.minecraft.entity.merchant.villager.AbstractVillagerEntity;
import net.minecraft.entity.monster.AbstractRaiderEntity; import net.minecraft.entity.monster.AbstractRaiderEntity;
import net.minecraft.entity.passive.GolemEntity; import net.minecraft.entity.passive.GolemEntity;
import net.minecraft.entity.passive.TameableEntity; import net.minecraft.entity.passive.TameableEntity;
@ -33,6 +31,7 @@ import org.bukkit.craftbukkit.v.entity.CraftFlying;
import org.bukkit.craftbukkit.v.entity.CraftGolem; import org.bukkit.craftbukkit.v.entity.CraftGolem;
import org.bukkit.craftbukkit.v.entity.CraftTameableAnimal; import org.bukkit.craftbukkit.v.entity.CraftTameableAnimal;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
@ -40,6 +39,8 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
@Mixin(value = CraftEntity.class, remap = false) @Mixin(value = CraftEntity.class, remap = false)
public class CraftEntityMixin { public class CraftEntityMixin {
@Shadow protected Entity entity;
@Inject(method = "getEntity", cancellable = true, at = @At("HEAD")) @Inject(method = "getEntity", cancellable = true, at = @At("HEAD"))
private static void arclight$fakePlayer(CraftServer server, Entity entity, CallbackInfoReturnable<CraftEntity> cir) { private static void arclight$fakePlayer(CraftServer server, Entity entity, CallbackInfoReturnable<CraftEntity> cir) {
if (entity instanceof FakePlayer) { if (entity instanceof FakePlayer) {
@ -60,10 +61,6 @@ public class CraftEntityMixin {
cir.setReturnValue(new ArclightModHorse(server, (AbstractHorseEntity) entity)); cir.setReturnValue(new ArclightModHorse(server, (AbstractHorseEntity) entity));
return; return;
} }
if (entity instanceof AbstractVillagerEntity) {
cir.setReturnValue(new ArclightModVillager(server, (AbstractVillagerEntity) entity));
return;
}
if (entity instanceof TameableEntity) { if (entity instanceof TameableEntity) {
cir.setReturnValue(new CraftTameableAnimal(server, (TameableEntity) entity)); cir.setReturnValue(new CraftTameableAnimal(server, (TameableEntity) entity));
return; return;

View File

@ -1,29 +0,0 @@
package io.izzel.arclight.common.mod.server.entity;
import io.izzel.arclight.common.mod.util.ResourceLocationUtil;
import net.minecraft.entity.merchant.villager.AbstractVillagerEntity;
import net.minecraftforge.registries.ForgeRegistries;
import org.bukkit.craftbukkit.v.CraftServer;
import org.bukkit.craftbukkit.v.entity.CraftAbstractVillager;
import org.bukkit.entity.EntityType;
import org.jetbrains.annotations.NotNull;
public class ArclightModVillager extends CraftAbstractVillager {
private final EntityType entityType;
public ArclightModVillager(CraftServer server, AbstractVillagerEntity entity) {
super(server, entity);
this.entityType = EntityType.valueOf(ResourceLocationUtil.standardize(ForgeRegistries.ENTITIES.getKey(entity.getType())));
}
@Override
public @NotNull EntityType getType() {
return this.entityType;
}
@Override
public String toString() {
return "ArclightModVillager{" + entityType + '}';
}
}

View File

@ -9,6 +9,7 @@
"mixins": [ "mixins": [
"BukkitCommandWrapperMixin", "BukkitCommandWrapperMixin",
"ColouredConsoleSenderMixin", "ColouredConsoleSenderMixin",
"CraftAbstractVillagerMixin",
"CraftBlockMixin", "CraftBlockMixin",
"CraftBlockStateMixin", "CraftBlockStateMixin",
"CraftChunkMixin", "CraftChunkMixin",