classpublicPriority 3
QueueProp
com.hypixel.hytale.builtin.hytalegenerator.props.QueueProp
extends Prop
6
Methods
6
Public Methods
3
Fields
1
Constructors
Constructors
public
QueueProp(List<Prop> propsQueue)Methods
Public Methods (6)
publicstatic
QueueProp.QueueScanResult cast(ScanResult scanResult)@Nonnull
public
ContextDependency getContextDependency()@Nonnull@Override
public
Bounds3i getWriteBounds()@Nonnull@Override
public
boolean isNegative()@Override
public
void place(Prop.Context context)@Override
public
ScanResult scan(Vector3i position, VoxelSpace<Material> materialSpace, WorkerIndexer.Id id)@Nonnull@Override
Fields
Private/Package Fields (3)
private
ContextDependency contextDependencyprivate
List<Prop> propsprivate
Bounds3i writeBounds_voxelGridInheritance
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.hytalegenerator.props;
import com.hypixel.hytale.builtin.hytalegenerator.bounds.Bounds3i;
import com.hypixel.hytale.builtin.hytalegenerator.conveyor.stagedconveyor.ContextDependency;
import com.hypixel.hytale.builtin.hytalegenerator.datastructures.voxelspace.VoxelSpace;
import com.hypixel.hytale.builtin.hytalegenerator.material.Material;
import com.hypixel.hytale.builtin.hytalegenerator.threadindexer.WorkerIndexer;
import com.hypixel.hytale.math.vector.Vector3i;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.Nonnull;
public class QueueProp extends Prop {
@Nonnull
private final List<Prop> props;
@Nonnull
private final ContextDependency contextDependency;
@Nonnull
private final Bounds3i writeBounds_voxelGrid;
public QueueProp(@Nonnull List<Prop> propsQueue) {
this.props = new ArrayList<>(propsQueue);
Vector3i writeRange = new Vector3i();
Vector3i readRange = new Vector3i();
for (Prop prop : propsQueue) {
writeRange = Vector3i.max(writeRange, prop.getContextDependency().getWriteRange());
readRange = Vector3i.max(readRange, prop.getContextDependency().getReadRange());
}
this.contextDependency = new ContextDependency(readRange, writeRange);
this.writeBounds_voxelGrid = this.contextDependency.getTotalPropBounds_voxelGrid();
}
@Nonnull
@Override
public ScanResult scan(@Nonnull Vector3i position, @Nonnull VoxelSpace<Material> materialSpace, @Nonnull WorkerIndexer.Id id) {
QueueProp.QueueScanResult queueScanResult = new QueueProp.QueueScanResult();
for (Prop prop : this.props) {
ScanResult propScanResult = prop.scan(position, materialSpace, id);
if (!propScanResult.isNegative()) {
queueScanResult.propScanResult = propScanResult;
queueScanResult.prop = prop;
return queueScanResult;
}
}
return queueScanResult;
}
@Override
public void place(@Nonnull Prop.Context context) {
QueueProp.QueueScanResult conditionalScanResult = QueueProp.QueueScanResult.cast(context.scanResult);
if (!conditionalScanResult.isNegative()) {
conditionalScanResult.prop.place(context);
}
}
@Nonnull
@Override
public ContextDependency getContextDependency() {
return this.contextDependency.clone();
}
@Nonnull
@Override
public Bounds3i getWriteBounds() {
return this.writeBounds_voxelGrid;
}
private static class QueueScanResult implements ScanResult {
ScanResult propScanResult;
Prop prop;
private QueueScanResult() {
}
@Nonnull
public static QueueProp.QueueScanResult cast(ScanResult scanResult) {
if (!(scanResult instanceof QueueProp.QueueScanResult)) {
throw new IllegalArgumentException("The provided ScanResult isn't compatible with this prop.");
} else {
return (QueueProp.QueueScanResult)scanResult;
}
}
@Override
public boolean isNegative() {
return this.propScanResult == null || this.propScanResult.isNegative();
}
}
}