|
2 | 2 |
|
3 | 3 | import com.cleanroommc.modularui.ModularUI; |
4 | 4 | import com.cleanroommc.modularui.api.IPanelHandler; |
| 5 | +import com.cleanroommc.modularui.factory.PosGuiData; |
5 | 6 | import com.cleanroommc.modularui.screen.ContainerCustomizer; |
6 | 7 | import com.cleanroommc.modularui.screen.ModularContainer; |
7 | 8 | import com.cleanroommc.modularui.widgets.slot.ModularSlot; |
|
10 | 11 | import net.minecraft.entity.player.EntityPlayer; |
11 | 12 | import net.minecraft.item.ItemStack; |
12 | 13 | import net.minecraft.network.PacketBuffer; |
| 14 | +import net.minecraft.util.math.BlockPos; |
13 | 15 | import net.minecraftforge.items.wrapper.PlayerMainInvWrapper; |
14 | 16 |
|
15 | 17 | import it.unimi.dsi.fastutil.objects.Object2ObjectArrayMap; |
|
21 | 23 | import java.io.IOException; |
22 | 24 | import java.util.*; |
23 | 25 | import java.util.function.Consumer; |
| 26 | +import java.util.function.Predicate; |
24 | 27 |
|
25 | 28 | public class PanelSyncManager { |
26 | 29 |
|
| 30 | + private static final double DEFAULT_INTERACT_RANGE = 8.0; |
| 31 | + |
27 | 32 | private final Map<String, SyncHandler> syncHandlers = new Object2ObjectLinkedOpenHashMap<>(); |
28 | 33 | private final Map<String, SlotGroup> slotGroups = new Object2ObjectOpenHashMap<>(); |
29 | 34 | private final Map<SyncHandler, String> reverseSyncHandlers = new Object2ObjectOpenHashMap<>(); |
@@ -127,6 +132,11 @@ public ContainerCustomizer getContainerCustomizer() { |
127 | 132 | } |
128 | 133 |
|
129 | 134 | public void setContainerCustomizer(ContainerCustomizer containerCustomizer) { |
| 135 | + if (this.containerCustomizer != null && |
| 136 | + this.containerCustomizer.getCanInteractWith() != null && |
| 137 | + containerCustomizer.getCanInteractWith() == null) { |
| 138 | + containerCustomizer.setCanInteractWith(this.containerCustomizer.getCanInteractWith()); |
| 139 | + } |
130 | 140 | this.containerCustomizer = containerCustomizer; |
131 | 141 | } |
132 | 142 |
|
@@ -254,6 +264,36 @@ public PanelSyncManager addCloseListener(Consumer<EntityPlayer> listener) { |
254 | 264 | return this; |
255 | 265 | } |
256 | 266 |
|
| 267 | + public PanelSyncManager canInteractWith(Predicate<EntityPlayer> canInteractWith) { |
| 268 | + if (this.containerCustomizer == null) this.containerCustomizer = new ContainerCustomizer(); |
| 269 | + this.containerCustomizer.setCanInteractWith(canInteractWith); |
| 270 | + return this; |
| 271 | + } |
| 272 | + |
| 273 | + public PanelSyncManager canInteractWithinRange(double x, double y, double z, double range) { |
| 274 | + return canInteractWith(player -> player.getDistanceSq(x, y, z) <= range * range); |
| 275 | + } |
| 276 | + |
| 277 | + public PanelSyncManager canInteractWithinRange(BlockPos pos, double range) { |
| 278 | + return canInteractWith(player -> player.getDistanceSqToCenter(pos) <= range * range); |
| 279 | + } |
| 280 | + |
| 281 | + public PanelSyncManager canInteractWithinRange(PosGuiData guiData, double range) { |
| 282 | + return canInteractWithinRange(guiData.getX() + 0.5, guiData.getY() + 0.5, guiData.getZ() + 0.5, range); |
| 283 | + } |
| 284 | + |
| 285 | + public PanelSyncManager canInteractWithinDefaultRange(double x, double y, double z) { |
| 286 | + return canInteractWithinRange(x, y, z, DEFAULT_INTERACT_RANGE); |
| 287 | + } |
| 288 | + |
| 289 | + public PanelSyncManager canInteractWithinDefaultRange(BlockPos pos) { |
| 290 | + return canInteractWithinRange(pos, DEFAULT_INTERACT_RANGE); |
| 291 | + } |
| 292 | + |
| 293 | + public PanelSyncManager canInteractWithinDefaultRange(PosGuiData guiData) { |
| 294 | + return canInteractWithinRange(guiData, DEFAULT_INTERACT_RANGE); |
| 295 | + } |
| 296 | + |
257 | 297 | public SlotGroup getSlotGroup(String name) { |
258 | 298 | return this.slotGroups.get(name); |
259 | 299 | } |
|
0 commit comments