classpublicPriority 3
ObjectiveLocationAreaRadius
com.hypixel.hytale.builtin.adventure.objectives.config.markerarea.ObjectiveLocationAreaRadius
extends ObjectiveLocationMarkerArea
4
Methods
4
Public Methods
2
Fields
2
Constructors
Constants
BuilderCodec<ObjectiveLocationAreaRadius>CODEC= BuilderCodec.builder(
ObjectiveLocationAreaRadius.class, ObjectiveLocationAreaRadius::ne...
intDEFAULT_ENTRY_RADIUS= 5
intDEFAULT_EXIT_RADIUS= 10
Constructors
protected
ObjectiveLocationAreaRadius()public
ObjectiveLocationAreaRadius(int entryRadius, int exitRadius)Methods
Public Methods (4)
public
int getEntryArea()public
int getExitArea()public
boolean isPlayerInEntryArea(Vector3d playerPosition, Vector3d markerPosition)@Override
public
String toString()@Nonnull@Override
Fields
Protected Fields (2)
protected
int entryAreaprotected
int exitAreaInheritance
Parent
Current
Interface
Child
Use mouse wheel to zoom, drag to pan. Click nodes to navigate.
Related Classes
Source Code
package com.hypixel.hytale.builtin.adventure.objectives.config.markerarea;
import com.hypixel.hytale.codec.Codec;
import com.hypixel.hytale.codec.KeyedCodec;
import com.hypixel.hytale.codec.builder.BuilderCodec;
import com.hypixel.hytale.codec.validation.Validators;
import com.hypixel.hytale.component.CommandBuffer;
import com.hypixel.hytale.component.ComponentType;
import com.hypixel.hytale.component.Ref;
import com.hypixel.hytale.component.spatial.SpatialResource;
import com.hypixel.hytale.math.shape.Box;
import com.hypixel.hytale.math.vector.Vector3d;
import com.hypixel.hytale.math.vector.VectorSphereUtil;
import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent;
import com.hypixel.hytale.server.core.universe.PlayerRef;
import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
import java.util.List;
import javax.annotation.Nonnull;
public class ObjectiveLocationAreaRadius extends ObjectiveLocationMarkerArea {
public static final BuilderCodec<ObjectiveLocationAreaRadius> CODEC = BuilderCodec.builder(
ObjectiveLocationAreaRadius.class, ObjectiveLocationAreaRadius::new
)
.append(
new KeyedCodec<>("EntryRadius", Codec.INTEGER),
(objectiveLocationAreaRadius, integer) -> objectiveLocationAreaRadius.entryArea = integer,
objectiveLocationAreaRadius -> objectiveLocationAreaRadius.entryArea
)
.addValidator(Validators.greaterThan(0))
.add()
.<Integer>append(
new KeyedCodec<>("ExitRadius", Codec.INTEGER),
(objectiveLocationAreaRadius, integer) -> objectiveLocationAreaRadius.exitArea = integer,
objectiveLocationAreaRadius -> objectiveLocationAreaRadius.exitArea
)
.addValidator(Validators.greaterThan(0))
.add()
.validator((objectiveLocationAreaRadius, validationResults) -> {
if (objectiveLocationAreaRadius.exitArea < objectiveLocationAreaRadius.entryArea) {
validationResults.fail("ExitRadius needs to be greater than EntryRadius");
}
})
.afterDecode(ObjectiveLocationAreaRadius::computeAreaBoxes)
.build();
public static final int DEFAULT_ENTRY_RADIUS = 5;
public static final int DEFAULT_EXIT_RADIUS = 10;
protected int entryArea;
protected int exitArea;
public ObjectiveLocationAreaRadius(int entryRadius, int exitRadius) {
this.entryArea = entryRadius;
this.exitArea = exitRadius;
this.computeAreaBoxes();
}
protected ObjectiveLocationAreaRadius() {
this(5, 10);
}
public int getEntryArea() {
return this.entryArea;
}
public int getExitArea() {
return this.exitArea;
}
@Override
public void getPlayersInEntryArea(
@Nonnull SpatialResource<Ref<EntityStore>, EntityStore> spatialComponent, @Nonnull List<Ref<EntityStore>> results, @Nonnull Vector3d markerPosition
) {
getPlayersInArea(spatialComponent, results, markerPosition, this.entryArea);
}
@Override
public void getPlayersInExitArea(
@Nonnull SpatialResource<Ref<EntityStore>, EntityStore> spatialComponent, @Nonnull List<Ref<EntityStore>> results, @Nonnull Vector3d markerPosition
) {
getPlayersInArea(spatialComponent, results, markerPosition, this.exitArea);
}
@Override
public boolean hasPlayerInExitArea(
@Nonnull SpatialResource<Ref<EntityStore>, EntityStore> spatialComponent,
@Nonnull ComponentType<EntityStore, PlayerRef> playerRefComponentType,
@Nonnull Vector3d markerPosition,
@Nonnull CommandBuffer<EntityStore> commandBuffer
) {
Ref<EntityStore> reference = spatialComponent.getSpatialStructure().closest(markerPosition);
if (reference == null) {
return false;
} else {
TransformComponent transformComponent = commandBuffer.getComponent(reference, TransformComponent.getComponentType());
assert transformComponent != null;
return VectorSphereUtil.isInside(
markerPosition.x,
markerPosition.y,
markerPosition.z,
(double)this.exitArea,
(double)this.exitArea,
(double)this.exitArea,
transformComponent.getPosition()
);
}
}
@Override
public boolean isPlayerInEntryArea(@Nonnull Vector3d playerPosition, @Nonnull Vector3d markerPosition) {
return VectorSphereUtil.isInside(markerPosition.x, markerPosition.y, markerPosition.z, (double)this.entryArea, playerPosition);
}
@Override
protected void computeAreaBoxes() {
this.entryAreaBox = new Box(
(double)(-this.entryArea),
(double)(-this.entryArea),
(double)(-this.entryArea),
(double)this.entryArea,
(double)this.entryArea,
(double)this.entryArea
);
this.exitAreaBox = new Box(
(double)(-this.exitArea), (double)(-this.exitArea), (double)(-this.exitArea), (double)this.exitArea, (double)this.exitArea, (double)this.exitArea
);
}
private static void getPlayersInArea(
@Nonnull SpatialResource<Ref<EntityStore>, EntityStore> spatialComponent,
@Nonnull List<Ref<EntityStore>> results,
@Nonnull Vector3d markerPosition,
int radius
) {
spatialComponent.getSpatialStructure().collect(markerPosition, (double)radius, results);
}
@Nonnull
@Override
public String toString() {
return "ObjectiveLocationAreaRadius{} " + super.toString();
}
}