Fixed loading priority issues

This commit is contained in:
FlorianMichael 2023-03-18 02:19:38 +01:00
parent d5f50cc01f
commit 572f6203df
5 changed files with 28 additions and 106 deletions

View File

@ -19,6 +19,7 @@ package de.florianmichael.viafabricplus.definition;
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion;
import de.florianmichael.viafabricplus.event.ChangeProtocolVersionCallback;
import de.florianmichael.vialoadingbase.ViaLoadingBase;
import de.florianmichael.vialoadingbase.platform.ComparableProtocolVersion;
import de.florianmichael.vialoadingbase.platform.ProtocolRange;
import net.minecraft.item.Item;
@ -39,16 +40,19 @@ public class ItemReleaseVersionDefinition {
public static void create() {
INSTANCE = new ItemReleaseVersionDefinition();
INSTANCE.load();
INSTANCE.update(ViaLoadingBase.getClassWrapper().getTargetVersion());
ChangeProtocolVersionCallback.EVENT.register(protocolVersion -> {
INSTANCE.currentMap.clear();
INSTANCE.currentMap.addAll(Registries.ITEM.stream().filter(item -> INSTANCE.contains(item, protocolVersion)).toList());
});
ChangeProtocolVersionCallback.EVENT.register(protocolVersion -> INSTANCE.update(protocolVersion));
}
private final Map<Item, ProtocolRange[]> itemMap = new HashMap<>();
private final List<Item> currentMap = new ArrayList<>();
public void update(final ComparableProtocolVersion protocolVersion) {
INSTANCE.currentMap.clear();
INSTANCE.currentMap.addAll(Registries.ITEM.stream().filter(item -> INSTANCE.contains(item, protocolVersion)).toList());
}
public boolean contains(final Item item, final ComparableProtocolVersion protocolVersion) {
if (!itemMap.containsKey(item)) return true;

View File

@ -1,29 +0,0 @@
/*
* This file is part of ViaFabricPlus - https://github.com/FlorianMichael/ViaFabricPlus
* Copyright (C) 2021-2023 FlorianMichael/EnZaXD 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 de.florianmichael.viafabricplus.injection.access;
import de.florianmichael.vialoadingbase.platform.ComparableProtocolVersion;
public interface IItemGroup_DisplayContext {
ComparableProtocolVersion viafabricplus_getVersion();
void viafabricplus_setVersion(final ComparableProtocolVersion comparableProtocolVersion);
boolean viafabricplus_isState();
void viafabricplus_setState(final boolean state);
}

View File

@ -1,64 +0,0 @@
/*
* This file is part of ViaFabricPlus - https://github.com/FlorianMichael/ViaFabricPlus
* Copyright (C) 2021-2023 FlorianMichael/EnZaXD 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 de.florianmichael.viafabricplus.injection.mixin.fixes.minecraft.item;
import de.florianmichael.viafabricplus.injection.access.IItemGroup_DisplayContext;
import de.florianmichael.viafabricplus.settings.groups.GeneralSettings;
import de.florianmichael.vialoadingbase.ViaLoadingBase;
import de.florianmichael.vialoadingbase.platform.ComparableProtocolVersion;
import net.minecraft.item.ItemGroup;
import net.minecraft.resource.featuretoggle.FeatureSet;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Unique;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Redirect;
@Mixin(ItemGroup.DisplayContext.class)
public class MixinItemGroup_DisplayContext implements IItemGroup_DisplayContext {
@Unique
private static ComparableProtocolVersion viafabricplus_version;
@Unique
private static boolean viafabricplus_state;
@Redirect(method = "doesNotMatch", at = @At(value = "INVOKE", target = "Lnet/minecraft/resource/featuretoggle/FeatureSet;equals(Ljava/lang/Object;)Z"))
private boolean adjustLastVersionMatchCheck(FeatureSet instance, Object o) {
return instance.equals(o) && viafabricplus_version == ViaLoadingBase.getClassWrapper().getTargetVersion() && viafabricplus_state == GeneralSettings.INSTANCE.removeNotAvailableItemsFromCreativeTab.getValue();
}
@Override
public ComparableProtocolVersion viafabricplus_getVersion() {
return viafabricplus_version;
}
@Override
public void viafabricplus_setVersion(ComparableProtocolVersion comparableProtocolVersion) {
viafabricplus_version = comparableProtocolVersion;
}
@Override
public boolean viafabricplus_isState() {
return viafabricplus_state;
}
@Override
public void viafabricplus_setState(boolean state) {
viafabricplus_state = state;
}
}

View File

@ -17,7 +17,6 @@
*/
package de.florianmichael.viafabricplus.injection.mixin.fixes.minecraft.item;
import de.florianmichael.viafabricplus.injection.access.IItemGroup_DisplayContext;
import de.florianmichael.viafabricplus.settings.groups.GeneralSettings;
import de.florianmichael.vialoadingbase.ViaLoadingBase;
import de.florianmichael.vialoadingbase.platform.ComparableProtocolVersion;
@ -31,19 +30,32 @@ import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.Unique;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.Redirect;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
@Mixin(ItemGroups.class)
public class MixinItemGroups {
public abstract class MixinItemGroups {
@Shadow @Nullable private static ItemGroup.@Nullable DisplayContext displayContext;
@Inject(method = "updateDisplayContext", at = @At(value = "INVOKE", target = "Lnet/minecraft/item/ItemGroups;updateEntries(Lnet/minecraft/item/ItemGroup$DisplayContext;)V", shift = At.Shift.BEFORE))
private static void trackLastVersion(FeatureSet enabledFeatures, boolean operatorEnabled, RegistryWrapper.WrapperLookup lookup, CallbackInfoReturnable<Boolean> cir) {
final IItemGroup_DisplayContext accessor = (IItemGroup_DisplayContext) (Object) displayContext;
@Shadow
protected static void updateEntries(ItemGroup.DisplayContext displayContext) {
}
@Unique
private static ComparableProtocolVersion viafabricplus_version;
accessor.viafabricplus_setVersion(ViaLoadingBase.getClassWrapper().getTargetVersion());
accessor.viafabricplus_setState(GeneralSettings.INSTANCE.removeNotAvailableItemsFromCreativeTab.getValue());
@Unique
private static boolean viafabricplus_state;
@Inject(method = "updateDisplayContext", at = @At("HEAD"), cancellable = true)
private static void trackLastVersion(FeatureSet enabledFeatures, boolean operatorEnabled, RegistryWrapper.WrapperLookup lookup, CallbackInfoReturnable<Boolean> cir) {
if (viafabricplus_version != ViaLoadingBase.getClassWrapper().getTargetVersion() || viafabricplus_state != GeneralSettings.INSTANCE.removeNotAvailableItemsFromCreativeTab.getValue()) {
viafabricplus_version = ViaLoadingBase.getClassWrapper().getTargetVersion();
viafabricplus_state = GeneralSettings.INSTANCE.removeNotAvailableItemsFromCreativeTab.getValue();
displayContext = new ItemGroup.DisplayContext(enabledFeatures, operatorEnabled, lookup);
updateEntries(displayContext);
cir.setReturnValue(true);
}
}
}

View File

@ -144,7 +144,6 @@
"fixes.jsonwebtoken.MixinClasses",
"fixes.jsonwebtoken.MixinDefaultCompressionCodecResolver",
"fixes.jsonwebtoken.MixinDefaultJwtParserBuilder",
"fixes.minecraft.item.MixinItemGroup_DisplayContext",
"fixes.viabedrock.MixinBedrockProtocol",
"fixes.viabedrock.MixinJoinPackets"
],