RoughlyEnoughItemsNetwork.java 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. /*
  2. * Roughly Enough Items by Danielshe.
  3. * Licensed under the MIT License.
  4. */
  5. package me.shedaniel.rei;
  6. import com.google.common.collect.Lists;
  7. import com.google.common.collect.Maps;
  8. import io.netty.buffer.Unpooled;
  9. import me.shedaniel.rei.server.InputSlotCrafter;
  10. import net.fabricmc.api.ModInitializer;
  11. import net.fabricmc.fabric.api.network.ServerSidePacketRegistry;
  12. import net.minecraft.container.CraftingContainer;
  13. import net.minecraft.container.PlayerContainer;
  14. import net.minecraft.item.ItemStack;
  15. import net.minecraft.server.network.ServerPlayerEntity;
  16. import net.minecraft.text.TranslatableText;
  17. import net.minecraft.util.Formatting;
  18. import net.minecraft.util.Identifier;
  19. import net.minecraft.util.PacketByteBuf;
  20. import java.util.Comparator;
  21. import java.util.List;
  22. import java.util.Map;
  23. import java.util.UUID;
  24. public class RoughlyEnoughItemsNetwork implements ModInitializer {
  25. public static final Identifier DELETE_ITEMS_PACKET = new Identifier("roughlyenoughitems", "delete_item");
  26. public static final Identifier CREATE_ITEMS_PACKET = new Identifier("roughlyenoughitems", "create_item");
  27. public static final Identifier CREATE_ITEMS_MESSAGE_PACKET = new Identifier("roughlyenoughitems", "ci_msg");
  28. public static final Identifier MOVE_ITEMS_PACKET = new Identifier("roughlyenoughitems", "move_items");
  29. public static final Identifier NOT_ENOUGH_ITEMS_PACKET = new Identifier("roughlyenoughitems", "og_not_enough");
  30. public static final UUID CRAFTING_TABLE_MOVE = UUID.fromString("190c2b2d-d1f6-4149-a4a8-62860189403e");
  31. @Override
  32. public void onInitialize() {
  33. ServerSidePacketRegistry.INSTANCE.register(DELETE_ITEMS_PACKET, (packetContext, packetByteBuf) -> {
  34. ServerPlayerEntity player = (ServerPlayerEntity) packetContext.getPlayer();
  35. if (player.getServer().getPermissionLevel(player.getGameProfile()) < player.getServer().getOpPermissionLevel()) {
  36. player.addChatMessage(new TranslatableText("text.rei.no_permission_cheat").formatted(Formatting.RED), false);
  37. return;
  38. }
  39. if (!player.inventory.getCursorStack().isEmpty())
  40. player.inventory.setCursorStack(ItemStack.EMPTY);
  41. });
  42. ServerSidePacketRegistry.INSTANCE.register(CREATE_ITEMS_PACKET, (packetContext, packetByteBuf) -> {
  43. ServerPlayerEntity player = (ServerPlayerEntity) packetContext.getPlayer();
  44. if (player.getServer().getPermissionLevel(player.getGameProfile()) < player.getServer().getOpPermissionLevel()) {
  45. player.addChatMessage(new TranslatableText("text.rei.no_permission_cheat").formatted(Formatting.RED), false);
  46. return;
  47. }
  48. ItemStack stack = packetByteBuf.readItemStack();
  49. if (player.inventory.insertStack(stack.copy())) {
  50. ServerSidePacketRegistry.INSTANCE.sendToPlayer(player, RoughlyEnoughItemsNetwork.CREATE_ITEMS_MESSAGE_PACKET, new PacketByteBuf(Unpooled.buffer()).writeItemStack(stack.copy()).writeString(player.getEntityName(), 32767));
  51. } else
  52. player.addChatMessage(new TranslatableText("text.rei.failed_cheat_items"), false);
  53. });
  54. ServerSidePacketRegistry.INSTANCE.register(MOVE_ITEMS_PACKET, (packetContext, packetByteBuf) -> {
  55. UUID type = packetByteBuf.readUuid();
  56. ServerPlayerEntity player = (ServerPlayerEntity) packetContext.getPlayer();
  57. CraftingContainer container = (CraftingContainer) player.container;
  58. PlayerContainer playerContainer = player.playerContainer;
  59. if (type.equals(CRAFTING_TABLE_MOVE)) {
  60. try {
  61. boolean shift = packetByteBuf.readBoolean();
  62. Map<Integer, List<ItemStack>> input = Maps.newHashMap();
  63. int mapSize = packetByteBuf.readInt();
  64. for (int i = 0; i < mapSize; i++) {
  65. List<ItemStack> list = Lists.newArrayList();
  66. int count = packetByteBuf.readInt();
  67. for (int j = 0; j < count; j++) {
  68. list.add(packetByteBuf.readItemStack());
  69. }
  70. input.put(i, list);
  71. }
  72. try {
  73. InputSlotCrafter.start(container, player, input, shift);
  74. } catch (NullPointerException e) {
  75. PacketByteBuf buf = new PacketByteBuf(Unpooled.buffer());
  76. buf.writeInt(input.size());
  77. input.entrySet().stream().sorted(Comparator.comparingInt(Map.Entry::getKey)).forEach(entry -> {
  78. List<ItemStack> stacks = entry.getValue();
  79. buf.writeInt(stacks.size());
  80. for (ItemStack stack : stacks) {
  81. buf.writeItemStack(stack);
  82. }
  83. });
  84. if (ServerSidePacketRegistry.INSTANCE.canPlayerReceive(player, NOT_ENOUGH_ITEMS_PACKET)) {
  85. ServerSidePacketRegistry.INSTANCE.sendToPlayer(player, NOT_ENOUGH_ITEMS_PACKET, buf);
  86. }
  87. } catch (IllegalStateException e) {
  88. player.sendMessage(new TranslatableText(e.getMessage()).formatted(Formatting.RED));
  89. }
  90. } catch (Exception e) {
  91. e.printStackTrace();
  92. }
  93. }
  94. });
  95. }
  96. }