diff --git a/src/main/java/de/bixilon/minosoft/render/MainWindow.java b/src/main/java/de/bixilon/minosoft/render/MainWindow.java index 5c09d3b7b..4fcc8ff13 100644 --- a/src/main/java/de/bixilon/minosoft/render/MainWindow.java +++ b/src/main/java/de/bixilon/minosoft/render/MainWindow.java @@ -63,8 +63,6 @@ public class MainWindow { float mouseY = (float) openGLWindow.getMouseY(); switch (renderMode) { case MAIN_MENU: - if (glfwGetKey(openGLWindow.getWindow(), GLFW_KEY_ESCAPE) == GLFW_PRESS) - close(); glOrtho(0.f, openGLWindow.getWidth(), openGLWindow.getHeight(), 0.f, 0.f, 1.f); mainMenu.draw(mouseX, mouseY); break; @@ -109,10 +107,6 @@ public class MainWindow { return connection; } - public static void close() { - //System.exit(0); - } - public static PlayerController getPlayerController() { return playerController; } diff --git a/src/main/java/de/bixilon/minosoft/render/blockModels/Face/Face.java b/src/main/java/de/bixilon/minosoft/render/blockModels/Face/Face.java index a7d3710d9..f5363fcac 100644 --- a/src/main/java/de/bixilon/minosoft/render/blockModels/Face/Face.java +++ b/src/main/java/de/bixilon/minosoft/render/blockModels/Face/Face.java @@ -19,13 +19,15 @@ import de.bixilon.minosoft.render.texture.InFaceUV; import javafx.util.Pair; public class Face { + int textureRotation; SubBlockPosition[] positions; InFaceUV uv; - public Face(Pair texture, InFaceUV uv, SubBlockPosition[] facePositions) { + public Face(Pair texture, InFaceUV uv, SubBlockPosition[] facePositions, int textureRotation) { positions = facePositions; this.uv = uv; this.uv.prepare(texture); + this.textureRotation = textureRotation; } public Face() { @@ -34,7 +36,7 @@ public class Face { public void draw(BlockPosition pos) { for (int i = 0; i < positions.length; i++) { - uv.draw(i); + uv.draw(i + textureRotation); positions[i].draw(pos); } } diff --git a/src/main/java/de/bixilon/minosoft/render/blockModels/subBlocks/SubBlock.java b/src/main/java/de/bixilon/minosoft/render/blockModels/subBlocks/SubBlock.java index 3e88434b0..f7aefbb70 100644 --- a/src/main/java/de/bixilon/minosoft/render/blockModels/subBlocks/SubBlock.java +++ b/src/main/java/de/bixilon/minosoft/render/blockModels/subBlocks/SubBlock.java @@ -15,6 +15,7 @@ package de.bixilon.minosoft.render.blockModels.subBlocks; import com.google.gson.JsonObject; import de.bixilon.minosoft.game.datatypes.objectLoader.blocks.Block; +import de.bixilon.minosoft.game.datatypes.objectLoader.blocks.BlockProperties; import de.bixilon.minosoft.game.datatypes.objectLoader.blocks.BlockRotation; import de.bixilon.minosoft.render.blockModels.Face.Face; import de.bixilon.minosoft.render.blockModels.Face.FaceOrientation; @@ -112,17 +113,78 @@ public class SubBlock { continue; } if (block.getRotation().equals(BlockRotation.DOWN)) { + if (orientation.equals(FaceOrientation.UP)) { + result.add(prepareFace(FaceOrientation.DOWN, orientation, + adjacentBlocks)); + continue; + } if (orientation.equals(FaceOrientation.DOWN)) { - result.add(prepareFace(FaceOrientation.DOWN, FaceOrientation.UP, + result.add(prepareFace(FaceOrientation.UP, orientation, + adjacentBlocks)); + continue; + } + } else if (block.getProperties().contains(BlockProperties.AXIS_X)) { + if (orientation.equals(FaceOrientation.EAST)) { + result.add(prepareFace(FaceOrientation.UP, orientation, + adjacentBlocks)); + continue; + } + if (orientation.equals(FaceOrientation.WEST)) { + result.add(prepareFace(FaceOrientation.DOWN, orientation, adjacentBlocks)); continue; } if (orientation.equals(FaceOrientation.UP)) { - result.add(prepareFace(FaceOrientation.UP, FaceOrientation.DOWN, + result.add(prepareFace(FaceOrientation.EAST, orientation, + adjacentBlocks, 1)); + continue; + } + if (orientation.equals(FaceOrientation.DOWN)) { + result.add(prepareFace(FaceOrientation.WEST, orientation, + adjacentBlocks, 1)); + continue; + } + if (orientation.equals(FaceOrientation.NORTH)) { + result.add(prepareFace(orientation, orientation, + adjacentBlocks, 1)); + continue; + } + if (orientation.equals(FaceOrientation.SOUTH)) { + result.add(prepareFace(orientation, orientation, + adjacentBlocks, 1)); + continue; + } + } else if (block.getProperties().contains(BlockProperties.AXIS_Z)) { + if (orientation.equals(FaceOrientation.EAST)) { + result.add(prepareFace(orientation, orientation, + adjacentBlocks, 1)); + continue; + } + if (orientation.equals(FaceOrientation.WEST)) { + result.add(prepareFace(orientation, orientation, + adjacentBlocks, 1)); + continue; + } + if (orientation.equals(FaceOrientation.UP)) { + result.add(prepareFace(FaceOrientation.EAST, orientation, + adjacentBlocks)); + continue; + } + if (orientation.equals(FaceOrientation.DOWN)) { + result.add(prepareFace(FaceOrientation.WEST, orientation, + adjacentBlocks)); + continue; + } + if (orientation.equals(FaceOrientation.NORTH)) { + result.add(prepareFace(FaceOrientation.UP, orientation, + adjacentBlocks)); + continue; + } + if (orientation.equals(FaceOrientation.SOUTH)) { + result.add(prepareFace(FaceOrientation.DOWN, orientation, adjacentBlocks)); continue; } - } result.add(prepareFace(orientation, orientation, adjacentBlocks)); } @@ -130,12 +192,18 @@ public class SubBlock { } private Face prepareFace(FaceOrientation textureDirection, FaceOrientation faceDirection, - HashMap adjacentBlocks) { + HashMap adjacentBlocks, int textureRotation) { if (adjacentBlocks.get(faceDirection) && !cullFaceTextures.get(faceDirection)) { return new Face(); } return new Face(textureCoordinates.get(textureDirection), uv.get(textureDirection), - cuboid.getFacePositions(faceDirection)); + cuboid.getFacePositions(faceDirection), textureRotation); + } + + private Face prepareFace(FaceOrientation textureDirection, FaceOrientation faceDirection, + HashMap adjacentBlocks) { + return prepareFace(textureDirection, faceDirection, + adjacentBlocks, 0); } public boolean isFull() { diff --git a/src/main/java/de/bixilon/minosoft/render/texture/InFaceUV.java b/src/main/java/de/bixilon/minosoft/render/texture/InFaceUV.java index 91aa50d2a..a3ed4c745 100644 --- a/src/main/java/de/bixilon/minosoft/render/texture/InFaceUV.java +++ b/src/main/java/de/bixilon/minosoft/render/texture/InFaceUV.java @@ -47,6 +47,9 @@ public class InFaceUV { } public void draw(int i) { + if (i > 3) { + i -= 4; + } switch (i) { case 0: glTexCoord2f(realU1, realV1); diff --git a/src/main/resources/assets/mapping/1.15.2/.editorconfig b/src/main/resources/assets/mapping/1.15.2/.editorconfig new file mode 100644 index 000000000..e69de29bb diff --git a/src/main/resources/assets/mapping/blockModels/minecraft.json b/src/main/resources/assets/mapping/blockModels/minecraft.json index 5b9e413ed..4b1b06c3e 100644 --- a/src/main/resources/assets/mapping/blockModels/minecraft.json +++ b/src/main/resources/assets/mapping/blockModels/minecraft.json @@ -31,6 +31,7 @@ "gold_ore": "regular", "iron_ore": "regular", "coal_ore": "regular", + "oak_log": "regular", "spruce_log": "regular", "birch_log": "regular", "jungle_log": "regular", @@ -109,7 +110,96 @@ "poppy": "regular", "blue_orchid": "regular", "allium": "regular", - "azure_bluet": "regular" + "azure_bluet": "regular", + "red_tulip": "regular", + "orange_tulip": "regular", + "white_tulip": "regular", + "pink_tulip": "regular", + "oxeye_daisy": "regular", + "brown_mushroom": "regular", + "red_mushroom": "regular", + "gold_block": "regular", + "iron_block": "regular", + "stone_slab": { + "else": "stone_slab", + "top": "stone_slab_top", + "bottom": "stone_slab", + "double": "stone" + }, + "sandstone_slab": { + "else": "sandstone_slab", + "top": "sandstone_slab_top", + "bottom": "sandstone_slab", + "double": "sandstone" + }, + "oak_slab": { + "else": "oak_slab", + "top": "oak_slab_top", + "bottom": "oak_slab", + "double": "oak_planks" + }, + "spruce_slab": { + "else": "spruce_slab", + "top": "spruce_slab_top", + "bottom": "spruce_slab", + "double": "spruce_planks" + }, + "birch_slab": { + "else": "birch_slab", + "top": "birch_slab_top", + "bottom": "birch_slab", + "double": "birch_planks" + }, + "acacia_slab": { + "else": "acacia_slab", + "top": "acacia_slab_top", + "bottom": "acacia_slab", + "double": "acacia_planks" + }, + "dark_oak_slab": { + "else": "dark_oak_slab", + "top": "dark_oak_slab_top", + "bottom": "dark_oak_slab", + "double": "dark_oak_planks" + }, + "cobblestone_slab": { + "else": "cobblestone_slab", + "top": "cobblestone_slab_top", + "bottom": "cobblestone_slab", + "double": "cobblestone" + }, + "brick_slab": { + "else": "brick_slab", + "top": "brick_slab_top", + "bottom": "brick_slab", + "double": "bricks" + }, + "stone_brick_slab": { + "else": "stone_brick_slab", + "top": "stone_brick_slab_top", + "bottom": "stone_brick_slab", + "double": "stone_bricks" + }, + "nether_brick_slab": { + "else": "nether_brick_slab", + "top": "nether_brick_slab_top", + "bottom": "nether_brick_slab", + "double": "nether_bricks" + }, + "quartz_slab": { + "else": "quartz_slab", + "top": "quartz_slab_top", + "bottom": "quartz_slab", + "double": "quartz_block" + }, + "bricks": "regular", + "tnt": "regular", + "bookshelf": "regular", + "mossy_cobblestone": "regular", + "obsidian": "regular", + "torch": "regular", + "wall_torch": "regular", + "spawner": "regular" }, "tinted_textures": { "block/grass_block_top": [0,1,0],