9
0
mirror of https://github.com/Xiao-MoMi/craft-engine.git synced 2025-12-26 02:19:23 +00:00

避免重复座椅

This commit is contained in:
XiaoMoMi
2025-12-22 04:03:42 +08:00
parent ddcc048b96
commit 5fea9665ff
2 changed files with 18 additions and 7 deletions

View File

@@ -14,9 +14,11 @@ import net.momirealms.craftengine.core.entity.furniture.hitbox.FurnitureHitBoxCo
import net.momirealms.craftengine.core.entity.furniture.hitbox.FurnitureHitboxPart;
import net.momirealms.craftengine.core.entity.player.Player;
import net.momirealms.craftengine.core.entity.seat.Seat;
import net.momirealms.craftengine.core.entity.seat.SeatOwner;
import net.momirealms.craftengine.core.plugin.CraftEngine;
import net.momirealms.craftengine.core.plugin.entityculling.CullingData;
import net.momirealms.craftengine.core.util.Key;
import net.momirealms.craftengine.core.util.LazyReference;
import net.momirealms.craftengine.core.util.QuaternionUtils;
import net.momirealms.craftengine.core.world.Cullable;
import net.momirealms.craftengine.core.world.Vec3d;
@@ -28,10 +30,7 @@ import org.jetbrains.annotations.Nullable;
import org.joml.Quaternionf;
import org.joml.Vector3f;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.UUID;
import java.util.*;
import java.util.concurrent.CompletableFuture;
public abstract class Furniture implements Cullable {
@@ -107,12 +106,24 @@ public abstract class Furniture implements Cullable {
FurnitureHitBoxConfig<?>[] furnitureHitBoxConfigs = variant.hitBoxConfigs();
ObjectArrayList<Collider> colliders = new ObjectArrayList<>(furnitureHitBoxConfigs.length);
this.hitboxes = new FurnitureHitBox[furnitureHitBoxConfigs.length];
// 辅助map用于排除重复的座椅
LazyReference<Map<Vector3f, Seat<FurnitureHitBox>>> seatMap = LazyReference.lazyReference(HashMap::new);
for (int i = 0; i < furnitureHitBoxConfigs.length; i++) {
FurnitureHitBox hitbox = furnitureHitBoxConfigs[i].create(this);
this.hitboxes[i] = hitbox;
for (FurnitureHitboxPart part : hitbox.parts()) {
this.hitboxMap.put(part.entityId(), hitbox);
}
Seat<FurnitureHitBox>[] seats = hitbox.seats();
for (int index = 0; index < seats.length; index++) {
Map<Vector3f, Seat<FurnitureHitBox>> tempMap = seatMap.get();
Vector3f seatPos = seats[i].config().position();
if (tempMap.containsKey(seatPos)) {
seats[i] = tempMap.get(seatPos);
} else {
tempMap.put(seatPos, seats[i]);
}
}
hitbox.collectVirtualEntityId(virtualEntityIds::addLast);
colliders.addAll(hitbox.colliders());
}

View File

@@ -1,7 +1,7 @@
org.gradle.jvmargs=-Xmx4G
# Project settings
project_version=0.0.66.7
project_version=0.0.66.8
config_version=65
lang_version=47
project_group=net.momirealms
@@ -57,8 +57,8 @@ jimfs_version=1.3.1
authlib_version=7.0.60
concurrent_util_version=0.0.8-SNAPSHOT
bucket4j_version=8.15.0
itembridge_version=1.0.13
levelerbridge_version=1.0.1
itembridge_version=1.0.14
levelerbridge_version=1.0.2
# Proxy settings
systemProp.socks.proxyHost=127.0.0.1