Update upstream
This commit is contained in:
parent
94e5cd9ded
commit
3727b74511
|
@ -16,4 +16,8 @@ public interface NetworkManagerBridge {
|
||||||
void bridge$setSpoofedProfile(Property[] spoofedProfile);
|
void bridge$setSpoofedProfile(Property[] spoofedProfile);
|
||||||
|
|
||||||
SocketAddress bridge$getRawAddress();
|
SocketAddress bridge$getRawAddress();
|
||||||
|
|
||||||
|
String bridge$getHostname();
|
||||||
|
|
||||||
|
void bridge$setHostname(String hostname);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,8 +0,0 @@
|
||||||
package io.izzel.arclight.common.bridge.core.network.login;
|
|
||||||
|
|
||||||
public interface ServerLoginNetHandlerBridge {
|
|
||||||
|
|
||||||
String bridge$getHostname();
|
|
||||||
|
|
||||||
void bridge$setHostname(String hostname);
|
|
||||||
}
|
|
|
@ -16,6 +16,7 @@ public class ConnectionMixin implements NetworkManagerBridge {
|
||||||
@Shadow public Channel channel;
|
@Shadow public Channel channel;
|
||||||
public java.util.UUID spoofedUUID;
|
public java.util.UUID spoofedUUID;
|
||||||
public com.mojang.authlib.properties.Property[] spoofedProfile;
|
public com.mojang.authlib.properties.Property[] spoofedProfile;
|
||||||
|
public String hostname;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public UUID bridge$getSpoofedUUID() {
|
public UUID bridge$getSpoofedUUID() {
|
||||||
|
@ -45,4 +46,14 @@ public class ConnectionMixin implements NetworkManagerBridge {
|
||||||
public SocketAddress bridge$getRawAddress() {
|
public SocketAddress bridge$getRawAddress() {
|
||||||
return getRawAddress();
|
return getRawAddress();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String bridge$getHostname() {
|
||||||
|
return hostname;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void bridge$setHostname(String hostname) {
|
||||||
|
this.hostname = hostname;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,7 +4,6 @@ import com.google.gson.Gson;
|
||||||
import com.mojang.authlib.properties.Property;
|
import com.mojang.authlib.properties.Property;
|
||||||
import com.mojang.util.UUIDTypeAdapter;
|
import com.mojang.util.UUIDTypeAdapter;
|
||||||
import io.izzel.arclight.common.bridge.core.network.NetworkManagerBridge;
|
import io.izzel.arclight.common.bridge.core.network.NetworkManagerBridge;
|
||||||
import io.izzel.arclight.common.bridge.core.network.login.ServerLoginNetHandlerBridge;
|
|
||||||
import net.minecraft.SharedConstants;
|
import net.minecraft.SharedConstants;
|
||||||
import net.minecraft.network.Connection;
|
import net.minecraft.network.Connection;
|
||||||
import net.minecraft.network.ConnectionProtocol;
|
import net.minecraft.network.ConnectionProtocol;
|
||||||
|
@ -49,6 +48,7 @@ public class ServerHandshakeNetHandlerMixin {
|
||||||
@Overwrite
|
@Overwrite
|
||||||
public void handleIntention(ClientIntentionPacket packetIn) {
|
public void handleIntention(ClientIntentionPacket packetIn) {
|
||||||
if (!ServerLifecycleHooks.handleServerLogin(packetIn, this.connection)) return;
|
if (!ServerLifecycleHooks.handleServerLogin(packetIn, this.connection)) return;
|
||||||
|
((NetworkManagerBridge) this.connection).bridge$setHostname(packetIn.hostName + ":" + packetIn.port);
|
||||||
switch (packetIn.getIntention()) {
|
switch (packetIn.getIntention()) {
|
||||||
case LOGIN: {
|
case LOGIN: {
|
||||||
this.connection.setProtocol(ConnectionProtocol.LOGIN);
|
this.connection.setProtocol(ConnectionProtocol.LOGIN);
|
||||||
|
@ -108,8 +108,6 @@ public class ServerHandshakeNetHandlerMixin {
|
||||||
((NetworkManagerBridge) this.connection).bridge$setSpoofedProfile(gson.fromJson(split[3], Property[].class));
|
((NetworkManagerBridge) this.connection).bridge$setSpoofedProfile(gson.fromJson(split[3], Property[].class));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
((ServerLoginNetHandlerBridge) this.connection.getPacketListener()).bridge$setHostname(packetIn.hostName + ":" + packetIn.port);
|
|
||||||
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,7 +3,6 @@ package io.izzel.arclight.common.mixin.core.network;
|
||||||
import com.mojang.authlib.GameProfile;
|
import com.mojang.authlib.GameProfile;
|
||||||
import com.mojang.authlib.properties.Property;
|
import com.mojang.authlib.properties.Property;
|
||||||
import io.izzel.arclight.common.bridge.core.network.NetworkManagerBridge;
|
import io.izzel.arclight.common.bridge.core.network.NetworkManagerBridge;
|
||||||
import io.izzel.arclight.common.bridge.core.network.login.ServerLoginNetHandlerBridge;
|
|
||||||
import io.izzel.arclight.common.bridge.core.server.MinecraftServerBridge;
|
import io.izzel.arclight.common.bridge.core.server.MinecraftServerBridge;
|
||||||
import io.izzel.arclight.common.bridge.core.server.management.PlayerListBridge;
|
import io.izzel.arclight.common.bridge.core.server.management.PlayerListBridge;
|
||||||
import net.minecraft.DefaultUncaughtExceptionHandler;
|
import net.minecraft.DefaultUncaughtExceptionHandler;
|
||||||
|
@ -51,7 +50,7 @@ import java.util.concurrent.atomic.AtomicInteger;
|
||||||
import static net.minecraft.server.network.ServerLoginPacketListenerImpl.isValidUsername;
|
import static net.minecraft.server.network.ServerLoginPacketListenerImpl.isValidUsername;
|
||||||
|
|
||||||
@Mixin(ServerLoginPacketListenerImpl.class)
|
@Mixin(ServerLoginPacketListenerImpl.class)
|
||||||
public abstract class ServerLoginNetHandlerMixin implements ServerLoginNetHandlerBridge {
|
public abstract class ServerLoginNetHandlerMixin {
|
||||||
|
|
||||||
// @formatter:off
|
// @formatter:off
|
||||||
@Shadow private ServerLoginPacketListenerImpl.State state;
|
@Shadow private ServerLoginPacketListenerImpl.State state;
|
||||||
|
@ -69,18 +68,6 @@ public abstract class ServerLoginNetHandlerMixin implements ServerLoginNetHandle
|
||||||
@Shadow @Nullable private static ProfilePublicKey validatePublicKey(@org.jetbrains.annotations.Nullable ProfilePublicKey.Data p_240244_, UUID p_240245_, SignatureValidator p_240246_, boolean p_240247_) throws ProfilePublicKey.ValidationException { return null; }
|
@Shadow @Nullable private static ProfilePublicKey validatePublicKey(@org.jetbrains.annotations.Nullable ProfilePublicKey.Data p_240244_, UUID p_240245_, SignatureValidator p_240246_, boolean p_240247_) throws ProfilePublicKey.ValidationException { return null; }
|
||||||
// @formatter:on
|
// @formatter:on
|
||||||
|
|
||||||
public String hostname;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String bridge$getHostname() {
|
|
||||||
return hostname;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void bridge$setHostname(String hostname) {
|
|
||||||
this.hostname = hostname;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void disconnect(final String s) {
|
public void disconnect(final String s) {
|
||||||
this.disconnect(Component.literal(s));
|
this.disconnect(Component.literal(s));
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,7 +7,6 @@ import io.izzel.arclight.common.bridge.core.entity.EntityBridge;
|
||||||
import io.izzel.arclight.common.bridge.core.entity.InternalEntityBridge;
|
import io.izzel.arclight.common.bridge.core.entity.InternalEntityBridge;
|
||||||
import io.izzel.arclight.common.bridge.core.entity.player.ServerPlayerEntityBridge;
|
import io.izzel.arclight.common.bridge.core.entity.player.ServerPlayerEntityBridge;
|
||||||
import io.izzel.arclight.common.bridge.core.network.NetworkManagerBridge;
|
import io.izzel.arclight.common.bridge.core.network.NetworkManagerBridge;
|
||||||
import io.izzel.arclight.common.bridge.core.network.login.ServerLoginNetHandlerBridge;
|
|
||||||
import io.izzel.arclight.common.bridge.core.network.play.ServerPlayNetHandlerBridge;
|
import io.izzel.arclight.common.bridge.core.network.play.ServerPlayNetHandlerBridge;
|
||||||
import io.izzel.arclight.common.bridge.core.server.management.PlayerListBridge;
|
import io.izzel.arclight.common.bridge.core.server.management.PlayerListBridge;
|
||||||
import io.izzel.arclight.common.bridge.core.world.WorldBridge;
|
import io.izzel.arclight.common.bridge.core.world.WorldBridge;
|
||||||
|
@ -225,7 +224,7 @@ public abstract class PlayerListMixin implements PlayerListBridge {
|
||||||
ServerPlayer entity = new ServerPlayer(this.server, this.server.getLevel(Level.OVERWORLD), gameProfile, profilePublicKey);
|
ServerPlayer entity = new ServerPlayer(this.server, this.server.getLevel(Level.OVERWORLD), gameProfile, profilePublicKey);
|
||||||
Player player = ((ServerPlayerEntityBridge) entity).bridge$getBukkitEntity();
|
Player player = ((ServerPlayerEntityBridge) entity).bridge$getBukkitEntity();
|
||||||
|
|
||||||
String hostname = handler == null ? "" : ((ServerLoginNetHandlerBridge) handler).bridge$getHostname();
|
String hostname = handler == null ? "" : ((NetworkManagerBridge) handler.connection).bridge$getHostname();
|
||||||
InetAddress realAddress = handler == null ? ((InetSocketAddress) socketAddress).getAddress() : ((InetSocketAddress) ((NetworkManagerBridge) handler.connection).bridge$getRawAddress()).getAddress();
|
InetAddress realAddress = handler == null ? ((InetSocketAddress) socketAddress).getAddress() : ((InetSocketAddress) ((NetworkManagerBridge) handler.connection).bridge$getRawAddress()).getAddress();
|
||||||
|
|
||||||
PlayerLoginEvent event = new PlayerLoginEvent(player, hostname, ((InetSocketAddress) socketAddress).getAddress(), realAddress);
|
PlayerLoginEvent event = new PlayerLoginEvent(player, hostname, ((InetSocketAddress) socketAddress).getAddress(), realAddress);
|
||||||
|
|
|
@ -66,6 +66,7 @@ import net.minecraft.world.level.GameType;
|
||||||
import net.minecraft.world.level.Level;
|
import net.minecraft.world.level.Level;
|
||||||
import net.minecraft.world.level.biome.BiomeManager;
|
import net.minecraft.world.level.biome.BiomeManager;
|
||||||
import net.minecraft.world.level.block.NetherPortalBlock;
|
import net.minecraft.world.level.block.NetherPortalBlock;
|
||||||
|
import net.minecraft.world.level.block.state.BlockState;
|
||||||
import net.minecraft.world.level.border.WorldBorder;
|
import net.minecraft.world.level.border.WorldBorder;
|
||||||
import net.minecraft.world.level.dimension.LevelStem;
|
import net.minecraft.world.level.dimension.LevelStem;
|
||||||
import net.minecraft.world.level.gameevent.GameEvent;
|
import net.minecraft.world.level.gameevent.GameEvent;
|
||||||
|
@ -93,6 +94,7 @@ import org.bukkit.craftbukkit.v.event.CraftEventFactory;
|
||||||
import org.bukkit.craftbukkit.v.event.CraftPortalEvent;
|
import org.bukkit.craftbukkit.v.event.CraftPortalEvent;
|
||||||
import org.bukkit.craftbukkit.v.inventory.CraftItemStack;
|
import org.bukkit.craftbukkit.v.inventory.CraftItemStack;
|
||||||
import org.bukkit.craftbukkit.v.scoreboard.CraftScoreboardManager;
|
import org.bukkit.craftbukkit.v.scoreboard.CraftScoreboardManager;
|
||||||
|
import org.bukkit.craftbukkit.v.util.BlockStateListPopulator;
|
||||||
import org.bukkit.craftbukkit.v.util.CraftChatMessage;
|
import org.bukkit.craftbukkit.v.util.CraftChatMessage;
|
||||||
import org.bukkit.event.entity.EntityPotionEffectEvent;
|
import org.bukkit.event.entity.EntityPotionEffectEvent;
|
||||||
import org.bukkit.event.entity.PlayerDeathEvent;
|
import org.bukkit.event.entity.PlayerDeathEvent;
|
||||||
|
@ -102,6 +104,7 @@ import org.bukkit.event.player.PlayerChangedWorldEvent;
|
||||||
import org.bukkit.event.player.PlayerLocaleChangeEvent;
|
import org.bukkit.event.player.PlayerLocaleChangeEvent;
|
||||||
import org.bukkit.event.player.PlayerPortalEvent;
|
import org.bukkit.event.player.PlayerPortalEvent;
|
||||||
import org.bukkit.event.player.PlayerTeleportEvent;
|
import org.bukkit.event.player.PlayerTeleportEvent;
|
||||||
|
import org.bukkit.event.world.PortalCreateEvent;
|
||||||
import org.bukkit.inventory.MainHand;
|
import org.bukkit.inventory.MainHand;
|
||||||
import org.spongepowered.asm.mixin.Final;
|
import org.spongepowered.asm.mixin.Final;
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
|
@ -595,6 +598,29 @@ public abstract class ServerPlayerMixin extends PlayerMixin implements ServerPla
|
||||||
return optional1;
|
return optional1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private transient BlockStateListPopulator arclight$populator;
|
||||||
|
|
||||||
|
@Inject(method = "createEndPlatform", at = @At("HEAD"))
|
||||||
|
private void arclight$playerCreatePortalBegin(ServerLevel level, BlockPos pos, CallbackInfo ci) {
|
||||||
|
arclight$populator = new BlockStateListPopulator(level);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Redirect(method = "createEndPlatform", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/level/ServerLevel;setBlockAndUpdate(Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/block/state/BlockState;)Z"))
|
||||||
|
private boolean arclight$playerCreatePortal(ServerLevel instance, BlockPos pos, BlockState blockState) {
|
||||||
|
return arclight$populator.setBlock(pos, blockState, 3);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Inject(method = "createEndPlatform", at = @At("RETURN"))
|
||||||
|
private void arclight$playerCreatePortalEnd(ServerLevel level, BlockPos pos, CallbackInfo ci) {
|
||||||
|
var blockList = arclight$populator;
|
||||||
|
arclight$populator = null;
|
||||||
|
var portalEvent = new PortalCreateEvent((List<org.bukkit.block.BlockState>) (List) blockList.getList(), ((WorldBridge) level).bridge$getWorld(), this.getBukkitEntity(), PortalCreateEvent.CreateReason.END_PLATFORM);
|
||||||
|
Bukkit.getPluginManager().callEvent(portalEvent);
|
||||||
|
if (!portalEvent.isCancelled()) {
|
||||||
|
blockList.updateList();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private Either<Player.BedSleepingProblem, Unit> getBedResult(BlockPos blockposition, Direction enumdirection) {
|
private Either<Player.BedSleepingProblem, Unit> getBedResult(BlockPos blockposition, Direction enumdirection) {
|
||||||
if (!this.isSleeping() && this.isAlive()) {
|
if (!this.isSleeping() && this.isAlive()) {
|
||||||
if (!this.level.dimensionType().natural() || !this.level.dimensionType().bedWorks()) {
|
if (!this.level.dimensionType().natural() || !this.level.dimensionType().bedWorks()) {
|
||||||
|
|
|
@ -0,0 +1,31 @@
|
||||||
|
package io.izzel.arclight.common.mixin.core.world.entity.vehicle;
|
||||||
|
|
||||||
|
import io.izzel.arclight.mixin.Eject;
|
||||||
|
import net.minecraft.world.entity.Entity;
|
||||||
|
import net.minecraft.world.entity.vehicle.MinecartTNT;
|
||||||
|
import net.minecraft.world.level.Explosion;
|
||||||
|
import net.minecraft.world.level.Level;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.event.entity.ExplosionPrimeEvent;
|
||||||
|
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.callback.CallbackInfo;
|
||||||
|
|
||||||
|
@Mixin(MinecartTNT.class)
|
||||||
|
public abstract class MinecartTNTMixin extends AbstractMinecartMixin {
|
||||||
|
|
||||||
|
@Shadow private int fuse;
|
||||||
|
|
||||||
|
@Eject(method = "explode", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/Level;explode(Lnet/minecraft/world/entity/Entity;DDDFLnet/minecraft/world/level/Explosion$BlockInteraction;)Lnet/minecraft/world/level/Explosion;"))
|
||||||
|
private Explosion arclight$explode(Level level, Entity entity, double x, double y, double z, float radius, Explosion.BlockInteraction interaction, CallbackInfo ci) {
|
||||||
|
var event = new ExplosionPrimeEvent(this.getBukkitEntity(), radius, false);
|
||||||
|
Bukkit.getPluginManager().callEvent(event);
|
||||||
|
if (event.isCancelled()) {
|
||||||
|
this.fuse = -1;
|
||||||
|
ci.cancel();
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return level.explode((MinecartTNT) (Object) this, x, y, z, event.getRadius(), event.getFire(), interaction);
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,6 +1,7 @@
|
||||||
package io.izzel.arclight.common.mod.util;
|
package io.izzel.arclight.common.mod.util;
|
||||||
|
|
||||||
import io.izzel.arclight.common.bridge.core.entity.player.ServerPlayerEntityBridge;
|
import io.izzel.arclight.common.bridge.core.entity.player.ServerPlayerEntityBridge;
|
||||||
|
import io.izzel.arclight.common.bridge.core.network.NetworkManagerBridge;
|
||||||
import net.minecraft.network.Connection;
|
import net.minecraft.network.Connection;
|
||||||
import net.minecraft.server.MinecraftServer;
|
import net.minecraft.server.MinecraftServer;
|
||||||
import net.minecraft.server.level.ServerPlayer;
|
import net.minecraft.server.level.ServerPlayer;
|
||||||
|
@ -22,7 +23,7 @@ public class ArclightPingEvent extends ServerListPingEvent {
|
||||||
private final Object[] players;
|
private final Object[] players;
|
||||||
|
|
||||||
public ArclightPingEvent(Connection networkManager, MinecraftServer server) {
|
public ArclightPingEvent(Connection networkManager, MinecraftServer server) {
|
||||||
super(((InetSocketAddress) networkManager.getRemoteAddress()).getAddress(), server.getMotd(), server.previewsChat(), server.getPlayerList().getMaxPlayers());
|
super(((NetworkManagerBridge) networkManager).bridge$getHostname(), ((InetSocketAddress) networkManager.getRemoteAddress()).getAddress(), server.getMotd(), server.previewsChat(), server.getPlayerList().getMaxPlayers());
|
||||||
this.icon = ((CraftServer) Bukkit.getServer()).getServerIcon();
|
this.icon = ((CraftServer) Bukkit.getServer()).getServerIcon();
|
||||||
this.players = server.getPlayerList().players.toArray();
|
this.players = server.getPlayerList().players.toArray();
|
||||||
}
|
}
|
||||||
|
|
|
@ -238,6 +238,7 @@
|
||||||
"world.entity.vehicle.BoatMixin",
|
"world.entity.vehicle.BoatMixin",
|
||||||
"world.entity.vehicle.ChestBoatMixin",
|
"world.entity.vehicle.ChestBoatMixin",
|
||||||
"world.entity.vehicle.MinecartCommandBlock_MinecartCommandBaseMixin",
|
"world.entity.vehicle.MinecartCommandBlock_MinecartCommandBaseMixin",
|
||||||
|
"world.entity.vehicle.MinecartTNTMixin",
|
||||||
"world.food.FoodDataMixin",
|
"world.food.FoodDataMixin",
|
||||||
"world.gen.WorldGenRegionMixin",
|
"world.gen.WorldGenRegionMixin",
|
||||||
"world.gen.feature.structure.SwampHutPieceMixin",
|
"world.gen.feature.structure.SwampHutPieceMixin",
|
||||||
|
|
Loading…
Reference in New Issue
Block a user