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 this.setShouldGen(parent.isShouldGen()); 055 } 056 } 057 058 public QueueCoordinator getParent() { 059 return parent; 060 } 061 062 @Override 063 public int size() { 064 if (parent != null) { 065 return parent.size(); 066 } 067 return 0; 068 } 069 070 @Override 071 public void setModified(long modified) { 072 if (parent != null) { 073 parent.setModified(modified); 074 } 075 } 076 077 @Override 078 public boolean setBlock(int x, int y, int z, @NonNull Pattern pattern) { 079 if (parent != null) { 080 return parent.setBlock(x, y, z, pattern); 081 } 082 return false; 083 } 084 085 @Override 086 public boolean setBlock(int x, int y, int z, @NonNull BaseBlock id) { 087 if (parent != null) { 088 return parent.setBlock(x, y, z, id); 089 } 090 return false; 091 } 092 093 @Override 094 public boolean setBlock(int x, int y, int z, @NonNull BlockState id) { 095 if (parent != null) { 096 return parent.setBlock(x, y, z, id); 097 } 098 return false; 099 } 100 101 @Override 102 public @Nullable BlockState getBlock(int x, int y, int z) { 103 if (parent != null) { 104 return parent.getBlock(x, y, z); 105 } 106 return null; 107 } 108 109 @Override 110 public boolean setBiome(int x, int z, @NonNull BiomeType biome) { 111 if (parent != null) { 112 return parent.setBiome(x, z, biome); 113 } 114 return false; 115 } 116 117 @Override 118 public boolean setBiome(int x, int y, int z, @NonNull BiomeType biome) { 119 if (parent != null) { 120 return parent.setBiome(x, y, z, biome); 121 } 122 return false; 123 } 124 125 @Override 126 public boolean isSettingBiomes() { 127 if (parent != null) { 128 return parent.isSettingBiomes(); 129 } 130 return false; 131 } 132 133 @Override 134 public void setBiomesEnabled(final boolean enabled) { 135 if (parent != null) { 136 parent.setBiomesEnabled(enabled); 137 } 138 } 139 140 @Override 141 public boolean setEntity(@NonNull Entity entity) { 142 if (parent != null) { 143 return parent.setEntity(entity); 144 } 145 return false; 146 } 147 148 @Override 149 public void regenChunk(int x, int z) { 150 if (parent != null) { 151 parent.regenChunk(x, z); 152 } 153 } 154 155 @Override 156 public @Nullable World getWorld() { 157 if (parent != null) { 158 return parent.getWorld(); 159 } 160 return null; 161 } 162 163 @Override 164 public boolean setTile(int x, int y, int z, @NonNull CompoundTag tag) { 165 if (parent != null) { 166 return parent.setTile(x, y, z, tag); 167 } 168 return false; 169 } 170 171 @Override 172 public boolean isSettingTiles() { 173 if (parent != null) { 174 return parent.isSettingTiles(); 175 } 176 return false; 177 } 178 179 @Override 180 public boolean enqueue() { 181 if (parent != null) { 182 return parent.enqueue(); 183 } 184 return false; 185 } 186 187 @Override 188 public void start() { 189 if (parent != null) { 190 parent.start(); 191 } 192 } 193 194 @Override 195 public void cancel() { 196 if (parent != null) { 197 parent.cancel(); 198 } 199 } 200 201 @Override 202 public Runnable getCompleteTask() { 203 if (parent != null) { 204 return parent.getCompleteTask(); 205 } 206 return null; 207 } 208 209 @Override 210 public void setCompleteTask(Runnable whenDone) { 211 if (parent != null) { 212 parent.setCompleteTask(whenDone); 213 } 214 } 215 216 @Override 217 public @Nullable Consumer<BlockVector2> getChunkConsumer() { 218 if (parent != null) { 219 return parent.getChunkConsumer(); 220 } 221 return null; 222 } 223 224 @Override 225 public void setChunkConsumer(@NonNull Consumer<BlockVector2> consumer) { 226 if (parent != null) { 227 parent.setChunkConsumer(consumer); 228 } 229 } 230 231 @Override 232 public void addProgressSubscriber(@NonNull ProgressSubscriber progressSubscriber) { 233 if (parent != null) { 234 parent.addProgressSubscriber(progressSubscriber); 235 } 236 } 237 238 @Override 239 public @NonNull LightingMode getLightingMode() { 240 if (parent != null) { 241 return parent.getLightingMode(); 242 } 243 return LightingMode.valueOf(Settings.QUEUE.LIGHTING_MODE); 244 } 245 246 @Override 247 public void setLightingMode(@Nullable LightingMode mode) { 248 if (parent != null) { 249 parent.setLightingMode(mode); 250 } 251 } 252 253 @Override 254 public SideEffectSet getSideEffectSet() { 255 if (parent != null) { 256 return parent.getSideEffectSet(); 257 } 258 return null; 259 } 260 261 @Override 262 public void setSideEffectSet(final SideEffectSet sideEffectSet) { 263 if (parent != null) { 264 parent.setSideEffectSet(sideEffectSet); 265 } 266 } 267 268 @Override 269 public @NonNull List<BlockVector2> getReadChunks() { 270 if (parent != null) { 271 return parent.getReadChunks(); 272 } 273 return new ArrayList<>(); 274 } 275 276 @Override 277 public void addReadChunks(@NonNull Set<BlockVector2> readChunks) { 278 if (parent != null) { 279 parent.addReadChunks(readChunks); 280 } 281 } 282 283 @Override 284 public void addReadChunk(@NonNull BlockVector2 chunk) { 285 if (parent != null) { 286 parent.addReadChunk(chunk); 287 } 288 } 289 290 @Override 291 public boolean isUnloadAfter() { 292 if (parent != null) { 293 return parent.isUnloadAfter(); 294 } 295 return false; 296 } 297 298 @Override 299 public void setUnloadAfter(boolean setUnloadAfter) { 300 if (parent != null) { 301 parent.setUnloadAfter(setUnloadAfter); 302 } 303 } 304 305 @Override 306 public @Nullable CuboidRegion getRegenRegion() { 307 if (parent != null) { 308 return parent.getRegenRegion(); 309 } 310 return null; 311 } 312 313 @Override 314 public void setRegenRegion(@NonNull CuboidRegion regenRegion) { 315 if (parent != null) { 316 parent.setRegenRegion(regenRegion); 317 } 318 } 319 320}