Skip to content

Commit bd4f9d7

Browse files
authored
Merge pull request #670 from zyxkad/dev/0.8
Merge dev/1.19.2 into dev/0.8
2 parents c68ed10 + 6c856d7 commit bd4f9d7

File tree

6 files changed

+68
-38
lines changed

6 files changed

+68
-38
lines changed

CHANGELOG.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,20 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
66
to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

88
## [Unreleased]
9+
## [1.19.2-0.7.37r] - 2024-10-06
10+
11+
### Added
12+
- Wandering Trader config
13+
14+
### Changed
15+
- Safe the owner of the memory card to the inventory manager after a player places the card into the manager and clear the card after. Resolves a security issue where players could eventually steal memory cards from other players
16+
17+
### Fixed
18+
- [#660] Fixed that the inventory manager's `getItemInHand` function adds a blank nbt tag to the item
19+
- [#636] Fixed that the automata's `useOnBlock` function will return PASS in some specific case
20+
- [#645] Fixed that the inventory functions for the powah integration would always return nil
21+
- Fixed that some entity operations don't have enough range
22+
923
## [1.19.2-0.7.36r] - 2024-06-11
1024

1125
### Added

src/main/java/de/srendi/advancedperipherals/common/addons/appliedenergistics/AppEngApi.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -932,7 +932,7 @@ public static List<Object> listCells(IGridNode node) {
932932
if (!iterator.hasNext()) return items;
933933
while (iterator.hasNext()) {
934934
IStorageProvider entity = iterator.next().getService(IStorageProvider.class);
935-
if (entity == null || !(entity instanceof DriveBlockEntity drive))
935+
if (!(entity instanceof DriveBlockEntity drive))
936936
continue;
937937

938938
InternalInventory inventory = drive.getInternalInventory();

src/main/java/de/srendi/advancedperipherals/common/addons/computercraft/peripheral/plugins/AutomataEntityHandPlugin.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ public final MethodResult useOnAnimal(@NotNull IArguments arguments) throws LuaE
5656
if (automataCore.hasAttribute(AutomataCorePeripheral.ATTR_STORING_TOOL_DURABILITY))
5757
selectedTool.setDamageValue(previousDamageValue);
5858

59-
return MethodResult.of(true, result.toString());
59+
return MethodResult.of(result.consumesAction(), result.toString());
6060
});
6161
}
6262

src/main/java/de/srendi/advancedperipherals/common/addons/computercraft/peripheral/plugins/AutomataSoulFeedingPlugin.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public final MethodResult feedSoul() {
2424

2525
InteractionResult result = owner.withPlayer(APFakePlayer::useOnEntity);
2626
automataCore.addRotationCycle(3);
27-
return MethodResult.of(true, result.toString());
27+
return MethodResult.of(result.consumesAction(), result.toString());
2828
}
2929

3030
@Override

src/main/java/de/srendi/advancedperipherals/common/blocks/blockentities/InventoryManagerEntity.java

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -52,11 +52,16 @@ public boolean canPlaceItemThroughFace(int index, @NotNull ItemStack itemStackIn
5252

5353
@Override
5454
public void setItem(int index, @NotNull ItemStack stack) {
55-
if (stack.getItem() instanceof MemoryCardItem && stack.hasTag() && stack.getTag().contains("ownerId")) {
56-
UUID owner = stack.getTag().getUUID("ownerId");
57-
this.owner = owner;
58-
stack.getTag().remove("ownerId");
59-
stack.getTag().remove("owner");
55+
if (stack.getItem() instanceof MemoryCardItem) {
56+
if (stack.hasTag() && stack.getTag().contains("ownerId")) {
57+
UUID owner = stack.getTag().getUUID("ownerId");
58+
this.owner = owner;
59+
stack.getTag().remove("ownerId");
60+
stack.getTag().remove("owner");
61+
} else if (stack != this.getItem(index)) {
62+
// Only clear owner when the new card item is not the current item
63+
this.owner = null;
64+
}
6065
} else {
6166
this.owner = null;
6267
}

src/main/java/de/srendi/advancedperipherals/common/util/fakeplayer/APFakePlayer.java

Lines changed: 41 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@
4444

4545
import java.lang.ref.WeakReference;
4646
import java.util.List;
47-
import java.util.Optional;
4847
import java.util.UUID;
4948
import java.util.function.Function;
5049
import java.util.function.Predicate;
@@ -92,7 +91,6 @@ public boolean canAttack(@NotNull LivingEntity livingEntity) {
9291
public void openTextEdit(@NotNull SignBlockEntity sign) {
9392
}
9493

95-
9694
@Override
9795
public boolean isSilent() {
9896
return true;
@@ -318,46 +316,59 @@ public HitResult findHit(boolean skipEntity, boolean skipBlock, @Nullable Predic
318316
if (skipEntity)
319317
return blockHit;
320318

321-
List<Entity> entities = level.getEntities(this, getBoundingBox().expandTowards(look.x * range, look.y * range, look.z * range).inflate(1, 1, 1), collidablePredicate);
319+
List<Entity> entities = level.getEntities(this, getBoundingBox().expandTowards(look.x * range, look.y * range, look.z * range).inflate(1), collidablePredicate);
322320

323321
LivingEntity closestEntity = null;
324322
Vec3 closestVec = null;
325-
double closestDistance = range;
323+
double closestDistance = blockHit.getType() == HitResult.Type.MISS ? range * range : distanceToSqr(blockHit.getLocation());
326324
for (Entity entityHit : entities) {
327-
if (!(entityHit instanceof LivingEntity) || entityFilter != null && !entityFilter.test(entityHit))
325+
if (!(entityHit instanceof LivingEntity entity)) {
326+
continue;
327+
}
328+
// TODO: maybe let entityFilter returns the priority of the entity, instead of only returns the closest one.
329+
if (entityFilter != null && !entityFilter.test(entity)) {
330+
continue;
331+
}
332+
333+
// Removed a lot logic here to make Automata cores interact like a player.
334+
// However, the results for some edge cases may change. Need more review and tests.
335+
336+
// Hit vehicle before passenger
337+
if (entity.isPassenger()) {
328338
continue;
329-
// Add litter bigger that just pick radius
330-
AABB box = entityHit.getBoundingBox().inflate(entityHit.getPickRadius() + 0.5);
331-
Optional<Vec3> clipResult = box.clip(origin, target);
339+
}
332340

341+
AABB box = entity.getBoundingBox();
342+
Vec3 clipVec;
333343
if (box.contains(origin)) {
334-
if (closestDistance >= 0.0D) {
335-
closestEntity = (LivingEntity) entityHit;
336-
closestVec = clipResult.orElse(origin);
337-
closestDistance = 0.0D;
344+
clipVec = origin;
345+
} else {
346+
clipVec = box.clip(origin, target).orElse(null);
347+
if (clipVec == null) {
348+
continue;
338349
}
339-
} else if (clipResult.isPresent()) {
340-
Vec3 clipVec = clipResult.get();
341-
double distance = origin.distanceTo(clipVec);
342-
343-
if (distance < closestDistance || closestDistance == 0.0D) {
344-
if (entityHit == entityHit.getRootVehicle() && !entityHit.canRiderInteract()) {
345-
if (closestDistance == 0.0D) {
346-
closestEntity = (LivingEntity) entityHit;
347-
closestVec = clipVec;
348-
}
349-
} else {
350-
closestEntity = (LivingEntity) entityHit;
351-
closestVec = clipVec;
352-
closestDistance = distance;
353-
}
350+
}
351+
double distance = origin.distanceToSqr(clipVec);
352+
// Ignore small enough distance
353+
if (distance <= 1e-6) {
354+
distance = 0;
355+
}
356+
if (distance > closestDistance) {
357+
continue;
358+
}
359+
if (distance == closestDistance && closestEntity != null) {
360+
// Hit larger entity before smaller
361+
if (closestEntity.getBoundingBox().getSize() >= box.getSize()) {
362+
continue;
354363
}
355364
}
365+
closestEntity = entity;
366+
closestVec = clipVec;
367+
closestDistance = distance;
356368
}
357-
if (closestEntity != null && closestDistance <= range && (blockHit.getType() == HitResult.Type.MISS || distanceToSqr(blockHit.getLocation()) > closestDistance * closestDistance)) {
369+
if (closestEntity != null) {
358370
return new EntityHitResult(closestEntity, closestVec);
359-
} else {
360-
return blockHit;
361371
}
372+
return blockHit;
362373
}
363374
}

0 commit comments

Comments
 (0)