diff --git a/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/attributes/InItemGroupAttribute.java b/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/attributes/InItemGroupAttribute.java index b9694e60c9..f171e94317 100644 --- a/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/attributes/InItemGroupAttribute.java +++ b/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/attributes/InItemGroupAttribute.java @@ -13,12 +13,12 @@ import com.simibubi.create.content.logistics.item.filter.attribute.AllItemAttrib import com.simibubi.create.content.logistics.item.filter.attribute.ItemAttribute; import com.simibubi.create.content.logistics.item.filter.attribute.ItemAttributeType; +import io.netty.buffer.ByteBuf; import net.createmod.catnip.codecs.stream.CatnipStreamCodecBuilders; import net.minecraft.core.registries.BuiltInRegistries; -import net.minecraft.core.registries.Registries; import net.minecraft.network.RegistryFriendlyByteBuf; -import net.minecraft.network.codec.ByteBufCodecs; import net.minecraft.network.codec.StreamCodec; +import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.item.CreativeModeTabs; import net.minecraft.world.item.ItemStack; @@ -29,8 +29,9 @@ public class InItemGroupAttribute implements ItemAttribute { .xmap(InItemGroupAttribute::new, i -> i.group) .fieldOf("value"); - public static final StreamCodec STREAM_CODEC = CatnipStreamCodecBuilders.nullable(ByteBufCodecs.registry(Registries.CREATIVE_MODE_TAB)) - .map(InItemGroupAttribute::new, i -> i.group); + public static final StreamCodec STREAM_CODEC = CatnipStreamCodecBuilders.nullable(ResourceLocation.STREAM_CODEC) + .map(i -> new InItemGroupAttribute(BuiltInRegistries.CREATIVE_MODE_TAB.get(i)), + i -> i.group == null ? null : BuiltInRegistries.CREATIVE_MODE_TAB.getKey(i.group)); @Nullable private CreativeModeTab group; diff --git a/src/main/java/com/simibubi/create/content/processing/recipe/ProcessingOutput.java b/src/main/java/com/simibubi/create/content/processing/recipe/ProcessingOutput.java index 2c5a364b97..719976a53f 100644 --- a/src/main/java/com/simibubi/create/content/processing/recipe/ProcessingOutput.java +++ b/src/main/java/com/simibubi/create/content/processing/recipe/ProcessingOutput.java @@ -78,23 +78,23 @@ public class ProcessingOutput { } private static final Codec> COMPAT_CODEC = ResourceLocation.CODEC.comapFlatMap( - loc -> DataResult.error(() -> "Compat cannot be deserialized"), - Pair::getFirst + loc -> DataResult.error(() -> "Compat cannot be deserialized"), + Pair::getFirst ); private static final Codec>> ITEM_CODEC = Codec.either( - ItemStack.ITEM_NON_AIR_CODEC.xmap(ItemStack::new, ItemStack::getItemHolder), - COMPAT_CODEC + ItemStack.SINGLE_ITEM_CODEC, + COMPAT_CODEC ); public static final Codec CODEC = RecordCodecBuilder.create(i -> i.group( - ITEM_CODEC.fieldOf("item").forGetter(ProcessingOutput::getCodecStack), - Codec.INT.optionalFieldOf("count", 1).forGetter(s -> { - if (s.compatDatagenOutput != null) - return s.compatDatagenOutput.getSecond(); - return s.getStack().getCount(); - }), - Codec.FLOAT.optionalFieldOf("chance", 1F).forGetter(s -> s.chance) + ITEM_CODEC.fieldOf("item").forGetter(ProcessingOutput::getCodecStack), + Codec.INT.optionalFieldOf("count", 1).forGetter(s -> { + if (s.compatDatagenOutput != null) + return s.compatDatagenOutput.getSecond(); + return s.getStack().getCount(); + }), + Codec.FLOAT.optionalFieldOf("chance", 1F).forGetter(s -> s.chance) ).apply(i, ProcessingOutput::fromCodec)); public void write(RegistryFriendlyByteBuf buf) { diff --git a/src/main/java/com/simibubi/create/foundation/mixin/PlayerMixin.java b/src/main/java/com/simibubi/create/foundation/mixin/PlayerMixin.java index f153f34d11..66b718a296 100644 --- a/src/main/java/com/simibubi/create/foundation/mixin/PlayerMixin.java +++ b/src/main/java/com/simibubi/create/foundation/mixin/PlayerMixin.java @@ -1,25 +1,21 @@ package com.simibubi.create.foundation.mixin; -import com.llamalad7.mixinextras.sugar.Local; -import com.simibubi.create.content.equipment.armor.CardboardArmorHandler; - -import com.simibubi.create.infrastructure.config.AllConfigs; - -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.Pose; - import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import com.llamalad7.mixinextras.injector.ModifyExpressionValue; +import com.llamalad7.mixinextras.sugar.Local; import com.simibubi.create.content.contraptions.AbstractContraptionEntity; +import com.simibubi.create.content.equipment.armor.CardboardArmorHandler; +import com.simibubi.create.infrastructure.config.AllConfigs; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.Pose; import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.Level; -@Mixin(Player.class) +@Mixin(value = Player.class, priority = 1500) public abstract class PlayerMixin extends LivingEntity { protected PlayerMixin(EntityType entityType, Level level) { super(entityType, level); @@ -27,7 +23,7 @@ public abstract class PlayerMixin extends LivingEntity { @ModifyExpressionValue(method = "canPlayerFitWithinBlocksAndEntitiesWhen", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/Level;noCollision(Lnet/minecraft/world/entity/Entity;Lnet/minecraft/world/phys/AABB;)Z")) public boolean create$playerHidingAsBoxIsCrouchingNotSwimming(boolean original, @Local(argsOnly = true) Pose pose) { - return original || (pose == Pose.CROUCHING && CardboardArmorHandler.testForStealth((Entity) (Object) this)); + return original || (pose == Pose.CROUCHING && CardboardArmorHandler.testForStealth(this)); } @ModifyExpressionValue(