diff --git a/src/main/java/minicraft/core/Game.java b/src/main/java/minicraft/core/Game.java index 0cf121e3..e7b12daf 100644 --- a/src/main/java/minicraft/core/Game.java +++ b/src/main/java/minicraft/core/Game.java @@ -1,8 +1,5 @@ package minicraft.core; -import de.jcm.discordgamesdk.Core; -import de.jcm.discordgamesdk.CreateParams; -import de.jcm.discordgamesdk.activity.Activity; import java.awt.Color; import java.awt.Font; import java.awt.GraphicsEnvironment; @@ -14,10 +11,18 @@ import java.util.ArrayList; import java.util.List; import java.util.Random; + import javax.swing.JOptionPane; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.UIManager; + +import org.jetbrains.annotations.Nullable; +import org.tinylog.Logger; + +import de.jcm.discordgamesdk.Core; +import de.jcm.discordgamesdk.CreateParams; +import de.jcm.discordgamesdk.activity.Activity; import minicraft.core.io.InputHandler; import minicraft.core.io.Settings; import minicraft.core.io.Sound; @@ -29,8 +34,6 @@ import minicraft.screen.Display; import minicraft.screen.TitleDisplay; import minicraft.util.Info; -import org.jetbrains.annotations.Nullable; -import org.tinylog.Logger; //-------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/src/main/java/minicraft/core/Initializer.java b/src/main/java/minicraft/core/Initializer.java index 54ca946f..a55c12c4 100644 --- a/src/main/java/minicraft/core/Initializer.java +++ b/src/main/java/minicraft/core/Initializer.java @@ -1,6 +1,5 @@ package minicraft.core; -import de.jcm.discordgamesdk.Core; import java.awt.BorderLayout; import java.awt.event.ComponentAdapter; import java.awt.event.ComponentEvent; @@ -8,12 +7,16 @@ import java.awt.event.WindowListener; import java.awt.image.BufferedImage; import java.io.IOException; + import javax.imageio.ImageIO; import javax.swing.JFrame; import javax.swing.WindowConstants; -import minicraft.core.io.FileHandler; + import org.tinylog.Logger; +import de.jcm.discordgamesdk.Core; +import minicraft.core.io.FileHandler; + /* * Make the game window and ticks counter */ diff --git a/src/main/java/minicraft/core/Renderer.java b/src/main/java/minicraft/core/Renderer.java index 8c041ac1..e664d7d5 100644 --- a/src/main/java/minicraft/core/Renderer.java +++ b/src/main/java/minicraft/core/Renderer.java @@ -11,7 +11,11 @@ import java.util.Map; import java.util.Objects; import java.util.Random; + import javax.imageio.ImageIO; + +import org.tinylog.Logger; + import minicraft.core.io.Settings; import minicraft.entity.furniture.Bed; import minicraft.entity.mob.Player; @@ -35,7 +39,6 @@ import minicraft.screen.LoadingDisplay; import minicraft.screen.RelPos; import minicraft.util.Info; -import org.tinylog.Logger; /* * Make the game display logic @@ -399,7 +402,7 @@ else if (Updater.scoreTime >= 3600) { int pyy = 0; // the height of the box int pw = 0; // length of message in characters. int ph = 0; - int px = (Screen.w - 8) / 3 + pxx; + int px = (Screen.w - 8) / 3 + pxx - 8; int py = (Screen.h - 8) / 36 - 130; for (int i = 0; i < effects.length; i++) { diff --git a/src/main/java/minicraft/core/VersionInfo.java b/src/main/java/minicraft/core/VersionInfo.java index aefac137..fe255381 100644 --- a/src/main/java/minicraft/core/VersionInfo.java +++ b/src/main/java/minicraft/core/VersionInfo.java @@ -1,8 +1,9 @@ package minicraft.core; -import minicraft.saveload.Version; import org.json.JSONObject; +import minicraft.saveload.Version; + public class VersionInfo { public final Version version; diff --git a/src/main/java/minicraft/core/World.java b/src/main/java/minicraft/core/World.java index ede44d97..ac68434a 100644 --- a/src/main/java/minicraft/core/World.java +++ b/src/main/java/minicraft/core/World.java @@ -1,6 +1,10 @@ package minicraft.core; import java.util.Random; + +import org.jetbrains.annotations.Nullable; +import org.tinylog.Logger; + import minicraft.core.io.Settings; import minicraft.entity.furniture.Bed; import minicraft.entity.mob.Player; @@ -11,8 +15,6 @@ import minicraft.screen.PlayerDeathDisplay; import minicraft.screen.WorldGenDisplay; import minicraft.screen.WorldSelectDisplay; -import org.jetbrains.annotations.Nullable; -import org.tinylog.Logger; public class World extends Game { private World() {} diff --git a/src/main/java/minicraft/core/io/InputHandler.java b/src/main/java/minicraft/core/io/InputHandler.java index 3357d1a4..0a8b9463 100644 --- a/src/main/java/minicraft/core/io/InputHandler.java +++ b/src/main/java/minicraft/core/io/InputHandler.java @@ -8,9 +8,11 @@ import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Map.Entry; -import minicraft.core.Game; + import org.jetbrains.annotations.Nullable; +import minicraft.core.Game; + public class InputHandler implements KeyListener { /** * This class handles key presses; this also implements MouseListener... but I diff --git a/src/main/java/minicraft/core/io/Settings.java b/src/main/java/minicraft/core/io/Settings.java index 7ff72c00..d9781da3 100644 --- a/src/main/java/minicraft/core/io/Settings.java +++ b/src/main/java/minicraft/core/io/Settings.java @@ -4,6 +4,7 @@ import java.awt.GraphicsEnvironment; import java.awt.HeadlessException; import java.util.HashMap; + import minicraft.screen.entry.ArrayEntry; import minicraft.screen.entry.BooleanEntry; import minicraft.screen.entry.RangeEntry; diff --git a/src/main/java/minicraft/core/io/Sound.java b/src/main/java/minicraft/core/io/Sound.java index 02e3db2b..70ff183b 100644 --- a/src/main/java/minicraft/core/io/Sound.java +++ b/src/main/java/minicraft/core/io/Sound.java @@ -2,14 +2,17 @@ import java.io.IOException; import java.net.URL; + import javax.sound.sampled.AudioFormat; import javax.sound.sampled.AudioSystem; import javax.sound.sampled.Clip; import javax.sound.sampled.DataLine; +import javax.sound.sampled.FloatControl; import javax.sound.sampled.Line; import javax.sound.sampled.LineEvent; import javax.sound.sampled.LineUnavailableException; import javax.sound.sampled.UnsupportedAudioFileException; + import org.tinylog.Logger; public class Sound { // Creates sounds from their respective files @@ -204,8 +207,28 @@ public void loop(boolean start) { clip.stop(); } } + + public void echo(int x) { + if (!(boolean) Settings.get("sound") || clip == null) { + return; + } + + clip.setFramePosition(0); + clip.start(); + } public void stop() { // This stops the clip clip.stop(); } + + public float getVolume() { + FloatControl gainControl = (FloatControl) clip.getControl(FloatControl.Type.MASTER_GAIN); + return (float) Math.pow(10f, gainControl.getValue() / 20f); + } + + public void setVolume(float volume) { + if (volume < 0f || volume > 1f) throw new IllegalArgumentException("Volume not valid: " + volume); + FloatControl gainControl = (FloatControl) clip.getControl(FloatControl.Type.MASTER_GAIN); + gainControl.setValue(20f * (float) Math.log10(volume)); + } } diff --git a/src/main/java/minicraft/entity/Arrow.java b/src/main/java/minicraft/entity/Arrow.java index acc5508c..3c658b6f 100644 --- a/src/main/java/minicraft/entity/Arrow.java +++ b/src/main/java/minicraft/entity/Arrow.java @@ -1,6 +1,7 @@ package minicraft.entity; import java.util.List; + import minicraft.core.io.Settings; import minicraft.entity.mob.Mob; import minicraft.entity.mob.Player; diff --git a/src/main/java/minicraft/entity/Boat.java b/src/main/java/minicraft/entity/Boat.java index 25a0b33a..a21ad853 100644 --- a/src/main/java/minicraft/entity/Boat.java +++ b/src/main/java/minicraft/entity/Boat.java @@ -2,6 +2,9 @@ import java.util.List; import java.util.Random; + +import org.jetbrains.annotations.Nullable; + import minicraft.core.Game; import minicraft.core.Updater; import minicraft.core.io.Settings; @@ -14,7 +17,6 @@ import minicraft.item.BoatItem; import minicraft.item.Item; import minicraft.item.PowerGloveItem; -import org.jetbrains.annotations.Nullable; public class Boat extends Entity { private static Sprite boatSprite = new Sprite(1, 30, 2, 2, 0); diff --git a/src/main/java/minicraft/entity/Entity.java b/src/main/java/minicraft/entity/Entity.java index 8cd71347..494414b5 100644 --- a/src/main/java/minicraft/entity/Entity.java +++ b/src/main/java/minicraft/entity/Entity.java @@ -3,15 +3,17 @@ import java.util.ArrayList; import java.util.List; import java.util.Random; + +import org.jetbrains.annotations.Nullable; + import minicraft.core.Game; -import minicraft.network.Network; import minicraft.core.Updater; import minicraft.entity.mob.Player; import minicraft.gfx.Rectangle; import minicraft.gfx.Screen; import minicraft.item.Item; import minicraft.level.Level; -import org.jetbrains.annotations.Nullable; +import minicraft.network.Network; public abstract class Entity implements Tickable { diff --git a/src/main/java/minicraft/entity/Fireball.java b/src/main/java/minicraft/entity/Fireball.java index be483972..14285170 100644 --- a/src/main/java/minicraft/entity/Fireball.java +++ b/src/main/java/minicraft/entity/Fireball.java @@ -1,6 +1,7 @@ package minicraft.entity; import java.util.List; + import minicraft.entity.mob.Mob; import minicraft.entity.mob.Player; import minicraft.gfx.Color; diff --git a/src/main/java/minicraft/entity/ItemEntity.java b/src/main/java/minicraft/entity/ItemEntity.java index f7ef5b01..83600f7f 100644 --- a/src/main/java/minicraft/entity/ItemEntity.java +++ b/src/main/java/minicraft/entity/ItemEntity.java @@ -1,6 +1,7 @@ package minicraft.entity; import java.util.List; + import minicraft.core.io.Settings; import minicraft.entity.mob.Player; import minicraft.entity.particle.FireParticle; diff --git a/src/main/java/minicraft/entity/Spark.java b/src/main/java/minicraft/entity/Spark.java index 3e1ca245..ad2c2138 100644 --- a/src/main/java/minicraft/entity/Spark.java +++ b/src/main/java/minicraft/entity/Spark.java @@ -1,6 +1,7 @@ package minicraft.entity; import java.util.List; + import minicraft.core.Game; import minicraft.core.io.Settings; import minicraft.entity.mob.Mob; @@ -106,8 +107,8 @@ public void tick() { time++; if (type == 1) SparkCloud(2); - if (type == 2) SparkRain(4); - if (type == 3) SparkSpiralRain(5); + if (type == 2) SparkRain(3); + if (type == 3) SparkSpiralRain(4); if (time >= lifeTime) { remove(); // Remove this from the world diff --git a/src/main/java/minicraft/entity/XpOrb.java b/src/main/java/minicraft/entity/XpOrb.java index 75a2632c..08de8b8b 100644 --- a/src/main/java/minicraft/entity/XpOrb.java +++ b/src/main/java/minicraft/entity/XpOrb.java @@ -48,14 +48,10 @@ private void goToOwner() { int yd = (int) (player.y - y + Math.toRadians(xp)); int sig0 = 1; - if (xd < sig0) - xa = -0.2; - if (xd > sig0) - xa = +0.2; - if (yd < sig0) - ya = -0.2; - if (yd > sig0) - ya = +0.2; + if (xd < sig0) xa = -0.2; + if (xd > sig0) xa = +0.2; + if (yd < sig0) ya = -0.2; + if (yd > sig0) ya = +0.2; if (random.nextInt(4) == 4) { xa += 0.1; @@ -82,6 +78,7 @@ public void tick() { remove(); // Remove this from the world return; } + if (level != null && level.getTile(x >> 4, y >> 4) == Tiles.get("lava")) { remove(); } diff --git a/src/main/java/minicraft/entity/furniture/Chest.java b/src/main/java/minicraft/entity/furniture/Chest.java index 791b5e4f..8a5fd1dd 100644 --- a/src/main/java/minicraft/entity/furniture/Chest.java +++ b/src/main/java/minicraft/entity/furniture/Chest.java @@ -2,6 +2,9 @@ import java.io.IOException; import java.util.List; + +import org.jetbrains.annotations.Nullable; + import minicraft.core.Game; import minicraft.entity.Direction; import minicraft.entity.ItemHolder; @@ -12,7 +15,6 @@ import minicraft.item.Items; import minicraft.saveload.Load; import minicraft.screen.ContainerDisplay; -import org.jetbrains.annotations.Nullable; public class Chest extends Furniture implements ItemHolder { private Inventory inventory; // Inventory of the chest diff --git a/src/main/java/minicraft/entity/furniture/Crafter.java b/src/main/java/minicraft/entity/furniture/Crafter.java index 8d4a709b..9ca6bc27 100644 --- a/src/main/java/minicraft/entity/furniture/Crafter.java +++ b/src/main/java/minicraft/entity/furniture/Crafter.java @@ -1,6 +1,7 @@ package minicraft.entity.furniture; import java.util.ArrayList; + import minicraft.core.Game; import minicraft.entity.mob.Player; import minicraft.gfx.Sprite; diff --git a/src/main/java/minicraft/entity/furniture/Furniture.java b/src/main/java/minicraft/entity/furniture/Furniture.java index 6761ac67..2dd8b28b 100644 --- a/src/main/java/minicraft/entity/furniture/Furniture.java +++ b/src/main/java/minicraft/entity/furniture/Furniture.java @@ -1,5 +1,7 @@ package minicraft.entity.furniture; +import org.jetbrains.annotations.Nullable; + import minicraft.core.Game; import minicraft.core.io.Sound; import minicraft.entity.Direction; @@ -13,8 +15,6 @@ import minicraft.item.PowerGloveItem; import minicraft.level.tile.Tiles; -import org.jetbrains.annotations.Nullable; - /** * Many furniture classes are very similar; they might not even need to be there * at all... diff --git a/src/main/java/minicraft/entity/furniture/Lantern.java b/src/main/java/minicraft/entity/furniture/Lantern.java index b1560f5c..4968ae9b 100644 --- a/src/main/java/minicraft/entity/furniture/Lantern.java +++ b/src/main/java/minicraft/entity/furniture/Lantern.java @@ -1,6 +1,7 @@ package minicraft.entity.furniture; import java.util.Random; + import minicraft.core.io.Settings; import minicraft.entity.particle.BrightParticle; import minicraft.gfx.Sprite; diff --git a/src/main/java/minicraft/entity/furniture/Spawner.java b/src/main/java/minicraft/entity/furniture/Spawner.java index d6f463fe..4d9b2652 100644 --- a/src/main/java/minicraft/entity/furniture/Spawner.java +++ b/src/main/java/minicraft/entity/furniture/Spawner.java @@ -2,6 +2,7 @@ import java.util.ArrayList; import java.util.Random; + import minicraft.core.Game; import minicraft.core.io.Settings; import minicraft.core.io.Sound; diff --git a/src/main/java/minicraft/entity/furniture/Tnt.java b/src/main/java/minicraft/entity/furniture/Tnt.java index 66a13a0a..d0577fa4 100644 --- a/src/main/java/minicraft/entity/furniture/Tnt.java +++ b/src/main/java/minicraft/entity/furniture/Tnt.java @@ -85,7 +85,7 @@ public void tick() { if (!tnt.fuseLit) { tnt.fuseLit = true; - Sound.Furniture_tnt_fuse.play(); + Sound.Furniture_tnt_fuse.echo(x); tnt.ftik = FUSE_TIME * 2 / 3; } @@ -108,12 +108,12 @@ public void tick() { // Random explode sound switch (random.nextInt(4)) { - case 0: Sound.Furniture_tnt_explode.play(); break; - case 1: Sound.Furniture_tnt_explode.play(); break; - case 2: Sound.Furniture_tnt_explode_2.play(); break; - case 3: Sound.Furniture_tnt_explode_3.play(); break; - case 4: Sound.Furniture_tnt_explode_4.play(); break; - default: Sound.Furniture_tnt_explode.play(); break; + case 0: Sound.Furniture_tnt_explode.echo(x); break; + case 1: Sound.Furniture_tnt_explode.echo(x); break; + case 2: Sound.Furniture_tnt_explode_2.echo(x); break; + case 3: Sound.Furniture_tnt_explode_3.echo(x); break; + case 4: Sound.Furniture_tnt_explode_4.echo(x); break; + default: Sound.Furniture_tnt_explode.echo(x); break; } level.setAreaTiles(xt, yt, 1, Tiles.get("explode"), 0, explosionBlacklist); diff --git a/src/main/java/minicraft/entity/mob/Cat.java b/src/main/java/minicraft/entity/mob/Cat.java index 8aa0bd4d..339baeee 100644 --- a/src/main/java/minicraft/entity/mob/Cat.java +++ b/src/main/java/minicraft/entity/mob/Cat.java @@ -1,6 +1,7 @@ package minicraft.entity.mob; import java.util.Random; + import minicraft.core.io.Settings; import minicraft.entity.particle.HeartParticle; import minicraft.gfx.MobSprite; diff --git a/src/main/java/minicraft/entity/mob/Chicken.java b/src/main/java/minicraft/entity/mob/Chicken.java index 060927eb..13a90ef5 100644 --- a/src/main/java/minicraft/entity/mob/Chicken.java +++ b/src/main/java/minicraft/entity/mob/Chicken.java @@ -1,6 +1,7 @@ package minicraft.entity.mob; import java.util.Random; + import minicraft.core.Game; import minicraft.core.io.Settings; import minicraft.entity.particle.HeartParticle; diff --git a/src/main/java/minicraft/entity/mob/Cow.java b/src/main/java/minicraft/entity/mob/Cow.java index 080b85b6..f1a71394 100644 --- a/src/main/java/minicraft/entity/mob/Cow.java +++ b/src/main/java/minicraft/entity/mob/Cow.java @@ -1,6 +1,7 @@ package minicraft.entity.mob; import java.util.Random; + import minicraft.core.io.Settings; import minicraft.entity.particle.HeartParticle; import minicraft.gfx.MobSprite; diff --git a/src/main/java/minicraft/entity/mob/Creeper.java b/src/main/java/minicraft/entity/mob/Creeper.java index 403ea98c..f134079f 100644 --- a/src/main/java/minicraft/entity/mob/Creeper.java +++ b/src/main/java/minicraft/entity/mob/Creeper.java @@ -2,6 +2,8 @@ import java.util.ArrayList; import java.util.List; + +import minicraft.core.Game; import minicraft.core.io.Settings; import minicraft.core.io.Sound; import minicraft.entity.Direction; @@ -42,8 +44,9 @@ public Creeper(int lvl) { public boolean move(int xa, int ya) { boolean result = super.move(xa, ya); dir = Direction.DOWN; - if (xa == 0 && ya == 0) + if (xa == 0 && ya == 0) { walkDist = 0; + } return result; } @@ -51,8 +54,9 @@ public boolean move(int xa, int ya) { public void tick() { super.tick(); - if (Settings.get("diff").equals("Peaceful")) + if (Settings.get("diff").equals("Peaceful") || Game.isMode("creative")) { return; // Creeper should not explode if player is in passive mode + } if (fuseTime > 0) { fuseTime--; // fuse getting shorter... @@ -177,6 +181,9 @@ protected void touchedBy(Entity entity) { if (Settings.get("diff").equals("Peaceful")) return; + + if (Game.isMode("creative")) + return; if (entity instanceof Player) { if (fuseTime == 0 && !fuseLit) { diff --git a/src/main/java/minicraft/entity/mob/DefenderMob.java b/src/main/java/minicraft/entity/mob/DefenderMob.java index db9a3434..e0bae47d 100644 --- a/src/main/java/minicraft/entity/mob/DefenderMob.java +++ b/src/main/java/minicraft/entity/mob/DefenderMob.java @@ -92,7 +92,7 @@ public static boolean checkStartPos(Level level, int x, int y) { && tile != Tiles.get("path")) { return false; } else if (tile != Tiles.get("Grass") && tile != Tiles.get("Sand") && tile != Tiles.get("Snow") - && tile != Tiles.get("birch tree") && tile != Tiles.get("tree") && tile != Tiles.get("flower") + && tile != Tiles.get("Birch tree") && tile != Tiles.get("Oak tree") && tile != Tiles.get("flower") && tile != Tiles.get("water") && tile != Tiles.get("wheat") && tile != Tiles.get("farmland")) { return true; } else diff --git a/src/main/java/minicraft/entity/mob/EnemyMob.java b/src/main/java/minicraft/entity/mob/EnemyMob.java index 73dd7b9a..a1d4c506 100644 --- a/src/main/java/minicraft/entity/mob/EnemyMob.java +++ b/src/main/java/minicraft/entity/mob/EnemyMob.java @@ -1,5 +1,7 @@ package minicraft.entity.mob; +import org.jetbrains.annotations.Nullable; + import minicraft.core.Game; import minicraft.core.Updater; import minicraft.core.io.Settings; @@ -15,7 +17,6 @@ import minicraft.level.Level; import minicraft.level.tile.Tile; import minicraft.level.tile.Tiles; -import org.jetbrains.annotations.Nullable; public class EnemyMob extends MobAi { diff --git a/src/main/java/minicraft/entity/mob/FlyMob.java b/src/main/java/minicraft/entity/mob/FlyMob.java index 4dd2b59d..3f016077 100644 --- a/src/main/java/minicraft/entity/mob/FlyMob.java +++ b/src/main/java/minicraft/entity/mob/FlyMob.java @@ -61,7 +61,7 @@ public static boolean checkStartPos(Level level, int x, int y) { return false; Tile tile = level.getTile(x >> 4, y >> 4); - return tile == Tiles.get("grass") || tile == Tiles.get("flower") || tile == Tiles.get("tree") || tile == Tiles.get("rock") || tile == Tiles.get("lawn"); + return tile == Tiles.get("grass") || tile == Tiles.get("flower") || tile == Tiles.get("Oak tree") || tile == Tiles.get("rock") || tile == Tiles.get("lawn"); } diff --git a/src/main/java/minicraft/entity/mob/PassiveMob.java b/src/main/java/minicraft/entity/mob/PassiveMob.java index 946b79ba..f4d70c8c 100644 --- a/src/main/java/minicraft/entity/mob/PassiveMob.java +++ b/src/main/java/minicraft/entity/mob/PassiveMob.java @@ -1,5 +1,7 @@ package minicraft.entity.mob; +import org.jetbrains.annotations.Nullable; + import minicraft.core.Game; import minicraft.core.Updater; import minicraft.core.io.Settings; @@ -13,7 +15,6 @@ import minicraft.level.Level; import minicraft.level.tile.Tile; import minicraft.level.tile.Tiles; -import org.jetbrains.annotations.Nullable; public class PassiveMob extends MobAi { protected int color; diff --git a/src/main/java/minicraft/entity/mob/Player.java b/src/main/java/minicraft/entity/mob/Player.java index 3f3d7a2e..a438143a 100644 --- a/src/main/java/minicraft/entity/mob/Player.java +++ b/src/main/java/minicraft/entity/mob/Player.java @@ -5,6 +5,10 @@ import java.util.HashMap; import java.util.List; import java.util.Random; + +import org.jetbrains.annotations.Nullable; +import org.tinylog.Logger; + import minicraft.core.Game; import minicraft.core.Renderer; import minicraft.core.Updater; @@ -65,8 +69,6 @@ import minicraft.screen.PlayerInvDisplay; import minicraft.screen.WorldSelectDisplay; import minicraft.util.Vector2; -import org.jetbrains.annotations.Nullable; -import org.tinylog.Logger; public class Player extends Mob implements ItemHolder, ClientTickable { protected InputHandler input; @@ -512,7 +514,7 @@ else if (level.getTile(x / 16, y / 16) == Tiles.get("lava")) { if (onFallDelay <= 0) { World.scheduleLevelChange(-1); onFallDelay = 40; - // directHurt(5, attackDir); TODO: do hurt player with 5 damage when touch the ground + // TODO: do hurt player with 5 damage when touch the ground fallWarn = false; return; diff --git a/src/main/java/minicraft/entity/mob/Sheep.java b/src/main/java/minicraft/entity/mob/Sheep.java index e4d0b008..d2e8640f 100644 --- a/src/main/java/minicraft/entity/mob/Sheep.java +++ b/src/main/java/minicraft/entity/mob/Sheep.java @@ -1,5 +1,7 @@ package minicraft.entity.mob; +import org.jetbrains.annotations.Nullable; + import minicraft.core.Updater; import minicraft.core.io.Settings; import minicraft.entity.Direction; @@ -11,7 +13,6 @@ import minicraft.item.ToolType; import minicraft.level.tile.Tile; import minicraft.level.tile.Tiles; -import org.jetbrains.annotations.Nullable; public class Sheep extends PassiveMob { private static MobSprite[][] sprites = MobSprite.compileMobSpriteAnimations(0, 26); diff --git a/src/main/java/minicraft/entity/mob/Skeleton.java b/src/main/java/minicraft/entity/mob/Skeleton.java index a0054299..ca7222d5 100644 --- a/src/main/java/minicraft/entity/mob/Skeleton.java +++ b/src/main/java/minicraft/entity/mob/Skeleton.java @@ -1,5 +1,6 @@ package minicraft.entity.mob; +import minicraft.core.Game; import minicraft.core.io.Settings; import minicraft.entity.Arrow; import minicraft.gfx.MobSprite; @@ -34,8 +35,17 @@ public Skeleton(int lvl) { public void tick() { super.tick(); - if (skipTick()) + if (skipTick()) { return; + } + + if (Game.isMode("creative")) { + return; + } + + if (Settings.get("diff").equals("Peaceful")) { + return; + } Player player = getClosestPlayer(); if (player != null && randomWalkTime == 0) { diff --git a/src/main/java/minicraft/entity/mob/boss/EyeQueen.java b/src/main/java/minicraft/entity/mob/boss/EyeQueen.java index 2529cb6e..a4dc4fa9 100644 --- a/src/main/java/minicraft/entity/mob/boss/EyeQueen.java +++ b/src/main/java/minicraft/entity/mob/boss/EyeQueen.java @@ -1,6 +1,7 @@ package minicraft.entity.mob.boss; import java.util.Random; + import minicraft.core.io.Settings; import minicraft.core.io.Sound; import minicraft.entity.mob.EnemyMob; diff --git a/src/main/java/minicraft/gfx/Font.java b/src/main/java/minicraft/gfx/Font.java index cae0fcc3..6804a1cb 100644 --- a/src/main/java/minicraft/gfx/Font.java +++ b/src/main/java/minicraft/gfx/Font.java @@ -3,6 +3,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; + import minicraft.core.io.Localization; public class Font { diff --git a/src/main/java/minicraft/gfx/FontStyle.java b/src/main/java/minicraft/gfx/FontStyle.java index 3b09db52..062630ba 100644 --- a/src/main/java/minicraft/gfx/FontStyle.java +++ b/src/main/java/minicraft/gfx/FontStyle.java @@ -1,6 +1,7 @@ package minicraft.gfx; import java.util.Arrays; + import minicraft.screen.RelPos; public class FontStyle { diff --git a/src/main/java/minicraft/gfx/Screen.java b/src/main/java/minicraft/gfx/Screen.java index 45fdc765..308c183c 100644 --- a/src/main/java/minicraft/gfx/Screen.java +++ b/src/main/java/minicraft/gfx/Screen.java @@ -1,6 +1,7 @@ package minicraft.gfx; import java.util.Arrays; + import minicraft.core.Renderer; import minicraft.core.Updater; diff --git a/src/main/java/minicraft/item/ArmorItem.java b/src/main/java/minicraft/item/ArmorItem.java index 744c4471..b0cf0ffd 100644 --- a/src/main/java/minicraft/item/ArmorItem.java +++ b/src/main/java/minicraft/item/ArmorItem.java @@ -1,6 +1,7 @@ package minicraft.item; import java.util.ArrayList; + import minicraft.entity.Direction; import minicraft.entity.mob.Player; import minicraft.gfx.Sprite; diff --git a/src/main/java/minicraft/item/BookItem.java b/src/main/java/minicraft/item/BookItem.java index a4ed3ba7..e0ea2cd2 100644 --- a/src/main/java/minicraft/item/BookItem.java +++ b/src/main/java/minicraft/item/BookItem.java @@ -1,6 +1,7 @@ package minicraft.item; import java.util.ArrayList; + import minicraft.core.Game; import minicraft.entity.Direction; import minicraft.entity.mob.Player; diff --git a/src/main/java/minicraft/item/BucketItem.java b/src/main/java/minicraft/item/BucketItem.java index 0549a0fb..65301385 100644 --- a/src/main/java/minicraft/item/BucketItem.java +++ b/src/main/java/minicraft/item/BucketItem.java @@ -1,6 +1,7 @@ package minicraft.item; import java.util.ArrayList; + import minicraft.core.Game; import minicraft.entity.Direction; import minicraft.entity.mob.Player; diff --git a/src/main/java/minicraft/item/Inventory.java b/src/main/java/minicraft/item/Inventory.java index d2f45b33..2eb243dd 100644 --- a/src/main/java/minicraft/item/Inventory.java +++ b/src/main/java/minicraft/item/Inventory.java @@ -3,9 +3,11 @@ import java.util.ArrayList; import java.util.List; import java.util.Random; -import minicraft.entity.furniture.Furniture; + import org.jetbrains.annotations.Nullable; +import minicraft.entity.furniture.Furniture; + public class Inventory { private final Random random = new Random(); private final List items = new ArrayList<>(); // The list of items that is in the inventory. diff --git a/src/main/java/minicraft/item/Items.java b/src/main/java/minicraft/item/Items.java index aa0bd7d5..3d5d08a0 100644 --- a/src/main/java/minicraft/item/Items.java +++ b/src/main/java/minicraft/item/Items.java @@ -1,6 +1,7 @@ package minicraft.item; import java.util.ArrayList; + import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.tinylog.Logger; diff --git a/src/main/java/minicraft/item/PotionItem.java b/src/main/java/minicraft/item/PotionItem.java index d76feec6..3b145f5d 100644 --- a/src/main/java/minicraft/item/PotionItem.java +++ b/src/main/java/minicraft/item/PotionItem.java @@ -1,6 +1,7 @@ package minicraft.item; import java.util.ArrayList; + import minicraft.core.Game; import minicraft.entity.Direction; import minicraft.entity.mob.Player; diff --git a/src/main/java/minicraft/item/Recipe.java b/src/main/java/minicraft/item/Recipe.java index aeab7263..603c6f16 100644 --- a/src/main/java/minicraft/item/Recipe.java +++ b/src/main/java/minicraft/item/Recipe.java @@ -1,6 +1,7 @@ package minicraft.item; import java.util.HashMap; + import minicraft.core.Game; import minicraft.entity.mob.Player; @@ -84,8 +85,9 @@ public boolean craft(Player player) { if (!Game.isMode("creative")) { // remove the cost items from the inventory. for (String cost : costs.keySet().toArray(new String[0])) { - if(!cost.contains("AlAzif")) player.getInventory().removeItems(Items.get(cost), costs.get(cost)); + if(!cost.contains("ALAZIF")) player.getInventory().removeItems(Items.get(cost), costs.get(cost)); } + } // add the crafted items. diff --git a/src/main/java/minicraft/item/StackableItem.java b/src/main/java/minicraft/item/StackableItem.java index 9df22e17..fa8c4ea8 100644 --- a/src/main/java/minicraft/item/StackableItem.java +++ b/src/main/java/minicraft/item/StackableItem.java @@ -1,6 +1,7 @@ package minicraft.item; import java.util.ArrayList; + import minicraft.core.Game; import minicraft.core.io.Localization; import minicraft.gfx.Sprite; diff --git a/src/main/java/minicraft/item/TileItem.java b/src/main/java/minicraft/item/TileItem.java index c966d86b..23f7264a 100644 --- a/src/main/java/minicraft/item/TileItem.java +++ b/src/main/java/minicraft/item/TileItem.java @@ -21,7 +21,7 @@ protected static ArrayList getAllInstances() { /// TileItem sprites all have 1x1 sprites. items.add(new TileItem("Flower", (new Sprite(4, 0, 0)), "flower", "grass")); items.add(new TileItem("Orange Tulip", (new Sprite(22, 0, 0)), "orange tulip", "grass")); - items.add(new TileItem("Acorn", (new Sprite(1, 3, 0)), "tree Sapling", "grass")); + items.add(new TileItem("Acorn", (new Sprite(1, 3, 0)), "Oak Sapling", "grass")); items.add(new TileItem("Birch Cone", (new Sprite(18, 3, 0)), "birch Sapling", "grass")); items.add(new TileItem("Fir Cone", (new Sprite(18, 3, 0)), "fir Sapling", "snow")); items.add(new TileItem("Pine Cone", (new Sprite(19, 3, 0)), "pine Sapling", "snow")); @@ -81,7 +81,7 @@ protected static ArrayList getAllInstances() { items.add(new TileItem("Sky wart", (new Sprite(0, 43, 0)), "Sky wart", "Sky farmland")); items.add(new TileItem("Sky Seeds", (new Sprite(1, 43, 0)), "Sky wart", "Sky farmland")); items.add(new TileItem("Grass Seeds", (new Sprite(3, 0, 0)), "grass", "dirt")); - items.add(new TileItem("Bone", (new Sprite(3, 3, 0)), "tree", "tree Sapling")); + items.add(new TileItem("Bone", (new Sprite(3, 3, 0)), "Oak tree", "Oak Sapling")); items.add(new TileItem("Bone powder", (new Sprite(0, 22, 0)), "lawn", "grass")); items.add(new TileItem("Ferrosite", (new Sprite(2, 44, 0)), "ferrosite", "Infinite Fall", "hole")); items.add(new TileItem("Cloud", (new Sprite(4, 3, 0)), "cloud", "Infinite Fall", "ferrosite", "hole")); diff --git a/src/main/java/minicraft/item/ToolItem.java b/src/main/java/minicraft/item/ToolItem.java index 64145c3b..973a421f 100644 --- a/src/main/java/minicraft/item/ToolItem.java +++ b/src/main/java/minicraft/item/ToolItem.java @@ -2,6 +2,7 @@ import java.util.ArrayList; import java.util.Random; + import minicraft.core.Game; import minicraft.core.io.Localization; import minicraft.entity.Entity; diff --git a/src/main/java/minicraft/level/Level.java b/src/main/java/minicraft/level/Level.java index ca7a8586..900b029e 100644 --- a/src/main/java/minicraft/level/Level.java +++ b/src/main/java/minicraft/level/Level.java @@ -1,5 +1,7 @@ package minicraft.level; +import static minicraft.core.Game.player; + import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; @@ -9,8 +11,10 @@ import java.util.Random; import java.util.Set; import java.util.function.Predicate; + +import org.tinylog.Logger; + import minicraft.core.Game; -import static minicraft.core.Game.player; import minicraft.core.Updater; import minicraft.core.io.Settings; import minicraft.core.io.Sound; @@ -55,7 +59,6 @@ import minicraft.level.tile.Tile; import minicraft.level.tile.Tiles; import minicraft.level.tile.TorchTile; -import org.tinylog.Logger; //-------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/src/main/java/minicraft/level/LevelGen.java b/src/main/java/minicraft/level/LevelGen.java index 304ddc18..435216dd 100644 --- a/src/main/java/minicraft/level/LevelGen.java +++ b/src/main/java/minicraft/level/LevelGen.java @@ -3,13 +3,16 @@ import java.awt.Image; import java.awt.image.BufferedImage; import java.util.Random; + import javax.swing.ImageIcon; import javax.swing.JOptionPane; + +import org.jetbrains.annotations.Nullable; +import org.tinylog.Logger; + import minicraft.core.Game; import minicraft.core.io.Settings; import minicraft.level.tile.Tiles; -import org.jetbrains.annotations.Nullable; -import org.tinylog.Logger; public class LevelGen { @@ -175,7 +178,7 @@ private static short[][] createAndValidateTopMap(int w, int h) { if (count[Tiles.get("rock").id & 0xffff] < 100) continue; if (count[Tiles.get("sand").id & 0xffff] < 100) continue; if (count[Tiles.get("grass").id & 0xffff] < 100) continue; - if (count[Tiles.get("tree").id & 0xffff] < 100) continue; + if (count[Tiles.get("Oak tree").id & 0xffff] < 100) continue; if (count[Tiles.get("flower").id & 0xffff] < 100) continue; if (count[Tiles.get("Stairs Down").id & 0xffff] == 0) continue; // size 128 = 6 stairs min @@ -273,7 +276,7 @@ short[][] createAndValidateVoidMap(int w, int h) { if (count[Tiles.get("grass").id & 0xffff] < 100) { continue; } - if (count[Tiles.get("tree").id & 0xffff] < 100) { + if (count[Tiles.get("Oak tree").id & 0xffff] < 100) { continue; } @@ -541,7 +544,7 @@ private static short[][] createTopMap(int w, int h) { // create surface map int yy = y + random.nextInt(15) - random.nextInt(14); if (xx >= 0 && yy >= 0 && xx < w && yy < h) { if (map[xx + yy * w] == Tiles.get("grass").id) { - map[xx + yy * w] = Tiles.get("tree").id; + map[xx + yy * w] = Tiles.get("Oak tree").id; } } } @@ -558,7 +561,7 @@ private static short[][] createTopMap(int w, int h) { // create surface map int yy = y + random.nextInt(15) - random.nextInt(14); if (xx >= 0 && yy >= 0 && xx < w && yy < h) { if (map[xx + yy * w] == Tiles.get("grass").id) { - map[xx + yy * w] = Tiles.get("tree").id; + map[xx + yy * w] = Tiles.get("Oak tree").id; } } } @@ -575,7 +578,7 @@ private static short[][] createTopMap(int w, int h) { // create surface map int yy = y + random.nextInt(15) - random.nextInt(12); if (xx >= 0 && yy >= 0 && xx < w && yy < h) { if (map[xx + yy * w] == Tiles.get("snow").id) { - map[xx + yy * w] = Tiles.get("fir tree").id; + map[xx + yy * w] = Tiles.get("Fir tree").id; } } } @@ -592,7 +595,7 @@ private static short[][] createTopMap(int w, int h) { // create surface map int yy = y + random.nextInt(15) - random.nextInt(14); if (xx >= 0 && yy >= 0 && xx < w && yy < h) { if (map[xx + yy * w] == Tiles.get("snow").id) { - map[xx + yy * w] = Tiles.get("pine tree").id; + map[xx + yy * w] = Tiles.get("Pine tree").id; } } } @@ -609,7 +612,7 @@ private static short[][] createTopMap(int w, int h) { // create surface map int yy = y + random.nextInt(15) - random.nextInt(12) + random.nextInt(4); if (xx >= 0 && yy >= 0 && xx < w && yy < h) { if (map[xx + yy * w] == Tiles.get("grass").id) { - map[xx + yy * w] = Tiles.get("tree").id; + map[xx + yy * w] = Tiles.get("Oak tree").id; } } } @@ -626,7 +629,7 @@ private static short[][] createTopMap(int w, int h) { // create surface map int yy = y + random.nextInt(15) - random.nextInt(12) + random.nextInt(4); if (xx >= 0 && yy >= 0 && xx < w && yy < h) { if (map[xx + yy * w] == Tiles.get("snow").id) { - map[xx + yy * w] = Tiles.get("fir tree").id; + map[xx + yy * w] = Tiles.get("Fir tree").id; } } } @@ -643,7 +646,7 @@ private static short[][] createTopMap(int w, int h) { // create surface map int yy = y + random.nextInt(15) - random.nextInt(14) + random.nextInt(5); if (xx >= 0 && yy >= 0 && xx < w && yy < h) { if (map[xx + yy * w] == Tiles.get("snow").id) { - map[xx + yy * w] = Tiles.get("pine tree").id; + map[xx + yy * w] = Tiles.get("Pine tree").id; } } } @@ -684,7 +687,7 @@ private static short[][] createTopMap(int w, int h) { // create surface map int yy = y + random.nextInt(15) - random.nextInt(12) + random.nextInt(5) - random.nextInt(2); if (xx >= 0 && yy >= 0 && xx < w && yy < h) { if (map[xx + yy * w] == Tiles.get("grass").id) { - map[xx + yy * w] = Tiles.get("tree").id; + map[xx + yy * w] = Tiles.get("Oak tree").id; } } } @@ -701,7 +704,7 @@ private static short[][] createTopMap(int w, int h) { // create surface map int yy = y + random.nextInt(15) - random.nextInt(14); if (xx >= 0 && yy >= 0 && xx < w && yy < h) { if (map[xx + yy * w] == Tiles.get("grass").id) { - map[xx + yy * w] = Tiles.get("birch tree").id; + map[xx + yy * w] = Tiles.get("Birch tree").id; } } } @@ -717,7 +720,7 @@ private static short[][] createTopMap(int w, int h) { // create surface map int yy = y + random.nextInt(15) - random.nextInt(12); if (xx >= 0 && yy >= 0 && xx < w && yy < h) { if (map[xx + yy * w] == Tiles.get("snow").id) { - map[xx + yy * w] = Tiles.get("fir tree").id; + map[xx + yy * w] = Tiles.get("Fir tree").id; } } } @@ -733,7 +736,7 @@ private static short[][] createTopMap(int w, int h) { // create surface map int yy = y + random.nextInt(15) - random.nextInt(14); if (xx >= 0 && yy >= 0 && xx < w && yy < h) { if (map[xx + yy * w] == Tiles.get("snow").id) { - map[xx + yy * w] = Tiles.get("pine tree").id; + map[xx + yy * w] = Tiles.get("Fir tree").id; } } } @@ -883,7 +886,7 @@ private static short[][] createTopMap(int w, int h) { // create surface map // generate the beaches for (int j = 0; j < h; j++) { for (int x = 0; x < w; x++) { - if (map[x + j * w] != Tiles.get("water").id && map[x + j * w] == Tiles.get("grass").id || map[x + j * w] != Tiles.get("water").id && map[x + j * w] == Tiles.get("tree").id || map[x + j * w] != Tiles.get("water").id && map[x + j * w] == Tiles.get("flower").id || map[x + j * w] != Tiles.get("water").id && map[x + j * w] == Tiles.get("birch tree").id || map[x + j * w] != Tiles.get("water").id && map[x + j * w] == Tiles.get("lawn").id || map[x + j * w] != Tiles.get("water").id && map[x + j * w] == Tiles.get("orange tulip").id) { + if (map[x + j * w] != Tiles.get("water").id && map[x + j * w] == Tiles.get("grass").id || map[x + j * w] != Tiles.get("water").id && map[x + j * w] == Tiles.get("Oak tree").id || map[x + j * w] != Tiles.get("water").id && map[x + j * w] == Tiles.get("flower").id || map[x + j * w] != Tiles.get("water").id && map[x + j * w] == Tiles.get("Birch tree").id || map[x + j * w] != Tiles.get("water").id && map[x + j * w] == Tiles.get("lawn").id || map[x + j * w] != Tiles.get("water").id && map[x + j * w] == Tiles.get("orange tulip").id) { boolean replace = false; int tx; check_ocean: @@ -1644,7 +1647,7 @@ public static short[][] createVoidMap(int w, int h) { int yy = y + random.nextInt(15) - random.nextInt(14); if (xx >= 0 && yy >= 0 && xx < w && yy < h) { if (map[xx + yy * w] == Tiles.get("grass").id) { - map[xx + yy * w] = Tiles.get("tree").id; + map[xx + yy * w] = Tiles.get("oak tree").id; } } } @@ -1714,7 +1717,7 @@ public static void main(String[] args) { continue; } - short[][] fullmap = LevelGen.createAndValidateSkyMap(w, h); + short[][] fullmap = LevelGen.createAndValidateTopMap(w, h); if (fullmap == null) { continue; @@ -1757,10 +1760,10 @@ public static void main(String[] args) { if (map[i] == Tiles.get("snow").id) pixels[i] = 0xf0f0f0; if (map[i] == Tiles.get("ice spike").id) pixels[i] = 0xe6e6e6; if (map[i] == Tiles.get("Stone Bricks").id) pixels[i] = 0xa0a040; - if (map[i] == Tiles.get("tree").id) pixels[i] = 0x255325; - if (map[i] == Tiles.get("birch tree").id) pixels[i] = 0x0c750c; - if (map[i] == Tiles.get("fir tree").id) pixels[i] = 0x138b62; - if (map[i] == Tiles.get("pine tree").id) pixels[i] = 0x117f59; + if (map[i] == Tiles.get("Oak tree").id) pixels[i] = 0x255325; + if (map[i] == Tiles.get("Birch tree").id) pixels[i] = 0x0c750c; + if (map[i] == Tiles.get("Fir tree").id) pixels[i] = 0x138b62; + if (map[i] == Tiles.get("Pine tree").id) pixels[i] = 0x117f59; // Village if (map[i] == Tiles.get("Wood Planks").id) pixels[i] = 0x914f0e; diff --git a/src/main/java/minicraft/level/NoiseMap.java b/src/main/java/minicraft/level/NoiseMap.java index c7d8e6cf..3b9834b6 100644 --- a/src/main/java/minicraft/level/NoiseMap.java +++ b/src/main/java/minicraft/level/NoiseMap.java @@ -2,6 +2,7 @@ import java.awt.image.BufferedImage; import java.util.Random; + import javax.swing.ImageIcon; import javax.swing.JOptionPane; diff --git a/src/main/java/minicraft/level/Structure.java b/src/main/java/minicraft/level/Structure.java index 19f63267..a55e7489 100644 --- a/src/main/java/minicraft/level/Structure.java +++ b/src/main/java/minicraft/level/Structure.java @@ -2,6 +2,7 @@ import java.util.HashMap; import java.util.HashSet; + import minicraft.entity.furniture.Crafter; import minicraft.entity.furniture.Furniture; import minicraft.entity.furniture.Lantern; diff --git a/src/main/java/minicraft/level/tile/CactusTile.java b/src/main/java/minicraft/level/tile/CactusTile.java index c341a5ac..61d3c872 100644 --- a/src/main/java/minicraft/level/tile/CactusTile.java +++ b/src/main/java/minicraft/level/tile/CactusTile.java @@ -58,20 +58,12 @@ public void render(Screen screen, Level level, int x, int y) { @Override public void bumpedInto(Level level, int x, int y, Entity entity) { - if (!(entity instanceof Mob)) - return; - Mob m = (Mob) entity; - if (Settings.get("diff").equals("Peaceful")) { - m.hurt(this, x, y, 0); + if (!(entity instanceof Mob) || Settings.get("diff").equals("Peaceful")) { + return; // Cannot do damage } - if (Settings.get("diff").equals("Easy")) { - m.hurt(this, x, y, 1); - } - if (Settings.get("diff").equals("Normal")) { - m.hurt(this, x, y, 2); - } - if (Settings.get("diff").equals("Hard")) { - m.hurt(this, x, y, 3); + + if (entity instanceof Mob) { + ((Mob) entity).hurt(this, x, y, 1 + Settings.getIdx("diff")); } } @@ -82,6 +74,7 @@ public boolean tick(Level level, int xt, int yt) { level.setData(xt, yt, damage - 1); return true; } + if (Game.IS_April_fools == true) { // April fools texture :) sprite = new Sprite(0, 44, 2, 2, 1); return true; diff --git a/src/main/java/minicraft/level/tile/CloudCactusTile.java b/src/main/java/minicraft/level/tile/CloudCactusTile.java index 31a3970f..4b5b1102 100644 --- a/src/main/java/minicraft/level/tile/CloudCactusTile.java +++ b/src/main/java/minicraft/level/tile/CloudCactusTile.java @@ -26,7 +26,6 @@ protected CloudCactusTile(String name) { } private final String baseTile = "Ferrosite"; - @Override public boolean mayPass(Level level, int x, int y, Entity e) { return e instanceof AirWizard; @@ -79,10 +78,12 @@ public void render(Screen screen, Level level, int x, int y) { @Override public void bumpedInto(Level level, int x, int y, Entity entity) { - if (entity instanceof AirWizard) - return; + if (entity instanceof AirWizard || Settings.get("diff").equals("Peaceful")) { + return; // Cannot do damage + } - if (entity instanceof Mob) - ((Mob) entity).hurt(this, x, y, 1 + Settings.getIdx("diff")); + if (entity instanceof Mob) { + ((Mob) entity).hurt(this, x, y, random.nextInt(2) + Settings.getIdx("diff")); + } } } diff --git a/src/main/java/minicraft/level/tile/DirtTile.java b/src/main/java/minicraft/level/tile/DirtTile.java index c6f3a1d6..0772b120 100644 --- a/src/main/java/minicraft/level/tile/DirtTile.java +++ b/src/main/java/minicraft/level/tile/DirtTile.java @@ -25,21 +25,21 @@ protected DirtTile(String name) { maySpawn = true; } - protected static int dCol(int depth) { + public static int dCol(int depth) { switch (depth) { - case 1: return Color.get(1, 194, 194, 194); // Sky. - case 0: return Color.get(1, 129, 105, 83); // surface. - case -4: return Color.get(1, 44, 21, 67); // dungeons. - case 2: return Color.get(1, 73, 55, 44); // the void. - default: return Color.get(1, 102); // caves. + case 1: return Color.get(1, 194, 194, 194); // Sky. + case 0: return Color.get(1, 129, 105, 83); // surface. + case -4: return Color.get(1, 44, 21, 67); // dungeons. + case 2: return Color.get(1, 73, 55, 44); // the void. + default: return Color.get(1, 102); // caves. } } protected static int dIdx(int depth) { switch (depth) { - case 0: return 0; // surface - case -4: return 2; // dungeons - default: return 1; // caves + case 0: return 0; // surface + case -4: return 2; // dungeons + default: return 1; // caves } } diff --git a/src/main/java/minicraft/level/tile/IceSpikeTile.java b/src/main/java/minicraft/level/tile/IceSpikeTile.java index 81ed04a2..90afba06 100644 --- a/src/main/java/minicraft/level/tile/IceSpikeTile.java +++ b/src/main/java/minicraft/level/tile/IceSpikeTile.java @@ -26,7 +26,6 @@ public boolean mayPass(Level level, int x, int y, Entity e) { return false; } - @SuppressWarnings("unused") public boolean hurt(Level level, int x, int y, Mob source, int dmg, Direction attackDir) { int damage = level.getData(x, y) + dmg; int cHealth = 10; @@ -59,18 +58,14 @@ public void render(Screen screen, Level level, int x, int y) { sprite.render(screen, x + 8 * (shape == 0 ? 1 : 0), y + 8); } + @Override public void bumpedInto(Level level, int x, int y, Entity entity) { - if (!(entity instanceof Mob)) - return; - Mob m = (Mob) entity; - if (Settings.get("diff").equals("Easy")) { - m.hurt(this, x, y, 2); - } - if (Settings.get("diff").equals("Normal")) { - m.hurt(this, x, y, 3); + if (!(entity instanceof Mob) || Settings.get("diff").equals("Peaceful")) { + return; // Cannot do damage } - if (Settings.get("diff").equals("Hard")) { - m.hurt(this, x, y, 5); + + if (entity instanceof Mob) { + ((Mob) entity).hurt(this, x, y, 1 + Settings.getIdx("diff")); } } diff --git a/src/main/java/minicraft/level/tile/InfiniteFallTile.java b/src/main/java/minicraft/level/tile/InfiniteFallTile.java index 9b4d68a3..b04aff6e 100644 --- a/src/main/java/minicraft/level/tile/InfiniteFallTile.java +++ b/src/main/java/minicraft/level/tile/InfiniteFallTile.java @@ -2,10 +2,8 @@ import minicraft.core.Game; import minicraft.core.Updater; -import minicraft.core.io.Settings; import minicraft.entity.Arrow; import minicraft.entity.Entity; -import minicraft.entity.mob.Mob; import minicraft.entity.mob.Player; import minicraft.entity.mob.boss.AirWizard; import minicraft.entity.mob.boss.AirWizardPhase2; diff --git a/src/main/java/minicraft/level/tile/OreTile.java b/src/main/java/minicraft/level/tile/OreTile.java index 619ba987..10b0f8aa 100644 --- a/src/main/java/minicraft/level/tile/OreTile.java +++ b/src/main/java/minicraft/level/tile/OreTile.java @@ -9,8 +9,8 @@ import minicraft.entity.particle.SmashParticle; import minicraft.entity.particle.TextParticle; import minicraft.gfx.Color; +import minicraft.gfx.ConnectorSprite; import minicraft.gfx.Screen; -import minicraft.gfx.Sprite; import minicraft.item.Item; import minicraft.item.Items; import minicraft.item.ToolItem; @@ -20,37 +20,72 @@ /// this is all the spikey stuff (except "cloud cactus") public class OreTile extends Tile { - private Sprite sprite; private OreType type; public enum OreType { - Iron(Items.get("Iron Ore"), 0), - Lapis(Items.get("Lapis"), 2), - Gold(Items.get("Gold Ore"), 4), - Gem(Items.get("Gem"), 6); - + Iron(24, 25, 0, 1, 2, 3, Items.get("Iron Ore"), 0), + Lapis(26, 27, 0, 1, 2, 3, Items.get("Lapis"), 2), + Gold(28, 29, 0, 1, 2, 3, Items.get("Gold Ore"), 4), + Gem(30, 31, 0, 1, 2, 3, Items.get("Gem"), 6); + + private int sprite_x1, sprite_x2; + private int sprite_y1, sprite_y2; + private int sprite_y3, sprite_y4; + private Item drop; public final int color; - OreType(Item drop, int color) { + OreType(int sprite_x1, int sprite_x2, int sprite_y1, int sprite_y2, int sprite_y3, int sprite_y4, Item drop, int color) { + this.sprite_x1 = sprite_x1; this.sprite_x2 = sprite_x2; + this.sprite_y1 = sprite_y1; this.sprite_y2 = sprite_y2; + this.sprite_y3 = sprite_y3; this.sprite_y4 = sprite_y4; + this.drop = drop; this.color = color; } - + protected Item getOre() { return drop.clone(); } } protected OreTile(OreType o) { - super((o == OreTile.OreType.Lapis ? "Lapis" : o.name() + " Ore"), new Sprite(24 + o.color, 0, 2, 2, 1)); + super((o == OreTile.OreType.Lapis ? "Lapis" : o.name() + " Ore"), (ConnectorSprite) null); this.type = o; - this.sprite = super.sprite; } public void render(Screen screen, Level level, int x, int y) { - sprite.color = DirtTile.dCol(level.depth); - sprite.render(screen, x * 16, y * 16); + Tiles.get("dirt").render(screen, level, x, y); + + boolean u = level.getTile(x, y - 1) == this; + boolean l = level.getTile(x - 1, y) == this; + boolean r = level.getTile(x + 1, y) == this; + boolean d = level.getTile(x, y + 1) == this; + boolean ul = level.getTile(x - 1, y - 1) == this; + boolean ur = level.getTile(x + 1, y - 1) == this; + boolean dl = level.getTile(x - 1, y + 1) == this; + boolean dr = level.getTile(x + 1, y + 1) == this; + + if (u && ul && l) { + screen.render(x * 16 + 0, y * 16 + 0, type.sprite_x2 + type.sprite_y2 * 32, 0, 1); // y2 + } else { + screen.render(x * 16 + 0, y * 16 + 0, type.sprite_x1 + type.sprite_y1 * 32, 0, 1); // y1 + } + if (u && ur && r) { + screen.render(x * 16 + 8, y * 16 + 0, type.sprite_x2 + type.sprite_y3 * 32, 0, 1); // y3 + } else { + screen.render(x * 16 + 8, y * 16 + 0, type.sprite_x2 + type.sprite_y1 * 32, 0, 1); // y1 + } + if (d && dl && l) { + screen.render(x * 16 + 0, y * 16 + 8, type.sprite_x2 + type.sprite_y3 * 32, 0, 1); // y3 + } else { + screen.render(x * 16 + 0, y * 16 + 8, type.sprite_x1 + type.sprite_y2 * 32, 0, 1); // y2 + } + if (d && dr && r) { + screen.render(x * 16 + 8, y * 16 + 8, type.sprite_x2 + type.sprite_y2 * 32, 0, 1); // y2 + } else { + screen.render(x * 16 + 8, y * 16 + 8, type.sprite_x2 + type.sprite_y4 * 32, 0, 1); // y4 + } } public boolean mayPass(Level level, int x, int y, Entity e) { diff --git a/src/main/java/minicraft/level/tile/PathTile.java b/src/main/java/minicraft/level/tile/PathTile.java index e2df6296..adc1c883 100644 --- a/src/main/java/minicraft/level/tile/PathTile.java +++ b/src/main/java/minicraft/level/tile/PathTile.java @@ -3,6 +3,7 @@ import minicraft.core.io.Sound; import minicraft.entity.Direction; import minicraft.entity.mob.Player; +import minicraft.gfx.Screen; import minicraft.gfx.Sprite; import minicraft.item.Item; import minicraft.item.Items; @@ -18,6 +19,11 @@ public PathTile(String name) { connectsToGrass = false; maySpawn = true; } + + @Override + public void render(Screen screen, Level level, int x, int y) { + sprite.render(screen, x * 16, y * 16, 0, DirtTile.dCol(level.depth)); + } public boolean interact(Level level, int xt, int yt, Player player, Item item, Direction attackDir) { if (item instanceof ToolItem) { diff --git a/src/main/java/minicraft/level/tile/RockTile.java b/src/main/java/minicraft/level/tile/RockTile.java index 9f3aece9..6859479c 100644 --- a/src/main/java/minicraft/level/tile/RockTile.java +++ b/src/main/java/minicraft/level/tile/RockTile.java @@ -24,8 +24,7 @@ // This is the normal stone you see underground and on the surface, that drops coal and stone. public class RockTile extends Tile { - private ConnectorSprite sprite = new ConnectorSprite(RockTile.class, new Sprite(18, 6, 3, 3, 1, 3), - new Sprite(21, 8, 2, 2, 1, 3), new Sprite(21, 6, 2, 2, 1, 3)) { + private ConnectorSprite sprite = new ConnectorSprite(RockTile.class, new Sprite(18, 6, 3, 3, 1, 3), new Sprite(21, 8, 2, 2, 1, 3), new Sprite(21, 6, 2, 2, 1, 3)) { public boolean connectsTo(Tile tile, boolean isSide) { return tile == Tiles.get("rock") || tile == Tiles.get("up rock"); diff --git a/src/main/java/minicraft/level/tile/SandRockTile.java b/src/main/java/minicraft/level/tile/SandRockTile.java index d30169f2..2e6fe430 100644 --- a/src/main/java/minicraft/level/tile/SandRockTile.java +++ b/src/main/java/minicraft/level/tile/SandRockTile.java @@ -22,8 +22,7 @@ /// this is the typical stone you see underground and on the surface, that gives coal. public class SandRockTile extends Tile { - private ConnectorSprite sprite = new ConnectorSprite(SandRockTile.class, new Sprite(58, 6, 3, 3, 1, 3), - new Sprite(61, 8, 2, 2, 1, 3), new Sprite(61, 6, 2, 2, 1, 3)); + private ConnectorSprite sprite = new ConnectorSprite(SandRockTile.class, new Sprite(58, 6, 3, 3, 1, 3), new Sprite(61, 8, 2, 2, 1, 3), new Sprite(61, 6, 2, 2, 1, 3)); private int coalLvl = 0; diff --git a/src/main/java/minicraft/level/tile/SandTile.java b/src/main/java/minicraft/level/tile/SandTile.java index 768394d7..de44a080 100644 --- a/src/main/java/minicraft/level/tile/SandTile.java +++ b/src/main/java/minicraft/level/tile/SandTile.java @@ -6,6 +6,7 @@ import minicraft.entity.mob.Firefly; import minicraft.entity.mob.Mob; import minicraft.entity.mob.Player; +import minicraft.entity.mob.Slime; import minicraft.gfx.Color; import minicraft.gfx.ConnectorSprite; import minicraft.gfx.Screen; @@ -34,11 +35,11 @@ public class SandTile extends Tile { @Override public boolean connectsTo(Tile tile, boolean isSide) { - if (!isSide) + if (!isSide) { return true; + } return tile.connectsToSand; } - }; protected SandTile(String name) { @@ -85,8 +86,7 @@ public void steppedOn(Level level, int x, int y, Entity entity) { if (entity instanceof Mob) { level.setData(x, y, 10); } - - if (entity instanceof Firefly) { + if (entity instanceof Firefly || entity instanceof Slime) { level.setData(x, y, 0); } } diff --git a/src/main/java/minicraft/level/tile/SaplingTile.java b/src/main/java/minicraft/level/tile/SaplingTile.java index 23e672bf..669a73b0 100644 --- a/src/main/java/minicraft/level/tile/SaplingTile.java +++ b/src/main/java/minicraft/level/tile/SaplingTile.java @@ -27,7 +27,6 @@ protected SaplingTile(String name, Tile onType, Tile growsTo) { @Override public void render(Screen screen, Level level, int x, int y) { onType.render(screen, level, x, y); - sprite.render(screen, x * 16, y * 16); } @@ -36,7 +35,7 @@ public boolean tick(Level level, int x, int y) { int age = level.getData(x, y) + 1; if (age > 100) { // Don't grow if there is an entity on this tile. - if (!level.isEntityOnTile(x, y)) { + if (!level.isEntityOnTile(x, y)) { // TODO: add grow sound level.setTile(x, y, growsTo); } } else { diff --git a/src/main/java/minicraft/level/tile/SkyHighGrassTile.java b/src/main/java/minicraft/level/tile/SkyHighGrassTile.java index c1f8653e..9a82f4d7 100644 --- a/src/main/java/minicraft/level/tile/SkyHighGrassTile.java +++ b/src/main/java/minicraft/level/tile/SkyHighGrassTile.java @@ -13,16 +13,15 @@ import minicraft.level.Level; public class SkyHighGrassTile extends Tile { - private static ConnectorSprite sprite = new ConnectorSprite(SkyHighGrassTile.class, new Sprite(51, 6, 3, 3, 1, 3), - new Sprite(54, 6, 2, 2, 1)) { + private static ConnectorSprite sprite = new ConnectorSprite(SkyHighGrassTile.class, new Sprite(51, 6, 3, 3, 1, 3), new Sprite(54, 6, 2, 2, 1)) { @Override public boolean connectsTo(Tile tile, boolean isSide) { - if (!isSide) + if (!isSide) { return true; + } return tile.connectsToSkyHighGrass; } - }; protected SkyHighGrassTile(String name) { @@ -36,16 +35,18 @@ protected SkyHighGrassTile(String name) { @Override public boolean tick(Level level, int xt, int yt) { - if (random.nextInt(40) != 0) + if (random.nextInt(40) != 0) { return false; + } int xn = xt; int yn = yt; - if (random.nextBoolean()) + if (random.nextBoolean()) { xn += random.nextInt(2) * 2 - 1; - else + } else { yn += random.nextInt(2) * 2 - 1; + } if (level.getTile(xn, yn) == Tiles.get("Sky Dirt")) { level.setTile(xn, yn, this); diff --git a/src/main/java/minicraft/level/tile/SnowTile.java b/src/main/java/minicraft/level/tile/SnowTile.java index 0705e57a..bd49ba43 100644 --- a/src/main/java/minicraft/level/tile/SnowTile.java +++ b/src/main/java/minicraft/level/tile/SnowTile.java @@ -37,7 +37,6 @@ public boolean connectsTo(Tile tile, boolean isSide) { } return tile.connectsToSnow; } - }; protected SnowTile(String name) { diff --git a/src/main/java/minicraft/level/tile/Tiles.java b/src/main/java/minicraft/level/tile/Tiles.java index 785e8f10..35582e5a 100644 --- a/src/main/java/minicraft/level/tile/Tiles.java +++ b/src/main/java/minicraft/level/tile/Tiles.java @@ -2,8 +2,8 @@ import java.util.ArrayList; import java.util.HashMap; + import minicraft.core.Game; -import minicraft.level.tile.TreeTile.TreeType; import minicraft.level.tile.WoolTile.WoolType; import minicraft.level.tile.farming.CarrotTile; import minicraft.level.tile.farming.FarmTile; @@ -39,8 +39,8 @@ public static void initTileList() { tiles.put((short) 17, new LavaTile("Lava")); tiles.put((short) 7, new RockTile("Rock")); - tiles.put((short) 8, new TreeTile("Tree", TreeType.TREE)); - tiles.put((short) 9, new SaplingTile("Tree Sapling", Tiles.get("Grass"), Tiles.get("Tree"))); + tiles.put((short) 8, new TreeTile(TreeTile.TreeType.Oak)); + tiles.put((short) 9, new SaplingTile("Oak Sapling", Tiles.get("Grass"), Tiles.get("Oak Tree"))); tiles.put((short) 10, new SandTile("Sand")); tiles.put((short) 11, new CactusTile("Cactus")); tiles.put((short) 12, new SaplingTile("Cactus Sapling", Tiles.get("Sand"), Tiles.get("Cactus"))); @@ -105,13 +105,13 @@ public static void initTileList() { tiles.put((short) 66, new SnowTile("Snow")); - tiles.put((short) 67, new TreeTile("Birch Tree", TreeType.BIRCH)); + tiles.put((short) 67, new TreeTile(TreeTile.TreeType.Birch)); tiles.put((short) 68, new SaplingTile("Birch Sapling", Tiles.get("Grass"), Tiles.get("Birch tree"))); - tiles.put((short) 69, new TreeTile("Fir Tree", TreeType.FIR)); + tiles.put((short) 69, new TreeTile(TreeTile.TreeType.Fir)); tiles.put((short) 70, new SaplingTile("Fir Sapling", Tiles.get("Snow"), Tiles.get("Fir tree"))); - tiles.put((short) 71, new TreeTile("Pine Tree", TreeType.PINE)); + tiles.put((short) 71, new TreeTile(TreeTile.TreeType.Pine)); tiles.put((short) 72, new SaplingTile("Pine Sapling", Tiles.get("Snow"), Tiles.get("Pine tree"))); tiles.put((short) 73, new CloudTreeTile("Cloud Tree")); @@ -160,7 +160,7 @@ protected static void add(int id, Tile tile) { oldids.set(1, "rock"); oldids.set(2, "water"); oldids.set(3, "flower"); - oldids.set(4, "tree"); + oldids.set(4, "oak tree"); oldids.set(5, "dirt"); oldids.set(41, "wool"); oldids.set(42, "red wool"); @@ -171,7 +171,7 @@ protected static void add(int id, Tile tile) { oldids.set(6, "sand"); oldids.set(7, "cactus"); oldids.set(8, "hole"); - oldids.set(9, "tree Sapling"); + oldids.set(9, "oak Sapling"); oldids.set(10, "cactus Sapling"); oldids.set(11, "farmland"); oldids.set(12, "wheat"); @@ -204,7 +204,7 @@ protected static void add(int id, Tile tile) { // Light/torch versions, for compatibility with before 1.9.4-dev3. (were removed in making dev3) oldids.set(100, "grass"); oldids.set(101, "sand"); - oldids.set(102, "tree"); + oldids.set(102, "oak tree"); oldids.set(103, "cactus"); oldids.set(104, "water"); oldids.set(105, "dirt"); @@ -227,7 +227,7 @@ protected static void add(int id, Tile tile) { oldids.set(61, "yellow wool"); oldids.set(62, "black wool"); oldids.set(63, "Obsidian"); - oldids.set(64, "tree Sapling"); + oldids.set(64, "oak Sapling"); oldids.set(65, "cactus Sapling"); oldids.set(44, "torch grass"); @@ -279,7 +279,7 @@ public static Tile get(String name) { } } - if(getting == null) { + if (getting == null) { System.out.println("TILES.GET: Invalid tile requested: " + name); getting = tiles.get((short)0); } diff --git a/src/main/java/minicraft/level/tile/TreeTile.java b/src/main/java/minicraft/level/tile/TreeTile.java index dbb06282..09e8ada9 100644 --- a/src/main/java/minicraft/level/tile/TreeTile.java +++ b/src/main/java/minicraft/level/tile/TreeTile.java @@ -23,71 +23,60 @@ public class TreeTile extends Tile { - public int health; - public TreeType type; - public String[] Loot; - public String baseTile; - public int x1, x2; - public int y1, y2; - public int y3, y4; - - public enum TreeType { - TREE(0, 1, 0, 1, 2, 3, "Grass", new String[] {"Wood", "Wood", "Acorn"}, 20), - BIRCH(0, 1, 28, 29, 30, 31, "Grass", new String[] {"Birch Wood", "Leaf", "Birch cone"}, 25), - RED_MUSHROOM(2, 3, 28, 29, 30, 31, "Dirt", new String[] {"Wood", "Leaf", "Acorn"}, 20), - FIR(4, 5, 28, 29, 30, 31, "Snow", new String[] {"Wood", "Wood", "Fir cone"}, 22), - PINE(6, 7, 28, 29, 30, 31, "Snow", new String[] {"Spruce wood", "Spruce wood", "Pine cone"}, 22), - BROWN_MUSHROOM(2, 3, 28, 29, 30, 31, "Dirt", new String[] {"Wood", "Leaf", "Acorn"}, 24); + private TreeType type; + + public enum TreeType { + Oak(0, 1, 0, 1, 2, 3, "Grass", new String[] {"Wood", "Wood", "Acorn"}, 20), + Birch(0, 1, 28, 29, 30, 31, "Grass", new String[] {"Birch Wood", "Leaf", "Birch cone"}, 25), + Red_mushroom(2, 3, 28, 29, 30, 31, "Dirt", new String[] {"Wood", "Leaf", "Acorn"}, 20), + Fir(4, 5, 28, 29, 30, 31, "Snow", new String[] {"Wood", "Wood", "Fir cone"}, 22), + Pine(6, 7, 28, 29, 30, 31, "Snow", new String[] {"Spruce wood", "Spruce wood", "Pine cone"}, 22), + Brown_mushroom(2, 3, 28, 29, 30, 31, "Dirt", new String[] {"Wood", "Leaf", "Acorn"}, 24); + + // 00 01 + //X1 X2 //-- Y1 //[DD] [DD] 00 // each tree parts are 8x8 squares + //-- -- //-- Y2 //[DD] [AA] 01 // together make a 16x32 area + //-- -- //-- Y3 // -- [BA] 02 + //-- -- //-- Y4 // -- [BB] 03 + + private int sprite_x1, sprite_x2; + private int sprite_y1, sprite_y2; + private int sprite_y3, sprite_y4; - public int x1, x2; - public int y1, y2; - public int y3, y4; - public String baseTile; - public String[] loot; - public int health; - - /** - * Create a type of tree. - */ - TreeType(int x1, int x2, int y1, int y2, int y3, int y4, String baseTile, String[] loot, int health) { - this.x1 = x1; - this.x2 = x2; - this.y1 = y1; - this.y2 = y2; - this.y3 = y3; - this.y4 = y4; + private String baseTile; + private String[] loot; + private int health; + + TreeType(int sprite_x1, int sprite_x2, int sprite_y1, int sprite_y2, int sprite_y3, int sprite_y4, String baseTile, String[] loot, int health) { + this.sprite_x1 = sprite_x1; this.sprite_x2 = sprite_x2; + this.sprite_y1 = sprite_y1; this.sprite_y2 = sprite_y2; + this.sprite_y3 = sprite_y3; this.sprite_y4 = sprite_y4; + this.baseTile = baseTile; this.loot = loot; this.health = health; - - } - } - - public TreeTile(String name, TreeType t) { - super(name, (ConnectorSprite) null); - - this.type = t; - this.baseTile = type.baseTile; - this.x1 = type.x1; this.x2 = type.x2; - this.y1 = type.y1; this.y2 = type.y2; - this.y3 = type.y3; this.y4 = type.y4; - this.Loot = type.loot; - this.health = type.health; - - switch (this.baseTile) { + } + } + + protected TreeTile(TreeType type) { + super((type == TreeTile.TreeType.Red_mushroom ? "Red mushroom" : type.name() + " Tree"), (ConnectorSprite) null); + this.type = type; + + switch (type.baseTile) { case "Grass": connectsToGrass = true; break; case "Snow": connectsToSnow = true; break; case "Sand": connectsToSand = true; break; case "Dirt": connectsToDirt = true; break; case "Sky grass": connectsToSkyGrass = true; break; case "Sky high grass": connectsToSkyHighGrass = true; break; - default: Logger.error("The connector type {} is invalid", this.baseTile); + default: + Logger.error("The connector type {} is invalid", type.baseTile); } } @Override public void render(Screen screen, Level level, int x, int y) { - Tiles.get(baseTile).render(screen, level, x, y); + Tiles.get(type.baseTile).render(screen, level, x, y); boolean u = level.getTile(x, y - 1) == this; boolean l = level.getTile(x - 1, y) == this; @@ -99,24 +88,24 @@ public void render(Screen screen, Level level, int x, int y) { boolean dr = level.getTile(x + 1, y + 1) == this; if (u && ul && l) { - screen.render(x * 16 + 0, y * 16 + 0, x2 + y2 * 32, 0, 1); // y2 + screen.render(x * 16 + 0, y * 16 + 0, type.sprite_x2 + type.sprite_y2 * 32, 0, 1); // y2 } else { - screen.render(x * 16 + 0, y * 16 + 0, x1 + y1 * 32, 0, 1); // y1 + screen.render(x * 16 + 0, y * 16 + 0, type.sprite_x1 + type.sprite_y1 * 32, 0, 1); // y1 } if (u && ur && r) { - screen.render(x * 16 + 8, y * 16 + 0, x2 + y3 * 32, 0, 1); // y3 + screen.render(x * 16 + 8, y * 16 + 0, type.sprite_x2 + type.sprite_y3 * 32, 0, 1); // y3 } else { - screen.render(x * 16 + 8, y * 16 + 0, x2 + y1 * 32, 0, 1); // y1 + screen.render(x * 16 + 8, y * 16 + 0, type.sprite_x2 + type.sprite_y1 * 32, 0, 1); // y1 } if (d && dl && l) { - screen.render(x * 16 + 0, y * 16 + 8, x2 + y3 * 32, 0, 1); // y3 + screen.render(x * 16 + 0, y * 16 + 8, type.sprite_x2 + type.sprite_y3 * 32, 0, 1); // y3 } else { - screen.render(x * 16 + 0, y * 16 + 8, x1 + y2 * 32, 0, 1); // y2 + screen.render(x * 16 + 0, y * 16 + 8, type.sprite_x1 + type.sprite_y2 * 32, 0, 1); // y2 } if (d && dr && r) { - screen.render(x * 16 + 8, y * 16 + 8, x2 + y2 * 32, 0, 1); // y2 + screen.render(x * 16 + 8, y * 16 + 8, type.sprite_x2 + type.sprite_y2 * 32, 0, 1); // y2 } else { - screen.render(x * 16 + 8, y * 16 + 8, x2 + y4 * 32, 0, 1); // y4 + screen.render(x * 16 + 8, y * 16 + 8, type.sprite_x2 + type.sprite_y4 * 32, 0, 1); // y4 } } @@ -160,12 +149,12 @@ public boolean interact(Level level, int xt, int yt, Player player, Item item, D @Override public void hurt(Level level, int x, int y, int dmg) { - if (random.nextInt(100) == 0) { + if (random.nextInt(100) == 50) { level.dropItem(x * 16 + 8, y * 16 + 8, Items.get("Apple")); } int damage = level.getData(x, y) + dmg; - int treeHealth = health; + int treeHealth = type.health; if (Game.isMode("Creative")) { dmg = damage = treeHealth; } @@ -176,11 +165,11 @@ public void hurt(Level level, int x, int y, int dmg) { level.add(new TextParticle("" + dmg, x * 16 + 8, y * 16 + 8, Color.RED)); if (damage >= treeHealth) { - level.dropItem(x * 16 + 8, y * 16 + 8, 1, 2, Items.get(Loot[0])); - level.dropItem(x * 16 + 8, y * 16 + 8, 1, 2, Items.get(Loot[1])); - level.dropItem(x * 16 + 8, y * 16 + 8, 0, 1, Items.get(Loot[2])); + level.dropItem(x * 16 + 8, y * 16 + 8, 1, 2, Items.get(type.loot[0])); + level.dropItem(x * 16 + 8, y * 16 + 8, 1, 2, Items.get(type.loot[1])); + level.dropItem(x * 16 + 8, y * 16 + 8, 0, 1, Items.get(type.loot[2])); - level.setTile(x, y, Tiles.get(baseTile)); + level.setTile(x, y, Tiles.get(type.baseTile)); if (!Game.isMode("creative")) { AchievementsDisplay.setAchievement("minicraft.achievement.woodcutter", true); diff --git a/src/main/java/minicraft/level/tile/WallTile.java b/src/main/java/minicraft/level/tile/WallTile.java index b8319daa..cd1ecced 100644 --- a/src/main/java/minicraft/level/tile/WallTile.java +++ b/src/main/java/minicraft/level/tile/WallTile.java @@ -37,39 +37,39 @@ protected WallTile(Material type) { switch (type) { case Wood: sprite = new ConnectorSprite(WallTile.class, - new Sprite(0, 14, 3, 3, 1, 3), - new Sprite(3, 14, 2, 2, 1, 3), - new Sprite(1, 15, 2, 2, 1, 0, true)); + new Sprite(0, 14, 3, 3, 1, 3), + new Sprite(3, 14, 2, 2, 1, 3), + new Sprite(1, 15, 2, 2, 1, 0, true)); break; case Stone: sprite = new ConnectorSprite(WallTile.class, - new Sprite(10, 14, 3, 3, 1, 3), - new Sprite(13, 14, 2, 2, 1, 3), - new Sprite(11, 15, 2, 2, 1, 0, true)); + new Sprite(10, 14, 3, 3, 1, 3), + new Sprite(13, 14, 2, 2, 1, 3), + new Sprite(11, 15, 2, 2, 1, 0, true)); break; case Obsidian: sprite = new ConnectorSprite(WallTile.class, - new Sprite(20, 14, 3, 3, 1, 3), - new Sprite(23, 14, 2, 2, 1, 3), - new Sprite(21, 15, 2, 2, 1, 0, true)); + new Sprite(20, 14, 3, 3, 1, 3), + new Sprite(23, 14, 2, 2, 1, 3), + new Sprite(21, 15, 2, 2, 1, 0, true)); break; case Spruce: sprite = new ConnectorSprite(WallTile.class, - new Sprite(30, 14, 3, 3, 1, 3), - new Sprite(33, 14, 2, 2, 1, 3), - new Sprite(31, 15, 2, 2, 1, 0, true)); + new Sprite(30, 14, 3, 3, 1, 3), + new Sprite(33, 14, 2, 2, 1, 3), + new Sprite(31, 15, 2, 2, 1, 0, true)); break; case Birch: sprite = new ConnectorSprite(WallTile.class, - new Sprite(40, 14, 3, 3, 1, 3), - new Sprite(43, 14, 2, 2, 1, 3), - new Sprite(41, 15, 2, 2, 1, 0, true)); + new Sprite(40, 14, 3, 3, 1, 3), + new Sprite(43, 14, 2, 2, 1, 3), + new Sprite(41, 15, 2, 2, 1, 0, true)); break; case Holy: sprite = new ConnectorSprite(WallTile.class, - new Sprite(50, 14, 3, 3, 1, 3), - new Sprite(53, 14, 2, 2, 1, 3), - new Sprite(51, 15, 2, 2, 1, 0, true)); + new Sprite(50, 14, 3, 3, 1, 3), + new Sprite(53, 14, 2, 2, 1, 3), + new Sprite(51, 15, 2, 2, 1, 0, true)); break; } csprite = sprite; @@ -93,8 +93,9 @@ public boolean hurt(Level level, int x, int y, Mob source, int dmg, Direction at @Override public boolean interact(Level level, int xt, int yt, Player player, Item item, Direction attackDir) { - if (Game.isMode("creative")) + if (Game.isMode("creative")) { return false; // go directly to hurt method + } if (item instanceof ToolItem) { ToolItem tool = (ToolItem) item; if (tool.type == type.getRequiredTool()) { @@ -115,6 +116,7 @@ public boolean interact(Level level, int xt, int yt, Player player, Item item, D public void hurt(Level level, int x, int y, int dmg) { int damage = level.getData(x, y) + dmg; int sbwHealth = 100; + if (Game.isMode("creative")) { dmg = damage = sbwHealth; } @@ -129,30 +131,12 @@ public void hurt(Level level, int x, int y, int dmg) { String tilename = ""; switch (type) { - case Wood: - itemName = "Plank"; - tilename = "Wood Planks"; - break; - case Stone: - itemName = "Stone Brick"; - tilename = "Stone Bricks"; - break; - case Obsidian: - itemName = "Obsidian Brick"; - tilename = "Obsidian"; - break; - case Spruce: - itemName = "Spruce Plank"; - tilename = "Spruce Planks"; - break; - case Birch: - itemName = "Birch Plank"; - tilename = "Birch Planks"; - break; - case Holy: - itemName = "Holy Brick"; - tilename = "Holy Bricks"; - break; + case Wood: itemName = "Plank"; tilename = "Wood Planks"; break; + case Stone: itemName = "Stone Brick"; tilename = "Stone Bricks"; break; + case Obsidian: itemName = "Obsidian Brick"; tilename = "Obsidian"; break; + case Spruce: itemName = "Spruce Plank"; tilename = "Spruce Planks"; break; + case Birch: itemName = "Birch Plank"; tilename = "Birch Planks"; break; + case Holy: itemName = "Holy Brick"; tilename = "Holy Bricks"; break; } level.dropItem(x * 16 + 8, y * 16 + 8, 1, 6 - type.ordinal(), Items.get(itemName)); diff --git a/src/main/java/minicraft/level/tile/farming/FarmTile.java b/src/main/java/minicraft/level/tile/farming/FarmTile.java index 55fadf3c..62259f70 100644 --- a/src/main/java/minicraft/level/tile/farming/FarmTile.java +++ b/src/main/java/minicraft/level/tile/farming/FarmTile.java @@ -5,11 +5,13 @@ import minicraft.entity.Entity; import minicraft.entity.ItemEntity; import minicraft.entity.mob.Player; +import minicraft.gfx.Screen; import minicraft.gfx.Sprite; import minicraft.item.Item; import minicraft.item.ToolItem; import minicraft.item.ToolType; import minicraft.level.Level; +import minicraft.level.tile.DirtTile; import minicraft.level.tile.Tile; import minicraft.level.tile.Tiles; @@ -23,6 +25,11 @@ public FarmTile(String name) { protected FarmTile(String name, Sprite sprite) { super(name, sprite); } + + @Override + public void render(Screen screen, Level level, int x, int y) { + sprite.render(screen, x * 16, y * 16, 0, DirtTile.dCol(level.depth)); + } @Override public boolean interact(Level level, int xt, int yt, Player player, Item item, Direction attackDir) { @@ -42,8 +49,9 @@ public boolean interact(Level level, int xt, int yt, Player player, Item item, D @Override public boolean tick(Level level, int xt, int yt) { int age = level.getData(xt, yt); - if (age < 5) + if (age < 5) { level.setData(xt, yt, age + 1); + } return true; } diff --git a/src/main/java/minicraft/network/Network.java b/src/main/java/minicraft/network/Network.java index fce309ee..2ebd1e54 100644 --- a/src/main/java/minicraft/network/Network.java +++ b/src/main/java/minicraft/network/Network.java @@ -1,6 +1,11 @@ package minicraft.network; import java.util.Random; + +import org.jetbrains.annotations.Nullable; +import org.json.JSONObject; +import org.tinylog.Logger; + import kong.unirest.HttpResponse; import kong.unirest.JsonNode; import kong.unirest.Unirest; @@ -10,9 +15,6 @@ import minicraft.core.VersionInfo; import minicraft.entity.Entity; import minicraft.level.Level; -import org.jetbrains.annotations.Nullable; -import org.json.JSONObject; -import org.tinylog.Logger; public class Network extends Game { private Network() {} diff --git a/src/main/java/minicraft/saveload/LegacyLoad.java b/src/main/java/minicraft/saveload/LegacyLoad.java index 37e72686..c7a3705f 100644 --- a/src/main/java/minicraft/saveload/LegacyLoad.java +++ b/src/main/java/minicraft/saveload/LegacyLoad.java @@ -7,6 +7,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; + import minicraft.core.Game; import minicraft.core.Updater; import minicraft.core.World; diff --git a/src/main/java/minicraft/saveload/Load.java b/src/main/java/minicraft/saveload/Load.java index c11c85dd..9a68f03f 100644 --- a/src/main/java/minicraft/saveload/Load.java +++ b/src/main/java/minicraft/saveload/Load.java @@ -9,6 +9,13 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; + +import org.jetbrains.annotations.Nullable; +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; +import org.tinylog.Logger; + import minicraft.core.Game; import minicraft.core.Updater; import minicraft.core.World; @@ -85,11 +92,6 @@ import minicraft.screen.AchievementsDisplay; import minicraft.screen.LoadingDisplay; import minicraft.screen.MultiplayerDisplay; -import org.jetbrains.annotations.Nullable; -import org.json.JSONArray; -import org.json.JSONException; -import org.json.JSONObject; -import org.tinylog.Logger; public class Load { @@ -534,6 +536,11 @@ private void loadWorld(String filename) { tilename = "Wool"; } } + + if (tilename.equalsIgnoreCase("TREE") && worldVer.compareTo(new Version("2.2.0-dev1")) >= 0) { + tilename = "Oak Tree"; + Logger.info("Detected old TREE tile, converting to new OAK_TREE tile..."); + } if (l == World.minLevelDepth + 1 && tilename.equalsIgnoreCase("LAPIS") && worldVer.compareTo(new Version("2.0.3-dev6")) < 0) { // don't replace *all* the lapis diff --git a/src/main/java/minicraft/saveload/Save.java b/src/main/java/minicraft/saveload/Save.java index 8d83d333..d31df4c0 100644 --- a/src/main/java/minicraft/saveload/Save.java +++ b/src/main/java/minicraft/saveload/Save.java @@ -6,6 +6,11 @@ import java.io.IOException; import java.util.ArrayList; import java.util.List; + +import org.json.JSONArray; +import org.json.JSONObject; +import org.tinylog.Logger; + import minicraft.core.Game; import minicraft.core.Renderer; import minicraft.core.Updater; @@ -39,9 +44,6 @@ import minicraft.screen.LoadingDisplay; import minicraft.screen.MultiplayerDisplay; import minicraft.screen.WorldSelectDisplay; -import org.json.JSONArray; -import org.json.JSONObject; -import org.tinylog.Logger; public class Save { diff --git a/src/main/java/minicraft/screen/BookData.java b/src/main/java/minicraft/screen/BookData.java index fc0e0bb5..df6d752b 100644 --- a/src/main/java/minicraft/screen/BookData.java +++ b/src/main/java/minicraft/screen/BookData.java @@ -1,6 +1,7 @@ package minicraft.screen; import java.io.IOException; + import minicraft.saveload.Load; public class BookData { diff --git a/src/main/java/minicraft/screen/CraftingDisplay.java b/src/main/java/minicraft/screen/CraftingDisplay.java index 27dcdf29..36e738c2 100644 --- a/src/main/java/minicraft/screen/CraftingDisplay.java +++ b/src/main/java/minicraft/screen/CraftingDisplay.java @@ -3,6 +3,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; + import minicraft.core.Game; import minicraft.core.io.InputHandler; import minicraft.core.io.Sound; diff --git a/src/main/java/minicraft/screen/EndGameDisplay.java b/src/main/java/minicraft/screen/EndGameDisplay.java index ee4b3fb6..d6b54d23 100644 --- a/src/main/java/minicraft/screen/EndGameDisplay.java +++ b/src/main/java/minicraft/screen/EndGameDisplay.java @@ -3,6 +3,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Random; + import minicraft.core.Game; import minicraft.core.Updater; import minicraft.core.io.InputHandler; diff --git a/src/main/java/minicraft/screen/LoadingDisplay.java b/src/main/java/minicraft/screen/LoadingDisplay.java index 05425fda..bbcf9e7b 100644 --- a/src/main/java/minicraft/screen/LoadingDisplay.java +++ b/src/main/java/minicraft/screen/LoadingDisplay.java @@ -1,7 +1,9 @@ package minicraft.screen; import java.util.Random; + import javax.swing.Timer; + import minicraft.core.Game; import minicraft.core.World; import minicraft.core.io.InputHandler; diff --git a/src/main/java/minicraft/screen/MapData.java b/src/main/java/minicraft/screen/MapData.java index d856cb3d..2766300e 100644 --- a/src/main/java/minicraft/screen/MapData.java +++ b/src/main/java/minicraft/screen/MapData.java @@ -99,7 +99,7 @@ public enum MapData { CACTUS(Tiles.get("Cactus").id, Color.get(1, 183, 183, 91)), - TREE(Tiles.get("Tree").id, Color.get(1, 37, 83, 37)), + OAK_TREE(Tiles.get("Oak Tree").id, Color.get(1, 37, 83, 37)), BIRCH_TREE(Tiles.get("Birch Tree").id, Color.get(1, 12, 117, 12)), FIR_TREE(Tiles.get("Fir Tree").id, Color.get(1, 19, 139, 98)), PINE_TREE(Tiles.get("Pine Tree").id, Color.get(1, 17, 127, 89)), diff --git a/src/main/java/minicraft/screen/Menu.java b/src/main/java/minicraft/screen/Menu.java index 450fcc61..aaff81a6 100644 --- a/src/main/java/minicraft/screen/Menu.java +++ b/src/main/java/minicraft/screen/Menu.java @@ -5,6 +5,10 @@ import java.util.Iterator; import java.util.List; import java.util.Locale; + +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + import minicraft.core.io.InputHandler; import minicraft.core.io.Localization; import minicraft.core.io.Sound; @@ -18,8 +22,6 @@ import minicraft.gfx.SpriteSheet; import minicraft.screen.entry.BlankEntry; import minicraft.screen.entry.ListEntry; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; public class Menu { diff --git a/src/main/java/minicraft/screen/OptionsDisplay.java b/src/main/java/minicraft/screen/OptionsDisplay.java index 7336f597..39a6552f 100644 --- a/src/main/java/minicraft/screen/OptionsDisplay.java +++ b/src/main/java/minicraft/screen/OptionsDisplay.java @@ -3,6 +3,9 @@ import java.awt.Desktop; import java.io.File; import java.io.IOException; + +import org.tinylog.Logger; + import minicraft.core.Game; import minicraft.core.io.InputHandler; import minicraft.core.io.Localization; @@ -13,7 +16,6 @@ import minicraft.screen.entry.BlankEntry; import minicraft.screen.entry.SelectEntry; import minicraft.screen.entry.StringEntry; -import org.tinylog.Logger; public class OptionsDisplay extends Display { diff --git a/src/main/java/minicraft/screen/TitleDisplay.java b/src/main/java/minicraft/screen/TitleDisplay.java index 30a7dbb7..25e7872d 100644 --- a/src/main/java/minicraft/screen/TitleDisplay.java +++ b/src/main/java/minicraft/screen/TitleDisplay.java @@ -9,6 +9,10 @@ import java.util.List; import java.util.Random; import java.util.stream.Collectors; + +import org.json.JSONArray; +import org.json.JSONObject; + import minicraft.core.Game; import minicraft.core.Renderer; import minicraft.core.World; @@ -24,8 +28,6 @@ import minicraft.screen.entry.LinkEntry; import minicraft.screen.entry.SelectEntry; import minicraft.screen.tutorial.TutorialDisplay; -import org.json.JSONArray; -import org.json.JSONObject; public class TitleDisplay extends Display { private static final Random random = new Random(); diff --git a/src/main/java/minicraft/screen/WorldEditDisplay.java b/src/main/java/minicraft/screen/WorldEditDisplay.java index e4bf3aab..a533007a 100644 --- a/src/main/java/minicraft/screen/WorldEditDisplay.java +++ b/src/main/java/minicraft/screen/WorldEditDisplay.java @@ -5,6 +5,10 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; + +import org.jetbrains.annotations.Nullable; +import org.tinylog.Logger; + import minicraft.core.Game; import minicraft.core.io.FileHandler; import minicraft.core.io.InputHandler; @@ -18,8 +22,6 @@ import minicraft.screen.entry.ListEntry; import minicraft.screen.entry.SelectEntry; import minicraft.screen.entry.StringEntry; -import org.jetbrains.annotations.Nullable; -import org.tinylog.Logger; /** * Used to edit worlds. These actions include renaming, deleting, and copying worlds. diff --git a/src/main/java/minicraft/screen/WorldGenDisplay.java b/src/main/java/minicraft/screen/WorldGenDisplay.java index a113fb4f..3fc28adb 100644 --- a/src/main/java/minicraft/screen/WorldGenDisplay.java +++ b/src/main/java/minicraft/screen/WorldGenDisplay.java @@ -5,6 +5,7 @@ import java.util.List; import java.util.Random; import java.util.regex.Pattern; + import minicraft.core.Game; import minicraft.core.io.Localization; import minicraft.core.io.Settings; diff --git a/src/main/java/minicraft/screen/WorldSelectDisplay.java b/src/main/java/minicraft/screen/WorldSelectDisplay.java index 9d0571b5..6c60a3e5 100644 --- a/src/main/java/minicraft/screen/WorldSelectDisplay.java +++ b/src/main/java/minicraft/screen/WorldSelectDisplay.java @@ -2,6 +2,9 @@ import java.io.File; import java.util.ArrayList; + +import org.tinylog.Logger; + import minicraft.core.Game; import minicraft.core.io.InputHandler; import minicraft.core.io.Localization; @@ -13,7 +16,6 @@ import minicraft.saveload.Version; import minicraft.screen.WorldEditDisplay.Action; import minicraft.screen.entry.SelectEntry; -import org.tinylog.Logger; public class WorldSelectDisplay extends Display { diff --git a/src/main/java/minicraft/screen/entry/ArrayEntry.java b/src/main/java/minicraft/screen/entry/ArrayEntry.java index 46ce83bb..d9259919 100644 --- a/src/main/java/minicraft/screen/entry/ArrayEntry.java +++ b/src/main/java/minicraft/screen/entry/ArrayEntry.java @@ -1,6 +1,7 @@ package minicraft.screen.entry; import java.util.Arrays; + import minicraft.core.io.InputHandler; import minicraft.core.io.Localization; import minicraft.core.io.Sound; diff --git a/src/main/java/minicraft/screen/entry/ItemEntry.java b/src/main/java/minicraft/screen/entry/ItemEntry.java index 14c8d70a..fbb33a72 100644 --- a/src/main/java/minicraft/screen/entry/ItemEntry.java +++ b/src/main/java/minicraft/screen/entry/ItemEntry.java @@ -1,6 +1,7 @@ package minicraft.screen.entry; import java.util.List; + import minicraft.core.io.InputHandler; import minicraft.gfx.Screen; import minicraft.item.Item; diff --git a/src/main/java/minicraft/screen/entry/RecipeEntry.java b/src/main/java/minicraft/screen/entry/RecipeEntry.java index 5604028d..198508e1 100644 --- a/src/main/java/minicraft/screen/entry/RecipeEntry.java +++ b/src/main/java/minicraft/screen/entry/RecipeEntry.java @@ -1,6 +1,7 @@ package minicraft.screen.entry; import java.util.List; + import minicraft.core.io.InputHandler; import minicraft.gfx.Font; import minicraft.gfx.Screen; diff --git a/src/main/java/minicraft/screen/entry/StringEntry.java b/src/main/java/minicraft/screen/entry/StringEntry.java index 896b6d9d..57a3367e 100644 --- a/src/main/java/minicraft/screen/entry/StringEntry.java +++ b/src/main/java/minicraft/screen/entry/StringEntry.java @@ -1,6 +1,7 @@ package minicraft.screen.entry; import java.util.ArrayList; + import minicraft.core.io.InputHandler; import minicraft.core.io.Localization; import minicraft.gfx.Color; diff --git a/src/main/resources/resources/textures/Legacy/tiles.png b/src/main/resources/resources/textures/Legacy/tiles.png index 698f8a86..ebd4da63 100644 Binary files a/src/main/resources/resources/textures/Legacy/tiles.png and b/src/main/resources/resources/textures/Legacy/tiles.png differ diff --git a/src/main/resources/resources/textures/tiles.png b/src/main/resources/resources/textures/tiles.png index 91cf3555..cbc1417b 100644 Binary files a/src/main/resources/resources/textures/tiles.png and b/src/main/resources/resources/textures/tiles.png differ