diff --git a/.gitignore b/.gitignore index 3f7b46cdd9..ad545bf8f0 100644 --- a/.gitignore +++ b/.gitignore @@ -36,6 +36,9 @@ local.properties .settings/ .loadpath +## VSCode/VSCodium +.vscode/* + # External tool builders .externalToolBuilders/ @@ -57,3 +60,4 @@ local.properties Ponder Ponder/ .Ponder/ +.vscode/launch.json diff --git a/src/main/java/com/simibubi/create/content/equipment/armor/DivingHelmetItem.java b/src/main/java/com/simibubi/create/content/equipment/armor/DivingHelmetItem.java index a322c418bc..99274eef01 100644 --- a/src/main/java/com/simibubi/create/content/equipment/armor/DivingHelmetItem.java +++ b/src/main/java/com/simibubi/create/content/equipment/armor/DivingHelmetItem.java @@ -10,6 +10,8 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.entity.LivingEntity; diff --git a/src/main/java/com/simibubi/create/content/equipment/armor/RemainingAirOverlay.java b/src/main/java/com/simibubi/create/content/equipment/armor/RemainingAirOverlay.java index 60a2368936..2c397fca3f 100644 --- a/src/main/java/com/simibubi/create/content/equipment/armor/RemainingAirOverlay.java +++ b/src/main/java/com/simibubi/create/content/equipment/armor/RemainingAirOverlay.java @@ -11,6 +11,7 @@ import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.player.LocalPlayer; import net.minecraft.network.chat.Component; +import net.minecraft.tags.FluidTags; import net.minecraft.util.StringUtil; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.GameType; diff --git a/src/main/java/com/simibubi/create/content/kinetics/belt/BeltBlock.java b/src/main/java/com/simibubi/create/content/kinetics/belt/BeltBlock.java index 0f4dddc8a9..b523628c8d 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/belt/BeltBlock.java +++ b/src/main/java/com/simibubi/create/content/kinetics/belt/BeltBlock.java @@ -216,19 +216,18 @@ public void entityInside(BlockState state, Level worldIn, BlockPos pos, Entity e if (BeltTunnelInteractionHandler.getTunnelOnPosition(worldIn, pos) != null) return; withBlockEntityDo(worldIn, pos, be -> { - ItemEntity itemEntity = (ItemEntity) entityIn; Storage handler = be.getItemStorage(null); if (handler == null) return; - ItemStack inEntity = itemEntity.getItem(); try (Transaction t = TransferUtil.getTransaction()) { - long inserted = handler.insert(ItemVariant.of(inEntity), inEntity.getCount(), t); + long inserted = handler.insert(ItemVariant.of(asItem), asItem.getCount(), t); + asItem.shrink((int) inserted); if (inserted == 0) return; - if (inEntity.getCount() == inserted) { - itemEntity.discard(); - } else { - inEntity.shrink((int) inserted); + if (asItem.getCount() == inserted) { + entityIn.discard(); + } else if (entityIn instanceof ItemEntity itemEntity && asItem.getCount() != itemEntity.getItem().getCount()) { + itemEntity.setItem(asItem); } t.commit(); } diff --git a/src/main/java/com/simibubi/create/content/logistics/box/PackageEntity.java b/src/main/java/com/simibubi/create/content/logistics/box/PackageEntity.java index ba931b0726..dd51b48e83 100644 --- a/src/main/java/com/simibubi/create/content/logistics/box/PackageEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/box/PackageEntity.java @@ -207,7 +207,7 @@ public EntityDimensions getDimensions(Pose pPose) { @Override public void recreateFromPacket(ClientboundAddEntityPacket packet) { - this.setDeltaMovement(packet.getXa(), packet.getYa(), packet.getZa()); + super.recreateFromPacket(packet); this.clientPosition = this.position(); } diff --git a/src/main/java/com/simibubi/create/content/logistics/packager/PackagerBlockEntity.java b/src/main/java/com/simibubi/create/content/logistics/packager/PackagerBlockEntity.java index df0c849197..1cb41dda6a 100644 --- a/src/main/java/com/simibubi/create/content/logistics/packager/PackagerBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/packager/PackagerBlockEntity.java @@ -358,26 +358,22 @@ public boolean unwrapBox(ItemStack box, TransactionContext ctx) { BlockPos target = worldPosition.relative(facing.getOpposite()); BlockState targetState = level.getBlockState(target); - UnpackingHandler handler = UnpackingHandler.REGISTRY.get(targetState); + UnpackingHandler handler = UnpackingHandler.REGISTRY.get(targetState); UnpackingHandler toUse = handler != null ? handler : UnpackingHandler.DEFAULT; // fabric: copy the items to actually unpack later List copy = items.stream().map(ItemStack::copy).toList(); // note: handler may modify the passed items - boolean unpacked = toUse.unpack(level, target, targetState, facing, items, orderContext, true); + boolean unpacked = toUse.unpack(level, target, targetState, facing, items, orderContext, false); if (unpacked) { - TransactionCallback.onSuccess(ctx, () -> { - toUse.unpack(level, target, targetState, facing, copy, orderContext, false); - previouslyUnwrapped = box; - animationInward = true; - animationTicks = CYCLE; - notifyUpdate(); - }); + previouslyUnwrapped = box; + animationInward = true; + animationTicks = CYCLE; } - return true; + return unpacked; } public void attemptToSend(List queuedRequests) { diff --git a/src/main/java/com/simibubi/create/content/logistics/packager/PackagerItemHandler.java b/src/main/java/com/simibubi/create/content/logistics/packager/PackagerItemHandler.java index 5b074be7ca..8a0927249f 100644 --- a/src/main/java/com/simibubi/create/content/logistics/packager/PackagerItemHandler.java +++ b/src/main/java/com/simibubi/create/content/logistics/packager/PackagerItemHandler.java @@ -8,13 +8,16 @@ import net.fabricmc.fabric.api.transfer.v1.storage.StoragePreconditions; import net.fabricmc.fabric.api.transfer.v1.storage.base.SingleSlotStorage; import net.fabricmc.fabric.api.transfer.v1.transaction.TransactionContext; - +import net.fabricmc.fabric.api.transfer.v1.transaction.TransactionContext.Result; +import net.fabricmc.fabric.api.transfer.v1.transaction.base.SnapshotParticipant; import io.github.fabricators_of_create.porting_lib.transfer.callbacks.TransactionCallback; -public class PackagerItemHandler implements SingleSlotStorage { +public class PackagerItemHandler extends SnapshotParticipant implements SingleSlotStorage { private final PackagerBlockEntity blockEntity; + private boolean unpackSuccessful = false; + public PackagerItemHandler(PackagerBlockEntity blockEntity) { this.blockEntity = blockEntity; } @@ -27,8 +30,9 @@ public long insert(ItemVariant resource, long maxAmount, TransactionContext tran if (!PackageItem.isPackage(resource)) return 0; ItemStack stack = resource.toStack(1); + this.updateSnapshots(transaction); if (blockEntity.unwrapBox(stack, transaction)) { - TransactionCallback.onSuccess(transaction, blockEntity::scheduleStockCheck); + this.unpackSuccessful = true; return 1; } else { return 0; @@ -43,9 +47,8 @@ public long extract(ItemVariant resource, long maxAmount, TransactionContext tra ItemStack box = blockEntity.heldBox; if (!resource.matches(box)) return 0; - + this.updateSnapshots(transaction); blockEntity.heldBox = ItemStack.EMPTY; - TransactionCallback.onSuccess(transaction, blockEntity::notifyUpdate); return box.getCount(); } @@ -68,4 +71,23 @@ public long getAmount() { public long getCapacity() { return 1; } + + @Override + protected ItemStack createSnapshot() { + return blockEntity.heldBox.copy(); + } + + @Override + protected void readSnapshot(ItemStack snapshot) { + blockEntity.heldBox = snapshot; + } + + @Override + protected void onFinalCommit() { + if (this.unpackSuccessful) { + blockEntity.scheduleStockCheck(); + this.unpackSuccessful = false; + } + blockEntity.notifyUpdate(); + } } diff --git a/src/main/java/com/simibubi/create/content/logistics/vault/ItemVaultBlockEntity.java b/src/main/java/com/simibubi/create/content/logistics/vault/ItemVaultBlockEntity.java index 8595373016..1cb5e20ee0 100644 --- a/src/main/java/com/simibubi/create/content/logistics/vault/ItemVaultBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/vault/ItemVaultBlockEntity.java @@ -359,7 +359,7 @@ protected void initCapability() { } } - Storage combinedInvWrapper = new CombinedStorage<>(SameSizeCombinedInvWrapper.create(invs)); + Storage combinedInvWrapper = SameSizeCombinedInvWrapper.create(List.of(invs)); combinedInvWrapper = new VersionedInventoryWrapper(combinedInvWrapper); itemCapability = combinedInvWrapper; diff --git a/src/main/java/com/simibubi/create/impl/unpacking/CrafterUnpackingHandler.java b/src/main/java/com/simibubi/create/impl/unpacking/CrafterUnpackingHandler.java index be2e7fab67..a1e9d76371 100644 --- a/src/main/java/com/simibubi/create/impl/unpacking/CrafterUnpackingHandler.java +++ b/src/main/java/com/simibubi/create/impl/unpacking/CrafterUnpackingHandler.java @@ -20,7 +20,7 @@ import net.fabricmc.fabric.api.transfer.v1.item.ItemVariant; import net.fabricmc.fabric.api.transfer.v1.transaction.Transaction; - +import io.github.fabricators_of_create.porting_lib.transfer.TransferUtil; import io.github.fabricators_of_create.porting_lib.transfer.item.ItemHandlerHelper; public enum CrafterUnpackingHandler implements UnpackingHandler { @@ -43,7 +43,7 @@ public boolean unpack(Level level, BlockPos pos, BlockState state, Direction sid if (inventories.isEmpty()) return false; - try (Transaction t = Transaction.openOuter()) { + try (Transaction t = TransferUtil.getTransaction()) { // insert in the order's defined ordering int max = Math.min(inventories.size(), craftingContext.size()); outer: for (int i = 0; i < max; i++) { diff --git a/src/main/java/com/simibubi/create/impl/unpacking/DefaultUnpackingHandler.java b/src/main/java/com/simibubi/create/impl/unpacking/DefaultUnpackingHandler.java index 285606496d..332163a54a 100644 --- a/src/main/java/com/simibubi/create/impl/unpacking/DefaultUnpackingHandler.java +++ b/src/main/java/com/simibubi/create/impl/unpacking/DefaultUnpackingHandler.java @@ -7,6 +7,7 @@ import com.simibubi.create.api.packager.unpacking.UnpackingHandler; import com.simibubi.create.content.logistics.stockTicker.PackageOrderWithCrafts; +import io.github.fabricators_of_create.porting_lib.transfer.TransferUtil; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.world.item.ItemStack; @@ -30,7 +31,7 @@ public boolean unpack(Level level, BlockPos pos, BlockState state, Direction sid if (targetInv == null) return false; - try (Transaction t = Transaction.openOuter()) { + try (Transaction t = TransferUtil.getTransaction()) { for (ItemStack stack : items) { long inserted = targetInv.insert(ItemVariant.of(stack), stack.getCount(), t); if (inserted != stack.getCount()) {