Better fake player compatibility (#80)

This commit is contained in:
IzzelAliz 2020-11-22 11:02:35 +08:00
parent 33b0e468ab
commit 36f8c76dc6
2 changed files with 30 additions and 0 deletions

View File

@ -1,5 +1,6 @@
package io.izzel.arclight.common.mixin.bukkit;
import io.izzel.arclight.common.mod.server.entity.ArclightFakePlayer;
import io.izzel.arclight.common.mod.server.entity.ArclightModChestedHorse;
import io.izzel.arclight.common.mod.server.entity.ArclightModEntity;
import io.izzel.arclight.common.mod.server.entity.ArclightModHorse;
@ -24,6 +25,7 @@ import net.minecraft.entity.passive.TameableEntity;
import net.minecraft.entity.passive.horse.AbstractChestedHorseEntity;
import net.minecraft.entity.passive.horse.AbstractHorseEntity;
import net.minecraft.entity.projectile.ProjectileEntity;
import net.minecraftforge.common.util.FakePlayer;
import org.bukkit.craftbukkit.v.CraftServer;
import org.bukkit.craftbukkit.v.entity.CraftAgeable;
import org.bukkit.craftbukkit.v.entity.CraftEntity;
@ -38,6 +40,13 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
@Mixin(value = CraftEntity.class, remap = false)
public class CraftEntityMixin {
@Inject(method = "getEntity", cancellable = true, at = @At("HEAD"))
private static void arclight$fakePlayer(CraftServer server, Entity entity, CallbackInfoReturnable<CraftEntity> cir) {
if (entity instanceof FakePlayer) {
cir.setReturnValue(new ArclightFakePlayer(server, (FakePlayer) entity));
}
}
@Inject(method = "getEntity", cancellable = true, at = @At(value = "NEW", target = "java/lang/AssertionError"))
private static void arclight$modEntity(CraftServer server, Entity entity, CallbackInfoReturnable<CraftEntity> cir) {
if (entity instanceof LivingEntity) {

View File

@ -0,0 +1,21 @@
package io.izzel.arclight.common.mod.server.entity;
import net.minecraft.entity.player.ServerPlayerEntity;
import org.bukkit.craftbukkit.v.CraftServer;
import org.bukkit.craftbukkit.v.entity.CraftPlayer;
public class ArclightFakePlayer extends CraftPlayer {
public ArclightFakePlayer(CraftServer server, ServerPlayerEntity entity) {
super(server, entity);
}
@Override
public boolean isOp() {
return this.getHandle().getGameProfile().getId() != null && super.isOp();
}
@Override
public void setOp(boolean value) {
}
}