classpublicPriority 3
LayersOperation
com.hypixel.hytale.builtin.buildertools.tooloperations.LayersOperation
extends ToolOperation
1
Methods
1
Public Methods
14
Fields
1
Constructors
Constructors
public
LayersOperation(Ref<EntityStore> ref, Player player, BuilderToolOnUseInteraction packet, ComponentAccessor<EntityStore> componentAccessor)Methods
Public Methods (1)
public
boolean attemptSetBlock(int x, int y, int z, int depth)Fields
Private/Package Fields (14)
private
int brushDensityprivate
Vector3i depthDirectionprivate
boolean enableLayerThreeprivate
boolean enableLayerTwoprivate
boolean failedprivate
BlockPattern layerOneBlockPatternprivate
int layerOneLengthprivate
BlockPattern layerThreeBlockPatternprivate
int layerThreeDepthEndprivate
int layerThreeLengthprivate
BlockPattern layerTwoBlockPatternprivate
int layerTwoDepthEndprivate
int layerTwoLengthprivate
int maxDepthNecessaryInheritance
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.buildertools.tooloperations;
import com.hypixel.hytale.component.ComponentAccessor;
import com.hypixel.hytale.component.Ref;
import com.hypixel.hytale.math.vector.Vector3i;
import com.hypixel.hytale.protocol.packets.buildertools.BuilderToolOnUseInteraction;
import com.hypixel.hytale.server.core.Message;
import com.hypixel.hytale.server.core.entity.entities.Player;
import com.hypixel.hytale.server.core.modules.entity.component.HeadRotation;
import com.hypixel.hytale.server.core.prefab.selection.mask.BlockPattern;
import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
import javax.annotation.Nonnull;
public class LayersOperation extends ToolOperation {
private final Vector3i depthDirection;
private final int layerOneLength;
private final int layerTwoLength;
private final boolean enableLayerTwo;
private final int layerThreeLength;
private final boolean enableLayerThree;
private final BlockPattern layerOneBlockPattern;
private final BlockPattern layerTwoBlockPattern;
private final BlockPattern layerThreeBlockPattern;
private final int brushDensity;
private final int maxDepthNecessary;
private boolean failed;
private final int layerTwoDepthEnd;
private final int layerThreeDepthEnd;
public LayersOperation(
@Nonnull Ref<EntityStore> ref,
@Nonnull Player player,
@Nonnull BuilderToolOnUseInteraction packet,
@Nonnull ComponentAccessor<EntityStore> componentAccessor
) {
super(ref, packet, componentAccessor);
HeadRotation headRotationComponent = componentAccessor.getComponent(ref, HeadRotation.getComponentType());
assert headRotationComponent != null;
String var6 = (String)this.args.tool().get("aDirection");
switch (var6) {
case "Up":
this.depthDirection = Vector3i.UP;
break;
case "Down":
this.depthDirection = Vector3i.DOWN;
break;
case "North":
this.depthDirection = Vector3i.NORTH;
break;
case "South":
this.depthDirection = Vector3i.SOUTH;
break;
case "East":
this.depthDirection = Vector3i.EAST;
break;
case "West":
this.depthDirection = Vector3i.WEST;
break;
case "Camera":
this.depthDirection = headRotationComponent.getAxisDirection();
break;
default:
this.depthDirection = Vector3i.DOWN;
}
this.brushDensity = (Integer)this.args.tool().get("jBrushDensity");
this.layerOneLength = (Integer)this.args.tool().get("bLayerOneLength");
this.layerTwoLength = (Integer)this.args.tool().get("eLayerTwoLength");
this.layerThreeLength = (Integer)this.args.tool().get("hLayerThreeLength");
this.layerOneBlockPattern = (BlockPattern)this.args.tool().get("cLayerOneMaterial");
this.layerTwoBlockPattern = (BlockPattern)this.args.tool().get("fLayerTwoMaterial");
this.layerThreeBlockPattern = (BlockPattern)this.args.tool().get("iLayerThreeMaterial");
this.enableLayerTwo = (Boolean)this.args.tool().get("dEnableLayerTwo");
this.enableLayerThree = (Boolean)this.args.tool().get("gEnableLayerThree");
this.maxDepthNecessary = this.layerOneLength + (this.enableLayerTwo ? this.layerTwoLength : 0) + (this.enableLayerThree ? this.layerThreeLength : 0);
this.layerTwoDepthEnd = this.layerOneLength + this.layerTwoLength;
this.layerThreeDepthEnd = this.layerTwoDepthEnd + this.layerThreeLength;
if (this.enableLayerThree && !this.enableLayerTwo) {
player.sendMessage(Message.translation("server.builderTools.layerOperation.layerTwoRequired"));
this.failed = true;
}
}
@Override
boolean execute0(int x, int y, int z) {
if (this.failed) {
return false;
} else if (this.random.nextInt(100) > this.brushDensity) {
return true;
} else {
int currentBlock = this.edit.getBlock(x, y, z);
if (currentBlock <= 0) {
return true;
} else {
if (this.depthDirection.x == 1) {
for (int i = 0; i < this.maxDepthNecessary; i++) {
if (this.edit.getBlock(x - i - 1, y, z) <= 0 && this.attemptSetBlock(x, y, z, i)) {
return true;
}
}
} else if (this.depthDirection.x == -1) {
for (int ix = 0; ix < this.maxDepthNecessary; ix++) {
if (this.edit.getBlock(x + ix + 1, y, z) <= 0 && this.attemptSetBlock(x, y, z, ix)) {
return true;
}
}
} else if (this.depthDirection.y == 1) {
for (int ixx = 0; ixx < this.maxDepthNecessary; ixx++) {
if (this.edit.getBlock(x, y - ixx - 1, z) <= 0 && this.attemptSetBlock(x, y, z, ixx)) {
return true;
}
}
} else if (this.depthDirection.y == -1) {
for (int ixxx = 0; ixxx < this.maxDepthNecessary; ixxx++) {
if (this.edit.getBlock(x, y + ixxx + 1, z) <= 0 && this.attemptSetBlock(x, y, z, ixxx)) {
return true;
}
}
} else if (this.depthDirection.z == 1) {
for (int ixxxx = 0; ixxxx < this.maxDepthNecessary; ixxxx++) {
if (this.edit.getBlock(x, y, z - ixxxx - 1) <= 0 && this.attemptSetBlock(x, y, z, ixxxx)) {
return true;
}
}
} else if (this.depthDirection.z == -1) {
for (int ixxxxx = 0; ixxxxx < this.maxDepthNecessary; ixxxxx++) {
if (this.edit.getBlock(x, y, z + ixxxxx + 1) <= 0 && this.attemptSetBlock(x, y, z, ixxxxx)) {
return true;
}
}
}
return true;
}
}
}
public boolean attemptSetBlock(int x, int y, int z, int depth) {
if (depth < this.layerOneLength) {
this.edit.setBlock(x, y, z, this.layerOneBlockPattern.nextBlock(this.random));
return true;
} else if (this.enableLayerTwo && depth < this.layerTwoDepthEnd && !this.layerThreeBlockPattern.isEmpty()) {
this.edit.setBlock(x, y, z, this.layerTwoBlockPattern.nextBlock(this.random));
return true;
} else if (this.enableLayerThree && depth < this.layerThreeDepthEnd && !this.layerThreeBlockPattern.isEmpty()) {
this.edit.setBlock(x, y, z, this.layerThreeBlockPattern.nextBlock(this.random));
return true;
} else {
return false;
}
}
}