InventoryItemAlignment

This commit is contained in:
2022-10-02 16:58:52 +02:00
parent 4bdb3f94d5
commit 18db3514e3
14 changed files with 56 additions and 23 deletions

View File

@ -14,6 +14,7 @@ import net.kyori.adventure.sound.Sound;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor;
import net.minestom.server.MinecraftServer;
import net.minestom.server.coordinate.Vec;
import net.minestom.server.entity.Player;
import net.minestom.server.event.instance.AddEntityToInstanceEvent;
import net.minestom.server.event.instance.RemoveEntityFromInstanceEvent;
@ -77,13 +78,12 @@ public class GameConfigurationInventory extends InteractableInventory {
int offset = 18;
InventoryItemAlignment itemAlignment = new InventoryItemAlignment(config.getAll().size(), 3);
for(Option<?> item : config.getAll()) {
Vec2d current = itemAlignment.next();
System.out.println(current.x + " : " + current.y);
map.put((int) (offset + (current.y * 9) + current.x), item);
InventoryItemAlignment.ItemOffset current = itemAlignment.next();
map.put(offset + current.get(), item);
setDummyItem(
item.getCurrent(),
(int) (offset + (current.y * 9) + current.x)
offset + current.get()
);
}
}

View File

@ -74,6 +74,8 @@ public class Room extends MineNetInstance implements Spawnable {
eventNode().addListener(PlayerBlockBreakEvent.class, CommonEventHandles::cancel);
eventNode().addListener(PlayerDisconnectEvent.class, playerDisconnectEvent -> unsetRoom(playerDisconnectEvent.getPlayer()));
setOwner(owner);
new GameSelector().setInstance(this, new Pos(0.5, 16, 9.5));

View File

@ -1,17 +1,23 @@
package eu.mhsl.minenet.minigames.instance.room.inventory;
import eu.mhsl.minenet.minigames.instance.game.Game;
import eu.mhsl.minenet.minigames.instance.game.GameList;
import eu.mhsl.minenet.minigames.instance.game.GameType;
import eu.mhsl.minenet.minigames.instance.game.minigame.config.GameConfigurationInventory;
import eu.mhsl.minenet.minigames.instance.game.minigame.config.GameFactory;
import eu.mhsl.minenet.minigames.instance.room.Room;
import eu.mhsl.minenet.minigames.shared.inventory.InteractableInventory;
import eu.mhsl.minenet.minigames.util.InventoryItemAlignment;
import net.kyori.adventure.text.Component;
import net.minestom.server.inventory.InventoryType;
import net.minestom.server.item.ItemHideFlag;
import net.minestom.server.item.ItemStack;
import net.minestom.server.item.Material;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class MinigameTypeSelectInventory extends InteractableInventory {
final private Room room;
public MinigameTypeSelectInventory(Room room) {
@ -19,13 +25,14 @@ public class MinigameTypeSelectInventory extends InteractableInventory {
this.room = room;
int typeCount = 0;
InventoryItemAlignment itemAlignment = new InventoryItemAlignment(GameType.values().length, 1);
for (GameType type : GameType.values()) {
setClickableItem(
ItemStack.builder(type.getIcon())
.displayName(type.getTitle().asComponent())
.lore(type.getDescription().asComponent())
.build(),
typeCount,
itemAlignment.next().get(),
itemClick -> {
drawGames(type);
}
@ -44,11 +51,13 @@ public class MinigameTypeSelectInventory extends InteractableInventory {
for(int i = 18; i <= 53; i++) {
setDummyItem(Material.AIR, i);
}
int gameCount = 18;
for (GameList gameList : GameList.values()) {
if(!gameList.getType().equals(type)) continue;
int offset = 18;
GameFactory gameFactory = gameList.getFactory();
List<GameList> games = Arrays.stream(GameList.values()).filter(gameList -> gameList.getType().equals(type)).toList();
InventoryItemAlignment itemAlignment = new InventoryItemAlignment(games.size(), 4);
for (GameList game : games) {
GameFactory gameFactory = game.getFactory();
setClickableItem(
ItemStack.builder(gameFactory.symbol())
@ -56,10 +65,9 @@ public class MinigameTypeSelectInventory extends InteractableInventory {
.lore(gameFactory.description())
.meta(metaBuilder -> metaBuilder.hideFlag(ItemHideFlag.HIDE_ATTRIBUTES))
.build(),
gameCount,
offset + itemAlignment.next().get(),
itemClick -> itemClick.getPlayer().openInventory(new GameConfigurationInventory(room, gameFactory))
);
gameCount++;
}
}
}

View File

@ -31,12 +31,12 @@ public class InventoryItemAlignment {
if(x * y < size) throw new RuntimeException("Not enough space for Item alignment");
}
public Vec2d next() {
public ItemOffset next() {
counter++;
if(this.size < 9) return new Vec2d(this.row(this.size).get(counter), y/2);
if(this.size < 9) return new ItemOffset(this.row(this.size).get(counter), y > 1 ? 1 : 0);
//TODO more items?
return new Vec2d(0,0);
return new ItemOffset(0,0);
}
@ -132,4 +132,26 @@ public class InventoryItemAlignment {
}
}.get(count);
}
public class ItemOffset {
private int x;
private int z;
public ItemOffset(int x, int z) {
this.x = x;
this.z = z;
}
public int getX() {
return x;
}
public int getZ() {
return z;
}
public int get() {
return x + (z * 9);
}
}
}