implement creative inventory, implement bedrock, glass and gravel, version 1.0.4

This commit is contained in:
LabyStudio
2022-05-20 01:30:31 +02:00
parent f85d84e2a3
commit 34b0015af6
35 changed files with 601 additions and 76 deletions
@@ -0,0 +1,38 @@
export default class Container {
constructor() {
this.slots = [];
this.dirty = true;
}
addSlot(slot) {
this.slots.push(slot);
}
swapWithHotbar(slot, inventoryPlayer, hotbarIndex) {
let slotInventory = slot.inventory;
let typeId = slotInventory.getItemInSlot(slot.index);
let hotbarTypeId = inventoryPlayer.getItemInSlot(hotbarIndex);
slotInventory.setItem(slot.index, hotbarTypeId);
inventoryPlayer.setItem(hotbarIndex, typeId);
this.dirty = true;
}
onSlotClick(slot, player) {
let inventoryPlayer = player.inventory;
let typeId = slot.inventory.getItemInSlot(slot.index);
if(inventoryPlayer.itemInCursor === null || inventoryPlayer.itemInCursor === 0) {
slot.inventory.setItem(slot.index, 0);
inventoryPlayer.itemInCursor = typeId;
} else {
slot.inventory.setItem(slot.index, inventoryPlayer.itemInCursor);
inventoryPlayer.itemInCursor = typeId;
}
this.dirty = true;
}
}
@@ -1,37 +1,15 @@
export default class Inventory {
constructor() {
this.selectedSlotIndex = 0;
this.items = [];
// Default items in inventory
this.items[0] = 1;
this.items[1] = 2;
this.items[2] = 3;
this.items[3] = 5;
this.items[4] = 17;
this.items[5] = 18;
this.items[6] = 12;
this.items[7] = 50;
constructor(name) {
this.name = name;
}
setItemInSelectedSlot(typeId) {
this.items[this.selectedSlotIndex] = typeId;
getItemInSlot(index) {
}
getItemInSelectedSlot() {
return this.getItemInSlot(this.selectedSlotIndex);
setItem(index, typeId) {
}
shiftSelectedSlot(offset) {
if (this.selectedSlotIndex + offset < 0) {
this.selectedSlotIndex = 9 + (this.selectedSlotIndex + offset);
} else {
this.selectedSlotIndex = (this.selectedSlotIndex + offset) % 9;
}
}
getItemInSlot(slot) {
return this.items.hasOwnProperty(slot) ? this.items[slot] : 0;
}
}
@@ -0,0 +1,10 @@
export default class Slot {
constructor(inventory, index, x, y) {
this.inventory = inventory;
this.index = index;
this.x = x;
this.y = y;
}
}
@@ -0,0 +1,78 @@
import Container from "../Container.js";
import GuiContainerCreative from "../../gui/screens/container/GuiContainerCreative.js";
import Slot from "../Slot.js";
import Block from "../../world/block/Block.js";
import InventoryPlayer from "../inventory/InventoryPlayer.js";
export default class ContainerCreative extends Container {
constructor(player) {
super();
this.itemList = [];
let playerInventory = player.inventory;
// Add creative inventory slots
for (let y = 0; y < 5; ++y) {
for (let x = 0; x < 9; ++x) {
this.addSlot(new Slot(GuiContainerCreative.inventory, y * 9 + x, 9 + x * 18, 18 + y * 18));
}
}
// Add player hotbar
for (let x = 0; x < 9; ++x) {
this.addSlot(new Slot(playerInventory, x, 9 + x * 18, 112));
}
this.initItems();
this.scrollTo(0);
}
swapWithHotbar(slot, inventoryPlayer, hotbarIndex) {
let slotInventory = slot.inventory;
let typeId = slotInventory.getItemInSlot(slot.index);
inventoryPlayer.setItem(hotbarIndex, typeId);
this.dirty = true;
}
onSlotClick(slot, player) {
if (slot.inventory instanceof InventoryPlayer) {
super.onSlotClick(slot, player);
} else {
let inventoryPlayer = player.inventory;
inventoryPlayer.itemInCursor = slot.inventory.getItemInSlot(slot.index);
}
this.dirty = true;
}
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) {
GuiContainerCreative.inventory.setItem(x + y * 9, this.itemList[index]);
} else {
GuiContainerCreative.inventory.setItem(x + y * 9, null);
}
}
}
}
initItems() {
Block.blocks.forEach((block) => {
this.itemList.push(block.getId());
});
}
}
@@ -0,0 +1,11 @@
import Container from "../Container.js";
export default class ContainerPlayer extends Container {
constructor() {
super();
}
}
@@ -0,0 +1,19 @@
import Inventory from "../Inventory.js";
export default class InventoryBasic extends Inventory {
constructor() {
super("basic");
this.items = [];
}
getItemInSlot(index) {
return this.items[index];
}
setItem(index, typeId) {
this.items[index] = typeId;
}
}
@@ -0,0 +1,36 @@
import Inventory from "../Inventory.js";
export default class InventoryPlayer extends Inventory {
constructor() {
super("player");
this.selectedSlotIndex = 0;
this.itemInCursor = null;
this.items = [];
}
setItem(index, typeId) {
this.items[index] = typeId === null ? 0 : typeId;
}
setItemInSelectedSlot(typeId) {
this.items[this.selectedSlotIndex] = typeId;
}
getItemInSelectedSlot() {
return this.getItemInSlot(this.selectedSlotIndex);
}
shiftSelectedSlot(offset) {
if (this.selectedSlotIndex + offset < 0) {
this.selectedSlotIndex = 9 + (this.selectedSlotIndex + offset);
} else {
this.selectedSlotIndex = (this.selectedSlotIndex + offset) % 9;
}
}
getItemInSlot(slot) {
return this.items.hasOwnProperty(slot) ? this.items[slot] : 0;
}
}