001/* 002 * PlotSquared, a land and world management plugin for Minecraft. 003 * Copyright (C) IntellectualSites <https://intellectualsites.com> 004 * Copyright (C) IntellectualSites team and contributors 005 * 006 * This program is free software: you can redistribute it and/or modify 007 * it under the terms of the GNU General Public License as published by 008 * the Free Software Foundation, either version 3 of the License, or 009 * (at your option) any later version. 010 * 011 * This program is distributed in the hope that it will be useful, 012 * but WITHOUT ANY WARRANTY; without even the implied warranty of 013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 014 * GNU General Public License for more details. 015 * 016 * You should have received a copy of the GNU General Public License 017 * along with this program. If not, see <https://www.gnu.org/licenses/>. 018 */ 019package com.plotsquared.core.queue; 020 021import com.plotsquared.core.configuration.Settings; 022import com.plotsquared.core.queue.subscriber.ProgressSubscriber; 023import com.sk89q.jnbt.CompoundTag; 024import com.sk89q.worldedit.entity.Entity; 025import com.sk89q.worldedit.function.pattern.Pattern; 026import com.sk89q.worldedit.math.BlockVector2; 027import com.sk89q.worldedit.regions.CuboidRegion; 028import com.sk89q.worldedit.util.SideEffectSet; 029import com.sk89q.worldedit.world.World; 030import com.sk89q.worldedit.world.biome.BiomeType; 031import com.sk89q.worldedit.world.block.BaseBlock; 032import com.sk89q.worldedit.world.block.BlockState; 033import org.checkerframework.checker.nullness.qual.NonNull; 034import org.checkerframework.checker.nullness.qual.Nullable; 035 036import java.util.ArrayList; 037import java.util.List; 038import java.util.Set; 039import java.util.function.Consumer; 040 041/** 042 * Queue that delegates to a parent queue. 043 */ 044public class DelegateQueueCoordinator extends QueueCoordinator { 045 046 private final QueueCoordinator parent; 047 048 public DelegateQueueCoordinator(QueueCoordinator parent) { 049 super(parent == null ? null : parent.getWorld()); 050 this.parent = parent; 051 052 if (parent != null) { 053 this.setForceSync(parent.isForceSync()); 054 } 055 } 056 057 public QueueCoordinator getParent() { 058 return parent; 059 } 060 061 @Override 062 public int size() { 063 if (parent != null) { 064 return parent.size(); 065 } 066 return 0; 067 } 068 069 @Override 070 public void setModified(long modified) { 071 if (parent != null) { 072 parent.setModified(modified); 073 } 074 } 075 076 @Override 077 public boolean setBlock(int x, int y, int z, @NonNull Pattern pattern) { 078 if (parent != null) { 079 return parent.setBlock(x, y, z, pattern); 080 } 081 return false; 082 } 083 084 @Override 085 public boolean setBlock(int x, int y, int z, @NonNull BaseBlock id) { 086 if (parent != null) { 087 return parent.setBlock(x, y, z, id); 088 } 089 return false; 090 } 091 092 @Override 093 public boolean setBlock(int x, int y, int z, @NonNull BlockState id) { 094 if (parent != null) { 095 return parent.setBlock(x, y, z, id); 096 } 097 return false; 098 } 099 100 @Override 101 public @Nullable BlockState getBlock(int x, int y, int z) { 102 if (parent != null) { 103 return parent.getBlock(x, y, z); 104 } 105 return null; 106 } 107 108 @Override 109 public boolean setBiome(int x, int z, @NonNull BiomeType biome) { 110 if (parent != null) { 111 return parent.setBiome(x, z, biome); 112 } 113 return false; 114 } 115 116 @Override 117 public boolean setBiome(int x, int y, int z, @NonNull BiomeType biome) { 118 if (parent != null) { 119 return parent.setBiome(x, y, z, biome); 120 } 121 return false; 122 } 123 124 @Override 125 public boolean isSettingBiomes() { 126 if (parent != null) { 127 return parent.isSettingBiomes(); 128 } 129 return false; 130 } 131 132 @Override 133 public void setBiomesEnabled(final boolean enabled) { 134 if (parent != null) { 135 parent.setBiomesEnabled(enabled); 136 } 137 } 138 139 @Override 140 public boolean setEntity(@NonNull Entity entity) { 141 if (parent != null) { 142 return parent.setEntity(entity); 143 } 144 return false; 145 } 146 147 @Override 148 public void regenChunk(int x, int z) { 149 if (parent != null) { 150 parent.regenChunk(x, z); 151 } 152 } 153 154 @Override 155 public @Nullable World getWorld() { 156 if (parent != null) { 157 return parent.getWorld(); 158 } 159 return null; 160 } 161 162 @Override 163 public boolean setTile(int x, int y, int z, @NonNull CompoundTag tag) { 164 if (parent != null) { 165 return parent.setTile(x, y, z, tag); 166 } 167 return false; 168 } 169 170 @Override 171 public boolean isSettingTiles() { 172 if (parent != null) { 173 return parent.isSettingTiles(); 174 } 175 return false; 176 } 177 178 @Override 179 public boolean enqueue() { 180 if (parent != null) { 181 return parent.enqueue(); 182 } 183 return false; 184 } 185 186 @Override 187 public void start() { 188 if (parent != null) { 189 parent.start(); 190 } 191 } 192 193 @Override 194 public void cancel() { 195 if (parent != null) { 196 parent.cancel(); 197 } 198 } 199 200 @Override 201 public Runnable getCompleteTask() { 202 if (parent != null) { 203 return parent.getCompleteTask(); 204 } 205 return null; 206 } 207 208 @Override 209 public void setCompleteTask(Runnable whenDone) { 210 if (parent != null) { 211 parent.setCompleteTask(whenDone); 212 } 213 } 214 215 @Override 216 public @Nullable Consumer<BlockVector2> getChunkConsumer() { 217 if (parent != null) { 218 return parent.getChunkConsumer(); 219 } 220 return null; 221 } 222 223 @Override 224 public void setChunkConsumer(@NonNull Consumer<BlockVector2> consumer) { 225 if (parent != null) { 226 parent.setChunkConsumer(consumer); 227 } 228 } 229 230 @Override 231 public void addProgressSubscriber(@NonNull ProgressSubscriber progressSubscriber) { 232 if (parent != null) { 233 parent.addProgressSubscriber(progressSubscriber); 234 } 235 } 236 237 @Override 238 public @NonNull LightingMode getLightingMode() { 239 if (parent != null) { 240 return parent.getLightingMode(); 241 } 242 return LightingMode.valueOf(Settings.QUEUE.LIGHTING_MODE); 243 } 244 245 @Override 246 public void setLightingMode(@Nullable LightingMode mode) { 247 if (parent != null) { 248 parent.setLightingMode(mode); 249 } 250 } 251 252 @Override 253 public SideEffectSet getSideEffectSet() { 254 if (parent != null) { 255 return parent.getSideEffectSet(); 256 } 257 return null; 258 } 259 260 @Override 261 public void setSideEffectSet(final SideEffectSet sideEffectSet) { 262 if (parent != null) { 263 parent.setSideEffectSet(sideEffectSet); 264 } 265 } 266 267 @Override 268 public @NonNull List<BlockVector2> getReadChunks() { 269 if (parent != null) { 270 return parent.getReadChunks(); 271 } 272 return new ArrayList<>(); 273 } 274 275 @Override 276 public void addReadChunks(@NonNull Set<BlockVector2> readChunks) { 277 if (parent != null) { 278 parent.addReadChunks(readChunks); 279 } 280 } 281 282 @Override 283 public void addReadChunk(@NonNull BlockVector2 chunk) { 284 if (parent != null) { 285 parent.addReadChunk(chunk); 286 } 287 } 288 289 @Override 290 public boolean isUnloadAfter() { 291 if (parent != null) { 292 return parent.isUnloadAfter(); 293 } 294 return false; 295 } 296 297 @Override 298 public void setUnloadAfter(boolean setUnloadAfter) { 299 if (parent != null) { 300 parent.setUnloadAfter(setUnloadAfter); 301 } 302 } 303 304 @Override 305 public @Nullable CuboidRegion getRegenRegion() { 306 if (parent != null) { 307 return parent.getRegenRegion(); 308 } 309 return null; 310 } 311 312 @Override 313 public void setRegenRegion(@NonNull CuboidRegion regenRegion) { 314 if (parent != null) { 315 parent.setRegenRegion(regenRegion); 316 } 317 } 318 319}