Skip to content

Commit 7b22c17

Browse files
committed
fix interaction range and some crashes
1 parent cf41a62 commit 7b22c17

File tree

5 files changed

+30
-16
lines changed

5 files changed

+30
-16
lines changed

src/main/java/com/simibubi/create/content/kinetics/chainConveyor/ChainConveyorInteractionHandler.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import javax.annotation.Nullable;
77

88
import com.google.common.cache.Cache;
9-
import com.jamieswhiteshirt.reachentityattributes.ReachEntityAttributes;
109
import com.mojang.blaze3d.vertex.PoseStack;
1110
import com.mojang.blaze3d.vertex.VertexConsumer;
1211
import com.simibubi.create.AllBlocks;
@@ -17,6 +16,7 @@
1716
import com.simibubi.create.content.logistics.packagePort.PackagePortTargetSelectionHandler;
1817
import com.simibubi.create.foundation.utility.RaycastHelper;
1918
import com.simibubi.create.foundation.utility.TickBasedCache;
19+
import com.simibubi.create.foundation.utility.fabric.ReachUtil;
2020

2121
import net.createmod.catnip.data.WorldAttached;
2222
import net.createmod.catnip.outliner.Outliner;
@@ -53,8 +53,7 @@ public static void clientTick() {
5353
ItemStack mainHandItem = mc.player.getMainHandItem();
5454
boolean isWrench = AllItemTags.CHAIN_RIDEABLE.matches(mainHandItem);
5555
boolean dismantling = isWrench && mc.player.isShiftKeyDown();
56-
double range = mc.player.getAttribute(ReachEntityAttributes.REACH)
57-
.getValue() + 1;
56+
double range = ReachUtil.reach(mc.player) + 1;
5857

5958
Vec3 from = RaycastHelper.getTraceOrigin(mc.player);
6059
Vec3 to = RaycastHelper.getTraceTarget(mc.player, range, from);

src/main/java/com/simibubi/create/content/kinetics/chainConveyor/ChainPackageInteractionHandler.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44

55
import org.apache.commons.lang3.mutable.MutableBoolean;
66

7-
import com.jamieswhiteshirt.reachentityattributes.ReachEntityAttributes;
87
import com.simibubi.create.AllPackets;
98
import com.simibubi.create.foundation.utility.RaycastHelper;
9+
import com.simibubi.create.foundation.utility.fabric.ReachUtil;
1010

1111
import net.minecraft.client.Minecraft;
1212
import net.minecraft.core.BlockPos;
@@ -30,8 +30,7 @@ public static boolean onUse() {
3030
.expandTowards(0, 0.5, 0)
3131
.inflate(0.45);
3232

33-
double range = mc.player.getAttribute(ReachEntityAttributes.REACH)
34-
.getValue() + 1;
33+
double range = ReachUtil.reach(mc.player) + 1;
3534
Vec3 from = RaycastHelper.getTraceOrigin(mc.player);
3635
Vec3 to = RaycastHelper.getTraceTarget(mc.player, range, from);
3736

src/main/java/com/simibubi/create/content/logistics/packager/PackagerBlock.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313

1414
import net.minecraft.core.BlockPos;
1515
import net.minecraft.core.Direction;
16+
import net.minecraft.server.level.ServerLevel;
17+
import net.minecraft.util.RandomSource;
1618
import net.minecraft.world.InteractionHand;
1719
import net.minecraft.world.InteractionResult;
1820
import net.minecraft.world.entity.LivingEntity;
@@ -161,7 +163,13 @@ public void onNeighborChange(BlockState state, LevelReader level, BlockPos pos,
161163
if (neighbor.relative(state.getOptionalValue(FACING)
162164
.orElse(Direction.UP))
163165
.equals(pos))
164-
withBlockEntityDo(level, pos, PackagerBlockEntity::triggerStockCheck);
166+
withBlockEntityDo(level, pos, PackagerBlockEntity::scheduleStockCheck);
167+
}
168+
169+
// fabric: stock checks may be scheduled instead of immediate to avoid opening transactions at the wrong time
170+
@Override
171+
public void tick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) {
172+
withBlockEntityDo(level, pos, PackagerBlockEntity::triggerStockCheck);
165173
}
166174

167175
@Override

src/main/java/com/simibubi/create/content/logistics/packager/PackagerBlockEntity.java

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import java.util.HashSet;
44
import java.util.LinkedList;
55
import java.util.List;
6+
import java.util.Objects;
67
import java.util.Set;
78
import java.util.UUID;
89

@@ -163,6 +164,12 @@ public void tick() {
163164
}
164165
}
165166

167+
// fabric: cannot check stock from a transaction close callback
168+
public void scheduleStockCheck() {
169+
Objects.requireNonNull(this.level);
170+
this.level.scheduleTick(this.worldPosition, this.getBlockState().getBlock(), 1);
171+
}
172+
166173
public void triggerStockCheck() {
167174
getAvailableItems();
168175
}
@@ -464,23 +471,24 @@ public void attemptToSend(List<PackagingRequest> queuedRequests) {
464471

465472
for (StorageView<ItemVariant> view : targetInv.nonEmptyViews()) {
466473
try (Transaction t = Transaction.openOuter()) {
467-
int initialCount = requestQueue ? Math.min(64, nextRequest.getCount()) : 64;
468474
ItemVariant resource = view.getResource();
475+
boolean bulky = !resource.getItem().canFitInsideContainerItems();
476+
if (bulky && anyItemPresent)
477+
continue;
478+
479+
int initialCount = requestQueue ? Math.min(64, nextRequest.getCount()) : 64;
469480
long extractedAmount = view.extract(resource, initialCount, t);
470481
if (extractedAmount == 0)
471482
continue;
483+
472484
ItemStack extracted = resource.toStack((int) extractedAmount);
473485
if (requestQueue && !ItemHandlerHelper.canItemStacksStack(extracted, nextRequest.item()))
474486
continue;
475487

476-
boolean bulky = !extracted.getItem()
477-
.canFitInsideContainerItems();
478-
if (bulky && anyItemPresent)
488+
long inserted = extractedItems.insert(resource, extractedAmount, t);
489+
if (inserted != extractedAmount)
479490
continue;
480-
481491
anyItemPresent = true;
482-
long inserted = extractedItems.insert(resource, extractedAmount, t);
483-
long transferred = extractedAmount - inserted;
484492
t.commit();
485493

486494
if (extracted.getItem() instanceof PackageItem)
@@ -492,7 +500,7 @@ public void attemptToSend(List<PackagingRequest> queuedRequests) {
492500
continue;
493501
}
494502

495-
nextRequest.subtract((int) transferred);
503+
nextRequest.subtract((int) inserted);
496504

497505
if (!nextRequest.isEmpty()) {
498506
if (bulky)

src/main/java/com/simibubi/create/content/logistics/packager/PackagerItemHandler.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public long insert(ItemVariant resource, long maxAmount, TransactionContext tran
2828
return 0;
2929
ItemStack stack = resource.toStack(1);
3030
if (blockEntity.unwrapBox(stack, transaction)) {
31-
TransactionCallback.onSuccess(transaction, blockEntity::triggerStockCheck);
31+
TransactionCallback.onSuccess(transaction, blockEntity::scheduleStockCheck);
3232
return 1;
3333
} else {
3434
return 0;

0 commit comments

Comments
 (0)