1.19.1-rc3

This commit is contained in:
modmuss50 2022-07-26 20:53:20 +01:00
parent aab4069d66
commit 8e190802a5
12 changed files with 134 additions and 37 deletions
deprecated/fabric-networking-v0/src
client/java/net/fabricmc/fabric/impl/networking
main/java/net/fabricmc/fabric/impl/networking
fabric-message-api-v1/src
main/java/net/fabricmc/fabric
testmod/java/net/fabricmc/fabric/test/message
fabric-networking-api-v1/src
client/java/net/fabricmc/fabric/impl/networking/client
main/java/net/fabricmc/fabric
gradle.properties

View file

@ -44,7 +44,7 @@ public class ClientSidePacketRegistryImpl implements ClientSidePacketRegistry, P
@Override
public void sendToServer(Packet<?> packet, GenericFutureListener<? extends Future<? super Void>> completionListener) {
if (MinecraftClient.getInstance().getNetworkHandler() != null) {
MinecraftClient.getInstance().getNetworkHandler().getConnection().send(packet, completionListener);
MinecraftClient.getInstance().getNetworkHandler().getConnection().send(packet, GenericFutureListenerHolder.create(completionListener));
return;
}

View file

@ -49,7 +49,7 @@ public class ServerSidePacketRegistryImpl implements ServerSidePacketRegistry, P
@Override
public void sendToPlayer(PlayerEntity player, Packet<?> packet, GenericFutureListener<? extends Future<? super Void>> completionListener) {
if (player instanceof ServerPlayerEntity) {
((ServerPlayerEntity) player).networkHandler.sendPacket(packet, completionListener);
((ServerPlayerEntity) player).networkHandler.sendPacket(packet, GenericFutureListenerHolder.create(completionListener));
return;
}

View file

@ -20,7 +20,6 @@ import net.minecraft.network.message.MessageType;
import net.minecraft.network.message.SignedMessage;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.command.ServerCommandSource;
import net.minecraft.server.filter.FilteredMessage;
import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.text.Text;
@ -147,7 +146,7 @@ public final class ServerMessageEvents {
* @param params the {@link MessageType.Parameters}
* @return {@code true} if the message should be broadcast, otherwise {@code false}
*/
boolean allowChatMessage(FilteredMessage<SignedMessage> message, ServerPlayerEntity sender, MessageType.Parameters params);
boolean allowChatMessage(SignedMessage message, ServerPlayerEntity sender, MessageType.Parameters params);
}
@FunctionalInterface
@ -183,7 +182,7 @@ public final class ServerMessageEvents {
* @param params the {@link MessageType.Parameters}
* @return {@code true} if the message should be broadcast, otherwise {@code false}
*/
boolean allowCommandMessage(FilteredMessage<SignedMessage> message, ServerCommandSource source, MessageType.Parameters params);
boolean allowCommandMessage(SignedMessage message, ServerCommandSource source, MessageType.Parameters params);
}
@FunctionalInterface
@ -201,7 +200,7 @@ public final class ServerMessageEvents {
* @param sender the player that sent the message
* @param params the {@link MessageType.Parameters}
*/
void onChatMessage(FilteredMessage<SignedMessage> message, ServerPlayerEntity sender, MessageType.Parameters params);
void onChatMessage(SignedMessage message, ServerPlayerEntity sender, MessageType.Parameters params);
}
@FunctionalInterface
@ -232,6 +231,6 @@ public final class ServerMessageEvents {
* @param source the command source that sent the message
* @param params the {@link MessageType.Parameters}
*/
void onCommandMessage(FilteredMessage<SignedMessage> message, ServerCommandSource source, MessageType.Parameters params);
void onCommandMessage(SignedMessage message, ServerCommandSource source, MessageType.Parameters params);
}
}

View file

@ -30,7 +30,6 @@ import net.minecraft.network.message.SignedMessage;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.PlayerManager;
import net.minecraft.server.command.ServerCommandSource;
import net.minecraft.server.filter.FilteredMessage;
import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.text.Text;
@ -42,8 +41,8 @@ public class PlayerManagerMixin {
@Final
private MinecraftServer server;
@Inject(method = "broadcast(Lnet/minecraft/server/filter/FilteredMessage;Lnet/minecraft/server/network/ServerPlayerEntity;Lnet/minecraft/network/message/MessageType$Parameters;)V", at = @At("HEAD"), cancellable = true)
private void onSendChatMessage(FilteredMessage<SignedMessage> message, ServerPlayerEntity sender, MessageType.Parameters params, CallbackInfo ci) {
@Inject(method = "broadcast(Lnet/minecraft/network/message/SignedMessage;Lnet/minecraft/server/network/ServerPlayerEntity;Lnet/minecraft/network/message/MessageType$Parameters;)V", at = @At("HEAD"), cancellable = true)
private void onSendChatMessage(SignedMessage message, ServerPlayerEntity sender, MessageType.Parameters params, CallbackInfo ci) {
if (!ServerMessageEvents.ALLOW_CHAT_MESSAGE.invoker().allowChatMessage(message, sender, params)) {
ci.cancel();
return;
@ -62,8 +61,8 @@ public class PlayerManagerMixin {
ServerMessageEvents.GAME_MESSAGE.invoker().onGameMessage(this.server, message, overlay);
}
@Inject(method = "broadcast(Lnet/minecraft/server/filter/FilteredMessage;Lnet/minecraft/server/command/ServerCommandSource;Lnet/minecraft/network/message/MessageType$Parameters;)V", at = @At("HEAD"), cancellable = true)
private void onSendCommandMessage(FilteredMessage<SignedMessage> message, ServerCommandSource source, MessageType.Parameters params, CallbackInfo ci) {
@Inject(method = "broadcast(Lnet/minecraft/network/message/SignedMessage;Lnet/minecraft/server/command/ServerCommandSource;Lnet/minecraft/network/message/MessageType$Parameters;)V", at = @At("HEAD"), cancellable = true)
private void onSendCommandMessage(SignedMessage message, ServerCommandSource source, MessageType.Parameters params, CallbackInfo ci) {
if (!ServerMessageEvents.ALLOW_COMMAND_MESSAGE.invoker().allowCommandMessage(message, source, params)) {
ci.cancel();
return;

View file

@ -95,7 +95,7 @@ public class ChatTest implements ModInitializer {
// ServerMessageEvents blocking
ServerMessageEvents.ALLOW_CHAT_MESSAGE.register(
(message, sender, params) -> !message.raw().getContent().getString().contains("sadtater")
(message, sender, params) -> !message.getContent().getString().contains("sadtater")
);
ServerMessageEvents.ALLOW_GAME_MESSAGE.register((server, message, overlay) -> {
if (message.getContent() instanceof TranslatableTextContent translatable) {
@ -105,7 +105,7 @@ public class ChatTest implements ModInitializer {
return true;
});
ServerMessageEvents.ALLOW_COMMAND_MESSAGE.register(
(message, source, params) -> !message.raw().getContent().getString().contains("sadtater")
(message, source, params) -> !message.getContent().getString().contains("sadtater")
);
}
}

View file

@ -39,6 +39,7 @@ import net.fabricmc.fabric.api.client.networking.v1.ClientLoginNetworking;
import net.fabricmc.fabric.api.networking.v1.FutureListeners;
import net.fabricmc.fabric.api.networking.v1.PacketByteBufs;
import net.fabricmc.fabric.impl.networking.AbstractNetworkAddon;
import net.fabricmc.fabric.impl.networking.GenericFutureListenerHolder;
@Environment(EnvType.CLIENT)
public final class ClientLoginNetworkAddon extends AbstractNetworkAddon<ClientLoginNetworking.LoginQueryRequestHandler> {
@ -91,7 +92,7 @@ public final class ClientLoginNetworkAddon extends AbstractNetworkAddon<ClientLo
listener = FutureListeners.union(listener, each);
}
this.handler.getConnection().send(packet, listener);
this.handler.getConnection().send(packet, GenericFutureListenerHolder.create(listener));
});
} catch (Throwable ex) {
this.logger.error("Encountered exception while handling in channel with name \"{}\"", channelName, ex);

View file

@ -23,6 +23,7 @@ import io.netty.util.concurrent.Future;
import io.netty.util.concurrent.GenericFutureListener;
import org.jetbrains.annotations.Nullable;
import net.minecraft.class_7648;
import net.minecraft.network.Packet;
import net.minecraft.network.PacketByteBuf;
import net.minecraft.util.Identifier;
@ -55,6 +56,14 @@ public interface PacketSender {
*/
void sendPacket(Packet<?> packet, @Nullable GenericFutureListener<? extends Future<? super Void>> callback);
/**
* Sends a packet.
*
* @param packet the packet
* @param callback an optional callback to execute after the packet is sent, may be {@code null}. The callback may also accept a {@link ChannelFutureListener}.
*/
void sendPacket(Packet<?> packet, @Nullable class_7648 callback);
/**
* Sends a packet to a channel.
*
@ -76,7 +85,7 @@ public interface PacketSender {
* @param callback an optional callback to execute after the packet is sent, may be {@code null}
*/
// the generic future listener can accept ChannelFutureListener
default void sendPacket(Identifier channel, PacketByteBuf buf, @Nullable GenericFutureListener<? extends Future<? super Void>> callback) {
default void sendPacket(Identifier channel, PacketByteBuf buf, @Nullable class_7648 callback) {
Objects.requireNonNull(channel, "Channel cannot be null");
Objects.requireNonNull(buf, "Payload cannot be null");

View file

@ -30,6 +30,7 @@ import io.netty.util.concurrent.Future;
import io.netty.util.concurrent.GenericFutureListener;
import org.jetbrains.annotations.Nullable;
import net.minecraft.class_7648;
import net.minecraft.network.ClientConnection;
import net.minecraft.network.Packet;
import net.minecraft.network.PacketByteBuf;
@ -176,7 +177,12 @@ public abstract class AbstractChanneledNetworkAddon<H> extends AbstractNetworkAd
}
@Override
public void sendPacket(Packet<?> packet, GenericFutureListener<? extends Future<? super Void>> callback) {
public void sendPacket(Packet<?> packet, @Nullable GenericFutureListener<? extends Future<? super Void>> callback) {
sendPacket(packet, GenericFutureListenerHolder.create(callback));
}
@Override
public void sendPacket(Packet<?> packet, class_7648 callback) {
Objects.requireNonNull(packet, "Packet cannot be null");
this.connection.send(packet, callback);

View file

@ -0,0 +1,63 @@
/*
* Copyright (c) 2016, 2017, 2018, 2019 FabricMC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package net.fabricmc.fabric.impl.networking;
import java.util.Objects;
import io.netty.util.concurrent.Future;
import io.netty.util.concurrent.GenericFutureListener;
import org.jetbrains.annotations.Nullable;
import net.minecraft.class_7648;
import net.minecraft.network.ClientConnection;
import net.minecraft.network.Packet;
/**
* We still need to support {@link GenericFutureListener} so we use this disguise impl {@link class_7648}
* to get our {@link GenericFutureListener} to into {@link ClientConnection}
*/
public final class GenericFutureListenerHolder implements class_7648 {
private final GenericFutureListener<? extends Future<? super Void>> delegate;
private GenericFutureListenerHolder(GenericFutureListener<? extends Future<? super Void>> delegate) {
this.delegate = Objects.requireNonNull(delegate);
}
@Nullable
public static GenericFutureListenerHolder create(@Nullable GenericFutureListener<? extends Future<? super Void>> delegate) {
if (delegate == null) {
return null;
}
return new GenericFutureListenerHolder(delegate);
}
public GenericFutureListener<? extends Future<? super Void>> getDelegate() {
return delegate;
}
@Override
public void method_45083() {
throw new AssertionError("Should not be called");
}
@Nullable
@Override
public Packet<?> method_45086() {
throw new AssertionError("Should not be called");
}
}

View file

@ -29,6 +29,7 @@ import java.util.concurrent.atomic.AtomicReference;
import io.netty.util.concurrent.GenericFutureListener;
import org.jetbrains.annotations.Nullable;
import net.minecraft.class_7648;
import net.minecraft.network.ClientConnection;
import net.minecraft.network.Packet;
import net.minecraft.network.PacketByteBuf;
@ -44,6 +45,7 @@ import net.fabricmc.fabric.api.networking.v1.PacketSender;
import net.fabricmc.fabric.api.networking.v1.ServerLoginConnectionEvents;
import net.fabricmc.fabric.api.networking.v1.ServerLoginNetworking;
import net.fabricmc.fabric.impl.networking.AbstractNetworkAddon;
import net.fabricmc.fabric.impl.networking.GenericFutureListenerHolder;
import net.fabricmc.fabric.mixin.networking.accessor.LoginQueryResponseC2SPacketAccessor;
import net.fabricmc.fabric.mixin.networking.accessor.ServerLoginNetworkHandlerAccessor;
@ -113,8 +115,8 @@ public final class ServerLoginNetworkAddon extends AbstractNetworkAddon<ServerLo
private void sendCompressionPacket() {
// Compression is not needed for local transport
if (this.server.getNetworkCompressionThreshold() >= 0 && !this.connection.isLocal()) {
this.connection.send(new LoginCompressionS2CPacket(this.server.getNetworkCompressionThreshold()), (channelFuture) ->
this.connection.setCompressionThreshold(this.server.getNetworkCompressionThreshold(), true)
this.connection.send(new LoginCompressionS2CPacket(this.server.getNetworkCompressionThreshold()),
class_7648.method_45084(() -> connection.setCompressionThreshold(server.getNetworkCompressionThreshold(), true))
);
}
}
@ -174,7 +176,12 @@ public final class ServerLoginNetworkAddon extends AbstractNetworkAddon<ServerLo
}
@Override
public void sendPacket(Packet<?> packet, GenericFutureListener<? extends io.netty.util.concurrent.Future<? super Void>> callback) {
public void sendPacket(Packet<?> packet, @Nullable GenericFutureListener<? extends io.netty.util.concurrent.Future<? super Void>> callback) {
sendPacket(packet, GenericFutureListenerHolder.create(callback));
}
@Override
public void sendPacket(Packet<?> packet, class_7648 callback) {
Objects.requireNonNull(packet, "Packet cannot be null");
this.connection.send(packet, callback);

View file

@ -20,9 +20,10 @@ import java.util.Collection;
import java.util.Collections;
import java.util.concurrent.ConcurrentHashMap;
import io.netty.channel.ChannelFuture;
import io.netty.channel.ChannelFutureListener;
import io.netty.channel.ChannelHandlerContext;
import io.netty.util.concurrent.Future;
import io.netty.util.concurrent.GenericFutureListener;
import org.jetbrains.annotations.Nullable;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.Unique;
@ -30,9 +31,12 @@ import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.Redirect;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.spongepowered.asm.mixin.injection.callback.LocalCapture;
import net.minecraft.class_7648;
import net.minecraft.network.ClientConnection;
import net.minecraft.network.NetworkSide;
import net.minecraft.network.NetworkState;
import net.minecraft.network.Packet;
import net.minecraft.network.listener.PacketListener;
import net.minecraft.text.Text;
@ -40,6 +44,7 @@ import net.minecraft.util.Identifier;
import net.fabricmc.fabric.impl.networking.ChannelInfoHolder;
import net.fabricmc.fabric.impl.networking.DisconnectPacketSource;
import net.fabricmc.fabric.impl.networking.GenericFutureListenerHolder;
import net.fabricmc.fabric.impl.networking.NetworkHandlerExtensions;
import net.fabricmc.fabric.impl.networking.PacketCallbackListener;
@ -49,10 +54,10 @@ abstract class ClientConnectionMixin implements ChannelInfoHolder {
private PacketListener packetListener;
@Shadow
public abstract void send(Packet<?> packet, GenericFutureListener<? extends Future<? super Void>> callback);
public abstract void disconnect(Text disconnectReason);
@Shadow
public abstract void disconnect(Text disconnectReason);
public abstract void send(Packet<?> packet, @Nullable class_7648 arg);
@Unique
private Collection<Identifier> playChannels;
@ -63,9 +68,8 @@ abstract class ClientConnectionMixin implements ChannelInfoHolder {
}
// Must be fully qualified due to mixin not working in production without it
@SuppressWarnings("UnnecessaryQualifiedMemberReference")
@Redirect(method = "Lnet/minecraft/network/ClientConnection;exceptionCaught(Lio/netty/channel/ChannelHandlerContext;Ljava/lang/Throwable;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/ClientConnection;send(Lnet/minecraft/network/Packet;Lio/netty/util/concurrent/GenericFutureListener;)V"))
private void resendOnExceptionCaught(ClientConnection self, Packet<?> packet, GenericFutureListener<? extends Future<? super Void>> listener, ChannelHandlerContext context, Throwable ex) {
@Redirect(method = "exceptionCaught", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/ClientConnection;send(Lnet/minecraft/network/Packet;Lnet/minecraft/class_7648;)V"))
private void resendOnExceptionCaught(ClientConnection self, Packet<?> packet, class_7648 listener, ChannelHandlerContext context, Throwable ex) {
PacketListener handler = this.packetListener;
Text disconnectMessage = Text.translatable("disconnect.genericReason", "Internal Exception: " + ex);
@ -77,7 +81,7 @@ abstract class ClientConnectionMixin implements ChannelInfoHolder {
}
@Inject(method = "sendImmediately", at = @At(value = "FIELD", target = "Lnet/minecraft/network/ClientConnection;packetsSentCounter:I"))
private void checkPacket(Packet<?> packet, GenericFutureListener<? extends Future<? super Void>> callback, CallbackInfo ci) {
private void checkPacket(Packet<?> packet, class_7648 callback, CallbackInfo ci) {
if (this.packetListener instanceof PacketCallbackListener) {
((PacketCallbackListener) this.packetListener).sent(packet);
}
@ -90,6 +94,15 @@ abstract class ClientConnectionMixin implements ChannelInfoHolder {
}
}
@Inject(method = "sendInternal", at = @At(value = "INVOKE_ASSIGN", target = "Lio/netty/channel/Channel;writeAndFlush(Ljava/lang/Object;)Lio/netty/channel/ChannelFuture;"), locals = LocalCapture.CAPTURE_FAILHARD)
private void sendInternal(Packet<?> packet, @Nullable class_7648 listener, NetworkState packetState, NetworkState currentState, CallbackInfo ci, ChannelFuture channelFuture) {
if (listener instanceof GenericFutureListenerHolder holder) {
channelFuture.addListener(holder.getDelegate());
channelFuture.addListener(ChannelFutureListener.FIRE_EXCEPTION_ON_FAILURE);
ci.cancel();
}
}
@Override
public Collection<Identifier> getPendingChannelsNames() {
return this.playChannels;

View file

@ -1,8 +1,8 @@
org.gradle.jvmargs=-Xmx2560M
org.gradle.parallel=true
version=0.58.2
minecraft_version=1.19.1-rc2
version=0.58.3
minecraft_version=1.19.1-rc3
yarn_version=+build.1
loader_version=0.14.8
@ -16,10 +16,10 @@ fabric-blockrenderlayer-v1-version=1.1.18
fabric-command-api-v1-version=1.2.9
fabric-command-api-v2-version=2.1.5
fabric-commands-v0-version=0.2.26
fabric-containers-v0-version=0.1.29
fabric-containers-v0-version=0.1.30
fabric-content-registries-v0-version=3.2.1
fabric-crash-report-info-v1-version=0.2.3
fabric-data-generation-api-v1-version=5.1.3
fabric-data-generation-api-v1-version=5.1.4
fabric-dimensions-v1-version=2.1.28
fabric-entity-events-v1-version=1.4.16
fabric-events-interaction-v0-version=0.4.26
@ -33,14 +33,14 @@ fabric-keybindings-v0-version=0.2.16
fabric-lifecycle-events-v1-version=2.1.0
fabric-loot-api-v2-version=1.1.1
fabric-loot-tables-v1-version=1.1.4
fabric-message-api-v1-version=4.0.0
fabric-message-api-v1-version=5.0.0
fabric-mining-level-api-v1-version=2.1.11
fabric-models-v0-version=0.3.15
fabric-networking-api-v1-version=1.1.0
fabric-networking-v0-version=0.3.16
fabric-networking-api-v1-version=1.2.0
fabric-networking-v0-version=0.3.17
fabric-object-builder-api-v1-version=4.0.8
fabric-particles-v1-version=1.0.8
fabric-registry-sync-v0-version=0.9.19
fabric-registry-sync-v0-version=0.9.20
fabric-renderer-api-v1-version=1.0.8
fabric-renderer-indigo-version=0.6.10
fabric-renderer-registries-v1-version=3.2.18
@ -51,7 +51,7 @@ fabric-rendering-v1-version=1.10.14
fabric-resource-conditions-api-v1-version=2.0.9
fabric-resource-loader-v0-version=0.5.6
fabric-screen-api-v1-version=1.0.24
fabric-screen-handler-api-v1-version=1.2.8
fabric-screen-handler-api-v1-version=1.2.9
fabric-textures-v0-version=1.0.18
fabric-transfer-api-v1-version=2.0.9
fabric-transitive-access-wideners-v1-version=1.1.1