diff --git a/src/main/java/de/srendi/advancedperipherals/common/addons/computercraft/owner/FuelAbility.java b/src/main/java/de/srendi/advancedperipherals/common/addons/computercraft/owner/FuelAbility.java index 391d637c1..1cd3c5861 100644 --- a/src/main/java/de/srendi/advancedperipherals/common/addons/computercraft/owner/FuelAbility.java +++ b/src/main/java/de/srendi/advancedperipherals/common/addons/computercraft/owner/FuelAbility.java @@ -9,6 +9,7 @@ import org.jetbrains.annotations.NotNull; import java.util.Map; +import java.util.Optional; import static de.srendi.advancedperipherals.common.setup.DataComponents.FUEL_CONSUMPTION_RATE; @@ -30,7 +31,8 @@ public FuelAbility(@NotNull T owner) { */ protected int getConsumptionRate() { DataComponentPatch settings = owner.getDataStorage(); - int rate = settings.get(FUEL_CONSUMPTION_RATE.get()).get(); + Optional opt = settings.get(FUEL_CONSUMPTION_RATE.get()); + int rate = opt != null && opt.isPresent() ? opt.get() : 0; if (rate == 0) { setConsumptionRate(DEFAULT_FUEL_CONSUMING_RATE); return DEFAULT_FUEL_CONSUMING_RATE; diff --git a/src/main/java/de/srendi/advancedperipherals/common/addons/computercraft/peripheral/plugins/AutomataWarpingPlugin.java b/src/main/java/de/srendi/advancedperipherals/common/addons/computercraft/peripheral/plugins/AutomataWarpingPlugin.java index 012c9440d..f93e8df21 100644 --- a/src/main/java/de/srendi/advancedperipherals/common/addons/computercraft/peripheral/plugins/AutomataWarpingPlugin.java +++ b/src/main/java/de/srendi/advancedperipherals/common/addons/computercraft/peripheral/plugins/AutomataWarpingPlugin.java @@ -54,6 +54,13 @@ protected Pair getPointData() { return Pair.onlyRight(settings.get(POINT_DATA_MARK.get())); } + protected void setPointData(@NotNull CompoundTag data) { + TurtlePeripheralOwner owner = automataCore.getPeripheralOwner(); + PatchedDataComponentMap settings = PatchedDataComponentMap.fromPatch(DataComponentMap.EMPTY, owner.getDataStorage()); + settings.set(POINT_DATA_MARK.get(), data); + owner.putDataStorage(settings.asPatch()); + } + private int getWarpCost(SingleOperationContext context) { FuelAbility fuelAbility = automataCore.getPeripheralOwner().getAbility(PeripheralOwnerAbility.FUEL); Objects.requireNonNull(fuelAbility); @@ -72,6 +79,7 @@ public final MethodResult savePoint(String name) { return MethodResult.of(null, "Cannot add new point, limit reached"); data.put(name, NBTUtil.toNBT(automataCore.getPeripheralOwner().getPos())); + setPointData(data); return MethodResult.of(true); } @@ -87,6 +95,7 @@ public final MethodResult deletePoint(String name) { return MethodResult.of(null, "Cannot find point to delete"); data.remove(name); + setPointData(data); return MethodResult.of(true); } diff --git a/src/main/java/de/srendi/advancedperipherals/common/util/fakeplayer/APFakePlayer.java b/src/main/java/de/srendi/advancedperipherals/common/util/fakeplayer/APFakePlayer.java index 38757be4f..f284cac03 100644 --- a/src/main/java/de/srendi/advancedperipherals/common/util/fakeplayer/APFakePlayer.java +++ b/src/main/java/de/srendi/advancedperipherals/common/util/fakeplayer/APFakePlayer.java @@ -311,6 +311,11 @@ public HitResult findHit(boolean skipEntity, boolean skipBlock, @Nullable Predic if (level().isEmptyBlock(blockPos) || blockPos.equals(blockPosition())) { return null; } + BlockHitResult shaped = traceContext.getBlockShape(level().getBlockState(blockPos), level(), blockPos) + .clip(rayTraceContext.getFrom(), rayTraceContext.getTo(), blockPos); + if (shaped != null && shaped.getType() != HitResult.Type.MISS) { + return shaped; + } return new BlockHitResult(new Vec3(blockPos.getX(), blockPos.getY(), blockPos.getZ()), traceDirection, blockPos, false); }, rayTraceContext -> BlockHitResult.miss(rayTraceContext.getTo(), traceDirection, new BlockPos((int) rayTraceContext.getTo().x, (int) rayTraceContext.getTo().y, (int) rayTraceContext.getTo().z))); }