From e537455453a7b833c702084f13ac5987f21d57c9 Mon Sep 17 00:00:00 2001 From: IzzelAliz Date: Fri, 30 Oct 2020 21:54:47 +0800 Subject: [PATCH] Fix throwing egg crashes server --- .../arclight/common/mixin/bukkit/CraftWorldMixin.java | 7 ++++--- .../mixin/core/entity/projectile/EggEntityMixin.java | 3 +-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/bukkit/CraftWorldMixin.java b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/bukkit/CraftWorldMixin.java index 85ec0ef1..6ddf9183 100644 --- a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/bukkit/CraftWorldMixin.java +++ b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/bukkit/CraftWorldMixin.java @@ -1,13 +1,13 @@ package io.izzel.arclight.common.mixin.bukkit; import io.izzel.arclight.common.bridge.bukkit.EntityTypeBridge; -import io.izzel.arclight.common.bridge.entity.EntityBridge; import io.izzel.arclight.common.bridge.world.server.ServerWorldBridge; import net.minecraft.world.server.ServerWorld; import org.bukkit.Location; import org.bukkit.craftbukkit.v.CraftWorld; import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; +import org.bukkit.event.entity.CreatureSpawnEvent; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Overwrite; @@ -20,17 +20,18 @@ import java.io.File; import java.util.function.Function; @Mixin(value = CraftWorld.class, remap = false) -public class CraftWorldMixin { +public abstract class CraftWorldMixin { // @formatter:off @Shadow @Final private ServerWorld world; + @Shadow public abstract T addEntity(net.minecraft.entity.Entity entity, CreatureSpawnEvent.SpawnReason reason) throws IllegalArgumentException; // @formatter:on @Inject(method = "spawnEntity", cancellable = true, at = @At("HEAD")) private void arclight$useFactory(Location loc, EntityType entityType, CallbackInfoReturnable cir) { Function factory = ((EntityTypeBridge) (Object) entityType).bridge$entityFactory(); if (factory != null) { - cir.setReturnValue(((EntityBridge) factory.apply(loc)).bridge$getBukkitEntity()); + cir.setReturnValue(this.addEntity(factory.apply(loc), CreatureSpawnEvent.SpawnReason.CUSTOM)); } } diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/entity/projectile/EggEntityMixin.java b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/entity/projectile/EggEntityMixin.java index 2e38e711..0752f24e 100644 --- a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/entity/projectile/EggEntityMixin.java +++ b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/entity/projectile/EggEntityMixin.java @@ -9,7 +9,6 @@ import net.minecraft.entity.projectile.EggEntity; import net.minecraft.util.math.RayTraceResult; import org.bukkit.Bukkit; import org.bukkit.Location; -import org.bukkit.craftbukkit.v.entity.CraftEntity; import org.bukkit.entity.Ageable; import org.bukkit.entity.Egg; import org.bukkit.event.entity.CreatureSpawnEvent; @@ -47,7 +46,7 @@ public abstract class EggEntityMixin extends ThrowableEntityMixin { } if (hatching) { for (int i = 0; i < b0; ++i) { - Entity entity = ((CraftEntity) ((WorldBridge) this.world).bridge$getWorld().spawnEntity(new Location(((WorldBridge) this.world).bridge$getWorld(), this.getPosX(), this.getPosY(), this.getPosZ(), this.rotationYaw, 0.0f), hatchingType)).getHandle(); + Entity entity = ((WorldBridge) this.world).bridge$getWorld().createEntity(new Location(((WorldBridge) this.world).bridge$getWorld(), this.getPosX(), this.getPosY(), this.getPosZ(), this.rotationYaw, 0.0f), hatchingType.getEntityClass()); if (((EntityBridge) entity).bridge$getBukkitEntity() instanceof Ageable) { ((Ageable) ((EntityBridge) entity).bridge$getBukkitEntity()).setBaby(); }