50 lines
1.9 KiB
Java
50 lines
1.9 KiB
Java
// SPDX-FileCopyrightText: 2024 The CC: Tweaked Developers
|
|
//
|
|
// SPDX-License-Identifier: MPL-2.0
|
|
|
|
package dan200.computercraft.mixin;
|
|
|
|
import com.llamalad7.mixinextras.injector.ModifyReturnValue;
|
|
import com.mojang.datafixers.DataFix;
|
|
import com.mojang.datafixers.TypeRewriteRule;
|
|
import com.mojang.datafixers.schemas.Schema;
|
|
import com.mojang.serialization.Dynamic;
|
|
import dan200.computercraft.shared.util.ComponentizationFixers;
|
|
import net.minecraft.util.datafix.fixes.ItemStackComponentizationFix;
|
|
import net.minecraft.util.datafix.fixes.References;
|
|
import org.spongepowered.asm.mixin.Mixin;
|
|
import org.spongepowered.asm.mixin.injection.At;
|
|
import org.spongepowered.asm.mixin.injection.Inject;
|
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
|
|
|
/**
|
|
* Migrates CC's item NBT to use components.
|
|
*
|
|
* @see V3818_3Mixin
|
|
* @see ComponentizationFixers
|
|
*/
|
|
@Mixin(ItemStackComponentizationFix.class)
|
|
abstract class ItemStackComponentizationFixMixin extends DataFix {
|
|
@SuppressWarnings("UnusedMethod")
|
|
private ItemStackComponentizationFixMixin(Schema outputSchema, boolean changesType) {
|
|
super(outputSchema, changesType);
|
|
}
|
|
|
|
@Inject(method = "fixItemStack", at = @At("TAIL"))
|
|
@SuppressWarnings("UnusedMethod")
|
|
private static void fixItemStack(ItemStackComponentizationFix.ItemStackData data, Dynamic<?> ops, CallbackInfo ci) {
|
|
ComponentizationFixers.fixItemComponents(data, ops);
|
|
}
|
|
|
|
@ModifyReturnValue(method = "makeRule", at = @At("RETURN"), remap = false)
|
|
@SuppressWarnings("UnusedMethod")
|
|
private TypeRewriteRule wrapMakeRule(TypeRewriteRule existing) {
|
|
return TypeRewriteRule.seq(existing, fixTypeEverywhereTyped(
|
|
"Turtle upgrade componentization",
|
|
getInputSchema().getType(References.BLOCK_ENTITY),
|
|
getOutputSchema().getType(References.BLOCK_ENTITY),
|
|
ComponentizationFixers.makeBlockEntityRewrites(getInputSchema(), getOutputSchema())
|
|
));
|
|
}
|
|
}
|