Skip to content

Commit 315c51f

Browse files
author
Lostes_Burger
committed
(3.7.2) Removed offhand data_type && fixed inventory edit index
1 parent 575b25f commit 315c51f

3 files changed

Lines changed: 74 additions & 55 deletions

File tree

src/main/java/de/lostesburger/mySqlPlayerBridge/Commands/SubCommands/Edit/EditSubCommand.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,9 @@
2424
import java.util.UUID;
2525

2626
public class EditSubCommand implements ServerCommand {
27-
private static final Set<String> PLAYER_ONLY_TYPES = Set.of("inventory", "armor", "enderchest", "offhand");
27+
private static final Set<String> PLAYER_ONLY_TYPES = Set.of("inventory", "armor", "enderchest");
2828
private static final Set<String> ALL_TYPES = Set.of(
29-
"inventory", "armor", "enderchest", "offhand",
29+
"inventory", "armor", "enderchest",
3030
"exp", "exp_level",
3131
"health", "health_max", "health_scaled", "health_scale",
3232
"saturation", "food_level",
@@ -950,7 +950,6 @@ private String getTableForInventoryType(String type){
950950
case "inventory" -> Main.TABLE_NAME_INVENTORY;
951951
case "armor" -> Main.TABLE_NAME_ARMOR;
952952
case "enderchest" -> Main.TABLE_NAME_ENDERCHEST;
953-
case "offhand" -> Main.TABLE_NAME_INVENTORY;
954953
default -> "";
955954
};
956955
}
@@ -960,7 +959,6 @@ private String getColumnForInventoryType(String type){
960959
case "inventory" -> "inventory";
961960
case "armor" -> "armor";
962961
case "enderchest" -> "enderchest";
963-
case "offhand" -> "inventory";
964962
default -> "";
965963
};
966964
}

src/main/java/de/lostesburger/mySqlPlayerBridge/Managers/Edit/EditGuiManager.java

Lines changed: 71 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,12 @@
2525

2626
public class EditGuiManager implements Listener {
2727
private static final EditGuiManager INSTANCE = new EditGuiManager();
28+
private static final int INVENTORY_GUI_SIZE = 45;
29+
private static final int INVENTORY_STORAGE_SIZE = 36;
30+
private static final int INVENTORY_MAIN_SIZE = 27;
31+
private static final int HOTBAR_SIZE = 9;
32+
private static final int PLAYER_MAIN_START = 9;
33+
private static final int OFFHAND_GUI_SLOT = 40;
2834
private final ConcurrentHashMap<UUID, EditSession> sessions = new ConcurrentHashMap<>();
2935

3036
public static EditGuiManager getInstance(){
@@ -59,12 +65,6 @@ public void openInventoryEditor(Player admin, UUID targetUuid, String targetName
5965
}
6066
expectedSize = items.length;
6167
}
62-
if(type.equals("offhand") && expectedSize < 37){
63-
ItemStack[] expanded = new ItemStack[37];
64-
System.arraycopy(items, 0, expanded, 0, items.length);
65-
items = expanded;
66-
expectedSize = expanded.length;
67-
}
6868
originalItems = Arrays.copyOf(items, expectedSize);
6969

7070
int inventorySize = getInventorySize(expectedSize, type);
@@ -75,12 +75,14 @@ public void openInventoryEditor(Player admin, UUID targetUuid, String targetName
7575
Inventory inventory = Bukkit.createInventory(admin, inventorySize, title);
7676
Set<Integer> blockedSlots = Set.of();
7777
Integer offhandSlot = null;
78+
Integer offhandIndex = null;
7879

7980
if(type.equals("inventory")){
80-
int storageSize = Math.min(36, items.length);
81-
for (int i = 0; i < storageSize; i++){
82-
inventory.setItem(i, items[i]);
83-
}
81+
offhandSlot = OFFHAND_GUI_SLOT;
82+
offhandIndex = resolveOffhandIndex(expectedSize);
83+
placeInventoryItems(inventory, items, offhandIndex);
84+
blockedSlots = getInventoryOffhandBlockedSlots();
85+
placeBarriers(inventory, blockedSlots);
8486
}else if(type.equals("armor")){
8587
int armorSize = Math.min(items.length, 4);
8688
for (int i = 0; i < armorSize; i++){
@@ -91,21 +93,14 @@ public void openInventoryEditor(Player admin, UUID targetUuid, String targetName
9193
blockedSlots.add(slot);
9294
}
9395
placeBarriers(inventory, blockedSlots);
94-
}else if(type.equals("offhand")){
95-
offhandSlot = 4;
96-
if(items.length > 36){
97-
inventory.setItem(offhandSlot, items[items.length - 1]);
98-
}
99-
blockedSlots = getOffhandBlockedSlots();
100-
placeBarriers(inventory, blockedSlots);
10196
}else {
10297
for (int i = 0; i < items.length && i < inventorySize; i++){
10398
inventory.setItem(i, items[i]);
10499
}
105100
}
106101

107102
sessions.put(admin.getUniqueId(), new EditSession(admin.getUniqueId(), targetUuid, targetName, type, inventory, expectedSize,
108-
offhandSlot, blockedSlots, originalItems));
103+
offhandSlot, offhandIndex, blockedSlots, originalItems));
109104
admin.openInventory(inventory);
110105
}
111106

@@ -188,28 +183,33 @@ private void applyToPlayer(Player target, String type, ItemStack[] contents){
188183
case "inventory" -> target.getInventory().setContents(contents);
189184
case "armor" -> target.getInventory().setArmorContents(contents);
190185
case "enderchest" -> target.getEnderChest().setContents(contents);
191-
case "offhand" -> {
192-
if(contents.length > 36){
193-
target.getInventory().setItemInOffHand(contents[contents.length - 1]);
194-
}
195-
}
196186
}
197187
}
198188

199189
private ItemStack[] extractContents(Inventory inventory, EditSession session){
200190
if(session.type.equals("inventory")){
201191
ItemStack[] result = Arrays.copyOf(session.originalItems, session.expectedSize);
202-
int storageSize = Math.min(36, result.length);
203-
for (int i = 0; i < storageSize; i++){
204-
result[i] = inventory.getItem(i);
192+
for (int slot = 0; slot < INVENTORY_MAIN_SIZE; slot++){
193+
int playerIndex = PLAYER_MAIN_START + slot;
194+
if(playerIndex < result.length){
195+
result[playerIndex] = inventory.getItem(slot);
196+
}
205197
}
206-
return result;
207-
}
208-
209-
if(session.type.equals("offhand")){
210-
ItemStack[] result = Arrays.copyOf(session.originalItems, session.expectedSize);
211-
if(result.length > 36){
212-
result[result.length - 1] = inventory.getItem(session.offhandSlot);
198+
for (int slot = 0; slot < HOTBAR_SIZE; slot++){
199+
int guiSlot = INVENTORY_MAIN_SIZE + slot;
200+
if(slot < result.length){
201+
result[slot] = inventory.getItem(guiSlot);
202+
}
203+
}
204+
ItemStack offhandItem = session.offhandSlot != null ? inventory.getItem(session.offhandSlot) : null;
205+
if(session.offhandIndex != null && session.offhandIndex >= 0){
206+
if(session.offhandIndex < result.length){
207+
result[session.offhandIndex] = offhandItem;
208+
}
209+
}else if(offhandItem != null){
210+
ItemStack[] expanded = Arrays.copyOf(result, INVENTORY_STORAGE_SIZE + 1);
211+
expanded[INVENTORY_STORAGE_SIZE] = offhandItem;
212+
return expanded;
213213
}
214214
return result;
215215
}
@@ -225,7 +225,7 @@ private int getDefaultSize(String type){
225225
return switch (type) {
226226
case "armor" -> 4;
227227
case "enderchest" -> 27;
228-
case "offhand" -> 37;
228+
case "inventory" -> 41;
229229
default -> 36;
230230
};
231231
}
@@ -235,15 +235,41 @@ private int getInventorySize(int expectedSize, String type){
235235
return 9;
236236
}
237237
if(type.equals("inventory")){
238-
return 36;
239-
}
240-
if(type.equals("offhand")){
241-
return 9;
238+
return INVENTORY_GUI_SIZE;
242239
}
243240
int rows = (expectedSize + 8) / 9;
244241
return Math.max(9, rows * 9);
245242
}
246243

244+
private void placeInventoryItems(Inventory inventory, ItemStack[] items, Integer offhandIndex){
245+
int dataLength = items.length;
246+
for (int slot = 0; slot < INVENTORY_MAIN_SIZE; slot++){
247+
int playerIndex = PLAYER_MAIN_START + slot;
248+
if(playerIndex < dataLength){
249+
inventory.setItem(slot, items[playerIndex]);
250+
}
251+
}
252+
for (int slot = 0; slot < HOTBAR_SIZE; slot++){
253+
int guiSlot = INVENTORY_MAIN_SIZE + slot;
254+
if(slot < dataLength){
255+
inventory.setItem(guiSlot, items[slot]);
256+
}
257+
}
258+
if(offhandIndex != null && offhandIndex >= 0 && offhandIndex < dataLength){
259+
inventory.setItem(OFFHAND_GUI_SLOT, items[offhandIndex]);
260+
}
261+
}
262+
263+
private int resolveOffhandIndex(int dataLength){
264+
if(dataLength >= 41){
265+
return 40;
266+
}
267+
if(dataLength == 37){
268+
return 36;
269+
}
270+
return -1;
271+
}
272+
247273
private void placeBarriers(Inventory inventory, Set<Integer> blockedSlots){
248274
if(blockedSlots.isEmpty()){
249275
return;
@@ -264,10 +290,11 @@ private ItemStack buildBarrier(){
264290
return barrier;
265291
}
266292

267-
private Set<Integer> getOffhandBlockedSlots(){
293+
private Set<Integer> getInventoryOffhandBlockedSlots(){
268294
Set<Integer> blocked = new java.util.HashSet<>();
269-
for (int slot = 0; slot < 9; slot++){
270-
if(slot != 4){
295+
int rowStart = INVENTORY_GUI_SIZE - 9;
296+
for (int slot = rowStart; slot < rowStart + 9; slot++){
297+
if(slot != OFFHAND_GUI_SLOT){
271298
blocked.add(slot);
272299
}
273300
}
@@ -279,7 +306,6 @@ private String getTableForInventoryType(String type){
279306
case "inventory" -> Main.TABLE_NAME_INVENTORY;
280307
case "armor" -> Main.TABLE_NAME_ARMOR;
281308
case "enderchest" -> Main.TABLE_NAME_ENDERCHEST;
282-
case "offhand" -> Main.TABLE_NAME_INVENTORY;
283309
default -> "";
284310
};
285311
}
@@ -289,7 +315,6 @@ private String getColumnForInventoryType(String type){
289315
case "inventory" -> "inventory";
290316
case "armor" -> "armor";
291317
case "enderchest" -> "enderchest";
292-
case "offhand" -> "inventory";
293318
default -> "";
294319
};
295320
}
@@ -302,18 +327,20 @@ private static class EditSession {
302327
private final Inventory inventory;
303328
private final int expectedSize;
304329
private final Integer offhandSlot;
330+
private final Integer offhandIndex;
305331
private final Set<Integer> blockedSlots;
306332
private final ItemStack[] originalItems;
307333

308334
private EditSession(UUID adminUuid, UUID targetUuid, String targetName, String type, Inventory inventory, int expectedSize,
309-
Integer offhandSlot, Set<Integer> blockedSlots, ItemStack[] originalItems){
335+
Integer offhandSlot, Integer offhandIndex, Set<Integer> blockedSlots, ItemStack[] originalItems){
310336
this.adminUuid = adminUuid;
311337
this.targetUuid = targetUuid;
312338
this.targetName = targetName;
313339
this.type = type;
314340
this.inventory = inventory;
315341
this.expectedSize = expectedSize;
316342
this.offhandSlot = offhandSlot;
343+
this.offhandIndex = offhandIndex;
317344
this.blockedSlots = blockedSlots;
318345
this.originalItems = originalItems;
319346
}

src/main/java/de/lostesburger/mySqlPlayerBridge/Managers/SyncModules/Armor/ArmorDataManager.java

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
import de.lostesburger.mySqlPlayerBridge.Handlers.Errors.MySqlErrorHandler;
88
import de.lostesburger.mySqlPlayerBridge.Main;
99
import org.bukkit.entity.Player;
10-
import org.bukkit.inventory.ItemStack;
1110

1211
import java.util.HashMap;
1312
import java.util.Map;
@@ -62,12 +61,7 @@ private void save(Player player){
6261
if(Main.nbtSerializer == null){
6362
throw new NBTSerializationException("nbtserializer not loaded on serialize", null);
6463
}
65-
serializedArmor = Main.nbtSerializer.serialize(new ItemStack[]{
66-
player.getInventory().getBoots(),
67-
player.getInventory().getLeggings(),
68-
player.getInventory().getChestplate(),
69-
player.getInventory().getHelmet()
70-
});
64+
serializedArmor = Main.nbtSerializer.serialize(player.getInventory().getArmorContents());
7165
if(Main.DEBUG){ System.out.println("Armor: "+serializedArmor); }
7266

7367
} catch (Exception e) {

0 commit comments

Comments
 (0)