mirror of
https://github.com/FabricMC/fabric.git
synced 2025-03-24 22:11:18 -04:00
1.19.1-rc3
This commit is contained in:
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
api/networking/v1
impl/networking
mixin/networking
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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")
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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");
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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");
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue