TintOperation class
Пакет: com.hypixel.hytale.builtin.buildertools.tooloperations
Файл: com/hypixel/hytale/builtin/buildertools/tooloperations/TintOperation.java
extends: ToolOperation
Поля (23)
| Модификаторы | Тип | Имя |
|---|---|---|
private |
int |
tintColor |
|
double |
var13 |
|
int |
var14 |
|
String |
var15 |
|
int |
var15 |
|
InventoryComponent.Hotbar |
var16 |
|
int |
var16 |
|
int |
var17 |
|
double |
var17 |
|
ItemStack |
var18 |
|
double |
var19 |
|
BuilderTool |
var20 |
|
ItemStack |
var21 |
|
int |
var21 |
|
double |
var3 |
|
long |
var4 |
|
double |
var5 |
|
String |
var6 |
|
int |
var6 |
|
UUIDComponent |
var7 |
|
double |
var7 |
|
PrototypePlayerBuilderToolSettings |
var8 |
|
double |
var9 |
Методы (14)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
|
|
for for(int var19 = 0; var19 < var17; var19++) |
|
|
for for(int var11 = 0; var11 < var17; var11++) |
|
|
for for(int var11 = -4; var11 <= 4; var11++) |
|
|
for for(int var12 = -4; var12 <= 4; var12++) |
|
|
if if(this.interactionType == InteractionType.Primary) |
|
|
if if(this.blendMode && this.isHoldingAltModeDown) |
|
|
if if(!var4.isHoldDownInteraction) |
|
|
if if(var10 != this.packedPlacedTinsPositions) |
|
|
if if(this.blendMode) |
|
|
if if(this.isHoldingAltModeDown && this.blendMode) |
|
|
if if(this.blendMode) |
|
|
if if(var15 >= 0 && var16 >= 0 && var15 < this.colorBuffer.length && var16 < this.colorBuffer[0].length) |
private |
int |
sampleKernelBlendint sampleKernelBlend(int var1, int var2) |
abstract |
|
super super(var1, var4, var5) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.buildertools.tooloperations;
class="kw">import com.hypixel.hytale.builtin.buildertools.BuilderToolsPlugin;
class="kw">import com.hypixel.hytale.builtin.buildertools.PrototypePlayerBuilderToolSettings;
class="kw">import com.hypixel.hytale.component.ComponentAccessor;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.math.block.BlockUtil;
class="kw">import com.hypixel.hytale.protocol.InteractionType;
class="kw">import com.hypixel.hytale.protocol.packets.buildertools.BuilderToolOnUseInteraction;
class="kw">import com.hypixel.hytale.protocol.packets.interface_.NotificationStyle;
class="kw">import com.hypixel.hytale.server.core.Message;
class="kw">import com.hypixel.hytale.server.core.asset.type.buildertool.config.BuilderTool;
class="kw">import com.hypixel.hytale.server.core.asset.type.buildertool.config.args.ToolArgException;
class="kw">import com.hypixel.hytale.server.core.asset.util.ColorParseUtil;
class="kw">import com.hypixel.hytale.server.core.entity.UUIDComponent;
class="kw">import com.hypixel.hytale.server.core.entity.entities.Player;
class="kw">import com.hypixel.hytale.server.core.inventory.InventoryComponent;
class="kw">import com.hypixel.hytale.server.core.inventory.ItemStack;
class="kw">import com.hypixel.hytale.server.core.universe.PlayerRef;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import it.unimi.dsi.fastutil.longs.LongOpenHashSet;
class="kw">import javax.annotation.Nonnull;
class="kw">public class TintOperation class="kw">extends ToolOperation {
class="kw">private int tintColor;
class="kw">private double opacity;
class="kw">private boolean blendMode = false;
class="kw">private int bufferOriginX;
class="kw">private int bufferOriginZ;
class="kw">private int[][] colorBuffer;
class="kw">private class="kw">final boolean isHoldingAltModeDown;
class="kw">private LongOpenHashSet packedPlacedTinsPositions;
class="kw">private class="kw">static class="kw">final int SAMPLE_DISTANCE = 4;
class="kw">public TintOperation(
@Nonnull Ref<EntityStore> var1,
@Nonnull Player var2,
@Nonnull PlayerRef var3,
@Nonnull BuilderToolOnUseInteraction var4,
@Nonnull ComponentAccessor<EntityStore> var5
) {
super(var1, var4, var5);
this.isHoldingAltModeDown = var4.isAltPlaySculptBrushModDown;
if (this.interactionType == InteractionType.Primary) {
this.blendMode = true;
}
if (this.blendMode && this.isHoldingAltModeDown) {
int var14 = this.edit.getTint(this.x, this.z);
String var15 = ColorParseUtil.toHexString(var14 & 16777215);
InventoryComponent.Hotbar var16 = var5.getComponent(var1, InventoryComponent.Hotbar.getComponentType());
ItemStack var18 = var16.getActiveItem();
BuilderTool var20 = BuilderTool.getActiveBuilderTool(var1, var5);
try {
ItemStack var21 = var20.updateArgMetadata(var18, "bTintColor", var15);
var16.getInventory().setItemStackForSlot(var16.getActiveSlot(), var21);
BuilderToolsPlugin.sendFeedback(Message.translation("server.builderTools.pickedColor").param("color", var15), var3, NotificationStyle.Success, var5);
} catch (ToolArgException var12) {
var3.sendMessage(Message.translation("server.builderTools.tintOperation.colorParseError").param("value", var15));
}
} else {
String var6 = (String)this.args.tool().getOrDefault("bTintColor", "ffffff");
try {
this.tintColor = ColorParseUtil.hexStringToRGBInt(var6);
} catch (NumberFormatException var13) {
var3.sendMessage(Message.translation("server.builderTools.tintOperation.colorParseError").param("value", var6));
throw var13;
}
this.opacity = ((Integer)this.args.tool().getOrDefault("cOpacity", 100)).intValue() / 100.0;
UUIDComponent var7 = var1.getStore().getComponent(var1, UUIDComponent.getComponentType());
PrototypePlayerBuilderToolSettings var8 = PROTOTYPE_TOOL_SETTINGS.get(var7.getUuid());
if (!var4.isHoldDownInteraction) {
var8.getIgnoredPaintOperations().clear();
}
this.packedPlacedTinsPositions = var8.addIgnoredPaintOperation();
for (LongOpenHashSet var10 : var8.getIgnoredPaintOperations()) {
if (var10 != this.packedPlacedTinsPositions) {
this.packedPlacedTinsPositions.addAll(var10);
}
}
if (this.blendMode) {
int var17 = (this.shapeRange + 4) * 2 + 1;
this.bufferOriginX = this.x - this.shapeRange - 4;
this.bufferOriginZ = this.z - this.shapeRange - 4;
this.colorBuffer = new int[var17][var17];
for (int var19 = 0; var19 < var17; var19++) {
for (int var11 = 0; var11 < var17; var11++) {
this.colorBuffer[var19][var11] = this.edit.getTint(this.bufferOriginX + var19, this.bufferOriginZ + var11);
}
}
}
}
}
@Override
class="kw">protected boolean executeBlock(int var1, int var2, int var3) {
if (this.isHoldingAltModeDown && this.blendMode) {
class="kw">return true;
}
long var4 = BlockUtil.pack(var1, 0, var3);
if (this.packedPlacedTinsPositions.contains(var4)) {
class="kw">return true;
}
this.packedPlacedTinsPositions.add(var4);
if (this.blendMode) {
int var6 = this.sampleKernelBlend(var1, var3);
this.edit.setTint(var1, var3, var6, 1.0);
} else {
this.edit.setTint(var1, var3, this.tintColor, this.opacity);
}
class="kw">return true;
}
class="kw">private int sampleKernelBlend(int var1, int var2) {
double var3 = 0.0;
double var5 = 0.0;
double var7 = 0.0;
double var9 = 0.0;
for (int var11 = -4; var11 <= 4; var11++) {
for (int var12 = -4; var12 <= 4; var12++) {
double var13 = Math.sqrt(var11 * var11 + var12 * var12);
if (!(var13 > 4.0)) {
int var15 = var1 + var11 - this.bufferOriginX;
int var16 = var2 + var12 - this.bufferOriginZ;
if (var15 >= 0 && var16 >= 0 && var15 < this.colorBuffer.length && var16 < this.colorBuffer[0].length) {
double var17 = 2.0;
double var19 = Math.exp(-(var13 * var13) / (2.0 * var17 * var17));
int var21 = this.colorBuffer[var15][var16];
var5 += (var21 >> 16 & 0xFF) * var19;
var7 += (var21 >> 8 & 0xFF) * var19;
var9 += (var21 & 0xFF) * var19;
var3 += var19;
}
}
}
}
class="kw">return var3 == 0.0 ? this.tintColor : (int)Math.round(var5 / var3) << 16 | (int)Math.round(var7 / var3) << 8 | (int)Math.round(var9 / var3);
}
}