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);
   }
}