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
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -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()
); );
} }
} }
@@ -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));
@@ -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++;
} }
} }
} }
@@ -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);
}
}
} }
+10 -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