├── .gitignore ├── README.md ├── pom.xml └── src ├── main ├── java │ ├── META-INF │ │ └── MANIFEST.MF │ ├── com │ │ ├── mojang │ │ │ ├── minecraft │ │ │ │ ├── ChatLine.java │ │ │ │ ├── Entity.java │ │ │ │ ├── GameSettings.java │ │ │ │ ├── KeyBinding.java │ │ │ │ ├── Minecraft$OS.java │ │ │ │ ├── Minecraft.java │ │ │ │ ├── MinecraftApplet$1.java │ │ │ │ ├── MinecraftApplet.java │ │ │ │ ├── MovingObjectPosition.java │ │ │ │ ├── OperatingSystemLookup.java │ │ │ │ ├── ProgressBarDisplay.java │ │ │ │ ├── ResourceDownloadThread.java │ │ │ │ ├── SessionData.java │ │ │ │ ├── SkinDownloadThread.java │ │ │ │ ├── SleepForeverThread.java │ │ │ │ ├── StopGameException.java │ │ │ │ ├── Timer.java │ │ │ │ ├── gamemode │ │ │ │ │ ├── CreativeGameMode.java │ │ │ │ │ ├── GameMode.java │ │ │ │ │ └── SurvivalGameMode.java │ │ │ │ ├── gui │ │ │ │ │ ├── BlockSelectScreen.java │ │ │ │ │ ├── Button.java │ │ │ │ │ ├── ChatInputScreen.java │ │ │ │ │ ├── ControlsScreen.java │ │ │ │ │ ├── ErrorScreen.java │ │ │ │ │ ├── FontRenderer.java │ │ │ │ │ ├── GameOverScreen.java │ │ │ │ │ ├── GenerateLevelScreen.java │ │ │ │ │ ├── GuiScreen.java │ │ │ │ │ ├── HUDScreen.java │ │ │ │ │ ├── LevelDialog.java │ │ │ │ │ ├── LevelNameScreen.java │ │ │ │ │ ├── LoadLevelScreen.java │ │ │ │ │ ├── OptionButton.java │ │ │ │ │ ├── OptionsScreen.java │ │ │ │ │ ├── PauseScreen.java │ │ │ │ │ ├── SaveLevelScreen.java │ │ │ │ │ └── Screen.java │ │ │ │ ├── item │ │ │ │ │ ├── Arrow.java │ │ │ │ │ ├── Item.java │ │ │ │ │ ├── ItemModel.java │ │ │ │ │ ├── PrimedTnt.java │ │ │ │ │ └── TakeEntityAnim.java │ │ │ │ ├── level │ │ │ │ │ ├── BlockMap$Slot.java │ │ │ │ │ ├── BlockMap.java │ │ │ │ │ ├── Level.java │ │ │ │ │ ├── LevelIO.java │ │ │ │ │ ├── LevelObjectInputStream.java │ │ │ │ │ ├── MobSpawner.java │ │ │ │ │ ├── NextTickListEntry.java │ │ │ │ │ ├── SyntheticClass.java │ │ │ │ │ ├── generator │ │ │ │ │ │ ├── LevelGenerator.java │ │ │ │ │ │ └── noise │ │ │ │ │ │ │ ├── CombinedNoise.java │ │ │ │ │ │ │ ├── Noise.java │ │ │ │ │ │ │ ├── OctaveNoise.java │ │ │ │ │ │ │ └── PerlinNoise.java │ │ │ │ │ ├── liquid │ │ │ │ │ │ └── LiquidType.java │ │ │ │ │ └── tile │ │ │ │ │ │ ├── Block.java │ │ │ │ │ │ ├── BookshelfBlock.java │ │ │ │ │ │ ├── DirtBlock.java │ │ │ │ │ │ ├── FlowerBlock.java │ │ │ │ │ │ ├── GlassBlock.java │ │ │ │ │ │ ├── GrassBlock.java │ │ │ │ │ │ ├── LeavesBaseBlock.java │ │ │ │ │ │ ├── LeavesBlock.java │ │ │ │ │ │ ├── LiquidBlock.java │ │ │ │ │ │ ├── MetalBlock.java │ │ │ │ │ │ ├── MushroomBlock.java │ │ │ │ │ │ ├── OreBlock.java │ │ │ │ │ │ ├── SandBlock.java │ │ │ │ │ │ ├── SaplingBlock.java │ │ │ │ │ │ ├── SlabBlock.java │ │ │ │ │ │ ├── SpongeBlock.java │ │ │ │ │ │ ├── StillLiquidBlock.java │ │ │ │ │ │ ├── StoneBlock.java │ │ │ │ │ │ ├── TNTBlock.java │ │ │ │ │ │ ├── Tile$SoundType.java │ │ │ │ │ │ └── WoodBlock.java │ │ │ │ ├── mob │ │ │ │ │ ├── Creeper$1.java │ │ │ │ │ ├── Creeper.java │ │ │ │ │ ├── HumanoidMob.java │ │ │ │ │ ├── Mob.java │ │ │ │ │ ├── Pig.java │ │ │ │ │ ├── QuadrupedMob.java │ │ │ │ │ ├── Sheep$1.java │ │ │ │ │ ├── Sheep.java │ │ │ │ │ ├── Skeleton$1.java │ │ │ │ │ ├── Skeleton.java │ │ │ │ │ ├── Spider.java │ │ │ │ │ ├── Zombie.java │ │ │ │ │ └── ai │ │ │ │ │ │ ├── AI.java │ │ │ │ │ │ ├── BasicAI.java │ │ │ │ │ │ ├── BasicAttackAI.java │ │ │ │ │ │ └── JumpAttackAI.java │ │ │ │ ├── model │ │ │ │ │ ├── AnimalModel.java │ │ │ │ │ ├── CreeperModel.java │ │ │ │ │ ├── HumanoidModel.java │ │ │ │ │ ├── Model.java │ │ │ │ │ ├── ModelManager.java │ │ │ │ │ ├── ModelPart.java │ │ │ │ │ ├── PigModel.java │ │ │ │ │ ├── SheepFurModel.java │ │ │ │ │ ├── SheepModel.java │ │ │ │ │ ├── SkeletonModel.java │ │ │ │ │ ├── SpiderModel.java │ │ │ │ │ ├── TexturedQuad.java │ │ │ │ │ ├── Vec3D.java │ │ │ │ │ ├── Vertex.java │ │ │ │ │ └── ZombieModel.java │ │ │ │ ├── net │ │ │ │ │ ├── NetworkManager.java │ │ │ │ │ ├── NetworkPlayer.java │ │ │ │ │ ├── PacketType.java │ │ │ │ │ ├── PositionUpdate.java │ │ │ │ │ ├── ServerConnectThread.java │ │ │ │ │ └── SkinDownloadThread.java │ │ │ │ ├── particle │ │ │ │ │ ├── Particle.java │ │ │ │ │ ├── ParticleManager.java │ │ │ │ │ ├── SmokeParticle.java │ │ │ │ │ ├── TerrainParticle.java │ │ │ │ │ └── WaterDropParticle.java │ │ │ │ ├── phys │ │ │ │ │ └── AABB.java │ │ │ │ ├── player │ │ │ │ │ ├── InputHandler.java │ │ │ │ │ ├── InputHandlerImpl.java │ │ │ │ │ ├── Inventory.java │ │ │ │ │ ├── Player$1.java │ │ │ │ │ └── Player.java │ │ │ │ ├── render │ │ │ │ │ ├── Chunk.java │ │ │ │ │ ├── ChunkDirtyDistanceComparator.java │ │ │ │ │ ├── ChunkDistanceComparator.java │ │ │ │ │ ├── Frustrum.java │ │ │ │ │ ├── FrustrumImpl.java │ │ │ │ │ ├── HeldBlock.java │ │ │ │ │ ├── LevelRenderer.java │ │ │ │ │ ├── Renderer.java │ │ │ │ │ ├── ShapeRenderer.java │ │ │ │ │ ├── TextureManager.java │ │ │ │ │ └── texture │ │ │ │ │ │ ├── TextureFX.java │ │ │ │ │ │ ├── TextureLavaFX.java │ │ │ │ │ │ └── TextureWaterFX.java │ │ │ │ └── sound │ │ │ │ │ ├── Audio.java │ │ │ │ │ ├── AudioInfo.java │ │ │ │ │ ├── BaseSoundPos.java │ │ │ │ │ ├── EntitySoundPos.java │ │ │ │ │ ├── LevelSoundPos.java │ │ │ │ │ ├── Music.java │ │ │ │ │ ├── MusicPlayThread.java │ │ │ │ │ ├── Sound.java │ │ │ │ │ ├── SoundData.java │ │ │ │ │ ├── SoundInfo.java │ │ │ │ │ ├── SoundManager.java │ │ │ │ │ ├── SoundPlayer.java │ │ │ │ │ ├── SoundPos.java │ │ │ │ │ └── SoundReader.java │ │ │ ├── net │ │ │ │ └── NetworkHandler.java │ │ │ └── util │ │ │ │ └── MathHelper.java │ │ └── oyasunadev │ │ │ └── mcraft │ │ │ └── client │ │ │ ├── core │ │ │ ├── MinecraftStandalone.java │ │ │ └── MinecraftStandalone2.java │ │ │ └── util │ │ │ └── Constants.java │ └── de │ │ └── jarnbjo │ │ ├── ogg │ │ ├── BasicStream.java │ │ ├── CachedUrlStream.java │ │ ├── EndOfOggStreamException.java │ │ ├── FileStream.java │ │ ├── LogicalOggStream.java │ │ ├── LogicalOggStreamImpl.java │ │ ├── OggFormatException.java │ │ ├── OggPage.java │ │ ├── OnDemandUrlStream.java │ │ ├── PhysicalOggStream.java │ │ └── UncachedUrlStream.java │ │ ├── util │ │ ├── audio │ │ │ └── FadeableAudioInputStream.java │ │ └── io │ │ │ ├── BitInputStream.java │ │ │ ├── ByteArrayBitInputStream.java │ │ │ └── HuffmanNode.java │ │ └── vorbis │ │ ├── AudioPacket.java │ │ ├── CodeBook.java │ │ ├── CommentHeader.java │ │ ├── Floor.java │ │ ├── Floor0.java │ │ ├── Floor1.java │ │ ├── IdentificationHeader.java │ │ ├── Mapping.java │ │ ├── Mapping0.java │ │ ├── MdctFloat.java │ │ ├── Mode.java │ │ ├── Residue.java │ │ ├── Residue0.java │ │ ├── Residue1.java │ │ ├── Residue2.java │ │ ├── SetupHeader.java │ │ ├── Util.java │ │ ├── VorbisAudioFileReader.java │ │ ├── VorbisFormatException.java │ │ └── VorbisStream.java └── resources │ ├── 2char.png │ ├── armor │ ├── chain.png │ └── plate.png │ ├── char.png │ ├── clouds.png │ ├── default.gif │ ├── default.png │ ├── dirt.png │ ├── grass.png │ ├── gui │ ├── gui.png │ └── icons.png │ ├── item │ ├── arrows.png │ └── sign.png │ ├── mob │ ├── creeper.png │ ├── pig.png │ ├── sheep.png │ ├── sheep_fur.png │ ├── skeleton.png │ ├── spider.png │ └── zombie.png │ ├── null │ ├── particles.png │ ├── rain.png │ ├── rock.png │ ├── terrain.png │ └── water.png └── test └── java └── TestClient.java /.gitignore: -------------------------------------------------------------------------------- 1 | .idea/* -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | > UPDATE 25.03.14 2 | > 3 | > Hi all, Oliver here, creator of this project! 4 | > I never imagined that the work of 15 year-old me would bring this much attention. 5 | > I am definitely no longer maintaining it. 6 | > Please feel free to use it however you'd like, as long as you credit me. 7 | 8 | ![Logo](http://i47.tinypic.com/t98hox.png) 9 | ## MCraft-Client 10 | A stable Minecraft Classic client designed to make your Minecraft Classic experience more enjoyable without playing in your browser. 11 | 12 | ## Information 13 | The name and software, MCraft Client, is owned by Mania Development, therefore the rightsholder of Mania Developer has full ownership over this software. 14 | 15 | ## Compilation 16 | We use maven to handle our dependencies. 17 | 18 | - Install [Maven 3](http://maven.apache.org/download.html) 19 | - Check out this repo and: `mvn clean install` 20 | 21 | ## For developers 22 | - Found a bug? [Report it](https://github.com/ManiaDevelopment/MCraft-Client/issues). 23 | - [Make a pull request](https://github.com/ManiaDevelopment/MCraft-Client/pulls). 24 | 25 | ## Discussion 26 | Join the official IRC channels for talk about MCraft. 27 | - [#mcraft on irc.esper.net](http://webchat.esper.net/?nick=&channels=mcraft). 28 | - [#minecraftclassicdev on irc.esper.net](http://webchat.esper.net/?nick=&channels=minecraftclassicdev). 29 | 30 | ## License 31 | The original Minecraft Classic source code is Copyright (c) 2009-2012 Mojang AB. 32 |
33 | Creative Commons License
LegacyBuilder by Oliver Yasuna is licensed under a Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Unported License.
Based on a work at https://github.com/ManiaDevelopment/MCraft-Client. 34 | -------------------------------------------------------------------------------- /pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | LegacyBuilder 8 | LegacyBuilder 9 | 1.0-SNAPSHOT 10 | jar 11 | 12 | 13 | oyasunadev 14 | Oliver Yasuna 15 | 16 | 17 | 18 | 19 | Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Unported 20 | http://creativecommons.org/licenses/by-nc-nd/3.0/legalcode 21 | repo 22 | 23 | 24 | 25 | 26 | UTF-8 27 | 28 | 29 | 30 | 31 | org.lwjgl.lwjgl 32 | lwjgl 33 | 2.8.4 34 | 35 | 36 | org.lwjgl.lwjgl 37 | lwjgl_util 38 | 2.8.4 39 | 40 | 41 | net.java.jinput 42 | jinput 43 | 2.0.4 44 | 45 | 46 | org.lwjgl.lwjgl 47 | lwjgl_util_applet 48 | 2.8.4 49 | 50 | 51 | org.lwjgl.lwjgl 52 | lwjgl-platform 53 | 2.8.4 54 | pom 55 | 56 | 57 | -------------------------------------------------------------------------------- /src/main/java/META-INF/MANIFEST.MF: -------------------------------------------------------------------------------- 1 | Manifest-Version: 1.0 2 | Main-Class: com.oyasunadev.mcraft.client.core.MinecraftStandalone 3 | 4 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/ChatLine.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft; 2 | 3 | public class ChatLine 4 | { 5 | public ChatLine(String message) 6 | { 7 | this.message = message; 8 | this.time = 0; 9 | } 10 | 11 | public String message; 12 | public int time; 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/KeyBinding.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft; 2 | 3 | public class KeyBinding 4 | { 5 | public KeyBinding(String name, int key) 6 | { 7 | this.name = name; 8 | this.key = key; 9 | } 10 | 11 | public String name; 12 | public int key; 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/Minecraft$OS.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft; 2 | 3 | public enum Minecraft$OS 4 | { 5 | linux("linux", 0), 6 | solaris("solaris", 1), 7 | windows("windows", 2), 8 | macos("macos", 3), 9 | unknown("unknown", 4); 10 | 11 | private static final Minecraft$OS[] values = new Minecraft$OS[] {linux, solaris, windows, macos, unknown}; 12 | 13 | private Minecraft$OS(String name, int id) 14 | { 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/MinecraftApplet$1.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft; 2 | 3 | import java.awt.Canvas; 4 | 5 | // MinecraftCanvas 6 | public class MinecraftApplet$1 extends Canvas 7 | { 8 | public MinecraftApplet$1(MinecraftApplet minecraftApplet) 9 | { 10 | this.applet = minecraftApplet; 11 | } 12 | 13 | @Override 14 | public synchronized void addNotify() 15 | { 16 | super.addNotify(); 17 | 18 | applet.startGameThread(); 19 | } 20 | 21 | @Override 22 | public synchronized void removeNotify() 23 | { 24 | applet.stopGameThread(); 25 | 26 | super.removeNotify(); 27 | } 28 | 29 | private static final long serialVersionUID = 1L; 30 | 31 | private MinecraftApplet applet; 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/MinecraftApplet.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft; 2 | 3 | import java.applet.Applet; 4 | import java.awt.BorderLayout; 5 | import java.awt.Canvas; 6 | 7 | public class MinecraftApplet extends Applet 8 | { 9 | private static final long serialVersionUID = 1L; 10 | 11 | private Canvas canvas; 12 | private Minecraft minecraft; 13 | 14 | private Thread thread = null; 15 | 16 | public void init() 17 | { 18 | canvas = new MinecraftApplet$1(this); 19 | 20 | boolean fullscreen = false; 21 | 22 | if(getParameter("fullscreen") != null) 23 | { 24 | fullscreen = getParameter("fullscreen").equalsIgnoreCase("true"); 25 | } 26 | 27 | minecraft = new Minecraft(canvas, this, getWidth(), getHeight(), fullscreen); 28 | 29 | minecraft.host = getDocumentBase().getHost(); 30 | 31 | if(getDocumentBase().getPort() > 0) 32 | { 33 | minecraft.host = minecraft.host + ":" + getDocumentBase().getPort(); 34 | } 35 | 36 | if(getParameter("username") != null && getParameter("sessionid") != null) 37 | { 38 | minecraft.session = new SessionData(getParameter("username"), getParameter("sessionid")); 39 | 40 | if(getParameter("mppass") != null) 41 | { 42 | minecraft.session.mppass = getParameter("mppass"); 43 | } 44 | 45 | // TODO: Not tested. 46 | minecraft.session.haspaid = getParameter("haspaid").equalsIgnoreCase("true"); 47 | } 48 | 49 | if(getParameter("loadmap_user") != null && getParameter("loadmap_id") != null) 50 | { 51 | minecraft.levelName = getParameter("loadmap_user"); 52 | minecraft.levelId = Integer.parseInt(getParameter("loadmap_id")); 53 | } else if(getParameter("server") != null && getParameter("port") != null) { 54 | String server = getParameter("server"); 55 | int port = Integer.parseInt(getParameter("port")); 56 | 57 | minecraft.server = server; 58 | minecraft.port = port; 59 | } 60 | 61 | minecraft.levelLoaded = true; 62 | 63 | setLayout(new BorderLayout()); 64 | 65 | add(canvas, "Center"); 66 | 67 | canvas.setFocusable(true); 68 | 69 | validate(); 70 | } 71 | 72 | public void startGameThread() 73 | { 74 | if(thread == null) 75 | { 76 | thread = new Thread(minecraft); 77 | 78 | thread.start(); 79 | } 80 | } 81 | 82 | @Override 83 | public void start() 84 | { 85 | minecraft.waiting = false; 86 | } 87 | 88 | @Override 89 | public void stop() 90 | { 91 | minecraft.waiting = true; 92 | } 93 | 94 | @Override 95 | public void destroy() 96 | { 97 | stopGameThread(); 98 | } 99 | 100 | public void stopGameThread() 101 | { 102 | if(thread != null) 103 | { 104 | minecraft.running = false; 105 | 106 | try { 107 | thread.join(1000L); 108 | } catch (InterruptedException var3) { 109 | minecraft.shutdown(); 110 | } 111 | 112 | thread = null; 113 | } 114 | } 115 | } 116 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/MovingObjectPosition.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft; 2 | 3 | import com.mojang.minecraft.model.Vec3D; 4 | 5 | public class MovingObjectPosition 6 | { 7 | public MovingObjectPosition(int x, int y, int z, int side, Vec3D blockPos) 8 | { 9 | entityPos = 0; 10 | 11 | this.x = x; 12 | this.y = y; 13 | this.z = z; 14 | 15 | this.face = side; 16 | 17 | vec = new Vec3D(blockPos.x, blockPos.y, blockPos.z); 18 | } 19 | 20 | public MovingObjectPosition(Entity entity) 21 | { 22 | entityPos = 1; 23 | this.entity = entity; 24 | } 25 | 26 | public int entityPos; 27 | 28 | public int x; 29 | public int y; 30 | public int z; 31 | 32 | public int face; 33 | 34 | public Vec3D vec; 35 | 36 | public Entity entity; 37 | } 38 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/OperatingSystemLookup.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft; 2 | 3 | // $FF: synthetic class 4 | final class OperatingSystemLookup { 5 | 6 | // $FF: synthetic field 7 | static final int[] lookup = new int[Minecraft$OS.values().length]; 8 | 9 | 10 | static { 11 | try { 12 | lookup[Minecraft$OS.linux.ordinal()] = 1; 13 | } catch (NoSuchFieldError var3) { 14 | ; 15 | } 16 | 17 | try { 18 | lookup[Minecraft$OS.solaris.ordinal()] = 2; 19 | } catch (NoSuchFieldError var2) { 20 | ; 21 | } 22 | 23 | try { 24 | lookup[Minecraft$OS.windows.ordinal()] = 3; 25 | } catch (NoSuchFieldError var1) { 26 | ; 27 | } 28 | 29 | try { 30 | lookup[Minecraft$OS.macos.ordinal()] = 4; 31 | } catch (NoSuchFieldError var0) { 32 | ; 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/SessionData.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft; 2 | 3 | import com.mojang.minecraft.level.tile.Block; 4 | import java.util.ArrayList; 5 | import java.util.List; 6 | 7 | public final class SessionData { 8 | 9 | public static List allowedBlocks; 10 | public String username; 11 | public String sessionId; 12 | public String mppass; 13 | public boolean haspaid; 14 | 15 | 16 | public SessionData(String var1, String var2) { 17 | this.username = var1; 18 | this.sessionId = var2; 19 | } 20 | 21 | static { 22 | (allowedBlocks = new ArrayList()).add(Block.STONE); 23 | allowedBlocks.add(Block.COBBLESTONE); 24 | allowedBlocks.add(Block.BRICK); 25 | allowedBlocks.add(Block.DIRT); 26 | allowedBlocks.add(Block.WOOD); 27 | allowedBlocks.add(Block.LOG); 28 | allowedBlocks.add(Block.LEAVES); 29 | allowedBlocks.add(Block.GLASS); 30 | allowedBlocks.add(Block.SLAB); 31 | allowedBlocks.add(Block.MOSSY_COBBLESTONE); 32 | allowedBlocks.add(Block.SAPLING); 33 | allowedBlocks.add(Block.DANDELION); 34 | allowedBlocks.add(Block.ROSE); 35 | allowedBlocks.add(Block.BROWN_MUSHROOM); 36 | allowedBlocks.add(Block.RED_MUSHROOM); 37 | allowedBlocks.add(Block.SAND); 38 | allowedBlocks.add(Block.GRAVEL); 39 | allowedBlocks.add(Block.SPONGE); 40 | allowedBlocks.add(Block.RED_WOOL); 41 | allowedBlocks.add(Block.ORANGE_WOOL); 42 | allowedBlocks.add(Block.YELLOW_WOOL); 43 | allowedBlocks.add(Block.LIME_WOOL); 44 | allowedBlocks.add(Block.GREEN_WOOL); 45 | allowedBlocks.add(Block.AQUA_GREEN_WOOL); 46 | allowedBlocks.add(Block.CYAN_WOOL); 47 | allowedBlocks.add(Block.BLUE_WOOL); 48 | allowedBlocks.add(Block.PURPLE_WOOL); 49 | allowedBlocks.add(Block.INDIGO_WOOL); 50 | allowedBlocks.add(Block.VIOLET_WOOL); 51 | allowedBlocks.add(Block.MAGENTA_WOOL); 52 | allowedBlocks.add(Block.PINK_WOOL); 53 | allowedBlocks.add(Block.BLACK_WOOL); 54 | allowedBlocks.add(Block.GRAY_WOOL); 55 | allowedBlocks.add(Block.WHITE_WOOL); 56 | allowedBlocks.add(Block.COAL_ORE); 57 | allowedBlocks.add(Block.IRON_ORE); 58 | allowedBlocks.add(Block.GOLD_ORE); 59 | allowedBlocks.add(Block.IRON_BLOCK); 60 | allowedBlocks.add(Block.GOLD_BLOCK); 61 | allowedBlocks.add(Block.BOOKSHELF); 62 | allowedBlocks.add(Block.TNT); 63 | allowedBlocks.add(Block.OBSIDIAN); 64 | 65 | allowedBlocks.add(Block.BEDROCK); 66 | allowedBlocks.add(Block.WATER); 67 | allowedBlocks.add(Block.LAVA); 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/SkinDownloadThread.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft; 2 | 3 | import com.mojang.minecraft.player.Player; 4 | import java.net.HttpURLConnection; 5 | import java.net.URL; 6 | import javax.imageio.ImageIO; 7 | 8 | public class SkinDownloadThread extends Thread 9 | { 10 | public SkinDownloadThread(Minecraft minecraft) 11 | { 12 | super(); 13 | 14 | this.minecraft = minecraft; 15 | } 16 | 17 | @Override 18 | public void run() 19 | { 20 | if(minecraft.session != null) 21 | { 22 | HttpURLConnection connection = null; 23 | 24 | try { 25 | connection = (HttpURLConnection)new URL("http://www.minecraft.net/skin/" + minecraft.session.username + ".png").openConnection(); 26 | 27 | connection.setDoInput(true); 28 | connection.setDoOutput(false); 29 | 30 | connection.connect(); 31 | 32 | if(connection.getResponseCode() != 404) 33 | { 34 | Player.newTexture = ImageIO.read(connection.getInputStream()); 35 | 36 | return; 37 | } 38 | } catch (Exception var4) { 39 | var4.printStackTrace(); 40 | } finally { 41 | if(connection != null) 42 | { 43 | connection.disconnect(); 44 | } 45 | } 46 | 47 | } 48 | } 49 | 50 | private Minecraft minecraft; 51 | } 52 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/SleepForeverThread.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft; 2 | 3 | public class SleepForeverThread extends Thread 4 | { 5 | public SleepForeverThread(Minecraft minecraft) 6 | { 7 | setDaemon(true); 8 | 9 | start(); 10 | } 11 | 12 | @Override 13 | public void run() 14 | { 15 | while(true) 16 | { 17 | try { 18 | while(true) 19 | { 20 | Thread.sleep(2147483647L); 21 | } 22 | } catch (InterruptedException e) { 23 | e.printStackTrace(); 24 | } 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/StopGameException.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft; 2 | 3 | public class StopGameException extends Error 4 | { 5 | private static final long serialVersionUID = 1L; 6 | } 7 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/Timer.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft; 2 | 3 | public class Timer 4 | { 5 | public Timer(float tps) 6 | { 7 | this.tps = tps; 8 | lastSysClock = System.currentTimeMillis(); 9 | lastHRClock = System.nanoTime() / 1000000L; 10 | } 11 | 12 | float tps; 13 | double lastHR; 14 | public int elapsedTicks; 15 | public float delta; 16 | public float speed = 1.0F; 17 | public float elapsedDelta = 0.0F; 18 | long lastSysClock; 19 | long lastHRClock; 20 | double adjustment = 1.0D; 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/gamemode/CreativeGameMode.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.gamemode; 2 | 3 | import com.mojang.minecraft.Minecraft; 4 | import com.mojang.minecraft.SessionData; 5 | import com.mojang.minecraft.gui.BlockSelectScreen; 6 | import com.mojang.minecraft.level.Level; 7 | import com.mojang.minecraft.level.tile.Block; 8 | import com.mojang.minecraft.player.Player; 9 | 10 | public class CreativeGameMode extends GameMode 11 | { 12 | public CreativeGameMode(Minecraft minecraft) 13 | { 14 | super(minecraft); 15 | 16 | instantBreak = true; 17 | } 18 | 19 | @Override 20 | public void apply(Level level) 21 | { 22 | super.apply(level); 23 | 24 | level.removeAllNonCreativeModeEntities(); 25 | 26 | level.creativeMode = true; 27 | level.growTrees = false; 28 | } 29 | 30 | @Override 31 | public void openInventory() 32 | { 33 | BlockSelectScreen blockSelectScreen = new BlockSelectScreen(); 34 | 35 | minecraft.setCurrentScreen(blockSelectScreen); 36 | } 37 | 38 | @Override 39 | public boolean isSurvival() 40 | { 41 | return false; 42 | } 43 | 44 | @Override 45 | public void apply(Player player) 46 | { 47 | for(int slot = 0; slot < 9; slot++) 48 | { 49 | player.inventory.count[slot] = 1; 50 | 51 | if(player.inventory.slots[slot] <= 0) 52 | { 53 | player.inventory.slots[slot] = ((Block) SessionData.allowedBlocks.get(slot)).id; 54 | } 55 | } 56 | 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/gamemode/GameMode.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.gamemode; 2 | 3 | import com.mojang.minecraft.Minecraft; 4 | import com.mojang.minecraft.level.Level; 5 | import com.mojang.minecraft.level.tile.Block; 6 | import com.mojang.minecraft.level.tile.Tile$SoundType; 7 | import com.mojang.minecraft.player.Player; 8 | 9 | public class GameMode 10 | { 11 | public GameMode(Minecraft minecraft) 12 | { 13 | this.minecraft = minecraft; 14 | 15 | instantBreak = false; 16 | } 17 | 18 | public Minecraft minecraft; 19 | 20 | public boolean instantBreak; 21 | 22 | public void apply(Level level) 23 | { 24 | level.creativeMode = false; 25 | level.growTrees = true; 26 | } 27 | 28 | public void openInventory() 29 | { 30 | } 31 | 32 | public void hitBlock(int x, int y, int z) 33 | { 34 | this.breakBlock(x, y, z); 35 | } 36 | 37 | public boolean canPlace(int block) 38 | { 39 | return true; 40 | } 41 | 42 | public void breakBlock(int x, int y, int z) 43 | { 44 | Level level = minecraft.level; 45 | Block block = Block.blocks[level.getTile(x, y, z)]; 46 | 47 | boolean success = level.netSetTile(x, y, z, 0); 48 | 49 | if(block != null && success) 50 | { 51 | if(minecraft.isOnline()) 52 | { 53 | minecraft.networkManager.sendBlockChange(x, y, z, 0, minecraft.player.inventory.getSelected()); 54 | } 55 | 56 | if(block.stepsound != Tile$SoundType.none) 57 | { 58 | level.playSound("step." + block.stepsound.name, (float)x, (float)y, (float)z, (block.stepsound.getVolume() + 1.0F) / 2.0F, block.stepsound.getPitch() * 0.8F); 59 | } 60 | 61 | block.spawnBreakParticles(level, x, y, z, minecraft.particleManager); 62 | } 63 | 64 | } 65 | 66 | public void hitBlock(int x, int y, int z, int side) 67 | { 68 | } 69 | 70 | public void resetHits() 71 | { 72 | } 73 | 74 | public void applyCracks(float time) 75 | { 76 | } 77 | 78 | public float getReachDistance() 79 | { 80 | return 5.0F; 81 | } 82 | 83 | public boolean useItem(Player player, int type) 84 | { 85 | return false; 86 | } 87 | 88 | public void preparePlayer(Player player) 89 | { 90 | } 91 | 92 | public void spawnMob() 93 | { 94 | } 95 | 96 | public void prepareLevel(Level level) 97 | { 98 | } 99 | 100 | public boolean isSurvival() 101 | { 102 | return true; 103 | } 104 | 105 | public void apply(Player player) 106 | { 107 | } 108 | } 109 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/gui/BlockSelectScreen.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.gui; 2 | 3 | import com.mojang.minecraft.SessionData; 4 | import com.mojang.minecraft.level.tile.Block; 5 | import com.mojang.minecraft.render.ShapeRenderer; 6 | import com.mojang.minecraft.render.TextureManager; 7 | import org.lwjgl.opengl.GL11; 8 | 9 | public final class BlockSelectScreen extends GuiScreen { 10 | 11 | public BlockSelectScreen() { 12 | this.grabsMouse = true; 13 | } 14 | 15 | private int getBlockOnScreen(int var1, int var2) { 16 | for(int var3 = 0; var3 < SessionData.allowedBlocks.size(); ++var3) { 17 | int var4 = this.width / 2 + var3 % 9 * 24 + -108 - 3; 18 | int var5 = this.height / 2 + var3 / 9 * 24 + -60 + 3; 19 | if(var1 >= var4 && var1 <= var4 + 24 && var2 >= var5 - 12 && var2 <= var5 + 12) { 20 | return var3; 21 | } 22 | } 23 | 24 | return -1; 25 | } 26 | 27 | public final void render(int var1, int var2) { 28 | var1 = this.getBlockOnScreen(var1, var2); 29 | drawFadingBox(this.width / 2 - 120, 30, this.width / 2 + 120, 180, -1878719232, -1070583712); 30 | if(var1 >= 0) { 31 | var2 = this.width / 2 + var1 % 9 * 24 + -108; 32 | int var3 = this.height / 2 + var1 / 9 * 24 + -60; 33 | drawFadingBox(var2 - 3, var3 - 8, var2 + 23, var3 + 24 - 6, -1862270977, -1056964609); 34 | } 35 | 36 | drawCenteredString(this.fontRenderer, "Select block", this.width / 2, 40, 16777215); 37 | TextureManager var7 = this.minecraft.textureManager; 38 | ShapeRenderer var8 = ShapeRenderer.instance; 39 | var2 = var7.load("/terrain.png"); 40 | GL11.glBindTexture(3553, var2); 41 | 42 | for(var2 = 0; var2 < SessionData.allowedBlocks.size(); ++var2) { 43 | Block var4 = (Block)SessionData.allowedBlocks.get(var2); 44 | GL11.glPushMatrix(); 45 | int var5 = this.width / 2 + var2 % 9 * 24 + -108; 46 | int var6 = this.height / 2 + var2 / 9 * 24 + -60; 47 | GL11.glTranslatef((float)var5, (float)var6, 0.0F); 48 | GL11.glScalef(10.0F, 10.0F, 10.0F); 49 | GL11.glTranslatef(1.0F, 0.5F, 8.0F); 50 | GL11.glRotatef(-30.0F, 1.0F, 0.0F, 0.0F); 51 | GL11.glRotatef(45.0F, 0.0F, 1.0F, 0.0F); 52 | if(var1 == var2) { 53 | GL11.glScalef(1.6F, 1.6F, 1.6F); 54 | } 55 | 56 | GL11.glTranslatef(-1.5F, 0.5F, 0.5F); 57 | GL11.glScalef(-1.0F, -1.0F, -1.0F); 58 | var8.begin(); 59 | var4.renderFullbright(var8); 60 | var8.end(); 61 | GL11.glPopMatrix(); 62 | } 63 | 64 | } 65 | 66 | protected final void onMouseClick(int var1, int var2, int var3) { 67 | if(var3 == 0) { 68 | this.minecraft.player.inventory.replaceSlot(this.getBlockOnScreen(var1, var2)); 69 | this.minecraft.setCurrentScreen((GuiScreen)null); 70 | } 71 | 72 | } 73 | } 74 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/gui/Button.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.gui; 2 | 3 | public class Button extends Screen { 4 | 5 | int width; 6 | int height; 7 | public int x; 8 | public int y; 9 | public String text; 10 | public int id; 11 | public boolean active; 12 | public boolean visible; 13 | 14 | 15 | public Button(int var1, int var2, int var3, String var4) { 16 | this(var1, var2, var3, 200, 20, var4); 17 | } 18 | 19 | protected Button(int var1, int var2, int var3, int var4, int var5, String var6) { 20 | this.width = 200; 21 | this.height = 20; 22 | this.active = true; 23 | this.visible = true; 24 | this.id = var1; 25 | this.x = var2; 26 | this.y = var3; 27 | this.width = var4; 28 | this.height = 20; 29 | this.text = var6; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/gui/ChatInputScreen.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.gui; 2 | 3 | import com.mojang.minecraft.net.NetworkManager; 4 | import com.mojang.minecraft.net.PacketType; 5 | import org.lwjgl.input.Keyboard; 6 | 7 | public final class ChatInputScreen extends GuiScreen { 8 | 9 | private String message = ""; 10 | private int counter = 0; 11 | 12 | 13 | public final void onOpen() { 14 | Keyboard.enableRepeatEvents(true); 15 | } 16 | 17 | public final void onClose() { 18 | Keyboard.enableRepeatEvents(false); 19 | } 20 | 21 | public final void tick() { 22 | ++this.counter; 23 | } 24 | 25 | protected final void onKeyPress(char var1, int var2) { 26 | if(var2 == 1) { 27 | this.minecraft.setCurrentScreen((GuiScreen)null); 28 | } else if(var2 == 28) { 29 | NetworkManager var10000 = this.minecraft.networkManager; 30 | String var4 = this.message.trim(); 31 | NetworkManager var3 = var10000; 32 | if((var4 = var4.trim()).length() > 0) { 33 | var3.netHandler.send(PacketType.CHAT_MESSAGE, new Object[]{Integer.valueOf(-1), var4}); 34 | } 35 | 36 | this.minecraft.setCurrentScreen((GuiScreen)null); 37 | } else { 38 | if(var2 == 14 && this.message.length() > 0) { 39 | this.message = this.message.substring(0, this.message.length() - 1); 40 | } 41 | 42 | if("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 ,.:-_\'*!\\\"#%/()=+?[]{}<>@|$;".indexOf(var1) >= 0 && this.message.length() < 64 - (this.minecraft.session.username.length() + 2)) { 43 | this.message = this.message + var1; 44 | } 45 | 46 | } 47 | } 48 | 49 | public final void render(int var1, int var2) { 50 | drawBox(2, this.height - 14, this.width - 2, this.height - 2, Integer.MIN_VALUE); 51 | drawString(this.fontRenderer, "> " + this.message + (this.counter / 6 % 2 == 0?"_":""), 4, this.height - 12, 14737632); 52 | } 53 | 54 | protected final void onMouseClick(int var1, int var2, int var3) { 55 | if(var3 == 0 && this.minecraft.hud.hoveredPlayer != null) { 56 | if(this.message.length() > 0 && !this.message.endsWith(" ")) { 57 | this.message = this.message + " "; 58 | } 59 | 60 | this.message = this.message + this.minecraft.hud.hoveredPlayer; 61 | var1 = 64 - (this.minecraft.session.username.length() + 2); 62 | if(this.message.length() > var1) { 63 | this.message = this.message.substring(0, var1); 64 | } 65 | } 66 | 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/gui/ControlsScreen.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.gui; 2 | 3 | import com.mojang.minecraft.GameSettings; 4 | 5 | public final class ControlsScreen extends GuiScreen { 6 | 7 | private GuiScreen parent; 8 | private String title = "Controls"; 9 | private GameSettings settings; 10 | private int selected = -1; 11 | 12 | 13 | public ControlsScreen(GuiScreen var1, GameSettings var2) { 14 | this.parent = var1; 15 | this.settings = var2; 16 | } 17 | 18 | public final void onOpen() { 19 | for(int var1 = 0; var1 < this.settings.bindings.length; ++var1) { 20 | this.buttons.add(new OptionButton(var1, this.width / 2 - 155 + var1 % 2 * 160, this.height / 6 + 24 * (var1 >> 1), this.settings.getBinding(var1))); 21 | } 22 | 23 | this.buttons.add(new Button(200, this.width / 2 - 100, this.height / 6 + 168, "Done")); 24 | } 25 | 26 | protected final void onButtonClick(Button var1) { 27 | for(int var2 = 0; var2 < this.settings.bindings.length; ++var2) { 28 | ((Button)this.buttons.get(var2)).text = this.settings.getBinding(var2); 29 | } 30 | 31 | if(var1.id == 200) { 32 | this.minecraft.setCurrentScreen(this.parent); 33 | } else { 34 | this.selected = var1.id; 35 | var1.text = "> " + this.settings.getBinding(var1.id) + " <"; 36 | } 37 | } 38 | 39 | protected final void onKeyPress(char var1, int var2) { 40 | if(this.selected >= 0) { 41 | this.settings.setBinding(this.selected, var2); 42 | ((Button)this.buttons.get(this.selected)).text = this.settings.getBinding(this.selected); 43 | this.selected = -1; 44 | } else { 45 | super.onKeyPress(var1, var2); 46 | } 47 | } 48 | 49 | public final void render(int var1, int var2) { 50 | drawFadingBox(0, 0, this.width, this.height, 1610941696, -1607454624); 51 | drawCenteredString(this.fontRenderer, this.title, this.width / 2, 20, 16777215); 52 | super.render(var1, var2); 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/gui/ErrorScreen.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.gui; 2 | 3 | public final class ErrorScreen extends GuiScreen { 4 | 5 | private String title; 6 | private String text; 7 | 8 | 9 | public ErrorScreen(String var1, String var2) { 10 | this.title = var1; 11 | this.text = var2; 12 | } 13 | 14 | public final void onOpen() {} 15 | 16 | public final void render(int var1, int var2) { 17 | drawFadingBox(0, 0, this.width, this.height, -12574688, -11530224); 18 | drawCenteredString(this.fontRenderer, this.title, this.width / 2, 90, 16777215); 19 | drawCenteredString(this.fontRenderer, this.text, this.width / 2, 110, 16777215); 20 | super.render(var1, var2); 21 | } 22 | 23 | protected final void onKeyPress(char var1, int var2) {} 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/gui/GameOverScreen.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.gui; 2 | 3 | import org.lwjgl.opengl.GL11; 4 | 5 | public final class GameOverScreen extends GuiScreen { 6 | 7 | public final void onOpen() { 8 | this.buttons.clear(); 9 | this.buttons.add(new Button(1, this.width / 2 - 100, this.height / 4 + 72, "Generate new level...")); 10 | this.buttons.add(new Button(2, this.width / 2 - 100, this.height / 4 + 96, "Load level..")); 11 | if(this.minecraft.session == null) { 12 | ((Button)this.buttons.get(2)).active = false; 13 | } 14 | 15 | } 16 | 17 | protected final void onButtonClick(Button var1) { 18 | if(var1.id == 0) { 19 | this.minecraft.setCurrentScreen(new OptionsScreen(this, this.minecraft.settings)); 20 | } 21 | 22 | if(var1.id == 1) { 23 | this.minecraft.setCurrentScreen(new GenerateLevelScreen(this)); 24 | } 25 | 26 | if(this.minecraft.session != null && var1.id == 2) { 27 | this.minecraft.setCurrentScreen(new LoadLevelScreen(this)); 28 | } 29 | 30 | } 31 | 32 | public final void render(int var1, int var2) { 33 | drawFadingBox(0, 0, this.width, this.height, 1615855616, -1602211792); 34 | GL11.glPushMatrix(); 35 | GL11.glScalef(2.0F, 2.0F, 2.0F); 36 | drawCenteredString(this.fontRenderer, "Game over!", this.width / 2 / 2, 30, 16777215); 37 | GL11.glPopMatrix(); 38 | drawCenteredString(this.fontRenderer, "Score: &e" + this.minecraft.player.getScore(), this.width / 2, 100, 16777215); 39 | super.render(var1, var2); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/gui/GenerateLevelScreen.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.gui; 2 | 3 | public final class GenerateLevelScreen extends GuiScreen { 4 | 5 | private GuiScreen parent; 6 | 7 | 8 | public GenerateLevelScreen(GuiScreen var1) { 9 | this.parent = var1; 10 | } 11 | 12 | public final void onOpen() { 13 | this.buttons.clear(); 14 | this.buttons.add(new Button(0, this.width / 2 - 100, this.height / 4, "Small")); 15 | this.buttons.add(new Button(1, this.width / 2 - 100, this.height / 4 + 24, "Normal")); 16 | this.buttons.add(new Button(2, this.width / 2 - 100, this.height / 4 + 48, "Huge")); 17 | this.buttons.add(new Button(3, this.width / 2 - 100, this.height / 4 + 120, "Cancel")); 18 | } 19 | 20 | protected final void onButtonClick(Button var1) { 21 | if(var1.id == 3) { 22 | this.minecraft.setCurrentScreen(this.parent); 23 | } else { 24 | this.minecraft.generateLevel(var1.id); 25 | this.minecraft.setCurrentScreen((GuiScreen)null); 26 | this.minecraft.grabMouse(); 27 | } 28 | } 29 | 30 | public final void render(int var1, int var2) { 31 | drawFadingBox(0, 0, this.width, this.height, 1610941696, -1607454624); 32 | drawCenteredString(this.fontRenderer, "Generate new level", this.width / 2, 40, 16777215); 33 | super.render(var1, var2); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/gui/LevelDialog.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.gui; 2 | 3 | import javax.swing.JFileChooser; 4 | import javax.swing.filechooser.FileNameExtensionFilter; 5 | 6 | final class LevelDialog extends Thread { 7 | 8 | // $FF: synthetic field 9 | private LoadLevelScreen screen; 10 | 11 | 12 | LevelDialog(LoadLevelScreen var1) { 13 | super(); 14 | this.screen = var1; 15 | } 16 | 17 | public final void run() { 18 | JFileChooser var1; 19 | LoadLevelScreen var2; 20 | try { 21 | LoadLevelScreen var10000 = this.screen; 22 | var1 = new JFileChooser(); 23 | var10000.chooser = var1; 24 | FileNameExtensionFilter var3 = new FileNameExtensionFilter("Minecraft levels", new String[]{"mine"}); 25 | var2 = this.screen; 26 | this.screen.chooser.setFileFilter(var3); 27 | var2 = this.screen; 28 | this.screen.chooser.setMultiSelectionEnabled(false); 29 | int var7; 30 | if(this.screen.saving) { 31 | var2 = this.screen; 32 | var7 = this.screen.chooser.showSaveDialog(this.screen.minecraft.canvas); 33 | } else { 34 | var2 = this.screen; 35 | var7 = this.screen.chooser.showOpenDialog(this.screen.minecraft.canvas); 36 | } 37 | 38 | if(var7 == 0) { 39 | (var2 = this.screen).selectedFile = this.screen.chooser.getSelectedFile(); 40 | } 41 | } finally { 42 | boolean var6 = false; 43 | var2 = this.screen; 44 | this.screen.frozen = false; 45 | var1 = null; 46 | var2 = this.screen; 47 | this.screen.chooser = var1; 48 | } 49 | 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/gui/LevelNameScreen.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.gui; 2 | 3 | import com.mojang.minecraft.Minecraft; 4 | import org.lwjgl.input.Keyboard; 5 | 6 | public final class LevelNameScreen extends GuiScreen { 7 | 8 | private GuiScreen parent; 9 | private String title = "Enter level name:"; 10 | private int id; 11 | private String name; 12 | private int counter = 0; 13 | 14 | 15 | public LevelNameScreen(GuiScreen var1, String var2, int var3) { 16 | this.parent = var1; 17 | this.id = var3; 18 | this.name = var2; 19 | if(this.name.equals("-")) { 20 | this.name = ""; 21 | } 22 | 23 | } 24 | 25 | public final void onOpen() { 26 | this.buttons.clear(); 27 | Keyboard.enableRepeatEvents(true); 28 | this.buttons.add(new Button(0, this.width / 2 - 100, this.height / 4 + 120, "Save")); 29 | this.buttons.add(new Button(1, this.width / 2 - 100, this.height / 4 + 144, "Cancel")); 30 | ((Button)this.buttons.get(0)).active = this.name.trim().length() > 1; 31 | } 32 | 33 | public final void onClose() { 34 | Keyboard.enableRepeatEvents(false); 35 | } 36 | 37 | public final void tick() { 38 | ++this.counter; 39 | } 40 | 41 | protected final void onButtonClick(Button var1) { 42 | if(var1.active) { 43 | if(var1.id == 0 && this.name.trim().length() > 1) { 44 | Minecraft var10000 = this.minecraft; 45 | int var10001 = this.id; 46 | String var2 = this.name.trim(); 47 | int var3 = var10001; 48 | Minecraft var4 = var10000; 49 | var10000.levelIo.saveOnline(var4.level, var4.host, var4.session.username, var4.session.sessionId, var2, var3); 50 | this.minecraft.setCurrentScreen((GuiScreen)null); 51 | this.minecraft.grabMouse(); 52 | } 53 | 54 | if(var1.id == 1) { 55 | this.minecraft.setCurrentScreen(this.parent); 56 | } 57 | 58 | } 59 | } 60 | 61 | protected final void onKeyPress(char var1, int var2) { 62 | if(var2 == 14 && this.name.length() > 0) { 63 | this.name = this.name.substring(0, this.name.length() - 1); 64 | } 65 | 66 | if("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 ,.:-_\'*!\"#%/()=+?[]{}<>".indexOf(var1) >= 0 && this.name.length() < 64) { 67 | this.name = this.name + var1; 68 | } 69 | 70 | ((Button)this.buttons.get(0)).active = this.name.trim().length() > 1; 71 | } 72 | 73 | public final void render(int var1, int var2) { 74 | drawFadingBox(0, 0, this.width, this.height, 1610941696, -1607454624); 75 | drawCenteredString(this.fontRenderer, this.title, this.width / 2, 40, 16777215); 76 | int var3 = this.width / 2 - 100; 77 | int var4 = this.height / 2 - 10; 78 | drawBox(var3 - 1, var4 - 1, var3 + 200 + 1, var4 + 20 + 1, -6250336); 79 | drawBox(var3, var4, var3 + 200, var4 + 20, -16777216); 80 | drawString(this.fontRenderer, this.name + (this.counter / 6 % 2 == 0?"_":""), var3 + 4, var4 + 6, 14737632); 81 | super.render(var1, var2); 82 | } 83 | } 84 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/gui/OptionButton.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.gui; 2 | 3 | public final class OptionButton extends Button { 4 | 5 | public OptionButton(int var1, int var2, int var3, String var4) { 6 | super(var1, var2, var3, 150, 20, var4); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/gui/OptionsScreen.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.gui; 2 | 3 | import com.mojang.minecraft.GameSettings; 4 | 5 | public final class OptionsScreen extends GuiScreen { 6 | 7 | private GuiScreen parent; 8 | private String title = "Options"; 9 | private GameSettings settings; 10 | 11 | 12 | public OptionsScreen(GuiScreen var1, GameSettings var2) { 13 | this.parent = var1; 14 | this.settings = var2; 15 | } 16 | 17 | public final void onOpen() { 18 | for(int var1 = 0; var1 < this.settings.settingCount; ++var1) { 19 | this.buttons.add(new OptionButton(var1, this.width / 2 - 155 + var1 % 2 * 160, this.height / 6 + 24 * (var1 >> 1), this.settings.getSetting(var1))); 20 | } 21 | 22 | this.buttons.add(new Button(100, this.width / 2 - 100, this.height / 6 + 120 + 12, "Controls...")); 23 | this.buttons.add(new Button(200, this.width / 2 - 100, this.height / 6 + 168, "Done")); 24 | } 25 | 26 | protected final void onButtonClick(Button var1) { 27 | if(var1.active) { 28 | if(var1.id < 100) { 29 | this.settings.toggleSetting(var1.id, 1); 30 | var1.text = this.settings.getSetting(var1.id); 31 | } 32 | 33 | if(var1.id == 100) { 34 | this.minecraft.setCurrentScreen(new ControlsScreen(this, this.settings)); 35 | } 36 | 37 | if(var1.id == 200) { 38 | this.minecraft.setCurrentScreen(this.parent); 39 | } 40 | 41 | } 42 | } 43 | 44 | public final void render(int var1, int var2) { 45 | drawFadingBox(0, 0, this.width, this.height, 1610941696, -1607454624); 46 | drawCenteredString(this.fontRenderer, this.title, this.width / 2, 20, 16777215); 47 | super.render(var1, var2); 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/gui/PauseScreen.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.gui; 2 | 3 | public final class PauseScreen extends GuiScreen { 4 | 5 | public final void onOpen() { 6 | this.buttons.clear(); 7 | this.buttons.add(new Button(0, this.width / 2 - 100, this.height / 4, "Options...")); 8 | this.buttons.add(new Button(1, this.width / 2 - 100, this.height / 4 + 24, "Generate new level...")); 9 | this.buttons.add(new Button(2, this.width / 2 - 100, this.height / 4 + 48, "Save level..")); 10 | this.buttons.add(new Button(3, this.width / 2 - 100, this.height / 4 + 72, "Load level..")); 11 | this.buttons.add(new Button(4, this.width / 2 - 100, this.height / 4 + 120, "Back to game")); 12 | if(this.minecraft.session == null) { 13 | ((Button)this.buttons.get(2)).active = false; 14 | ((Button)this.buttons.get(3)).active = false; 15 | } 16 | 17 | if(this.minecraft.networkManager != null) { 18 | ((Button)this.buttons.get(1)).active = false; 19 | ((Button)this.buttons.get(2)).active = false; 20 | ((Button)this.buttons.get(3)).active = false; 21 | } 22 | 23 | } 24 | 25 | protected final void onButtonClick(Button var1) { 26 | if(var1.id == 0) { 27 | this.minecraft.setCurrentScreen(new OptionsScreen(this, this.minecraft.settings)); 28 | } 29 | 30 | if(var1.id == 1) { 31 | this.minecraft.setCurrentScreen(new GenerateLevelScreen(this)); 32 | } 33 | 34 | if(this.minecraft.session != null) { 35 | if(var1.id == 2) { 36 | this.minecraft.setCurrentScreen(new SaveLevelScreen(this)); 37 | } 38 | 39 | if(var1.id == 3) { 40 | this.minecraft.setCurrentScreen(new LoadLevelScreen(this)); 41 | } 42 | } 43 | 44 | if(var1.id == 4) { 45 | this.minecraft.setCurrentScreen((GuiScreen)null); 46 | this.minecraft.grabMouse(); 47 | } 48 | 49 | } 50 | 51 | public final void render(int var1, int var2) { 52 | drawFadingBox(0, 0, this.width, this.height, 1610941696, -1607454624); 53 | drawCenteredString(this.fontRenderer, "Game menu", this.width / 2, 40, 16777215); 54 | super.render(var1, var2); 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/gui/SaveLevelScreen.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.gui; 2 | 3 | import com.mojang.minecraft.Minecraft; 4 | 5 | import java.io.File; 6 | 7 | public final class SaveLevelScreen extends LoadLevelScreen { 8 | 9 | public SaveLevelScreen(GuiScreen var1) { 10 | super(var1); 11 | this.title = "Save level"; 12 | this.saving = true; 13 | } 14 | 15 | public final void onOpen() { 16 | super.onOpen(); 17 | ((Button)this.buttons.get(5)).text = "Save file..."; 18 | } 19 | 20 | protected final void setLevels(String[] var1) { 21 | for(int var2 = 0; var2 < 5; ++var2) { 22 | ((Button)this.buttons.get(var2)).text = var1[var2]; 23 | ((Button)this.buttons.get(var2)).visible = true; 24 | ((Button)this.buttons.get(var2)).active = this.minecraft.session.haspaid; 25 | } 26 | 27 | } 28 | 29 | public final void render(int var1, int var2) { 30 | super.render(var1, var2); 31 | if(!this.minecraft.session.haspaid) { 32 | drawFadingBox(this.width / 2 - 80, 72, this.width / 2 + 80, 120, -536870912, -536870912); 33 | drawCenteredString(this.fontRenderer, "Premium only!", this.width / 2, 80, 16748688); 34 | drawCenteredString(this.fontRenderer, "Purchase the game to be able", this.width / 2, 96, 14712960); 35 | drawCenteredString(this.fontRenderer, "to save your levels online.", this.width / 2, 104, 14712960); 36 | } 37 | } 38 | 39 | protected final void openLevel(File var1) { 40 | if(!var1.getName().endsWith(".mine")) { 41 | var1 = new File(var1.getParentFile(), var1.getName() + ".mine"); 42 | } 43 | 44 | File var2 = var1; 45 | Minecraft var3 = this.minecraft; 46 | this.minecraft.levelIo.save(var3.level, var2); 47 | this.minecraft.setCurrentScreen(this.parent); 48 | } 49 | 50 | protected final void openLevel(int var1) { 51 | this.minecraft.setCurrentScreen(new LevelNameScreen(this, ((Button)this.buttons.get(var1)).text, var1)); 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/gui/Screen.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.gui; 2 | 3 | import com.mojang.minecraft.render.ShapeRenderer; 4 | import org.lwjgl.opengl.GL11; 5 | 6 | public class Screen { 7 | 8 | protected float imgZ = 0.0F; 9 | 10 | 11 | protected static void drawBox(int var0, int var1, int var2, int var3, int var4) { 12 | float var5 = (float)(var4 >>> 24) / 255.0F; 13 | float var6 = (float)(var4 >> 16 & 255) / 255.0F; 14 | float var7 = (float)(var4 >> 8 & 255) / 255.0F; 15 | float var9 = (float)(var4 & 255) / 255.0F; 16 | ShapeRenderer var8 = ShapeRenderer.instance; 17 | GL11.glEnable(3042); 18 | GL11.glDisable(3553); 19 | GL11.glBlendFunc(770, 771); 20 | GL11.glColor4f(var6, var7, var9, var5); 21 | var8.begin(); 22 | var8.vertex((float)var0, (float)var3, 0.0F); 23 | var8.vertex((float)var2, (float)var3, 0.0F); 24 | var8.vertex((float)var2, (float)var1, 0.0F); 25 | var8.vertex((float)var0, (float)var1, 0.0F); 26 | var8.end(); 27 | GL11.glEnable(3553); 28 | GL11.glDisable(3042); 29 | } 30 | 31 | protected static void drawFadingBox(int var0, int var1, int var2, int var3, int var4, int var5) { 32 | float var6 = (float)(var4 >>> 24) / 255.0F; 33 | float var7 = (float)(var4 >> 16 & 255) / 255.0F; 34 | float var8 = (float)(var4 >> 8 & 255) / 255.0F; 35 | float var12 = (float)(var4 & 255) / 255.0F; 36 | float var9 = (float)(var5 >>> 24) / 255.0F; 37 | float var10 = (float)(var5 >> 16 & 255) / 255.0F; 38 | float var11 = (float)(var5 >> 8 & 255) / 255.0F; 39 | float var13 = (float)(var5 & 255) / 255.0F; 40 | GL11.glDisable(3553); 41 | GL11.glEnable(3042); 42 | GL11.glBlendFunc(770, 771); 43 | GL11.glBegin(7); 44 | GL11.glColor4f(var7, var8, var12, var6); 45 | GL11.glVertex2f((float)var2, (float)var1); 46 | GL11.glVertex2f((float)var0, (float)var1); 47 | GL11.glColor4f(var10, var11, var13, var9); 48 | GL11.glVertex2f((float)var0, (float)var3); 49 | GL11.glVertex2f((float)var2, (float)var3); 50 | GL11.glEnd(); 51 | GL11.glDisable(3042); 52 | GL11.glEnable(3553); 53 | } 54 | 55 | public static void drawCenteredString(FontRenderer var0, String var1, int var2, int var3, int var4) { 56 | var0.render(var1, var2 - var0.getWidth(var1) / 2, var3, var4); 57 | } 58 | 59 | public static void drawString(FontRenderer var0, String var1, int var2, int var3, int var4) { 60 | var0.render(var1, var2, var3, var4); 61 | } 62 | 63 | public final void drawImage(int var1, int var2, int var3, int var4, int var5, int var6) { 64 | float var7 = 0.00390625F; 65 | float var8 = 0.00390625F; 66 | ShapeRenderer var9 = ShapeRenderer.instance; 67 | ShapeRenderer.instance.begin(); 68 | var9.vertexUV((float)var1, (float)(var2 + var6), this.imgZ, (float)var3 * var7, (float)(var4 + var6) * var8); 69 | var9.vertexUV((float)(var1 + var5), (float)(var2 + var6), this.imgZ, (float)(var3 + var5) * var7, (float)(var4 + var6) * var8); 70 | var9.vertexUV((float)(var1 + var5), (float)var2, this.imgZ, (float)(var3 + var5) * var7, (float)var4 * var8); 71 | var9.vertexUV((float)var1, (float)var2, this.imgZ, (float)var3 * var7, (float)var4 * var8); 72 | var9.end(); 73 | } 74 | } 75 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/item/ItemModel.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.item; 2 | 3 | import com.mojang.minecraft.model.ModelPart; 4 | import com.mojang.minecraft.model.TexturedQuad; 5 | import com.mojang.minecraft.model.Vertex; 6 | 7 | public class ItemModel 8 | { 9 | public ItemModel(int tex) 10 | { 11 | float var3 = -2.0F; 12 | float var4 = -2.0F; 13 | float var15 = -2.0F; 14 | 15 | model.vertices = new Vertex[8]; 16 | model.quads = new TexturedQuad[6]; 17 | 18 | Vertex vertex1 = new Vertex(var15, var4, var3, 0.0F, 0.0F); 19 | Vertex vertex2 = new Vertex(2.0F, var4, var3, 0.0F, 8.0F); 20 | Vertex vertex3 = new Vertex(2.0F, 2.0F, var3, 8.0F, 8.0F); 21 | Vertex vertex4 = new Vertex(var15, 2.0F, var3, 8.0F, 0.0F); 22 | Vertex vertex5 = new Vertex(var15, var4, 2.0F, 0.0F, 0.0F); 23 | Vertex vertex6 = new Vertex(2.0F, var4, 2.0F, 0.0F, 8.0F); 24 | Vertex vertex7 = new Vertex(2.0F, 2.0F, 2.0F, 8.0F, 8.0F); 25 | Vertex vertex8 = new Vertex(var15, 2.0F, 2.0F, 8.0F, 0.0F); 26 | 27 | model.vertices[0] = vertex1; 28 | model.vertices[1] = vertex2; 29 | model.vertices[2] = vertex3; 30 | model.vertices[3] = vertex4; 31 | model.vertices[4] = vertex5; 32 | model.vertices[5] = vertex6; 33 | model.vertices[6] = vertex7; 34 | model.vertices[7] = vertex8; 35 | 36 | float u1 = ((float)(tex % 16) + (1.0F - 0.25F)) / 16.0F; 37 | float v1 = ((float)(tex / 16) + (1.0F - 0.25F)) / 16.0F; 38 | float u2 = ((float)(tex % 16) + 0.25F) / 16.0F; 39 | float v2 = ((float)(tex / 16) + 0.25F) / 16.0F; 40 | 41 | Vertex[] vertexes1 = new Vertex[] {vertex6, vertex2, vertex3, vertex7}; 42 | Vertex[] vertexes2 = new Vertex[] {vertex1, vertex5, vertex8, vertex4}; 43 | Vertex[] vertexes3 = new Vertex[] {vertex6, vertex5, vertex1, vertex2}; 44 | Vertex[] vertexes4 = new Vertex[] {vertex3, vertex4, vertex8, vertex7}; 45 | Vertex[] vertexes5 = new Vertex[] {vertex2, vertex1, vertex4, vertex3}; 46 | Vertex[] vertexes6 = new Vertex[] {vertex5, vertex6, vertex7, vertex8}; 47 | 48 | model.quads[0] = new TexturedQuad(vertexes1, u1, v1, u2, v2); 49 | model.quads[1] = new TexturedQuad(vertexes2, u1, v1, u2, v2); 50 | model.quads[2] = new TexturedQuad(vertexes3, u1, v1, u2, v2); 51 | model.quads[3] = new TexturedQuad(vertexes4, u1, v1, u2, v2); 52 | model.quads[4] = new TexturedQuad(vertexes5, u1, v1, u2, v2); 53 | model.quads[5] = new TexturedQuad(vertexes6, u1, v1, u2, v2); 54 | } 55 | 56 | private ModelPart model = new ModelPart(0, 0); 57 | 58 | public void generateList() 59 | { 60 | model.render(0.0625F); 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/item/TakeEntityAnim.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.item; 2 | 3 | import com.mojang.minecraft.Entity; 4 | import com.mojang.minecraft.level.Level; 5 | import com.mojang.minecraft.render.TextureManager; 6 | 7 | public class TakeEntityAnim extends Entity 8 | { 9 | public TakeEntityAnim(Level level1, Entity item, Entity player) 10 | { 11 | super(level1); 12 | 13 | this.item = item; 14 | this.player = player; 15 | 16 | setSize(1.0F, 1.0F); 17 | 18 | xorg = item.x; 19 | yorg = item.y; 20 | zorg = item.z; 21 | } 22 | 23 | @Override 24 | public void tick() 25 | { 26 | time++; 27 | 28 | if(time >= 3) 29 | { 30 | remove(); 31 | } 32 | 33 | // TODO: Is this right? 34 | float distance = (distance = (float)time / 3.0F) * distance; 35 | 36 | xo = item.xo = item.x; 37 | yo = item.yo = item.y; 38 | zo = item.zo = item.z; 39 | 40 | x = item.x = xorg + (player.x - xorg) * distance; 41 | y = item.y = yorg + (player.y - 1.0F - yorg) * distance; 42 | z = item.z = zorg + (player.z - zorg) * distance; 43 | 44 | setPos(x, y, z); 45 | } 46 | 47 | @Override 48 | public void render(TextureManager textureManager, float unknown0) 49 | { 50 | item.render(textureManager, unknown0); 51 | } 52 | 53 | private static final long serialVersionUID = 1L; 54 | 55 | private int time = 0; 56 | 57 | private Entity item; 58 | private Entity player; 59 | 60 | private float xorg; 61 | private float yorg; 62 | private float zorg; 63 | } 64 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/level/BlockMap$Slot.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.level; 2 | 3 | import com.mojang.minecraft.Entity; 4 | 5 | import java.io.Serializable; 6 | 7 | class BlockMap$Slot implements Serializable { 8 | 9 | public static final long serialVersionUID = 0L; 10 | private int xSlot; 11 | private int ySlot; 12 | private int zSlot; 13 | // $FF: synthetic field 14 | final BlockMap blockMap; 15 | 16 | 17 | private BlockMap$Slot(BlockMap var1) { 18 | this.blockMap = var1; 19 | } 20 | 21 | public BlockMap$Slot init(float var1, float var2, float var3) { 22 | this.xSlot = (int)(var1 / 16.0F); 23 | this.ySlot = (int)(var2 / 16.0F); 24 | this.zSlot = (int)(var3 / 16.0F); 25 | if(this.xSlot < 0) { 26 | this.xSlot = 0; 27 | } 28 | 29 | if(this.ySlot < 0) { 30 | this.ySlot = 0; 31 | } 32 | 33 | if(this.zSlot < 0) { 34 | this.zSlot = 0; 35 | } 36 | 37 | if(this.xSlot >= BlockMap.getWidth(this.blockMap)) { 38 | this.xSlot = BlockMap.getWidth(this.blockMap) - 1; 39 | } 40 | 41 | if(this.ySlot >= BlockMap.getDepth(this.blockMap)) { 42 | this.ySlot = BlockMap.getDepth(this.blockMap) - 1; 43 | } 44 | 45 | if(this.zSlot >= BlockMap.getHeight(this.blockMap)) { 46 | this.zSlot = BlockMap.getHeight(this.blockMap) - 1; 47 | } 48 | 49 | return this; 50 | } 51 | 52 | public void add(Entity var1) { 53 | if(this.xSlot >= 0 && this.ySlot >= 0 && this.zSlot >= 0) { 54 | this.blockMap.entityGrid[(this.zSlot * BlockMap.getDepth(this.blockMap) + this.ySlot) * BlockMap.getWidth(this.blockMap) + this.xSlot].add(var1); 55 | } 56 | 57 | } 58 | 59 | public void remove(Entity var1) { 60 | if(this.xSlot >= 0 && this.ySlot >= 0 && this.zSlot >= 0) { 61 | this.blockMap.entityGrid[(this.zSlot * BlockMap.getDepth(this.blockMap) + this.ySlot) * BlockMap.getWidth(this.blockMap) + this.xSlot].remove(var1); 62 | } 63 | 64 | } 65 | 66 | // $FF: synthetic method 67 | BlockMap$Slot(BlockMap var1, SyntheticClass var2) { 68 | this(var1); 69 | } 70 | 71 | // $FF: synthetic method 72 | static int getXSlot(BlockMap$Slot var0) { 73 | return var0.xSlot; 74 | } 75 | 76 | // $FF: synthetic method 77 | static int getYSlot(BlockMap$Slot var0) { 78 | return var0.ySlot; 79 | } 80 | 81 | // $FF: synthetic method 82 | static int getZSlot(BlockMap$Slot var0) { 83 | return var0.zSlot; 84 | } 85 | } 86 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/level/LevelObjectInputStream.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.level; 2 | 3 | import java.io.IOException; 4 | import java.io.InputStream; 5 | import java.io.ObjectInputStream; 6 | import java.io.ObjectStreamClass; 7 | import java.util.HashSet; 8 | import java.util.Set; 9 | 10 | public final class LevelObjectInputStream extends ObjectInputStream { 11 | 12 | private Set classes = new HashSet(); 13 | 14 | 15 | public LevelObjectInputStream(InputStream var1) throws IOException { 16 | super(var1); 17 | this.classes.add("Player$1"); 18 | this.classes.add("Creeper$1"); 19 | this.classes.add("Skeleton$1"); 20 | } 21 | 22 | protected final ObjectStreamClass readClassDescriptor() { 23 | try 24 | { 25 | ObjectStreamClass var1 = super.readClassDescriptor(); 26 | return this.classes.contains(var1.getName())?ObjectStreamClass.lookup(Class.forName(var1.getName())):var1; 27 | } catch (ClassNotFoundException e) { 28 | e.printStackTrace(); 29 | } catch (IOException e) { 30 | e.printStackTrace(); 31 | } 32 | 33 | return null; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/level/NextTickListEntry.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.level; 2 | 3 | 4 | public final class NextTickListEntry { 5 | 6 | public int x; 7 | public int y; 8 | public int z; 9 | public int block; 10 | public int ticks; 11 | 12 | 13 | public NextTickListEntry(int var1, int var2, int var3, int var4) { 14 | this.x = var1; 15 | this.y = var2; 16 | this.z = var3; 17 | this.block = var4; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/level/SyntheticClass.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.level; 2 | 3 | 4 | // $FF: synthetic class 5 | final class SyntheticClass { 6 | } 7 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/level/generator/noise/CombinedNoise.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.level.generator.noise; 2 | 3 | public final class CombinedNoise extends Noise 4 | { 5 | public CombinedNoise(Noise noise1, Noise noise2) 6 | { 7 | this.noise1 = noise1; 8 | this.noise2 = noise2; 9 | } 10 | 11 | @Override 12 | public double compute(double x, double z) 13 | { 14 | return noise1.compute(x + noise2.compute(x, z), z); 15 | } 16 | 17 | private Noise noise1; 18 | private Noise noise2; 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/level/generator/noise/Noise.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.level.generator.noise; 2 | 3 | 4 | public abstract class Noise 5 | { 6 | public abstract double compute(double x, double z); 7 | } 8 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/level/generator/noise/OctaveNoise.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.level.generator.noise; 2 | 3 | import java.util.Random; 4 | 5 | public class OctaveNoise extends Noise 6 | { 7 | public OctaveNoise(Random random, int octaves) 8 | { 9 | this.octaves = octaves; 10 | perlin = new PerlinNoise[octaves]; 11 | 12 | for(int count = 0; count < octaves; count++) 13 | { 14 | perlin[count] = new PerlinNoise(random); 15 | } 16 | 17 | } 18 | 19 | @Override 20 | public double compute(double x, double z) 21 | { 22 | double result = 0.0D; 23 | double noiseLevel = 1.0D; //unknown0 24 | 25 | for(int count = 0; count < octaves; count++) 26 | { 27 | result += perlin[count].compute(x / noiseLevel, z / noiseLevel) * noiseLevel; 28 | 29 | noiseLevel *= 2.0D; 30 | } 31 | 32 | return result; 33 | } 34 | 35 | private PerlinNoise[] perlin; 36 | private int octaves; 37 | } 38 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/level/liquid/LiquidType.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.level.liquid; 2 | 3 | public class LiquidType 4 | { 5 | private LiquidType(int type) 6 | { 7 | values = new LiquidType[4]; 8 | 9 | values[type] = this; 10 | } 11 | 12 | private LiquidType[] values; 13 | 14 | public static final LiquidType NOT_LIQUID = new LiquidType(0); 15 | public static final LiquidType WATER = new LiquidType(1); 16 | public static final LiquidType LAVA = new LiquidType(2); 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/level/tile/BookshelfBlock.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.level.tile; 2 | 3 | public final class BookshelfBlock extends Block { 4 | 5 | public BookshelfBlock(int var1, int var2) { 6 | super(47, 35); 7 | } 8 | 9 | protected final int getTextureId(int texture) { 10 | return texture <= 1?4:this.textureId; 11 | } 12 | 13 | public final int getDropCount() { 14 | return 0; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/level/tile/DirtBlock.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.level.tile; 2 | 3 | public final class DirtBlock extends Block { 4 | 5 | protected DirtBlock(int var1, int var2) { 6 | super(3, 2); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/level/tile/FlowerBlock.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.level.tile; 2 | 3 | import com.mojang.minecraft.level.Level; 4 | import com.mojang.minecraft.phys.AABB; 5 | import com.mojang.minecraft.render.ShapeRenderer; 6 | import com.mojang.util.MathHelper; 7 | 8 | import java.util.Random; 9 | 10 | public class FlowerBlock extends Block { 11 | 12 | protected FlowerBlock(int var1, int var2) { 13 | super(var1); 14 | this.textureId = var2; 15 | this.setPhysics(true); 16 | float var3 = 0.2F; 17 | this.setBounds(0.5F - var3, 0.0F, 0.5F - var3, var3 + 0.5F, var3 * 3.0F, var3 + 0.5F); 18 | } 19 | 20 | public void update(Level level, int x, int y, int z, Random rand) { 21 | if(!level.growTrees) { 22 | int var6 = level.getTile(x, y - 1, z); 23 | if(!level.isLit(x, y, z) || var6 != DIRT.id && var6 != GRASS.id) { 24 | level.setTile(x, y, z, 0); 25 | } 26 | 27 | } 28 | } 29 | 30 | private void render(ShapeRenderer var1, float var2, float var3, float var4) { 31 | int var15; 32 | int var5 = (var15 = this.getTextureId(15)) % 16 << 4; 33 | int var6 = var15 / 16 << 4; 34 | float var16 = (float)var5 / 256.0F; 35 | float var17 = ((float)var5 + 15.99F) / 256.0F; 36 | float var7 = (float)var6 / 256.0F; 37 | float var18 = ((float)var6 + 15.99F) / 256.0F; 38 | 39 | for(int var8 = 0; var8 < 2; ++var8) { 40 | float var9 = (float)((double) MathHelper.sin((float) var8 * 3.1415927F / 2.0F + 0.7853982F) * 0.5D); 41 | float var10 = (float)((double)MathHelper.cos((float)var8 * 3.1415927F / 2.0F + 0.7853982F) * 0.5D); 42 | float var11 = var2 + 0.5F - var9; 43 | var9 += var2 + 0.5F; 44 | float var13 = var3 + 1.0F; 45 | float var14 = var4 + 0.5F - var10; 46 | var10 += var4 + 0.5F; 47 | var1.vertexUV(var11, var13, var14, var17, var7); 48 | var1.vertexUV(var9, var13, var10, var16, var7); 49 | var1.vertexUV(var9, var3, var10, var16, var18); 50 | var1.vertexUV(var11, var3, var14, var17, var18); 51 | var1.vertexUV(var9, var13, var10, var17, var7); 52 | var1.vertexUV(var11, var13, var14, var16, var7); 53 | var1.vertexUV(var11, var3, var14, var16, var18); 54 | var1.vertexUV(var9, var3, var10, var17, var18); 55 | } 56 | 57 | } 58 | 59 | public final boolean isOpaque() { 60 | return false; 61 | } 62 | 63 | public final boolean isSolid() { 64 | return false; 65 | } 66 | 67 | public final void renderPreview(ShapeRenderer var1) { 68 | var1.normal(0.0F, 1.0F, 0.0F); 69 | var1.begin(); 70 | this.render(var1, 0.0F, 0.4F, -0.3F); 71 | var1.end(); 72 | } 73 | 74 | public final boolean isCube() { 75 | return false; 76 | } 77 | 78 | public final boolean render(Level var1, int var2, int var3, int var4, ShapeRenderer var5) { 79 | float var6 = var1.getBrightness(var2, var3, var4); 80 | var5.color(var6, var6, var6); 81 | this.render(var5, (float)var2, (float)var3, (float)var4); 82 | return true; 83 | } 84 | 85 | public final void renderFullbright(ShapeRenderer shapeRenderer) { 86 | shapeRenderer.color(1.0F, 1.0F, 1.0F); 87 | this.render(shapeRenderer, (float)-2, 0.0F, 0.0F); 88 | } 89 | 90 | @Override 91 | public AABB getCollisionBox(int x, int y, int z) 92 | { 93 | return null; 94 | } 95 | } 96 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/level/tile/GlassBlock.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.level.tile; 2 | 3 | import com.mojang.minecraft.level.Level; 4 | 5 | public final class GlassBlock extends Block { 6 | 7 | private boolean showNeighborSides = false; 8 | 9 | 10 | protected GlassBlock(int var1, int var2, boolean var3) { 11 | super(20, 49); 12 | } 13 | 14 | public final boolean isSolid() { 15 | return false; 16 | } 17 | 18 | public final boolean canRenderSide(Level level, int x, int y, int z, int side) { 19 | int var6 = level.getTile(x, y, z); 20 | return !this.showNeighborSides && var6 == this.id?false:super.canRenderSide(level, x, y, z, side); 21 | } 22 | 23 | public final boolean isOpaque() { 24 | return false; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/level/tile/GrassBlock.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.level.tile; 2 | 3 | import com.mojang.minecraft.level.Level; 4 | 5 | import java.util.Random; 6 | 7 | public final class GrassBlock extends Block { 8 | 9 | protected GrassBlock(int var1) { 10 | super(2); 11 | this.textureId = 3; 12 | this.setPhysics(true); 13 | } 14 | 15 | protected final int getTextureId(int texture) { 16 | return texture == 1?0:(texture == 0?2:3); 17 | } 18 | 19 | public final void update(Level level, int x, int y, int z, Random rand) { 20 | if(rand.nextInt(4) == 0) { 21 | if(!level.isLit(x, y, z)) { 22 | level.setTile(x, y, z, DIRT.id); 23 | } else { 24 | for(int var9 = 0; var9 < 4; ++var9) { 25 | int var6 = x + rand.nextInt(3) - 1; 26 | int var7 = y + rand.nextInt(5) - 3; 27 | int var8 = z + rand.nextInt(3) - 1; 28 | if(level.getTile(var6, var7, var8) == DIRT.id && level.isLit(var6, var7, var8)) { 29 | level.setTile(var6, var7, var8, GRASS.id); 30 | } 31 | } 32 | 33 | } 34 | } 35 | } 36 | 37 | public final int getDrop() { 38 | return DIRT.getDrop(); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/level/tile/LeavesBaseBlock.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.level.tile; 2 | 3 | import com.mojang.minecraft.level.Level; 4 | 5 | public class LeavesBaseBlock extends Block { 6 | 7 | private boolean showNeighborSides = true; 8 | 9 | 10 | protected LeavesBaseBlock(int var1, int var2, boolean var3) { 11 | super(var1, var2); 12 | } 13 | 14 | public final boolean isSolid() { 15 | return false; 16 | } 17 | 18 | public final boolean canRenderSide(Level level, int x, int y, int z, int side) { 19 | int var6 = level.getTile(x, y, z); 20 | return !this.showNeighborSides && var6 == this.id?false:super.canRenderSide(level, x, y, z, side); 21 | } 22 | 23 | public final boolean isOpaque() { 24 | return false; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/level/tile/LeavesBlock.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.level.tile; 2 | 3 | public final class LeavesBlock extends LeavesBaseBlock { 4 | 5 | protected LeavesBlock(int var1, int var2) { 6 | super(18, 22, true); 7 | } 8 | 9 | public final int getDropCount() { 10 | return random.nextInt(10) == 0?1:0; 11 | } 12 | 13 | public final int getDrop() { 14 | return Block.SAPLING.id; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/level/tile/MetalBlock.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.level.tile; 2 | 3 | public final class MetalBlock extends Block { 4 | 5 | public MetalBlock(int var1, int var2) { 6 | super(var1); 7 | this.textureId = var2; 8 | } 9 | 10 | protected final int getTextureId(int texture) { 11 | return texture == 1?this.textureId - 16:(texture == 0?this.textureId + 16:this.textureId); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/level/tile/MushroomBlock.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.level.tile; 2 | 3 | import com.mojang.minecraft.level.Level; 4 | 5 | import java.util.Random; 6 | 7 | public final class MushroomBlock extends FlowerBlock { 8 | 9 | protected MushroomBlock(int var1, int var2) { 10 | super(var1, var2); 11 | float var3 = 0.2F; 12 | this.setBounds(0.5F - var3, 0.0F, 0.5F - var3, var3 + 0.5F, var3 * 2.0F, var3 + 0.5F); 13 | } 14 | 15 | public final void update(Level level, int x, int y, int z, Random rand) { 16 | int var6 = level.getTile(x, y - 1, z); 17 | if(level.isLit(x, y, z) || var6 != STONE.id && var6 != GRAVEL.id && var6 != COBBLESTONE.id) { 18 | level.setTile(x, y, z, 0); 19 | } 20 | 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/level/tile/OreBlock.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.level.tile; 2 | 3 | public final class OreBlock extends Block { 4 | 5 | public OreBlock(int var1, int var2) { 6 | super(var1, var2); 7 | } 8 | 9 | public final int getDrop() { 10 | return this == COAL_ORE ? SLAB.id:(this == GOLD_ORE ? GOLD_BLOCK.id:(this == IRON_ORE ? IRON_BLOCK.id:this.id)); 11 | } 12 | 13 | public final int getDropCount() { 14 | return random.nextInt(3) + 1; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/level/tile/SandBlock.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.level.tile; 2 | 3 | import com.mojang.minecraft.level.Level; 4 | import com.mojang.minecraft.level.liquid.LiquidType; 5 | 6 | public final class SandBlock extends Block { 7 | 8 | public SandBlock(int var1, int var2) { 9 | super(var1, var2); 10 | } 11 | 12 | public final void onPlace(Level level, int x, int y, int z) { 13 | this.fall(level, x, y, z); 14 | } 15 | 16 | public final void onNeighborChange(Level var1, int var2, int var3, int var4, int var5) { 17 | this.fall(var1, var2, var3, var4); 18 | } 19 | 20 | private void fall(Level var1, int var2, int var3, int var4) { 21 | int var11 = var2; 22 | int var5 = var3; 23 | int var6 = var4; 24 | 25 | while(true) { 26 | int var8 = var5 - 1; 27 | int var10; 28 | LiquidType var12; 29 | if(!((var10 = var1.getTile(var11, var8, var6)) == 0?true:((var12 = blocks[var10].getLiquidType()) == LiquidType.WATER?true:var12 == LiquidType.LAVA)) || var5 <= 0) { 30 | if(var5 != var3) { 31 | if((var10 = var1.getTile(var11, var5, var6)) > 0 && blocks[var10].getLiquidType() != LiquidType.NOT_LIQUID) { 32 | var1.setTileNoUpdate(var11, var5, var6, 0); 33 | } 34 | 35 | var1.swap(var2, var3, var4, var11, var5, var6); 36 | } 37 | 38 | return; 39 | } 40 | 41 | --var5; 42 | } 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/level/tile/SaplingBlock.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.level.tile; 2 | 3 | import com.mojang.minecraft.level.Level; 4 | 5 | import java.util.Random; 6 | 7 | public final class SaplingBlock extends FlowerBlock { 8 | 9 | protected SaplingBlock(int var1, int var2) { 10 | super(6, 15); 11 | float var3 = 0.4F; 12 | this.setBounds(0.5F - var3, 0.0F, 0.5F - var3, var3 + 0.5F, var3 * 2.0F, var3 + 0.5F); 13 | } 14 | 15 | public final void update(Level level, int x, int y, int z, Random rand) { 16 | int var6 = level.getTile(x, y - 1, z); 17 | if(level.isLit(x, y, z) && (var6 == DIRT.id || var6 == GRASS.id)) { 18 | if(rand.nextInt(5) == 0) { 19 | level.setTileNoUpdate(x, y, z, 0); 20 | if(!level.maybeGrowTree(x, y, z)) { 21 | level.setTileNoUpdate(x, y, z, this.id); 22 | } 23 | } 24 | 25 | } else { 26 | level.setTile(x, y, z, 0); 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/level/tile/SlabBlock.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.level.tile; 2 | 3 | import com.mojang.minecraft.level.Level; 4 | 5 | public final class SlabBlock extends Block { 6 | 7 | private boolean doubleSlab; 8 | 9 | 10 | public SlabBlock(int var1, boolean var2) { 11 | super(var1, 6); 12 | this.doubleSlab = var2; 13 | if(!var2) { 14 | this.setBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.5F, 1.0F); 15 | } 16 | 17 | } 18 | 19 | protected final int getTextureId(int texture) { 20 | return texture <= 1?6:5; 21 | } 22 | 23 | public final boolean isSolid() { 24 | return this.doubleSlab; 25 | } 26 | 27 | public final void onNeighborChange(Level var1, int var2, int var3, int var4, int var5) { 28 | if(this == SLAB) { 29 | ; 30 | } 31 | } 32 | 33 | public final void onAdded(Level level, int x, int y, int z) { 34 | if(this != SLAB) { 35 | super.onAdded(level, x, y, z); 36 | } 37 | 38 | if(level.getTile(x, y - 1, z) == SLAB.id) { 39 | level.setTile(x, y, z, 0); 40 | level.setTile(x, y - 1, z, DOUBLE_SLAB.id); 41 | } 42 | 43 | } 44 | 45 | public final int getDrop() { 46 | return SLAB.id; 47 | } 48 | 49 | public final boolean isCube() { 50 | return this.doubleSlab; 51 | } 52 | 53 | public final boolean canRenderSide(Level level, int x, int y, int z, int side) { 54 | if(this != SLAB) { 55 | super.canRenderSide(level, x, y, z, side); 56 | } 57 | 58 | return side == 1?true:(!super.canRenderSide(level, x, y, z, side)?false:(side == 0?true: level.getTile(x, y, z) != this.id)); 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/level/tile/SpongeBlock.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.level.tile; 2 | 3 | import com.mojang.minecraft.level.Level; 4 | 5 | public final class SpongeBlock extends Block { 6 | 7 | protected SpongeBlock(int var1) { 8 | super(19); 9 | this.textureId = 48; 10 | } 11 | 12 | public final void onAdded(Level level, int x, int y, int z) { 13 | for(int var7 = x - 2; var7 <= x + 2; ++var7) { 14 | for(int var5 = y - 2; var5 <= y + 2; ++var5) { 15 | for(int var6 = z - 2; var6 <= z + 2; ++var6) { 16 | if(level.isWater(var7, var5, var6)) { 17 | level.setTileNoNeighborChange(var7, var5, var6, 0); 18 | } 19 | } 20 | } 21 | } 22 | 23 | } 24 | 25 | public final void onRemoved(Level var1, int var2, int var3, int var4) { 26 | for(int var7 = var2 - 2; var7 <= var2 + 2; ++var7) { 27 | for(int var5 = var3 - 2; var5 <= var3 + 2; ++var5) { 28 | for(int var6 = var4 - 2; var6 <= var4 + 2; ++var6) { 29 | var1.updateNeighborsAt(var7, var5, var6, var1.getTile(var7, var5, var6)); 30 | } 31 | } 32 | } 33 | 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/level/tile/StillLiquidBlock.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.level.tile; 2 | 3 | import com.mojang.minecraft.level.Level; 4 | import com.mojang.minecraft.level.liquid.LiquidType; 5 | 6 | import java.util.Random; 7 | 8 | public final class StillLiquidBlock extends LiquidBlock { 9 | 10 | protected StillLiquidBlock(int var1, LiquidType var2) { 11 | super(var1, var2); 12 | this.movingId = var1 - 1; 13 | this.stillId = var1; 14 | this.setPhysics(false); 15 | } 16 | 17 | public final void update(Level level, int x, int y, int z, Random rand) {} 18 | 19 | public final void onNeighborChange(Level var1, int var2, int var3, int var4, int var5) { 20 | boolean var6 = false; 21 | if(var1.getTile(var2 - 1, var3, var4) == 0) { 22 | var6 = true; 23 | } 24 | 25 | if(var1.getTile(var2 + 1, var3, var4) == 0) { 26 | var6 = true; 27 | } 28 | 29 | if(var1.getTile(var2, var3, var4 - 1) == 0) { 30 | var6 = true; 31 | } 32 | 33 | if(var1.getTile(var2, var3, var4 + 1) == 0) { 34 | var6 = true; 35 | } 36 | 37 | if(var1.getTile(var2, var3 - 1, var4) == 0) { 38 | var6 = true; 39 | } 40 | 41 | if(var5 != 0) { 42 | LiquidType var7 = Block.blocks[var5].getLiquidType(); 43 | if(this.type == LiquidType.WATER && var7 == LiquidType.LAVA || var7 == LiquidType.WATER && this.type == LiquidType.LAVA) { 44 | var1.setTile(var2, var3, var4, Block.STONE.id); 45 | return; 46 | } 47 | } 48 | 49 | if(var6) { 50 | var1.setTileNoUpdate(var2, var3, var4, this.movingId); 51 | var1.addToTickNextTick(var2, var3, var4, this.movingId); 52 | } 53 | 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/level/tile/StoneBlock.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.level.tile; 2 | 3 | public final class StoneBlock extends Block { 4 | 5 | public StoneBlock(int var1, int var2) { 6 | super(var1, var2); 7 | } 8 | 9 | public final int getDrop() { 10 | return COBBLESTONE.id; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/level/tile/TNTBlock.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.level.tile; 2 | 3 | import com.mojang.minecraft.item.PrimedTnt; 4 | import com.mojang.minecraft.level.Level; 5 | import com.mojang.minecraft.particle.ParticleManager; 6 | 7 | public final class TNTBlock extends Block { 8 | 9 | public TNTBlock(int var1, int var2) { 10 | super(46, 8); 11 | } 12 | 13 | protected final int getTextureId(int texture) { 14 | return texture == 0?this.textureId + 2:(texture == 1?this.textureId + 1:this.textureId); 15 | } 16 | 17 | public final int getDropCount() { 18 | return 0; 19 | } 20 | 21 | public final void explode(Level var1, int var2, int var3, int var4) { 22 | if(!var1.creativeMode) { 23 | PrimedTnt var5; 24 | (var5 = new PrimedTnt(var1, (float)var2 + 0.5F, (float)var3 + 0.5F, (float)var4 + 0.5F)).life = random.nextInt(var5.life / 4) + var5.life / 8; 25 | var1.addEntity(var5); 26 | } 27 | 28 | } 29 | 30 | public final void spawnBreakParticles(Level level, int x, int y, int z, ParticleManager particleManager) { 31 | if(!level.creativeMode) { 32 | level.addEntity(new PrimedTnt(level, (float) x + 0.5F, (float) y + 0.5F, (float) z + 0.5F)); 33 | } else { 34 | super.spawnBreakParticles(level, x, y, z, particleManager); 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/level/tile/Tile$SoundType.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.level.tile; 2 | 3 | public enum Tile$SoundType { 4 | 5 | none("none", 0, "-", 0.0F, 0.0F), 6 | grass("grass", 1, "grass", 0.6F, 1.0F), 7 | cloth("cloth", 2, "grass", 0.7F, 1.2F), 8 | gravel("gravel", 3, "gravel", 1.0F, 1.0F), 9 | stone("stone", 4, "stone", 1.0F, 1.0F), 10 | metal("metal", 5, "stone", 1.0F, 2.0F), 11 | wood("wood", 6, "wood", 1.0F, 1.0F); 12 | public final String name; 13 | private final float volume; 14 | private final float pitch; 15 | // $FF: synthetic field 16 | private static final Tile$SoundType[] values = new Tile$SoundType[]{none, grass, cloth, gravel, stone, metal, wood}; 17 | 18 | 19 | private Tile$SoundType(String var1, int var2, String var3, float var4, float var5) { 20 | this.name = var3; 21 | this.volume = var4; 22 | this.pitch = var5; 23 | } 24 | 25 | public final float getVolume() { 26 | return this.volume / (Block.random.nextFloat() * 0.4F + 1.0F) * 0.5F; 27 | } 28 | 29 | public final float getPitch() { 30 | return this.pitch / (Block.random.nextFloat() * 0.2F + 0.9F); 31 | } 32 | 33 | } 34 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/level/tile/WoodBlock.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.level.tile; 2 | 3 | public final class WoodBlock extends Block { 4 | 5 | protected WoodBlock(int var1) { 6 | super(17); 7 | this.textureId = 20; 8 | } 9 | 10 | public final int getDropCount() { 11 | return random.nextInt(3) + 3; 12 | } 13 | 14 | public final int getDrop() { 15 | return WOOD.id; 16 | } 17 | 18 | protected final int getTextureId(int texture) { 19 | return texture == 1?21:(texture == 0?21:20); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/mob/Creeper$1.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.mob; 2 | 3 | import com.mojang.minecraft.Entity; 4 | import com.mojang.minecraft.level.tile.Block; 5 | import com.mojang.minecraft.mob.ai.BasicAttackAI; 6 | import com.mojang.minecraft.particle.TerrainParticle; 7 | import com.mojang.util.MathHelper; 8 | 9 | final class Creeper$1 extends BasicAttackAI { 10 | 11 | public static final long serialVersionUID = 0L; 12 | // $FF: synthetic field 13 | final Creeper creeper; 14 | 15 | 16 | Creeper$1(Creeper var1) { 17 | this.creeper = var1; 18 | } 19 | 20 | public final boolean attack(Entity var1) { 21 | if(!super.attack(var1)) { 22 | return false; 23 | } else { 24 | this.mob.hurt(var1, 6); 25 | return true; 26 | } 27 | } 28 | 29 | public final void beforeRemove() { 30 | float var1 = 4.0F; 31 | this.level.explode(this.mob, this.mob.x, this.mob.y, this.mob.z, var1); 32 | 33 | for(int var2 = 0; var2 < 500; ++var2) { 34 | float var3 = (float)this.random.nextGaussian() * var1 / 4.0F; 35 | float var4 = (float)this.random.nextGaussian() * var1 / 4.0F; 36 | float var5 = (float)this.random.nextGaussian() * var1 / 4.0F; 37 | float var6 = MathHelper.sqrt(var3 * var3 + var4 * var4 + var5 * var5); 38 | float var7 = var3 / var6 / var6; 39 | float var8 = var4 / var6 / var6; 40 | var6 = var5 / var6 / var6; 41 | this.level.particleEngine.spawnParticle(new TerrainParticle(this.level, this.mob.x + var3, this.mob.y + var4, this.mob.z + var5, var7, var8, var6, Block.LEAVES)); 42 | } 43 | 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/mob/Creeper.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.mob; 2 | 3 | import com.mojang.minecraft.level.Level; 4 | import com.mojang.util.MathHelper; 5 | 6 | public class Creeper extends Mob { 7 | 8 | public static final long serialVersionUID = 0L; 9 | 10 | 11 | public Creeper(Level var1, float var2, float var3, float var4) { 12 | super(var1); 13 | this.heightOffset = 1.62F; 14 | this.modelName = "creeper"; 15 | this.textureName = "/mob/creeper.png"; 16 | this.ai = new Creeper$1(this); 17 | this.ai.defaultLookAngle = 45; 18 | this.deathScore = 200; 19 | this.setPos(var2, var3, var4); 20 | } 21 | 22 | public float getBrightness(float var1) { 23 | float var2 = (float)(20 - this.health) / 20.0F; 24 | return ((MathHelper.sin((float)this.tickCount + var1) * 0.5F + 0.5F) * var2 * 0.5F + 0.25F + var2 * 0.25F) * super.getBrightness(var1); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/mob/HumanoidMob.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.mob; 2 | 3 | import com.mojang.minecraft.level.Level; 4 | import com.mojang.minecraft.model.HumanoidModel; 5 | import com.mojang.minecraft.model.Model; 6 | import com.mojang.minecraft.render.TextureManager; 7 | import org.lwjgl.opengl.GL11; 8 | 9 | public class HumanoidMob extends Mob { 10 | 11 | public static final long serialVersionUID = 0L; 12 | public boolean helmet = Math.random() < 0.20000000298023224D; 13 | public boolean armor = Math.random() < 0.20000000298023224D; 14 | 15 | 16 | public HumanoidMob(Level var1, float var2, float var3, float var4) { 17 | super(var1); 18 | this.modelName = "humanoid"; 19 | this.setPos(var2, var3, var4); 20 | } 21 | 22 | public void renderModel(TextureManager var1, float var2, float var3, float var4, float var5, float var6, float var7) { 23 | super.renderModel(var1, var2, var3, var4, var5, var6, var7); 24 | Model var9 = modelCache.getModel(this.modelName); 25 | GL11.glEnable(3008); 26 | if(this.allowAlpha) { 27 | GL11.glEnable(2884); 28 | } 29 | 30 | if(this.hasHair) { 31 | GL11.glDisable(2884); 32 | HumanoidModel var10 = null; 33 | (var10 = (HumanoidModel)var9).headwear.yaw = var10.head.yaw; 34 | var10.headwear.pitch = var10.head.pitch; 35 | var10.headwear.render(var7); 36 | GL11.glEnable(2884); 37 | } 38 | 39 | if(this.armor || this.helmet) { 40 | GL11.glBindTexture(3553, var1.load("/armor/plate.png")); 41 | GL11.glDisable(2884); 42 | HumanoidModel var8; 43 | (var8 = (HumanoidModel)modelCache.getModel("humanoid.armor")).head.render = this.helmet; 44 | var8.body.render = this.armor; 45 | var8.rightArm.render = this.armor; 46 | var8.leftArm.render = this.armor; 47 | var8.rightLeg.render = false; 48 | var8.leftLeg.render = false; 49 | HumanoidModel var11 = (HumanoidModel)var9; 50 | var8.head.yaw = var11.head.yaw; 51 | var8.head.pitch = var11.head.pitch; 52 | var8.rightArm.pitch = var11.rightArm.pitch; 53 | var8.rightArm.roll = var11.rightArm.roll; 54 | var8.leftArm.pitch = var11.leftArm.pitch; 55 | var8.leftArm.roll = var11.leftArm.roll; 56 | var8.rightLeg.pitch = var11.rightLeg.pitch; 57 | var8.leftLeg.pitch = var11.leftLeg.pitch; 58 | var8.head.render(var7); 59 | var8.body.render(var7); 60 | var8.rightArm.render(var7); 61 | var8.leftArm.render(var7); 62 | var8.rightLeg.render(var7); 63 | var8.leftLeg.render(var7); 64 | GL11.glEnable(2884); 65 | } 66 | 67 | GL11.glDisable(3008); 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/mob/Pig.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.mob; 2 | 3 | import com.mojang.minecraft.Entity; 4 | import com.mojang.minecraft.item.Item; 5 | import com.mojang.minecraft.level.Level; 6 | import com.mojang.minecraft.level.tile.Block; 7 | 8 | public class Pig extends QuadrupedMob { 9 | 10 | public static final long serialVersionUID = 0L; 11 | 12 | 13 | public Pig(Level var1, float var2, float var3, float var4) { 14 | super(var1, var2, var3, var4); 15 | this.heightOffset = 1.72F; 16 | this.modelName = "pig"; 17 | this.textureName = "/mob/pig.png"; 18 | } 19 | 20 | public void die(Entity var1) { 21 | if(var1 != null) { 22 | var1.awardKillScore(this, 10); 23 | } 24 | 25 | int var2 = (int)(Math.random() + Math.random() + 1.0D); 26 | 27 | for(int var3 = 0; var3 < var2; ++var3) { 28 | this.level.addEntity(new Item(this.level, this.x, this.y, this.z, Block.BROWN_MUSHROOM.id)); 29 | } 30 | 31 | super.die(var1); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/mob/QuadrupedMob.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.mob; 2 | 3 | import com.mojang.minecraft.level.Level; 4 | 5 | public class QuadrupedMob extends Mob { 6 | 7 | public static final long serialVersionUID = 0L; 8 | 9 | 10 | public QuadrupedMob(Level var1, float var2, float var3, float var4) { 11 | super(var1); 12 | this.setSize(1.4F, 1.2F); 13 | this.setPos(var2, var3, var4); 14 | this.modelName = "pig"; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/mob/Sheep$1.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.mob; 2 | 3 | import com.mojang.minecraft.level.tile.Block; 4 | import com.mojang.minecraft.mob.ai.BasicAI; 5 | import com.mojang.util.MathHelper; 6 | 7 | final class Sheep$1 extends BasicAI { 8 | 9 | private static final long serialVersionUID = 1L; 10 | // $FF: synthetic field 11 | final Sheep sheep; 12 | 13 | 14 | Sheep$1(Sheep var1) { 15 | this.sheep = var1; 16 | } 17 | 18 | protected final void update() { 19 | float var1 = MathHelper.sin(this.sheep.yRot * 3.1415927F / 180.0F); 20 | float var2 = MathHelper.cos(this.sheep.yRot * 3.1415927F / 180.0F); 21 | var1 = -0.7F * var1; 22 | var2 = 0.7F * var2; 23 | int var4 = (int)(this.mob.x + var1); 24 | int var3 = (int)(this.mob.y - 2.0F); 25 | int var5 = (int)(this.mob.z + var2); 26 | if(this.sheep.grazing) { 27 | if(this.level.getTile(var4, var3, var5) != Block.GRASS.id) { 28 | this.sheep.grazing = false; 29 | } else { 30 | if(++this.sheep.grazingTime == 60) { 31 | this.level.setTile(var4, var3, var5, Block.DIRT.id); 32 | if(this.random.nextInt(5) == 0) { 33 | this.sheep.hasFur = true; 34 | } 35 | } 36 | 37 | this.xxa = 0.0F; 38 | this.yya = 0.0F; 39 | this.mob.xRot = (float)(40 + this.sheep.grazingTime / 2 % 2 * 10); 40 | } 41 | } else { 42 | if(this.level.getTile(var4, var3, var5) == Block.GRASS.id) { 43 | this.sheep.grazing = true; 44 | this.sheep.grazingTime = 0; 45 | } 46 | 47 | super.update(); 48 | } 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/mob/Skeleton$1.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.mob; 2 | 3 | import com.mojang.minecraft.level.Level; 4 | import com.mojang.minecraft.mob.ai.BasicAttackAI; 5 | 6 | final class Skeleton$1 extends BasicAttackAI { 7 | 8 | public static final long serialVersionUID = 0L; 9 | // $FF: synthetic field 10 | final Skeleton parent; 11 | 12 | 13 | Skeleton$1(Skeleton var1) { 14 | this.parent = var1; 15 | } 16 | 17 | public final void tick(Level var1, Mob var2) { 18 | super.tick(var1, var2); 19 | if(var2.health > 0 && this.random.nextInt(30) == 0 && this.attackTarget != null) { 20 | this.parent.shootArrow(var1); 21 | } 22 | 23 | } 24 | 25 | public final void beforeRemove() { 26 | Skeleton.shootRandomArrow(this.parent); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/mob/Skeleton.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.mob; 2 | 3 | import com.mojang.minecraft.item.Arrow; 4 | import com.mojang.minecraft.level.Level; 5 | 6 | public class Skeleton extends Zombie { 7 | 8 | public static final long serialVersionUID = 0L; 9 | 10 | 11 | public Skeleton(Level var1, float var2, float var3, float var4) { 12 | super(var1, var2, var3, var4); 13 | this.modelName = "skeleton"; 14 | this.textureName = "/mob/skeleton.png"; 15 | Skeleton$1 var5 = new Skeleton$1(this); 16 | this.deathScore = 120; 17 | var5.runSpeed = 0.3F; 18 | var5.damage = 8; 19 | this.ai = var5; 20 | } 21 | 22 | public void shootArrow(Level var1) { 23 | var1.addEntity(new Arrow(var1, this, this.x, this.y, this.z, this.yRot + 180.0F + (float)(Math.random() * 45.0D - 22.5D), this.xRot - (float)(Math.random() * 45.0D - 10.0D), 1.0F)); 24 | } 25 | 26 | // $FF: synthetic method 27 | static void shootRandomArrow(Skeleton var0) { 28 | var0 = var0; 29 | int var1 = (int)((Math.random() + Math.random()) * 3.0D + 4.0D); 30 | 31 | for(int var2 = 0; var2 < var1; ++var2) { 32 | var0.level.addEntity(new Arrow(var0.level, var0.level.getPlayer(), var0.x, var0.y - 0.2F, var0.z, (float)Math.random() * 360.0F, -((float)Math.random()) * 60.0F, 0.4F)); 33 | } 34 | 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/mob/Spider.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.mob; 2 | 3 | import com.mojang.minecraft.level.Level; 4 | import com.mojang.minecraft.mob.ai.JumpAttackAI; 5 | 6 | public class Spider extends QuadrupedMob { 7 | 8 | public static final long serialVersionUID = 0L; 9 | 10 | 11 | public Spider(Level var1, float var2, float var3, float var4) { 12 | super(var1, var2, var3, var4); 13 | this.heightOffset = 0.72F; 14 | this.modelName = "spider"; 15 | this.textureName = "/mob/spider.png"; 16 | this.setSize(1.4F, 0.9F); 17 | this.setPos(var2, var3, var4); 18 | this.deathScore = 105; 19 | this.bobStrength = 0.0F; 20 | this.ai = new JumpAttackAI(); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/mob/Zombie.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.mob; 2 | 3 | import com.mojang.minecraft.level.Level; 4 | import com.mojang.minecraft.mob.ai.BasicAttackAI; 5 | 6 | public class Zombie extends HumanoidMob { 7 | 8 | public static final long serialVersionUID = 0L; 9 | 10 | 11 | public Zombie(Level var1, float var2, float var3, float var4) { 12 | super(var1, var2, var3, var4); 13 | this.modelName = "zombie"; 14 | this.textureName = "/mob/zombie.png"; 15 | this.heightOffset = 1.62F; 16 | BasicAttackAI var5 = new BasicAttackAI(); 17 | this.deathScore = 80; 18 | var5.defaultLookAngle = 30; 19 | var5.runSpeed = 1.0F; 20 | this.ai = var5; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/mob/ai/AI.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.mob.ai; 2 | 3 | import com.mojang.minecraft.Entity; 4 | import com.mojang.minecraft.level.Level; 5 | import com.mojang.minecraft.mob.Mob; 6 | 7 | import java.io.Serializable; 8 | 9 | public abstract class AI implements Serializable { 10 | 11 | public static final long serialVersionUID = 0L; 12 | public int defaultLookAngle = 0; 13 | 14 | 15 | public void tick(Level var1, Mob var2) {} 16 | 17 | public void beforeRemove() {} 18 | 19 | public void hurt(Entity var1, int var2) {} 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/mob/ai/BasicAI.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.mob.ai; 2 | 3 | import com.mojang.minecraft.Entity; 4 | import com.mojang.minecraft.level.Level; 5 | import com.mojang.minecraft.mob.Mob; 6 | 7 | import java.util.List; 8 | import java.util.Random; 9 | 10 | public class BasicAI extends AI { 11 | 12 | public static final long serialVersionUID = 0L; 13 | public Random random = new Random(); 14 | public float xxa; 15 | public float yya; 16 | protected float yRotA; 17 | public Level level; 18 | public Mob mob; 19 | public boolean jumping = false; 20 | protected int attackDelay = 0; 21 | public float runSpeed = 0.7F; 22 | protected int noActionTime = 0; 23 | public Entity attackTarget = null; 24 | 25 | public boolean running = false; 26 | 27 | public void tick(Level var1, Mob var2) { 28 | ++this.noActionTime; 29 | Entity var3; 30 | if(this.noActionTime > 600 && this.random.nextInt(800) == 0 && (var3 = var1.getPlayer()) != null) { 31 | float var4 = var3.x - var2.x; 32 | float var5 = var3.y - var2.y; 33 | float var6 = var3.z - var2.z; 34 | if(var4 * var4 + var5 * var5 + var6 * var6 < 1024.0F) { 35 | this.noActionTime = 0; 36 | } else { 37 | var2.remove(); 38 | } 39 | } 40 | 41 | this.level = var1; 42 | this.mob = var2; 43 | if(this.attackDelay > 0) { 44 | --this.attackDelay; 45 | } 46 | 47 | if(var2.health <= 0) { 48 | this.jumping = false; 49 | this.xxa = 0.0F; 50 | this.yya = 0.0F; 51 | this.yRotA = 0.0F; 52 | } else { 53 | this.update(); 54 | } 55 | 56 | boolean var7 = var2.isInWater(); 57 | boolean var9 = var2.isInLava(); 58 | if(this.jumping) { 59 | if(var7) { 60 | var2.yd += 0.04F; 61 | } else if(var9) { 62 | var2.yd += 0.04F; 63 | } else if(var2.onGround) { 64 | this.jumpFromGround(); 65 | } 66 | } 67 | 68 | this.xxa *= 0.98F; 69 | this.yya *= 0.98F; 70 | this.yRotA *= 0.9F; 71 | var2.travel(this.xxa, this.yya); 72 | List var11; 73 | if((var11 = var1.findEntities(var2, var2.bb.grow(0.2F, 0.0F, 0.2F))) != null && var11.size() > 0) { 74 | for(int var8 = 0; var8 < var11.size(); ++var8) { 75 | Entity var10; 76 | if((var10 = (Entity)var11.get(var8)).isPushable()) { 77 | var10.push(var2); 78 | } 79 | } 80 | } 81 | 82 | } 83 | 84 | protected void jumpFromGround() { 85 | this.mob.yd = 0.42F; 86 | } 87 | 88 | protected void update() { 89 | if(this.random.nextFloat() < 0.07F) { 90 | this.xxa = (this.random.nextFloat() - 0.5F) * this.runSpeed; 91 | this.yya = this.random.nextFloat() * this.runSpeed; 92 | } 93 | 94 | this.jumping = this.random.nextFloat() < 0.01F; 95 | if(this.random.nextFloat() < 0.04F) { 96 | this.yRotA = (this.random.nextFloat() - 0.5F) * 60.0F; 97 | } 98 | 99 | this.mob.yRot += this.yRotA; 100 | this.mob.xRot = (float)this.defaultLookAngle; 101 | if(this.attackTarget != null) { 102 | this.yya = this.runSpeed; 103 | this.jumping = this.random.nextFloat() < 0.04F; 104 | } 105 | 106 | boolean var1 = this.mob.isInWater(); 107 | boolean var2 = this.mob.isInLava(); 108 | if(var1 || var2) { 109 | this.jumping = this.random.nextFloat() < 0.8F; 110 | } 111 | 112 | } 113 | 114 | public void beforeRemove() {} 115 | 116 | public void hurt(Entity var1, int var2) { 117 | super.hurt(var1, var2); 118 | this.noActionTime = 0; 119 | } 120 | } 121 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/mob/ai/BasicAttackAI.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.mob.ai; 2 | 3 | import com.mojang.minecraft.Entity; 4 | import com.mojang.minecraft.item.Arrow; 5 | import com.mojang.minecraft.model.Vec3D; 6 | import com.mojang.util.MathHelper; 7 | 8 | public class BasicAttackAI extends BasicAI { 9 | 10 | public static final long serialVersionUID = 0L; 11 | public int damage = 6; 12 | 13 | 14 | protected void update() { 15 | super.update(); 16 | if(this.mob.health > 0) { 17 | this.doAttack(); 18 | } 19 | 20 | } 21 | 22 | protected void doAttack() { 23 | Entity var1 = this.level.getPlayer(); 24 | float var2 = 16.0F; 25 | if(this.attackTarget != null && this.attackTarget.removed) { 26 | this.attackTarget = null; 27 | } 28 | 29 | float var3; 30 | float var4; 31 | float var5; 32 | if(var1 != null && this.attackTarget == null) { 33 | var3 = var1.x - this.mob.x; 34 | var4 = var1.y - this.mob.y; 35 | var5 = var1.z - this.mob.z; 36 | if(var3 * var3 + var4 * var4 + var5 * var5 < var2 * var2) { 37 | this.attackTarget = var1; 38 | } 39 | } 40 | 41 | if(this.attackTarget != null) { 42 | var3 = this.attackTarget.x - this.mob.x; 43 | var4 = this.attackTarget.y - this.mob.y; 44 | var5 = this.attackTarget.z - this.mob.z; 45 | float var6; 46 | if((var6 = var3 * var3 + var4 * var4 + var5 * var5) > var2 * var2 * 2.0F * 2.0F && this.random.nextInt(100) == 0) { 47 | this.attackTarget = null; 48 | } 49 | 50 | if(this.attackTarget != null) { 51 | var6 = MathHelper.sqrt(var6); 52 | this.mob.yRot = (float)(Math.atan2((double)var5, (double)var3) * 180.0D / 3.1415927410125732D) - 90.0F; 53 | this.mob.xRot = -((float)(Math.atan2((double)var4, (double)var6) * 180.0D / 3.1415927410125732D)); 54 | if(MathHelper.sqrt(var3 * var3 + var4 * var4 + var5 * var5) < 2.0F && this.attackDelay == 0) { 55 | this.attack(this.attackTarget); 56 | } 57 | } 58 | 59 | } 60 | } 61 | 62 | public boolean attack(Entity var1) { 63 | if(this.level.clip(new Vec3D(this.mob.x, this.mob.y, this.mob.z), new Vec3D(var1.x, var1.y, var1.z)) != null) { 64 | return false; 65 | } else { 66 | this.mob.attackTime = 5; 67 | this.attackDelay = this.random.nextInt(20) + 10; 68 | int var2 = (int)((this.random.nextFloat() + this.random.nextFloat()) / 2.0F * (float)this.damage + 1.0F); 69 | var1.hurt(this.mob, var2); 70 | this.noActionTime = 0; 71 | return true; 72 | } 73 | } 74 | 75 | public void hurt(Entity var1, int var2) { 76 | super.hurt(var1, var2); 77 | if(var1 instanceof Arrow) { 78 | var1 = ((Arrow)var1).getOwner(); 79 | } 80 | 81 | if(var1 != null && !var1.getClass().equals(this.mob.getClass())) { 82 | this.attackTarget = var1; 83 | } 84 | 85 | } 86 | } 87 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/mob/ai/JumpAttackAI.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.mob.ai; 2 | 3 | public class JumpAttackAI extends BasicAttackAI { 4 | 5 | public static final long serialVersionUID = 0L; 6 | 7 | 8 | public JumpAttackAI() { 9 | this.runSpeed *= 0.8F; 10 | } 11 | 12 | protected void jumpFromGround() { 13 | if(this.attackTarget == null) { 14 | super.jumpFromGround(); 15 | } else { 16 | this.mob.xd = 0.0F; 17 | this.mob.zd = 0.0F; 18 | this.mob.moveRelative(0.0F, 1.0F, 0.6F); 19 | this.mob.yd = 0.5F; 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/model/AnimalModel.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.model; 2 | 3 | import com.mojang.util.MathHelper; 4 | 5 | public class AnimalModel extends Model { 6 | 7 | public ModelPart head = new ModelPart(0, 0); 8 | public ModelPart body; 9 | public ModelPart leg1; 10 | public ModelPart leg2; 11 | public ModelPart leg3; 12 | public ModelPart leg4; 13 | 14 | 15 | public AnimalModel(int var1, float var2) { 16 | this.head.setBounds(-4.0F, -4.0F, -8.0F, 8, 8, 8, 0.0F); 17 | this.head.setPosition(0.0F, (float)(18 - var1), -6.0F); 18 | this.body = new ModelPart(28, 8); 19 | this.body.setBounds(-5.0F, -10.0F, -7.0F, 10, 16, 8, 0.0F); 20 | this.body.setPosition(0.0F, (float)(17 - var1), 2.0F); 21 | this.leg1 = new ModelPart(0, 16); 22 | this.leg1.setBounds(-2.0F, 0.0F, -2.0F, 4, var1, 4, 0.0F); 23 | this.leg1.setPosition(-3.0F, (float)(24 - var1), 7.0F); 24 | this.leg2 = new ModelPart(0, 16); 25 | this.leg2.setBounds(-2.0F, 0.0F, -2.0F, 4, var1, 4, 0.0F); 26 | this.leg2.setPosition(3.0F, (float)(24 - var1), 7.0F); 27 | this.leg3 = new ModelPart(0, 16); 28 | this.leg3.setBounds(-2.0F, 0.0F, -2.0F, 4, var1, 4, 0.0F); 29 | this.leg3.setPosition(-3.0F, (float)(24 - var1), -5.0F); 30 | this.leg4 = new ModelPart(0, 16); 31 | this.leg4.setBounds(-2.0F, 0.0F, -2.0F, 4, var1, 4, 0.0F); 32 | this.leg4.setPosition(3.0F, (float)(24 - var1), -5.0F); 33 | } 34 | 35 | public final void render(float var1, float var2, float var3, float var4, float var5, float var6) { 36 | this.head.yaw = var4 / 57.295776F; 37 | this.head.pitch = var5 / 57.295776F; 38 | this.body.pitch = 1.5707964F; 39 | this.leg1.pitch = MathHelper.cos(var1 * 0.6662F) * 1.4F * var2; 40 | this.leg2.pitch = MathHelper.cos(var1 * 0.6662F + 3.1415927F) * 1.4F * var2; 41 | this.leg3.pitch = MathHelper.cos(var1 * 0.6662F + 3.1415927F) * 1.4F * var2; 42 | this.leg4.pitch = MathHelper.cos(var1 * 0.6662F) * 1.4F * var2; 43 | this.head.render(var6); 44 | this.body.render(var6); 45 | this.leg1.render(var6); 46 | this.leg2.render(var6); 47 | this.leg3.render(var6); 48 | this.leg4.render(var6); 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/model/CreeperModel.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.model; 2 | 3 | import com.mojang.util.MathHelper; 4 | 5 | public final class CreeperModel extends Model { 6 | 7 | private ModelPart head = new ModelPart(0, 0); 8 | private ModelPart unused; 9 | private ModelPart body; 10 | private ModelPart leg1; 11 | private ModelPart leg2; 12 | private ModelPart leg3; 13 | private ModelPart leg4; 14 | 15 | 16 | public CreeperModel() { 17 | this.head.setBounds(-4.0F, -8.0F, -4.0F, 8, 8, 8, 0.0F); 18 | this.unused = new ModelPart(32, 0); 19 | this.unused.setBounds(-4.0F, -8.0F, -4.0F, 8, 8, 8, 0.0F + 0.5F); 20 | this.body = new ModelPart(16, 16); 21 | this.body.setBounds(-4.0F, 0.0F, -2.0F, 8, 12, 4, 0.0F); 22 | this.leg1 = new ModelPart(0, 16); 23 | this.leg1.setBounds(-2.0F, 0.0F, -2.0F, 4, 6, 4, 0.0F); 24 | this.leg1.setPosition(-2.0F, 12.0F, 4.0F); 25 | this.leg2 = new ModelPart(0, 16); 26 | this.leg2.setBounds(-2.0F, 0.0F, -2.0F, 4, 6, 4, 0.0F); 27 | this.leg2.setPosition(2.0F, 12.0F, 4.0F); 28 | this.leg3 = new ModelPart(0, 16); 29 | this.leg3.setBounds(-2.0F, 0.0F, -2.0F, 4, 6, 4, 0.0F); 30 | this.leg3.setPosition(-2.0F, 12.0F, -4.0F); 31 | this.leg4 = new ModelPart(0, 16); 32 | this.leg4.setBounds(-2.0F, 0.0F, -2.0F, 4, 6, 4, 0.0F); 33 | this.leg4.setPosition(2.0F, 12.0F, -4.0F); 34 | } 35 | 36 | public final void render(float var1, float var2, float var3, float var4, float var5, float var6) { 37 | this.head.yaw = var4 / 57.295776F; 38 | this.head.pitch = var5 / 57.295776F; 39 | this.leg1.pitch = MathHelper.cos(var1 * 0.6662F) * 1.4F * var2; 40 | this.leg2.pitch = MathHelper.cos(var1 * 0.6662F + 3.1415927F) * 1.4F * var2; 41 | this.leg3.pitch = MathHelper.cos(var1 * 0.6662F + 3.1415927F) * 1.4F * var2; 42 | this.leg4.pitch = MathHelper.cos(var1 * 0.6662F) * 1.4F * var2; 43 | this.head.render(var6); 44 | this.body.render(var6); 45 | this.leg1.render(var6); 46 | this.leg2.render(var6); 47 | this.leg3.render(var6); 48 | this.leg4.render(var6); 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/model/HumanoidModel.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.model; 2 | 3 | import com.mojang.util.MathHelper; 4 | 5 | public class HumanoidModel extends Model { 6 | 7 | public ModelPart head; 8 | public ModelPart headwear; 9 | public ModelPart body; 10 | public ModelPart rightArm; 11 | public ModelPart leftArm; 12 | public ModelPart rightLeg; 13 | public ModelPart leftLeg; 14 | 15 | 16 | public HumanoidModel() { 17 | this(0.0F); 18 | } 19 | 20 | public HumanoidModel(float var1) { 21 | this.head = new ModelPart(0, 0); 22 | this.head.setBounds(-4.0F, -8.0F, -4.0F, 8, 8, 8, var1); 23 | this.headwear = new ModelPart(32, 0); 24 | this.headwear.setBounds(-4.0F, -8.0F, -4.0F, 8, 8, 8, var1 + 0.5F); 25 | this.body = new ModelPart(16, 16); 26 | this.body.setBounds(-4.0F, 0.0F, -2.0F, 8, 12, 4, var1); 27 | this.rightArm = new ModelPart(40, 16); 28 | this.rightArm.setBounds(-3.0F, -2.0F, -2.0F, 4, 12, 4, var1); 29 | this.rightArm.setPosition(-5.0F, 2.0F, 0.0F); 30 | this.leftArm = new ModelPart(40, 16); 31 | this.leftArm.mirror = true; 32 | this.leftArm.setBounds(-1.0F, -2.0F, -2.0F, 4, 12, 4, var1); 33 | this.leftArm.setPosition(5.0F, 2.0F, 0.0F); 34 | this.rightLeg = new ModelPart(0, 16); 35 | this.rightLeg.setBounds(-2.0F, 0.0F, -2.0F, 4, 12, 4, var1); 36 | this.rightLeg.setPosition(-2.0F, 12.0F, 0.0F); 37 | this.leftLeg = new ModelPart(0, 16); 38 | this.leftLeg.mirror = true; 39 | this.leftLeg.setBounds(-2.0F, 0.0F, -2.0F, 4, 12, 4, var1); 40 | this.leftLeg.setPosition(2.0F, 12.0F, 0.0F); 41 | } 42 | 43 | public final void render(float var1, float var2, float var3, float var4, float var5, float var6) { 44 | this.setRotationAngles(var1, var2, var3, var4, var5, var6); 45 | this.head.render(var6); 46 | this.body.render(var6); 47 | this.rightArm.render(var6); 48 | this.leftArm.render(var6); 49 | this.rightLeg.render(var6); 50 | this.leftLeg.render(var6); 51 | } 52 | 53 | public void setRotationAngles(float var1, float var2, float var3, float var4, float var5, float var6) { 54 | this.head.yaw = var4 / 57.295776F; 55 | this.head.pitch = var5 / 57.295776F; 56 | this.rightArm.pitch = MathHelper.cos(var1 * 0.6662F + 3.1415927F) * 2.0F * var2; 57 | this.rightArm.roll = (MathHelper.cos(var1 * 0.2312F) + 1.0F) * var2; 58 | this.leftArm.pitch = MathHelper.cos(var1 * 0.6662F) * 2.0F * var2; 59 | this.leftArm.roll = (MathHelper.cos(var1 * 0.2812F) - 1.0F) * var2; 60 | this.rightLeg.pitch = MathHelper.cos(var1 * 0.6662F) * 1.4F * var2; 61 | this.leftLeg.pitch = MathHelper.cos(var1 * 0.6662F + 3.1415927F) * 1.4F * var2; 62 | this.rightArm.roll += MathHelper.cos(var3 * 0.09F) * 0.05F + 0.05F; 63 | this.leftArm.roll -= MathHelper.cos(var3 * 0.09F) * 0.05F + 0.05F; 64 | this.rightArm.pitch += MathHelper.sin(var3 * 0.067F) * 0.05F; 65 | this.leftArm.pitch -= MathHelper.sin(var3 * 0.067F) * 0.05F; 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/model/Model.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.model; 2 | 3 | 4 | public abstract class Model { 5 | 6 | public float attackOffset; 7 | 8 | 9 | public void render(float var1, float var2, float var3, float var4, float var5, float var6) {} 10 | } 11 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/model/ModelManager.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.model; 2 | 3 | public final class ModelManager { 4 | 5 | private HumanoidModel human = new HumanoidModel(0.0F); 6 | private HumanoidModel armoredHuman = new HumanoidModel(1.0F); 7 | private CreeperModel creeper = new CreeperModel(); 8 | private SkeletonModel skeleton = new SkeletonModel(); 9 | private ZombieModel zombie = new ZombieModel(); 10 | private AnimalModel pig = new PigModel(); 11 | private AnimalModel sheep = new SheepModel(); 12 | private SpiderModel spider = new SpiderModel(); 13 | private SheepFurModel sheepFur = new SheepFurModel(); 14 | 15 | 16 | public final Model getModel(String var1) { 17 | return (Model)(var1.equals("humanoid")?this.human:(var1.equals("humanoid.armor")?this.armoredHuman:(var1.equals("creeper")?this.creeper:(var1.equals("skeleton")?this.skeleton:(var1.equals("zombie")?this.zombie:(var1.equals("pig")?this.pig:(var1.equals("sheep")?this.sheep:(var1.equals("spider")?this.spider:(var1.equals("sheep.fur")?this.sheepFur:null))))))))); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/model/PigModel.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.model; 2 | 3 | public final class PigModel extends AnimalModel { 4 | 5 | public PigModel() { 6 | super(6, 0.0F); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/model/SheepFurModel.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.model; 2 | 3 | public final class SheepFurModel extends AnimalModel { 4 | 5 | public SheepFurModel() { 6 | super(12, 0.0F); 7 | this.head = new ModelPart(0, 0); 8 | this.head.setBounds(-3.0F, -4.0F, -4.0F, 6, 6, 6, 0.6F); 9 | this.head.setPosition(0.0F, 6.0F, -8.0F); 10 | this.body = new ModelPart(28, 8); 11 | this.body.setBounds(-4.0F, -10.0F, -7.0F, 8, 16, 6, 1.75F); 12 | this.body.setPosition(0.0F, 5.0F, 2.0F); 13 | float var1 = 0.5F; 14 | this.leg1 = new ModelPart(0, 16); 15 | this.leg1.setBounds(-2.0F, 0.0F, -2.0F, 4, 6, 4, var1); 16 | this.leg1.setPosition(-3.0F, 12.0F, 7.0F); 17 | this.leg2 = new ModelPart(0, 16); 18 | this.leg2.setBounds(-2.0F, 0.0F, -2.0F, 4, 6, 4, var1); 19 | this.leg2.setPosition(3.0F, 12.0F, 7.0F); 20 | this.leg3 = new ModelPart(0, 16); 21 | this.leg3.setBounds(-2.0F, 0.0F, -2.0F, 4, 6, 4, var1); 22 | this.leg3.setPosition(-3.0F, 12.0F, -5.0F); 23 | this.leg4 = new ModelPart(0, 16); 24 | this.leg4.setBounds(-2.0F, 0.0F, -2.0F, 4, 6, 4, var1); 25 | this.leg4.setPosition(3.0F, 12.0F, -5.0F); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/model/SheepModel.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.model; 2 | 3 | public final class SheepModel extends AnimalModel { 4 | 5 | public SheepModel() { 6 | super(12, 0.0F); 7 | this.head = new ModelPart(0, 0); 8 | this.head.setBounds(-3.0F, -4.0F, -6.0F, 6, 6, 8, 0.0F); 9 | this.head.setPosition(0.0F, 6.0F, -8.0F); 10 | this.body = new ModelPart(28, 8); 11 | this.body.setBounds(-4.0F, -10.0F, -7.0F, 8, 16, 6, 0.0F); 12 | this.body.setPosition(0.0F, 5.0F, 2.0F); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/model/SkeletonModel.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.model; 2 | 3 | public final class SkeletonModel extends ZombieModel { 4 | 5 | public SkeletonModel() { 6 | this.rightArm = new ModelPart(40, 16); 7 | this.rightArm.setBounds(-1.0F, -2.0F, -1.0F, 2, 12, 2, 0.0F); 8 | this.rightArm.setPosition(-5.0F, 2.0F, 0.0F); 9 | this.leftArm = new ModelPart(40, 16); 10 | this.leftArm.mirror = true; 11 | this.leftArm.setBounds(-1.0F, -2.0F, -1.0F, 2, 12, 2, 0.0F); 12 | this.leftArm.setPosition(5.0F, 2.0F, 0.0F); 13 | this.rightLeg = new ModelPart(0, 16); 14 | this.rightLeg.setBounds(-1.0F, 0.0F, -1.0F, 2, 12, 2, 0.0F); 15 | this.rightLeg.setPosition(-2.0F, 12.0F, 0.0F); 16 | this.leftLeg = new ModelPart(0, 16); 17 | this.leftLeg.mirror = true; 18 | this.leftLeg.setBounds(-1.0F, 0.0F, -1.0F, 2, 12, 2, 0.0F); 19 | this.leftLeg.setPosition(2.0F, 12.0F, 0.0F); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/model/TexturedQuad.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.model; 2 | 3 | public final class TexturedQuad { 4 | 5 | public Vertex[] vertices; 6 | 7 | 8 | private TexturedQuad(Vertex[] var1) { 9 | this.vertices = var1; 10 | } 11 | 12 | public TexturedQuad(Vertex[] var1, int var2, int var3, int var4, int var5) { 13 | this(var1); 14 | float var7 = 0.0015625F; 15 | float var6 = 0.003125F; 16 | var1[0] = var1[0].create((float)var4 / 64.0F - var7, (float)var3 / 32.0F + var6); 17 | var1[1] = var1[1].create((float)var2 / 64.0F + var7, (float)var3 / 32.0F + var6); 18 | var1[2] = var1[2].create((float)var2 / 64.0F + var7, (float)var5 / 32.0F - var6); 19 | var1[3] = var1[3].create((float)var4 / 64.0F - var7, (float)var5 / 32.0F - var6); 20 | } 21 | 22 | public TexturedQuad(Vertex[] var1, float var2, float var3, float var4, float var5) { 23 | this(var1); 24 | var1[0] = var1[0].create(var4, var3); 25 | var1[1] = var1[1].create(var2, var3); 26 | var1[2] = var1[2].create(var2, var5); 27 | var1[3] = var1[3].create(var4, var5); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/model/Vec3D.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.model; 2 | 3 | import com.mojang.util.MathHelper; 4 | 5 | public final class Vec3D { 6 | 7 | public float x; 8 | public float y; 9 | public float z; 10 | 11 | 12 | public Vec3D(float var1, float var2, float var3) { 13 | this.x = var1; 14 | this.y = var2; 15 | this.z = var3; 16 | } 17 | 18 | public final Vec3D subtract(Vec3D var1) { 19 | return new Vec3D(this.x - var1.x, this.y - var1.y, this.z - var1.z); 20 | } 21 | 22 | public final Vec3D normalize() { 23 | float var1 = MathHelper.sqrt(this.x * this.x + this.y * this.y + this.z * this.z); 24 | return new Vec3D(this.x / var1, this.y / var1, this.z / var1); 25 | } 26 | 27 | public final Vec3D add(float var1, float var2, float var3) { 28 | return new Vec3D(this.x + var1, this.y + var2, this.z + var3); 29 | } 30 | 31 | public final float distance(Vec3D var1) { 32 | float var2 = var1.x - this.x; 33 | float var3 = var1.y - this.y; 34 | float var4 = var1.z - this.z; 35 | return MathHelper.sqrt(var2 * var2 + var3 * var3 + var4 * var4); 36 | } 37 | 38 | public final float distanceSquared(Vec3D var1) { 39 | float var2 = var1.x - this.x; 40 | float var3 = var1.y - this.y; 41 | float var4 = var1.z - this.z; 42 | return var2 * var2 + var3 * var3 + var4 * var4; 43 | } 44 | 45 | public final Vec3D getXIntersection(Vec3D var1, float var2) { 46 | float var3 = var1.x - this.x; 47 | float var4 = var1.y - this.y; 48 | float var5 = var1.z - this.z; 49 | return var3 * var3 < 1.0E-7F?null:((var2 = (var2 - this.x) / var3) >= 0.0F && var2 <= 1.0F?new Vec3D(this.x + var3 * var2, this.y + var4 * var2, this.z + var5 * var2):null); 50 | } 51 | 52 | public final Vec3D getYIntersection(Vec3D var1, float var2) { 53 | float var3 = var1.x - this.x; 54 | float var4 = var1.y - this.y; 55 | float var5 = var1.z - this.z; 56 | return var4 * var4 < 1.0E-7F?null:((var2 = (var2 - this.y) / var4) >= 0.0F && var2 <= 1.0F?new Vec3D(this.x + var3 * var2, this.y + var4 * var2, this.z + var5 * var2):null); 57 | } 58 | 59 | public final Vec3D getZIntersection(Vec3D var1, float var2) { 60 | float var3 = var1.x - this.x; 61 | float var4 = var1.y - this.y; 62 | float var5; 63 | return (var5 = var1.z - this.z) * var5 < 1.0E-7F?null:((var2 = (var2 - this.z) / var5) >= 0.0F && var2 <= 1.0F?new Vec3D(this.x + var3 * var2, this.y + var4 * var2, this.z + var5 * var2):null); 64 | } 65 | 66 | public final String toString() { 67 | return "(" + this.x + ", " + this.y + ", " + this.z + ")"; 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/model/Vertex.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.model; 2 | 3 | public final class Vertex { 4 | 5 | public Vec3D vector; 6 | public float u; 7 | public float v; 8 | 9 | 10 | public Vertex(float var1, float var2, float var3, float var4, float var5) { 11 | this(new Vec3D(var1, var2, var3), var4, var5); 12 | } 13 | 14 | public final Vertex create(float var1, float var2) { 15 | return new Vertex(this, var1, var2); 16 | } 17 | 18 | private Vertex(Vertex var1, float var2, float var3) { 19 | this.vector = var1.vector; 20 | this.u = var2; 21 | this.v = var3; 22 | } 23 | 24 | private Vertex(Vec3D var1, float var2, float var3) { 25 | this.vector = var1; 26 | this.u = var2; 27 | this.v = var3; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/model/ZombieModel.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.model; 2 | 3 | import com.mojang.util.MathHelper; 4 | 5 | public class ZombieModel extends HumanoidModel { 6 | 7 | public final void setRotationAngles(float var1, float var2, float var3, float var4, float var5, float var6) { 8 | super.setRotationAngles(var1, var2, var3, var4, var5, var6); 9 | var1 = MathHelper.sin(this.attackOffset * 3.1415927F); 10 | var2 = MathHelper.sin((1.0F - (1.0F - this.attackOffset) * (1.0F - this.attackOffset)) * 3.1415927F); 11 | this.rightArm.roll = 0.0F; 12 | this.leftArm.roll = 0.0F; 13 | this.rightArm.yaw = -(0.1F - var1 * 0.6F); 14 | this.leftArm.yaw = 0.1F - var1 * 0.6F; 15 | this.rightArm.pitch = -1.5707964F; 16 | this.leftArm.pitch = -1.5707964F; 17 | this.rightArm.pitch -= var1 * 1.2F - var2 * 0.4F; 18 | this.leftArm.pitch -= var1 * 1.2F - var2 * 0.4F; 19 | this.rightArm.roll += MathHelper.cos(var3 * 0.09F) * 0.05F + 0.05F; 20 | this.leftArm.roll -= MathHelper.cos(var3 * 0.09F) * 0.05F + 0.05F; 21 | this.rightArm.pitch += MathHelper.sin(var3 * 0.067F) * 0.05F; 22 | this.leftArm.pitch -= MathHelper.sin(var3 * 0.067F) * 0.05F; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/net/NetworkManager.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.net; 2 | 3 | import com.mojang.minecraft.Minecraft; 4 | import com.mojang.minecraft.gui.ErrorScreen; 5 | import com.mojang.net.NetworkHandler; 6 | import java.io.ByteArrayOutputStream; 7 | import java.util.ArrayList; 8 | import java.util.HashMap; 9 | import java.util.Iterator; 10 | import java.util.List; 11 | 12 | public class NetworkManager 13 | { 14 | public NetworkManager(Minecraft minecraft, String server, int port, String username, String key) 15 | { 16 | minecraft.online = true; 17 | 18 | this.minecraft = minecraft; 19 | 20 | players = new HashMap(); 21 | 22 | new ServerConnectThread(this, server, port, username, key, minecraft).start(); 23 | } 24 | 25 | public ByteArrayOutputStream levelData; 26 | 27 | public NetworkHandler netHandler; 28 | 29 | public Minecraft minecraft; 30 | 31 | public boolean successful = false; 32 | public boolean levelLoaded = false; 33 | 34 | public HashMap players; 35 | 36 | public void sendBlockChange(int x, int y, int z, int mode, int block) 37 | { 38 | netHandler.send(PacketType.PLAYER_SET_BLOCK, new Object[] {x, y, z, mode, block}); 39 | } 40 | 41 | public void error(Exception e) 42 | { 43 | netHandler.close(); 44 | 45 | ErrorScreen errorScreen = new ErrorScreen("Disconnected!", e.getMessage()); 46 | 47 | minecraft.setCurrentScreen(errorScreen); 48 | 49 | e.printStackTrace(); 50 | } 51 | 52 | public boolean isConnected() 53 | { 54 | return netHandler != null && netHandler.connected; 55 | } 56 | 57 | public List getPlayers() 58 | { 59 | ArrayList list = new ArrayList(); 60 | 61 | list.add(minecraft.session.username); 62 | 63 | Iterator playerIterator = this.players.values().iterator(); 64 | 65 | while(playerIterator.hasNext()) 66 | { 67 | NetworkPlayer networkPlayer = (NetworkPlayer)playerIterator.next(); 68 | 69 | list.add(networkPlayer.name); 70 | } 71 | 72 | return list; 73 | } 74 | } 75 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/net/PacketType.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.net; 2 | 3 | public class PacketType 4 | { 5 | private PacketType(Class ... classes) 6 | { 7 | opcode = (byte)(nextOpcode++); 8 | packets[opcode] = this; 9 | params = new Class[classes.length]; 10 | 11 | int length = 0; 12 | 13 | for(int classNumber = 0; classNumber < classes.length; classNumber++) 14 | { 15 | Class class_ = classes[classNumber]; 16 | 17 | params[classNumber] = class_; 18 | 19 | if(class_ == Long.TYPE) 20 | { 21 | length += 8; 22 | } else if(class_ == Integer.TYPE) { 23 | length += 4; 24 | } else if(class_ == Short.TYPE) { 25 | length += 2; 26 | } else if(class_ == Byte.TYPE) { 27 | ++length; 28 | } else if(class_ == Float.TYPE) { 29 | length += 4; 30 | } else if(class_ == Double.TYPE) { 31 | length += 8; 32 | } else if(class_ == byte[].class) { 33 | length += 1024; 34 | } else if(class_ == String.class) { 35 | length += 64; 36 | } 37 | } 38 | 39 | this.length = length; 40 | } 41 | 42 | public static final PacketType[] packets = new PacketType[256]; 43 | 44 | public static final PacketType IDENTIFICATION = new PacketType(new Class[] {Byte.TYPE, String.class, String.class, Byte.TYPE}); 45 | public static final PacketType LEVEL_INIT; 46 | public static final PacketType LEVEL_DATA; 47 | public static final PacketType LEVEL_FINALIZE; 48 | public static final PacketType PLAYER_SET_BLOCK; 49 | public static final PacketType BLOCK_CHANGE; 50 | public static final PacketType SPAWN_PLAYER; 51 | public static final PacketType POSITION_ROTATION; 52 | public static final PacketType POSITION_ROTATION_UPDATE; 53 | public static final PacketType POSITION_UPDATE; 54 | public static final PacketType ROTATION_UPDATE; 55 | public static final PacketType DESPAWN_PLAYER; 56 | public static final PacketType CHAT_MESSAGE; 57 | public static final PacketType DISCONNECT; 58 | public static final PacketType UPDATE_PLAYER_TYPE; 59 | 60 | public int length; 61 | private static int nextOpcode; 62 | public byte opcode; 63 | public Class[] params; 64 | 65 | static 66 | { 67 | new PacketType(new Class[0]); 68 | 69 | LEVEL_INIT = new PacketType(new Class[0]); 70 | LEVEL_DATA = new PacketType(new Class[] {Short.TYPE, byte[].class, Byte.TYPE}); 71 | LEVEL_FINALIZE = new PacketType(new Class[] {Short.TYPE, Short.TYPE, Short.TYPE}); 72 | PLAYER_SET_BLOCK = new PacketType(new Class[] {Short.TYPE, Short.TYPE, Short.TYPE, Byte.TYPE, Byte.TYPE}); 73 | BLOCK_CHANGE = new PacketType(new Class[] {Short.TYPE, Short.TYPE, Short.TYPE, Byte.TYPE}); 74 | SPAWN_PLAYER = new PacketType(new Class[] {Byte.TYPE, String.class, Short.TYPE, Short.TYPE, Short.TYPE, Byte.TYPE, Byte.TYPE}); 75 | POSITION_ROTATION = new PacketType(new Class[] {Byte.TYPE, Short.TYPE, Short.TYPE, Short.TYPE, Byte.TYPE, Byte.TYPE}); 76 | POSITION_ROTATION_UPDATE = new PacketType(new Class[] {Byte.TYPE, Byte.TYPE, Byte.TYPE, Byte.TYPE, Byte.TYPE, Byte.TYPE}); 77 | POSITION_UPDATE = new PacketType(new Class[] {Byte.TYPE, Byte.TYPE, Byte.TYPE, Byte.TYPE}); 78 | ROTATION_UPDATE = new PacketType(new Class[] {Byte.TYPE, Byte.TYPE, Byte.TYPE}); 79 | DESPAWN_PLAYER = new PacketType(new Class[] {Byte.TYPE}); 80 | CHAT_MESSAGE = new PacketType(new Class[] {Byte.TYPE, String.class}); 81 | DISCONNECT = new PacketType(new Class[] {String.class}); 82 | UPDATE_PLAYER_TYPE = new PacketType(new Class[] {Byte.TYPE}); 83 | 84 | nextOpcode = 0; 85 | } 86 | } 87 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/net/PositionUpdate.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.net; 2 | 3 | public class PositionUpdate 4 | { 5 | public PositionUpdate(float x, float y, float z, float yaw, float pitch) 6 | { 7 | this.x = x; 8 | this.y = y; 9 | this.z = z; 10 | this.yaw = yaw; 11 | this.pitch = pitch; 12 | 13 | rotation = true; 14 | position = true; 15 | } 16 | 17 | public PositionUpdate(float x, float y, float z) 18 | { 19 | this.x = x; 20 | this.y = y; 21 | this.z = z; 22 | 23 | position = true; 24 | rotation = false; 25 | } 26 | 27 | public PositionUpdate(float yaw, float pitch) 28 | { 29 | this.yaw = yaw; 30 | this.pitch = pitch; 31 | 32 | rotation = true; 33 | position = false; 34 | } 35 | 36 | public float x; 37 | public float y; 38 | public float z; 39 | 40 | public float yaw; 41 | public float pitch; 42 | 43 | public boolean rotation = false; 44 | public boolean position = false; 45 | } 46 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/net/ServerConnectThread.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.net; 2 | 3 | import com.oyasunadev.mcraft.client.util.Constants; 4 | import com.mojang.minecraft.Minecraft; 5 | import com.mojang.minecraft.gui.ErrorScreen; 6 | import com.mojang.net.NetworkHandler; 7 | 8 | public class ServerConnectThread extends Thread 9 | { 10 | public ServerConnectThread(NetworkManager networkManager, String server, int port, String username, String key, Minecraft minecraft) { 11 | super(); 12 | 13 | netManager = networkManager; 14 | 15 | this.server = server; 16 | this.port = port; 17 | 18 | this.username = username; 19 | this.key = key; 20 | 21 | this.minecraft = minecraft; 22 | } 23 | 24 | @Override 25 | public void run() 26 | { 27 | try { 28 | netManager.netHandler = new NetworkHandler(server, port); 29 | netManager.netHandler.netManager = netManager; 30 | 31 | netManager.netHandler.send(PacketType.IDENTIFICATION, new Object[]{Byte.valueOf(Constants.PROTOCOL_VERSION), this.username, this.key, Integer.valueOf(Constants.CLIENT_TYPE)}); 32 | 33 | netManager.successful = true; 34 | } catch (Exception var3) { 35 | minecraft.online = false; 36 | 37 | minecraft.networkManager = null; 38 | 39 | minecraft.setCurrentScreen(new ErrorScreen("Failed to connect", "You failed to connect to the server. It\'s probably down!")); 40 | 41 | netManager.successful = false; 42 | } 43 | } 44 | 45 | private String server; 46 | private int port; 47 | 48 | private String username; 49 | private String key; 50 | 51 | private Minecraft minecraft; 52 | 53 | private NetworkManager netManager; 54 | } 55 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/net/SkinDownloadThread.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.net; 2 | 3 | import java.net.HttpURLConnection; 4 | import java.net.URL; 5 | import javax.imageio.ImageIO; 6 | 7 | public class SkinDownloadThread extends Thread 8 | { 9 | public SkinDownloadThread(NetworkPlayer networkPlayer) 10 | { 11 | super(); 12 | 13 | this.player = networkPlayer; 14 | } 15 | 16 | @Override 17 | public void run() 18 | { 19 | HttpURLConnection connection = null; 20 | 21 | try { 22 | connection = (HttpURLConnection)new URL("http://www.minecraft.net/skin/" + player.name + ".png").openConnection(); 23 | 24 | connection.setDoInput(true); 25 | connection.setDoOutput(false); 26 | 27 | connection.connect(); 28 | 29 | if(connection.getResponseCode() == 404) 30 | { 31 | return; 32 | } 33 | 34 | player.newTexture = ImageIO.read(connection.getInputStream()); 35 | } catch(Exception e) { 36 | e.printStackTrace(); 37 | } finally { 38 | if(connection != null) 39 | { 40 | connection.disconnect(); 41 | } 42 | } 43 | } 44 | 45 | private NetworkPlayer player; 46 | } 47 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/particle/ParticleManager.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.particle; 2 | 3 | import com.mojang.minecraft.Entity; 4 | import com.mojang.minecraft.level.Level; 5 | import com.mojang.minecraft.render.TextureManager; 6 | import java.util.ArrayList; 7 | import java.util.List; 8 | 9 | public final class ParticleManager { 10 | 11 | public List[] particles = new List[2]; 12 | public TextureManager textureManager; 13 | 14 | 15 | public ParticleManager(Level var1, TextureManager var2) { 16 | if(var1 != null) { 17 | var1.particleEngine = this; 18 | } 19 | 20 | this.textureManager = var2; 21 | 22 | for(int var3 = 0; var3 < 2; ++var3) { 23 | this.particles[var3] = new ArrayList(); 24 | } 25 | 26 | } 27 | 28 | public final void spawnParticle(Entity var1) { 29 | Particle var3; 30 | int var2 = (var3 = (Particle)var1).getParticleTexture(); 31 | this.particles[var2].add(var3); 32 | } 33 | 34 | public final void tick() { 35 | for(int var1 = 0; var1 < 2; ++var1) { 36 | for(int var2 = 0; var2 < this.particles[var1].size(); ++var2) { 37 | Particle var3; 38 | (var3 = (Particle)this.particles[var1].get(var2)).tick(); 39 | if(var3.removed) { 40 | this.particles[var1].remove(var2--); 41 | } 42 | } 43 | } 44 | 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/particle/SmokeParticle.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.particle; 2 | 3 | import com.mojang.minecraft.level.Level; 4 | import com.mojang.minecraft.render.ShapeRenderer; 5 | 6 | public class SmokeParticle extends Particle { 7 | 8 | private static final long serialVersionUID = 1L; 9 | 10 | 11 | public SmokeParticle(Level var1, float var2, float var3, float var4) { 12 | super(var1, var2, var3, var4, 0.0F, 0.0F, 0.0F); 13 | this.xd *= 0.1F; 14 | this.yd *= 0.1F; 15 | this.zd *= 0.1F; 16 | this.rCol = this.gCol = this.bCol = (float)(Math.random() * 0.30000001192092896D); 17 | this.lifetime = (int)(8.0D / (Math.random() * 0.8D + 0.2D)); 18 | this.noPhysics = true; 19 | } 20 | 21 | public void render(ShapeRenderer var1, float var2, float var3, float var4, float var5, float var6, float var7) { 22 | super.render(var1, var2, var3, var4, var5, var6, var7); 23 | } 24 | 25 | public void tick() { 26 | this.xo = this.x; 27 | this.yo = this.y; 28 | this.zo = this.z; 29 | if(this.age++ >= this.lifetime) { 30 | this.remove(); 31 | } 32 | 33 | this.tex = 7 - (this.age << 3) / this.lifetime; 34 | this.yd = (float)((double)this.yd + 0.004D); 35 | this.move(this.xd, this.yd, this.zd); 36 | this.xd *= 0.96F; 37 | this.yd *= 0.96F; 38 | this.zd *= 0.96F; 39 | if(this.onGround) { 40 | this.xd *= 0.7F; 41 | this.zd *= 0.7F; 42 | } 43 | 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/particle/TerrainParticle.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.particle; 2 | 3 | import com.mojang.minecraft.level.Level; 4 | import com.mojang.minecraft.level.tile.Block; 5 | import com.mojang.minecraft.render.ShapeRenderer; 6 | 7 | public class TerrainParticle extends Particle { 8 | 9 | private static final long serialVersionUID = 1L; 10 | 11 | 12 | public TerrainParticle(Level var1, float var2, float var3, float var4, float var5, float var6, float var7, Block var8) { 13 | super(var1, var2, var3, var4, var5, var6, var7); 14 | this.tex = var8.textureId; 15 | this.gravity = var8.particleGravity; 16 | this.rCol = this.gCol = this.bCol = 0.6F; 17 | } 18 | 19 | public int getParticleTexture() { 20 | return 1; 21 | } 22 | 23 | public void render(ShapeRenderer var1, float var2, float var3, float var4, float var5, float var6, float var7) { 24 | float var8; 25 | float var9 = (var8 = ((float)(this.tex % 16) + this.uo / 4.0F) / 16.0F) + 0.015609375F; 26 | float var10; 27 | float var11 = (var10 = ((float)(this.tex / 16) + this.vo / 4.0F) / 16.0F) + 0.015609375F; 28 | float var12 = 0.1F * this.size; 29 | float var13 = this.xo + (this.x - this.xo) * var2; 30 | float var14 = this.yo + (this.y - this.yo) * var2; 31 | float var15 = this.zo + (this.z - this.zo) * var2; 32 | var2 = this.getBrightness(var2); 33 | var1.color(var2 * this.rCol, var2 * this.gCol, var2 * this.bCol); 34 | var1.vertexUV(var13 - var3 * var12 - var6 * var12, var14 - var4 * var12, var15 - var5 * var12 - var7 * var12, var8, var11); 35 | var1.vertexUV(var13 - var3 * var12 + var6 * var12, var14 + var4 * var12, var15 - var5 * var12 + var7 * var12, var8, var10); 36 | var1.vertexUV(var13 + var3 * var12 + var6 * var12, var14 + var4 * var12, var15 + var5 * var12 + var7 * var12, var9, var10); 37 | var1.vertexUV(var13 + var3 * var12 - var6 * var12, var14 - var4 * var12, var15 + var5 * var12 - var7 * var12, var9, var11); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/particle/WaterDropParticle.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.particle; 2 | 3 | import com.mojang.minecraft.level.Level; 4 | import com.mojang.minecraft.render.ShapeRenderer; 5 | 6 | public class WaterDropParticle extends Particle { 7 | 8 | private static final long serialVersionUID = 1L; 9 | 10 | 11 | public WaterDropParticle(Level var1, float var2, float var3, float var4) { 12 | super(var1, var2, var3, var4, 0.0F, 0.0F, 0.0F); 13 | this.xd *= 0.3F; 14 | this.yd = (float)Math.random() * 0.2F + 0.1F; 15 | this.zd *= 0.3F; 16 | this.rCol = 1.0F; 17 | this.gCol = 1.0F; 18 | this.bCol = 1.0F; 19 | this.tex = 16; 20 | this.setSize(0.01F, 0.01F); 21 | this.lifetime = (int)(8.0D / (Math.random() * 0.8D + 0.2D)); 22 | } 23 | 24 | public void render(ShapeRenderer var1, float var2, float var3, float var4, float var5, float var6, float var7) { 25 | super.render(var1, var2, var3, var4, var5, var6, var7); 26 | } 27 | 28 | public void tick() { 29 | this.xo = this.x; 30 | this.yo = this.y; 31 | this.zo = this.z; 32 | this.yd = (float)((double)this.yd - 0.06D); 33 | this.move(this.xd, this.yd, this.zd); 34 | this.xd *= 0.98F; 35 | this.yd *= 0.98F; 36 | this.zd *= 0.98F; 37 | if(this.lifetime-- <= 0) { 38 | this.remove(); 39 | } 40 | 41 | if(this.onGround) { 42 | if(Math.random() < 0.5D) { 43 | this.remove(); 44 | } 45 | 46 | this.xd *= 0.7F; 47 | this.zd *= 0.7F; 48 | } 49 | 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/player/InputHandler.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.player; 2 | 3 | public class InputHandler 4 | { 5 | public float xxa = 0.0F; 6 | public float yya = 0.0F; 7 | public boolean jumping = false; 8 | 9 | public boolean running = false; 10 | 11 | public void updateMovement() 12 | { 13 | } 14 | 15 | public void resetKeys() 16 | { 17 | } 18 | 19 | public void setKeyState(int key, boolean state) 20 | { 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/player/InputHandlerImpl.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.player; 2 | 3 | import com.mojang.minecraft.GameSettings; 4 | 5 | public class InputHandlerImpl extends InputHandler 6 | { 7 | public InputHandlerImpl(GameSettings gameSettings) 8 | { 9 | settings = gameSettings; 10 | } 11 | 12 | @Override 13 | public void updateMovement() 14 | { 15 | xxa = 0.0F; 16 | yya = 0.0F; 17 | 18 | if(keyStates[0]) 19 | { 20 | yya--; 21 | } 22 | 23 | if(keyStates[1]) 24 | { 25 | yya++; 26 | } 27 | 28 | if(keyStates[2]) 29 | { 30 | xxa--; 31 | } 32 | 33 | if(keyStates[3]) 34 | { 35 | xxa++; 36 | } 37 | 38 | jumping = keyStates[4]; 39 | 40 | running = keyStates[5]; 41 | } 42 | 43 | @Override 44 | public void resetKeys() 45 | { 46 | for(int i = 0; i < keyStates.length; ++i) 47 | { 48 | keyStates[i] = false; 49 | } 50 | 51 | } 52 | 53 | @Override 54 | public void setKeyState(int key, boolean state) 55 | { 56 | byte index = -1; 57 | 58 | if(key == settings.forwardKey.key) 59 | { 60 | index = 0; 61 | } 62 | 63 | if(key == settings.backKey.key) 64 | { 65 | index = 1; 66 | } 67 | 68 | if(key == settings.leftKey.key) 69 | { 70 | index = 2; 71 | } 72 | 73 | if(key == settings.rightKey.key) 74 | { 75 | index = 3; 76 | } 77 | 78 | if(key == settings.jumpKey.key) 79 | { 80 | index = 4; 81 | } 82 | 83 | if(key == settings.runKey.key) 84 | { 85 | index = 5; 86 | } 87 | 88 | if(index >= 0) 89 | { 90 | keyStates[index] = state; 91 | } 92 | 93 | } 94 | 95 | private boolean[] keyStates = new boolean[100]; 96 | private GameSettings settings; 97 | } 98 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/player/Inventory.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.player; 2 | 3 | import com.mojang.minecraft.SessionData; 4 | import com.mojang.minecraft.level.tile.Block; 5 | 6 | import java.io.Serializable; 7 | 8 | public class Inventory implements Serializable { 9 | 10 | public static final long serialVersionUID = 0L; 11 | public static final int POP_TIME_DURATION = 5; 12 | public int[] slots = new int[9]; 13 | public int[] count = new int[9]; 14 | public int[] popTime = new int[9]; 15 | public int selected = 0; 16 | 17 | 18 | public Inventory() { 19 | for(int var1 = 0; var1 < 9; ++var1) { 20 | this.slots[var1] = -1; 21 | this.count[var1] = 0; 22 | } 23 | 24 | } 25 | 26 | public int getSelected() { 27 | return this.slots[this.selected]; 28 | } 29 | 30 | private int getSlot(int var1) { 31 | for(int var2 = 0; var2 < this.slots.length; ++var2) { 32 | if(var1 == this.slots[var2]) { 33 | return var2; 34 | } 35 | } 36 | 37 | return -1; 38 | } 39 | 40 | public void grabTexture(int var1, boolean var2) { 41 | int var3; 42 | if((var3 = this.getSlot(var1)) >= 0) { 43 | this.selected = var3; 44 | } else { 45 | if(var2 && var1 > 0 && SessionData.allowedBlocks.contains(Block.blocks[var1])) { 46 | this.replaceSlot(Block.blocks[var1]); 47 | } 48 | 49 | } 50 | } 51 | 52 | public void swapPaint(int var1) { 53 | if(var1 > 0) { 54 | var1 = 1; 55 | } 56 | 57 | if(var1 < 0) { 58 | var1 = -1; 59 | } 60 | 61 | for(this.selected -= var1; this.selected < 0; this.selected += this.slots.length) { 62 | ; 63 | } 64 | 65 | while(this.selected >= this.slots.length) { 66 | this.selected -= this.slots.length; 67 | } 68 | 69 | } 70 | 71 | public void replaceSlot(int var1) { 72 | if(var1 >= 0) { 73 | this.replaceSlot((Block)SessionData.allowedBlocks.get(var1)); 74 | } 75 | 76 | } 77 | 78 | public void replaceSlot(Block var1) { 79 | if(var1 != null) { 80 | int var2; 81 | if((var2 = this.getSlot(var1.id)) >= 0) { 82 | this.slots[var2] = this.slots[this.selected]; 83 | } 84 | 85 | this.slots[this.selected] = var1.id; 86 | } 87 | 88 | } 89 | 90 | public boolean addResource(int var1) { 91 | int var2; 92 | if((var2 = this.getSlot(var1)) < 0) { 93 | var2 = this.getSlot(-1); 94 | } 95 | 96 | if(var2 < 0) { 97 | return false; 98 | } else if(this.count[var2] >= 99) { 99 | return false; 100 | } else { 101 | this.slots[var2] = var1; 102 | ++this.count[var2]; 103 | this.popTime[var2] = 5; 104 | return true; 105 | } 106 | } 107 | 108 | public void tick() { 109 | for(int var1 = 0; var1 < this.popTime.length; ++var1) { 110 | if(this.popTime[var1] > 0) { 111 | --this.popTime[var1]; 112 | } 113 | } 114 | 115 | } 116 | 117 | public boolean removeResource(int var1) { 118 | if((var1 = this.getSlot(var1)) < 0) { 119 | return false; 120 | } else { 121 | if(--this.count[var1] <= 0) { 122 | this.slots[var1] = -1; 123 | } 124 | 125 | return true; 126 | } 127 | } 128 | } 129 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/player/Player$1.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.player; 2 | 3 | import com.mojang.minecraft.mob.ai.BasicAI; 4 | 5 | // PlayerAI 6 | public class Player$1 extends BasicAI 7 | { 8 | public Player$1(Player player) 9 | { 10 | this.player = player; 11 | } 12 | 13 | @Override 14 | protected void update() 15 | { 16 | this.jumping = player.input.jumping; 17 | 18 | this.xxa = player.input.xxa; 19 | this.yya = player.input.yya; 20 | 21 | running = player.input.running; 22 | } 23 | 24 | public static final long serialVersionUID = 0L; 25 | 26 | private Player player; 27 | } 28 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/render/ChunkDirtyDistanceComparator.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.render; 2 | 3 | import com.mojang.minecraft.player.Player; 4 | import java.util.Comparator; 5 | 6 | public class ChunkDirtyDistanceComparator implements Comparator 7 | { 8 | public ChunkDirtyDistanceComparator(Player player) 9 | { 10 | this.player = player; 11 | } 12 | 13 | @Override 14 | public int compare(Object o1, Object o2) 15 | { 16 | Chunk chunk = (Chunk)o1; 17 | Chunk other = (Chunk)o2; 18 | 19 | if(chunk.visible || !other.visible) 20 | { 21 | if(other.visible) 22 | { 23 | float sqDist = chunk.distanceSquared(player); 24 | float otherSqDist = other.distanceSquared(player); 25 | 26 | if(sqDist == otherSqDist) 27 | { 28 | return 0; 29 | } else if(sqDist > otherSqDist) { 30 | return -1; 31 | } else { 32 | return 1; 33 | } 34 | } else { 35 | return 1; 36 | } 37 | } else { 38 | return -1; 39 | } 40 | } 41 | 42 | private Player player; 43 | } 44 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/render/ChunkDistanceComparator.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.render; 2 | 3 | import com.mojang.minecraft.player.Player; 4 | import java.util.Comparator; 5 | 6 | public class ChunkDistanceComparator implements Comparator 7 | { 8 | public ChunkDistanceComparator(Player player) 9 | { 10 | this.player = player; 11 | } 12 | 13 | @Override 14 | public int compare(Object o1, Object o2) 15 | { 16 | Chunk chunk = (Chunk)o1; 17 | Chunk other = (Chunk)o2; 18 | 19 | float sqDist = chunk.distanceSquared(player); 20 | float otherSqDist = other.distanceSquared(player); 21 | 22 | if(sqDist == otherSqDist) 23 | { 24 | return 0; 25 | } else if(sqDist > otherSqDist) { 26 | return -1; 27 | } else { 28 | return 1; 29 | } 30 | } 31 | 32 | private Player player; 33 | } 34 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/render/Frustrum.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.render; 2 | 3 | 4 | public class Frustrum { 5 | 6 | public float[][] frustrum = new float[16][16]; 7 | public float[] projection = new float[16]; 8 | public float[] modelview = new float[16]; 9 | public float[] clipping = new float[16]; 10 | 11 | 12 | public final boolean isBoxInFrustrum(float var1, float var2, float var3, float var4, float var5, float var6) { 13 | for(int var7 = 0; var7 < 6; ++var7) { 14 | if(this.frustrum[var7][0] * var1 + this.frustrum[var7][1] * var2 + this.frustrum[var7][2] * var3 + this.frustrum[var7][3] <= 0.0F && this.frustrum[var7][0] * var4 + this.frustrum[var7][1] * var2 + this.frustrum[var7][2] * var3 + this.frustrum[var7][3] <= 0.0F && this.frustrum[var7][0] * var1 + this.frustrum[var7][1] * var5 + this.frustrum[var7][2] * var3 + this.frustrum[var7][3] <= 0.0F && this.frustrum[var7][0] * var4 + this.frustrum[var7][1] * var5 + this.frustrum[var7][2] * var3 + this.frustrum[var7][3] <= 0.0F && this.frustrum[var7][0] * var1 + this.frustrum[var7][1] * var2 + this.frustrum[var7][2] * var6 + this.frustrum[var7][3] <= 0.0F && this.frustrum[var7][0] * var4 + this.frustrum[var7][1] * var2 + this.frustrum[var7][2] * var6 + this.frustrum[var7][3] <= 0.0F && this.frustrum[var7][0] * var1 + this.frustrum[var7][1] * var5 + this.frustrum[var7][2] * var6 + this.frustrum[var7][3] <= 0.0F && this.frustrum[var7][0] * var4 + this.frustrum[var7][1] * var5 + this.frustrum[var7][2] * var6 + this.frustrum[var7][3] <= 0.0F) { 15 | return false; 16 | } 17 | } 18 | 19 | return true; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/render/HeldBlock.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.render; 2 | 3 | import com.mojang.minecraft.Minecraft; 4 | import com.mojang.minecraft.level.tile.Block; 5 | 6 | public class HeldBlock 7 | { 8 | public HeldBlock(Minecraft minecraft) 9 | { 10 | this.minecraft = minecraft; 11 | } 12 | 13 | public Minecraft minecraft; 14 | 15 | public Block block = null; 16 | 17 | public float pos = 0.0F; 18 | public float lastPos = 0.0F; 19 | 20 | public int offset = 0; 21 | 22 | public boolean moving = false; 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/render/texture/TextureFX.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.render.texture; 2 | 3 | public class TextureFX 4 | { 5 | public TextureFX(int textureID) 6 | { 7 | this.textureId = textureID; 8 | } 9 | 10 | public byte[] textureData = new byte[1024]; 11 | public int textureId; 12 | public boolean anaglyph = false; 13 | 14 | public void animate() 15 | { 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/render/texture/TextureLavaFX.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.render.texture; 2 | 3 | import com.mojang.minecraft.level.tile.Block; 4 | import com.mojang.util.MathHelper; 5 | 6 | public final class TextureLavaFX extends TextureFX { 7 | 8 | private float[] red = new float[256]; 9 | private float[] green = new float[256]; 10 | private float[] blue = new float[256]; 11 | private float[] alpha = new float[256]; 12 | 13 | 14 | public TextureLavaFX() { 15 | super(Block.LAVA.textureId); 16 | } 17 | 18 | public final void animate() { 19 | int var1; 20 | int var2; 21 | float var3; 22 | int var5; 23 | int var6; 24 | int var7; 25 | int var8; 26 | int var9; 27 | for(var1 = 0; var1 < 16; ++var1) { 28 | for(var2 = 0; var2 < 16; ++var2) { 29 | var3 = 0.0F; 30 | int var4 = (int)(MathHelper.sin((float) var2 * 3.1415927F * 2.0F / 16.0F) * 1.2F); 31 | var5 = (int)(MathHelper.sin((float)var1 * 3.1415927F * 2.0F / 16.0F) * 1.2F); 32 | 33 | for(var6 = var1 - 1; var6 <= var1 + 1; ++var6) { 34 | for(var7 = var2 - 1; var7 <= var2 + 1; ++var7) { 35 | var8 = var6 + var4 & 15; 36 | var9 = var7 + var5 & 15; 37 | var3 += this.red[var8 + (var9 << 4)]; 38 | } 39 | } 40 | 41 | this.green[var1 + (var2 << 4)] = var3 / 10.0F + (this.blue[(var1 & 15) + ((var2 & 15) << 4)] + this.blue[(var1 + 1 & 15) + ((var2 & 15) << 4)] + this.blue[(var1 + 1 & 15) + ((var2 + 1 & 15) << 4)] + this.blue[(var1 & 15) + ((var2 + 1 & 15) << 4)]) / 4.0F * 0.8F; 42 | this.blue[var1 + (var2 << 4)] += this.alpha[var1 + (var2 << 4)] * 0.01F; 43 | if(this.blue[var1 + (var2 << 4)] < 0.0F) { 44 | this.blue[var1 + (var2 << 4)] = 0.0F; 45 | } 46 | 47 | this.alpha[var1 + (var2 << 4)] -= 0.06F; 48 | if(Math.random() < 0.005D) { 49 | this.alpha[var1 + (var2 << 4)] = 1.5F; 50 | } 51 | } 52 | } 53 | 54 | float[] var10 = this.green; 55 | this.green = this.red; 56 | this.red = var10; 57 | 58 | for(var2 = 0; var2 < 256; ++var2) { 59 | if((var3 = this.red[var2] * 2.0F) > 1.0F) { 60 | var3 = 1.0F; 61 | } 62 | 63 | if(var3 < 0.0F) { 64 | var3 = 0.0F; 65 | } 66 | 67 | var5 = (int)(var3 * 100.0F + 155.0F); 68 | var6 = (int)(var3 * var3 * 255.0F); 69 | var7 = (int)(var3 * var3 * var3 * var3 * 128.0F); 70 | if(this.anaglyph) { 71 | var8 = (var5 * 30 + var6 * 59 + var7 * 11) / 100; 72 | var9 = (var5 * 30 + var6 * 70) / 100; 73 | var1 = (var5 * 30 + var7 * 70) / 100; 74 | var5 = var8; 75 | var6 = var9; 76 | var7 = var1; 77 | } 78 | 79 | this.textureData[var2 << 2] = (byte)var5; 80 | this.textureData[(var2 << 2) + 1] = (byte)var6; 81 | this.textureData[(var2 << 2) + 2] = (byte)var7; 82 | this.textureData[(var2 << 2) + 3] = -1; 83 | } 84 | 85 | } 86 | } 87 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/render/texture/TextureWaterFX.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.render.texture; 2 | 3 | import com.mojang.minecraft.level.tile.Block; 4 | 5 | public final class TextureWaterFX extends TextureFX { 6 | 7 | private float[] red = new float[256]; 8 | private float[] blue = new float[256]; 9 | private float[] green = new float[256]; 10 | private float[] alpha = new float[256]; 11 | private int updates = 0; 12 | 13 | 14 | public TextureWaterFX() { 15 | super(Block.WATER.textureId); 16 | } 17 | 18 | public final void animate() { 19 | ++this.updates; 20 | 21 | int var1; 22 | int var2; 23 | float var3; 24 | int var4; 25 | int var5; 26 | int var6; 27 | for(var1 = 0; var1 < 16; ++var1) { 28 | for(var2 = 0; var2 < 16; ++var2) { 29 | var3 = 0.0F; 30 | 31 | for(var4 = var1 - 1; var4 <= var1 + 1; ++var4) { 32 | var5 = var4 & 15; 33 | var6 = var2 & 15; 34 | var3 += this.red[var5 + (var6 << 4)]; 35 | } 36 | 37 | this.blue[var1 + (var2 << 4)] = var3 / 3.3F + this.green[var1 + (var2 << 4)] * 0.8F; 38 | } 39 | } 40 | 41 | for(var1 = 0; var1 < 16; ++var1) { 42 | for(var2 = 0; var2 < 16; ++var2) { 43 | this.green[var1 + (var2 << 4)] += this.alpha[var1 + (var2 << 4)] * 0.05F; 44 | if(this.green[var1 + (var2 << 4)] < 0.0F) { 45 | this.green[var1 + (var2 << 4)] = 0.0F; 46 | } 47 | 48 | this.alpha[var1 + (var2 << 4)] -= 0.1F; 49 | if(Math.random() < 0.05D) { 50 | this.alpha[var1 + (var2 << 4)] = 0.5F; 51 | } 52 | } 53 | } 54 | 55 | float[] var8 = this.blue; 56 | this.blue = this.red; 57 | this.red = var8; 58 | 59 | for(var2 = 0; var2 < 256; ++var2) { 60 | if((var3 = this.red[var2]) > 1.0F) { 61 | var3 = 1.0F; 62 | } 63 | 64 | if(var3 < 0.0F) { 65 | var3 = 0.0F; 66 | } 67 | 68 | float var9 = var3 * var3; 69 | var5 = (int)(32.0F + var9 * 32.0F); 70 | var6 = (int)(50.0F + var9 * 64.0F); 71 | var1 = 255; 72 | int var10 = (int)(146.0F + var9 * 50.0F); 73 | if(this.anaglyph) { 74 | var1 = (var5 * 30 + var6 * 59 + 2805) / 100; 75 | var4 = (var5 * 30 + var6 * 70) / 100; 76 | int var7 = (var5 * 30 + 17850) / 100; 77 | var5 = var1; 78 | var6 = var4; 79 | var1 = var7; 80 | } 81 | 82 | this.textureData[var2 << 2] = (byte)var5; 83 | this.textureData[(var2 << 2) + 1] = (byte)var6; 84 | this.textureData[(var2 << 2) + 2] = (byte)var1; 85 | this.textureData[(var2 << 2) + 3] = (byte)var10; 86 | } 87 | 88 | } 89 | } 90 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/sound/Audio.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.sound; 2 | 3 | public interface Audio 4 | { 5 | boolean play(int[] var1, int[] var2, int var3); 6 | } 7 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/sound/AudioInfo.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.sound; 2 | 3 | public class AudioInfo 4 | { 5 | public float volume = 1.0F; 6 | 7 | public int update(short[] var1, int var2) 8 | { 9 | return 0; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/sound/BaseSoundPos.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.sound; 2 | 3 | import com.mojang.minecraft.Entity; 4 | import com.mojang.util.MathHelper; 5 | 6 | public abstract class BaseSoundPos implements SoundPos 7 | { 8 | public BaseSoundPos(Entity listener) 9 | { 10 | this.listener = listener; 11 | } 12 | 13 | private Entity listener; 14 | 15 | public float getRotationDiff(float x, float y) 16 | { 17 | x -= listener.x; 18 | y -= listener.z; 19 | 20 | float var3 = MathHelper.sqrt(x * x + y * y); 21 | 22 | x /= var3; 23 | y /= var3; 24 | 25 | if((var3 /= 2.0F) > 1.0F) 26 | { 27 | var3 = 1.0F; 28 | } 29 | 30 | float var4 = MathHelper.cos(-listener.yRot * 0.017453292F + 3.1415927F); 31 | 32 | return (MathHelper.sin(-listener.yRot * 0.017453292F + 3.1415927F) * y - var4 * x) * var3; 33 | } 34 | 35 | public float getDistanceSq(float x, float y, float z) 36 | { 37 | x -= listener.x; 38 | y -= listener.y; 39 | float var4 = z - listener.z; 40 | 41 | var4 = MathHelper.sqrt(x * x + y * y + var4 * var4); 42 | 43 | if((var4 = 1.0F - var4 / 32.0F) < 0.0F) 44 | { 45 | var4 = 0.0F; 46 | } 47 | 48 | return var4; 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/sound/EntitySoundPos.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.sound; 2 | 3 | import com.mojang.minecraft.Entity; 4 | 5 | public class EntitySoundPos extends BaseSoundPos 6 | { 7 | public EntitySoundPos(Entity source, Entity listener) 8 | { 9 | super(listener); 10 | 11 | this.source = source; 12 | } 13 | 14 | @Override 15 | public float getRotationDiff() 16 | { 17 | return super.getRotationDiff(source.x, source.z); 18 | } 19 | 20 | @Override 21 | public float getDistanceSq() 22 | { 23 | return super.getDistanceSq(source.x, source.y, source.z); 24 | } 25 | 26 | private Entity source; 27 | } 28 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/sound/LevelSoundPos.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.sound; 2 | 3 | import com.mojang.minecraft.Entity; 4 | 5 | public final class LevelSoundPos extends BaseSoundPos 6 | { 7 | public LevelSoundPos(float x, float y, float z, Entity listener) 8 | { 9 | super(listener); 10 | 11 | this.x = x; 12 | this.y = y; 13 | this.z = z; 14 | } 15 | 16 | @Override 17 | public float getRotationDiff() 18 | { 19 | return super.getRotationDiff(x, z); 20 | } 21 | 22 | @Override 23 | public float getDistanceSq() 24 | { 25 | return super.getDistanceSq(x, y, z); 26 | } 27 | 28 | private float x; 29 | private float y; 30 | private float z; 31 | } 32 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/sound/Music.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.sound; 2 | 3 | import de.jarnbjo.ogg.LogicalOggStreamImpl; 4 | import de.jarnbjo.ogg.OggFormatException; 5 | import de.jarnbjo.ogg.OnDemandUrlStream; 6 | import de.jarnbjo.vorbis.VorbisFormatException; 7 | import de.jarnbjo.vorbis.VorbisStream; 8 | 9 | import java.io.IOException; 10 | import java.net.URL; 11 | import java.nio.ByteBuffer; 12 | 13 | // TODO. 14 | public final class Music implements Audio { 15 | 16 | ByteBuffer playing = ByteBuffer.allocate(176400); 17 | ByteBuffer current = ByteBuffer.allocate(176400); 18 | private ByteBuffer processing = null; 19 | ByteBuffer previous = null; 20 | VorbisStream stream; 21 | SoundPlayer player; 22 | boolean finished = false; 23 | boolean stopped = false; 24 | 25 | 26 | public Music(SoundPlayer var1, URL var2) { 27 | this.player = var1; 28 | try 29 | { 30 | LogicalOggStreamImpl var3 = (LogicalOggStreamImpl)(new OnDemandUrlStream(var2)).getLogicalStreams().iterator().next(); 31 | this.stream = new VorbisStream(var3); 32 | } catch (VorbisFormatException e) { 33 | e.printStackTrace(); 34 | } catch (OggFormatException e) { 35 | e.printStackTrace(); 36 | } catch (IOException e) { 37 | e.printStackTrace(); 38 | } 39 | (new MusicPlayThread(this)).start(); 40 | } 41 | 42 | public final boolean play(int[] var1, int[] var2, int var3) { 43 | if(!this.player.settings.music) { 44 | this.stopped = true; 45 | return false; 46 | } else { 47 | var3 = var3; 48 | int var4 = 0; 49 | 50 | while(var3 > 0 && (this.processing != null || this.previous != null)) { 51 | if(this.processing == null && this.previous != null) { 52 | this.processing = this.previous; 53 | this.previous = null; 54 | } 55 | 56 | if(this.processing != null && this.processing.remaining() > 0) { 57 | int var5; 58 | if((var5 = this.processing.remaining() / 4) > var3) { 59 | var5 = var3; 60 | } 61 | 62 | for(int var6 = 0; var6 < var5; ++var6) { 63 | var1[var4 + var6] += this.processing.getShort(); 64 | var2[var4 + var6] += this.processing.getShort(); 65 | } 66 | 67 | var4 += var5; 68 | var3 -= var5; 69 | } 70 | 71 | if(this.current == null && this.processing != null && this.processing.remaining() == 0) { 72 | this.current = this.processing; 73 | this.processing = null; 74 | } 75 | } 76 | 77 | return this.processing != null || this.previous != null || !this.finished; 78 | } 79 | } 80 | } 81 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/sound/MusicPlayThread.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.sound; 2 | 3 | import de.jarnbjo.vorbis.VorbisStream; 4 | 5 | import java.nio.ByteBuffer; 6 | 7 | // TODO. 8 | final class MusicPlayThread extends Thread { 9 | 10 | // $FF: synthetic field 11 | private Music music; 12 | 13 | 14 | public MusicPlayThread(Music var1) { 15 | super(); 16 | this.music = var1; 17 | this.setPriority(10); 18 | this.setDaemon(true); 19 | } 20 | 21 | public final void run() { 22 | try { 23 | do { 24 | if(this.music.stopped) { 25 | return; 26 | } 27 | 28 | Music var1 = this.music; 29 | ByteBuffer var2; 30 | Music var10001; 31 | if(this.music.playing == null) { 32 | var1 = this.music; 33 | if(this.music.current != null) { 34 | var1 = this.music; 35 | var2 = this.music.current; 36 | var10001 = this.music; 37 | this.music.playing = var2; 38 | var2 = null; 39 | var1 = this.music; 40 | this.music.current = null; 41 | var1 = this.music; 42 | this.music.playing.clear(); 43 | } 44 | } 45 | 46 | var1 = this.music; 47 | if(this.music.playing != null) { 48 | var1 = this.music; 49 | if(this.music.playing.remaining() != 0) { 50 | while(true) { 51 | var1 = this.music; 52 | if(this.music.playing.remaining() == 0) { 53 | break; 54 | } 55 | 56 | var1 = this.music; 57 | var1 = this.music; 58 | var2 = this.music.playing; 59 | VorbisStream var9 = this.music.stream; 60 | int var10 = this.music.stream.readPcm(var2.array(), var2.position(), var2.remaining()); 61 | var2.position(var2.position() + var10); 62 | boolean var11; 63 | if(var11 = var10 <= 0) { 64 | this.music.finished = true; 65 | this.music.stopped = true; 66 | break; 67 | } 68 | } 69 | } 70 | } 71 | 72 | var1 = this.music; 73 | if(this.music.playing != null) { 74 | var1 = this.music; 75 | if(this.music.previous == null) { 76 | var1 = this.music; 77 | this.music.playing.flip(); 78 | var1 = this.music; 79 | var2 = this.music.playing; 80 | var10001 = this.music; 81 | this.music.previous = var2; 82 | var2 = null; 83 | var1 = this.music; 84 | this.music.playing = var2; 85 | } 86 | } 87 | 88 | Thread.sleep(10L); 89 | var1 = this.music; 90 | } while(this.music.player.running); 91 | 92 | return; 93 | } catch (Exception var7) { 94 | var7.printStackTrace(); 95 | return; 96 | } finally { 97 | this.music.finished = true; 98 | } 99 | 100 | } 101 | } 102 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/sound/Sound.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.sound; 2 | 3 | // TODO. 4 | public final class Sound implements Audio { 5 | 6 | private AudioInfo info; 7 | private SoundPos pos; 8 | private float pitch = 0.0F; 9 | private float volume = 1.0F; 10 | private static short[] data = new short[1]; 11 | 12 | 13 | public Sound(AudioInfo var1, SoundPos var2) { 14 | this.info = var1; 15 | this.pos = var2; 16 | this.pitch = var2.getRotationDiff(); 17 | this.volume = var2.getDistanceSq() * var1.volume; 18 | } 19 | 20 | public final boolean play(int[] var1, int[] var2, int var3) { 21 | if(data.length < var3) { 22 | data = new short[var3]; 23 | } 24 | 25 | int var4; 26 | boolean var5 = (var4 = this.info.update(data, var3)) > 0; 27 | float var6 = this.pos.getRotationDiff(); 28 | float var7 = this.pos.getDistanceSq() * this.info.volume; 29 | int var8 = (int)((this.pitch > 0.0F?1.0F - this.pitch:1.0F) * this.volume * 65536.0F); 30 | int var9 = (int)((this.pitch < 0.0F?1.0F + this.pitch:1.0F) * this.volume * 65536.0F); 31 | int var10 = (int)((var6 > 0.0F?1.0F - var6:1.0F) * var7 * 65536.0F); 32 | int var11 = (int)((var6 < 0.0F?var6 + 1.0F:1.0F) * var7 * 65536.0F); 33 | var10 -= var8; 34 | var11 -= var9; 35 | int var12; 36 | int var13; 37 | int var14; 38 | if(var10 == 0 && var11 == 0) { 39 | if(var8 >= 0 || var9 != 0) { 40 | var12 = var8; 41 | var13 = var9; 42 | 43 | for(var14 = 0; var14 < var4; ++var14) { 44 | var1[var14] += data[var14] * var12 >> 16; 45 | var2[var14] += data[var14] * var13 >> 16; 46 | } 47 | } 48 | } else { 49 | for(var12 = 0; var12 < var4; ++var12) { 50 | var13 = var8 + var10 * var12 / var3; 51 | var14 = var9 + var11 * var12 / var3; 52 | var1[var12] += data[var12] * var13 >> 16; 53 | var2[var12] += data[var12] * var14 >> 16; 54 | } 55 | } 56 | 57 | this.pitch = var6; 58 | this.volume = var7; 59 | return var5; 60 | } 61 | 62 | } 63 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/sound/SoundData.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.sound; 2 | 3 | public class SoundData 4 | { 5 | public SoundData(short[] data, float length) 6 | { 7 | this.data = data; 8 | this.length = length; 9 | } 10 | 11 | public short[] data; 12 | public float length; 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/sound/SoundInfo.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.sound; 2 | 3 | // TODO. 4 | public final class SoundInfo extends AudioInfo { 5 | 6 | private SoundData data; 7 | private float seek = 0.0F; 8 | private float pitch; 9 | 10 | 11 | public SoundInfo(SoundData var1, float var2, float var3) { 12 | this.data = var1; 13 | this.pitch = var2 * 44100.0F / var1.length; 14 | this.volume = var3; 15 | } 16 | 17 | public final int update(short[] var1, int var2) { 18 | if(this.seek >= (float)this.data.data.length) { 19 | return 0; 20 | } else { 21 | for(int var3 = 0; var3 < var2; ++var3) { 22 | int var4 = (int)this.seek; 23 | short var5 = this.data.data[var4]; 24 | short var6 = var4 < this.data.data.length - 1?this.data.data[var4 + 1]:0; 25 | var1[var3] = (short)((int)((float)var5 + (float)(var6 - var5) * (this.seek - (float)var4))); 26 | this.seek += this.pitch; 27 | if(this.seek >= (float)this.data.data.length) { 28 | return var3; 29 | } 30 | } 31 | 32 | return var2; 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/sound/SoundManager.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.sound; 2 | 3 | import java.io.File; 4 | import java.io.IOException; 5 | import java.net.MalformedURLException; 6 | import java.util.*; 7 | 8 | // TODO. 9 | public final class SoundManager { 10 | 11 | private SoundReader reader = new SoundReader(); 12 | public Map sounds = new HashMap(); 13 | private Map music = new HashMap(); 14 | public Random random = new Random(); 15 | public long lastMusic = System.currentTimeMillis() + 60000L; 16 | 17 | 18 | public final AudioInfo getAudioInfo(String var1, float var2, float var3) { 19 | List var4 = null; 20 | Map var5 = this.sounds; 21 | synchronized(this.sounds) { 22 | var4 = (List)this.sounds.get(var1); 23 | } 24 | 25 | if(var4 == null) { 26 | return null; 27 | } else { 28 | SoundData var7 = (SoundData)var4.get(this.random.nextInt(var4.size())); 29 | return new SoundInfo(var7, var3, var2); 30 | } 31 | } 32 | 33 | public void registerSound(File var1, String var2) { 34 | try { 35 | for(var2 = var2.substring(0, var2.length() - 4).replaceAll("/", "."); Character.isDigit(var2.charAt(var2.length() - 1)); var2 = var2.substring(0, var2.length() - 1)) { 36 | ; 37 | } 38 | 39 | SoundData var7 = SoundReader.read(var1.toURI().toURL()); 40 | Map var3 = this.sounds; 41 | synchronized(this.sounds) { 42 | Object var4; 43 | if((var4 = (List)this.sounds.get(var2)) == null) { 44 | var4 = new ArrayList(); 45 | this.sounds.put(var2, var4); 46 | } 47 | 48 | ((List)var4).add(var7); 49 | } 50 | } catch (Exception var6) { 51 | var6.printStackTrace(); 52 | } 53 | 54 | } 55 | 56 | public final void registerMusic(String var1, File var2) { 57 | Map var3 = this.music; 58 | synchronized(this.music) { 59 | for(var1 = var1.substring(0, var1.length() - 4).replaceAll("/", "."); Character.isDigit(var1.charAt(var1.length() - 1)); var1 = var1.substring(0, var1.length() - 1)) { 60 | ; 61 | } 62 | 63 | Object var4; 64 | if((var4 = (List)this.music.get(var1)) == null) { 65 | var4 = new ArrayList(); 66 | this.music.put(var1, var4); 67 | } 68 | 69 | ((List)var4).add(var2); 70 | } 71 | } 72 | 73 | public boolean playMusic(SoundPlayer var1, String var2) { 74 | List var3 = null; 75 | Map var4 = this.music; 76 | synchronized(this.music) { 77 | var3 = (List)this.music.get(var2); 78 | } 79 | 80 | if(var3 == null) { 81 | return false; 82 | } else { 83 | File var8 = (File)var3.get(this.random.nextInt(var3.size())); 84 | 85 | try { 86 | var1.play(new Music(var1, var8.toURI().toURL())); 87 | } catch (MalformedURLException var5) { 88 | var5.printStackTrace(); 89 | } catch (IOException var6) { 90 | var6.printStackTrace(); 91 | } 92 | 93 | return true; 94 | } 95 | } 96 | } 97 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/sound/SoundPlayer.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.sound; 2 | 3 | import com.mojang.minecraft.GameSettings; 4 | 5 | import javax.sound.sampled.SourceDataLine; 6 | import java.util.ArrayList; 7 | import java.util.Arrays; 8 | import java.util.List; 9 | 10 | // TODO. 11 | public final class SoundPlayer implements Runnable { 12 | 13 | public boolean running = false; 14 | public SourceDataLine dataLine; 15 | private List audioQueue = new ArrayList(); 16 | public GameSettings settings; 17 | 18 | 19 | public SoundPlayer(GameSettings var1) { 20 | this.settings = var1; 21 | } 22 | 23 | public final void play(Audio var1) { 24 | if(this.running) { 25 | List var2 = this.audioQueue; 26 | synchronized(this.audioQueue) { 27 | this.audioQueue.add(var1); 28 | } 29 | } 30 | } 31 | 32 | public final void play(AudioInfo var1, SoundPos var2) { 33 | this.play(new Sound(var1, var2)); 34 | } 35 | 36 | public final void run() { 37 | int[] var1 = new int[4410]; 38 | int[] var2 = new int[4410]; 39 | 40 | for(byte[] var3 = new byte[17640]; this.running; this.dataLine.write(var3, 0, 17640)) { 41 | try { 42 | Thread.sleep(1L); 43 | } catch (InterruptedException var10) { 44 | var10.printStackTrace(); 45 | } 46 | 47 | Arrays.fill(var1, 0, 4410, 0); 48 | Arrays.fill(var2, 0, 4410, 0); 49 | boolean var4 = true; 50 | int[] var5 = var2; 51 | int[] var6 = var1; 52 | List var12 = this.audioQueue; 53 | List var7 = this.audioQueue; 54 | synchronized(this.audioQueue) { 55 | int var8 = 0; 56 | 57 | while(true) { 58 | if(var8 >= var12.size()) { 59 | break; 60 | } 61 | 62 | if(!((Audio)var12.get(var8)).play(var6, var5, 4410)) { 63 | var12.remove(var8--); 64 | } 65 | 66 | ++var8; 67 | } 68 | } 69 | 70 | int var13; 71 | if(!this.settings.music && !this.settings.sound) { 72 | for(var13 = 0; var13 < 4410; ++var13) { 73 | var3[var13 << 2] = 0; 74 | var3[(var13 << 2) + 1] = 0; 75 | var3[(var13 << 2) + 2] = 0; 76 | var3[(var13 << 2) + 3] = 0; 77 | } 78 | } else { 79 | for(var13 = 0; var13 < 4410; ++var13) { 80 | int var15 = var1[var13]; 81 | int var14 = var2[var13]; 82 | if(var15 < -32000) { 83 | var15 = -32000; 84 | } 85 | 86 | if(var14 < -32000) { 87 | var14 = -32000; 88 | } 89 | 90 | if(var15 >= 32000) { 91 | var15 = 32000; 92 | } 93 | 94 | if(var14 >= 32000) { 95 | var14 = 32000; 96 | } 97 | 98 | var3[var13 << 2] = (byte)(var15 >> 8); 99 | var3[(var13 << 2) + 1] = (byte)var15; 100 | var3[(var13 << 2) + 2] = (byte)(var14 >> 8); 101 | var3[(var13 << 2) + 3] = (byte)var14; 102 | } 103 | } 104 | } 105 | 106 | } 107 | } 108 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/sound/SoundPos.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.sound; 2 | 3 | public interface SoundPos 4 | { 5 | float getRotationDiff(); 6 | 7 | float getDistanceSq(); 8 | } 9 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/minecraft/sound/SoundReader.java: -------------------------------------------------------------------------------- 1 | package com.mojang.minecraft.sound; 2 | 3 | import de.jarnbjo.ogg.LogicalOggStreamImpl; 4 | import de.jarnbjo.ogg.OggFormatException; 5 | import de.jarnbjo.ogg.OnDemandUrlStream; 6 | import de.jarnbjo.vorbis.IdentificationHeader; 7 | import de.jarnbjo.vorbis.VorbisFormatException; 8 | import de.jarnbjo.vorbis.VorbisStream; 9 | 10 | import java.io.IOException; 11 | import java.net.URL; 12 | 13 | // TODO. 14 | public final class SoundReader { 15 | 16 | public static SoundData read(URL var0) { 17 | VorbisStream var12 = null; 18 | try 19 | { 20 | LogicalOggStreamImpl var11 = (LogicalOggStreamImpl)(new OnDemandUrlStream(var0)).getLogicalStreams().iterator().next(); 21 | var12 = new VorbisStream(var11); 22 | } catch (VorbisFormatException e) { 23 | e.printStackTrace(); 24 | } catch (OggFormatException e) { 25 | e.printStackTrace(); 26 | } catch (IOException e) { 27 | e.printStackTrace(); 28 | } 29 | byte[] var2 = new byte[4096]; 30 | int var3 = 0; 31 | boolean var1 = false; 32 | IdentificationHeader var14 = var12.getIdentificationHeader(); 33 | int var4 = var12.getIdentificationHeader().getChannels(); 34 | short[] var5 = new short[4096]; 35 | int var6 = 0; 36 | 37 | label51: 38 | while(var3 >= 0) { 39 | int var15 = 0; 40 | 41 | while(true) { 42 | try { 43 | if(var15 < var2.length && (var3 = var12.readPcm(var2, var15, var2.length - var15)) > 0) { 44 | var15 += var3; 45 | continue; 46 | } 47 | } catch (Exception var10) { 48 | var3 = -1; 49 | } 50 | 51 | if(var15 <= 0) { 52 | break; 53 | } 54 | 55 | boolean var7 = false; 56 | int var16 = 0; 57 | 58 | while(true) { 59 | if(var16 >= var15) { 60 | continue label51; 61 | } 62 | 63 | int var8 = 0; 64 | 65 | for(int var9 = 0; var9 < var4; ++var9) { 66 | var8 += var2[var16++] << 8 | var2[var16++] & 255; 67 | } 68 | 69 | if(var6 == var5.length) { 70 | short[] var18 = var5; 71 | var5 = new short[var5.length << 1]; 72 | System.arraycopy(var18, 0, var5, 0, var6); 73 | } 74 | 75 | var5[var6++] = (short)(var8 / var4); 76 | } 77 | } 78 | } 79 | 80 | if(var6 != var5.length) { 81 | short[] var17 = var5; 82 | var5 = new short[var6]; 83 | System.arraycopy(var17, 0, var5, 0, var6); 84 | } 85 | 86 | IdentificationHeader var13; 87 | return new SoundData(var5, (float)(var13 = var12.getIdentificationHeader()).getSampleRate()); 88 | } 89 | } 90 | -------------------------------------------------------------------------------- /src/main/java/com/mojang/util/MathHelper.java: -------------------------------------------------------------------------------- 1 | package com.mojang.util; 2 | 3 | 4 | public final class MathHelper { 5 | 6 | private static float[] SIN_TABLE = new float[65536]; 7 | 8 | 9 | public static final float sin(float var0) { 10 | return SIN_TABLE[(int)(var0 * 10430.378F) & '\uffff']; 11 | } 12 | 13 | public static final float cos(float var0) { 14 | return SIN_TABLE[(int)(var0 * 10430.378F + 16384.0F) & '\uffff']; 15 | } 16 | 17 | public static final float sqrt(float var0) { 18 | return (float)Math.sqrt((double)var0); 19 | } 20 | 21 | static { 22 | for(int var0 = 0; var0 < 65536; ++var0) { 23 | SIN_TABLE[var0] = (float)Math.sin((double)var0 * 3.141592653589793D * 2.0D / 65536.0D); 24 | } 25 | 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/main/java/com/oyasunadev/mcraft/client/core/MinecraftStandalone2.java: -------------------------------------------------------------------------------- 1 | //package com.oyasunadev.mcraft.client.core; 2 | // 3 | ///** 4 | //* Created with IntelliJ IDEA. 5 | //* User: Oliver 6 | //* Date: 4/19/13 7 | //* Time: 2:34 PM 8 | //*/ 9 | // 10 | //import com.mojang.minecraft.Minecraft; 11 | //import com.mojang.minecraft.MinecraftApplet; 12 | // 13 | //import javax.swing.*; 14 | //import java.awt.*; 15 | // 16 | ///** 17 | //* Run Minecraft Classic standalone version. 18 | //*/ 19 | //public class MinecraftStandalone2 extends JFrame 20 | //{ 21 | // /** 22 | // * Default constructor. 23 | // */ 24 | // public MinecraftStandalone2() 25 | // { 26 | // } 27 | // 28 | // /** 29 | // * Reference to the MCraftApplet2 object. 30 | // */ 31 | // private MCraftApplet2 mcApplet; 32 | // 33 | // /** 34 | // * Custom applet in order to bypass URL check as well as add functionality. 35 | // */ 36 | // private class MCraftApplet2 extends MinecraftApplet 37 | // { 38 | // /** 39 | // * Default constructor. 40 | // */ 41 | // public MCraftApplet2() 42 | // { 43 | // } 44 | // 45 | // /** 46 | // * Reference to the applet canvas. 47 | // */ 48 | // private Canvas mcCanvas; 49 | // 50 | // /** 51 | // * Reference to the Minecraft object. 52 | // */ 53 | // private Minecraft mc; 54 | // 55 | // /** 56 | // * Reference to the Minecraft main thread. 57 | // */ 58 | // private Thread mcThread = null; 59 | // 60 | // /** 61 | // * Setup the applet. 62 | // */ 63 | // @Override 64 | // public void init() 65 | // { 66 | // mcCanvas = new MCraftCanvas2(this); 67 | // 68 | // boolean fullscreen = getParameter("fullscreen").equalsIgnoreCase("true"); 69 | // 70 | // mc = new Minecraft(mcCanvas, this, 854, 480, fullscreen); 71 | // } 72 | // } 73 | // 74 | // /** 75 | // * Custom canvas. 76 | // */ 77 | // private class MCraftCanvas2 extends Canvas 78 | // { 79 | // /** 80 | // * Set the applet object. 81 | // * 82 | // * @param mcApplet 83 | // */ 84 | // public MCraftCanvas2(MCraftApplet2 mcApplet) 85 | // { 86 | // this.mcApplet = mcApplet; 87 | // } 88 | // 89 | // /** 90 | // * Start the thread. 91 | // */ 92 | // @Override 93 | // public synchronized void addNotify() 94 | // { 95 | // super.addNotify(); 96 | // 97 | // mcApplet.startMainThread(); 98 | // } 99 | // 100 | // /** 101 | // * Stop the thread. 102 | // */ 103 | // @Override 104 | // public synchronized void removeNotify() 105 | // { 106 | // mcApplet.shutdown(); 107 | // 108 | // super.removeNotify(); 109 | // } 110 | // 111 | // /** 112 | // * Reference to the MCraftApplet2 object. 113 | // */ 114 | // private MCraftApplet2 mcApplet; 115 | // } 116 | //} 117 | -------------------------------------------------------------------------------- /src/main/java/com/oyasunadev/mcraft/client/util/Constants.java: -------------------------------------------------------------------------------- 1 | package com.oyasunadev.mcraft.client.util; 2 | 3 | /** 4 | * Created with IntelliJ IDEA. 5 | * User: Oliver Yasuna 6 | * Date: 9/30/12 7 | * Time: 7:57 PM 8 | */ 9 | 10 | public class Constants 11 | { 12 | /** 13 | * Just a reference to the MCraft version if needed. 14 | */ 15 | public static final String MCRAFT_VERSION = "1.0"; 16 | /** 17 | * Just a reference to the Minecraft version if needed. 18 | */ 19 | public static final String MINECRAFT_VERSION = "0.30"; 20 | 21 | /** 22 | * The Minecraft Classic protocol version. Default is 0x07. 23 | */ 24 | public static final byte PROTOCOL_VERSION = 0x07; 25 | /** 26 | * The client type sent to the server to identify what client is being used. Default is 0x00. 27 | */ 28 | public static final byte CLIENT_TYPE = 0x01; 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/de/jarnbjo/ogg/BasicStream.java: -------------------------------------------------------------------------------- 1 | /* 2 | * $ProjectName$ 3 | * $ProjectRevision$ 4 | * ----------------------------------------------------------- 5 | * $Id: BasicStream.java,v 1.1 2003/08/08 19:48:22 jarnbjo Exp $ 6 | * ----------------------------------------------------------- 7 | * 8 | * $Author: jarnbjo $ 9 | * 10 | * Description: 11 | * 12 | * Copyright 2002-2003 Tor-Einar Jarnbjo 13 | * ----------------------------------------------------------- 14 | * 15 | * Change History 16 | * ----------------------------------------------------------- 17 | * $Log: BasicStream.java,v $ 18 | * 19 | */ 20 | 21 | package de.jarnbjo.ogg; 22 | 23 | import java.io.*; 24 | import java.net.*; 25 | import java.util.*; 26 | 27 | /** 28 | * Implementation of the PhysicalOggStream interface for reading 29 | * an Ogg stream from a URL. This class performs 30 | * no internal caching, and will not read data from the network before 31 | * requested to do so. It is intended to be used in non-realtime applications 32 | * like file download managers or similar. 33 | */ 34 | 35 | public class BasicStream implements PhysicalOggStream { 36 | 37 | private boolean closed=false; 38 | private InputStream sourceStream; 39 | private Object drainLock=new Object(); 40 | private LinkedList pageCache=new LinkedList(); 41 | private long numberOfSamples=-1; 42 | private int position=0; 43 | 44 | private HashMap logicalStreams=new HashMap(); 45 | private OggPage firstPage; 46 | 47 | public BasicStream(InputStream sourceStream) throws OggFormatException, IOException { 48 | firstPage=OggPage.create(sourceStream); 49 | position+=firstPage.getTotalLength(); 50 | LogicalOggStreamImpl los=new LogicalOggStreamImpl(this, firstPage.getStreamSerialNumber()); 51 | logicalStreams.put(new Integer(firstPage.getStreamSerialNumber()), los); 52 | los.checkFormat(firstPage); 53 | } 54 | 55 | public Collection getLogicalStreams() { 56 | return logicalStreams.values(); 57 | } 58 | 59 | public boolean isOpen() { 60 | return !closed; 61 | } 62 | 63 | public void close() throws IOException { 64 | closed=true; 65 | sourceStream.close(); 66 | } 67 | 68 | public int getContentLength() { 69 | return -1; 70 | } 71 | 72 | public int getPosition() { 73 | return position; 74 | } 75 | 76 | int pageNumber=2; 77 | 78 | public OggPage getOggPage(int index) throws IOException { 79 | if(firstPage!=null) { 80 | OggPage tmp=firstPage; 81 | firstPage=null; 82 | return tmp; 83 | } 84 | else { 85 | OggPage page=OggPage.create(sourceStream); 86 | position+=page.getTotalLength(); 87 | return page; 88 | } 89 | } 90 | 91 | private LogicalOggStream getLogicalStream(int serialNumber) { 92 | return (LogicalOggStream)logicalStreams.get(new Integer(serialNumber)); 93 | } 94 | 95 | public void setTime(long granulePosition) throws IOException { 96 | throw new UnsupportedOperationException("Method not supported by this class"); 97 | } 98 | 99 | /** 100 | * @return always false 101 | */ 102 | 103 | public boolean isSeekable() { 104 | return false; 105 | } 106 | 107 | } -------------------------------------------------------------------------------- /src/main/java/de/jarnbjo/ogg/EndOfOggStreamException.java: -------------------------------------------------------------------------------- 1 | /* 2 | * $ProjectName$ 3 | * $ProjectRevision$ 4 | * ----------------------------------------------------------- 5 | * $Id: EndOfOggStreamException.java,v 1.1 2003/03/03 21:02:20 jarnbjo Exp $ 6 | * ----------------------------------------------------------- 7 | * 8 | * $Author: jarnbjo $ 9 | * 10 | * Description: 11 | * 12 | * Copyright 2002-2003 Tor-Einar Jarnbjo 13 | * ----------------------------------------------------------- 14 | * 15 | * Change History 16 | * ----------------------------------------------------------- 17 | * $Log: EndOfOggStreamException.java,v $ 18 | * Revision 1.1 2003/03/03 21:02:20 jarnbjo 19 | * no message 20 | * 21 | */ 22 | 23 | package de.jarnbjo.ogg; 24 | 25 | import java.io.IOException; 26 | 27 | /** 28 | * Exception thrown when reaching the end of an Ogg stream 29 | */ 30 | 31 | public class EndOfOggStreamException extends IOException { 32 | 33 | public EndOfOggStreamException() { 34 | } 35 | } -------------------------------------------------------------------------------- /src/main/java/de/jarnbjo/ogg/OggFormatException.java: -------------------------------------------------------------------------------- 1 | /* 2 | * $ProjectName$ 3 | * $ProjectRevision$ 4 | * ----------------------------------------------------------- 5 | * $Id: OggFormatException.java,v 1.1 2003/03/03 21:02:20 jarnbjo Exp $ 6 | * ----------------------------------------------------------- 7 | * 8 | * $Author: jarnbjo $ 9 | * 10 | * Description: 11 | * 12 | * Copyright 2002-2003 Tor-Einar Jarnbjo 13 | * ----------------------------------------------------------- 14 | * 15 | * Change History 16 | * ----------------------------------------------------------- 17 | * $Log: OggFormatException.java,v $ 18 | * Revision 1.1 2003/03/03 21:02:20 jarnbjo 19 | * no message 20 | * 21 | */ 22 | 23 | package de.jarnbjo.ogg; 24 | 25 | import java.io.IOException; 26 | 27 | /** 28 | * Exception thrown when trying to read a corrupted Ogg stream. 29 | */ 30 | 31 | public class OggFormatException extends IOException { 32 | 33 | public OggFormatException() { 34 | super(); 35 | } 36 | 37 | public OggFormatException(String message) { 38 | super(message); 39 | } 40 | } -------------------------------------------------------------------------------- /src/main/java/de/jarnbjo/util/audio/FadeableAudioInputStream.java: -------------------------------------------------------------------------------- 1 | package de.jarnbjo.util.audio; 2 | 3 | import java.io.*; 4 | import javax.sound.sampled.*; 5 | 6 | public class FadeableAudioInputStream extends AudioInputStream { 7 | 8 | private AudioInputStream stream; 9 | private boolean fading=false; 10 | private double phi=0.0; 11 | 12 | public FadeableAudioInputStream(AudioInputStream stream) throws IOException { 13 | super(stream, stream.getFormat(), -1L); 14 | } 15 | 16 | public void fadeOut() { 17 | fading=true; 18 | phi=0.0; 19 | } 20 | 21 | public int read(byte[] b) throws IOException { 22 | return read(b, 0, b.length); 23 | } 24 | 25 | public int read(byte[] b, int offset, int length) throws IOException { 26 | int read=super.read(b, offset, length); 27 | 28 | //System.out.println("read "+read); 29 | 30 | if(fading) { 31 | int j=0, l=0, r=0; 32 | double gain=0.0; 33 | 34 | for(int i=offset; i>8)&0xff); 54 | b[j++]=(byte)(r&0xff); 55 | b[j++]=(byte)((r>>8)&0xff); 56 | } 57 | } 58 | 59 | return read; 60 | } 61 | 62 | } -------------------------------------------------------------------------------- /src/main/java/de/jarnbjo/vorbis/Floor0.java: -------------------------------------------------------------------------------- 1 | /* 2 | * $ProjectName$ 3 | * $ProjectRevision$ 4 | * ----------------------------------------------------------- 5 | * $Id: Floor0.java,v 1.2 2003/03/16 01:11:12 jarnbjo Exp $ 6 | * ----------------------------------------------------------- 7 | * 8 | * $Author: jarnbjo $ 9 | * 10 | * Description: 11 | * 12 | * Copyright 2002-2003 Tor-Einar Jarnbjo 13 | * ----------------------------------------------------------- 14 | * 15 | * Change History 16 | * ----------------------------------------------------------- 17 | * $Log: Floor0.java,v $ 18 | * Revision 1.2 2003/03/16 01:11:12 jarnbjo 19 | * no message 20 | * 21 | * 22 | */ 23 | 24 | package de.jarnbjo.vorbis; 25 | 26 | import java.io.IOException; 27 | 28 | import de.jarnbjo.util.io.BitInputStream; 29 | 30 | class Floor0 extends Floor { 31 | 32 | private int order, rate, barkMapSize, amplitudeBits, amplitudeOffset; 33 | private int bookList[]; 34 | 35 | protected Floor0(BitInputStream source, SetupHeader header) throws VorbisFormatException, IOException { 36 | 37 | order=source.getInt(8); 38 | rate=source.getInt(16); 39 | barkMapSize=source.getInt(16); 40 | amplitudeBits=source.getInt(6); 41 | amplitudeOffset=source.getInt(8); 42 | 43 | int bookCount=source.getInt(4)+1; 44 | bookList=new int[bookCount]; 45 | 46 | for(int i=0; iheader.getCodeBooks().length) { 49 | throw new VorbisFormatException("A floor0_book_list entry is higher than the code book count."); 50 | } 51 | } 52 | } 53 | 54 | protected int getType() { 55 | return 0; 56 | } 57 | 58 | protected Floor decodeFloor(VorbisStream vorbis, BitInputStream source) throws VorbisFormatException, IOException { 59 | /** @todo implement */ 60 | throw new UnsupportedOperationException(); 61 | } 62 | 63 | protected void computeFloor(float[] vector) { 64 | /** @todo implement */ 65 | throw new UnsupportedOperationException(); 66 | } 67 | 68 | } -------------------------------------------------------------------------------- /src/main/java/de/jarnbjo/vorbis/IdentificationHeader.java: -------------------------------------------------------------------------------- 1 | /* 2 | * $ProjectName$ 3 | * $ProjectRevision$ 4 | * ----------------------------------------------------------- 5 | * $Id: IdentificationHeader.java,v 1.3 2003/03/31 00:20:16 jarnbjo Exp $ 6 | * ----------------------------------------------------------- 7 | * 8 | * $Author: jarnbjo $ 9 | * 10 | * Description: 11 | * 12 | * Copyright 2002-2003 Tor-Einar Jarnbjo 13 | * ----------------------------------------------------------- 14 | * 15 | * Change History 16 | * ----------------------------------------------------------- 17 | * $Log: IdentificationHeader.java,v $ 18 | * Revision 1.3 2003/03/31 00:20:16 jarnbjo 19 | * no message 20 | * 21 | * Revision 1.2 2003/03/16 01:11:12 jarnbjo 22 | * no message 23 | * 24 | * 25 | */ 26 | 27 | package de.jarnbjo.vorbis; 28 | 29 | import java.io.*; 30 | 31 | import de.jarnbjo.util.io.BitInputStream; 32 | 33 | import java.awt.*; 34 | import java.awt.event.*; 35 | import javax.swing.*; 36 | import javax.swing.event.*; 37 | 38 | /** 39 | */ 40 | 41 | public class IdentificationHeader { 42 | 43 | private int version, channels, sampleRate, bitrateMaximum, bitrateNominal, bitrateMinimum, blockSize0, blockSize1; 44 | private boolean framingFlag; 45 | private MdctFloat[] mdct=new MdctFloat[2]; 46 | //private MdctLong[] mdctInt=new MdctLong[2]; 47 | 48 | private static final long HEADER = 0x736962726f76L; // 'vorbis' 49 | 50 | public IdentificationHeader(BitInputStream source) throws VorbisFormatException, IOException { 51 | //equalizer=new Equalizer(); 52 | //equalizer.pack(); 53 | //equalizer.show(); 54 | 55 | long leading=source.getLong(48); 56 | if(leading!=HEADER) { 57 | throw new VorbisFormatException("The identification header has an illegal leading."); 58 | } 59 | version=source.getInt(32); 60 | channels=source.getInt(8); 61 | sampleRate=source.getInt(32); 62 | bitrateMaximum=source.getInt(32); 63 | bitrateNominal=source.getInt(32); 64 | bitrateMinimum=source.getInt(32); 65 | int bs=source.getInt(8); 66 | blockSize0=1<<(bs&0xf); 67 | blockSize1=1<<(bs>>4); 68 | 69 | mdct[0]=new MdctFloat(blockSize0); 70 | mdct[1]=new MdctFloat(blockSize1); 71 | //mdctInt[0]=new MdctLong(blockSize0); 72 | //mdctInt[1]=new MdctLong(blockSize1); 73 | 74 | framingFlag=source.getInt(8)!=0; 75 | } 76 | 77 | public int getSampleRate() { 78 | return sampleRate; 79 | } 80 | 81 | public int getMaximumBitrate() { 82 | return bitrateMaximum; 83 | } 84 | 85 | public int getNominalBitrate() { 86 | return bitrateNominal; 87 | } 88 | 89 | public int getMinimumBitrate() { 90 | return bitrateMinimum; 91 | } 92 | 93 | public int getChannels() { 94 | return channels; 95 | } 96 | 97 | public int getBlockSize0() { 98 | return blockSize0; 99 | } 100 | 101 | public int getBlockSize1() { 102 | return blockSize1; 103 | } 104 | 105 | protected MdctFloat getMdct0() { 106 | return mdct[0]; 107 | } 108 | 109 | protected MdctFloat getMdct1() { 110 | return mdct[1]; 111 | } 112 | 113 | public int getVersion() { 114 | return version; 115 | } 116 | } -------------------------------------------------------------------------------- /src/main/java/de/jarnbjo/vorbis/Mapping.java: -------------------------------------------------------------------------------- 1 | /* 2 | * $ProjectName$ 3 | * $ProjectRevision$ 4 | * ----------------------------------------------------------- 5 | * $Id: Mapping.java,v 1.2 2003/03/16 01:11:12 jarnbjo Exp $ 6 | * ----------------------------------------------------------- 7 | * 8 | * $Author: jarnbjo $ 9 | * 10 | * Description: 11 | * 12 | * Copyright 2002-2003 Tor-Einar Jarnbjo 13 | * ----------------------------------------------------------- 14 | * 15 | * Change History 16 | * ----------------------------------------------------------- 17 | * $Log: Mapping.java,v $ 18 | * Revision 1.2 2003/03/16 01:11:12 jarnbjo 19 | * no message 20 | * 21 | * 22 | */ 23 | 24 | package de.jarnbjo.vorbis; 25 | 26 | import java.io.IOException; 27 | 28 | import de.jarnbjo.util.io.BitInputStream; 29 | 30 | abstract class Mapping { 31 | 32 | protected static Mapping createInstance(VorbisStream vorbis, BitInputStream source, SetupHeader header) throws VorbisFormatException, IOException { 33 | 34 | int type=source.getInt(16); 35 | switch(type) { 36 | case 0: 37 | //System.out.println("mapping type 0"); 38 | return new Mapping0(vorbis, source, header); 39 | default: 40 | throw new VorbisFormatException("Mapping type "+type+" is not supported."); 41 | } 42 | } 43 | 44 | protected abstract int getType(); 45 | protected abstract int[] getAngles(); 46 | protected abstract int[] getMagnitudes() ; 47 | protected abstract int[] getMux(); 48 | protected abstract int[] getSubmapFloors(); 49 | protected abstract int[] getSubmapResidues(); 50 | protected abstract int getCouplingSteps(); 51 | protected abstract int getSubmaps(); 52 | 53 | } -------------------------------------------------------------------------------- /src/main/java/de/jarnbjo/vorbis/Mode.java: -------------------------------------------------------------------------------- 1 | /* 2 | * $ProjectName$ 3 | * $ProjectRevision$ 4 | * ----------------------------------------------------------- 5 | * $Id: Mode.java,v 1.2 2003/03/16 01:11:12 jarnbjo Exp $ 6 | * ----------------------------------------------------------- 7 | * 8 | * $Author: jarnbjo $ 9 | * 10 | * Description: 11 | * 12 | * Copyright 2002-2003 Tor-Einar Jarnbjo 13 | * ----------------------------------------------------------- 14 | * 15 | * Change History 16 | * ----------------------------------------------------------- 17 | * $Log: Mode.java,v $ 18 | * Revision 1.2 2003/03/16 01:11:12 jarnbjo 19 | * no message 20 | * 21 | * 22 | */ 23 | 24 | package de.jarnbjo.vorbis; 25 | 26 | import java.io.*; 27 | 28 | import de.jarnbjo.util.io.*; 29 | 30 | class Mode { 31 | 32 | private boolean blockFlag; 33 | private int windowType, transformType, mapping; 34 | 35 | protected Mode(BitInputStream source, SetupHeader header) throws VorbisFormatException, IOException { 36 | blockFlag=source.getBit(); 37 | windowType=source.getInt(16); 38 | transformType=source.getInt(16); 39 | mapping=source.getInt(8); 40 | 41 | if(windowType!=0) { 42 | throw new VorbisFormatException("Window type = "+windowType+", != 0"); 43 | } 44 | 45 | if(transformType!=0) { 46 | throw new VorbisFormatException("Transform type = "+transformType+", != 0"); 47 | } 48 | 49 | if(mapping>header.getMappings().length) { 50 | throw new VorbisFormatException("Mode mapping number is higher than total number of mappings."); 51 | } 52 | } 53 | 54 | protected boolean getBlockFlag() { 55 | return blockFlag; 56 | } 57 | 58 | protected int getWindowType() { 59 | return windowType; 60 | } 61 | 62 | protected int getTransformType() { 63 | return transformType; 64 | } 65 | 66 | protected int getMapping() { 67 | return mapping; 68 | } 69 | } -------------------------------------------------------------------------------- /src/main/java/de/jarnbjo/vorbis/Residue0.java: -------------------------------------------------------------------------------- 1 | /* 2 | * $ProjectName$ 3 | * $ProjectRevision$ 4 | * ----------------------------------------------------------- 5 | * $Id: Residue0.java,v 1.2 2003/03/16 01:11:12 jarnbjo Exp $ 6 | * ----------------------------------------------------------- 7 | * 8 | * $Author: jarnbjo $ 9 | * 10 | * Description: 11 | * 12 | * Copyright 2002-2003 Tor-Einar Jarnbjo 13 | * ----------------------------------------------------------- 14 | * 15 | * Change History 16 | * ----------------------------------------------------------- 17 | * $Log: Residue0.java,v $ 18 | * Revision 1.2 2003/03/16 01:11:12 jarnbjo 19 | * no message 20 | * 21 | * 22 | */ 23 | 24 | package de.jarnbjo.vorbis; 25 | 26 | import java.io.IOException; 27 | 28 | import de.jarnbjo.util.io.BitInputStream; 29 | 30 | class Residue0 extends Residue { 31 | 32 | protected Residue0(BitInputStream source, SetupHeader header) throws VorbisFormatException, IOException { 33 | super(source, header); 34 | } 35 | 36 | protected int getType() { 37 | return 0; 38 | } 39 | 40 | protected void decodeResidue(VorbisStream vorbis, BitInputStream source, Mode mode, int ch, boolean[] doNotDecodeFlags, float[][] vectors) throws VorbisFormatException, IOException { 41 | /** @todo implement */ 42 | throw new UnsupportedOperationException(); 43 | } 44 | } -------------------------------------------------------------------------------- /src/main/java/de/jarnbjo/vorbis/Residue1.java: -------------------------------------------------------------------------------- 1 | /* 2 | * $ProjectName$ 3 | * $ProjectRevision$ 4 | * ----------------------------------------------------------- 5 | * $Id: Residue1.java,v 1.2 2003/03/16 01:11:12 jarnbjo Exp $ 6 | * ----------------------------------------------------------- 7 | * 8 | * $Author: jarnbjo $ 9 | * 10 | * Description: 11 | * 12 | * Copyright 2002-2003 Tor-Einar Jarnbjo 13 | * ----------------------------------------------------------- 14 | * 15 | * Change History 16 | * ----------------------------------------------------------- 17 | * $Log: Residue1.java,v $ 18 | * Revision 1.2 2003/03/16 01:11:12 jarnbjo 19 | * no message 20 | * 21 | * 22 | */ 23 | 24 | package de.jarnbjo.vorbis; 25 | 26 | import java.io.IOException; 27 | import java.util.*; 28 | 29 | import de.jarnbjo.util.io.BitInputStream; 30 | 31 | class Residue1 extends Residue { 32 | 33 | protected Residue1(BitInputStream source, SetupHeader header) throws VorbisFormatException, IOException { 34 | super(source, header); 35 | } 36 | 37 | protected int getType() { 38 | return 1; 39 | } 40 | 41 | protected void decodeResidue(VorbisStream vorbis, BitInputStream source, Mode mode, int ch, boolean[] doNotDecodeFlags, float[][] vectors) throws VorbisFormatException, IOException { 42 | /** @todo implement */ 43 | throw new UnsupportedOperationException(); 44 | } 45 | 46 | 47 | } -------------------------------------------------------------------------------- /src/main/java/de/jarnbjo/vorbis/SetupHeader.java: -------------------------------------------------------------------------------- 1 | /* 2 | * $ProjectName$ 3 | * $ProjectRevision$ 4 | * ----------------------------------------------------------- 5 | * $Id: SetupHeader.java,v 1.2 2003/03/16 01:11:12 jarnbjo Exp $ 6 | * ----------------------------------------------------------- 7 | * 8 | * $Author: jarnbjo $ 9 | * 10 | * Description: 11 | * 12 | * Copyright 2002-2003 Tor-Einar Jarnbjo 13 | * ----------------------------------------------------------- 14 | * 15 | * Change History 16 | * ----------------------------------------------------------- 17 | * $Log: SetupHeader.java,v $ 18 | * Revision 1.2 2003/03/16 01:11:12 jarnbjo 19 | * no message 20 | * 21 | * 22 | */ 23 | 24 | package de.jarnbjo.vorbis; 25 | 26 | import java.io.*; 27 | 28 | import de.jarnbjo.util.io.*; 29 | 30 | class SetupHeader { 31 | 32 | private static final long HEADER = 0x736962726f76L; // 'vorbis' 33 | 34 | private CodeBook[] codeBooks; 35 | private Floor[] floors; 36 | private Residue[] residues; 37 | private Mapping[] mappings; 38 | private Mode[] modes; 39 | 40 | public SetupHeader(VorbisStream vorbis, BitInputStream source) throws VorbisFormatException, IOException { 41 | 42 | if(source.getLong(48)!=HEADER) { 43 | throw new VorbisFormatException("The setup header has an illegal leading."); 44 | } 45 | 46 | // read code books 47 | 48 | int codeBookCount=source.getInt(8)+1; 49 | codeBooks=new CodeBook[codeBookCount]; 50 | 51 | for(int i=0; i0; x>>=1, res++); 34 | return res; 35 | } 36 | 37 | public static final float float32unpack(int x) { 38 | float mantissa=x&0x1fffff; 39 | float e=(x&0x7fe00000)>>21; 40 | if((x&0x80000000)!=0) { 41 | mantissa=-mantissa; 42 | } 43 | return mantissa*(float)Math.pow(2.0, e-788.0); 44 | } 45 | 46 | public static final int lookup1Values(int a, int b) { 47 | int res=(int)Math.pow(Math.E, Math.log(a)/b); 48 | return intPow(res+1, b)<=a?res+1:res; 49 | } 50 | 51 | public static final int intPow(int base, int e) { 52 | int res=1; 53 | for(; e>0; e--, res*=base); 54 | return res; 55 | } 56 | 57 | public static final boolean isBitSet(int value, int bit) { 58 | return (value&(1<0) { 64 | res+=value&1; 65 | value>>=1; 66 | } 67 | return res; 68 | } 69 | 70 | public static final int lowNeighbour(int[] v, int x) { 71 | int max=-1, n=0; 72 | for(int i=0; imax && v[i]v[x]) { 85 | min=v[i]; 86 | n=i; 87 | } 88 | } 89 | return n; 90 | } 91 | 92 | public static final int renderPoint(int x0, int x1, int y0, int y1, int x) { 93 | int dy=y1-y0; 94 | int ady=dy<0?-dy:dy; 95 | int off=(ady*(x-x0))/(x1-x0); 96 | return dy<0?y0-off:y0+off; 97 | } 98 | 99 | public static final void renderLine(final int x0, final int y0, final int x1, final int y1, final float[] v) { 100 | final int dy=y1-y0; 101 | final int adx=x1-x0; 102 | final int base=dy/adx; 103 | final int sy=dy<0?base-1:base+1; 104 | int x=x0; 105 | int y=y0; 106 | int err=0; 107 | final int ady=(dy<0?-dy:dy)-(base>0?base*adx:-base*adx); 108 | 109 | v[x]*=Floor.DB_STATIC_TABLE[y]; 110 | for(x=x0+1; x=adx) { 113 | err-=adx; 114 | v[x]*=Floor.DB_STATIC_TABLE[y+=sy]; 115 | } 116 | else { 117 | v[x]*=Floor.DB_STATIC_TABLE[y+=base]; 118 | } 119 | } 120 | } 121 | } -------------------------------------------------------------------------------- /src/main/java/de/jarnbjo/vorbis/VorbisFormatException.java: -------------------------------------------------------------------------------- 1 | /* 2 | * $ProjectName$ 3 | * $ProjectRevision$ 4 | * ----------------------------------------------------------- 5 | * $Id: VorbisFormatException.java,v 1.2 2003/03/16 01:11:12 jarnbjo Exp $ 6 | * ----------------------------------------------------------- 7 | * 8 | * $Author: jarnbjo $ 9 | * 10 | * Description: 11 | * 12 | * Copyright 2002-2003 Tor-Einar Jarnbjo 13 | * ----------------------------------------------------------- 14 | * 15 | * Change History 16 | * ----------------------------------------------------------- 17 | * $Log: VorbisFormatException.java,v $ 18 | * Revision 1.2 2003/03/16 01:11:12 jarnbjo 19 | * no message 20 | * 21 | * 22 | */ 23 | 24 | package de.jarnbjo.vorbis; 25 | 26 | import java.io.IOException; 27 | 28 | /** 29 | * Exception thrown when trying to read a corrupted Vorbis stream. 30 | */ 31 | 32 | public class VorbisFormatException extends IOException { 33 | 34 | public VorbisFormatException() { 35 | super(); 36 | } 37 | 38 | public VorbisFormatException(String message) { 39 | super(message); 40 | } 41 | } -------------------------------------------------------------------------------- /src/main/resources/2char.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManiaDevelopment/MCraft-Client/d886dfbcda56cd95b10c60cf23cebb48bbb907af/src/main/resources/2char.png -------------------------------------------------------------------------------- /src/main/resources/armor/chain.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManiaDevelopment/MCraft-Client/d886dfbcda56cd95b10c60cf23cebb48bbb907af/src/main/resources/armor/chain.png -------------------------------------------------------------------------------- /src/main/resources/armor/plate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManiaDevelopment/MCraft-Client/d886dfbcda56cd95b10c60cf23cebb48bbb907af/src/main/resources/armor/plate.png -------------------------------------------------------------------------------- /src/main/resources/char.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManiaDevelopment/MCraft-Client/d886dfbcda56cd95b10c60cf23cebb48bbb907af/src/main/resources/char.png -------------------------------------------------------------------------------- /src/main/resources/clouds.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManiaDevelopment/MCraft-Client/d886dfbcda56cd95b10c60cf23cebb48bbb907af/src/main/resources/clouds.png -------------------------------------------------------------------------------- /src/main/resources/default.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManiaDevelopment/MCraft-Client/d886dfbcda56cd95b10c60cf23cebb48bbb907af/src/main/resources/default.gif -------------------------------------------------------------------------------- /src/main/resources/default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManiaDevelopment/MCraft-Client/d886dfbcda56cd95b10c60cf23cebb48bbb907af/src/main/resources/default.png -------------------------------------------------------------------------------- /src/main/resources/dirt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManiaDevelopment/MCraft-Client/d886dfbcda56cd95b10c60cf23cebb48bbb907af/src/main/resources/dirt.png -------------------------------------------------------------------------------- /src/main/resources/grass.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManiaDevelopment/MCraft-Client/d886dfbcda56cd95b10c60cf23cebb48bbb907af/src/main/resources/grass.png -------------------------------------------------------------------------------- /src/main/resources/gui/gui.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManiaDevelopment/MCraft-Client/d886dfbcda56cd95b10c60cf23cebb48bbb907af/src/main/resources/gui/gui.png -------------------------------------------------------------------------------- /src/main/resources/gui/icons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManiaDevelopment/MCraft-Client/d886dfbcda56cd95b10c60cf23cebb48bbb907af/src/main/resources/gui/icons.png -------------------------------------------------------------------------------- /src/main/resources/item/arrows.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManiaDevelopment/MCraft-Client/d886dfbcda56cd95b10c60cf23cebb48bbb907af/src/main/resources/item/arrows.png -------------------------------------------------------------------------------- /src/main/resources/item/sign.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManiaDevelopment/MCraft-Client/d886dfbcda56cd95b10c60cf23cebb48bbb907af/src/main/resources/item/sign.png -------------------------------------------------------------------------------- /src/main/resources/mob/creeper.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManiaDevelopment/MCraft-Client/d886dfbcda56cd95b10c60cf23cebb48bbb907af/src/main/resources/mob/creeper.png -------------------------------------------------------------------------------- /src/main/resources/mob/pig.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManiaDevelopment/MCraft-Client/d886dfbcda56cd95b10c60cf23cebb48bbb907af/src/main/resources/mob/pig.png -------------------------------------------------------------------------------- /src/main/resources/mob/sheep.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManiaDevelopment/MCraft-Client/d886dfbcda56cd95b10c60cf23cebb48bbb907af/src/main/resources/mob/sheep.png -------------------------------------------------------------------------------- /src/main/resources/mob/sheep_fur.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManiaDevelopment/MCraft-Client/d886dfbcda56cd95b10c60cf23cebb48bbb907af/src/main/resources/mob/sheep_fur.png -------------------------------------------------------------------------------- /src/main/resources/mob/skeleton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManiaDevelopment/MCraft-Client/d886dfbcda56cd95b10c60cf23cebb48bbb907af/src/main/resources/mob/skeleton.png -------------------------------------------------------------------------------- /src/main/resources/mob/spider.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManiaDevelopment/MCraft-Client/d886dfbcda56cd95b10c60cf23cebb48bbb907af/src/main/resources/mob/spider.png -------------------------------------------------------------------------------- /src/main/resources/mob/zombie.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManiaDevelopment/MCraft-Client/d886dfbcda56cd95b10c60cf23cebb48bbb907af/src/main/resources/mob/zombie.png -------------------------------------------------------------------------------- /src/main/resources/null: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManiaDevelopment/MCraft-Client/d886dfbcda56cd95b10c60cf23cebb48bbb907af/src/main/resources/null -------------------------------------------------------------------------------- /src/main/resources/particles.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManiaDevelopment/MCraft-Client/d886dfbcda56cd95b10c60cf23cebb48bbb907af/src/main/resources/particles.png -------------------------------------------------------------------------------- /src/main/resources/rain.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManiaDevelopment/MCraft-Client/d886dfbcda56cd95b10c60cf23cebb48bbb907af/src/main/resources/rain.png -------------------------------------------------------------------------------- /src/main/resources/rock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManiaDevelopment/MCraft-Client/d886dfbcda56cd95b10c60cf23cebb48bbb907af/src/main/resources/rock.png -------------------------------------------------------------------------------- /src/main/resources/terrain.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManiaDevelopment/MCraft-Client/d886dfbcda56cd95b10c60cf23cebb48bbb907af/src/main/resources/terrain.png -------------------------------------------------------------------------------- /src/main/resources/water.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ManiaDevelopment/MCraft-Client/d886dfbcda56cd95b10c60cf23cebb48bbb907af/src/main/resources/water.png -------------------------------------------------------------------------------- /src/test/java/TestClient.java: -------------------------------------------------------------------------------- 1 | import com.oyasunadev.mcraft.client.core.MinecraftStandalone; 2 | 3 | 4 | /** 5 | * Created with IntelliJ IDEA. 6 | * User: Oliver Yasuna 7 | * Date: 9/30/12 8 | * Time: 5:26 PM 9 | */ 10 | public class TestClient 11 | { 12 | public static void main(String[] args) 13 | { 14 | new TestClient(); 15 | } 16 | 17 | public TestClient() 18 | { 19 | new MinecraftStandalone().startMinecraft(); 20 | } 21 | } 22 | --------------------------------------------------------------------------------