forked from GeyserMC/Geyser
Added barriers to creative inventory crafting grid (#426)
This commit is contained in:
parent
36708da1d6
commit
1a53f53d78
3 changed files with 46 additions and 24 deletions
|
@ -28,7 +28,10 @@ package org.geysermc.connector.network.translators.inventory;
|
||||||
import com.github.steveice10.mc.protocol.data.game.entity.metadata.ItemStack;
|
import com.github.steveice10.mc.protocol.data.game.entity.metadata.ItemStack;
|
||||||
import com.github.steveice10.mc.protocol.data.game.entity.player.GameMode;
|
import com.github.steveice10.mc.protocol.data.game.entity.player.GameMode;
|
||||||
import com.github.steveice10.mc.protocol.packet.ingame.client.window.ClientCreativeInventoryActionPacket;
|
import com.github.steveice10.mc.protocol.packet.ingame.client.window.ClientCreativeInventoryActionPacket;
|
||||||
import com.nukkitx.protocol.bedrock.data.*;
|
import com.nukkitx.protocol.bedrock.data.ContainerId;
|
||||||
|
import com.nukkitx.protocol.bedrock.data.InventoryActionData;
|
||||||
|
import com.nukkitx.protocol.bedrock.data.InventorySource;
|
||||||
|
import com.nukkitx.protocol.bedrock.data.ItemData;
|
||||||
import com.nukkitx.protocol.bedrock.packet.InventoryContentPacket;
|
import com.nukkitx.protocol.bedrock.packet.InventoryContentPacket;
|
||||||
import com.nukkitx.protocol.bedrock.packet.InventorySlotPacket;
|
import com.nukkitx.protocol.bedrock.packet.InventorySlotPacket;
|
||||||
import it.unimi.dsi.fastutil.longs.LongArraySet;
|
import it.unimi.dsi.fastutil.longs.LongArraySet;
|
||||||
|
@ -37,6 +40,7 @@ import org.geysermc.connector.network.session.GeyserSession;
|
||||||
import org.geysermc.connector.network.translators.Translators;
|
import org.geysermc.connector.network.translators.Translators;
|
||||||
import org.geysermc.connector.network.translators.inventory.action.InventoryActionDataTranslator;
|
import org.geysermc.connector.network.translators.inventory.action.InventoryActionDataTranslator;
|
||||||
import org.geysermc.connector.utils.InventoryUtils;
|
import org.geysermc.connector.utils.InventoryUtils;
|
||||||
|
import org.geysermc.connector.utils.Toolbox;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
@ -50,14 +54,7 @@ public class PlayerInventoryTranslator extends InventoryTranslator {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateInventory(GeyserSession session, Inventory inventory) {
|
public void updateInventory(GeyserSession session, Inventory inventory) {
|
||||||
// Crafting grid
|
updateCraftingGrid(session, inventory);
|
||||||
for (int i = 1; i < 5; i++) {
|
|
||||||
InventorySlotPacket slotPacket = new InventorySlotPacket();
|
|
||||||
slotPacket.setContainerId(ContainerId.CURSOR);
|
|
||||||
slotPacket.setSlot(i + 27);
|
|
||||||
slotPacket.setItem(Translators.getItemTranslator().translateToBedrock(session, inventory.getItem(i)));
|
|
||||||
session.getUpstream().sendPacket(slotPacket);
|
|
||||||
}
|
|
||||||
|
|
||||||
InventoryContentPacket inventoryContentPacket = new InventoryContentPacket();
|
InventoryContentPacket inventoryContentPacket = new InventoryContentPacket();
|
||||||
inventoryContentPacket.setContainerId(ContainerId.INVENTORY);
|
inventoryContentPacket.setContainerId(ContainerId.INVENTORY);
|
||||||
|
@ -90,6 +87,28 @@ public class PlayerInventoryTranslator extends InventoryTranslator {
|
||||||
session.getUpstream().sendPacket(offhandPacket);
|
session.getUpstream().sendPacket(offhandPacket);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update the crafting grid for the player to hide/show the barriers in the creative inventory
|
||||||
|
* @param session Session of the player
|
||||||
|
* @param inventory Inventory of the player
|
||||||
|
*/
|
||||||
|
public static void updateCraftingGrid(GeyserSession session, Inventory inventory) {
|
||||||
|
// Crafting grid
|
||||||
|
for (int i = 1; i < 5; i++) {
|
||||||
|
InventorySlotPacket slotPacket = new InventorySlotPacket();
|
||||||
|
slotPacket.setContainerId(ContainerId.CURSOR);
|
||||||
|
slotPacket.setSlot(i + 27);
|
||||||
|
|
||||||
|
if (session.getGameMode() == GameMode.CREATIVE) {
|
||||||
|
slotPacket.setItem(Translators.getItemTranslator().translateToBedrock(session, new ItemStack(Toolbox.BARRIER_INDEX)));
|
||||||
|
}else{
|
||||||
|
slotPacket.setItem(Translators.getItemTranslator().translateToBedrock(session, inventory.getItem(i)));
|
||||||
|
}
|
||||||
|
|
||||||
|
session.getUpstream().sendPacket(slotPacket);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateSlot(GeyserSession session, Inventory inventory, int slot) {
|
public void updateSlot(GeyserSession session, Inventory inventory, int slot) {
|
||||||
if (slot >= 1 && slot <= 44) {
|
if (slot >= 1 && slot <= 44) {
|
||||||
|
|
|
@ -25,14 +25,6 @@
|
||||||
|
|
||||||
package org.geysermc.connector.network.translators.java.world;
|
package org.geysermc.connector.network.translators.java.world;
|
||||||
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.concurrent.ThreadLocalRandom;
|
|
||||||
|
|
||||||
import org.geysermc.connector.entity.Entity;
|
|
||||||
import org.geysermc.connector.network.session.GeyserSession;
|
|
||||||
import org.geysermc.connector.network.translators.PacketTranslator;
|
|
||||||
import org.geysermc.connector.network.translators.Translator;
|
|
||||||
|
|
||||||
import com.github.steveice10.mc.protocol.data.game.ClientRequest;
|
import com.github.steveice10.mc.protocol.data.game.ClientRequest;
|
||||||
import com.github.steveice10.mc.protocol.data.game.entity.player.GameMode;
|
import com.github.steveice10.mc.protocol.data.game.entity.player.GameMode;
|
||||||
import com.github.steveice10.mc.protocol.data.game.world.notify.EnterCreditsValue;
|
import com.github.steveice10.mc.protocol.data.game.world.notify.EnterCreditsValue;
|
||||||
|
@ -43,13 +35,16 @@ import com.nukkitx.protocol.bedrock.data.EntityDataMap;
|
||||||
import com.nukkitx.protocol.bedrock.data.EntityFlag;
|
import com.nukkitx.protocol.bedrock.data.EntityFlag;
|
||||||
import com.nukkitx.protocol.bedrock.data.LevelEventType;
|
import com.nukkitx.protocol.bedrock.data.LevelEventType;
|
||||||
import com.nukkitx.protocol.bedrock.data.PlayerPermission;
|
import com.nukkitx.protocol.bedrock.data.PlayerPermission;
|
||||||
import com.nukkitx.protocol.bedrock.packet.AdventureSettingsPacket;
|
import com.nukkitx.protocol.bedrock.packet.*;
|
||||||
import com.nukkitx.protocol.bedrock.packet.LevelEventPacket;
|
|
||||||
import com.nukkitx.protocol.bedrock.packet.SetEntityDataPacket;
|
|
||||||
import com.nukkitx.protocol.bedrock.packet.SetPlayerGameTypePacket;
|
|
||||||
import com.nukkitx.protocol.bedrock.packet.ShowCreditsPacket;
|
|
||||||
|
|
||||||
import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet;
|
import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet;
|
||||||
|
import org.geysermc.connector.entity.Entity;
|
||||||
|
import org.geysermc.connector.network.session.GeyserSession;
|
||||||
|
import org.geysermc.connector.network.translators.PacketTranslator;
|
||||||
|
import org.geysermc.connector.network.translators.Translator;
|
||||||
|
import org.geysermc.connector.network.translators.inventory.PlayerInventoryTranslator;
|
||||||
|
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.concurrent.ThreadLocalRandom;
|
||||||
|
|
||||||
@Translator(packet = ServerNotifyClientPacket.class)
|
@Translator(packet = ServerNotifyClientPacket.class)
|
||||||
public class JavaNotifyClientTranslator extends PacketTranslator<ServerNotifyClientPacket> {
|
public class JavaNotifyClientTranslator extends PacketTranslator<ServerNotifyClientPacket> {
|
||||||
|
@ -110,6 +105,10 @@ public class JavaNotifyClientTranslator extends PacketTranslator<ServerNotifyCli
|
||||||
entityDataPacket.setRuntimeEntityId(entity.getGeyserId());
|
entityDataPacket.setRuntimeEntityId(entity.getGeyserId());
|
||||||
entityDataPacket.getMetadata().putAll(metadata);
|
entityDataPacket.getMetadata().putAll(metadata);
|
||||||
session.getUpstream().sendPacket(entityDataPacket);
|
session.getUpstream().sendPacket(entityDataPacket);
|
||||||
|
|
||||||
|
// Update the crafting grid to add/remove barriers for creative inventory
|
||||||
|
PlayerInventoryTranslator.updateCraftingGrid(session, session.getInventory());
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case ENTER_CREDITS:
|
case ENTER_CREDITS:
|
||||||
switch ((EnterCreditsValue) packet.getValue()) {
|
switch ((EnterCreditsValue) packet.getValue()) {
|
||||||
|
|
|
@ -55,7 +55,7 @@ public class Toolbox {
|
||||||
|
|
||||||
public static final Int2ObjectMap<ItemEntry> ITEM_ENTRIES = new Int2ObjectOpenHashMap<>();
|
public static final Int2ObjectMap<ItemEntry> ITEM_ENTRIES = new Int2ObjectOpenHashMap<>();
|
||||||
|
|
||||||
public static final Map<String, Map<String, String>> LOCALE_MAPPINGS = new HashMap<>();
|
public static int BARRIER_INDEX = 0;
|
||||||
|
|
||||||
static {
|
static {
|
||||||
/* Load biomes */
|
/* Load biomes */
|
||||||
|
@ -126,6 +126,10 @@ public class Toolbox {
|
||||||
entry.getValue().get("bedrock_id").intValue(),
|
entry.getValue().get("bedrock_id").intValue(),
|
||||||
entry.getValue().get("bedrock_data").intValue()));
|
entry.getValue().get("bedrock_data").intValue()));
|
||||||
}
|
}
|
||||||
|
if (entry.getKey().equals("minecraft:barrier")) {
|
||||||
|
BARRIER_INDEX = itemIndex;
|
||||||
|
}
|
||||||
|
|
||||||
itemIndex++;
|
itemIndex++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue