diff --git a/src/main/java/de/bixilon/minosoft/render/Face/FullFacePosition.java b/src/main/java/de/bixilon/minosoft/render/Face/FullFacePosition.java deleted file mode 100644 index d9dfa8461..000000000 --- a/src/main/java/de/bixilon/minosoft/render/Face/FullFacePosition.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Codename Minosoft - * Copyright (C) 2020 Lukas Eisenhauer - * - * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with this program. If not, see . - * - * This software is not affiliated with Mojang AB, the original developer of Minecraft. - */ - -package de.bixilon.minosoft.render.Face; - -import de.bixilon.minosoft.game.datatypes.world.BlockPosition; -import javafx.util.Pair; -import org.apache.commons.collections.primitives.ArrayFloatList; - -import static de.bixilon.minosoft.render.Face.RenderConstants.UV; - -public class FullFacePosition { - private final BlockPosition blockPosition; - private final FaceOrientation faceOrientation; - - public FullFacePosition(BlockPosition blockPosition, FaceOrientation faceOrientation) { - this.blockPosition = blockPosition; - this.faceOrientation = faceOrientation; - } - - public BlockPosition getBlockPosition() { - return blockPosition; - } - - public FaceOrientation getFaceOrientation() { - return faceOrientation; - } - - @Override - public int hashCode() { - return blockPosition.hashCode() * faceOrientation.hashCode(); - } - - public void addVertices(ArrayFloatList vertPos, ArrayFloatList textPos, Pair texture) { - float[][] vertPositions = RenderConstants.FACE_VERTEX[faceOrientation.getId()]; - for (int vert = 0; vert < 4; vert++) { - vertPos.add(vertPositions[vert][0] + this.getBlockPosition().getX()); - vertPos.add(vertPositions[vert][1] + this.getBlockPosition().getY()); - vertPos.add(vertPositions[vert][2] + this.getBlockPosition().getZ()); - - float u; - switch (UV[vert][0]) { - case 0: - u = texture.getKey(); - break; - case 1: - u = texture.getValue(); - break; - default: - u = 0; - } - - textPos.add(u); - textPos.add(UV[vert][1]); - } - } -} diff --git a/src/main/java/de/bixilon/minosoft/render/WorldRenderer.java b/src/main/java/de/bixilon/minosoft/render/WorldRenderer.java index bad55179f..7693ecdbd 100644 --- a/src/main/java/de/bixilon/minosoft/render/WorldRenderer.java +++ b/src/main/java/de/bixilon/minosoft/render/WorldRenderer.java @@ -17,15 +17,15 @@ import de.bixilon.minosoft.game.datatypes.objectLoader.blocks.Block; import de.bixilon.minosoft.game.datatypes.objectLoader.blocks.Blocks; import de.bixilon.minosoft.game.datatypes.world.*; import de.bixilon.minosoft.logging.Log; -import de.bixilon.minosoft.render.Face.FaceOrientation; import de.bixilon.minosoft.render.blockModels.BlockModelLoader; -import de.bixilon.minosoft.render.blockModels.Face; +import de.bixilon.minosoft.render.blockModels.Face.Face; +import de.bixilon.minosoft.render.blockModels.Face.FaceOrientation; import java.util.HashMap; import java.util.HashSet; import java.util.Map; -import static de.bixilon.minosoft.render.Face.RenderConstants.faceDir; +import static de.bixilon.minosoft.render.blockModels.Face.RenderConstants.faceDir; import static org.lwjgl.opengl.GL11.*; public class WorldRenderer { diff --git a/src/main/java/de/bixilon/minosoft/render/blockModels/BlockConfiguration.java b/src/main/java/de/bixilon/minosoft/render/blockModels/BlockConfiguration.java index 2e7a8778a..c2e73e772 100644 --- a/src/main/java/de/bixilon/minosoft/render/blockModels/BlockConfiguration.java +++ b/src/main/java/de/bixilon/minosoft/render/blockModels/BlockConfiguration.java @@ -20,30 +20,25 @@ import de.bixilon.minosoft.game.datatypes.objectLoader.blocks.BlockRotation; import java.util.HashSet; public class BlockConfiguration { - HashSet rotations; + BlockRotation rotation; HashSet blockProperties; public BlockConfiguration(String config) { - rotations = new HashSet<>(); blockProperties = new HashSet<>(); for (String configuration : config.split(",")) { switch (configuration) { - case "orientation:vertical": - rotations.add(BlockRotation.UP); - rotations.add(BlockRotation.DOWN); - break; case "orientation:up": - rotations.add(BlockRotation.UP); + rotation = BlockRotation.UP; break; case "orientation:down": - rotations.add(BlockRotation.DOWN); + rotation = BlockRotation.DOWN; break; } } } - public HashSet getRotations() { - return rotations; + public BlockRotation getRotation() { + return rotation; } public HashSet getBlockProperties() { @@ -51,15 +46,20 @@ public class BlockConfiguration { } public boolean equals(BlockConfiguration blockConfiguration) { - return rotations.equals(blockConfiguration.getRotations()) && + return rotation.equals(blockConfiguration.getRotation()) && blockProperties.equals(blockConfiguration.getBlockProperties()); } public boolean contains(Block block) { - if (!rotations.contains(block.getRotation()) && block.getRotation() != BlockRotation.NONE) { + if (block.getRotation().equals(BlockRotation.NONE)) { return false; } - + if (!block.getRotation().equals(rotation)) { + return false; + } + if (blockProperties.size() == 0 && block.getProperties().size() == 0) { + return true; + } for (BlockProperties property : blockProperties) { if (!block.getProperties().contains(property)) { return false; diff --git a/src/main/java/de/bixilon/minosoft/render/blockModels/BlockDescription.java b/src/main/java/de/bixilon/minosoft/render/blockModels/BlockDescription.java index fa1cb732a..a9b11d5b9 100644 --- a/src/main/java/de/bixilon/minosoft/render/blockModels/BlockDescription.java +++ b/src/main/java/de/bixilon/minosoft/render/blockModels/BlockDescription.java @@ -17,13 +17,15 @@ import com.google.gson.JsonElement; import com.google.gson.JsonObject; import de.bixilon.minosoft.Config; import de.bixilon.minosoft.game.datatypes.objectLoader.blocks.Block; -import de.bixilon.minosoft.render.Face.FaceOrientation; +import de.bixilon.minosoft.render.blockModels.Face.Face; +import de.bixilon.minosoft.render.blockModels.Face.FaceOrientation; import de.bixilon.minosoft.render.blockModels.subBlocks.SubBlock; import de.bixilon.minosoft.render.texture.TextureLoader; import java.io.IOException; import java.util.HashMap; import java.util.HashSet; +import java.util.Map; import static de.bixilon.minosoft.util.Util.readJsonFromFile; @@ -104,9 +106,19 @@ public class BlockDescription { } public HashSet prepare(Block block, HashMap adjacentBlocks) { + for (Map.Entry> entry : blockConfigurationStates.entrySet()) { + if (entry.getKey().contains(block)) { + return prepareBlockState(entry.getValue(), adjacentBlocks, block); + } + } + return prepareBlockState(defaultState, adjacentBlocks, block); + } + + private HashSet prepareBlockState(HashSet subBlocks, + HashMap adjacentBlocks, Block block) { HashSet result = new HashSet<>(); - for (SubBlock subBlock : defaultState) { - result.addAll(subBlock.getFaces(adjacentBlocks)); + for (SubBlock subBlock : subBlocks) { + result.addAll(subBlock.getFaces(block, adjacentBlocks)); } return result; } @@ -116,11 +128,23 @@ public class BlockDescription { for (SubBlock subBlock : defaultState) { result.addAll(subBlock.getTextures()); } + for (HashSet subBlocks : blockConfigurationStates.values()) { + for (SubBlock subBlock : subBlocks) { + result.addAll(subBlock.getTextures()); + } + } return result; } public void applyTextures(String mod, TextureLoader loader) { - for (SubBlock subBlock : defaultState) { + applyConfigurationTextures(defaultState, mod, loader); + for (HashSet subBlocks : blockConfigurationStates.values()) { + applyConfigurationTextures(subBlocks, mod, loader); + } + } + + private void applyConfigurationTextures(HashSet subBlocks, String mod, TextureLoader loader) { + for (SubBlock subBlock : subBlocks) { subBlock.applyTextures(mod, loader); } } diff --git a/src/main/java/de/bixilon/minosoft/render/blockModels/BlockModelLoader.java b/src/main/java/de/bixilon/minosoft/render/blockModels/BlockModelLoader.java index a4258872c..473e33d2f 100644 --- a/src/main/java/de/bixilon/minosoft/render/blockModels/BlockModelLoader.java +++ b/src/main/java/de/bixilon/minosoft/render/blockModels/BlockModelLoader.java @@ -19,7 +19,8 @@ import de.bixilon.minosoft.Config; import de.bixilon.minosoft.game.datatypes.objectLoader.blocks.Block; import de.bixilon.minosoft.game.datatypes.objectLoader.blocks.Blocks; import de.bixilon.minosoft.logging.Log; -import de.bixilon.minosoft.render.Face.FaceOrientation; +import de.bixilon.minosoft.render.blockModels.Face.Face; +import de.bixilon.minosoft.render.blockModels.Face.FaceOrientation; import de.bixilon.minosoft.render.texture.TextureLoader; import org.apache.commons.collections.primitives.ArrayFloatList; diff --git a/src/main/java/de/bixilon/minosoft/render/Face/Axis.java b/src/main/java/de/bixilon/minosoft/render/blockModels/Face/Axis.java similarity index 93% rename from src/main/java/de/bixilon/minosoft/render/Face/Axis.java rename to src/main/java/de/bixilon/minosoft/render/blockModels/Face/Axis.java index f2169641b..e9e094f1b 100644 --- a/src/main/java/de/bixilon/minosoft/render/Face/Axis.java +++ b/src/main/java/de/bixilon/minosoft/render/blockModels/Face/Axis.java @@ -11,7 +11,7 @@ * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.render.Face; +package de.bixilon.minosoft.render.blockModels.Face; public enum Axis { X, Y, Z diff --git a/src/main/java/de/bixilon/minosoft/render/blockModels/Face.java b/src/main/java/de/bixilon/minosoft/render/blockModels/Face/Face.java similarity index 93% rename from src/main/java/de/bixilon/minosoft/render/blockModels/Face.java rename to src/main/java/de/bixilon/minosoft/render/blockModels/Face/Face.java index 2dd8a327c..38faa0d41 100644 --- a/src/main/java/de/bixilon/minosoft/render/blockModels/Face.java +++ b/src/main/java/de/bixilon/minosoft/render/blockModels/Face/Face.java @@ -11,10 +11,9 @@ * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.render.blockModels; +package de.bixilon.minosoft.render.blockModels.Face; import de.bixilon.minosoft.game.datatypes.world.BlockPosition; -import de.bixilon.minosoft.render.Face.FaceOrientation; import de.bixilon.minosoft.render.blockModels.subBlocks.Cuboid; import de.bixilon.minosoft.render.blockModels.subBlocks.SubBlockPosition; import de.bixilon.minosoft.render.texture.InFaceUV; diff --git a/src/main/java/de/bixilon/minosoft/render/Face/FaceOrientation.java b/src/main/java/de/bixilon/minosoft/render/blockModels/Face/FaceOrientation.java similarity index 95% rename from src/main/java/de/bixilon/minosoft/render/Face/FaceOrientation.java rename to src/main/java/de/bixilon/minosoft/render/blockModels/Face/FaceOrientation.java index d55c53a84..3b9f7b3e9 100644 --- a/src/main/java/de/bixilon/minosoft/render/Face/FaceOrientation.java +++ b/src/main/java/de/bixilon/minosoft/render/blockModels/Face/FaceOrientation.java @@ -11,7 +11,7 @@ * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.render.Face; +package de.bixilon.minosoft.render.blockModels.Face; public enum FaceOrientation { EAST(0), WEST(1), UP(2), DOWN(3), SOUTH(4), NORTH(5); diff --git a/src/main/java/de/bixilon/minosoft/render/Face/RenderConstants.java b/src/main/java/de/bixilon/minosoft/render/blockModels/Face/RenderConstants.java similarity index 97% rename from src/main/java/de/bixilon/minosoft/render/Face/RenderConstants.java rename to src/main/java/de/bixilon/minosoft/render/blockModels/Face/RenderConstants.java index 2c0189b6f..869cbb702 100644 --- a/src/main/java/de/bixilon/minosoft/render/Face/RenderConstants.java +++ b/src/main/java/de/bixilon/minosoft/render/blockModels/Face/RenderConstants.java @@ -11,7 +11,7 @@ * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.render.Face; +package de.bixilon.minosoft.render.blockModels.Face; public class RenderConstants { public static final int texturePackRes = 16; diff --git a/src/main/java/de/bixilon/minosoft/render/blockModels/subBlocks/Cuboid.java b/src/main/java/de/bixilon/minosoft/render/blockModels/subBlocks/Cuboid.java index 17d075c9e..ef506fe57 100644 --- a/src/main/java/de/bixilon/minosoft/render/blockModels/subBlocks/Cuboid.java +++ b/src/main/java/de/bixilon/minosoft/render/blockModels/subBlocks/Cuboid.java @@ -15,7 +15,7 @@ package de.bixilon.minosoft.render.blockModels.subBlocks; // some 3d object with 8 corners, 6 faces and 12 edges (example: cube, but can be deformed) -import de.bixilon.minosoft.render.Face.FaceOrientation; +import de.bixilon.minosoft.render.blockModels.Face.FaceOrientation; import java.util.HashMap; import java.util.Map; @@ -25,7 +25,7 @@ public class Cuboid { FaceOrientation.EAST, new int[]{7, 5, 1, 3}, FaceOrientation.WEST, new int[]{4, 6, 2, 0}, FaceOrientation.UP, new int[]{7, 6, 4, 5}, - FaceOrientation.DOWN, new int[]{0, 1, 3, 2}, + FaceOrientation.DOWN, new int[]{2, 3, 1, 0}, FaceOrientation.SOUTH, new int[]{6, 7, 3, 2}, FaceOrientation.NORTH, new int[]{5, 4, 0, 1} ); 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 2a8809f8d..f7552e3e7 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 @@ -14,8 +14,9 @@ package de.bixilon.minosoft.render.blockModels.subBlocks; import com.google.gson.JsonObject; -import de.bixilon.minosoft.render.Face.FaceOrientation; -import de.bixilon.minosoft.render.blockModels.Face; +import de.bixilon.minosoft.game.datatypes.objectLoader.blocks.Block; +import de.bixilon.minosoft.render.blockModels.Face.Face; +import de.bixilon.minosoft.render.blockModels.Face.FaceOrientation; import de.bixilon.minosoft.render.texture.InFaceUV; import de.bixilon.minosoft.render.texture.TextureLoader; import javafx.util.Pair; @@ -103,7 +104,7 @@ public class SubBlock { cullFaceTextures.put(orientation, faceJson.has("cullface")); } - public HashSet getFaces(HashMap adjacentBlocks) { + public HashSet getFaces(Block block, HashMap adjacentBlocks) { HashSet result = new HashSet<>(); for (FaceOrientation orientation : FaceOrientation.values()) { if (!textureCoordinates.containsKey(orientation)) { diff --git a/src/main/java/de/bixilon/minosoft/render/blockModels/subBlocks/SubBlockPosition.java b/src/main/java/de/bixilon/minosoft/render/blockModels/subBlocks/SubBlockPosition.java index 2ed1f586b..fee1256dd 100644 --- a/src/main/java/de/bixilon/minosoft/render/blockModels/subBlocks/SubBlockPosition.java +++ b/src/main/java/de/bixilon/minosoft/render/blockModels/subBlocks/SubBlockPosition.java @@ -16,7 +16,7 @@ package de.bixilon.minosoft.render.blockModels.subBlocks; import com.google.gson.JsonArray; import de.bixilon.minosoft.game.datatypes.world.BlockPosition; -import static de.bixilon.minosoft.render.Face.RenderConstants.blockRes; +import static de.bixilon.minosoft.render.blockModels.Face.RenderConstants.blockRes; import static org.lwjgl.opengl.GL11.glVertex3f; public class SubBlockPosition { diff --git a/src/main/java/de/bixilon/minosoft/render/blockModels/subBlocks/SubBlockRotation.java b/src/main/java/de/bixilon/minosoft/render/blockModels/subBlocks/SubBlockRotation.java index e6d5d70d8..99241a29c 100644 --- a/src/main/java/de/bixilon/minosoft/render/blockModels/subBlocks/SubBlockRotation.java +++ b/src/main/java/de/bixilon/minosoft/render/blockModels/subBlocks/SubBlockRotation.java @@ -14,7 +14,7 @@ package de.bixilon.minosoft.render.blockModels.subBlocks; import com.google.gson.JsonObject; -import de.bixilon.minosoft.render.Face.Axis; +import de.bixilon.minosoft.render.blockModels.Face.Axis; import javafx.util.Pair; import static java.lang.StrictMath.cos; diff --git a/src/main/java/de/bixilon/minosoft/render/movement/PlayerController.java b/src/main/java/de/bixilon/minosoft/render/movement/PlayerController.java index 7d67fcef4..813ff3bb6 100644 --- a/src/main/java/de/bixilon/minosoft/render/movement/PlayerController.java +++ b/src/main/java/de/bixilon/minosoft/render/movement/PlayerController.java @@ -23,7 +23,7 @@ import static org.lwjgl.opengl.GL11.glTranslatef; public class PlayerController { private final float playerHeight = 1.8f; - private final float playerWidth = 0.5f; + private final float playerWidth = 0.25f; CameraMovement cameraMovement; PlayerMovement playerMovement; Vec3 playerPos = new Vec3(); // the feet position of the player 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 2a40071d4..91aa50d2a 100644 --- a/src/main/java/de/bixilon/minosoft/render/texture/InFaceUV.java +++ b/src/main/java/de/bixilon/minosoft/render/texture/InFaceUV.java @@ -17,7 +17,7 @@ import com.google.gson.JsonArray; import de.bixilon.minosoft.render.MainWindow; import javafx.util.Pair; -import static de.bixilon.minosoft.render.Face.RenderConstants.texturePackRes; +import static de.bixilon.minosoft.render.blockModels.Face.RenderConstants.texturePackRes; import static org.lwjgl.opengl.GL11.glTexCoord2f; public class InFaceUV { diff --git a/src/main/resources/assets/mapping/blockModels/minecraft.json b/src/main/resources/assets/mapping/blockModels/minecraft.json index 688987544..5b9e413ed 100644 --- a/src/main/resources/assets/mapping/blockModels/minecraft.json +++ b/src/main/resources/assets/mapping/blockModels/minecraft.json @@ -46,7 +46,8 @@ "lapis_ore": "regular", "lapis_block": "regular", "dispenser": { - "orientation:vertical": "dispenser_vertical", + "orientation:up": "dispenser_vertical", + "orientation:down": "dispenser_vertical", "else": "dispenser" }, "sandstone": "regular", @@ -111,16 +112,8 @@ "azure_bluet": "regular" }, "tinted_textures": { - "block/grass_block_top": [ - 0, - 1, - 0 - ], - "block/grass": [ - 0, - 1, - 0 - ] + "block/grass_block_top": [0,1,0], + "block/grass": [0,1,0] }, "ignored_textures": [ "block/grass_block_side_overlay"