From ad4a0889494d20426b1d588da672d10cc1cda8f8 Mon Sep 17 00:00:00 2001 From: Forwolk Date: Thu, 2 Aug 2018 09:15:59 +0300 Subject: [PATCH] Interfaces --- .../java/mc/core/block/AbstractBlock.java | 21 ++++++++++++++++++ core/src/main/java/mc/core/block/Block.java | 22 +++++++------------ core/src/main/java/mc/core/nbt/Taggable.java | 11 ++++++++++ core/src/main/java/mc/core/world/Chunk.java | 4 +++- core/src/main/java/mc/core/world/Region.java | 3 ++- core/src/main/java/mc/core/world/World.java | 4 +++- 6 files changed, 48 insertions(+), 17 deletions(-) create mode 100644 core/src/main/java/mc/core/nbt/Taggable.java diff --git a/core/src/main/java/mc/core/block/AbstractBlock.java b/core/src/main/java/mc/core/block/AbstractBlock.java index 11f3f7f..126e605 100644 --- a/core/src/main/java/mc/core/block/AbstractBlock.java +++ b/core/src/main/java/mc/core/block/AbstractBlock.java @@ -1,9 +1,14 @@ package mc.core.block; +import com.flowpowered.nbt.Tag; import lombok.Getter; import lombok.Setter; import mc.core.Location; +import java.util.HashMap; +import java.util.Map; +import java.util.stream.Stream; + public abstract class AbstractBlock implements Block { @Getter@Setter private Location location; @@ -11,6 +16,7 @@ public abstract class AbstractBlock implements Block { private int meta; @Getter private final BlockType blockType; + private final Map> nbtTagsMap = new HashMap<>(); protected AbstractBlock(BlockType type) { this.blockType = type; @@ -25,4 +31,19 @@ public abstract class AbstractBlock implements Block { public int getId() { return blockType.getId(); } + + @Override + public Tag getTag(String name) { + return nbtTagsMap.get(name); + } + + @Override + public void setTag(Tag tag) { + nbtTagsMap.put(tag.getName(), tag); + } + + @Override + public Stream> tagStream() { + return nbtTagsMap.values().stream(); + } } diff --git a/core/src/main/java/mc/core/block/Block.java b/core/src/main/java/mc/core/block/Block.java index 81d662a..fd67fa8 100644 --- a/core/src/main/java/mc/core/block/Block.java +++ b/core/src/main/java/mc/core/block/Block.java @@ -1,6 +1,10 @@ package mc.core.block; +import com.flowpowered.nbt.Tag; import mc.core.Location; +import mc.core.nbt.Taggable; + +import java.io.Serializable; /** * Serialization block info @@ -23,23 +27,13 @@ import mc.core.Location; * */ -public interface Block { +public interface Block extends Taggable, Serializable{ static Block airBlock (int x, int y, int z) { - return new Block() { + return new AbstractBlock(BlockType.AIR) { @Override - public int getId() { - return 0; - } - - @Override - public int getMeta() { - return 0; - } - - @Override - public BlockType getBlockType() { - return BlockType.AIR; + public Tag getTag(String name) { + return null; } @Override diff --git a/core/src/main/java/mc/core/nbt/Taggable.java b/core/src/main/java/mc/core/nbt/Taggable.java new file mode 100644 index 0000000..0e3a46c --- /dev/null +++ b/core/src/main/java/mc/core/nbt/Taggable.java @@ -0,0 +1,11 @@ +package mc.core.nbt; + +import com.flowpowered.nbt.Tag; + +import java.util.stream.Stream; + +public interface Taggable { + Tag getTag(String name); + void setTag(Tag tag); + Stream> tagStream(); +} diff --git a/core/src/main/java/mc/core/world/Chunk.java b/core/src/main/java/mc/core/world/Chunk.java index 95b49b9..a8c09cf 100644 --- a/core/src/main/java/mc/core/world/Chunk.java +++ b/core/src/main/java/mc/core/world/Chunk.java @@ -6,6 +6,8 @@ package mc.core.world; import mc.core.block.Block; +import java.io.Serializable; + /** * Serialization chunk info * @@ -24,7 +26,7 @@ import mc.core.block.Block; * */ /* 16x16x16 */ -public interface Chunk { +public interface Chunk extends Serializable{ int getBlockType(int x, int y, int z); void setBlockType(int x, int y, int z, int type); diff --git a/core/src/main/java/mc/core/world/Region.java b/core/src/main/java/mc/core/world/Region.java index 2d72766..ebf921e 100644 --- a/core/src/main/java/mc/core/world/Region.java +++ b/core/src/main/java/mc/core/world/Region.java @@ -3,6 +3,7 @@ package mc.core.world; import mc.core.serialization.Serializer; import java.io.IOException; +import java.io.Serializable; /** * Simple world generation unit @@ -18,7 +19,7 @@ import java.io.IOException; * Total: 2097152 bits (256 Kb) * */ -public interface Region { +public interface Region extends Serializable{ Chunk getChunkAt(int x, int y, int z); void setChunk(int x, int y, int z, Chunk chunk); diff --git a/core/src/main/java/mc/core/world/World.java b/core/src/main/java/mc/core/world/World.java index aafdc2e..86184e4 100644 --- a/core/src/main/java/mc/core/world/World.java +++ b/core/src/main/java/mc/core/world/World.java @@ -5,7 +5,9 @@ package mc.core.world; import mc.core.Location; +import mc.core.nbt.Taggable; +import java.io.Serializable; import java.util.UUID; /** @@ -39,7 +41,7 @@ import java.util.UUID; * --> []player_uuid.dat */ -public interface World { +public interface World extends Taggable, Serializable{ UUID getWorldId(); IWorldType getWorldType();