classpublicPriority 3
WallPattern
com.hypixel.hytale.builtin.hytalegenerator.patterns.WallPattern
extends Pattern
2
Methods
2
Public Methods
5
Fields
1
Constructors
Constants
Codec<WallPattern.WallDirection>CODEC= new EnumCodec<>(WallPattern.WallDirection.class, EnumCodec.EnumStyle.LEGACY)
Constructors
public
WallPattern(Pattern wallPattern, Pattern originPattern, List<WallPattern.WallDirection> wallDirections, boolean matchAll)Methods
Public Methods (2)
public
boolean matches(Pattern.Context context)@Override
public
SpaceSize readSpace()@Nonnull@Override
Fields
Private/Package Fields (5)
private
List<WallPattern.WallDirection> directionsprivate
boolean matchAllprivate
Pattern originPatternprivate
SpaceSize readSpaceSizeprivate
Pattern wallPatternInheritance
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.patterns;
import com.hypixel.hytale.builtin.hytalegenerator.bounds.SpaceSize;
import com.hypixel.hytale.codec.Codec;
import com.hypixel.hytale.codec.codecs.EnumCodec;
import com.hypixel.hytale.math.vector.Vector3i;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.Nonnull;
public class WallPattern extends Pattern {
@Nonnull
private final Pattern wallPattern;
@Nonnull
private final Pattern originPattern;
@Nonnull
private final List<WallPattern.WallDirection> directions;
private final boolean matchAll;
private final SpaceSize readSpaceSize;
public WallPattern(@Nonnull Pattern wallPattern, @Nonnull Pattern originPattern, @Nonnull List<WallPattern.WallDirection> wallDirections, boolean matchAll) {
this.wallPattern = wallPattern;
this.originPattern = originPattern;
this.directions = new ArrayList<>(wallDirections);
this.matchAll = matchAll;
SpaceSize originSpace = originPattern.readSpace();
SpaceSize wallSpace = wallPattern.readSpace();
SpaceSize totalSpace = originSpace;
for (WallPattern.WallDirection d : this.directions) {
SpaceSize directionedWallSpace = switch (d) {
case N -> wallSpace.clone().moveBy(new Vector3i(0, 0, -1));
case S -> wallSpace.clone().moveBy(new Vector3i(0, 0, 1));
case E -> wallSpace.clone().moveBy(new Vector3i(1, 0, 0));
case W -> wallSpace.clone().moveBy(new Vector3i(-1, 0, 0));
};
totalSpace = SpaceSize.merge(totalSpace, directionedWallSpace);
}
this.readSpaceSize = totalSpace;
}
@Override
public boolean matches(@Nonnull Pattern.Context context) {
for (WallPattern.WallDirection direction : this.directions) {
boolean matches = this.matches(context, direction);
if (this.matchAll && !matches) {
return false;
}
if (matches) {
return true;
}
}
return false;
}
private boolean matches(@Nonnull Pattern.Context context, @Nonnull WallPattern.WallDirection direction) {
Vector3i wallPosition = context.position.clone();
switch (direction) {
case N:
wallPosition.z--;
break;
case S:
wallPosition.z++;
break;
case E:
wallPosition.x++;
break;
case W:
wallPosition.x--;
}
Pattern.Context wallContext = new Pattern.Context(context);
wallContext.position = wallPosition;
return this.originPattern.matches(context) && this.wallPattern.matches(wallContext);
}
@Nonnull
@Override
public SpaceSize readSpace() {
return this.readSpaceSize.clone();
}
public static enum WallDirection {
N,
S,
E,
W;
public static final Codec<WallPattern.WallDirection> CODEC = new EnumCodec<>(WallPattern.WallDirection.class, EnumCodec.EnumStyle.LEGACY);
private WallDirection() {
}
}
}