From 67115086380080397942b9a4e009fabbd84ed2b1 Mon Sep 17 00:00:00 2001 From: PeytonPlayz595 <106421860+PeytonPlayz595@users.noreply.github.com> Date: Thu, 20 Jul 2023 21:05:52 -0400 Subject: [PATCH] Fixed Models, terrain alpha channels, Mob Spawning --- resources/terrain.png | Bin 23159 -> 28961 bytes .../java/com/mojang/minecraft/Minecraft.java | 43 +-- .../minecraft/gamemode/SurvivalGameMode.java | 14 +- .../minecraft/gui/GenerateLevelScreen.java | 9 +- .../com/mojang/minecraft/gui/PauseScreen.java | 2 + .../mojang/minecraft/level/MobSpawner.java | 158 +++++------ .../com/mojang/minecraft/model/ModelPart.java | 260 +++++++++--------- .../storage/LocalStorageManager.java | 8 +- .../PeytonPlayz595/nbt/NBTTagCompound.java | 12 + .../lax1dude/eaglercraft/TestFilesystem.java | 121 -------- 10 files changed, 245 insertions(+), 382 deletions(-) delete mode 100644 src/teavm/java/net/lax1dude/eaglercraft/TestFilesystem.java diff --git a/resources/terrain.png b/resources/terrain.png index 198963a3bd95def8356445ec5a2f82df8983149a..cbf4e3cbb78f86b9aeaf233eeaf0798c46647d5e 100644 GIT binary patch literal 28961 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 s%UZRwP-`5x zwQO*qyzD}1rgd~@w$)8(<1+DV`bb1TiO0^}C*mS)RC6TK3;G5;QCI$@{;`e4QSP`O zq*E1lE_|_td9Wa!D28VDZ3MrJOfButiG=*Ylr?gyEHoN#JI zS6p+Ldb8jagZ5Q=VUZ~FETztOYso)^3l96L*>yj}3PRsKr-{{lDY@$@rq0bk9Y8J@ zn6^gA=lTf>M9Ku~Fq-QisTQXJyeF{Povy@x#}#?B^OeF0=-_hbU^miXfriXXoM9pE-}*?^-Xp7^VyY>jZQQ#R;hdMJ}LGkHiCosZK@@HcE!)Ir%lRr_#k`I~Os0iqmNTQhj>WWxNL4!YSMcQiOgqtwB zeo*D~$9`Hl-VFtG7&1;VL&o-o-l6S6PBumc+5|Tgy9Yw;Jpz~3Ys%e2?Pq!~qRgp? zZGWg|2@J0lbs#}INNEIVPzp4a*(chLr7?(zj@}Eh)l2SaCzxKyReH{AApB4FU;AEj zREuM4Z&~o)CPCqs*1x$s%hm$Z512ms?x%bV7ke&yFUx+hE-t}`zU7x*%yXP%)@j}y6HTf`DcALq)UeqU0ltRgW>;wPt z&;Egtp8HTNCQ0X`xZ||uU7EpcT5~MV!m@98UNI8mSu4qS%0Aqall9Ndc+4}z3oA&| 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 diff --git a/src/teavm/java/com/mojang/minecraft/Minecraft.java b/src/teavm/java/com/mojang/minecraft/Minecraft.java index 2d4ff22..eebb5f7 100644 --- a/src/teavm/java/com/mojang/minecraft/Minecraft.java +++ b/src/teavm/java/com/mojang/minecraft/Minecraft.java @@ -77,6 +77,7 @@ public final class Minecraft implements Runnable { private static Tessellator tessellator = Tessellator.instance; public static Minecraft minecraft; public Entity field_22009_h; + public int timeSinceLastSaved = 0; public Minecraft() { @@ -167,15 +168,7 @@ public final class Minecraft implements Runnable { Item.initModels(); Mob.modelCache = new ModelManager(); GL11.glViewport(0, 0, this.width, this.height); - if(this.server != null && this.session != null) { - Level var85; - (var85 = new Level()).setData(8, 8, 8, new byte[512]); - this.setLevel(var85); - } else { - boolean var10 = false; - this.generateLevel(1); - } - + this.generateLevel(1); this.particleManager = new ParticleManager(this.level); checkGLError("Post startup"); this.hud = new HUDScreen(this, this.width, this.height); @@ -187,7 +180,6 @@ public final class Minecraft implements Runnable { try { Thread.sleep(100L); } catch (InterruptedException e) { - // TODO Auto-generated catch block e.printStackTrace(); } } else { @@ -816,12 +808,12 @@ public final class Minecraft implements Runnable { GL11.glRotatef(-120.0F, 0.0F, 0.0F, 1.0F); GL11.glScalef(1.0F, 1.0F, 1.0F); var34 = 0.0625F; - ModelPart var127; - if(!(var127 = var112.minecraft.player.getModel().leftArm).hasList) { - var127.generateList(var34); + ModelPart var127 = var112.minecraft.player.getModel().leftArm; + if(!(var127 = var112.minecraft.player.getModel().leftArm).compiled) { + var127.render(var34); } - GL11.glCallList(var127.list); + GL11.glCallList(var127.displayList); } GL11.glDisable(2977); @@ -859,17 +851,12 @@ public final class Minecraft implements Runnable { try { Thread.sleep(5L); } catch (InterruptedException e) { - // TODO Auto-generated catch block e.printStackTrace(); } } - checkGLError("Post render"); - ++var15; - //} catch (Exception var58) { - //this.setCurrentScreen(new ErrorScreen("Client error", "The game broke! [" + var58 + "]")); - //var58.printStackTrace(); - //} + checkGLError("Post render"); + ++var15; while(System.currentTimeMillis() >= var13 + 1000L) { this.debug = var15 + " fps, " + Chunk.chunkUpdates + " chunk updates"; @@ -1003,7 +990,7 @@ public final class Minecraft implements Runnable { // } HUDScreen var17 = this.hud; ++this.hud.ticks; - + int var16; for(var16 = 0; var16 < var17.chat.size(); ++var16) { ++((ChatLine)var17.chat.get(var16)).time; @@ -1235,22 +1222,12 @@ public final class Minecraft implements Runnable { } public final void generateLevel(int var1) { - String var2 = this.session != null?this.session.username:"anonymous"; + String var2 = "PeytonPlayz585"; Level var4 = (new LevelGenerator(this.progressBar)).generate(var2, 128 << var1, 128 << var1, 64); this.gamemode.prepareLevel(var4); this.setLevel(var4); } - public final boolean loadOnlineLevel(String var1, int var2) { - Level var3; - if((var3 = this.levelIo.loadOnline(this.host, var1, var2)) == null) { - return false; - } else { - this.setLevel(var3); - return true; - } - } - public final void setLevel(Level var1) { this.level = var1; if(var1 != null) { diff --git a/src/teavm/java/com/mojang/minecraft/gamemode/SurvivalGameMode.java b/src/teavm/java/com/mojang/minecraft/gamemode/SurvivalGameMode.java index ec0ca3a..047a059 100644 --- a/src/teavm/java/com/mojang/minecraft/gamemode/SurvivalGameMode.java +++ b/src/teavm/java/com/mojang/minecraft/gamemode/SurvivalGameMode.java @@ -146,12 +146,12 @@ public final class SurvivalGameMode extends GameMode @Override public void spawnMob() { -// int area = spawner.level.width * spawner.level.height * spawner.level.depth / 64 / 64 / 64; -// -// if(spawner.level.random.nextInt(100) < area && spawner.level.countInstanceOf(Mob.class) < area * 20) -// { -// spawner.spawn(area, spawner.level.player, null); -// } + int area = spawner.level.width * spawner.level.height * spawner.level.depth / 64 / 64 / 64; + + if(spawner.level.random.nextInt(100) < area && spawner.level.countInstanceOf(Mob.class) < area * 20) + { + spawner.spawn(area, spawner.level.player, null); + } } @@ -164,6 +164,6 @@ public final class SurvivalGameMode extends GameMode int area = level.width * level.height * level.depth / 800; - spawner.spawn(area, null, minecraft.progressBar); + //spawner.spawn(area, null, minecraft.progressBar); } } diff --git a/src/teavm/java/com/mojang/minecraft/gui/GenerateLevelScreen.java b/src/teavm/java/com/mojang/minecraft/gui/GenerateLevelScreen.java index 2e1b2fe..2eb06d5 100644 --- a/src/teavm/java/com/mojang/minecraft/gui/GenerateLevelScreen.java +++ b/src/teavm/java/com/mojang/minecraft/gui/GenerateLevelScreen.java @@ -1,7 +1,6 @@ package com.mojang.minecraft.gui; -import com.mojang.minecraft.gui.Button; -import com.mojang.minecraft.gui.GuiScreen; +import org.lwjgl.opengl.GL11; public final class GenerateLevelScreen extends GuiScreen { @@ -24,9 +23,9 @@ public final class GenerateLevelScreen extends GuiScreen { if(var1.id == 3) { this.minecraft.setCurrentScreen(this.parent); } else { - this.minecraft.generateLevel(var1.id); - this.minecraft.setCurrentScreen((GuiScreen)null); - this.minecraft.grabMouse(); + this.minecraft.generateLevel(var1.id); + this.minecraft.setCurrentScreen((GuiScreen)null); + this.minecraft.grabMouse(); } } diff --git a/src/teavm/java/com/mojang/minecraft/gui/PauseScreen.java b/src/teavm/java/com/mojang/minecraft/gui/PauseScreen.java index 37abeb6..2a7f0e9 100644 --- a/src/teavm/java/com/mojang/minecraft/gui/PauseScreen.java +++ b/src/teavm/java/com/mojang/minecraft/gui/PauseScreen.java @@ -1,5 +1,7 @@ package com.mojang.minecraft.gui; +import java.io.IOException; + import com.mojang.minecraft.gui.Button; import com.mojang.minecraft.gui.GenerateLevelScreen; import com.mojang.minecraft.gui.GuiScreen; diff --git a/src/teavm/java/com/mojang/minecraft/level/MobSpawner.java b/src/teavm/java/com/mojang/minecraft/level/MobSpawner.java index 66161d2..4a1a0b4 100644 --- a/src/teavm/java/com/mojang/minecraft/level/MobSpawner.java +++ b/src/teavm/java/com/mojang/minecraft/level/MobSpawner.java @@ -22,85 +22,85 @@ public final class MobSpawner { } public final int spawn(int var1, Entity var2, ProgressBarDisplay var3) { -// int var4 = 0; -// -// for(int var5 = 0; var5 < var1; ++var5) { -// if(var3 != null) { -// var3.setProgress(var5 * 100 / (var1 - 1)); -// } -// -// int var6 = this.level.random.nextInt(6); -// int var7 = this.level.random.nextInt(this.level.width); -// int var8 = (int)(Math.min(this.level.random.nextFloat(), this.level.random.nextFloat()) * (float)this.level.depth); -// int var9 = this.level.random.nextInt(this.level.height); -// if(!this.level.isSolidTile(var7, var8, var9) && this.level.getLiquid(var7, var8, var9) == LiquidType.NOT_LIQUID && (!this.level.isLit(var7, var8, var9) || this.level.random.nextInt(5) == 0)) { -// for(int var10 = 0; var10 < 3; ++var10) { -// int var11 = var7; -// int var12 = var8; -// int var13 = var9; -// -// for(int var14 = 0; var14 < 3; ++var14) { -// var11 += this.level.random.nextInt(6) - this.level.random.nextInt(6); -// var12 += this.level.random.nextInt(1) - this.level.random.nextInt(1); -// var13 += this.level.random.nextInt(6) - this.level.random.nextInt(6); -// if(var11 >= 0 && var13 >= 1 && var12 >= 0 && var12 < this.level.depth - 2 && var11 < this.level.width && var13 < this.level.height && this.level.isSolidTile(var11, var12 - 1, var13) && !this.level.isSolidTile(var11, var12, var13) && !this.level.isSolidTile(var11, var12 + 1, var13)) { -// float var15 = (float)var11 + 0.5F; -// float var16 = (float)var12 + 1.0F; -// float var17 = (float)var13 + 0.5F; -// float var19; -// float var18; -// float var20; -// if(var2 != null) { -// var18 = var15 - var2.x; -// var19 = var16 - var2.y; -// var20 = var17 - var2.z; -// if(var18 * var18 + var19 * var19 + var20 * var20 < 256.0F) { -// continue; -// } -// } else { -// var18 = var15 - (float)this.level.xSpawn; -// var19 = var16 - (float)this.level.ySpawn; -// var20 = var17 - (float)this.level.zSpawn; -// if(var18 * var18 + var19 * var19 + var20 * var20 < 256.0F) { -// continue; -// } -// } -// -// Object var21 = null; -// if(var6 == 0) { -// var21 = new Zombie(this.level, var15, var16, var17); -// } -// -// if(var6 == 1) { -// var21 = new Skeleton(this.level, var15, var16, var17); -// } -// -// if(var6 == 2) { -// var21 = new Pig(this.level, var15, var16, var17); -// } -// -// if(var6 == 3) { -// var21 = new Creeper(this.level, var15, var16, var17); -// } -// -// if(var6 == 4) { -// var21 = new Spider(this.level, var15, var16, var17); -// } -// -// if(var6 == 5) { -// var21 = new Sheep(this.level, var15, var16, var17); -// } -// -// if(this.level.isFree(((Mob)var21).bb)) { -// ++var4; -// this.level.addEntity((Entity)var21); -// } -// } -// } -// } -// } -// } + int var4 = 0; - return 0; + for(int var5 = 0; var5 < var1; ++var5) { + if(var3 != null) { + var3.setProgress(var5 * 100 / (var1 - 1)); + } + + int var6 = this.level.random.nextInt(6); + int var7 = this.level.random.nextInt(this.level.width); + int var8 = (int)(Math.min(this.level.random.nextFloat(), this.level.random.nextFloat()) * (float)this.level.depth); + int var9 = this.level.random.nextInt(this.level.height); + if(!this.level.isSolidTile(var7, var8, var9) && this.level.getLiquid(var7, var8, var9) == LiquidType.NOT_LIQUID && (!this.level.isLit(var7, var8, var9) || this.level.random.nextInt(5) == 0)) { + for(int var10 = 0; var10 < 3; ++var10) { + int var11 = var7; + int var12 = var8; + int var13 = var9; + + for(int var14 = 0; var14 < 3; ++var14) { + var11 += this.level.random.nextInt(6) - this.level.random.nextInt(6); + var12 += this.level.random.nextInt(1) - this.level.random.nextInt(1); + var13 += this.level.random.nextInt(6) - this.level.random.nextInt(6); + if(var11 >= 0 && var13 >= 1 && var12 >= 0 && var12 < this.level.depth - 2 && var11 < this.level.width && var13 < this.level.height && this.level.isSolidTile(var11, var12 - 1, var13) && !this.level.isSolidTile(var11, var12, var13) && !this.level.isSolidTile(var11, var12 + 1, var13)) { + float var15 = (float)var11 + 0.5F; + float var16 = (float)var12 + 1.0F; + float var17 = (float)var13 + 0.5F; + float var19; + float var18; + float var20; + if(var2 != null) { + var18 = var15 - var2.x; + var19 = var16 - var2.y; + var20 = var17 - var2.z; + if(var18 * var18 + var19 * var19 + var20 * var20 < 256.0F) { + continue; + } + } else { + var18 = var15 - (float)this.level.xSpawn; + var19 = var16 - (float)this.level.ySpawn; + var20 = var17 - (float)this.level.zSpawn; + if(var18 * var18 + var19 * var19 + var20 * var20 < 256.0F) { + continue; + } + } + + Object var21 = null; + if(var6 == 0) { + var21 = new Zombie(this.level, var15, var16, var17); + } + + if(var6 == 1) { + var21 = new Skeleton(this.level, var15, var16, var17); + } + + if(var6 == 2) { + var21 = new Pig(this.level, var15, var16, var17); + } + + if(var6 == 3) { + var21 = new Creeper(this.level, var15, var16, var17); + } + + if(var6 == 4) { + var21 = new Spider(this.level, var15, var16, var17); + } + + if(var6 == 5) { + var21 = new Sheep(this.level, var15, var16, var17); + } + + if(this.level.isFree(((Mob)var21).bb)) { + ++var4; + this.level.addEntity((Entity)var21); + } + } + } + } + } + } + + return var4; } } diff --git a/src/teavm/java/com/mojang/minecraft/model/ModelPart.java b/src/teavm/java/com/mojang/minecraft/model/ModelPart.java index d6aa99f..07c584b 100644 --- a/src/teavm/java/com/mojang/minecraft/model/ModelPart.java +++ b/src/teavm/java/com/mojang/minecraft/model/ModelPart.java @@ -1,155 +1,149 @@ package com.mojang.minecraft.model; -import com.mojang.minecraft.model.TexturedQuad; -import com.mojang.minecraft.model.Vec3D; -import com.mojang.minecraft.model.Vertex; - -import net.PeytonPlayz585.glemu.ModeBuffer; - import org.lwjgl.opengl.GL11; +import net.lax1dude.eaglercraft.adapter.Tessellator; + public final class ModelPart { + public Vertex[] vertices; + public TexturedQuad[] quads; + private int textureOffsetX; + private int textureOffsetY; + public float x; + public float y; + public float z; + public float pitch; + public float yaw; + public float roll; + public boolean compiled = false; + public int displayList = 0; + public boolean mirror = false; + public boolean render = true; + private boolean isHidden = false; - public Vertex[] vertices; - public TexturedQuad[] quads; - private int u; - private int v; - public float x; - public float y; - public float z; - public float pitch; - public float yaw; - public float roll; - public boolean hasList = false; - public int list = 0; - public boolean mirror = false; - public boolean render = true; - private boolean unused = false; + public ModelPart(int var1, int var2) { + this.textureOffsetX = var1; + this.textureOffsetY = var2; + } + public final void setBounds(float var1, float var2, float var3, int var4, int var5, int var6, float var7) { + this.vertices = new Vertex[8]; + this.quads = new TexturedQuad[6]; + float var8 = var1 + (float)var4; + float var9 = var2 + (float)var5; + float var10 = var3 + (float)var6; + var1 -= var7; + var2 -= var7; + var3 -= var7; + var8 += var7; + var9 += var7; + var10 += var7; + if(this.mirror) { + var7 = var8; + var8 = var1; + var1 = var7; + } - public ModelPart(int var1, int var2) { - this.u = var1; - this.v = var2; - } + Vertex var20 = new Vertex(var1, var2, var3, 0.0F, 0.0F); + Vertex var11 = new Vertex(var8, var2, var3, 0.0F, 8.0F); + Vertex var12 = new Vertex(var8, var9, var3, 8.0F, 8.0F); + Vertex var18 = new Vertex(var1, var9, var3, 8.0F, 0.0F); + Vertex var13 = new Vertex(var1, var2, var10, 0.0F, 0.0F); + Vertex var15 = new Vertex(var8, var2, var10, 0.0F, 8.0F); + Vertex var21 = new Vertex(var8, var9, var10, 8.0F, 8.0F); + Vertex var14 = new Vertex(var1, var9, var10, 8.0F, 0.0F); + this.vertices[0] = var20; + this.vertices[1] = var11; + this.vertices[2] = var12; + this.vertices[3] = var18; + this.vertices[4] = var13; + this.vertices[5] = var15; + this.vertices[6] = var21; + this.vertices[7] = var14; + this.quads[0] = new TexturedQuad(new Vertex[]{var15, var11, var12, var21}, this.textureOffsetX + var6 + var4, this.textureOffsetY + var6, this.textureOffsetX + var6 + var4 + var6, this.textureOffsetY + var6 + var5); + this.quads[1] = new TexturedQuad(new Vertex[]{var20, var13, var14, var18}, this.textureOffsetX, this.textureOffsetY + var6, this.textureOffsetX + var6, this.textureOffsetY + var6 + var5); + this.quads[2] = new TexturedQuad(new Vertex[]{var15, var13, var20, var11}, this.textureOffsetX + var6, this.textureOffsetY, this.textureOffsetX + var6 + var4, this.textureOffsetY + var6); + this.quads[3] = new TexturedQuad(new Vertex[]{var12, var18, var14, var21}, this.textureOffsetX + var6 + var4, this.textureOffsetY, this.textureOffsetX + var6 + var4 + var4, this.textureOffsetY + var6); + this.quads[4] = new TexturedQuad(new Vertex[]{var11, var20, var18, var12}, this.textureOffsetX + var6, this.textureOffsetY + var6, this.textureOffsetX + var6 + var4, this.textureOffsetY + var6 + var5); + this.quads[5] = new TexturedQuad(new Vertex[]{var13, var15, var21, var14}, this.textureOffsetX + var6 + var4 + var6, this.textureOffsetY + var6, this.textureOffsetX + var6 + var4 + var6 + var4, this.textureOffsetY + var6 + var5); + if(this.mirror) { + for(int var16 = 0; var16 < this.quads.length; ++var16) { + TexturedQuad var17 = this.quads[var16]; + Vertex[] var19 = new Vertex[var17.vertices.length]; - public final void setBounds(float var1, float var2, float var3, int var4, int var5, int var6, float var7) { - this.vertices = new Vertex[8]; - this.quads = new TexturedQuad[6]; - float var8 = var1 + (float)var4; - float var9 = var2 + (float)var5; - float var10 = var3 + (float)var6; - var1 -= var7; - var2 -= var7; - var3 -= var7; - var8 += var7; - var9 += var7; - var10 += var7; - if(this.mirror) { - var7 = var8; - var8 = var1; - var1 = var7; - } + for(var4 = 0; var4 < var17.vertices.length; ++var4) { + var19[var4] = var17.vertices[var17.vertices.length - var4 - 1]; + } - Vertex var20 = new Vertex(var1, var2, var3, 0.0F, 0.0F); - Vertex var11 = new Vertex(var8, var2, var3, 0.0F, 8.0F); - Vertex var12 = new Vertex(var8, var9, var3, 8.0F, 8.0F); - Vertex var18 = new Vertex(var1, var9, var3, 8.0F, 0.0F); - Vertex var13 = new Vertex(var1, var2, var10, 0.0F, 0.0F); - Vertex var15 = new Vertex(var8, var2, var10, 0.0F, 8.0F); - Vertex var21 = new Vertex(var8, var9, var10, 8.0F, 8.0F); - Vertex var14 = new Vertex(var1, var9, var10, 8.0F, 0.0F); - this.vertices[0] = var20; - this.vertices[1] = var11; - this.vertices[2] = var12; - this.vertices[3] = var18; - this.vertices[4] = var13; - this.vertices[5] = var15; - this.vertices[6] = var21; - this.vertices[7] = var14; - this.quads[0] = new TexturedQuad(new Vertex[]{var15, var11, var12, var21}, this.u + var6 + var4, this.v + var6, this.u + var6 + var4 + var6, this.v + var6 + var5); - this.quads[1] = new TexturedQuad(new Vertex[]{var20, var13, var14, var18}, this.u, this.v + var6, this.u + var6, this.v + var6 + var5); - this.quads[2] = new TexturedQuad(new Vertex[]{var15, var13, var20, var11}, this.u + var6, this.v, this.u + var6 + var4, this.v + var6); - this.quads[3] = new TexturedQuad(new Vertex[]{var12, var18, var14, var21}, this.u + var6 + var4, this.v, this.u + var6 + var4 + var4, this.v + var6); - this.quads[4] = new TexturedQuad(new Vertex[]{var11, var20, var18, var12}, this.u + var6, this.v + var6, this.u + var6 + var4, this.v + var6 + var5); - this.quads[5] = new TexturedQuad(new Vertex[]{var13, var15, var21, var14}, this.u + var6 + var4 + var6, this.v + var6, this.u + var6 + var4 + var6 + var4, this.v + var6 + var5); - if(this.mirror) { - for(int var16 = 0; var16 < this.quads.length; ++var16) { - TexturedQuad var17; - Vertex[] var19 = new Vertex[(var17 = this.quads[var16]).vertices.length]; + var17.vertices = var19; + } + } - for(var4 = 0; var4 < var17.vertices.length; ++var4) { - var19[var4] = var17.vertices[var17.vertices.length - var4 - 1]; - } + } - var17.vertices = var19; - } - } + public final void setPosition(float var1, float var2, float var3) { + this.x = var1; + this.y = var2; + this.z = var3; + } - } + public final void render(float var1) { + if(this.render) { + if(!this.compiled) { + float var3 = var1; + ModelPart var2 = this; + this.displayList = GL11.glGenLists(1); + GL11.glNewList(this.displayList, GL11.GL_COMPILE); + Tessellator var4 = Tessellator.instance; - public final void setPosition(float var1, float var2, float var3) { - this.x = var1; - this.y = var2; - this.z = var3; - } + for(int var5 = 0; var5 < var2.quads.length; ++var5) { + var4.startDrawingQuads(); + TexturedQuad var10000 = var2.quads[var5]; + float var8 = var3; + TexturedQuad var6 = var10000; + Vec3D var9 = var6.vertices[1].vector.subtract(var6.vertices[0].vector).normalize(); + Vec3D var10 = var6.vertices[1].vector.subtract(var6.vertices[2].vector).normalize(); + var9 = (new Vec3D(var9.y * var10.z - var9.z * var10.y, var9.z * var10.x - var9.x * var10.z, var9.x * var10.y - var9.y * var10.x)).normalize(); + var4.setNormal(-var9.x, -var9.y, -var9.z); - public final void render(float var1) { - if(this.render) { - if(!this.hasList) { - this.generateList(var1); - } + for(int var11 = 0; var11 < 4; ++var11) { + Vertex var12 = var6.vertices[var11]; + var4.addVertexWithUV(var12.vector.x * var8, var12.vector.y * var8, var12.vector.z * var8, var12.u, var12.v); + } - if(this.pitch == 0.0F && this.yaw == 0.0F && this.roll == 0.0F) { - if(this.x == 0.0F && this.y == 0.0F && this.z == 0.0F) { - GL11.glCallList(this.list); - } else { - GL11.glTranslatef(this.x * var1, this.y * var1, this.z * var1); - GL11.glCallList(this.list); - GL11.glTranslatef(-this.x * var1, -this.y * var1, -this.z * var1); - } - } else { - GL11.glPushMatrix(); - GL11.glTranslatef(this.x * var1, this.y * var1, this.z * var1); - if(this.roll != 0.0F) { - GL11.glRotatef(this.roll * 57.295776F, 0.0F, 0.0F, 1.0F); - } + var4.draw(); + } - if(this.yaw != 0.0F) { - GL11.glRotatef(this.yaw * 57.295776F, 0.0F, 1.0F, 0.0F); - } + GL11.glEndList(); + var2.compiled = true; + } - if(this.pitch != 0.0F) { - GL11.glRotatef(this.pitch * 57.295776F, 1.0F, 0.0F, 0.0F); - } + if(this.pitch == 0.0F && this.yaw == 0.0F && this.roll == 0.0F) { + if(this.x == 0.0F && this.y == 0.0F && this.z == 0.0F) { + GL11.glCallList(this.displayList); + } else { + GL11.glTranslatef(this.x * var1, this.y * var1, this.z * var1); + GL11.glCallList(this.displayList); + GL11.glTranslatef(-this.x * var1, -this.y * var1, -this.z * var1); + } + } else { + GL11.glPushMatrix(); + GL11.glTranslatef(this.x * var1, this.y * var1, this.z * var1); + if(this.roll != 0.0F) { + GL11.glRotatef(this.roll * (180.0F / (float)Math.PI), 0.0F, 0.0F, 1.0F); + } - GL11.glCallList(this.list); - GL11.glPopMatrix(); - } - } - } + if(this.yaw != 0.0F) { + GL11.glRotatef(this.yaw * (180.0F / (float)Math.PI), 0.0F, 1.0F, 0.0F); + } - public void generateList(float var1) { - this.list = GL11.glGenLists(1); - GL11.glNewList(this.list, 4864); - //GL11.glBegin(7); + if(this.pitch != 0.0F) { + GL11.glRotatef(this.pitch * (180.0F / (float)Math.PI), 1.0F, 0.0F, 0.0F); + } - for(int var2 = 0; var2 < this.quads.length; ++var2) { - TexturedQuad var10000 = this.quads[var2]; - float var3 = var1; - TexturedQuad var4 = var10000; - Vec3D var5 = var10000.vertices[1].vector.subtract(var4.vertices[0].vector).normalize(); - Vec3D var6 = var4.vertices[1].vector.subtract(var4.vertices[2].vector).normalize(); - GL11.glNormal3f((var5 = (new Vec3D(var5.y * var6.z - var5.z * var6.y, var5.z * var6.x - var5.x * var6.z, var5.x * var6.y - var5.y * var6.x)).normalize()).x, var5.y, var5.z); - -// for(int var7 = 0; var7 < 4; ++var7) { -// Vertex var8; -// GL11.glTexCoord2f((var8 = var4.vertices[var7]).u, var8.v); -// GL11.glVertex3f(var8.vector.x * var3, var8.vector.y * var3, var8.vector.z * var3); -// } - } - - //GL11.glEnd(); - GL11.glEndList(); - this.hasList = true; - } + GL11.glCallList(this.displayList); + GL11.glPopMatrix(); + } + } + } } diff --git a/src/teavm/java/net/PeytonPlayz585/storage/LocalStorageManager.java b/src/teavm/java/net/PeytonPlayz585/storage/LocalStorageManager.java index a332d04..14adb88 100644 --- a/src/teavm/java/net/PeytonPlayz585/storage/LocalStorageManager.java +++ b/src/teavm/java/net/PeytonPlayz585/storage/LocalStorageManager.java @@ -15,7 +15,7 @@ import net.lax1dude.eaglercraft.Base64; public class LocalStorageManager { public static NBTTagCompound gameSettingsStorage = null; - public static NBTTagCompound profileSettingsStorage = null; + public static NBTTagCompound levelSettingsStorage = null; public static void loadStorage() { byte[] g = GL11.loadLocalStorage("g"); @@ -36,7 +36,7 @@ public class LocalStorageManager { try { NBTBase t = NBTBase.readTag(new DataInputStream(new ByteArrayInputStream(p))); if(t != null && t instanceof NBTTagCompound) { - profileSettingsStorage = (NBTTagCompound)t; + levelSettingsStorage = (NBTTagCompound)t; } }catch(IOException e) { ; @@ -44,7 +44,7 @@ public class LocalStorageManager { } if(gameSettingsStorage == null) gameSettingsStorage = new NBTTagCompound(); - if(profileSettingsStorage == null) profileSettingsStorage = new NBTTagCompound(); + if(levelSettingsStorage == null) levelSettingsStorage = new NBTTagCompound(); } @@ -61,7 +61,7 @@ public class LocalStorageManager { public static void saveStorageP() { try { ByteArrayOutputStream s = new ByteArrayOutputStream(); - NBTBase.writeTag(profileSettingsStorage, new DataOutputStream(s)); + NBTBase.writeTag(levelSettingsStorage, new DataOutputStream(s)); GL11.saveLocalStorage("p", s.toByteArray()); } catch (IOException e) { ; diff --git a/src/teavm/java/net/PeytonPlayz595/nbt/NBTTagCompound.java b/src/teavm/java/net/PeytonPlayz595/nbt/NBTTagCompound.java index 63d17dc..a95347d 100644 --- a/src/teavm/java/net/PeytonPlayz595/nbt/NBTTagCompound.java +++ b/src/teavm/java/net/PeytonPlayz595/nbt/NBTTagCompound.java @@ -65,6 +65,10 @@ public class NBTTagCompound extends NBTBase { public void setByteArray(String s, byte abyte0[]) { tagMap.put(s, (new NBTTagByteArray(abyte0)).setKey(s)); } + + public void setObject(String s, Object obj) { + tagMap.put(s, obj); + } public void setCompoundTag(String s, NBTTagCompound nbttagcompound) { tagMap.put(s, nbttagcompound.setKey(s)); @@ -161,6 +165,14 @@ public class NBTTagCompound extends NBTBase { public boolean getBoolean(String s) { return getByte(s) != 0; } + + public Object getObject(String s) { + if(!tagMap.containsKey(s)) { + return null; + } else { + return tagMap.get(s); + } + } public String toString() { return (new StringBuilder()).append("").append(tagMap.size()).append(" entries").toString(); diff --git a/src/teavm/java/net/lax1dude/eaglercraft/TestFilesystem.java b/src/teavm/java/net/lax1dude/eaglercraft/TestFilesystem.java deleted file mode 100644 index d87bb41..0000000 --- a/src/teavm/java/net/lax1dude/eaglercraft/TestFilesystem.java +++ /dev/null @@ -1,121 +0,0 @@ -package net.lax1dude.eaglercraft; - -import java.util.Collection; - -import net.lax1dude.eaglercraft.adapter.EaglerAdapterImpl2.FileEntry; -import net.lax1dude.eaglercraft.adapter.teavm.IndexedDBFilesystem; -import net.lax1dude.eaglercraft.adapter.teavm.IndexedDBFilesystem.OpenState; - -public class TestFilesystem { - - public static void main(String[] args) { - OpenState os = IndexedDBFilesystem.initialize(); - - if(os != OpenState.OPENED) { - System.out.println("Error: " + os); - System.out.println("Detail: " + IndexedDBFilesystem.errorDetail()); - return; - } - - IndexedDBFilesystem.writeFile("text.txt", "fuck fuck shit".getBytes()); - IndexedDBFilesystem.writeFile("folder/text.txt", "fuck shit fuck".getBytes()); - IndexedDBFilesystem.writeFile("folder/eee/text.txt", "shit shit fuck".getBytes()); - - System.out.println("exists text.txt:" + IndexedDBFilesystem.fileExists("text.txt")); - System.out.println("exists folder/text.txt:" + IndexedDBFilesystem.fileExists("folder/text.txt")); - System.out.println("exists folder/eee/text.txt:" + IndexedDBFilesystem.fileExists("folder/eee/text.txt")); - - System.out.println("type file text.txt:" + IndexedDBFilesystem.fileExists("text.txt")); - System.out.println("type file folder:" + IndexedDBFilesystem.fileExists("folder")); - System.out.println("type file folder/text.txt:" + IndexedDBFilesystem.fileExists("folder/text.txt")); - System.out.println("type file folder/eee:" + IndexedDBFilesystem.fileExists("folder/eee")); - System.out.println("type file folder/eee/text.txt:" + IndexedDBFilesystem.fileExists("folder/eee/text.txt")); - - System.out.println("type folder text.txt:" + IndexedDBFilesystem.directoryExists("text.txt")); - System.out.println("type folder folder:" + IndexedDBFilesystem.directoryExists("folder")); - System.out.println("type folder folder/text.txt:" + IndexedDBFilesystem.directoryExists("folder/text.txt")); - System.out.println("type folder folder/eee:" + IndexedDBFilesystem.directoryExists("folder/eee")); - System.out.println("type folder folder/eee/text.txt:" + IndexedDBFilesystem.directoryExists("folder/eee/text.txt")); - - System.out.println("data file text.txt:" + new String(IndexedDBFilesystem.readFile("text.txt"))); - System.out.println("data file folder/text.txt:" + new String(IndexedDBFilesystem.readFile("folder/text.txt"))); - System.out.println("data file folder/eee/text.txt:" + new String(IndexedDBFilesystem.readFile("folder/eee/text.txt"))); - - System.out.println("copy file text.txt to text2.txt"); IndexedDBFilesystem.copyFile("text.txt", "text2.txt"); - System.out.println("copy file text.txt to folder2/text2.txt"); IndexedDBFilesystem.copyFile("text.txt", "folder2/text2.txt"); - System.out.println("copy file folder/text.txt to folder3/eee2/text2.txt:"); IndexedDBFilesystem.copyFile("folder/text.txt", "folder3/eee2/text2.txt"); - System.out.println("copy file folder3/eee2/text2.txt to text2.txt:"); IndexedDBFilesystem.copyFile("folder3/eee2/text2.txt", "text2.txt"); - - System.out.println("type folder folder2:" + IndexedDBFilesystem.directoryExists("folder2")); - System.out.println("type folder folder3:" + IndexedDBFilesystem.directoryExists("folder3")); - System.out.println("type folder folder3/eee2:" + IndexedDBFilesystem.directoryExists("folder3/eee2")); - - System.out.println("data file text.txt:" + new String(IndexedDBFilesystem.readFile("text.txt"))); - System.out.println("data file folder/text.txt:" + new String(IndexedDBFilesystem.readFile("folder/text.txt"))); - System.out.println("data file folder/eee/text.txt:" + new String(IndexedDBFilesystem.readFile("folder/eee/text.txt"))); - System.out.println("data file text2.txt:" + new String(IndexedDBFilesystem.readFile("text2.txt"))); - System.out.println("data file folder2/text2.txt:" + new String(IndexedDBFilesystem.readFile("folder2/text2.txt"))); - System.out.println("data file folder3/eee2/text2.txt:" + new String(IndexedDBFilesystem.readFile("folder3/eee2/text2.txt"))); - - System.out.println("data file folder2/tefjfgj.txt:" + IndexedDBFilesystem.readFile("folder2/tefjfgj.txt")); - System.out.println("data file folder3/gjjg/text2.txt:" + IndexedDBFilesystem.readFile("folder3/eegjjge2/text2.txt")); - - System.out.println("move file text.txt to text3.txt"); IndexedDBFilesystem.renameFile("text.txt", "text3.txt"); - System.out.println("move file text.txt to folder4/text2.txt"); IndexedDBFilesystem.renameFile("text.txt", "folder4/text2.txt"); - System.out.println("move file text3.txt to folder4/text2.txt"); IndexedDBFilesystem.renameFile("text.txt", "folder4/text3.txt"); - System.out.println("move file folder22/text.txt to folder3/eee2/text3.txt:"); IndexedDBFilesystem.renameFile("folder22/text.txt", "folder3/eee2/text3.txt"); - - System.out.println("last modified text.txt:" + IndexedDBFilesystem.getLastModified("text.txt")); - System.out.println("last modified folder/text.txt:" + IndexedDBFilesystem.getLastModified("folder/text.txt")); - System.out.println("last modified folder/eee/text.txt:" + IndexedDBFilesystem.getLastModified("folder/eee/text.txt")); - System.out.println("last modified text2.txt:" + IndexedDBFilesystem.getLastModified("text2.txt")); - System.out.println("last modified folder2/text2.txt:" + IndexedDBFilesystem.getLastModified("folder2/text2.txt")); - System.out.println("last modified folder3/eee2/text2.txt:" + IndexedDBFilesystem.getLastModified("folder3/eee2/text2.txt")); - - System.out.println("last modified folder2/tefjfgj.txt:" + IndexedDBFilesystem.getLastModified("folder2/tefjfgj.txt")); - System.out.println("last modified folder3/gjjg/text2.txt:" + IndexedDBFilesystem.getLastModified("folder3/eegjjge2/text2.txt")); - - System.out.println("last modified text3.txt: " + IndexedDBFilesystem.getLastModified("text3.txt")); - System.out.println("last modified folder4/text2.txt: " + IndexedDBFilesystem.getLastModified("folder4/text2.txt")); - System.out.println("last modified folder4/text3.txt: " + IndexedDBFilesystem.getLastModified("folder4/text3.txt")); - System.out.println("last modified folder3/eee2/text3.txt:" + IndexedDBFilesystem.getLastModified("folder3/eee2/text3.txt")); - - System.out.println("delete file text3.txt"); IndexedDBFilesystem.deleteFile("text3.txt"); - System.out.println("delete file folder4/text2.txt"); IndexedDBFilesystem.deleteFile("folder4/text2.txt"); - System.out.println("delete file folder4/text2.txt"); IndexedDBFilesystem.deleteFile("folder4/text3.txt"); - System.out.println("delete file folder4"); IndexedDBFilesystem.deleteFile("folder4"); - System.out.println("delete file folder3/eee2/text3.txt:"); IndexedDBFilesystem.deleteFile("folder3/eee2/text3.txt"); - - Collection files = IndexedDBFilesystem.listFiles("", true, true); - System.out.println(); - System.out.println("List all:"); - listFileList(files); - - files = IndexedDBFilesystem.listFiles("", false, true); - System.out.println(); - System.out.println("List all files:"); - listFileList(files); - - files = IndexedDBFilesystem.listFiles("", false, false); - System.out.println(); - System.out.println("List all files not recursive:"); - listFileList(files); - - files = IndexedDBFilesystem.listFiles("folder", true, true); - System.out.println(); - System.out.println("List all files in 'folder':"); - listFileList(files); - - files = IndexedDBFilesystem.listFiles("folder", true, false); - System.out.println(); - System.out.println("List all files in 'folder' no recursive:"); - listFileList(files); - } - - private static void listFileList(Collection files) { - for(FileEntry f : files) { - System.out.println(" - " + f.path + " " + f.isDirectory + " " + f.lastModified + " " + f.getName()); - } - } - -}