implement creative inventory, implement bedrock, glass and gravel, version 1.0.4
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user