Fix mixin conflict with SinytraConnector (#1155)
This commit is contained in:
parent
08ff605a23
commit
67c4e7b8e6
|
@ -73,9 +73,10 @@ import org.spongepowered.asm.mixin.Final;
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
import org.spongepowered.asm.mixin.Overwrite;
|
import org.spongepowered.asm.mixin.Overwrite;
|
||||||
import org.spongepowered.asm.mixin.Shadow;
|
import org.spongepowered.asm.mixin.Shadow;
|
||||||
|
import org.spongepowered.asm.mixin.Unique;
|
||||||
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.Redirect;
|
import org.spongepowered.asm.mixin.injection.ModifyArg;
|
||||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||||
import org.spongepowered.asm.mixin.injection.callback.LocalCapture;
|
import org.spongepowered.asm.mixin.injection.callback.LocalCapture;
|
||||||
|
@ -340,20 +341,29 @@ public abstract class MinecraftServerMixin extends ReentrantBlockableEventLoop<T
|
||||||
BukkitRegistry.registerEnvironments(this.registryAccess().registryOrThrow(Registries.LEVEL_STEM));
|
BukkitRegistry.registerEnvironments(this.registryAccess().registryOrThrow(Registries.LEVEL_STEM));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Redirect(method = "createLevels", at = @At(value = "INVOKE", remap = false, target = "Ljava/util/Map;put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"))
|
@Unique private transient ServerLevel arclight$capturedLevel;
|
||||||
private Object arclight$worldInit(Map<Object, Object> map, Object key, Object value) {
|
|
||||||
Object ret = map.put(key, value);
|
@ModifyArg(method = "createLevels", index = 1, at = @At(value = "INVOKE", remap = false, target = "Ljava/util/Map;put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"))
|
||||||
ServerLevel serverWorld = (ServerLevel) value;
|
private Object arclight$worldInitCapture(Object value) {
|
||||||
if (((CraftServer) Bukkit.getServer()).scoreboardManager == null) {
|
arclight$capturedLevel = (ServerLevel) value;
|
||||||
((CraftServer) Bukkit.getServer()).scoreboardManager = new CraftScoreboardManager((MinecraftServer) (Object) this, serverWorld.getScoreboard());
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Inject(method = "createLevels", at = @At(value = "INVOKE", remap = false, target = "Ljava/util/Map;put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"))
|
||||||
|
private void arclight$worldInit(ChunkProgressListener chunkProgressListener, CallbackInfo ci) {
|
||||||
|
ServerLevel serverWorld = arclight$capturedLevel;
|
||||||
|
arclight$capturedLevel = null;
|
||||||
|
if (serverWorld != null) {
|
||||||
|
if (((CraftServer) Bukkit.getServer()).scoreboardManager == null) {
|
||||||
|
((CraftServer) Bukkit.getServer()).scoreboardManager = new CraftScoreboardManager((MinecraftServer) (Object) this, serverWorld.getScoreboard());
|
||||||
|
}
|
||||||
|
if (((WorldBridge) serverWorld).bridge$getGenerator() != null) {
|
||||||
|
((WorldBridge) serverWorld).bridge$getWorld().getPopulators().addAll(
|
||||||
|
((WorldBridge) serverWorld).bridge$getGenerator().getDefaultPopulators(
|
||||||
|
((WorldBridge) serverWorld).bridge$getWorld()));
|
||||||
|
}
|
||||||
|
Bukkit.getPluginManager().callEvent(new WorldInitEvent(((WorldBridge) serverWorld).bridge$getWorld()));
|
||||||
}
|
}
|
||||||
if (((WorldBridge) serverWorld).bridge$getGenerator() != null) {
|
|
||||||
((WorldBridge) serverWorld).bridge$getWorld().getPopulators().addAll(
|
|
||||||
((WorldBridge) serverWorld).bridge$getGenerator().getDefaultPopulators(
|
|
||||||
((WorldBridge) serverWorld).bridge$getWorld()));
|
|
||||||
}
|
|
||||||
Bukkit.getPluginManager().callEvent(new WorldInitEvent(((WorldBridge) serverWorld).bridge$getWorld()));
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -905,7 +905,7 @@ public abstract class EntityMixin implements InternalEntityBridge, EntityBridge,
|
||||||
entity.moveTo(portalinfo.pos.x, portalinfo.pos.y, portalinfo.pos.z, portalinfo.yRot, entity.getXRot());
|
entity.moveTo(portalinfo.pos.x, portalinfo.pos.y, portalinfo.pos.z, portalinfo.yRot, entity.getXRot());
|
||||||
entity.setDeltaMovement(portalinfo.speed);
|
entity.setDeltaMovement(portalinfo.speed);
|
||||||
world.addDuringTeleport(entity);
|
world.addDuringTeleport(entity);
|
||||||
if (((WorldBridge) world).bridge$getTypeKey() == LevelStem.END) {
|
if (((WorldBridge) world).bridge$getTypeKey() == LevelStem.END && Level.END != null /* fabric dimensions v1 */) {
|
||||||
ArclightCaptures.captureEndPortalEntity((Entity) (Object) this, spawnPortal);
|
ArclightCaptures.captureEndPortalEntity((Entity) (Object) this, spawnPortal);
|
||||||
ServerLevel.makeObsidianPlatform(world);
|
ServerLevel.makeObsidianPlatform(world);
|
||||||
}
|
}
|
||||||
|
|
|
@ -517,7 +517,7 @@ public abstract class LivingEntityMixin extends EntityMixin implements LivingEnt
|
||||||
return false;
|
return false;
|
||||||
} else if (this.level().isClientSide) {
|
} else if (this.level().isClientSide) {
|
||||||
return false;
|
return false;
|
||||||
} else if (this.dead || this.isRemoved() || this.getHealth() <= 0.0F) {
|
} else if (this.dead || this.isRemoved() || this.isDeadOrDying()) {
|
||||||
return false;
|
return false;
|
||||||
} else if (source.is(DamageTypeTags.IS_FIRE) && this.hasEffect(MobEffects.FIRE_RESISTANCE)) {
|
} else if (source.is(DamageTypeTags.IS_FIRE) && this.hasEffect(MobEffects.FIRE_RESISTANCE)) {
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -725,7 +725,7 @@ public abstract class ServerPlayerMixin extends PlayerMixin implements ServerPla
|
||||||
return this.containerCounter;
|
return this.containerCounter;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Redirect(method = "openMenu", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/level/ServerPlayer;closeContainer()V"))
|
@Redirect(method = "openMenu", require = 0, at = @At(value = "INVOKE", target = "Lnet/minecraft/server/level/ServerPlayer;closeContainer()V"))
|
||||||
private void arclight$skipSwitch(ServerPlayer serverPlayer) {
|
private void arclight$skipSwitch(ServerPlayer serverPlayer) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user