Add map item translators

This commit is contained in:
MrPowerGamerBR 2020-04-04 17:23:02 -03:00
parent ad3ca436b9
commit de37046466
4 changed files with 359 additions and 1 deletions

View File

@ -0,0 +1,37 @@
/*
* Copyright (c) 2019-2020 GeyserMC. http://geysermc.org
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*
* @author GeyserMC
* @link https://github.com/GeyserMC/Geyser
*/
package org.geysermc.connector.network.translators.bedrock;
import com.nukkitx.protocol.bedrock.packet.MapInfoRequestPacket;
import org.geysermc.connector.network.session.GeyserSession;
import org.geysermc.connector.network.translators.PacketTranslator;
import org.geysermc.connector.network.translators.Translator;
@Translator(packet = MapInfoRequestPacket.class)
public class BedrockMapInfoRequestPacket extends PacketTranslator<MapInfoRequestPacket> {
@Override
public void translate(MapInfoRequestPacket packet, GeyserSession session) {}
}

View File

@ -72,7 +72,16 @@ public class ItemTranslator {
if (stack.getNbt() == null) {
return ItemData.of(bedrockItem.getBedrockId(), (short) bedrockItem.getBedrockData(), stack.getAmount());
}
return ItemData.of(bedrockItem.getBedrockId(), (short) bedrockItem.getBedrockData(), stack.getAmount(), translateToBedrockNBT(stack.getNbt()));
// TODO: Create proper transformers instead of shoving everything here
CompoundTag tag = stack.getNbt();
IntTag mapId = tag.get("map");
if (mapId != null)
tag.put(new StringTag("map_uuid", mapId.getValue().toString()));
return ItemData.of(bedrockItem.getBedrockId(), (short) bedrockItem.getBedrockData(), stack.getAmount(), translateToBedrockNBT(tag));
}
public ItemEntry getItem(ItemStack stack) {

View File

@ -0,0 +1,68 @@
/*
* Copyright (c) 2019-2020 GeyserMC. http://geysermc.org
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*
* @author GeyserMC
* @link https://github.com/GeyserMC/Geyser
*/
package org.geysermc.connector.network.translators.java.world;
import com.github.steveice10.mc.protocol.data.game.world.map.MapData;
import com.github.steveice10.mc.protocol.packet.ingame.server.world.ServerMapDataPacket;
import com.nukkitx.protocol.bedrock.packet.ClientboundMapItemDataPacket;
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.utils.MapColor;
@Translator(packet = ServerMapDataPacket.class)
public class JavaMapDataTranslator extends PacketTranslator<ServerMapDataPacket> {
@Override
public void translate(ServerMapDataPacket packet, GeyserSession session) {
ClientboundMapItemDataPacket mapItemDataPacket = new ClientboundMapItemDataPacket();
mapItemDataPacket.setUniqueMapId(packet.getMapId());
mapItemDataPacket.setDimensionId(session.getLastDimPacket().getDimension());
mapItemDataPacket.setLocked(packet.isLocked());
mapItemDataPacket.setScale(packet.getScale());
MapData data = packet.getData();
if (data != null) {
mapItemDataPacket.setXOffset(data.getX());
mapItemDataPacket.setYOffset(data.getY());
mapItemDataPacket.setWidth(data.getColumns());
mapItemDataPacket.setHeight(data.getRows());
// Every int entry is an ARGB color
int[] colors = new int[data.getData().length];
int idx = 0;
for (byte colorId : data.getData()) {
colors[idx] = MapColor.fromId(colorId).toARGB();
idx++;
}
mapItemDataPacket.setColors(colors);
}
session.getUpstream().getSession().sendPacket(mapItemDataPacket);
}
}

View File

@ -0,0 +1,244 @@
package org.geysermc.connector.utils;
import java.util.Arrays;
public enum MapColor {
COLOR_0(-1, -1, -1),
COLOR_1(-1, -1, -1),
COLOR_2(-1, -1, -1),
COLOR_3(-1, -1, -1),
COLOR_4(89, 125, 39),
COLOR_5(109, 153, 48),
COLOR_6(127, 178, 56),
COLOR_7(67, 94, 29),
COLOR_8(174, 164, 115),
COLOR_9(213, 201, 140),
COLOR_10(247, 233, 163),
COLOR_11(130, 123, 86),
COLOR_12(140, 140, 140),
COLOR_13(171, 171, 171),
COLOR_14(199, 199, 199),
COLOR_15(105, 105, 105),
COLOR_16(180, 0, 0),
COLOR_17(220, 0, 0),
COLOR_18(255, 0, 0),
COLOR_19(135, 0, 0),
COLOR_20(112, 112, 180),
COLOR_21(138, 138, 220),
COLOR_22(160, 160, 255),
COLOR_23(84, 84, 135),
COLOR_24(117, 117, 117),
COLOR_25(144, 144, 144),
COLOR_26(167, 167, 167),
COLOR_27(88, 88, 88),
COLOR_28(0, 87, 0),
COLOR_29(0, 106, 0),
COLOR_30(0, 124, 0),
COLOR_31(0, 65, 0),
COLOR_32(180, 180, 180),
COLOR_33(220, 220, 220),
COLOR_34(255, 255, 255),
COLOR_35(135, 135, 135),
COLOR_36(115, 118, 129),
COLOR_37(141, 144, 158),
COLOR_38(164, 168, 184),
COLOR_39(86, 88, 97),
COLOR_40(106, 76, 54),
COLOR_41(130, 94, 66),
COLOR_42(151, 109, 77),
COLOR_43(79, 57, 40),
COLOR_44(79, 79, 79),
COLOR_45(96, 96, 96),
COLOR_46(112, 112, 112),
COLOR_47(59, 59, 59),
COLOR_48(45, 45, 180),
COLOR_49(55, 55, 220),
COLOR_50(64, 64, 255),
COLOR_51(33, 33, 135),
COLOR_52(100, 84, 50),
COLOR_53(123, 102, 62),
COLOR_54(143, 119, 72),
COLOR_55(75, 63, 38),
COLOR_56(180, 177, 172),
COLOR_57(220, 217, 211),
COLOR_58(255, 252, 245),
COLOR_59(135, 133, 129),
COLOR_60(152, 89, 36),
COLOR_61(186, 109, 44),
COLOR_62(216, 127, 51),
COLOR_63(114, 67, 27),
COLOR_64(125, 53, 152),
COLOR_65(153, 65, 186),
COLOR_66(178, 76, 216),
COLOR_67(94, 40, 114),
COLOR_68(72, 108, 152),
COLOR_69(88, 132, 186),
COLOR_70(102, 153, 216),
COLOR_71(54, 81, 114),
COLOR_72(161, 161, 36),
COLOR_73(197, 197, 44),
COLOR_74(229, 229, 51),
COLOR_75(121, 121, 27),
COLOR_76(89, 144, 17),
COLOR_77(109, 176, 21),
COLOR_78(127, 204, 25),
COLOR_79(67, 108, 13),
COLOR_80(170, 89, 116),
COLOR_81(208, 109, 142),
COLOR_82(242, 127, 165),
COLOR_83(128, 67, 87),
COLOR_84(53, 53, 53),
COLOR_85(65, 65, 65),
COLOR_86(76, 76, 76),
COLOR_87(40, 40, 40),
COLOR_88(108, 108, 108),
COLOR_89(132, 132, 132),
COLOR_90(153, 153, 153),
COLOR_91(81, 81, 81),
COLOR_92(53, 89, 108),
COLOR_93(65, 109, 132),
COLOR_94(76, 127, 153),
COLOR_95(40, 67, 81),
COLOR_96(89, 44, 125),
COLOR_97(109, 54, 153),
COLOR_98(127, 63, 178),
COLOR_99(67, 33, 94),
COLOR_100(36, 53, 125),
COLOR_101(44, 65, 153),
COLOR_102(51, 76, 178),
COLOR_103(27, 40, 94),
COLOR_104(72, 53, 36),
COLOR_105(88, 65, 44),
COLOR_106(102, 76, 51),
COLOR_107(54, 40, 27),
COLOR_108(72, 89, 36),
COLOR_109(88, 109, 44),
COLOR_110(102, 127, 51),
COLOR_111(54, 67, 27),
COLOR_112(108, 36, 36),
COLOR_113(132, 44, 44),
COLOR_114(153, 51, 51),
COLOR_115(81, 27, 27),
COLOR_116(17, 17, 17),
COLOR_117(21, 21, 21),
COLOR_118(25, 25, 25),
COLOR_119(13, 13, 13),
COLOR_120(176, 168, 54),
COLOR_121(215, 205, 66),
COLOR_122(250, 238, 77),
COLOR_123(132, 126, 40),
COLOR_124(64, 154, 150),
COLOR_125(79, 188, 183),
COLOR_126(92, 219, 213),
COLOR_127(48, 115, 112),
COLOR_128(52, 90, 180),
COLOR_129(63, 110, 220),
COLOR_130(74, 128, 255),
COLOR_131(39, 67, 135),
COLOR_132(0, 153, 40),
COLOR_133(0, 187, 50),
COLOR_134(0, 217, 58),
COLOR_135(0, 114, 30),
COLOR_136(91, 60, 34),
COLOR_137(111, 74, 42),
COLOR_138(129, 86, 49),
COLOR_139(68, 45, 25),
COLOR_140(79, 1, 0),
COLOR_141(96, 1, 0),
COLOR_142(112, 2, 0),
COLOR_143(59, 1, 0),
COLOR_144(147, 124, 113),
COLOR_145(180, 152, 138),
COLOR_146(209, 177, 161),
COLOR_147(110, 93, 85),
COLOR_148(112, 57, 25),
COLOR_149(137, 70, 31),
COLOR_150(159, 82, 36),
COLOR_151(84, 43, 19),
COLOR_152(105, 61, 76),
COLOR_153(128, 75, 93),
COLOR_154(149, 87, 108),
COLOR_155(78, 46, 57),
COLOR_156(79, 76, 97),
COLOR_157(96, 93, 119),
COLOR_158(112, 108, 138),
COLOR_159(59, 57, 73),
COLOR_160(131, 93, 25),
COLOR_161(160, 114, 31),
COLOR_162(186, 133, 36),
COLOR_163(98, 70, 19),
COLOR_164(72, 82, 37),
COLOR_165(88, 100, 45),
COLOR_166(103, 117, 53),
COLOR_167(54, 61, 28),
COLOR_168(112, 54, 55),
COLOR_169(138, 66, 67),
COLOR_170(160, 77, 78),
COLOR_171(84, 40, 41),
COLOR_172(40, 28, 24),
COLOR_173(49, 35, 30),
COLOR_174(57, 41, 35),
COLOR_175(30, 21, 18),
COLOR_176(95, 75, 69),
COLOR_177(116, 92, 84),
COLOR_178(135, 107, 98),
COLOR_179(71, 56, 51),
COLOR_180(61, 64, 64),
COLOR_181(75, 79, 79),
COLOR_182(87, 92, 92),
COLOR_183(46, 48, 48),
COLOR_184(86, 51, 62),
COLOR_185(105, 62, 75),
COLOR_186(122, 73, 88),
COLOR_187(64, 38, 46),
COLOR_188(53, 43, 64),
COLOR_189(65, 53, 79),
COLOR_190(76, 62, 92),
COLOR_191(40, 32, 48),
COLOR_192(53, 35, 24),
COLOR_193(65, 43, 30),
COLOR_194(76, 50, 35),
COLOR_195(40, 26, 18),
COLOR_196(53, 57, 29),
COLOR_197(65, 70, 36),
COLOR_198(76, 82, 42),
COLOR_199(40, 43, 22),
COLOR_200(100, 42, 32),
COLOR_201(122, 51, 39),
COLOR_202(142, 60, 46),
COLOR_203(75, 31, 24),
COLOR_204(26, 15, 11),
COLOR_205(31, 18, 13),
COLOR_206(37, 22, 16),
COLOR_207(19, 11, 8);
private final int red;
private final int green;
private final int blue;
MapColor(int red, int green, int blue) {
this.red = red;
this.green = green;
this.blue = blue;
}
int getId() {
return ordinal();
}
public static MapColor fromId(int id) {
return Arrays.stream(values()).filter(color -> color.getId() == id).findFirst().get();
}
public int toARGB() {
int alpha = 255;
if (red == -1 && green == -1 && blue == -1)
alpha = 0; // transparent
long result = red & 0xff;
result |= (green & 0xff) << 8;
result |= (blue & 0xff) << 16;
result |= (alpha & 0xff) << 24;
return (int) (result & 0xFFFFFFFFL);
}
}