mirror of
https://github.com/PixelGuys/Cubyz.git
synced 2025-09-08 11:44:21 -04:00
Add invisible inventory
This commit is contained in:
parent
444d1ac927
commit
0c20ec6358
@ -40,6 +40,7 @@ import io.cubyz.blocks.Block;
|
|||||||
import io.cubyz.blocks.BlockInstance;
|
import io.cubyz.blocks.BlockInstance;
|
||||||
import io.cubyz.entity.Entity;
|
import io.cubyz.entity.Entity;
|
||||||
import io.cubyz.entity.Player;
|
import io.cubyz.entity.Player;
|
||||||
|
import io.cubyz.items.Inventory;
|
||||||
import io.cubyz.modding.ModLoader;
|
import io.cubyz.modding.ModLoader;
|
||||||
import io.cubyz.multiplayer.client.CubzClient;
|
import io.cubyz.multiplayer.client.CubzClient;
|
||||||
import io.cubyz.ui.DebugGUI;
|
import io.cubyz.ui.DebugGUI;
|
||||||
@ -68,7 +69,8 @@ public class Cubyz implements IGameLogic {
|
|||||||
public static UISystem gameUI;
|
public static UISystem gameUI;
|
||||||
public static World world;
|
public static World world;
|
||||||
|
|
||||||
private int inventorySelection = 1; // Selected slot in inventory
|
private int inventorySelection = 0; // Selected slot in inventory
|
||||||
|
private static Inventory inventory;
|
||||||
|
|
||||||
private CubyzMeshSelectionDetector msd;
|
private CubyzMeshSelectionDetector msd;
|
||||||
|
|
||||||
@ -117,6 +119,7 @@ public class Cubyz implements IGameLogic {
|
|||||||
world.synchronousSeek(dx, dz);
|
world.synchronousSeek(dx, dz);
|
||||||
int highestY = world.getHighestBlock(dx, dz);
|
int highestY = world.getHighestBlock(dx, dz);
|
||||||
world.getLocalPlayer().setPosition(new Vector3f(dx, highestY+2, dz));
|
world.getLocalPlayer().setPosition(new Vector3f(dx, highestY+2, dz));
|
||||||
|
inventory = new Inventory();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void requestJoin(String host) {
|
public static void requestJoin(String host) {
|
||||||
@ -373,8 +376,8 @@ public class Cubyz implements IGameLogic {
|
|||||||
breakCooldown = 10;
|
breakCooldown = 10;
|
||||||
BlockInstance bi = msd.getSelectedBlockInstance();
|
BlockInstance bi = msd.getSelectedBlockInstance();
|
||||||
if (bi != null && bi.getBlock().getHardness() != -1f) {
|
if (bi != null && bi.getBlock().getHardness() != -1f) {
|
||||||
inventorySelection = bi.getID();// To be able to build that block again
|
|
||||||
world.removeBlock(bi.getX(), bi.getY(), bi.getZ());
|
world.removeBlock(bi.getX(), bi.getY(), bi.getZ());
|
||||||
|
inventory.addBlock(bi.getBlock(), 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -383,9 +386,10 @@ public class Cubyz implements IGameLogic {
|
|||||||
if (buildCooldown == 0) {
|
if (buildCooldown == 0) {
|
||||||
buildCooldown = 10;
|
buildCooldown = 10;
|
||||||
Vector3i pos = msd.getEmptyPlace(ctx.getCamera().getPosition());
|
Vector3i pos = msd.getEmptyPlace(ctx.getCamera().getPosition());
|
||||||
Block b = world.getBlocks()[inventorySelection]; // TODO: add inventory
|
Block b = inventory.getBlock(inventorySelection); // TODO: add inventory
|
||||||
if (b != null && pos != null) {
|
if (b != null && pos != null) {
|
||||||
world.placeBlock(pos.x, pos.y, pos.z, b);
|
world.placeBlock(pos.x, pos.y, pos.z, b);
|
||||||
|
inventory.addBlock(b, -1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
60
cubyz-common/src/io/cubyz/items/Inventory.java
Normal file
60
cubyz-common/src/io/cubyz/items/Inventory.java
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
package io.cubyz.items;
|
||||||
|
|
||||||
|
import io.cubyz.blocks.Block;
|
||||||
|
|
||||||
|
public class Inventory {
|
||||||
|
private ItemStack[] items = new ItemStack[32]; // First 8 item stacks are the hotbar
|
||||||
|
|
||||||
|
public void addItem(Item i, int amount) {
|
||||||
|
for(int j = 0; j < items.length; j++) {
|
||||||
|
if(items[j] != null && items[j].getItem() == i && !items[j].filled()) {
|
||||||
|
amount -= items[j].add(amount);
|
||||||
|
if(items[j].empty()) {
|
||||||
|
items[j] = null;
|
||||||
|
}
|
||||||
|
if(amount == 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for(int j = 0; j < items.length; j++) {
|
||||||
|
if(items[j] == null) {
|
||||||
|
items[j] = new ItemStack(i);
|
||||||
|
amount -= items[j].add(amount);
|
||||||
|
if(amount == 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// TODO: Consider a full inventory
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addBlock(Block b, int amount) {
|
||||||
|
for(int j = 0; j < items.length; j++) {
|
||||||
|
if(items[j] != null && items[j].getBlock() == b && !items[j].filled()) {
|
||||||
|
amount -= items[j].add(amount);
|
||||||
|
if(items[j].empty()) {
|
||||||
|
items[j] = null;
|
||||||
|
}
|
||||||
|
if(amount == 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for(int j = 0; j < items.length; j++) {
|
||||||
|
if(items[j] == null) {
|
||||||
|
items[j] = new ItemStack(b);
|
||||||
|
amount -= items[j].add(amount);
|
||||||
|
if(amount == 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public Block getBlock(int selection) {
|
||||||
|
if(items[selection] == null)
|
||||||
|
return null;
|
||||||
|
return items[selection].getBlock();
|
||||||
|
}
|
||||||
|
}
|
@ -65,5 +65,11 @@ public class Item implements IRegistryElement {
|
|||||||
public Resource getRegistryID() {
|
public Resource getRegistryID() {
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setID(int ID) {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -1,12 +0,0 @@
|
|||||||
package io.cubyz.items;
|
|
||||||
|
|
||||||
import io.cubyz.blocks.Block;
|
|
||||||
|
|
||||||
public class ItemBlock extends Item {
|
|
||||||
|
|
||||||
public ItemBlock(Block block) {
|
|
||||||
this.fullTexturePath = "block/" + block.getTexture();
|
|
||||||
this.itemDisplayName = block.getClass().getSimpleName();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -6,16 +6,25 @@ import org.jungle.Texture;
|
|||||||
import org.jungle.util.Material;
|
import org.jungle.util.Material;
|
||||||
import org.jungle.util.OBJLoader;
|
import org.jungle.util.OBJLoader;
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
import io.cubyz.blocks.Block;
|
||||||
|
|
||||||
public class ItemStack {
|
public class ItemStack {
|
||||||
|
|
||||||
private Item item;
|
private Item item;
|
||||||
|
private Block block;
|
||||||
private Spatial spatial;
|
private Spatial spatial;
|
||||||
|
int number = 0;
|
||||||
|
|
||||||
public ItemStack(Item item) {
|
public ItemStack(Item item) {
|
||||||
this.item = item;
|
this.item = item;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ItemStack(Block block) {
|
||||||
|
this.block = block;
|
||||||
|
item = new Item();
|
||||||
|
item.setTexture(block.getTexture());
|
||||||
|
}
|
||||||
|
|
||||||
public void update() {}
|
public void update() {}
|
||||||
|
|
||||||
public Mesh getMesh() {
|
public Mesh getMesh() {
|
||||||
@ -36,10 +45,35 @@ public class ItemStack {
|
|||||||
return item._meshCache;
|
return item._meshCache;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean filled() {
|
||||||
|
return number >= item.stackSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean empty() {
|
||||||
|
return number <= 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int add(int number) {
|
||||||
|
this.number += number;
|
||||||
|
if(this.number > item.stackSize) {
|
||||||
|
number = number-this.number+item.stackSize;
|
||||||
|
this.number = item.stackSize;
|
||||||
|
}
|
||||||
|
if(this.number < 0) {
|
||||||
|
number = number-this.number;
|
||||||
|
this.number = 0;
|
||||||
|
}
|
||||||
|
return number;
|
||||||
|
}
|
||||||
|
|
||||||
public Item getItem() {
|
public Item getItem() {
|
||||||
return item;
|
return item;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Block getBlock() {
|
||||||
|
return block;
|
||||||
|
}
|
||||||
|
|
||||||
public Spatial getSpatial() {
|
public Spatial getSpatial() {
|
||||||
if (spatial == null) {
|
if (spatial == null) {
|
||||||
spatial = new Spatial(getMesh());
|
spatial = new Spatial(getMesh());
|
||||||
|
Loading…
x
Reference in New Issue
Block a user