mirror of
https://github.com/Xiao-MoMi/craft-engine.git
synced 2025-12-29 11:59:11 +00:00
家具重构part4
This commit is contained in:
@@ -10,6 +10,7 @@ import net.momirealms.craftengine.core.entity.furniture.element.FurnitureElement
|
||||
import net.momirealms.craftengine.core.entity.furniture.element.FurnitureElementConfig;
|
||||
import net.momirealms.craftengine.core.entity.furniture.hitbox.FurnitureHitBox;
|
||||
import net.momirealms.craftengine.core.entity.furniture.hitbox.FurnitureHitBoxConfig;
|
||||
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.plugin.entityculling.CullingData;
|
||||
@@ -24,13 +25,12 @@ import org.jetbrains.annotations.Nullable;
|
||||
import org.joml.Quaternionf;
|
||||
import org.joml.Vector3f;
|
||||
|
||||
import java.lang.ref.WeakReference;
|
||||
import java.util.UUID;
|
||||
|
||||
public abstract class Furniture implements Cullable {
|
||||
public final FurnitureConfig config;
|
||||
public final FurnitureDataAccessor dataAccessor;
|
||||
public final WeakReference<Entity> metaDataEntity;
|
||||
public final Entity metaDataEntity;
|
||||
|
||||
protected CullingData cullingData;
|
||||
protected FurnitureVariant currentVariant;
|
||||
@@ -44,11 +44,11 @@ public abstract class Furniture implements Cullable {
|
||||
protected Furniture(Entity metaDataEntity, FurnitureDataAccessor data, FurnitureConfig config) {
|
||||
this.config = config;
|
||||
this.dataAccessor = data;
|
||||
this.metaDataEntity = new WeakReference<>(metaDataEntity);
|
||||
this.metaDataEntity = metaDataEntity;
|
||||
this.setVariant(config.getVariant(data));
|
||||
}
|
||||
|
||||
public WeakReference<Entity> metaDataEntity() {
|
||||
public Entity metaDataEntity() {
|
||||
return this.metaDataEntity;
|
||||
}
|
||||
|
||||
@@ -75,11 +75,11 @@ public abstract class Furniture implements Cullable {
|
||||
for (int i = 0; i < furnitureHitBoxConfigs.length; i++) {
|
||||
FurnitureHitBox hitbox = furnitureHitBoxConfigs[i].create(this);
|
||||
this.hitboxes[i] = hitbox;
|
||||
for (int hitboxEntityId : hitbox.virtualEntityIds()) {
|
||||
this.hitboxMap.put(hitboxEntityId, hitbox);
|
||||
for (FurnitureHitboxPart part : hitbox.parts()) {
|
||||
this.hitboxMap.put(part.entityId(), hitbox);
|
||||
virtualEntityIds.add(part.entityId());
|
||||
}
|
||||
colliders.addAll(hitbox.colliders());
|
||||
hitbox.collectVirtualEntityIds(virtualEntityIds::addLast);
|
||||
}
|
||||
// 虚拟碰撞箱的实体id
|
||||
this.virtualEntityIds = virtualEntityIds.toIntArray();
|
||||
@@ -122,9 +122,7 @@ public abstract class Furniture implements Cullable {
|
||||
}
|
||||
|
||||
public UUID uuid() {
|
||||
Entity entity = this.metaDataEntity.get();
|
||||
if (entity == null) return null;
|
||||
return entity.uuid();
|
||||
return this.metaDataEntity.uuid();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -158,9 +156,7 @@ public abstract class Furniture implements Cullable {
|
||||
}
|
||||
|
||||
public boolean isValid() {
|
||||
Entity entity = this.metaDataEntity.get();
|
||||
if (entity == null) return false;
|
||||
return entity.isValid();
|
||||
return this.metaDataEntity.isValid();
|
||||
}
|
||||
|
||||
public abstract void destroy();
|
||||
@@ -178,15 +174,11 @@ public abstract class Furniture implements Cullable {
|
||||
}
|
||||
|
||||
public WorldPosition position() {
|
||||
Entity entity = this.metaDataEntity.get();
|
||||
if (entity == null) return null;
|
||||
return entity.position();
|
||||
return this.metaDataEntity.position();
|
||||
}
|
||||
|
||||
public int entityId() {
|
||||
Entity entity = this.metaDataEntity.get();
|
||||
if (entity == null) return -1;
|
||||
return entity.entityID();
|
||||
return this.metaDataEntity.entityID();
|
||||
}
|
||||
|
||||
public Vec3d getRelativePosition(Vector3f position) {
|
||||
@@ -200,8 +192,6 @@ public abstract class Furniture implements Cullable {
|
||||
}
|
||||
|
||||
public World world() {
|
||||
Entity entity = this.metaDataEntity.get();
|
||||
if (entity == null) return null;
|
||||
return entity.world();
|
||||
return this.metaDataEntity.world();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,7 +5,6 @@ import net.momirealms.craftengine.core.loot.LootTable;
|
||||
import net.momirealms.craftengine.core.plugin.context.Context;
|
||||
import net.momirealms.craftengine.core.plugin.context.event.EventTrigger;
|
||||
import net.momirealms.craftengine.core.plugin.context.function.Function;
|
||||
import net.momirealms.craftengine.core.plugin.entityculling.CullingData;
|
||||
import net.momirealms.craftengine.core.util.Key;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
@@ -7,7 +7,6 @@ import net.momirealms.craftengine.core.loot.LootTable;
|
||||
import net.momirealms.craftengine.core.plugin.context.Context;
|
||||
import net.momirealms.craftengine.core.plugin.context.event.EventTrigger;
|
||||
import net.momirealms.craftengine.core.plugin.context.function.Function;
|
||||
import net.momirealms.craftengine.core.plugin.entityculling.CullingData;
|
||||
import net.momirealms.craftengine.core.util.Key;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
@@ -6,25 +6,17 @@ import net.momirealms.craftengine.core.entity.seat.Seat;
|
||||
import net.momirealms.craftengine.core.entity.seat.SeatOwner;
|
||||
import net.momirealms.craftengine.core.world.EntityHitResult;
|
||||
import net.momirealms.craftengine.core.world.Vec3d;
|
||||
import net.momirealms.craftengine.core.world.collision.AABB;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
public interface FurnitureHitBox extends SeatOwner {
|
||||
|
||||
Vec3d position();
|
||||
|
||||
Seat<FurnitureHitBox>[] seats();
|
||||
|
||||
AABB[] aabb();
|
||||
|
||||
List<Collider> colliders();
|
||||
|
||||
int[] virtualEntityIds();
|
||||
|
||||
void collectVirtualEntityIds(Consumer<Integer> collector);
|
||||
List<FurnitureHitboxPart> parts();
|
||||
|
||||
void show(Player player);
|
||||
|
||||
@@ -33,8 +25,8 @@ public interface FurnitureHitBox extends SeatOwner {
|
||||
FurnitureHitBoxConfig<?> config();
|
||||
|
||||
default Optional<EntityHitResult> clip(Vec3d min, Vec3d max) {
|
||||
for (AABB value : aabb()) {
|
||||
Optional<EntityHitResult> clip = value.clip(min, max);
|
||||
for (FurnitureHitboxPart value : parts()) {
|
||||
Optional<EntityHitResult> clip = value.aabb().clip(min, max);
|
||||
if (clip.isPresent()) {
|
||||
return clip;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
package net.momirealms.craftengine.core.entity.furniture.hitbox;
|
||||
|
||||
import net.momirealms.craftengine.core.world.Vec3d;
|
||||
import net.momirealms.craftengine.core.world.collision.AABB;
|
||||
|
||||
public record FurnitureHitboxPart(int entityId, AABB aabb, Vec3d pos) {
|
||||
}
|
||||
Reference in New Issue
Block a user