|
18 | 18 | import gregtech.api.cover.CoverRayTracer; |
19 | 19 | import gregtech.api.cover.CoverSaveHandler; |
20 | 20 | import gregtech.api.cover.CoverUtil; |
| 21 | +import gregtech.api.cover.CoverWithUI; |
21 | 22 | import gregtech.api.gui.ModularUI; |
22 | 23 | import gregtech.api.items.itemhandlers.GTItemStackHandler; |
23 | 24 | import gregtech.api.items.toolitem.ToolClasses; |
|
101 | 102 | import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; |
102 | 103 | import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; |
103 | 104 | import it.unimi.dsi.fastutil.objects.ObjectArraySet; |
| 105 | +import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet; |
104 | 106 | import org.apache.commons.lang3.ArrayUtils; |
105 | 107 | import org.apache.commons.lang3.tuple.Pair; |
106 | 108 | import org.jetbrains.annotations.ApiStatus; |
|
110 | 112 | import java.util.ArrayList; |
111 | 113 | import java.util.Collections; |
112 | 114 | import java.util.EnumMap; |
| 115 | +import java.util.Iterator; |
113 | 116 | import java.util.List; |
114 | 117 | import java.util.Map; |
| 118 | +import java.util.Objects; |
115 | 119 | import java.util.Set; |
116 | 120 | import java.util.UUID; |
117 | 121 | import java.util.function.BiConsumer; |
@@ -167,12 +171,17 @@ public abstract class MetaTileEntity implements ISyncedTileEntity, CoverHolder, |
167 | 171 |
|
168 | 172 | @Nullable |
169 | 173 | private UUID owner = null; |
| 174 | + private Set<UUID> uiPlayers = new ObjectOpenHashSet<>(); |
| 175 | + private EnumMap<EnumFacing, Set<UUID>> uiCoverPlayers = new EnumMap<>(EnumFacing.class); |
170 | 176 |
|
171 | 177 | private final Set<CreativeTabs> creativeTabs = new ObjectArraySet<>(); |
172 | 178 |
|
173 | 179 | { |
174 | 180 | creativeTabs.add(CreativeTabs.SEARCH); |
175 | 181 | creativeTabs.add(GTCreativeTabs.TAB_GREGTECH_MACHINES); |
| 182 | + for (EnumFacing facing : EnumFacing.VALUES) { |
| 183 | + uiCoverPlayers.put(facing, new ObjectOpenHashSet<>()); |
| 184 | + } |
176 | 185 | } |
177 | 186 |
|
178 | 187 | protected MetaTileEntity(@NotNull ResourceLocation metaTileEntityId) { |
@@ -520,6 +529,7 @@ public boolean onRightClick(EntityPlayer playerIn, EnumHand hand, EnumFacing fac |
520 | 529 | if (!playerIn.isSneaking() && openGUIOnRightClick()) { |
521 | 530 | if (getWorld() != null && !getWorld().isRemote) { |
522 | 531 | if (usesMui2()) { |
| 532 | + uiPlayers.add(playerIn.getUniqueID()); |
523 | 533 | MetaTileEntityGuiFactory.open(playerIn, this); |
524 | 534 | } else { |
525 | 535 | MetaTileEntityUIFactory.INSTANCE.openUI(getHolder(), (EntityPlayerMP) playerIn); |
@@ -558,6 +568,9 @@ public boolean onRightClick(EntityPlayer playerIn, EnumHand hand, EnumFacing fac |
558 | 568 | EnumFacing gridSideHit = CoverRayTracer.determineGridSideHit(hitResult); |
559 | 569 | cover = gridSideHit == null ? null : getCoverAtSide(gridSideHit); |
560 | 570 | if (cover != null && playerIn.isSneaking() && playerIn.getHeldItemMainhand().isEmpty()) { |
| 571 | + if (cover instanceof CoverWithUI) { |
| 572 | + uiCoverPlayers.get(gridSideHit).add(playerIn.getUniqueID()); |
| 573 | + } |
561 | 574 | return cover.onScrewdriverClick(playerIn, hand, hitResult) == EnumActionResult.SUCCESS; |
562 | 575 | } |
563 | 576 | } |
@@ -640,6 +653,11 @@ public boolean onCrowbarClick(EntityPlayer playerIn, EnumHand hand, EnumFacing f |
640 | 653 | CuboidRayTraceResult hitResult) { |
641 | 654 | if (getCoverAtSide(facing) != null) { |
642 | 655 | removeCover(facing); |
| 656 | + Iterator<UUID> iterator = uiCoverPlayers.get(facing).iterator(); |
| 657 | + while (iterator.hasNext()) { |
| 658 | + Objects.requireNonNull(getWorld().getPlayerEntityByUUID(iterator.next())).closeScreen(); |
| 659 | + iterator.remove(); |
| 660 | + } |
643 | 661 | return true; |
644 | 662 | } |
645 | 663 | return false; |
@@ -1431,7 +1449,18 @@ public void invalidate() { |
1431 | 1449 | if (getWorld().isRemote) { |
1432 | 1450 | GregTechAPI.soundManager.stopTileSound(getPos()); |
1433 | 1451 | } else { |
1434 | | - MetaTileEntityGuiFactory.close(getPos(), getWorld()); |
| 1452 | + Iterator<UUID> iterator = uiPlayers.iterator(); |
| 1453 | + while (iterator.hasNext()) { |
| 1454 | + Objects.requireNonNull(getWorld().getPlayerEntityByUUID(iterator.next())).closeScreen(); |
| 1455 | + iterator.remove(); |
| 1456 | + } |
| 1457 | + for (Set<UUID> value : uiCoverPlayers.values()) { |
| 1458 | + iterator = value.iterator(); |
| 1459 | + while (iterator.hasNext()) { |
| 1460 | + Objects.requireNonNull(getWorld().getPlayerEntityByUUID(iterator.next())).closeScreen(); |
| 1461 | + iterator.remove(); |
| 1462 | + } |
| 1463 | + } |
1435 | 1464 | } |
1436 | 1465 | } |
1437 | 1466 |
|
|
0 commit comments