From 7ddf0707adbc122377842b136cefa21a005983b8 Mon Sep 17 00:00:00 2001 From: leozamboni Date: Fri, 10 Nov 2023 22:34:02 -0300 Subject: [PATCH 1/2] add crafting table --- src/js/Start.js | 3 +- src/js/net/minecraft/client/Minecraft.js | 66 ++++++++++------- .../container/GuiContainerCraftingTable.js | 50 +++++++++++++ .../container/ContainerCraftingTable.js | 67 ++++++++++++++++++ .../net/minecraft/client/world/block/Block.js | 4 ++ .../client/world/block/BlockRegistry.js | 2 + .../world/block/type/BlockCraftingTable.js | 32 +++++++++ .../gui/container/crafting_table.png | Bin 0 -> 3365 bytes src/resources/terrain/terrain.png | Bin 9063 -> 11966 bytes 9 files changed, 196 insertions(+), 28 deletions(-) create mode 100644 src/js/net/minecraft/client/gui/screens/container/GuiContainerCraftingTable.js create mode 100644 src/js/net/minecraft/client/inventory/container/ContainerCraftingTable.js create mode 100644 src/js/net/minecraft/client/world/block/type/BlockCraftingTable.js create mode 100644 src/resources/gui/container/crafting_table.png diff --git a/src/js/Start.js b/src/js/Start.js index 14a55a27..3e1d93bf 100644 --- a/src/js/Start.js +++ b/src/js/Start.js @@ -42,7 +42,8 @@ class Start { "gui/title/background/panorama_3.png", "gui/title/background/panorama_4.png", "gui/title/background/panorama_5.png", - "gui/container/creative.png" + "gui/container/creative.png", + "gui/container/crafting_table.png", ]).then((resources) => { // Launch actual game on canvas window.app = new Minecraft(canvasWrapperId, resources); diff --git a/src/js/net/minecraft/client/Minecraft.js b/src/js/net/minecraft/client/Minecraft.js index 74578d2d..0bd4e3d2 100644 --- a/src/js/net/minecraft/client/Minecraft.js +++ b/src/js/net/minecraft/client/Minecraft.js @@ -399,7 +399,7 @@ export default class Minecraft { this.player.swingArm(); } - + // Pick block if (button === 1) { if (hitResult != null) { @@ -431,33 +431,45 @@ export default class Minecraft { // Don't place blocks if the player is standing there if (!placedBoundingBox.intersects(this.player.boundingBox)) { - let typeId = this.player.inventory.getItemInSelectedSlot(); - - // Get previous block - let prevTypeId = this.world.getBlockAt(x, y, z); - - if (typeId !== 0 && prevTypeId !== typeId) { - // Place block - this.world.setBlockAt(x, y, z, typeId); - - // Swing player arm - this.player.swingArm(); - - // Handle block abilities + // Handle left mouse clicked in block + let GuiLeftMouseCliked; + if (!this.player.isSneaking()) { + let typeId = this.world.getBlockAt(hitResult.x, hitResult.y, hitResult.z); let block = Block.getById(typeId); - block.onBlockPlaced(this.world, x, y, z, hitResult.face); - - // Play sound - let sound = block.getSound(); - let soundName = sound.getStepSound(); - this.soundManager.playSound( - soundName, - hitResult.x + 0.5, - hitResult.y + 0.5, - hitResult.z + 0.5, - 1.0, - sound.getPitch() * 0.8 - ); + GuiLeftMouseCliked = block.getGuiLeftMouseCliked() + } + + if (GuiLeftMouseCliked) { + this.displayScreen(new GuiLeftMouseCliked(this.player)) + } else { + let typeId = this.player.inventory.getItemInSelectedSlot(); + + // Get previous block + let prevTypeId = this.world.getBlockAt(x, y, z); + + if (typeId !== 0 && prevTypeId !== typeId) { + // Place block + this.world.setBlockAt(x, y, z, typeId); + + // Swing player arm + this.player.swingArm(); + + // Handle block abilities + let block = Block.getById(typeId); + block.onBlockPlaced(this.world, x, y, z, hitResult.face); + + // Play sound + let sound = block.getSound(); + let soundName = sound.getStepSound(); + this.soundManager.playSound( + soundName, + hitResult.x + 0.5, + hitResult.y + 0.5, + hitResult.z + 0.5, + 1.0, + sound.getPitch() * 0.8 + ); + } } } } diff --git a/src/js/net/minecraft/client/gui/screens/container/GuiContainerCraftingTable.js b/src/js/net/minecraft/client/gui/screens/container/GuiContainerCraftingTable.js new file mode 100644 index 00000000..114890c1 --- /dev/null +++ b/src/js/net/minecraft/client/gui/screens/container/GuiContainerCraftingTable.js @@ -0,0 +1,50 @@ +import GuiContainer from "../GuiContainer.js"; +import ContainerCraftingTable from "../../../inventory/container/ContainerCraftingTable.js"; +import InventoryBasic from "../../../inventory/inventory/InventoryBasic.js"; + +export default class GuiContainerCraftingTable extends GuiContainer { + + static inventory = new InventoryBasic(); + + constructor(player) { + super(new ContainerCraftingTable(player)); + + this.inventoryWidth = 195; + this.inventoryHeight = 165; + } + + init() { + this.textureInventory = this.getTexture("gui/container/crafting_table.png"); + + super.init(); + } + + drawTitle(stack) { + this.drawString(stack, "Crafting Table", this.x + 8, this.y + 6, 0xff404040, false); + } + + drawInventoryBackground(stack) { + this.drawSprite( + stack, + this.textureInventory, + 0, + 0, + this.inventoryWidth, + this.inventoryHeight, + this.x, + this.y, + this.inventoryWidth, + this.inventoryHeight + ); + } + + keyTyped(key, character) { + if (key === this.minecraft.settings.keyOpenInventory) { + this.minecraft.displayScreen(null); + return true; + } + + return super.keyTyped(key, character); + } + +} \ No newline at end of file diff --git a/src/js/net/minecraft/client/inventory/container/ContainerCraftingTable.js b/src/js/net/minecraft/client/inventory/container/ContainerCraftingTable.js new file mode 100644 index 00000000..0771a881 --- /dev/null +++ b/src/js/net/minecraft/client/inventory/container/ContainerCraftingTable.js @@ -0,0 +1,67 @@ +import Container from "../Container.js"; +import Slot from "../Slot.js"; +import Block from "../../world/block/Block.js"; +import GuiContainerCraftingTable from "../../gui/screens/container/GuiContainerCraftingTable.js"; + +export default class ContainerCraftingTable extends Container { + + constructor(player) { + super(); + + this.itemList = []; + + let playerInventory = player.inventory; + + // Add crafting table slots + for (let y = 0; y < 3; ++y) { + for (let x = 0; x < 3; ++x) { + this.addSlot(new Slot(playerInventory, (y * 3 + x) + 36, 30 + x * 18, 17 + y * 18)); + } + } + + // Add crafting result slot + this.addSlot(new Slot(playerInventory, 45, 124, 35)); + + // Add inventory slots + for (let y = 0; y < 3; ++y) { + for (let x = 0; x < 9; ++x) { + this.addSlot(new Slot(playerInventory, (y * 9 + x) + 9, 8 + x * 18, 84 + y * 18)); + } + } + + // Add player hotbar + for (let x = 0; x < 9; ++x) { + this.addSlot(new Slot(playerInventory, x, 8 + x * 18, 142)); + } + + this.initItems(); + this.scrollTo(0); + } + + scrollTo(scrollOffset) { + let xOffset = (this.itemList.length + 9 - 1) / 9 - 5; + let yOffset = Math.floor((scrollOffset * xOffset) + 0.5); + + if (yOffset < 0) { + yOffset = 0; + } + + for (let y = 0; y < 5; ++y) { + for (let x = 0; x < 9; ++x) { + let index = x + (y + yOffset) * 9; + + if (index >= 0 && index < this.itemList.length) { + GuiContainerCraftingTable.inventory.setItem(x + y * 9, this.itemList[index]); + } else { + GuiContainerCraftingTable.inventory.setItem(x + y * 9, null); + } + } + } + } + + initItems() { + Block.blocks.forEach((block) => { + this.itemList.push(block.getId()); + }); + } +} \ No newline at end of file diff --git a/src/js/net/minecraft/client/world/block/Block.js b/src/js/net/minecraft/client/world/block/Block.js index 768ba9cc..de5b5e87 100644 --- a/src/js/net/minecraft/client/world/block/Block.js +++ b/src/js/net/minecraft/client/world/block/Block.js @@ -101,6 +101,10 @@ export default class Block { } + getGuiLeftMouseCliked() { + + } + collisionRayTrace(world, x, y, z, start, end) { start = start.addVector(-x, -y, -z); end = end.addVector(-x, -y, -z); diff --git a/src/js/net/minecraft/client/world/block/BlockRegistry.js b/src/js/net/minecraft/client/world/block/BlockRegistry.js index ce58eff6..d9b135ec 100644 --- a/src/js/net/minecraft/client/world/block/BlockRegistry.js +++ b/src/js/net/minecraft/client/world/block/BlockRegistry.js @@ -9,6 +9,7 @@ import BlockTorch from "./type/BlockTorch.js"; import Sound from "./sound/Sound.js"; import Block from "./Block.js"; import BlockWood from "./type/BlockWood.js"; +import BlockCraftingTable from "./type/BlockCraftingTable.js"; import BlockBedrock from "./type/BlockBedrock.js"; import BlockGlass from "./type/BlockGlass.js"; import SoundGlass from "./sound/SoundGlass.js"; @@ -33,6 +34,7 @@ export class BlockRegistry { BlockRegistry.DIRT = new BlockDirt(3, 2); BlockRegistry.COBBLE_STONE = new BlockCobblestone(4, 14); BlockRegistry.WOOD = new BlockWood(5, 10); + BlockRegistry.CRAFTING_TABLE = new BlockCraftingTable(6, 15); BlockRegistry.BEDROCK = new BlockBedrock(7, 11); BlockRegistry.GRAVEL = new BlockGravel(13, 13); BlockRegistry.LOG = new BlockLog(17, 4); diff --git a/src/js/net/minecraft/client/world/block/type/BlockCraftingTable.js b/src/js/net/minecraft/client/world/block/type/BlockCraftingTable.js new file mode 100644 index 00000000..2777f479 --- /dev/null +++ b/src/js/net/minecraft/client/world/block/type/BlockCraftingTable.js @@ -0,0 +1,32 @@ +import GuiContainerCraftingTable from "../../../gui/screens/container/GuiContainerCraftingTable.js"; +import EnumBlockFace from "../../../../util/EnumBlockFace.js"; +import Block from "../Block.js"; + +export default class BlockCraftingTable extends Block { + + constructor(id, textureSlotId) { + super(id, textureSlotId); + } + + getGuiLeftMouseCliked() { + return GuiContainerCraftingTable + } + + getParticleTextureFace() { + return EnumBlockFace.NORTH; + } + + getTextureForFace(face) { + switch (face) { + case EnumBlockFace.BOTTOM: + return this.textureSlotId + 3; + case EnumBlockFace.TOP: + return this.textureSlotId; + case EnumBlockFace.SOUTH: + case EnumBlockFace.NORTH: + return this.textureSlotId + 1; + default: + return this.textureSlotId + 2; + } + } +} \ No newline at end of file diff --git a/src/resources/gui/container/crafting_table.png b/src/resources/gui/container/crafting_table.png new file mode 100644 index 0000000000000000000000000000000000000000..faf54d6bbdffb750da52851c9a60c04f3304b081 GIT binary patch literal 3365 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 literal 9063 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 WMt Date: Sun, 10 Dec 2023 16:47:09 +0000 Subject: [PATCH 2/2] Update TagRegistry.js --- src/js/net/minecraft/nbt/tag/TagRegistry.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/js/net/minecraft/nbt/tag/TagRegistry.js b/src/js/net/minecraft/nbt/tag/TagRegistry.js index 3c508a58..c01435ae 100644 --- a/src/js/net/minecraft/nbt/tag/TagRegistry.js +++ b/src/js/net/minecraft/nbt/tag/TagRegistry.js @@ -15,7 +15,7 @@ export default class TagRegistry { static idToTag = new Map(); static tagToId = new Map(); - static { + constructor() { TagRegistry.register(1, ByteTag); TagRegistry.register(2, ShortTag); TagRegistry.register(3, IntTag); @@ -58,4 +58,4 @@ export default class TagRegistry { return new clazz(tagName); } -} \ No newline at end of file +}