More work, start new features package

This commit is contained in:
FlorianMichael 2024-12-23 10:20:01 +01:00
parent 61b8228d53
commit c3264442a1
No known key found for this signature in database
GPG Key ID: C2FB87E71C425126
45 changed files with 565 additions and 261 deletions

View File

@ -28,10 +28,10 @@ import com.viaversion.viafabricplus.features.data.EntityDimensionDiff;
import com.viaversion.viafabricplus.features.data.ResourcePackHeaderDiff;
import com.viaversion.viafabricplus.features.data.recipe.Recipes1_11_2;
import com.viaversion.viafabricplus.features.versioned.EnchantmentAttributesEmulation1_20_6;
import com.viaversion.viafabricplus.features.versioned.classic.CPEAdditions;
import com.viaversion.viafabricplus.features2.cpe_extensions.CPEAdditions;
import com.viaversion.viafabricplus.features.versioned.classic.GridItemSelectionScreen;
import com.viaversion.viafabricplus.features.versioned.visual.ArmorHudEmulation1_8;
import com.viaversion.viafabricplus.features.versioned.visual.FootStepParticle1_12_2;
import com.viaversion.viafabricplus.features2.footstep_particle.FootStepParticle1_12_2;
import com.viaversion.viafabricplus.features.versioned.visual.UnicodeFontFix1_12_2;
import com.viaversion.viafabricplus.injection.access.IClientConnection;
import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator;
@ -148,30 +148,6 @@ public class ClientsideFeatures {
// Calls the static block
}
/**
* Calculates the maximum chat length for the selected protocol version in {@link ProtocolTranslator#getTargetVersion()}
*
* @return The maximum chat length
*/
public static int getChatLength() {
if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(LegacyProtocolVersion.c0_28toc0_30)) {
final ClientPlayNetworkHandler handler = MinecraftClient.getInstance().getNetworkHandler();
final ExtensionProtocolMetadataStorage extensionProtocol = ((IClientConnection) handler.getConnection()).viaFabricPlus$getUserConnection().get(ExtensionProtocolMetadataStorage.class);
if (extensionProtocol != null && extensionProtocol.hasServerExtension(ClassicProtocolExtension.LONGER_MESSAGES)) {
return Short.MAX_VALUE * 2;
} else {
return 64 - (MinecraftClient.getInstance().getSession().getUsername().length() + 2);
}
} else if (ProtocolTranslator.getTargetVersion().equals(BedrockProtocolVersion.bedrockLatest)) {
return 512;
} else if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_9_3)) {
return 100;
} else {
return 256;
}
}
/**
* Replaces the default port when parsing a server address if the default port should be replaced
*

View File

@ -21,7 +21,7 @@
package com.viaversion.viafabricplus.features.versioned.classic;
import com.viaversion.viafabricplus.features.data.ItemRegistryDiff;
import com.viaversion.viafabricplus.features2.item.filter_creative_tabs.ItemRegistryDiff;
import com.viaversion.viafabricplus.screen.VFPScreen;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.item.Item;

View File

@ -19,7 +19,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.viaversion.viafabricplus.features.versioned.classic;
package com.viaversion.viafabricplus.features2.cpe_extensions;
import com.viaversion.viaversion.api.connection.UserConnection;
import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator;

View File

@ -19,7 +19,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.viaversion.viafabricplus.features.versioned.visual;
package com.viaversion.viafabricplus.features2.footstep_particle;
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion;
import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator;

View File

@ -19,7 +19,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.viaversion.viafabricplus.features.data;
package com.viaversion.viafabricplus.features2.item.filter_creative_tabs;
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion;
import com.viaversion.viafabricplus.injection.access.IClientConnection;

View File

@ -0,0 +1,49 @@
/*
* This file is part of ViaFabricPlus - https://github.com/ViaVersion/ViaFabricPlus
* Copyright (C) 2021-2024 the original authors
* - FlorianMichael/EnZaXD <florian.michael07@gmail.com>
* - RK_01/RaphiMC
* Copyright (C) 2023-2024 ViaVersion and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.viaversion.viafabricplus.features2.item.negative_items;
import com.viaversion.viafabricplus.util.ItemUtil;
import com.viaversion.viaversion.protocols.v1_10to1_11.Protocol1_10To1_11;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NbtCompound;
public class NegativeItemUtil {
private static final String VV_IDENTIFIER = "VV|" + Protocol1_10To1_11.class.getSimpleName(); // ItemRewriter#nbtTagName
/**
* Returns the actual amount of items in the stack, versions older or equal to 1.10 can have negative stack sizes
* which are not represented by {@link ItemStack#getCount()}.
*
* @param stack The stack to get the count from
* @return The actual amount of items in the stack
*/
public static int getCount(final ItemStack stack) {
final NbtCompound tag = ItemUtil.getTagOrNull(stack);
if (tag != null && tag.contains(VV_IDENTIFIER)) {
return tag.getInt(VV_IDENTIFIER);
} else {
return stack.getCount();
}
}
}

View File

@ -19,7 +19,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.viaversion.viafabricplus.features.versioned;
package com.viaversion.viafabricplus.features2.legacy_chat_signatures;
import com.mojang.authlib.yggdrasil.response.KeyPairResponse;

View File

@ -0,0 +1,60 @@
/*
* This file is part of ViaFabricPlus - https://github.com/ViaVersion/ViaFabricPlus
* Copyright (C) 2021-2024 the original authors
* - FlorianMichael/EnZaXD <florian.michael07@gmail.com>
* - RK_01/RaphiMC
* Copyright (C) 2023-2024 ViaVersion and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.viaversion.viafabricplus.features2.max_chat_length;
import com.viaversion.viafabricplus.injection.access.IClientConnection;
import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator;
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.network.ClientPlayNetworkHandler;
import net.raphimc.viabedrock.api.BedrockProtocolVersion;
import net.raphimc.vialegacy.api.LegacyProtocolVersion;
import net.raphimc.vialegacy.protocol.classic.c0_30cpetoc0_28_30.data.ClassicProtocolExtension;
import net.raphimc.vialegacy.protocol.classic.c0_30cpetoc0_28_30.storage.ExtensionProtocolMetadataStorage;
public class MaxChatLength {
/**
* Calculates the maximum chat length for the selected protocol version in {@link ProtocolTranslator#getTargetVersion()}
*
* @return The maximum chat length
*/
public static int getChatLength() {
if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(LegacyProtocolVersion.c0_28toc0_30)) {
final ClientPlayNetworkHandler handler = MinecraftClient.getInstance().getNetworkHandler();
final ExtensionProtocolMetadataStorage extensionProtocol = ((IClientConnection) handler.getConnection()).viaFabricPlus$getUserConnection().get(ExtensionProtocolMetadataStorage.class);
if (extensionProtocol != null && extensionProtocol.hasServerExtension(ClassicProtocolExtension.LONGER_MESSAGES)) {
return Short.MAX_VALUE * 2;
} else {
return 64 - (MinecraftClient.getInstance().getSession().getUsername().length() + 2);
}
} else if (ProtocolTranslator.getTargetVersion().equals(BedrockProtocolVersion.bedrockLatest)) {
return 512;
} else if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_9_3)) {
return 100;
} else {
return 256;
}
}
}

View File

@ -19,11 +19,11 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.viaversion.viafabricplus.protocoltranslator.util;
package com.viaversion.viafabricplus.features2.mouse_sensitivity;
import it.unimi.dsi.fastutil.floats.FloatIntPair;
public class MathUtil {
public class MouseSensitivity1_13_2 {
public static FloatIntPair get1_13SliderValue(final float value1_14) {
final int oldSliderWidth = 150 - 8;

View File

@ -19,7 +19,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.viaversion.viafabricplus.injection.access;
package com.viaversion.viafabricplus.injection.access.execute_inputs_sync;
import java.util.Queue;

View File

@ -19,7 +19,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.viaversion.viafabricplus.injection.access;
package com.viaversion.viafabricplus.injection.access.legacy_chat_signatures;
public interface ILegacyKeySignatureStorage {

View File

@ -0,0 +1,72 @@
/*
* This file is part of ViaFabricPlus - https://github.com/ViaVersion/ViaFabricPlus
* Copyright (C) 2021-2024 the original authors
* - FlorianMichael/EnZaXD <florian.michael07@gmail.com>
* - RK_01/RaphiMC
* Copyright (C) 2023-2024 ViaVersion and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.viaversion.viafabricplus.injection.mixin.base.integration;
import com.llamalad7.mixinextras.sugar.Local;
import com.viaversion.viaversion.api.connection.UserConnection;
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion;
import com.viaversion.viafabricplus.ViaFabricPlus;
import com.viaversion.viafabricplus.injection.access.IClientConnection;
import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator;
import net.minecraft.client.network.ServerAddress;
import net.minecraft.network.ClientConnection;
import net.raphimc.minecraftauth.step.bedrock.StepMCChain;
import net.raphimc.minecraftauth.step.bedrock.session.StepFullBedrockSession;
import net.raphimc.viabedrock.api.BedrockProtocolVersion;
import net.raphimc.viabedrock.protocol.storage.AuthChainData;
import org.spongepowered.asm.mixin.Final;
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.Inject;
import org.spongepowered.asm.mixin.injection.Redirect;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import java.net.InetSocketAddress;
import java.util.UUID;
@Mixin(targets = "net.minecraft.client.gui.screen.multiplayer.ConnectScreen$1")
public abstract class MixinConnectScreen_1 {
@Final
@Shadow
ServerAddress field_33737;
@Inject(method = "run", at = @At(value = "INVOKE", target = "Lio/netty/channel/ChannelFuture;syncUninterruptibly()Lio/netty/channel/ChannelFuture;", remap = false, shift = At.Shift.AFTER))
private void setupBedrockAccount(CallbackInfo ci, @Local ClientConnection clientConnection) {
final UserConnection userConnection = ((IClientConnection) clientConnection).viaFabricPlus$getUserConnection();
if (ProtocolTranslator.getTargetVersion() == BedrockProtocolVersion.bedrockLatest) {
final StepFullBedrockSession.FullBedrockSession bedrockSession = ViaFabricPlus.global().getSaveManager().getAccountsSave().refreshAndGetBedrockAccount();
if (bedrockSession != null) {
final StepMCChain.MCChain mcChain = bedrockSession.getMcChain();
final UUID deviceId = mcChain.getXblXsts().getInitialXblSession().getXblDeviceToken().getId();
final String playFabId = bedrockSession.getPlayFabToken().getPlayFabId();
userConnection.put(new AuthChainData(mcChain.getMojangJwt(), mcChain.getIdentityJwt(), mcChain.getPublicKey(), mcChain.getPrivateKey(), deviceId, playFabId));
} else {
ViaFabricPlus.global().getLogger().warn("Could not get Bedrock account. Joining online mode servers will not work!");
}
}
}
}

View File

@ -19,7 +19,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.viaversion.viafabricplus.injection.mixin.features.bedrock;
package com.viaversion.viafabricplus.injection.mixin.features.bedrock.chat_suggestions;
import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator;
import net.minecraft.client.network.ClientCommandSource;

View File

@ -21,7 +21,7 @@
package com.viaversion.viafabricplus.injection.mixin.features.cpe_extensions;
import com.viaversion.viafabricplus.features.versioned.classic.CPEAdditions;
import com.viaversion.viafabricplus.features2.cpe_extensions.CPEAdditions;
import net.raphimc.vialegacy.protocol.classic.c0_30cpetoc0_28_30.data.ClassicProtocolExtension;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;

View File

@ -21,7 +21,7 @@
package com.viaversion.viafabricplus.injection.mixin.features.cpe_extensions;
import com.viaversion.viafabricplus.features.versioned.classic.CPEAdditions;
import com.viaversion.viafabricplus.features2.cpe_extensions.CPEAdditions;
import net.raphimc.vialegacy.protocol.classic.c0_30cpetoc0_28_30.packet.ClientboundPacketsc0_30cpe;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;

View File

@ -27,7 +27,7 @@ import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers;
import com.viaversion.viaversion.api.type.Types;
import com.viaversion.viaversion.protocols.v1_19_3to1_19_4.Protocol1_19_3To1_19_4;
import com.viaversion.viaversion.protocols.v1_19_3to1_19_4.packet.ClientboundPackets1_19_4;
import com.viaversion.viafabricplus.features.versioned.classic.CPEAdditions;
import com.viaversion.viafabricplus.features2.cpe_extensions.CPEAdditions;
import net.raphimc.vialegacy.protocol.classic.c0_28_30toa1_0_15.packet.ClientboundPacketsc0_28;
import net.raphimc.vialegacy.protocol.classic.c0_28_30toa1_0_15.packet.ServerboundPacketsc0_28;
import net.raphimc.vialegacy.protocol.classic.c0_30cpetoc0_28_30.Protocolc0_30cpeToc0_28_30;

View File

@ -21,7 +21,7 @@
package com.viaversion.viafabricplus.injection.mixin.features.cpe_extensions;
import com.viaversion.viafabricplus.features.versioned.classic.CPEAdditions;
import com.viaversion.viafabricplus.features2.cpe_extensions.CPEAdditions;
import net.minecraft.client.render.WeatherRendering;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;

View File

@ -21,7 +21,7 @@
package com.viaversion.viafabricplus.injection.mixin.features.execute_inputs_sync;
import com.viaversion.viafabricplus.injection.access.IMouseKeyboard;
import com.viaversion.viafabricplus.injection.access.execute_inputs_sync.IMouseKeyboard;
import com.viaversion.viafabricplus.settings.impl.DebugSettings;
import net.minecraft.client.Keyboard;
import net.minecraft.client.MinecraftClient;

View File

@ -0,0 +1,67 @@
/*
* This file is part of ViaFabricPlus - https://github.com/ViaVersion/ViaFabricPlus
* Copyright (C) 2021-2024 the original authors
* - FlorianMichael/EnZaXD <florian.michael07@gmail.com>
* - RK_01/RaphiMC
* Copyright (C) 2023-2024 ViaVersion and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.viaversion.viafabricplus.injection.mixin.features.execute_inputs_sync;
import com.viaversion.viafabricplus.injection.access.execute_inputs_sync.IMouseKeyboard;
import com.viaversion.viafabricplus.settings.impl.DebugSettings;
import net.minecraft.client.Keyboard;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.Mouse;
import org.spongepowered.asm.mixin.Final;
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.Inject;
import org.spongepowered.asm.mixin.injection.Slice;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import java.util.Queue;
@Mixin(MinecraftClient.class)
public abstract class MixinMinecraftClient {
@Shadow
@Final
public Mouse mouse;
@Shadow
@Final
public Keyboard keyboard;
@Inject(method = "tick",
at = @At(value = "FIELD", target = "Lnet/minecraft/client/MinecraftClient;currentScreen:Lnet/minecraft/client/gui/screen/Screen;", ordinal = 0, shift = At.Shift.BEFORE),
slice = @Slice(
from = @At(value = "FIELD", target = "Lnet/minecraft/client/MinecraftClient;attackCooldown:I", ordinal = 0),
to = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screen/Screen;addCrashReportSection(Lnet/minecraft/util/crash/CrashReport;)V")
)
)
private void processInputQueues(CallbackInfo ci) {
if (DebugSettings.global().executeInputsSynchronously.isEnabled()) {
Queue<Runnable> inputEvents = ((IMouseKeyboard) this.mouse).viaFabricPlus$getPendingScreenEvents();
while (!inputEvents.isEmpty()) inputEvents.poll().run();
inputEvents = ((IMouseKeyboard) this.keyboard).viaFabricPlus$getPendingScreenEvents();
while (!inputEvents.isEmpty()) inputEvents.poll().run();
}
}
}

View File

@ -21,7 +21,7 @@
package com.viaversion.viafabricplus.injection.mixin.features.execute_inputs_sync;
import com.viaversion.viafabricplus.injection.access.IMouseKeyboard;
import com.viaversion.viafabricplus.injection.access.execute_inputs_sync.IMouseKeyboard;
import com.viaversion.viafabricplus.settings.impl.DebugSettings;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.Mouse;

View File

@ -19,10 +19,10 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.viaversion.viafabricplus.injection.mixin.old.viaversion;
package com.viaversion.viafabricplus.injection.mixin.features.footstep_particle;
import com.viaversion.viaversion.api.data.MappingDataBase;
import com.viaversion.viafabricplus.features.versioned.visual.FootStepParticle1_12_2;
import com.viaversion.viafabricplus.features2.footstep_particle.FootStepParticle1_12_2;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;

View File

@ -19,10 +19,10 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.viaversion.viafabricplus.injection.mixin.old.viaversion;
package com.viaversion.viafabricplus.injection.mixin.features.footstep_particle;
import com.viaversion.viaversion.protocols.v1_12_2to1_13.data.ParticleIdMappings1_13;
import com.viaversion.viafabricplus.features.versioned.visual.FootStepParticle1_12_2;
import com.viaversion.viafabricplus.features2.footstep_particle.FootStepParticle1_12_2;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;

View File

@ -19,12 +19,12 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.viaversion.viafabricplus.injection.mixin.old.viaversion;
package com.viaversion.viafabricplus.injection.mixin.features.footstep_particle;
import com.viaversion.viaversion.api.data.FullMappingsBase;
import com.viaversion.viaversion.api.data.Mappings;
import com.viaversion.viaversion.api.data.ParticleMappings;
import com.viaversion.viafabricplus.features.versioned.visual.FootStepParticle1_12_2;
import com.viaversion.viafabricplus.features2.footstep_particle.FootStepParticle1_12_2;
import org.spongepowered.asm.mixin.Mixin;
import java.util.List;

View File

@ -19,11 +19,11 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.viaversion.viafabricplus.injection.mixin.compat.fabricapi;
package com.viaversion.viafabricplus.injection.mixin.features.footstep_particle;
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
import com.viaversion.viafabricplus.features.versioned.visual.FootStepParticle1_12_2;
import com.viaversion.viafabricplus.features2.footstep_particle.FootStepParticle1_12_2;
import net.fabricmc.fabric.impl.registry.sync.RegistrySyncManager;
import net.minecraft.registry.Registry;
import net.minecraft.util.Identifier;

View File

@ -19,11 +19,11 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.viaversion.viafabricplus.injection.mixin.old.minecraft.item;
package com.viaversion.viafabricplus.injection.mixin.features.item.filter_creative_tabs;
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
import com.viaversion.viafabricplus.features.data.ItemRegistryDiff;
import com.viaversion.viafabricplus.features2.item.filter_creative_tabs.ItemRegistryDiff;
import com.viaversion.viafabricplus.settings.impl.GeneralSettings;
import net.minecraft.client.MinecraftClient;
import net.minecraft.item.Item;

View File

@ -19,7 +19,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.viaversion.viafabricplus.injection.mixin.old.minecraft.item;
package com.viaversion.viafabricplus.injection.mixin.features.item.filter_creative_tabs;
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion;
import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator;

View File

@ -19,9 +19,9 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.viaversion.viafabricplus.injection.mixin.old.minecraft.item;
package com.viaversion.viafabricplus.injection.mixin.features.item.negative_items;
import com.viaversion.viafabricplus.util.ItemUtil;
import com.viaversion.viafabricplus.features2.item.negative_items.NegativeItemUtil;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.item.ItemStack;
import net.minecraft.util.Formatting;
@ -34,7 +34,7 @@ public abstract class MixinDrawContext {
@Redirect(method = "drawStackCount", at = @At(value = "INVOKE", target = "Lnet/minecraft/item/ItemStack;getCount()I"))
private int handleNegativeItemCount(ItemStack instance) {
return ItemUtil.getCount(instance);
return NegativeItemUtil.getCount(instance);
}
@Redirect(method = "drawStackCount", at = @At(value = "INVOKE", target = "Ljava/lang/String;valueOf(I)Ljava/lang/String;", remap = false))

View File

@ -19,20 +19,19 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.viaversion.viafabricplus.injection.mixin.old.minecraft.screen;
package com.viaversion.viafabricplus.injection.mixin.features.legacy_chat_signatures;
import com.llamalad7.mixinextras.sugar.Local;
import com.viaversion.viafabricplus.ViaFabricPlus;
import com.viaversion.viafabricplus.injection.access.IClientConnection;
import com.viaversion.viafabricplus.injection.access.legacy_chat_signatures.ILegacyKeySignatureStorage;
import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator;
import com.viaversion.viaversion.api.connection.UserConnection;
import com.viaversion.viaversion.api.minecraft.ProfileKey;
import com.viaversion.viaversion.api.minecraft.signature.storage.ChatSession1_19_0;
import com.viaversion.viaversion.api.minecraft.signature.storage.ChatSession1_19_1;
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion;
import com.viaversion.viafabricplus.ViaFabricPlus;
import com.viaversion.viafabricplus.injection.access.IClientConnection;
import com.viaversion.viafabricplus.injection.access.ILegacyKeySignatureStorage;
import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.network.ServerAddress;
import net.minecraft.network.ClientConnection;
import net.minecraft.network.encryption.PlayerKeyPair;
import net.minecraft.network.encryption.PlayerPublicKey;
@ -45,44 +44,20 @@ 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.Inject;
import org.spongepowered.asm.mixin.injection.Redirect;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import java.net.InetSocketAddress;
import java.security.PrivateKey;
import java.util.UUID;
@Mixin(targets = "net.minecraft.client.gui.screen.multiplayer.ConnectScreen$1")
public abstract class MixinConnectScreen_1 {
@Final
@Shadow
ServerAddress field_33737;
@Shadow
@Final
MinecraftClient field_33738;
@Redirect(method = "run", at = @At(value = "INVOKE", target = "Ljava/net/InetSocketAddress;getHostName()Ljava/lang/String;", remap = false))
private String getRealAddress(InetSocketAddress instance) {
if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_17)) {
return field_33737.getAddress();
} else {
return instance.getHostName();
}
}
@Redirect(method = "run", at = @At(value = "INVOKE", target = "Ljava/net/InetSocketAddress;getPort()I", remap = false))
private int getRealPort(InetSocketAddress instance) {
if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_17)) {
return field_33737.getPort();
} else {
return instance.getPort();
}
}
private MinecraftClient field_33738;
@Inject(method = "run", at = @At(value = "INVOKE", target = "Lio/netty/channel/ChannelFuture;syncUninterruptibly()Lio/netty/channel/ChannelFuture;", remap = false, shift = At.Shift.AFTER))
private void setupConnectionSessions(CallbackInfo ci, @Local ClientConnection clientConnection) {
private void setupChatSessions(CallbackInfo ci, @Local ClientConnection clientConnection) {
final UserConnection userConnection = ((IClientConnection) clientConnection).viaFabricPlus$getUserConnection();
if (ProtocolTranslator.getTargetVersion().betweenInclusive(ProtocolVersion.v1_19, ProtocolVersion.v1_19_1)) {
@ -104,18 +79,7 @@ public abstract class MixinConnectScreen_1 {
} else {
ViaFabricPlus.global().getLogger().error("Could not get public key signature. Joining servers with enforce-secure-profiles enabled will not work!");
}
} else if (ProtocolTranslator.getTargetVersion() == BedrockProtocolVersion.bedrockLatest) {
final StepFullBedrockSession.FullBedrockSession bedrockSession = ViaFabricPlus.global().getSaveManager().getAccountsSave().refreshAndGetBedrockAccount();
if (bedrockSession != null) {
final StepMCChain.MCChain mcChain = bedrockSession.getMcChain();
final UUID deviceId = mcChain.getXblXsts().getInitialXblSession().getXblDeviceToken().getId();
final String playFabId = bedrockSession.getPlayFabToken().getPlayFabId();
userConnection.put(new AuthChainData(mcChain.getMojangJwt(), mcChain.getIdentityJwt(), mcChain.getPublicKey(), mcChain.getPrivateKey(), deviceId, playFabId));
} else {
ViaFabricPlus.global().getLogger().warn("Could not get Bedrock account. Joining online mode servers will not work!");
}
}
}
}
}

View File

@ -22,7 +22,7 @@
package com.viaversion.viafabricplus.injection.mixin.features.legacy_chat_signatures;
import com.mojang.authlib.yggdrasil.response.KeyPairResponse;
import com.viaversion.viafabricplus.injection.access.ILegacyKeySignatureStorage;
import com.viaversion.viafabricplus.injection.access.legacy_chat_signatures.ILegacyKeySignatureStorage;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Unique;

View File

@ -21,7 +21,7 @@
package com.viaversion.viafabricplus.injection.mixin.features.legacy_chat_signatures;
import com.viaversion.viafabricplus.injection.access.ILegacyKeySignatureStorage;
import com.viaversion.viafabricplus.injection.access.legacy_chat_signatures.ILegacyKeySignatureStorage;
import net.minecraft.network.encryption.PlayerPublicKey;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Unique;

View File

@ -22,7 +22,7 @@
package com.viaversion.viafabricplus.injection.mixin.features.legacy_chat_signatures;
import com.mojang.authlib.yggdrasil.response.KeyPairResponse;
import com.viaversion.viafabricplus.injection.access.ILegacyKeySignatureStorage;
import com.viaversion.viafabricplus.injection.access.legacy_chat_signatures.ILegacyKeySignatureStorage;
import net.minecraft.client.session.ProfileKeysImpl;
import net.minecraft.network.encryption.PlayerPublicKey;
import org.spongepowered.asm.mixin.Mixin;

View File

@ -25,8 +25,8 @@ import com.mojang.authlib.minecraft.client.MinecraftClient;
import com.mojang.authlib.yggdrasil.YggdrasilUserApiService;
import com.mojang.authlib.yggdrasil.response.KeyPairResponse;
import com.viaversion.viafabricplus.ViaFabricPlus;
import com.viaversion.viafabricplus.features.versioned.KeyPairResponse1_19_0;
import com.viaversion.viafabricplus.injection.access.ILegacyKeySignatureStorage;
import com.viaversion.viafabricplus.features2.legacy_chat_signatures.KeyPairResponse1_19_0;
import com.viaversion.viafabricplus.injection.access.legacy_chat_signatures.ILegacyKeySignatureStorage;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;

View File

@ -38,7 +38,7 @@ import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.Redirect;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin(value = ChatScreen.class, priority = 1) // Apply our mixin first so other mods can override the chat length
@Mixin(value = ChatScreen.class)
public abstract class MixinChatScreen {
@Shadow
@ -50,20 +50,6 @@ public abstract class MixinChatScreen {
@Shadow
ChatInputSuggestor chatInputSuggestor;
@Inject(method = "init", at = @At("RETURN"))
private void changeChatLength(CallbackInfo ci) {
this.chatField.setMaxLength(ClientsideFeatures.getChatLength());
}
@Redirect(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/hud/ChatHud;getIndicatorAt(DD)Lnet/minecraft/client/gui/hud/MessageIndicator;"))
private MessageIndicator removeIndicator(ChatHud instance, double mouseX, double mouseY) {
if (VisualSettings.global().hideSignatureIndicator.isEnabled()) {
return null;
} else {
return instance.getIndicatorAt(mouseX, mouseY);
}
}
@WrapWithCondition(method = "init", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/widget/TextFieldWidget;setText(Ljava/lang/String;)V"))
public boolean moveSetTextDown(TextFieldWidget instance, String text) {
return !DebugSettings.global().legacyTabCompletions.isEnabled();

View File

@ -21,7 +21,7 @@
package com.viaversion.viafabricplus.injection.mixin.features.max_chat_length;
import com.viaversion.viafabricplus.features.ClientsideFeatures;
import com.viaversion.viafabricplus.features2.max_chat_length.MaxChatLength;
import net.minecraft.network.packet.c2s.play.ChatMessageC2SPacket;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.Constant;
@ -32,7 +32,7 @@ public abstract class MixinChatMessageC2SPacket {
@ModifyConstant(method = "write", constant = @Constant(intValue = 256))
private int modifyChatLength(int maxLength) {
return ClientsideFeatures.getChatLength();
return MaxChatLength.getChatLength();
}
}

View File

@ -0,0 +1,44 @@
/*
* This file is part of ViaFabricPlus - https://github.com/ViaVersion/ViaFabricPlus
* Copyright (C) 2021-2024 the original authors
* - FlorianMichael/EnZaXD <florian.michael07@gmail.com>
* - RK_01/RaphiMC
* Copyright (C) 2023-2024 ViaVersion and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.viaversion.viafabricplus.injection.mixin.features.max_chat_length;
import com.viaversion.viafabricplus.features2.max_chat_length.MaxChatLength;
import net.minecraft.client.gui.screen.ChatScreen;
import net.minecraft.client.gui.widget.TextFieldWidget;
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.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin(value = ChatScreen.class, priority = 1) // Apply our mixin first so other mods can override the chat length
public abstract class MixinChatScreen {
@Shadow
protected TextFieldWidget chatField;
@Inject(method = "init", at = @At("RETURN"))
private void changeChatLength(CallbackInfo ci) {
this.chatField.setMaxLength(MaxChatLength.getChatLength());
}
}

View File

@ -21,7 +21,7 @@
package com.viaversion.viafabricplus.injection.mixin.features.max_chat_length;
import com.viaversion.viafabricplus.features.ClientsideFeatures;
import com.viaversion.viafabricplus.features2.max_chat_length.MaxChatLength;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.Constant;
import org.spongepowered.asm.mixin.injection.ModifyConstant;
@ -31,7 +31,7 @@ public abstract class MixinProtocol1_10To1_11 {
@ModifyConstant(method = "lambda$register$0", constant = @Constant(intValue = 100))
private static int changeMaxChatLength(int constant) {
return ClientsideFeatures.getChatLength();
return MaxChatLength.getChatLength();
}
}

View File

@ -22,7 +22,7 @@
package com.viaversion.viafabricplus.injection.mixin.features.max_chat_length;
import com.llamalad7.mixinextras.injector.ModifyExpressionValue;
import com.viaversion.viafabricplus.features.ClientsideFeatures;
import com.viaversion.viafabricplus.features2.max_chat_length.MaxChatLength;
import net.minecraft.util.StringHelper;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
@ -32,7 +32,7 @@ public abstract class MixinStringHelper {
@ModifyExpressionValue(method = "truncateChat", at = @At(value = "CONSTANT", args = "intValue=256"))
private static int modifyMaxChatLength(int constant) {
return ClientsideFeatures.getChatLength();
return MaxChatLength.getChatLength();
}
}

View File

@ -24,7 +24,7 @@ package com.viaversion.viafabricplus.injection.mixin.features.mouse_sensitivity;
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator;
import com.viaversion.viafabricplus.protocoltranslator.util.MathUtil;
import com.viaversion.viafabricplus.features2.mouse_sensitivity.MouseSensitivity1_13_2;
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion;
import net.minecraft.client.Mouse;
import net.minecraft.client.option.SimpleOption;
@ -39,7 +39,7 @@ public abstract class MixinMouse {
final Double value = original.call(instance);
if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_13_2)) {
return (double) MathUtil.get1_13SliderValue(value.floatValue()).keyFloat();
return (double) MouseSensitivity1_13_2.get1_13SliderValue(value.floatValue()).keyFloat();
} else {
return value;
}

View File

@ -23,7 +23,7 @@ package com.viaversion.viafabricplus.injection.mixin.features.mouse_sensitivity;
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion;
import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator;
import com.viaversion.viafabricplus.protocoltranslator.util.MathUtil;
import com.viaversion.viafabricplus.features2.mouse_sensitivity.MouseSensitivity1_13_2;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.gui.screen.option.GameOptionsScreen;
@ -43,7 +43,7 @@ public abstract class MixinMouseOptionsScreen extends GameOptionsScreen {
public void render(DrawContext context, int mouseX, int mouseY, float delta) {
super.render(context, mouseX, mouseY, delta);
if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_13_2) && this.body.getWidgetFor(this.gameOptions.getMouseSensitivity()).isHovered()) {
context.drawTooltip(textRenderer, Text.of("<=1.13.2 Sensitivity: " + MathUtil.get1_13SliderValue(this.gameOptions.getMouseSensitivity().getValue().floatValue()).valueInt() + "%"), mouseX, mouseY);
context.drawTooltip(textRenderer, Text.of("<=1.13.2 Sensitivity: " + MouseSensitivity1_13_2.get1_13SliderValue(this.gameOptions.getMouseSensitivity().getValue().floatValue()).valueInt() + "%"), mouseX, mouseY);
}
}

View File

@ -0,0 +1,72 @@
/*
* This file is part of ViaFabricPlus - https://github.com/ViaVersion/ViaFabricPlus
* Copyright (C) 2021-2024 the original authors
* - FlorianMichael/EnZaXD <florian.michael07@gmail.com>
* - RK_01/RaphiMC
* Copyright (C) 2023-2024 ViaVersion and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.viaversion.viafabricplus.injection.mixin.features.networking.srv_resolving;
import com.llamalad7.mixinextras.sugar.Local;
import com.viaversion.viafabricplus.ViaFabricPlus;
import com.viaversion.viafabricplus.injection.access.IClientConnection;
import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator;
import com.viaversion.viaversion.api.connection.UserConnection;
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion;
import net.minecraft.client.network.ServerAddress;
import net.minecraft.network.ClientConnection;
import net.raphimc.minecraftauth.step.bedrock.StepMCChain;
import net.raphimc.minecraftauth.step.bedrock.session.StepFullBedrockSession;
import net.raphimc.viabedrock.api.BedrockProtocolVersion;
import net.raphimc.viabedrock.protocol.storage.AuthChainData;
import org.spongepowered.asm.mixin.Final;
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.Inject;
import org.spongepowered.asm.mixin.injection.Redirect;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import java.net.InetSocketAddress;
import java.util.UUID;
@Mixin(targets = "net.minecraft.client.gui.screen.multiplayer.ConnectScreen$1")
public abstract class MixinConnectScreen_1 {
@Final
@Shadow
ServerAddress field_33737;
@Redirect(method = "run", at = @At(value = "INVOKE", target = "Ljava/net/InetSocketAddress;getHostName()Ljava/lang/String;", remap = false))
private String getRealAddress(InetSocketAddress instance) {
if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_17)) {
return field_33737.getAddress();
} else {
return instance.getHostName();
}
}
@Redirect(method = "run", at = @At(value = "INVOKE", target = "Ljava/net/InetSocketAddress;getPort()I", remap = false))
private int getRealPort(InetSocketAddress instance) {
if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_17)) {
return field_33737.getPort();
} else {
return instance.getPort();
}
}
}

View File

@ -0,0 +1,44 @@
/*
* This file is part of ViaFabricPlus - https://github.com/ViaVersion/ViaFabricPlus
* Copyright (C) 2021-2024 the original authors
* - FlorianMichael/EnZaXD <florian.michael07@gmail.com>
* - RK_01/RaphiMC
* Copyright (C) 2023-2024 ViaVersion and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.viaversion.viafabricplus.injection.mixin.features.ui.chat_indicator;
import com.viaversion.viafabricplus.settings.impl.VisualSettings;
import net.minecraft.client.gui.hud.ChatHud;
import net.minecraft.client.gui.hud.MessageIndicator;
import net.minecraft.client.gui.screen.ChatScreen;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Redirect;
@Mixin(value = ChatScreen.class)
public abstract class MixinChatScreen {
@Redirect(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/hud/ChatHud;getIndicatorAt(DD)Lnet/minecraft/client/gui/hud/MessageIndicator;"))
private MessageIndicator removeIndicator(ChatHud instance, double mouseX, double mouseY) {
if (VisualSettings.global().hideSignatureIndicator.isEnabled()) {
return null;
} else {
return instance.getIndicatorAt(mouseX, mouseY);
}
}
}

View File

@ -19,7 +19,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.viaversion.viafabricplus.injection.mixin.old.minecraft;
package com.viaversion.viafabricplus.injection.mixin.features.world.always_tick_entities;
import com.viaversion.viafabricplus.features.versioned.PendingUpdateManager1_18_2;
import com.viaversion.viafabricplus.injection.access.IEntity;

View File

@ -29,7 +29,7 @@ import com.viaversion.viaversion.api.type.Types;
import com.viaversion.viaversion.protocols.v1_11_1to1_12.Protocol1_11_1To1_12;
import com.viaversion.viaversion.protocols.v1_9_1to1_9_3.packet.ServerboundPackets1_9_3;
import com.viaversion.viafabricplus.features.versioned.ItemPick1_21_3;
import com.viaversion.viafabricplus.injection.access.IMouseKeyboard;
import com.viaversion.viafabricplus.injection.access.execute_inputs_sync.IMouseKeyboard;
import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator;
import com.viaversion.viafabricplus.settings.impl.DebugSettings;
import net.minecraft.client.Keyboard;
@ -100,23 +100,6 @@ public abstract class MixinMinecraftClient {
}
}
@Inject(method = "tick",
at = @At(value = "FIELD", target = "Lnet/minecraft/client/MinecraftClient;currentScreen:Lnet/minecraft/client/gui/screen/Screen;", ordinal = 0, shift = At.Shift.BEFORE),
slice = @Slice(
from = @At(value = "FIELD", target = "Lnet/minecraft/client/MinecraftClient;attackCooldown:I", ordinal = 0),
to = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screen/Screen;addCrashReportSection(Lnet/minecraft/util/crash/CrashReport;)V")
)
)
private void processInputQueues(CallbackInfo ci) {
if (DebugSettings.global().executeInputsSynchronously.isEnabled()) {
Queue<Runnable> inputEvents = ((IMouseKeyboard) this.mouse).viaFabricPlus$getPendingScreenEvents();
while (!inputEvents.isEmpty()) inputEvents.poll().run();
inputEvents = ((IMouseKeyboard) this.keyboard).viaFabricPlus$getPendingScreenEvents();
while (!inputEvents.isEmpty()) inputEvents.poll().run();
}
}
@Inject(method = "handleInputEvents", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/tutorial/TutorialManager;onInventoryOpened()V", shift = At.Shift.AFTER))
private void sendOpenInventoryPacket(CallbackInfo ci) {
if (DebugSettings.global().sendOpenInventoryPacket.isEnabled()) {

View File

@ -29,24 +29,6 @@ import net.minecraft.nbt.NbtCompound;
public class ItemUtil {
private static final String VV_IDENTIFIER = "VV|" + Protocol1_10To1_11.class.getSimpleName(); // ItemRewriter#nbtTagName
/**
* Returns the actual amount of items in the stack, versions older or equal to 1.10 can have negative stack sizes
* which are not represented by {@link ItemStack#getCount()}.
*
* @param stack The stack to get the count from
* @return The actual amount of items in the stack
*/
public static int getCount(final ItemStack stack) {
final NbtCompound tag = getTagOrNull(stack);
if (tag != null && tag.contains(VV_IDENTIFIER)) {
return tag.getInt(VV_IDENTIFIER);
} else {
return stack.getCount();
}
}
// ViaVersion's 1.20.5 -> 1.20.3 protocol will save the original item nbt inside custom data to later restore
// it for creative clients, we can use this to get nbt stored in older protocols as well
public static NbtCompound getTagOrNull(final ItemStack stack) {

View File

@ -17,6 +17,7 @@
"base.connection.MixinMinecraftClient",
"base.connection.MixinMultiplayerServerListPinger",
"base.integration.MixinClientConnection",
"base.integration.MixinConnectScreen_1",
"base.integration.MixinDebugHud",
"base.integration.MixinMinecraftClient",
"base.integration.MixinMultiplayerServerListPinger",
@ -31,18 +32,112 @@
"compat.classic4j.MixinCCAuthenticationResponse",
"compat.classic4j.MixinTextFieldWidget",
"compat.fabricapi.MixinClientRegistrySyncHandler",
"compat.fabricapi.MixinRegistrySyncManager",
"compat.ipnext.MixinAutoRefillHandler_ItemSlotMonitor",
"compat.lithium.MixinEntity",
"compat.minecraftauth.MixinClasses",
"compat.minecraftauth.MixinDefaultJwtParserBuilder",
"features.bedrock.allow_new_lines.MixinTextRenderer",
"features.bedrock.chat_suggestions.MixinClientCommandSource",
"features.bedrock.reach_around_raycast.MixinGameRenderer",
"features.block.collision_shapes.MixinAbstractRailBlock",
"features.block.collision_shapes.MixinAnvilBlock",
"features.block.collision_shapes.MixinBedBlock",
"features.block.collision_shapes.MixinBrewingStandBlock",
"features.block.collision_shapes.MixinCarpetBlock",
"features.block.collision_shapes.MixinCauldronBlock",
"features.block.collision_shapes.MixinChestBlock",
"features.block.collision_shapes.MixinCropBlock",
"features.block.collision_shapes.MixinEnderChestBlock",
"features.block.collision_shapes.MixinEndPortalBlock",
"features.block.collision_shapes.MixinEndPortalFrameBlock",
"features.block.collision_shapes.MixinFarmlandBlock",
"features.block.collision_shapes.MixinFenceBlock",
"features.block.collision_shapes.MixinFenceGateBlock",
"features.block.collision_shapes.MixinFireBlock",
"features.block.collision_shapes.MixinFlowerbedBlock",
"features.block.collision_shapes.MixinHopperBlock",
"features.block.collision_shapes.MixinLadderBlock",
"features.block.collision_shapes.MixinLeavesBlock",
"features.block.collision_shapes.MixinLilyPadBlock",
"features.block.collision_shapes.MixinPaneBlock",
"features.block.collision_shapes.MixinPistonBlock",
"features.block.collision_shapes.MixinPistonHeadBlock",
"features.block.collision_shapes.MixinSnowBlock",
"features.block.collision_shapes.MixinSoulSandBlock",
"features.block.collision_shapes.MixinWallBlock",
"features.block.interactions.MixinAbstractSignBlock",
"features.block.interactions.MixinDecoratedPotBlock",
"features.block.interactions.MixinFenceBlock",
"features.block.interactions.MixinFlowerPotBlock",
"features.block.interactions.MixinNoteBlock",
"features.block.mining_calculations.MixinAbstractBlock",
"features.block.mining_calculations.MixinAbstractBlock_AbstractBlockState",
"features.cpe_extensions.MixinClassicProtocolExtension",
"features.cpe_extensions.MixinClientboundPacketsc0_30cpe",
"features.cpe_extensions.MixinProtocolc0_30cpeToc0_28_30",
"features.cpe_extensions.MixinWeatherRendering",
"features.execute_inputs_sync.MixinKeyboard",
"features.execute_inputs_sync.MixinMinecraftClient",
"features.execute_inputs_sync.MixinMouse",
"features.footstep_particle.MixinMappingDataBase",
"features.footstep_particle.MixinParticleIdMappings1_13",
"features.footstep_particle.MixinParticleMappings",
"features.footstep_particle.MixinRegistrySyncManager",
"features.item.filter_creative_tabs.MixinItemGroup_EntriesImpl",
"features.item.filter_creative_tabs.MixinItemGroups",
"features.item.negative_items.MixinDrawContext",
"features.legacy_chat_signatures.MixinConnectScreen_1",
"features.legacy_chat_signatures.MixinKeyPairResponse",
"features.legacy_chat_signatures.MixinPlayerPublicKey_PublicKeyData",
"features.legacy_chat_signatures.MixinProfileKeysImpl",
"features.legacy_chat_signatures.MixinYggdrasilUserApiService",
"features.legacy_tab_completions.MixinChatInputSuggestor",
"features.legacy_tab_completions.MixinChatScreen",
"features.max_chat_length.MixinChatMessageC2SPacket",
"features.max_chat_length.MixinChatScreen",
"features.max_chat_length.MixinProtocol1_10To1_11",
"features.max_chat_length.MixinStringHelper",
"features.mouse_sensitivity.MixinMouse",
"features.mouse_sensitivity.MixinMouseOptionsScreen",
"features.movement.block.MixinBedBlock",
"features.movement.block.MixinFlowableFluid",
"features.movement.block.MixinHoneyBlock",
"features.movement.block.MixinSoulSandBlock",
"features.movement.levitation_value.MixinStatusEffectInstance",
"features.networking.packet_handling_changes.MixinClientCommonNetworkHandler",
"features.networking.pre_config_state.MixinNetworkStateTransitionHandler",
"features.networking.pre_config_state.MixinNetworkStateTransitions",
"features.networking.registry_validations.MixinRegistryEntryList_Named",
"features.networking.registry_validations.MixinRegistryEntryListCodec",
"features.networking.remove_legacy_pinger.MixinMultiplayerServerListPinger",
"features.networking.resource_pack_header.MixinServerResourcePackLoader_4",
"features.networking.srv_resolving.MixinAllowedAddressResolver",
"features.networking.srv_resolving.MixinConnectScreen_1",
"features.networking.srv_resolving.MixinRedirectResolver",
"features.networking.srv_resolving.MixinServerAddress",
"features.text_rendering.MixinFontStorage",
"features.text_rendering.MixinLanguageManager",
"features.text_rendering.MixinTextRenderer_Drawer",
"features.ui.beta_hud_elements.MixinInGameHud",
"features.ui.chat_indicator.MixinChatHud",
"features.ui.chat_indicator.MixinChatScreen",
"features.ui.classic_creative_menu.MixinCreativeInventoryScreen",
"features.ui.remove_newer_screen_features.MixinCommandBlockScreen",
"features.ui.remove_newer_screen_features.MixinGameMenuScreen",
"features.ui.remove_newer_screen_features.MixinJigsawBlockScreen",
"features.ui.remove_newer_screen_features.MixinScreen",
"features.ui.remove_newer_screen_features.MixinStructureBlockScreen_1",
"features.ui.v1_7_tab_list_style.MixinPlayerListEntry",
"features.ui.v1_7_tab_list_style.MixinPlayerListHud",
"features.world.always_tick_entities.MixinClientWorld",
"integration.viabedrock.MixinJoinPackets",
"integration.vialegacy.MixinExtensionProtocolMetadataStorage",
"integration.vialegacy.MixinViaLegacyConfig",
"old.minecraft.MixinBuiltChunk",
"old.minecraft.MixinCamera",
"old.minecraft.MixinClientWorld",
"old.minecraft.MixinGameOptions",
"old.minecraft.MixinMinecraftClient",
"old.minecraft.MixinPlayerListEntry",
"features.networking.resource_pack_header.MixinServerResourcePackLoader_4",
"old.minecraft.MixinStaticSound",
"old.minecraft.entity.MixinAbstractBoatEntity",
"old.minecraft.entity.MixinAbstractClientPlayerEntity",
@ -79,7 +174,6 @@
"old.minecraft.item.MixinBrushItem",
"old.minecraft.item.MixinBucketItem",
"old.minecraft.item.MixinBundleItem",
"old.minecraft.item.MixinDrawContext",
"old.minecraft.item.MixinEnderEyeItem",
"old.minecraft.item.MixinEnderPearlItem",
"old.minecraft.item.MixinEquippableComponent",
@ -88,8 +182,6 @@
"old.minecraft.item.MixinFishingRodItem",
"old.minecraft.item.MixinHeldItemRenderer",
"old.minecraft.item.MixinItemCooldownManager",
"old.minecraft.item.MixinItemGroup_EntriesImpl",
"old.minecraft.item.MixinItemGroups",
"old.minecraft.item.MixinItemPlacementContext",
"old.minecraft.item.MixinItemRenderer",
"old.minecraft.item.MixinItemStack",
@ -106,93 +198,15 @@
"old.minecraft.screen.MixinAbstractCommandBlockScreen",
"old.minecraft.screen.MixinAbstractSignEditScreen",
"old.minecraft.screen.MixinBookEditScreen",
"features.legacy_tab_completions.MixinChatScreen",
"features.ui.remove_newer_screen_features.MixinCommandBlockScreen",
"old.minecraft.screen.MixinConnectScreen_1",
"features.ui.classic_creative_menu.MixinCreativeInventoryScreen",
"old.minecraft.screen.MixinDownloadingTerrainScreen",
"features.ui.remove_newer_screen_features.MixinGameMenuScreen",
"old.minecraft.screen.MixinGameModeSelectionScreen",
"old.minecraft.screen.MixinGameModeSelectionScreen_GameModeSelection",
"features.ui.remove_newer_screen_features.MixinJigsawBlockScreen",
"old.minecraft.screen.screenhandler.MixinAbstractFurnaceScreenHandler",
"old.minecraft.screen.screenhandler.MixinBrewingStandScreenHandler_FuelSlot",
"old.minecraft.screen.screenhandler.MixinCraftingScreenHandler",
"old.minecraft.screen.screenhandler.MixinMerchantScreenHandler",
"old.minecraft.screen.screenhandler.MixinPlayerScreenHandler",
"old.minecraft.screen.screenhandler.MixinScreenHandler",
"features.bedrock.MixinClientCommandSource",
"features.bedrock.allow_new_lines.MixinTextRenderer",
"features.bedrock.reach_around_raycast.MixinGameRenderer",
"features.block.collision_shapes.MixinAbstractRailBlock",
"features.block.collision_shapes.MixinAnvilBlock",
"features.block.collision_shapes.MixinBedBlock",
"features.block.collision_shapes.MixinBrewingStandBlock",
"features.block.collision_shapes.MixinCarpetBlock",
"features.block.collision_shapes.MixinCauldronBlock",
"features.block.collision_shapes.MixinChestBlock",
"features.block.collision_shapes.MixinCropBlock",
"features.block.collision_shapes.MixinEnderChestBlock",
"features.block.collision_shapes.MixinEndPortalBlock",
"features.block.collision_shapes.MixinEndPortalFrameBlock",
"features.block.collision_shapes.MixinFarmlandBlock",
"features.block.collision_shapes.MixinFenceBlock",
"features.block.collision_shapes.MixinFenceGateBlock",
"features.block.collision_shapes.MixinFireBlock",
"features.block.collision_shapes.MixinFlowerbedBlock",
"features.block.collision_shapes.MixinHopperBlock",
"features.block.collision_shapes.MixinLadderBlock",
"features.block.collision_shapes.MixinLeavesBlock",
"features.block.collision_shapes.MixinLilyPadBlock",
"features.block.collision_shapes.MixinPaneBlock",
"features.block.collision_shapes.MixinPistonBlock",
"features.block.collision_shapes.MixinPistonHeadBlock",
"features.block.collision_shapes.MixinSnowBlock",
"features.block.collision_shapes.MixinWallBlock",
"features.block.interactions.MixinAbstractSignBlock",
"features.block.interactions.MixinDecoratedPotBlock",
"features.block.interactions.MixinFlowerPotBlock",
"features.block.interactions.MixinNoteBlock",
"features.block.mining_calculations.MixinAbstractBlock",
"features.block.mining_calculations.MixinAbstractBlock_AbstractBlockState",
"features.cpe_extensions.MixinClassicProtocolExtension",
"features.cpe_extensions.MixinClientboundPacketsc0_30cpe",
"features.cpe_extensions.MixinProtocolc0_30cpeToc0_28_30",
"features.cpe_extensions.MixinWeatherRendering",
"features.execute_inputs_sync.MixinKeyboard",
"features.execute_inputs_sync.MixinMouse",
"features.ui.chat_indicator.MixinChatHud",
"features.ui.beta_hud_elements.MixinInGameHud",
"features.ui.v1_7_tab_list_style.MixinPlayerListEntry",
"features.ui.v1_7_tab_list_style.MixinPlayerListHud",
"features.legacy_chat_signatures.MixinKeyPairResponse",
"features.legacy_chat_signatures.MixinPlayerPublicKey_PublicKeyData",
"features.legacy_chat_signatures.MixinProfileKeysImpl",
"features.legacy_chat_signatures.MixinYggdrasilUserApiService",
"features.legacy_tab_completions.MixinChatInputSuggestor",
"features.max_chat_length.MixinChatMessageC2SPacket",
"features.max_chat_length.MixinProtocol1_10To1_11",
"features.max_chat_length.MixinStringHelper",
"features.mouse_sensitivity.MixinMouse",
"features.mouse_sensitivity.MixinMouseOptionsScreen",
"features.movement.block.MixinFlowableFluid",
"features.movement.block.MixinHoneyBlock",
"features.movement.block.MixinSoulSandBlock",
"features.movement.levitation_value.MixinStatusEffectInstance",
"features.networking.packet_handling_changes.MixinClientCommonNetworkHandler",
"features.networking.pre_config_state.MixinNetworkStateTransitionHandler",
"features.networking.pre_config_state.MixinNetworkStateTransitions",
"features.networking.registry_validations.MixinRegistryEntryList_Named",
"features.networking.registry_validations.MixinRegistryEntryListCodec",
"features.networking.remove_legacy_pinger.MixinMultiplayerServerListPinger",
"features.networking.srv_resolving.MixinAllowedAddressResolver",
"features.networking.srv_resolving.MixinRedirectResolver",
"features.networking.srv_resolving.MixinServerAddress",
"features.ui.remove_newer_screen_features.MixinScreen",
"features.ui.remove_newer_screen_features.MixinStructureBlockScreen_1",
"features.text_rendering.MixinFontStorage",
"features.text_rendering.MixinLanguageManager",
"features.text_rendering.MixinTextRenderer_Drawer",
"old.vialegacy.MixinProtocolr1_7_6_10Tor1_8",
"old.viaversion.MixinBlockItemPacketRewriter1_20_5",
"old.viaversion.MixinBlockItemPacketRewriter1_21_4",
@ -210,23 +224,14 @@
"old.viaversion.MixinItemPacketRewriter1_14",
"old.viaversion.MixinItemPacketRewriter1_17",
"old.viaversion.MixinItemPacketRewriter1_9",
"old.viaversion.MixinMappingDataBase",
"old.viaversion.MixinNamedCompoundTagType",
"old.viaversion.MixinParticleIdMappings1_13",
"old.viaversion.MixinParticleMappings",
"old.viaversion.MixinProtocol1_20_3To1_20_5",
"old.viaversion.MixinProtocol1_20To1_20_2",
"old.viaversion.MixinTagType",
"old.viaversion.MixinUserConnectionImpl",
"old.viaversion.MixinWorldPacketRewriter1_16_2",
"old.viaversion.MixinWorldPacketRewriter1_17",
"old.viaversion.MixinWorldPacketRewriter1_19",
"integration.viabedrock.MixinJoinPackets",
"integration.vialegacy.MixinExtensionProtocolMetadataStorage",
"integration.vialegacy.MixinViaLegacyConfig",
"features.block.collision_shapes.MixinSoulSandBlock",
"features.block.interactions.MixinFenceBlock",
"features.movement.block.MixinBedBlock"
"old.viaversion.MixinWorldPacketRewriter1_19"
],
"injectors": {
"defaultRequire": 1