Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Create SpriteLinkBuilder #518

Open
wants to merge 14 commits into
base: main
Choose a base branch
from
Open
2 changes: 2 additions & 0 deletions src/client/java/minicraft/core/Game.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import minicraft.core.io.Settings;
import minicraft.core.io.Sound;
import minicraft.entity.mob.Player;
import minicraft.gfx.SpriteLinker;
import minicraft.level.Level;
import minicraft.level.tile.Tiles;
import minicraft.network.Analytics;
Expand Down Expand Up @@ -87,6 +88,7 @@ public static void main(String[] args) {
Analytics.GameStartup.ping();

input = new InputHandler(Renderer.canvas);
Renderer.spriteLinker = new SpriteLinker();
BenCheung0422 marked this conversation as resolved.
Show resolved Hide resolved

ResourcePackDisplay.initPacks();
ResourcePackDisplay.reloadResources();
Expand Down
57 changes: 29 additions & 28 deletions src/client/java/minicraft/core/Renderer.java
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.function.Supplier;

public class Renderer extends Game {
private Renderer() {
Expand All @@ -62,7 +63,7 @@ private Renderer() {
static float SCALE = 3;

public static Screen screen; // Creates the main screen
public static SpriteLinker spriteLinker = new SpriteLinker(); // The sprite linker for sprites
public static SpriteLinker spriteLinker; // The sprite linker for sprites

static Canvas canvas = new Canvas();
private static BufferedImage image; // Creates an image to be displayed on the screen.
Expand All @@ -76,7 +77,7 @@ private Renderer() {

private static int potionRenderOffset = 0;

private static LinkedSprite hudSheet;
private static Supplier<MinicraftImage> hudSheet;

public static MinicraftImage loadDefaultSkinSheet() {
MinicraftImage skinsSheet;
Expand All @@ -102,7 +103,7 @@ public static void initScreen() {

image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);
screen.pixels = ((DataBufferInt) image.getRaster().getDataBuffer()).getData();
hudSheet = new LinkedSprite(SpriteType.Gui, "hud");
hudSheet = () -> Renderer.spriteLinker.getSheet(SpriteType.Gui, "hud");
BenCheung0422 marked this conversation as resolved.
Show resolved Hide resolved

Initializer.startCanvasRendering();
canvas.createBufferStrategy(3);
Expand Down Expand Up @@ -227,7 +228,7 @@ private static void renderGui() {
// This draws the black square where the selected item would be if you were holding it
if (!isMode("minicraft.settings.mode.creative") || player.activeItem != null) {
for (int x = 10; x < 26; x++) {
screen.render(x * 8, Screen.h - 8, 5, 2, 0, hudSheet.getSheet());
screen.render(x * 8, Screen.h - 8, 5, 2, 0, hudSheet.get());
}
}

Expand All @@ -247,7 +248,7 @@ private static void renderGui() {
else
Font.drawBackground(" x" + ac, screen, 84, Screen.h - 16);
// Displays the arrow icon
screen.render(10 * 8 + 4, Screen.h - 16, 4, 1, 0, hudSheet.getSheet());
screen.render(10 * 8 + 4, Screen.h - 16, 4, 1, 0, hudSheet.get());
}
}

Expand Down Expand Up @@ -356,16 +357,16 @@ private static void renderGui() {
for (int i = 1; i <= 30; i++) {
// Renders your current red default hearts, golden hearts for 20 HP, obsidian hearts for 30 HP, or black hearts for damaged health.
if (i < 11) {
screen.render((i - 1) * 8, Screen.h - 16, 0, 1, 0, hudSheet.getSheet()); // Empty Hearts
screen.render((i - 1) * 8, Screen.h - 16, 0, 1, 0, hudSheet.get()); // Empty Hearts
}
if (i < player.health + 1 && i < 11) {
screen.render((i - 1) * 8, Screen.h - 16, 0, 0, 0, hudSheet.getSheet()); // Red Hearts
screen.render((i - 1) * 8, Screen.h - 16, 0, 0, 0, hudSheet.get()); // Red Hearts
}
if (i < player.health + 1 && i < 21 && i >= 11) {
screen.render((i - 11) * 8, Screen.h - 16, 0, 2, 0, hudSheet.getSheet()); // Yellow Hearts
screen.render((i - 11) * 8, Screen.h - 16, 0, 2, 0, hudSheet.get()); // Yellow Hearts
}
if (i < player.health + 1 && i >= 21) {
screen.render((i - 21) * 8, Screen.h - 16, 0, 3, 0, hudSheet.getSheet()); // Obsidian Hearts
screen.render((i - 21) * 8, Screen.h - 16, 0, 3, 0, hudSheet.get()); // Obsidian Hearts
}
}
for (int i = 0; i < Player.maxStat; i++) {
Expand All @@ -379,24 +380,24 @@ private static void renderGui() {
if (player.staminaRechargeDelay > 0) {
// Creates the white/gray blinking effect when you run out of stamina.
if (player.staminaRechargeDelay / 4 % 2 == 0) {
screen.render(i * 8, Screen.h - 8, 1, 2, 0, hudSheet.getSheet());
screen.render(i * 8, Screen.h - 8, 1, 2, 0, hudSheet.get());
} else {
screen.render(i * 8, Screen.h - 8, 1, 1, 0, hudSheet.getSheet());
screen.render(i * 8, Screen.h - 8, 1, 1, 0, hudSheet.get());
}
} else {
// Renders your current stamina, and uncharged gray stamina.
if (i < player.stamina) {
screen.render(i * 8, Screen.h - 8, 1, 0, 0, hudSheet.getSheet());
screen.render(i * 8, Screen.h - 8, 1, 0, 0, hudSheet.get());
} else {
screen.render(i * 8, Screen.h - 8, 1, 1, 0, hudSheet.getSheet());
screen.render(i * 8, Screen.h - 8, 1, 1, 0, hudSheet.get());
}
}

// Renders hunger
if (i < player.hunger) {
screen.render(i * 8 + (Screen.w - 80), Screen.h - 16, 2, 0, 0, hudSheet.getSheet());
screen.render(i * 8 + (Screen.w - 80), Screen.h - 16, 2, 0, 0, hudSheet.get());
} else {
screen.render(i * 8 + (Screen.w - 80), Screen.h - 16, 2, 1, 0, hudSheet.getSheet());
screen.render(i * 8 + (Screen.w - 80), Screen.h - 16, 2, 1, 0, hudSheet.get());
}
}
}
Expand Down Expand Up @@ -429,20 +430,20 @@ public static void renderBossbar(int length, String title) {
int ACTIVE_BOSSBAR = 5; // sprite x position


screen.render(x + (max_bar_length * 2), y, 0, INACTIVE_BOSSBAR, 1, hudSheet.getSheet()); // left corner
screen.render(x + (max_bar_length * 2), y, 0, INACTIVE_BOSSBAR, 1, hudSheet.get()); // left corner

// The middle
for (int bx = 0; bx < max_bar_length; bx++) {
for (int by = 0; by < 1; by++) {
screen.render(x + bx * 2, y + by * 8, 3, INACTIVE_BOSSBAR, 0, hudSheet.getSheet());
screen.render(x + bx * 2, y + by * 8, 3, INACTIVE_BOSSBAR, 0, hudSheet.get());
}
}

screen.render(x - 5 , y , 0, ACTIVE_BOSSBAR, 0, hudSheet.getSheet()); // right corner
screen.render(x - 5 , y , 0, ACTIVE_BOSSBAR, 0, hudSheet.get()); // right corner

for (int bx = 0; bx < bar_length; bx++) {
for (int by = 0; by < 1; by++) {
screen.render(x + bx * 2, y + by * 8, 3, ACTIVE_BOSSBAR, 0, hudSheet.getSheet());
screen.render(x + bx * 2, y + by * 8, 3, ACTIVE_BOSSBAR, 0, hudSheet.get());
}
}

Expand Down Expand Up @@ -544,24 +545,24 @@ private static void renderFocusNagger() {
int h = 1;

// Renders the four corners of the box
screen.render(xx - 8, yy - 8, 0, 6, 0, hudSheet.getSheet());
screen.render(xx + w * 8, yy - 8, 0, 6, 1, hudSheet.getSheet());
screen.render(xx - 8, yy + 8, 0, 6, 2, hudSheet.getSheet());
screen.render(xx + w * 8, yy + 8, 0, 6, 3, hudSheet.getSheet());
screen.render(xx - 8, yy - 8, 0, 6, 0, hudSheet.get());
screen.render(xx + w * 8, yy - 8, 0, 6, 1, hudSheet.get());
screen.render(xx - 8, yy + 8, 0, 6, 2, hudSheet.get());
screen.render(xx + w * 8, yy + 8, 0, 6, 3, hudSheet.get());

// Renders each part of the box...
for (int x = 0; x < w; x++) {
screen.render(xx + x * 8, yy - 8, 1, 6, 0, hudSheet.getSheet()); // ...Top part
screen.render(xx + x * 8, yy + 8, 1, 6, 2, hudSheet.getSheet()); // ...Bottom part
screen.render(xx + x * 8, yy - 8, 1, 6, 0, hudSheet.get()); // ...Top part
screen.render(xx + x * 8, yy + 8, 1, 6, 2, hudSheet.get()); // ...Bottom part
}
for (int y = 0; y < h; y++) {
screen.render(xx - 8, yy + y * 8, 2, 6, 0, hudSheet.getSheet()); // ...Left part
screen.render(xx + w * 8, yy + y * 8, 2, 6, 1, hudSheet.getSheet()); // ...Right part
screen.render(xx - 8, yy + y * 8, 2, 6, 0, hudSheet.get()); // ...Left part
screen.render(xx + w * 8, yy + y * 8, 2, 6, 1, hudSheet.get()); // ...Right part
BenCheung0422 marked this conversation as resolved.
Show resolved Hide resolved
}

// The middle
for (int x = 0; x < w; x++) {
screen.render(xx + x * 8, yy, 3, 6, 0, hudSheet.getSheet());
screen.render(xx + x * 8, yy, 3, 6, 0, hudSheet.get());
}

// Renders the focus nagger text with a flash effect...
Expand Down
31 changes: 20 additions & 11 deletions src/client/java/minicraft/entity/Arrow.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,24 @@
import java.util.List;

public class Arrow extends Entity implements ClientTickable {
private static final LinkedSprite spriteRight;
private static final LinkedSprite spriteLeft;
private static final LinkedSprite spriteUp;
private static final LinkedSprite spriteDown;

static {
LinkedSprite.SpriteLinkBuilder builder = new LinkedSprite.SpriteLinkBuilder(SpriteType.Entity, "arrow").setSpriteSize(1, 1);
spriteRight = builder.setSpritePos(0, 0).createSpriteLink();
spriteLeft = builder.setSpritePos(1, 0).createSpriteLink();
spriteUp = builder.setSpritePos(2, 0).createSpriteLink();
spriteDown = builder.setSpritePos(3, 0).createSpriteLink();
}

private Direction dir;
private int damage;
public Mob owner;
private int speed;
private LinkedSprite sprite = new LinkedSprite(SpriteType.Entity, "arrow").setSpriteSize(1, 1);
private final LinkedSprite sprite;

public Arrow(Mob owner, Direction dir, int dmg) {
this(owner, owner.x, owner.y, dir, dmg);
Expand All @@ -33,11 +46,12 @@ public Arrow(Mob owner, int x, int y, Direction dir, int dmg) {
damage = dmg;
col = Color.get(-1, 111, 222, 430);

int xt = 0;
if(dir == Direction.LEFT) xt = 1;
if(dir == Direction.UP) xt = 2;
if(dir == Direction.DOWN) xt = 3;
sprite.setSpritePos(xt, 0);
switch (dir) {
case UP: sprite = spriteUp; break;
case DOWN: sprite = spriteDown; break;
case LEFT: sprite = spriteLeft; break;
case RIGHT: default: sprite = spriteRight; break;
}

if (damage > 3) speed = 8;
else if (damage >= 0) speed = 7;
Expand Down Expand Up @@ -78,11 +92,6 @@ public void tick() {
&& !level.getTile(x / 16, y / 16).connectsToFluid
&& level.getTile(x / 16, y / 16).id != 16) {
this.remove();
try {
sprite.destroy();
} catch (DestroyFailedException e) {
Logging.SPRITE.trace(e);
}
}
}
}
Expand Down
3 changes: 2 additions & 1 deletion src/client/java/minicraft/entity/FireSpark.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@
import minicraft.gfx.SpriteLinker;

public class FireSpark extends Entity {
private static final SpriteLinker.LinkedSprite sprite = new SpriteLinker.LinkedSprite(SpriteLinker.SpriteType.Entity, "spark");
private static final SpriteLinker.LinkedSprite sprite =
new SpriteLinker.LinkedSprite.SpriteLinkBuilder(SpriteLinker.SpriteType.Entity, "spark").createSpriteLink();

private final int lifeTime; // How much time until the spark disappears
private final double xa, ya; // The x and y acceleration
Expand Down
5 changes: 2 additions & 3 deletions src/client/java/minicraft/entity/Spark.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ public class Spark extends Entity {
private double xx, yy; // The x and y positions
private int time; // The amount of time that has passed
private final AirWizard owner; // The AirWizard that created this spark
private LinkedSprite sprite = new LinkedSprite(SpriteType.Entity, "spark");
private final LinkedSprite sprite = new LinkedSprite.SpriteLinkBuilder(SpriteType.Entity, "spark").createSpriteLink();

/**
* Creates a new spark. Owner is the AirWizard which is spawning this spark.
Expand Down Expand Up @@ -76,9 +76,8 @@ public void render(Screen screen) {
randmirror = random.nextInt(4);
}

sprite.setMirror(randmirror);
screen.render(x - 4, y - 4 + 2, sprite.getSprite(), 0, false, Color.BLACK); // renders the shadow on the ground
screen.render(x - 4, y - 4 - 2, sprite); // Renders the spark
screen.render(x - 4, y - 4 - 2, sprite.getSprite(), randmirror, false); // Renders the spark
}

/**
Expand Down
3 changes: 2 additions & 1 deletion src/client/java/minicraft/entity/furniture/Bed.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,8 @@ public class Bed extends Furniture {
* Creates a new furniture with the name Bed and the bed sprite and color.
*/
public Bed() {
super("Bed", new LinkedSprite(SpriteType.Entity, "bed"), new LinkedSprite(SpriteType.Item, "bed"), 3, 2);
super("Bed", new LinkedSprite.SpriteLinkBuilder(SpriteType.Entity, "bed").createSpriteLink(),
new LinkedSprite.SpriteLinkBuilder(SpriteType.Item, "bed").createSpriteLink(), 3, 2);
}

/** Called when the player attempts to get in bed. */
Expand Down
4 changes: 2 additions & 2 deletions src/client/java/minicraft/entity/furniture/Chest.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,13 +22,13 @@ public class Chest extends Furniture implements ItemHolder {

public Chest() { this("Chest"); }

public Chest(String name) { this(name, new LinkedSprite(SpriteType.Item, "chest")); }
public Chest(String name) { this(name, new LinkedSprite.SpriteLinkBuilder(SpriteType.Item, "chest").createSpriteLink()); }
/**
* Creates a chest with a custom name.
* @param name Name of chest.
*/
public Chest(String name, LinkedSprite itemSprite) {
super(name, new LinkedSprite(SpriteType.Entity, "chest"), itemSprite, 3, 3); // Name of the chest
super(name, new LinkedSprite.SpriteLinkBuilder(SpriteType.Entity, "chest").createSpriteLink(), itemSprite, 3, 3); // Name of the chest

inventory = new Inventory(); // Initialize the inventory.
}
Expand Down
18 changes: 12 additions & 6 deletions src/client/java/minicraft/entity/furniture/Crafter.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,18 @@
public class Crafter extends Furniture {

public enum Type {
Workbench (new LinkedSprite(SpriteType.Entity, "workbench"), new LinkedSprite(SpriteType.Item, "workbench"), 3, 2, Recipes.workbenchRecipes),
Oven (new LinkedSprite(SpriteType.Entity, "oven"), new LinkedSprite(SpriteType.Item, "oven"), 3, 2, Recipes.ovenRecipes),
Furnace (new LinkedSprite(SpriteType.Entity, "furnace"), new LinkedSprite(SpriteType.Item, "furnace"), 3, 2, Recipes.furnaceRecipes),
Anvil (new LinkedSprite(SpriteType.Entity, "anvil"), new LinkedSprite(SpriteType.Item, "anvil"), 3, 2, Recipes.anvilRecipes),
Enchanter (new LinkedSprite(SpriteType.Entity, "enchanter"), new LinkedSprite(SpriteType.Item, "enchanter"), 7, 2, Recipes.enchantRecipes),
Loom (new LinkedSprite(SpriteType.Entity, "loom"), new LinkedSprite(SpriteType.Item, "loom"), 7, 2, Recipes.loomRecipes);
Workbench (new LinkedSprite.SpriteLinkBuilder(SpriteType.Entity, "workbench").createSpriteLink(),
new LinkedSprite.SpriteLinkBuilder(SpriteType.Item, "workbench").createSpriteLink(), 3, 2, Recipes.workbenchRecipes),
Oven (new LinkedSprite.SpriteLinkBuilder(SpriteType.Entity, "oven").createSpriteLink(),
new LinkedSprite.SpriteLinkBuilder(SpriteType.Item, "oven").createSpriteLink(), 3, 2, Recipes.ovenRecipes),
Furnace (new LinkedSprite.SpriteLinkBuilder(SpriteType.Entity, "furnace").createSpriteLink(),
new LinkedSprite.SpriteLinkBuilder(SpriteType.Item, "furnace").createSpriteLink(), 3, 2, Recipes.furnaceRecipes),
Anvil (new LinkedSprite.SpriteLinkBuilder(SpriteType.Entity, "anvil").createSpriteLink(),
new LinkedSprite.SpriteLinkBuilder(SpriteType.Item, "anvil").createSpriteLink(), 3, 2, Recipes.anvilRecipes),
Enchanter (new LinkedSprite.SpriteLinkBuilder(SpriteType.Entity, "enchanter").createSpriteLink(),
new LinkedSprite.SpriteLinkBuilder(SpriteType.Item, "enchanter").createSpriteLink(), 7, 2, Recipes.enchantRecipes),
Loom (new LinkedSprite.SpriteLinkBuilder(SpriteType.Entity, "loom").createSpriteLink(),
new LinkedSprite.SpriteLinkBuilder(SpriteType.Item, "loom").createSpriteLink(), 7, 2, Recipes.loomRecipes);

public ArrayList<Recipe> recipes;
protected LinkedSprite sprite;
Expand Down
6 changes: 3 additions & 3 deletions src/client/java/minicraft/entity/furniture/DeathChest.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@
import minicraft.item.StackableItem;

public class DeathChest extends Chest {
private static LinkedSprite normalSprite = new LinkedSprite(SpriteType.Entity, "chest");
private static LinkedSprite redSprite = new LinkedSprite(SpriteType.Entity, "red_chest");
private static LinkedSprite normalSprite = new LinkedSprite.SpriteLinkBuilder(SpriteType.Entity, "chest").createSpriteLink();
private static LinkedSprite redSprite = new LinkedSprite.SpriteLinkBuilder(SpriteType.Entity, "red_chest").createSpriteLink();

public int time; // Time passed (used for death chest despawn)
private int redtick = 0; //This is used to determine the shade of red when the chest is about to expire.
Expand All @@ -28,7 +28,7 @@ public class DeathChest extends Chest {
* Creates a custom chest with the name Death Chest
*/
public DeathChest() {
super("Death Chest", new LinkedSprite(SpriteType.Item, "dungeon_chest"));
super("Death Chest", new LinkedSprite.SpriteLinkBuilder(SpriteType.Item, "dungeon_chest").createSpriteLink());
this.sprite = normalSprite;

/// Set the expiration time based on the world difficulty.
Expand Down
4 changes: 2 additions & 2 deletions src/client/java/minicraft/entity/furniture/DungeonChest.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@
import java.util.Random;

public class DungeonChest extends Chest {
private static final LinkedSprite openSprite = new LinkedSprite(SpriteType.Entity, "dungeon_chest");
private static final LinkedSprite lockSprite = new LinkedSprite(SpriteType.Entity, "white_chest");
private static final LinkedSprite openSprite = new LinkedSprite.SpriteLinkBuilder(SpriteType.Entity, "dungeon_chest").createSpriteLink();
private static final LinkedSprite lockSprite = new LinkedSprite.SpriteLinkBuilder(SpriteType.Entity, "white_chest").createSpriteLink();

public Random random = new Random();
private boolean isLocked;
Expand Down
3 changes: 2 additions & 1 deletion src/client/java/minicraft/entity/furniture/KnightStatue.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,8 @@ public class KnightStatue extends Furniture {
private final int bossHealth;

public KnightStatue(int health) {
super("KnightStatue", new SpriteLinker.LinkedSprite(SpriteLinker.SpriteType.Entity, "knight_statue"), new SpriteLinker.LinkedSprite(SpriteLinker.SpriteType.Item, "knight_statue"), 3, 2);
super("KnightStatue", new SpriteLinker.LinkedSprite.SpriteLinkBuilder(SpriteLinker.SpriteType.Entity, "knight_statue").createSpriteLink(),
new SpriteLinker.LinkedSprite.SpriteLinkBuilder(SpriteLinker.SpriteType.Item, "knight_statue").createSpriteLink(), 3, 2);
bossHealth = health;
}

Expand Down
6 changes: 3 additions & 3 deletions src/client/java/minicraft/entity/furniture/Lantern.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,9 @@ public enum Type {
* @param type Type of lantern.
*/
public Lantern(Lantern.Type type) {
super(type.title, new LinkedSprite(SpriteType.Entity, type == Type.NORM ? "lantern" :
type == Type.IRON ? "iron_lantern" : "gold_lantern"), new LinkedSprite(SpriteType.Item, type == Type.NORM ? "lantern" :
type == Type.IRON ? "iron_lantern" : "gold_lantern"), 3, 2);
super(type.title, new LinkedSprite.SpriteLinkBuilder(SpriteType.Entity, type == Type.NORM ? "lantern" :
type == Type.IRON ? "iron_lantern" : "gold_lantern").createSpriteLink(), new LinkedSprite.SpriteLinkBuilder(SpriteType.Item, type == Type.NORM ? "lantern" :
type == Type.IRON ? "iron_lantern" : "gold_lantern").createSpriteLink(), 3, 2);
this.type = type;
}

Expand Down
21 changes: 11 additions & 10 deletions src/client/java/minicraft/entity/furniture/Spawner.java
Original file line number Diff line number Diff line change
Expand Up @@ -71,16 +71,17 @@ private void initMob(MobAi m) {
* @param m Mob which will be spawned.
*/
public Spawner(MobAi m) {
super(getClassName(m.getClass()) + " Spawner", new LinkedSprite(SpriteType.Entity, "spawner"), m instanceof Cow ? new LinkedSprite(SpriteType.Item, "cow_spawner"):
m instanceof Pig ? new LinkedSprite(SpriteType.Item, "pig_spawner"):
m instanceof Sheep ? new LinkedSprite(SpriteType.Item, "sheep_spawner"):
m instanceof Slime ? new LinkedSprite(SpriteType.Item, "slime_spawner"):
m instanceof Zombie ? new LinkedSprite(SpriteType.Item, "zombie_spawner"):
m instanceof Creeper ? new LinkedSprite(SpriteType.Item, "creeper_spawner"):
m instanceof Skeleton ? new LinkedSprite(SpriteType.Item, "skeleton_spawner"):
m instanceof Snake ? new LinkedSprite(SpriteType.Item, "snake_spawner"):
m instanceof Knight ? new LinkedSprite(SpriteType.Item, "knight_spawner"):
new LinkedSprite(SpriteType.Item, "air_wizard_spawner"), 7, 2);
super(getClassName(m.getClass()) + " Spawner", new LinkedSprite.SpriteLinkBuilder(SpriteType.Entity, "spawner").createSpriteLink(),
m instanceof Cow ? new LinkedSprite.SpriteLinkBuilder(SpriteType.Item, "cow_spawner").createSpriteLink():
m instanceof Pig ? new LinkedSprite.SpriteLinkBuilder(SpriteType.Item, "pig_spawner").createSpriteLink():
m instanceof Sheep ? new LinkedSprite.SpriteLinkBuilder(SpriteType.Item, "sheep_spawner").createSpriteLink():
m instanceof Slime ? new LinkedSprite.SpriteLinkBuilder(SpriteType.Item, "slime_spawner").createSpriteLink():
m instanceof Zombie ? new LinkedSprite.SpriteLinkBuilder(SpriteType.Item, "zombie_spawner").createSpriteLink():
m instanceof Creeper ? new LinkedSprite.SpriteLinkBuilder(SpriteType.Item, "creeper_spawner").createSpriteLink():
m instanceof Skeleton ? new LinkedSprite.SpriteLinkBuilder(SpriteType.Item, "skeleton_spawner").createSpriteLink():
m instanceof Snake ? new LinkedSprite.SpriteLinkBuilder(SpriteType.Item, "snake_spawner").createSpriteLink():
m instanceof Knight ? new LinkedSprite.SpriteLinkBuilder(SpriteType.Item, "knight_spawner").createSpriteLink():
new LinkedSprite.SpriteLinkBuilder(SpriteType.Item, "air_wizard_spawner").createSpriteLink(), 7, 2);
health = 100;
initMob(m);
resetSpawnInterval();
Expand Down
Loading