Skip to content
This repository was archived by the owner on Apr 7, 2021. It is now read-only.

Commit 0970fbc

Browse files
committed
WIP window system
1 parent 598ad5e commit 0970fbc

8 files changed

+44
-53
lines changed

src/main/java/org/dragonet/proxy/network/InventoryTranslatorRegister.java

Lines changed: 9 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -66,10 +66,9 @@ public static PEPacket[] sendPlayerInventory(UpstreamSession session) {
6666
public static void open(UpstreamSession session, ServerOpenWindowPacket win) {
6767
closeOpened(session, true);
6868
if (TRANSLATORS.containsKey(win.getType())) {
69-
CachedWindow cached = new CachedWindow(win.getWindowId(), win.getType(), 36 + win.getSlots());
69+
CachedWindow cached = new CachedWindow(win.getWindowId(), win.getType(), win.getSlots());
7070
session.getWindowCache().cacheWindow(cached);
7171
TRANSLATORS.get(win.getType()).open(session, cached);
72-
7372
com.github.steveice10.packetlib.packet.Packet[] items = session.getWindowCache().getCachedPackets(win.getWindowId());
7473
for (com.github.steveice10.packetlib.packet.Packet item : items) {
7574
if (item != null) {
@@ -80,6 +79,7 @@ public static void open(UpstreamSession session, ServerOpenWindowPacket win) {
8079
}
8180
}
8281
}
82+
System.out.println("Window " + win.getWindowId() + " opened !");
8383
} else {
8484
// Not supported
8585
session.getDownstream().send(new ClientCloseWindowPacket(win.getWindowId()));
@@ -90,35 +90,20 @@ public static void closeOpened(UpstreamSession session, boolean byServer) {
9090
if (session.getDataCache().containsKey(CacheKey.WINDOW_OPENED_ID)) {
9191
// There is already a window opened
9292
int id = (int) session.getDataCache().remove(CacheKey.WINDOW_OPENED_ID);
93-
if (!byServer) {
94-
session.getDownstream().send(new ContainerClosePacket((byte) (id & 0xFF)));
93+
System.out.println("Window " + id + " closed !");
94+
if (byServer) {
95+
session.sendPacket(new ContainerClosePacket(id), true);
96+
} else {
97+
session.getDownstream().send(new ClientCloseWindowPacket(id));
9598
}
9699
if (session.getDataCache().containsKey(CacheKey.WINDOW_BLOCK_POSITION)) {
97100
// Already a block was replaced to Chest, reset it
98101
session.sendFakeBlock(((Position) session.getDataCache().get(CacheKey.WINDOW_BLOCK_POSITION)).getX(),
99102
((Position) session.getDataCache().get(CacheKey.WINDOW_BLOCK_POSITION)).getY(),
100-
((Position) session.getDataCache().remove(CacheKey.WINDOW_BLOCK_POSITION)).getZ(), 1, // Set to
101-
// stone
102-
// since
103-
// we
104-
// don't
105-
// know
106-
// what
107-
// it
108-
// was,
109-
// server
110-
// will
111-
// correct
112-
// it
113-
// once
114-
// client
115-
// interacts
116-
// it
103+
((Position) session.getDataCache().remove(CacheKey.WINDOW_BLOCK_POSITION)).getZ(), 1,
104+
// Set to stone since we don't know what it was, server will correct it once client interacts it
117105
0);
118106
}
119-
if (byServer) {
120-
session.sendPacket(new ContainerClosePacket((byte) (id & 0xFF)), true);
121-
}
122107
}
123108
}
124109

src/main/java/org/dragonet/proxy/network/PacketTranslatorRegister.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import com.github.steveice10.mc.protocol.packet.ingame.server.entity.player.ServerPlayerSetExperiencePacket;
3636
import com.github.steveice10.mc.protocol.packet.ingame.server.entity.spawn.ServerSpawnMobPacket;
3737
import com.github.steveice10.mc.protocol.packet.ingame.server.entity.spawn.ServerSpawnPaintingPacket;
38+
import com.github.steveice10.mc.protocol.packet.ingame.server.window.ServerCloseWindowPacket;
3839
import org.dragonet.proxy.protocol.PEPacket;
3940
import org.dragonet.proxy.protocol.packets.*;
4041

@@ -93,6 +94,7 @@ public final class PacketTranslatorRegister {
9394
//
9495
// //Inventory
9596
PC_TO_PE_TRANSLATOR.put(ServerOpenWindowPacket.class, new PCOpenWindowPacketTranslator());
97+
PC_TO_PE_TRANSLATOR.put(ServerCloseWindowPacket.class, new PCClosedWindowPacketTranslator());
9698
PC_TO_PE_TRANSLATOR.put(ServerWindowItemsPacket.class, new PCWindowItemsTranslator());
9799
PC_TO_PE_TRANSLATOR.put(ServerSetSlotPacket.class, new PCSetSlotPacketTranslator());
98100

src/main/java/org/dragonet/proxy/network/translator/inv/ChestWindowTranslator.java

Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,8 @@
1212
*/
1313
package org.dragonet.proxy.network.translator.inv;
1414

15+
import com.github.steveice10.opennbt.tag.builtin.CompoundTag;
1516
import org.dragonet.proxy.data.inventory.InventoryType;
16-
import org.dragonet.proxy.data.nbt.tag.CompoundTag;
17-
import org.dragonet.proxy.data.nbt.tag.IntTag;
18-
import org.dragonet.proxy.data.nbt.tag.StringTag;
1917
import org.dragonet.proxy.network.CacheKey;
2018
import org.dragonet.proxy.network.UpstreamSession;
2119
import org.dragonet.proxy.network.cache.CachedWindow;
@@ -24,6 +22,7 @@
2422
import org.dragonet.proxy.protocol.packets.BlockEntityDataPacket;
2523
import org.dragonet.proxy.protocol.packets.ContainerOpenPacket;
2624
import org.dragonet.proxy.protocol.packets.InventoryContentPacket;
25+
import org.dragonet.proxy.protocol.packets.InventorySlotPacket;
2726
import org.dragonet.proxy.protocol.type.Slot;
2827
import org.dragonet.proxy.utilities.BlockPosition;
2928

@@ -33,23 +32,19 @@ public boolean open(UpstreamSession session, CachedWindow window) {
3332
BlockPosition pos = new BlockPosition((int) session.getEntityCache().getClientEntity().x,
3433
(int) session.getEntityCache().getClientEntity().y - 4,
3534
(int) session.getEntityCache().getClientEntity().z);
35+
3636
session.getDataCache().put(CacheKey.WINDOW_OPENED_ID, window.windowId);
37-
// session.getDataCache().put(CacheKey.WINDOW_BLOCK_POSITION, pos);
38-
// session.sendFakeBlock(pos.x, pos.y, pos.z, 54, 0);
39-
// CompoundTag tag = new CompoundTag(null);
40-
// tag.putString("id", "Chest");
41-
// tag.putInt("x", pos.x);
42-
// tag.putInt("y", pos.y);
43-
// tag.putInt("z", pos.z);
44-
// BlockEntityDataPacket blockEntityData = new BlockEntityDataPacket();
45-
// blockEntityData.blockPosition = new BlockPosition(pos.x, pos.y, pos.z);
46-
// blockEntityData.tag = tag;
47-
// session.sendPacket(blockEntityData);
37+
session.getDataCache().put(CacheKey.WINDOW_BLOCK_POSITION, pos);
38+
session.sendFakeBlock(pos.x, pos.y, pos.z, 54, 0);
39+
40+
BlockEntityDataPacket blockEntityData = new BlockEntityDataPacket();
41+
blockEntityData.blockPosition = new BlockPosition(pos.x, pos.y, pos.z);
42+
blockEntityData.tag = ItemBlockTranslator.translateBlockEntityToPE(ItemBlockTranslator.newTileTag("Chest", pos.x, pos.y, pos.z));
43+
session.sendPacket(blockEntityData);
4844

4945
ContainerOpenPacket pk = new ContainerOpenPacket();
46+
pk.eid = -1;
5047
pk.windowId = window.windowId;
51-
// pk. = window.size <= 27 ? (short)(InventoryType.SlotSize.CHEST & 0xFFFF) :
52-
// (short)(InventoryType.SlotSize.DOUBLE_CHEST & 0xFFFF);
5348
pk.type = window.size <= 27 ? InventoryType.PEInventory.CHEST : InventoryType.PEInventory.DOUBLE_CHEST;
5449
pk.position = new BlockPosition(pos.x, pos.y, pos.z);
5550
session.sendPacket(pk);
@@ -60,17 +55,24 @@ public void updateContent(UpstreamSession session, CachedWindow window) {
6055
sendContent(session, window);
6156
}
6257

63-
public void updateSlot(UpstreamSession session, CachedWindow window, int slotIndex) {
64-
sendContent(session, window);// TOO LAZY LOL
58+
public void updateSlot(UpstreamSession session, CachedWindow win, int slotIndex) {
59+
InventorySlotPacket pk = new InventorySlotPacket();
60+
pk.item = ItemBlockTranslator.translateSlotToPE(win.slots[slotIndex]);
61+
pk.slotId = slotIndex;
62+
pk.windowId = win.windowId;
63+
session.sendPacket(pk, true);
64+
System.out.println("update window " + + win.windowId + " slot " + slotIndex);
65+
// sendContent(session, window);// TOO LAZY LOL
6566
}
6667

6768
private void sendContent(UpstreamSession session, CachedWindow win) {
6869
InventoryContentPacket pk = new InventoryContentPacket();
69-
pk.windowId = (byte) (win.windowId & 0xFF);
70+
pk.windowId = win.windowId;
7071
pk.items = new Slot[win.slots.length];
7172
for (int i = 0; i < pk.items.length; i++) {
7273
pk.items[i] = ItemBlockTranslator.translateSlotToPE(win.slots[i]);
7374
}
7475
session.sendPacket(pk, true);
76+
System.out.println("update window " + + win.windowId + " set all content");
7577
}
7678
}

src/main/java/org/dragonet/proxy/network/translator/pc/PCClosedWindowPacketTranslator.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
public class PCClosedWindowPacketTranslator implements IPCPacketTranslator<ServerCloseWindowPacket> {
2222

2323
public PEPacket[] translate(UpstreamSession session, ServerCloseWindowPacket packet) {
24+
System.out.println("Window " + packet.getWindowId() + " closed from server !");
2425
session.getProxy().getGeneralThreadPool().execute(() -> {
2526
InventoryTranslatorRegister.closeOpened(session, true);
2627
});

src/main/java/org/dragonet/proxy/network/translator/pc/PCOpenWindowPacketTranslator.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,9 @@
2121
public class PCOpenWindowPacketTranslator implements IPCPacketTranslator<ServerOpenWindowPacket> {
2222

2323
public PEPacket[] translate(UpstreamSession session, ServerOpenWindowPacket packet) {
24-
// session.getProxy().getGeneralThreadPool().execute(() -> {
25-
// InventoryTranslatorRegister.open(session, packet);
26-
// }); CLIENT CRASH
24+
session.getProxy().getGeneralThreadPool().execute(() -> {
25+
InventoryTranslatorRegister.open(session, packet);
26+
});
2727
return null;
2828
}
2929
}

src/main/java/org/dragonet/proxy/network/translator/pe/PEInventoryTransactionPacketTranslator.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ public Packet[] translate(UpstreamSession session, InventoryTransactionPacket pa
4949

5050
switch (packet.transactionType) {
5151
case TYPE_NORMAL: //0
52-
// System.out.println("TYPE_NORMAL");
52+
System.out.println("TYPE_NORMAL");
5353
List<Packet> packets = new ArrayList();
5454

5555
for (InventoryTransactionAction action : packet.actions) {
@@ -64,10 +64,10 @@ public Packet[] translate(UpstreamSession session, InventoryTransactionPacket pa
6464
}
6565
return packets.toArray(new Packet[]{});
6666
case TYPE_MISMATCH: //1
67-
// System.out.println("TYPE_MISMATCH");
67+
System.out.println("TYPE_MISMATCH");
6868
break;
6969
case TYPE_USE_ITEM: //2
70-
// System.out.println("TYPE_USE_ITEM");
70+
System.out.println("TYPE_USE_ITEM");
7171
UseItemData useItemData = (UseItemData) packet.transactionData;
7272
if (useItemData.blockPos.equals(new BlockPosition(0, 0, 0))) {
7373
return null;
@@ -98,7 +98,7 @@ public Packet[] translate(UpstreamSession session, InventoryTransactionPacket pa
9898

9999
}
100100
case TYPE_USE_ITEM_ON_ENTITY: //3
101-
// System.out.println("TYPE_USE_ITEM_ON_ENTITY");
101+
System.out.println("TYPE_USE_ITEM_ON_ENTITY");
102102
UseItemOnEntityData useItemOnEntityData = (UseItemOnEntityData) packet.transactionData;
103103
CachedEntity cachedEntity = session.getEntityCache().getByLocalEID(useItemOnEntityData.entityRuntimeId);
104104
if (cachedEntity == null) {
@@ -114,7 +114,7 @@ public Packet[] translate(UpstreamSession session, InventoryTransactionPacket pa
114114
);
115115
return new Packet[]{interractPacket};
116116
case TYPE_RELEASE_ITEM: //4
117-
// System.out.println("TYPE_RELEASE_ITEM");
117+
System.out.println("TYPE_RELEASE_ITEM");
118118
ReleaseItemData releaseItemData = (ReleaseItemData) packet.transactionData;
119119
// ClientPlayerActionPacket act = new ClientPlayerActionPacket(
120120
// com.github.steveice10.mc.protocol.data.game.entity.player.PlayerAction.DROP_ITEM,

src/main/java/org/dragonet/proxy/network/translator/pe/PEWindowClosePacketTranslator.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
public class PEWindowClosePacketTranslator implements IPEPacketTranslator<ContainerClosePacket> {
2222

2323
public Packet[] translate(UpstreamSession session, ContainerClosePacket packet) {
24+
System.out.println("Window " + packet.windowId + " closed from client !");
2425
session.getProxy().getGeneralThreadPool().execute(() -> {
2526
InventoryTranslatorRegister.closeOpened(session, false);
2627
});

src/main/java/org/dragonet/proxy/protocol/packets/ContainerOpenPacket.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@ public int pid() {
2121

2222
@Override
2323
public void encodePayload() {
24-
putByte((byte) (windowId & 0xFF));
25-
putByte((byte) (type & 0xFF));
24+
putByte((byte) (windowId));
25+
putByte((byte) (type));
2626
putBlockPosition(position);
2727
putVarLong(eid);
2828
}

0 commit comments

Comments
 (0)