diff options
4 files changed, 129 insertions, 25 deletions
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/RoomProcessorBlazeSolver.java b/src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/RoomProcessorBlazeSolver.java index 27062e26..117327d1 100644 --- a/src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/RoomProcessorBlazeSolver.java +++ b/src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/RoomProcessorBlazeSolver.java @@ -80,7 +80,7 @@ public class RoomProcessorBlazeSolver extends GeneralRoomProcessor { if (next == null) return; Vec3 pos = next.getPositionEyes(partialTicks); RenderUtils.drawTextAtWorld("NEXT", (float)pos.xCoord, (float)pos.yCoord, (float)pos.zCoord, 0xFF00ff00, 0.5f, true, false, partialTicks); - RenderUtils.highlightBlock(next.getPosition(), new Color(0,255,0,50), partialTicks); + RenderUtils.highlightBox(next, new Color(0,255,0,50), partialTicks, false); } public static class Generator implements RoomProcessorGenerator<RoomProcessorBlazeSolver> { diff --git a/src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/RoomProcessorBoxSolver.java b/src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/RoomProcessorBoxSolver.java index 43482cce..5d2d479d 100644 --- a/src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/RoomProcessorBoxSolver.java +++ b/src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/RoomProcessorBoxSolver.java @@ -67,22 +67,21 @@ public class RoomProcessorBoxSolver extends GeneralRoomProcessor { for (Point dir:directions) { int resX = playerX + dir.x; int resY = playerY + dir.y; - if (resX < 0 || resY < 0 || resX >= board[0].length|| resY>=board.length || board[resY][resX] == 2) continue; - + if (resX < 0 || resY < 0 || resX >= board[0].length|| resY>=board.length || (board[resY][resX] > 1 && resY > 0) ||(board[resY][resX] > 3)) continue; byte[][] copied = new byte[board.length][]; for (int y = 0; y < copied.length; y++) copied[y] = board[y].clone(); LinkedList<Action> solved = null; boolean pushed = false; - copied[playerY][playerX] = 2; if (board[resY][resX] == 1) { if (!push(copied, resX, resY, dir.x, dir.y)) { continue; } pushed = true; solved = solve(copied, playerX, playerY); - } else if (board[resY][resX] == 0){ + } else { + copied[playerY][playerX] += 2; solved = solve(copied, resX, resY); } if (solved != null) { @@ -123,16 +122,12 @@ public class RoomProcessorBoxSolver extends GeneralRoomProcessor { return true; } - private int lastPlayerY = 0; - private Point lastPlayer = null; - @Override public void tick() { super.tick(); if (bugged) return; byte[][] currboard = buildCurrentState(); - Point playerPos = getPlayerPos(currboard); - boolean calculate = lastboard == null || lastPlayerY != Minecraft.getMinecraft().thePlayer.getPosition().getY() || (Minecraft.getMinecraft().thePlayer.getPosition().getY() < 68 && !playerPos.equals(lastPlayer)); + boolean calculate = lastboard == null; if (!calculate) { label: for (int y = 0; y < 6; y ++) { @@ -144,18 +139,6 @@ public class RoomProcessorBoxSolver extends GeneralRoomProcessor { } } if (calculate) { - if (Minecraft.getMinecraft().thePlayer.getPosition().getY() < 68) { - try { - LinkedList<Action> semiSolution; - semiSolution = solve(currboard, playerPos.x, playerPos.y); - if (semiSolution != null) { - semiSolution.addFirst(new Move(playerPos.x, playerPos.y)); - solution = semiSolution; - } - } catch (Error e) { - e.printStackTrace(); - } - } else { for (int i = 0; i < 7; i++) { if (currboard[5][i] == 0) { try { @@ -169,10 +152,7 @@ public class RoomProcessorBoxSolver extends GeneralRoomProcessor { } } } - } } - lastPlayerY = Minecraft.getMinecraft().thePlayer.getPosition().getY(); - lastPlayer = playerPos; lastboard = currboard; } diff --git a/src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/RoomProcessorRiddle.java b/src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/RoomProcessorRiddle.java index a186bce7..3cf87e2f 100644 --- a/src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/RoomProcessorRiddle.java +++ b/src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/RoomProcessorRiddle.java @@ -1,12 +1,21 @@ package kr.syeyoung.dungeonsguide.roomprocessor; +import com.google.common.base.Predicate; import kr.syeyoung.dungeonsguide.dungeon.roomfinder.DungeonRoom; import kr.syeyoung.dungeonsguide.roomedit.Parameter; +import kr.syeyoung.dungeonsguide.utils.RenderUtils; import kr.syeyoung.dungeonsguide.utils.TextUtils; +import net.minecraft.block.Block; import net.minecraft.client.Minecraft; +import net.minecraft.entity.item.EntityArmorStand; +import net.minecraft.init.Blocks; +import net.minecraft.util.BlockPos; import net.minecraft.util.ChatComponentText; import net.minecraft.util.IChatComponent; +import net.minecraft.world.World; +import org.jetbrains.annotations.Nullable; +import java.awt.*; import java.util.Arrays; import java.util.List; import java.util.regex.Pattern; @@ -44,9 +53,44 @@ public class RoomProcessorRiddle extends GeneralRoomProcessor { } if (foundMatch) { Minecraft.getMinecraft().thePlayer.addChatMessage(new ChatComponentText("§eDungeons Guide :::: "+ch2.split(":")[0].trim()+" §fhas the reward!")); + final String name = TextUtils.stripColor(ch2.split(":")[0]).replace("[NPC] ","").toLowerCase(); + final BlockPos low = getDungeonRoom().getMin(); + final BlockPos high = getDungeonRoom().getMax(); + World w = getDungeonRoom().getContext().getWorld(); + System.out.println(name); + List<EntityArmorStand> armor = w.getEntities(EntityArmorStand.class, new Predicate<EntityArmorStand>() { + @Override + public boolean apply(@Nullable EntityArmorStand input) { + BlockPos pos = input.getPosition(); + return low.getX() < pos.getX() && pos.getX() < high.getX() + && low.getZ() < pos.getZ() && pos.getZ() < high.getZ() && input.getName().toLowerCase().contains(name); + } + }); + + if (armor != null) { + BlockPos pos = armor.get(0).getPosition(); + for (BlockPos allInBox : BlockPos.getAllInBox(pos.add(-1, -2, -1), pos.add(1, -2, 1))) { + Block b = w.getChunkFromBlockCoords(allInBox).getBlock(allInBox); + + if ((b == Blocks.chest || b == Blocks.trapped_chest) && allInBox.distanceSq(pos.add(0,-1,0)) == 1) { + this.chest = allInBox; + return; + } + } + } + } } + BlockPos chest; + + @Override + public void drawWorld(float partialTicks) { + super.drawWorld(partialTicks); + if (chest != null) { + RenderUtils.highlightBlock(chest, new Color(0,255,0, 50),partialTicks); + } + } public static class Generator implements RoomProcessorGenerator<RoomProcessorRiddle> { @Override diff --git a/src/main/java/kr/syeyoung/dungeonsguide/utils/RenderUtils.java b/src/main/java/kr/syeyoung/dungeonsguide/utils/RenderUtils.java index 1de06e66..d2dbeb39 100644 --- a/src/main/java/kr/syeyoung/dungeonsguide/utils/RenderUtils.java +++ b/src/main/java/kr/syeyoung/dungeonsguide/utils/RenderUtils.java @@ -10,6 +10,7 @@ import net.minecraft.client.renderer.WorldRenderer; import net.minecraft.client.renderer.entity.RenderManager; import net.minecraft.client.renderer.vertex.DefaultVertexFormats; import net.minecraft.entity.Entity; +import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.BlockPos; import net.minecraft.util.Vec3; import org.lwjgl.opengl.GL11; @@ -247,6 +248,85 @@ public class RenderUtils { //... } + + public static void highlightBox(Entity entity, Color c, float partialTicks, boolean depth) { + Entity viewing_from = Minecraft.getMinecraft().getRenderViewEntity(); + + double x_fix = viewing_from.lastTickPosX + ((viewing_from.posX - viewing_from.lastTickPosX) * partialTicks); + double y_fix = viewing_from.lastTickPosY + ((viewing_from.posY - viewing_from.lastTickPosY) * partialTicks); + double z_fix = viewing_from.lastTickPosZ + ((viewing_from.posZ - viewing_from.lastTickPosZ) * partialTicks); + + GlStateManager.pushMatrix(); + GlStateManager.pushAttrib(); + GlStateManager.translate(-x_fix, -y_fix, -z_fix); + + GlStateManager.disableLighting(); + GlStateManager.enableBlend(); + GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GlStateManager.disableTexture2D(); + + if (!depth) { + GL11.glDisable(GL11.GL_DEPTH_TEST); + GL11.glDepthMask(false); + } + GL11.glColor4ub((byte)c.getRed(), (byte)c.getGreen(), (byte)c.getBlue(), (byte)c.getAlpha()); + + AxisAlignedBB axisAlignedBB = AxisAlignedBB.fromBounds(-0.4,-1.5,-0.4,0.4,0,0.4); + GL11.glTranslated(-0.4 + entity.posX, -1.5 + entity.posY, -0.4 + entity.posZ); + + double x = 0.8; + double y = 1.5; + double z = 0.8; + GL11.glBegin(GL11.GL_QUADS); + GL11.glVertex3d(0, 0, 0); + GL11.glVertex3d(0, 0, z); + GL11.glVertex3d(0, y, z); + GL11.glVertex3d(0, y, 0); // TOP LEFT / BOTTOM LEFT / TOP RIGHT/ BOTTOM RIGHT + + GL11.glVertex3d(x, 0, z); + GL11.glVertex3d(x, 0, 0); + GL11.glVertex3d(x, y, 0); + GL11.glVertex3d(x, y, z); + + GL11.glVertex3d(0, y, z); + GL11.glVertex3d(0, 0, z); + GL11.glVertex3d(x, 0, z); + GL11.glVertex3d(x, y, z); // TOP LEFT / BOTTOM LEFT / TOP RIGHT/ BOTTOM RIGHT + + GL11.glVertex3d(0, 0, 0); + GL11.glVertex3d(0, y, 0); + GL11.glVertex3d(x, y, 0); + GL11.glVertex3d(x, 0, 0); + + GL11.glVertex3d(0,y,0); + GL11.glVertex3d(0,y,z); + GL11.glVertex3d(x,y,z); + GL11.glVertex3d(x,y,0); + + GL11.glVertex3d(0,0,z); + GL11.glVertex3d(0,0,0); + GL11.glVertex3d(x,0,0); + GL11.glVertex3d(x,0,z); + + + + GL11.glEnd(); + + + if (!depth) { + GL11.glDisable(GL11.GL_DEPTH_TEST); + GL11.glDepthMask(true); + } + GlStateManager.enableTexture2D(); + GlStateManager.disableBlend(); + GlStateManager.enableLighting(); + GlStateManager.popMatrix(); + GlStateManager.popAttrib(); + + +//... + + } public static void drawTextAtWorld(String text, float x, float y, float z, int color, float scale, boolean increase, boolean renderBlackBox, float partialTicks) { float lScale = scale; |