mirror of
https://github.com/FabricMC/fabric.git
synced 2025-03-27 23:29:58 -04:00
24w10a
This commit is contained in:
parent
403ef19793
commit
031f0cf067
17 changed files with 68 additions and 63 deletions
fabric-api-lookup-api-v1/src/testmod/java/net/fabricmc/fabric/test/lookup/compat
fabric-content-registries-v0/src/main/java/net/fabricmc/fabric/mixin/content/registry
fabric-data-generation-api-v1/src
main/resources
testmod/java/net/fabricmc/fabric/test/datagen
fabric-entity-events-v1/src/main/java/net/fabricmc/fabric/api/entity/event/v1
fabric-item-api-v1/src
client/java/net/fabricmc/fabric/mixin/item/client
testmod/java/net/fabricmc/fabric/test/item/gametest
fabric-item-group-api-v1/src/main/java/net/fabricmc/fabric/api/itemgroup/v1
fabric-object-builder-api-v1/src
main/java/net/fabricmc/fabric/mixin/object/builder
testmod/java/net/fabricmc/fabric/test/object/builder
fabric-transfer-api-v1/src
main
java/net/fabricmc/fabric
impl/transfer/item
mixin/transfer
resources
testmod/java/net/fabricmc/fabric/test/transfer/gametests
|
@ -60,7 +60,7 @@ final class WrappedInventory implements ItemInsertable, ItemExtractable {
|
|||
if (inv.isValid(i, input)) {
|
||||
ItemStack stack = inv.getStack(i);
|
||||
|
||||
if (stack.isEmpty() || ItemStack.areItemsAndNbtEqual(stack, input)) {
|
||||
if (stack.isEmpty() || ItemStack.areItemsAndComponentsEqual(stack, input)) {
|
||||
int remainingSpace = Math.min(inv.getMaxCountPerStack(), stack.getItem().getMaxCount()) - stack.getCount();
|
||||
int inserted = Math.min(remainingSpace, input.getCount());
|
||||
|
||||
|
|
|
@ -24,14 +24,14 @@ import org.spongepowered.asm.mixin.injection.Inject;
|
|||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.class_9316;
|
||||
import net.minecraft.entity.ai.pathing.PathContext;
|
||||
import net.minecraft.entity.ai.pathing.PathNodeType;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.CollisionView;
|
||||
|
||||
import net.fabricmc.fabric.api.registry.LandPathNodeTypesRegistry;
|
||||
|
||||
@Mixin(class_9316.class)
|
||||
@Mixin(PathContext.class)
|
||||
public abstract class class_9316Mixin {
|
||||
@Shadow
|
||||
public abstract BlockState method_57623(BlockPos blockPos);
|
||||
|
@ -42,7 +42,7 @@ public abstract class class_9316Mixin {
|
|||
/**
|
||||
* Overrides the node type for the specified position, if the position is found as neighbor block in a path.
|
||||
*/
|
||||
@Inject(method = "method_57622", at = @At(value = "INVOKE_ASSIGN", target = "Lnet/minecraft/util/math/BlockPos$Mutable;set(III)Lnet/minecraft/util/math/BlockPos$Mutable;"), cancellable = true)
|
||||
@Inject(method = "getNodeType", at = @At(value = "INVOKE_ASSIGN", target = "Lnet/minecraft/util/math/BlockPos$Mutable;set(III)Lnet/minecraft/util/math/BlockPos$Mutable;"), cancellable = true)
|
||||
private void method_57622(int x, int y, int z, CallbackInfoReturnable<PathNodeType> cir, @Local BlockPos pos) {
|
||||
final PathNodeType neighborNodeType = LandPathNodeTypesRegistry.getPathNodeType(method_57623(pos), method_57621(), pos, true);
|
||||
|
||||
|
|
|
@ -320,12 +320,12 @@ transitive-extendable method net/minecraft/data/MetadataProvider getName ()Ljava
|
|||
transitive-extendable method net/minecraft/data/SnbtProvider getName ()Ljava/lang/String;
|
||||
transitive-extendable method net/minecraft/data/client/ModelProvider getName ()Ljava/lang/String;
|
||||
transitive-extendable method net/minecraft/data/dev/NbtProvider getName ()Ljava/lang/String;
|
||||
transitive-extendable method net/minecraft/data/report/BiomeParametersProvider getName ()Ljava/lang/String;
|
||||
transitive-extendable method net/minecraft/data/report/BlockListProvider getName ()Ljava/lang/String;
|
||||
transitive-extendable method net/minecraft/data/report/CommandSyntaxProvider getName ()Ljava/lang/String;
|
||||
transitive-extendable method net/minecraft/data/report/DynamicRegistriesProvider getName ()Ljava/lang/String;
|
||||
transitive-extendable method net/minecraft/data/report/ItemListProvider getName ()Ljava/lang/String;
|
||||
transitive-extendable method net/minecraft/data/report/RegistryDumpProvider getName ()Ljava/lang/String;
|
||||
transitive-extendable method net/minecraft/data/server/BiomeParametersProvider getName ()Ljava/lang/String;
|
||||
transitive-extendable method net/minecraft/data/server/DynamicRegistriesProvider getName ()Ljava/lang/String;
|
||||
transitive-extendable method net/minecraft/data/server/advancement/AdvancementProvider getName ()Ljava/lang/String;
|
||||
transitive-extendable method net/minecraft/data/server/loottable/LootTableProvider getName ()Ljava/lang/String;
|
||||
transitive-extendable method net/minecraft/data/server/recipe/RecipeProvider getName ()Ljava/lang/String;
|
||||
|
|
|
@ -164,10 +164,10 @@ public class DataGeneratorTestEntrypoint implements DataGeneratorEntrypoint {
|
|||
public void generate(RecipeExporter exporter) {
|
||||
offerPlanksRecipe2(exporter, SIMPLE_BLOCK, ItemTags.ACACIA_LOGS, 1);
|
||||
|
||||
ShapelessRecipeJsonBuilder.create(RecipeCategory.MISC, Items.LEATHER, 4).input(Items.ITEM_FRAME)
|
||||
ShapelessRecipeJsonBuilder.create(RecipeCategory.MISC, Items.DIAMOND_ORE, 4).input(Items.ITEM_FRAME)
|
||||
.criterion("has_frame", conditionsFromItem(Items.ITEM_FRAME))
|
||||
.offerTo(withConditions(exporter, DefaultResourceConditions.itemsRegistered(Blocks.DIAMOND_BLOCK)));
|
||||
ShapelessRecipeJsonBuilder.create(RecipeCategory.MISC, Items.LEATHER_BOOTS, 4).input(Items.ITEM_FRAME, 2)
|
||||
ShapelessRecipeJsonBuilder.create(RecipeCategory.MISC, Items.EMERALD, 4).input(Items.ITEM_FRAME, 2)
|
||||
.criterion("has_frame", conditionsFromItem(Items.ITEM_FRAME))
|
||||
.offerTo(withConditions(exporter, DefaultResourceConditions.registryContains(BiomeKeys.PLAINS, BiomeKeys.BADLANDS)));
|
||||
|
||||
|
|
|
@ -52,7 +52,7 @@ public interface FabricElytraItem {
|
|||
* A helper to perform the default vanilla elytra tick logic: damage the elytra every 20 ticks, and send a game event every 10 ticks.
|
||||
*/
|
||||
default void doVanillaElytraTick(LivingEntity entity, ItemStack chestStack) {
|
||||
int nextRoll = entity.getRoll() + 1;
|
||||
int nextRoll = entity.getFallFlyingTicks() + 1;
|
||||
|
||||
if (!entity.getWorld().isClient && nextRoll % 10 == 0) {
|
||||
if ((nextRoll / 10) % 2 == 0) {
|
||||
|
|
|
@ -45,12 +45,12 @@ public class ClientPlayerInteractionManagerMixin {
|
|||
@Redirect(
|
||||
at = @At(
|
||||
value = "INVOKE",
|
||||
target = "Lnet/minecraft/item/ItemStack;areItemsAndNbtEqual(Lnet/minecraft/item/ItemStack;Lnet/minecraft/item/ItemStack;)Z"
|
||||
target = "Lnet/minecraft/item/ItemStack;areItemsAndComponentsEqual(Lnet/minecraft/item/ItemStack;Lnet/minecraft/item/ItemStack;)Z"
|
||||
),
|
||||
method = "isCurrentlyBreaking"
|
||||
)
|
||||
private boolean fabricItemContinueBlockBreakingInject(ItemStack stack, ItemStack otherStack) {
|
||||
boolean stackUnchanged = ItemStack.areItemsAndNbtEqual(stack, this.selectedStack);
|
||||
boolean stackUnchanged = ItemStack.areItemsAndComponentsEqual(stack, this.selectedStack);
|
||||
|
||||
if (!stackUnchanged) {
|
||||
// The stack changed and vanilla is about to cancel block breaking progress. Check if the item wants to continue block breaking instead.
|
||||
|
|
|
@ -127,7 +127,7 @@ public class RecipeGameTest implements FabricGameTest {
|
|||
throw new GameTestException("Size doesnt match. " + extraErrorInfo);
|
||||
}
|
||||
|
||||
if (!ItemStack.areItemsAndNbtEqual(currentStack, expectedStack)) {
|
||||
if (!ItemStack.areItemsAndComponentsEqual(currentStack, expectedStack)) {
|
||||
throw new GameTestException("Stack doesnt match. " + extraErrorInfo);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -431,7 +431,7 @@ public class FabricItemGroupEntries implements ItemGroup.Entries {
|
|||
checkStacks(newStacks);
|
||||
|
||||
for (int i = 0; i < addTo.size(); i++) {
|
||||
if (ItemStack.areItemsAndNbtEqual(anchor, addTo.get(i))) {
|
||||
if (ItemStack.areItemsAndComponentsEqual(anchor, addTo.get(i))) {
|
||||
addTo.subList(i, i).addAll(newStacks);
|
||||
return;
|
||||
}
|
||||
|
@ -446,7 +446,7 @@ public class FabricItemGroupEntries implements ItemGroup.Entries {
|
|||
|
||||
// Iterate in reverse to add after the last match
|
||||
for (int i = addTo.size() - 1; i >= 0; i--) {
|
||||
if (ItemStack.areItemsAndNbtEqual(anchor, addTo.get(i))) {
|
||||
if (ItemStack.areItemsAndComponentsEqual(anchor, addTo.get(i))) {
|
||||
addTo.subList(i + 1, i + 1).addAll(newStacks);
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -25,12 +25,12 @@ import org.spongepowered.asm.mixin.injection.Inject;
|
|||
import org.spongepowered.asm.mixin.injection.Redirect;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||
|
||||
import net.minecraft.class_9306;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.registry.DefaultedRegistry;
|
||||
import net.minecraft.util.math.random.Random;
|
||||
import net.minecraft.village.TradeOffer;
|
||||
import net.minecraft.village.TradeOffers;
|
||||
import net.minecraft.village.TradedItem;
|
||||
import net.minecraft.village.VillagerType;
|
||||
|
||||
@Mixin(TradeOffers.TypeAwareBuyForOneEmeraldFactory.class)
|
||||
|
@ -50,8 +50,8 @@ public abstract class TradeOffersTypeAwareBuyForOneEmeraldFactoryMixin {
|
|||
* To prevent "item" -> "air" trades, if the result of a type aware trade is air, make sure no offer is created.
|
||||
*/
|
||||
@Inject(method = "create", at = @At(value = "NEW", target = "net/minecraft/village/TradeOffer"), cancellable = true)
|
||||
private void failOnNullItem(Entity entity, Random random, CallbackInfoReturnable<TradeOffer> cir, @Local() class_9306 buyingItem) {
|
||||
if (buyingItem.itemStack().isEmpty()) { // Will return true for an "empty" item stack that had null passed in the ctor
|
||||
private void failOnNullItem(Entity entity, Random random, CallbackInfoReturnable<TradeOffer> cir, @Local() TradedItem tradedItem) {
|
||||
if (tradedItem.itemStack().isEmpty()) { // Will return true for an "empty" item stack that had null passed in the ctor
|
||||
cir.setReturnValue(null); // Return null to prevent creation of empty trades
|
||||
}
|
||||
}
|
||||
|
|
|
@ -25,7 +25,6 @@ import java.util.Optional;
|
|||
|
||||
import com.mojang.brigadier.exceptions.SimpleCommandExceptionType;
|
||||
|
||||
import net.minecraft.class_9306;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.passive.WanderingTraderEntity;
|
||||
import net.minecraft.item.Item;
|
||||
|
@ -37,6 +36,7 @@ import net.minecraft.util.Identifier;
|
|||
import net.minecraft.util.math.random.Random;
|
||||
import net.minecraft.village.TradeOffer;
|
||||
import net.minecraft.village.TradeOffers;
|
||||
import net.minecraft.village.TradedItem;
|
||||
import net.minecraft.village.VillagerProfession;
|
||||
|
||||
import net.fabricmc.api.ModInitializer;
|
||||
|
@ -51,16 +51,16 @@ public class VillagerTypeTest1 implements ModInitializer {
|
|||
public void onInitialize() {
|
||||
TradeOfferHelper.registerVillagerOffers(VillagerProfession.ARMORER, 1, (factories, rebalanced) -> {
|
||||
Item scrap = rebalanced ? Items.NETHER_BRICK : Items.NETHERITE_SCRAP;
|
||||
factories.add(new SimpleTradeFactory(new TradeOffer(new class_9306(Items.GOLD_INGOT, 3), Optional.of(new class_9306(scrap, 4)), new ItemStack(Items.NETHERITE_INGOT), 2, 6, 0.15F)));
|
||||
factories.add(new SimpleTradeFactory(new TradeOffer(new TradedItem(Items.GOLD_INGOT, 3), Optional.of(new TradedItem(scrap, 4)), new ItemStack(Items.NETHERITE_INGOT), 2, 6, 0.15F)));
|
||||
});
|
||||
// Toolsmith is not rebalanced yet
|
||||
TradeOfferHelper.registerVillagerOffers(VillagerProfession.TOOLSMITH, 1, (factories, rebalanced) -> {
|
||||
Item scrap = rebalanced ? Items.NETHER_BRICK : Items.NETHERITE_SCRAP;
|
||||
factories.add(new SimpleTradeFactory(new TradeOffer(new class_9306(Items.GOLD_INGOT, 3), Optional.of(new class_9306(scrap, 4)), new ItemStack(Items.NETHERITE_INGOT), 2, 6, 0.15F)));
|
||||
factories.add(new SimpleTradeFactory(new TradeOffer(new TradedItem(Items.GOLD_INGOT, 3), Optional.of(new TradedItem(scrap, 4)), new ItemStack(Items.NETHERITE_INGOT), 2, 6, 0.15F)));
|
||||
});
|
||||
|
||||
TradeOfferHelper.registerWanderingTraderOffers(1, factories -> {
|
||||
factories.add(new SimpleTradeFactory(new TradeOffer(new class_9306(Items.GOLD_INGOT, 3), Optional.of(new class_9306(Items.NETHERITE_SCRAP, 4)), new ItemStack(Items.NETHERITE_INGOT), 2, 6, 0.35F)));
|
||||
factories.add(new SimpleTradeFactory(new TradeOffer(new TradedItem(Items.GOLD_INGOT, 3), Optional.of(new TradedItem(Items.NETHERITE_SCRAP, 4)), new ItemStack(Items.NETHERITE_INGOT), 2, 6, 0.35F)));
|
||||
});
|
||||
|
||||
TradeOfferHelper.registerRebalancedWanderingTraderOffers(builder -> {
|
||||
|
@ -68,28 +68,28 @@ public class VillagerTypeTest1 implements ModInitializer {
|
|||
FOOD_POOL_ID,
|
||||
5,
|
||||
Registries.ITEM.stream().filter(item -> item.getFoodComponent() != null).map(
|
||||
item -> new SimpleTradeFactory(new TradeOffer(new class_9306(Items.NETHERITE_INGOT), new ItemStack(item), 3, 4, 0.15F))
|
||||
item -> new SimpleTradeFactory(new TradeOffer(new TradedItem(Items.NETHERITE_INGOT), new ItemStack(item), 3, 4, 0.15F))
|
||||
).toList()
|
||||
);
|
||||
builder.addAll(
|
||||
THING_POOL_ID,
|
||||
new SimpleTradeFactory(new TradeOffer(new class_9306(Items.NETHERITE_INGOT), new ItemStack(Items.MOJANG_BANNER_PATTERN), 1, 4, 0.15F))
|
||||
new SimpleTradeFactory(new TradeOffer(new TradedItem(Items.NETHERITE_INGOT), new ItemStack(Items.MOJANG_BANNER_PATTERN), 1, 4, 0.15F))
|
||||
);
|
||||
builder.addOffersToPool(
|
||||
TradeOfferHelper.WanderingTraderOffersBuilder.BUY_ITEMS_POOL,
|
||||
new SimpleTradeFactory(new TradeOffer(new class_9306(Items.BLAZE_POWDER, 1), new ItemStack(Items.EMERALD, 4), 3, 4, 0.15F)),
|
||||
new SimpleTradeFactory(new TradeOffer(new class_9306(Items.NETHER_WART, 5), new ItemStack(Items.EMERALD, 1), 3, 4, 0.15F)),
|
||||
new SimpleTradeFactory(new TradeOffer(new class_9306(Items.GOLDEN_CARROT, 4), new ItemStack(Items.EMERALD, 1), 3, 4, 0.15F))
|
||||
new SimpleTradeFactory(new TradeOffer(new TradedItem(Items.BLAZE_POWDER, 1), new ItemStack(Items.EMERALD, 4), 3, 4, 0.15F)),
|
||||
new SimpleTradeFactory(new TradeOffer(new TradedItem(Items.NETHER_WART, 5), new ItemStack(Items.EMERALD, 1), 3, 4, 0.15F)),
|
||||
new SimpleTradeFactory(new TradeOffer(new TradedItem(Items.GOLDEN_CARROT, 4), new ItemStack(Items.EMERALD, 1), 3, 4, 0.15F))
|
||||
);
|
||||
builder.addOffersToPool(
|
||||
TradeOfferHelper.WanderingTraderOffersBuilder.SELL_SPECIAL_ITEMS_POOL,
|
||||
new SimpleTradeFactory(new TradeOffer(new class_9306(Items.EMERALD, 6), new ItemStack(Items.BRUSH, 1), 1, 4, 0.15F)),
|
||||
new SimpleTradeFactory(new TradeOffer(new class_9306(Items.DIAMOND, 16), new ItemStack(Items.ELYTRA, 1), 1, 4, 0.15F)),
|
||||
new SimpleTradeFactory(new TradeOffer(new class_9306(Items.EMERALD, 3), new ItemStack(Items.LEAD, 2), 3, 4, 0.15F))
|
||||
new SimpleTradeFactory(new TradeOffer(new TradedItem(Items.EMERALD, 6), new ItemStack(Items.BRUSH, 1), 1, 4, 0.15F)),
|
||||
new SimpleTradeFactory(new TradeOffer(new TradedItem(Items.DIAMOND, 16), new ItemStack(Items.ELYTRA, 1), 1, 4, 0.15F)),
|
||||
new SimpleTradeFactory(new TradeOffer(new TradedItem(Items.EMERALD, 3), new ItemStack(Items.LEAD, 2), 3, 4, 0.15F))
|
||||
);
|
||||
builder.addOffersToPool(
|
||||
FOOD_POOL_ID,
|
||||
new SimpleTradeFactory(new TradeOffer(new class_9306(Items.NETHERITE_INGOT), new ItemStack(Items.EGG), 3, 4, 0.15F))
|
||||
new SimpleTradeFactory(new TradeOffer(new TradedItem(Items.NETHERITE_INGOT), new ItemStack(Items.EGG), 3, 4, 0.15F))
|
||||
);
|
||||
});
|
||||
|
||||
|
|
|
@ -16,10 +16,10 @@
|
|||
|
||||
package net.fabricmc.fabric.test.object.builder;
|
||||
|
||||
import net.minecraft.class_9306;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.item.Items;
|
||||
import net.minecraft.village.TradeOffer;
|
||||
import net.minecraft.village.TradedItem;
|
||||
import net.minecraft.village.VillagerProfession;
|
||||
|
||||
import net.fabricmc.api.ModInitializer;
|
||||
|
@ -32,22 +32,22 @@ public class VillagerTypeTest2 implements ModInitializer {
|
|||
@Override
|
||||
public void onInitialize() {
|
||||
TradeOfferHelper.registerVillagerOffers(VillagerProfession.WEAPONSMITH, 1, factories -> {
|
||||
factories.add(new SimpleTradeFactory(new TradeOffer(new class_9306(Items.DIAMOND, 5), new ItemStack(Items.NETHERITE_INGOT), 3, 4, 0.15F)));
|
||||
factories.add(new SimpleTradeFactory(new TradeOffer(new TradedItem(Items.DIAMOND, 5), new ItemStack(Items.NETHERITE_INGOT), 3, 4, 0.15F)));
|
||||
});
|
||||
TradeOfferHelper.registerVillagerOffers(VillagerProfession.ARMORER, 1, factories -> {
|
||||
factories.add(new SimpleTradeFactory(new TradeOffer(new class_9306(Items.DIAMOND, 6), new ItemStack(Items.ELYTRA), 3, 4, 0.15F)));
|
||||
factories.add(new SimpleTradeFactory(new TradeOffer(new TradedItem(Items.DIAMOND, 6), new ItemStack(Items.ELYTRA), 3, 4, 0.15F)));
|
||||
});
|
||||
TradeOfferHelper.registerVillagerOffers(VillagerProfession.ARMORER, 1, factories -> {
|
||||
factories.add(new SimpleTradeFactory(new TradeOffer(new class_9306(Items.DIAMOND, 7), new ItemStack(Items.CHAINMAIL_BOOTS), 3, 4, 0.15F)));
|
||||
factories.add(new SimpleTradeFactory(new TradeOffer(new TradedItem(Items.DIAMOND, 7), new ItemStack(Items.CHAINMAIL_BOOTS), 3, 4, 0.15F)));
|
||||
});
|
||||
TradeOfferHelper.registerVillagerOffers(VillagerProfession.ARMORER, 1, factories -> {
|
||||
factories.add(new SimpleTradeFactory(new TradeOffer(new class_9306(Items.DIAMOND, 8), new ItemStack(Items.CHAINMAIL_CHESTPLATE), 3, 4, 0.15F)));
|
||||
factories.add(new SimpleTradeFactory(new TradeOffer(new TradedItem(Items.DIAMOND, 8), new ItemStack(Items.CHAINMAIL_CHESTPLATE), 3, 4, 0.15F)));
|
||||
});
|
||||
TradeOfferHelper.registerVillagerOffers(VillagerProfession.ARMORER, 1, factories -> {
|
||||
factories.add(new SimpleTradeFactory(new TradeOffer(new class_9306(Items.DIAMOND, 9), new ItemStack(Items.CHAINMAIL_HELMET), 3, 4, 0.15F)));
|
||||
factories.add(new SimpleTradeFactory(new TradeOffer(new TradedItem(Items.DIAMOND, 9), new ItemStack(Items.CHAINMAIL_HELMET), 3, 4, 0.15F)));
|
||||
});
|
||||
TradeOfferHelper.registerVillagerOffers(VillagerProfession.ARMORER, 1, factories -> {
|
||||
factories.add(new SimpleTradeFactory(new TradeOffer(new class_9306(Items.DIAMOND, 10), new ItemStack(Items.CHAINMAIL_LEGGINGS), 3, 4, 0.15F)));
|
||||
factories.add(new SimpleTradeFactory(new TradeOffer(new TradedItem(Items.DIAMOND, 10), new ItemStack(Items.CHAINMAIL_LEGGINGS), 3, 4, 0.15F)));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -163,7 +163,7 @@ class InventorySlotWrapper extends SingleStackStorage {
|
|||
original.set(type, null);
|
||||
}
|
||||
|
||||
original.copyComponentsFrom(currentStack.getComponents());
|
||||
original.applyComponentsFrom(currentStack.getComponents());
|
||||
}
|
||||
|
||||
// None is empty and the items and components match: just update the amount, and reuse the original stack.
|
||||
|
|
|
@ -73,7 +73,7 @@ public abstract class AbstractFurnaceBlockEntityMixin extends LockableContainerB
|
|||
ItemStack stack = newStack;
|
||||
|
||||
// Update cook time if needed. Code taken from AbstractFurnaceBlockEntity#setStack.
|
||||
boolean bl = !stack.isEmpty() && ItemStack.areItemsAndNbtEqual(stack, itemStack);
|
||||
boolean bl = !stack.isEmpty() && ItemStack.areItemsAndComponentsEqual(stack, itemStack);
|
||||
|
||||
if (!bl) {
|
||||
this.cookTimeTotal = getCookTime(this.world, (AbstractFurnaceBlockEntity) (Object) this);
|
||||
|
|
|
@ -16,12 +16,13 @@
|
|||
|
||||
package net.fabricmc.fabric.mixin.transfer;
|
||||
|
||||
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
|
||||
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
|
||||
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;
|
||||
|
||||
import net.minecraft.block.entity.LootableContainerBlockEntity;
|
||||
import net.minecraft.block.entity.LockableContainerBlockEntity;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
import net.fabricmc.fabric.impl.transfer.item.SpecialLogicInventory;
|
||||
|
@ -29,18 +30,18 @@ import net.fabricmc.fabric.impl.transfer.item.SpecialLogicInventory;
|
|||
/**
|
||||
* Defer markDirty until the outer transaction close callback when setStack is called from an inventory wrapper.
|
||||
*/
|
||||
@Mixin(LootableContainerBlockEntity.class)
|
||||
public class LootableContainerBlockEntityMixin implements SpecialLogicInventory {
|
||||
@Mixin(LockableContainerBlockEntity.class)
|
||||
public class LockableContainerBlockEntityMixin implements SpecialLogicInventory {
|
||||
@Unique
|
||||
private boolean fabric_suppressSpecialLogic = false;
|
||||
|
||||
@Redirect(
|
||||
at = @At(value = "INVOKE", target = "Lnet/minecraft/block/entity/LootableContainerBlockEntity;markDirty()V"),
|
||||
@WrapOperation(
|
||||
at = @At(value = "INVOKE", target = "Lnet/minecraft/block/entity/LockableContainerBlockEntity;markDirty()V"),
|
||||
method = "setStack(ILnet/minecraft/item/ItemStack;)V"
|
||||
)
|
||||
public void fabric_redirectMarkDirty(LootableContainerBlockEntity self) {
|
||||
public void fabric_redirectMarkDirty(LockableContainerBlockEntity instance, Operation<Void> original) {
|
||||
if (!fabric_suppressSpecialLogic) {
|
||||
self.markDirty();
|
||||
original.call(instance);
|
||||
}
|
||||
}
|
||||
|
|
@ -13,7 +13,7 @@
|
|||
"HopperBlockEntityMixin",
|
||||
"ItemMixin",
|
||||
"JukeboxBlockEntityMixin",
|
||||
"LootableContainerBlockEntityMixin",
|
||||
"LockableContainerBlockEntityMixin",
|
||||
"SimpleInventoryMixin"
|
||||
]
|
||||
}
|
||||
|
|
|
@ -119,6 +119,10 @@ public class VanillaStorageTests {
|
|||
context.setBlockState(comparatorPos, Blocks.COMPARATOR.getDefaultState().with(ComparatorBlock.FACING, Direction.WEST));
|
||||
|
||||
try (Transaction transaction = Transaction.openOuter()) {
|
||||
if (world.getBlockTickScheduler().isQueued(context.getAbsolutePos(comparatorPos), Blocks.COMPARATOR)) {
|
||||
throw new GameTestException("Comparator should not have a tick scheduled.");
|
||||
}
|
||||
|
||||
storage.insert(variant, 1000000, transaction);
|
||||
|
||||
// uncommitted insert should not schedule an update
|
||||
|
|
|
@ -2,9 +2,9 @@ org.gradle.jvmargs=-Xmx2560M
|
|||
org.gradle.parallel=true
|
||||
fabric.loom.multiProjectOptimisation=true
|
||||
|
||||
version=0.96.7
|
||||
minecraft_version=24w09a
|
||||
yarn_version=+build.5
|
||||
version=0.96.8
|
||||
minecraft_version=24w10a
|
||||
yarn_version=+build.1
|
||||
loader_version=0.15.6
|
||||
installer_version=0.11.1
|
||||
|
||||
|
@ -13,7 +13,7 @@ curseforge_minecraft_version=1.20.5-Snapshot
|
|||
|
||||
# Do not manually update, use the bumpversions task:
|
||||
fabric-api-base-version=0.4.38
|
||||
fabric-api-lookup-api-v1-version=1.6.54
|
||||
fabric-api-lookup-api-v1-version=1.6.55
|
||||
fabric-biome-api-v1-version=13.0.20
|
||||
fabric-block-api-v1-version=1.0.18
|
||||
fabric-block-view-api-v2-version=1.0.6
|
||||
|
@ -21,18 +21,18 @@ fabric-blockrenderlayer-v1-version=1.1.48
|
|||
fabric-command-api-v1-version=1.2.43
|
||||
fabric-command-api-v2-version=2.2.22
|
||||
fabric-commands-v0-version=0.2.60
|
||||
fabric-content-registries-v0-version=6.0.10
|
||||
fabric-content-registries-v0-version=6.0.11
|
||||
fabric-crash-report-info-v1-version=0.2.25
|
||||
fabric-data-attachment-api-v1-version=1.1.5
|
||||
fabric-data-generation-api-v1-version=17.0.1
|
||||
fabric-data-attachment-api-v1-version=1.1.6
|
||||
fabric-data-generation-api-v1-version=17.0.2
|
||||
fabric-dimensions-v1-version=2.1.64
|
||||
fabric-entity-events-v1-version=1.6.4
|
||||
fabric-entity-events-v1-version=1.6.5
|
||||
fabric-events-interaction-v0-version=0.7.4
|
||||
fabric-events-lifecycle-v0-version=0.2.80
|
||||
fabric-events-lifecycle-v0-version=0.2.81
|
||||
fabric-game-rule-api-v1-version=1.0.48
|
||||
fabric-gametest-api-v1-version=1.3.9
|
||||
fabric-item-api-v1-version=5.0.0
|
||||
fabric-item-group-api-v1-version=4.0.29
|
||||
fabric-item-api-v1-version=5.0.1
|
||||
fabric-item-group-api-v1-version=4.0.30
|
||||
fabric-key-binding-api-v1-version=1.0.43
|
||||
fabric-keybindings-v0-version=0.2.41
|
||||
fabric-lifecycle-events-v1-version=2.3.0
|
||||
|
@ -42,10 +42,10 @@ fabric-mining-level-api-v1-version=2.1.68
|
|||
fabric-model-loading-api-v1-version=1.0.10
|
||||
fabric-models-v0-version=0.4.9
|
||||
fabric-networking-api-v1-version=4.0.3
|
||||
fabric-object-builder-api-v1-version=14.0.7
|
||||
fabric-object-builder-api-v1-version=14.0.8
|
||||
fabric-particles-v1-version=2.0.0
|
||||
fabric-recipe-api-v1-version=4.0.0
|
||||
fabric-registry-sync-v0-version=5.0.7
|
||||
fabric-registry-sync-v0-version=5.0.8
|
||||
fabric-renderer-api-v1-version=3.2.9
|
||||
fabric-renderer-indigo-version=1.5.9
|
||||
fabric-renderer-registries-v1-version=3.2.57
|
||||
|
@ -56,9 +56,9 @@ fabric-rendering-v1-version=4.2.0
|
|||
fabric-resource-conditions-api-v1-version=2.3.18
|
||||
fabric-resource-loader-v0-version=0.11.23
|
||||
fabric-screen-api-v1-version=2.0.19
|
||||
fabric-screen-handler-api-v1-version=1.3.64
|
||||
fabric-screen-handler-api-v1-version=1.3.65
|
||||
fabric-sound-api-v1-version=1.0.19
|
||||
fabric-transfer-api-v1-version=5.0.1
|
||||
fabric-transfer-api-v1-version=5.0.2
|
||||
fabric-transitive-access-wideners-v1-version=6.0.6
|
||||
fabric-convention-tags-v1-version=1.5.13
|
||||
fabric-client-tags-api-v1-version=1.1.9
|
||||
|
|
Loading…
Add table
Reference in a new issue