HyCodeYourTale
classpublicPriority 3

MaskShader

com.hypixel.hytale.builtin.hytalegenerator.framework.shaders.MaskShader

implements Shader

9

Methods

9

Public Methods

3

Fields

1

Constructors

Constructors

private
MaskShader(Predicate<T> mask, Shader<T> childShader, long seed)

Methods

Public Methods (9)

public
MaskShader<T> build()
@Nonnull
publicstatic
<T> MaskShader.Builder<T> builder(Class<T> dataType)
@Nonnull
public
T shade(T current, long seed)
@Override
public
T shade(T current, long seedA, long seedB)
@Override
public
T shade(T current, long seedA, long seedB, long seedC)
@Override
public
String toString()
@Nonnull@Override
public
MaskShader.Builder<T> withChildShader(Shader<T> shader)
@Nonnull
public
MaskShader.Builder<T> withMask(Predicate<T> mask)
@Nonnull
public
MaskShader.Builder<T> withSeed(long seed)
@Nonnull

Fields

Private/Package Fields (3)

privateShader<T> childShader
privatePredicate<T> mask
privateSeedGenerator seedGenerator

Inheritance

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.framework.shaders;

import com.hypixel.hytale.builtin.hytalegenerator.framework.math.SeedGenerator;
import java.util.function.Predicate;
import javax.annotation.Nonnull;

public class MaskShader<T> implements Shader<T> {
   private final Shader<T> childShader;
   private final Predicate<T> mask;
   private SeedGenerator seedGenerator;

   private MaskShader(Predicate<T> mask, Shader<T> childShader, long seed) {
      this.mask = mask;
      this.childShader = childShader;
      this.seedGenerator = new SeedGenerator(seed);
   }

   @Nonnull
   public static <T> MaskShader.Builder<T> builder(@Nonnull Class<T> dataType) {
      return new MaskShader.Builder<>();
   }

   @Override
   public T shade(T current, long seed) {
      return !this.mask.test(current) ? current : this.childShader.shade(current, seed);
   }

   @Override
   public T shade(T current, long seedA, long seedB) {
      return this.shade(current, 0L);
   }

   @Override
   public T shade(T current, long seedA, long seedB, long seedC) {
      return this.shade(current, 0L);
   }

   @Nonnull
   @Override
   public String toString() {
      return "MaskShader{childShader=" + this.childShader + ", mask=" + this.mask + ", seedGenerator=" + this.seedGenerator + "}";
   }

   public static class Builder<T> {
      private Shader<T> childShader;
      private Predicate<T> mask;
      private long seed = System.nanoTime();

      private Builder() {
      }

      @Nonnull
      public MaskShader<T> build() {
         if (this.childShader != null && this.mask != null) {
            return new MaskShader<>(this.mask, this.childShader, this.seed);
         } else {
            throw new IllegalStateException("incomplete builder");
         }
      }

      @Nonnull
      public MaskShader.Builder<T> withSeed(long seed) {
         this.seed = seed;
         return this;
      }

      @Nonnull
      public MaskShader.Builder<T> withMask(@Nonnull Predicate<T> mask) {
         this.mask = mask;
         return this;
      }

      @Nonnull
      public MaskShader.Builder<T> withChildShader(@Nonnull Shader<T> shader) {
         this.childShader = shader;
         return this;
      }
   }
}