InventoryItemAlignment

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

Binary file not shown.

View File

@ -14,6 +14,7 @@ import net.kyori.adventure.sound.Sound;
import net.kyori.adventure.text.Component; import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.format.NamedTextColor;
import net.minestom.server.MinecraftServer; import net.minestom.server.MinecraftServer;
import net.minestom.server.coordinate.Vec;
import net.minestom.server.entity.Player; import net.minestom.server.entity.Player;
import net.minestom.server.event.instance.AddEntityToInstanceEvent; import net.minestom.server.event.instance.AddEntityToInstanceEvent;
import net.minestom.server.event.instance.RemoveEntityFromInstanceEvent; import net.minestom.server.event.instance.RemoveEntityFromInstanceEvent;
@ -77,13 +78,12 @@ public class GameConfigurationInventory extends InteractableInventory {
int offset = 18; int offset = 18;
InventoryItemAlignment itemAlignment = new InventoryItemAlignment(config.getAll().size(), 3); InventoryItemAlignment itemAlignment = new InventoryItemAlignment(config.getAll().size(), 3);
for(Option<?> item : config.getAll()) { for(Option<?> item : config.getAll()) {
Vec2d current = itemAlignment.next(); InventoryItemAlignment.ItemOffset current = itemAlignment.next();
System.out.println(current.x + " : " + current.y); map.put(offset + current.get(), item);
map.put((int) (offset + (current.y * 9) + current.x), item);
setDummyItem( setDummyItem(
item.getCurrent(), 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(PlayerBlockBreakEvent.class, CommonEventHandles::cancel);
eventNode().addListener(PlayerDisconnectEvent.class, playerDisconnectEvent -> unsetRoom(playerDisconnectEvent.getPlayer()));
setOwner(owner); setOwner(owner);
new GameSelector().setInstance(this, new Pos(0.5, 16, 9.5)); 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; 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.GameList;
import eu.mhsl.minenet.minigames.instance.game.GameType; 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.GameConfigurationInventory;
import eu.mhsl.minenet.minigames.instance.game.minigame.config.GameFactory; import eu.mhsl.minenet.minigames.instance.game.minigame.config.GameFactory;
import eu.mhsl.minenet.minigames.instance.room.Room; import eu.mhsl.minenet.minigames.instance.room.Room;
import eu.mhsl.minenet.minigames.shared.inventory.InteractableInventory; import eu.mhsl.minenet.minigames.shared.inventory.InteractableInventory;
import eu.mhsl.minenet.minigames.util.InventoryItemAlignment;
import net.kyori.adventure.text.Component; import net.kyori.adventure.text.Component;
import net.minestom.server.inventory.InventoryType; import net.minestom.server.inventory.InventoryType;
import net.minestom.server.item.ItemHideFlag; import net.minestom.server.item.ItemHideFlag;
import net.minestom.server.item.ItemStack; import net.minestom.server.item.ItemStack;
import net.minestom.server.item.Material; import net.minestom.server.item.Material;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class MinigameTypeSelectInventory extends InteractableInventory { public class MinigameTypeSelectInventory extends InteractableInventory {
final private Room room; final private Room room;
public MinigameTypeSelectInventory(Room room) { public MinigameTypeSelectInventory(Room room) {
@ -19,13 +25,14 @@ public class MinigameTypeSelectInventory extends InteractableInventory {
this.room = room; this.room = room;
int typeCount = 0; int typeCount = 0;
InventoryItemAlignment itemAlignment = new InventoryItemAlignment(GameType.values().length, 1);
for (GameType type : GameType.values()) { for (GameType type : GameType.values()) {
setClickableItem( setClickableItem(
ItemStack.builder(type.getIcon()) ItemStack.builder(type.getIcon())
.displayName(type.getTitle().asComponent()) .displayName(type.getTitle().asComponent())
.lore(type.getDescription().asComponent()) .lore(type.getDescription().asComponent())
.build(), .build(),
typeCount, itemAlignment.next().get(),
itemClick -> { itemClick -> {
drawGames(type); drawGames(type);
} }
@ -44,11 +51,13 @@ public class MinigameTypeSelectInventory extends InteractableInventory {
for(int i = 18; i <= 53; i++) { for(int i = 18; i <= 53; i++) {
setDummyItem(Material.AIR, i); setDummyItem(Material.AIR, i);
} }
int gameCount = 18; int offset = 18;
for (GameList gameList : GameList.values()) {
if(!gameList.getType().equals(type)) continue;
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( setClickableItem(
ItemStack.builder(gameFactory.symbol()) ItemStack.builder(gameFactory.symbol())
@ -56,10 +65,9 @@ public class MinigameTypeSelectInventory extends InteractableInventory {
.lore(gameFactory.description()) .lore(gameFactory.description())
.meta(metaBuilder -> metaBuilder.hideFlag(ItemHideFlag.HIDE_ATTRIBUTES)) .meta(metaBuilder -> metaBuilder.hideFlag(ItemHideFlag.HIDE_ATTRIBUTES))
.build(), .build(),
gameCount, offset + itemAlignment.next().get(),
itemClick -> itemClick.getPlayer().openInventory(new GameConfigurationInventory(room, gameFactory)) 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"); if(x * y < size) throw new RuntimeException("Not enough space for Item alignment");
} }
public Vec2d next() { public ItemOffset next() {
counter++; 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? //TODO more items?
return new Vec2d(0,0); return new ItemOffset(0,0);
} }
@ -132,4 +132,26 @@ public class InventoryItemAlignment {
} }
}.get(count); }.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);
}
}
} }

View File

@ -1,9 +1,10 @@
map;en_us;de_de map,en_us,de_de
localName;English;Deutsch localName,English,Deutsch
name;English;German name,English,German
symbol;eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvY2Q5MTQ1Njg3N2Y1NGJmMWFjZTI1MWU0Y2VlNDBkYmE1OTdkMmNjNDAzNjJjYjhmNGVkNzExZTUwYjBiZTViMyJ9fX0=;eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNWU3ODk5YjQ4MDY4NTg2OTdlMjgzZjA4NGQ5MTczZmU0ODc4ODY0NTM3NzQ2MjZiMjRiZDhjZmVjYzc3YjNmIn19fQ== symbol,eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvY2Q5MTQ1Njg3N2Y1NGJmMWFjZTI1MWU0Y2VlNDBkYmE1OTdkMmNjNDAzNjJjYjhmNGVkNzExZTUwYjBiZTViMyJ9fX0=,eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNWU3ODk5YjQ4MDY4NTg2OTdlMjgzZjA4NGQ5MTczZmU0ODc4ODY0NTM3NzQ2MjZiMjRiZDhjZmVjYzc3YjNmIn19fQ==
sample;The brown fox jumps over the white fence;Der braune Fuchs springt über den weißen Zaun sample,The brown fox jumps over the white fence,Der braune Fuchs springt über den weißen Zaun
;; ,,
ns:common#;; ns:common#,,
select_language;Please select your prefered Language;Bitte wähle deine bevorzugte Sprache! select_language,Please select your prefered Language,Bitte wähle deine bevorzugte Sprache!
welcome;Welcome!;Willkommen! welcome,Welcome!,Willkommen!
asdasd,asd,ads

1 map en_us de_de
2 localName English Deutsch
3 name English German
4 symbol eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvY2Q5MTQ1Njg3N2Y1NGJmMWFjZTI1MWU0Y2VlNDBkYmE1OTdkMmNjNDAzNjJjYjhmNGVkNzExZTUwYjBiZTViMyJ9fX0= eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNWU3ODk5YjQ4MDY4NTg2OTdlMjgzZjA4NGQ5MTczZmU0ODc4ODY0NTM3NzQ2MjZiMjRiZDhjZmVjYzc3YjNmIn19fQ==
5 sample The brown fox jumps over the white fence Der braune Fuchs springt über den weißen Zaun
6
7 ns:common#
8 select_language Please select your prefered Language Bitte wähle deine bevorzugte Sprache!
9 welcome Welcome! Willkommen!
10 asdasd asd ads