mirror of
				https://github.com/IntellectualSites/PlotSquared.git
				synced 2025-11-04 11:13:45 +01:00 
			
		
		
		
	Updated Gradle
This commit is contained in:
		@@ -0,0 +1,77 @@
 | 
			
		||||
package com.plotsquared.sponge.generator;
 | 
			
		||||
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
import org.spongepowered.api.world.World;
 | 
			
		||||
import org.spongepowered.api.world.extent.ImmutableBiomeArea;
 | 
			
		||||
import org.spongepowered.api.world.extent.MutableBlockVolume;
 | 
			
		||||
import org.spongepowered.api.world.gen.GenerationPopulator;
 | 
			
		||||
import org.spongepowered.api.world.gen.WorldGenerator;
 | 
			
		||||
 | 
			
		||||
import com.flowpowered.math.vector.Vector3i;
 | 
			
		||||
import com.intellectualcrafters.plot.generator.AugmentedUtils;
 | 
			
		||||
import com.intellectualcrafters.plot.object.LazyResult;
 | 
			
		||||
import com.intellectualcrafters.plot.util.PlotChunk;
 | 
			
		||||
import com.intellectualcrafters.plot.util.SetQueue;
 | 
			
		||||
import com.intellectualcrafters.plot.util.SetQueue.ChunkWrapper;
 | 
			
		||||
import com.plotsquared.sponge.util.SpongeUtil;
 | 
			
		||||
 | 
			
		||||
public class SpongeAugmentedGenerator implements GenerationPopulator {
 | 
			
		||||
    
 | 
			
		||||
    private static SpongeAugmentedGenerator generator;
 | 
			
		||||
    
 | 
			
		||||
    private SpongeAugmentedGenerator() {};
 | 
			
		||||
    
 | 
			
		||||
    public static SpongeAugmentedGenerator get(World world) {
 | 
			
		||||
        WorldGenerator wg = world.getWorldGenerator();
 | 
			
		||||
        List<GenerationPopulator> populators = wg.getGenerationPopulators();
 | 
			
		||||
        for (GenerationPopulator poplator : populators) {
 | 
			
		||||
            if (poplator instanceof SpongeAugmentedGenerator) {
 | 
			
		||||
                return (SpongeAugmentedGenerator) poplator;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        if (generator == null) {
 | 
			
		||||
            generator = new SpongeAugmentedGenerator();
 | 
			
		||||
        }
 | 
			
		||||
        populators.add(generator);
 | 
			
		||||
        return generator;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    @Override
 | 
			
		||||
    public void populate(final World world, final MutableBlockVolume terrain, final ImmutableBiomeArea biome) {
 | 
			
		||||
        Vector3i min = terrain.getBlockMin();
 | 
			
		||||
        final int bx = min.getX();
 | 
			
		||||
        final int bz = min.getZ();
 | 
			
		||||
        final int cx = bx >> 4;
 | 
			
		||||
        final int cz = bz >> 4;
 | 
			
		||||
        AugmentedUtils.generate(world.getName(), cx, cz, new LazyResult<PlotChunk<?>>() {
 | 
			
		||||
            @Override
 | 
			
		||||
            public PlotChunk<?> create() {
 | 
			
		||||
                ChunkWrapper wrap = SetQueue.IMP.new ChunkWrapper(world.getName(), cx, cz);
 | 
			
		||||
                return new PlotChunk<ChunkWrapper>(wrap) {
 | 
			
		||||
                    @Override
 | 
			
		||||
                    public ChunkWrapper getChunkAbs() {
 | 
			
		||||
                        return getChunkWrapper();
 | 
			
		||||
                    }
 | 
			
		||||
                    @Override
 | 
			
		||||
                    public void setBlock(int x, int y, int z, int id, byte data) {
 | 
			
		||||
                        terrain.setBlock(bx + x, y, bz + z, SpongeUtil.getBlockState(id, data));
 | 
			
		||||
                    }
 | 
			
		||||
                    @Override
 | 
			
		||||
                    public void setBiome(int x, int z, int biome) {
 | 
			
		||||
                        world.setBiome(bx + x, bz + z, null);
 | 
			
		||||
                    }
 | 
			
		||||
                    @Override
 | 
			
		||||
                    public PlotChunk clone() {
 | 
			
		||||
                        throw new UnsupportedOperationException("NOT IMPLEMENTED YET");
 | 
			
		||||
                    }
 | 
			
		||||
                    @Override
 | 
			
		||||
                    public PlotChunk shallowClone() {
 | 
			
		||||
                        throw new UnsupportedOperationException("NOT IMPLEMENTED YET");
 | 
			
		||||
                    }
 | 
			
		||||
                };
 | 
			
		||||
            }
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,122 @@
 | 
			
		||||
package com.plotsquared.sponge.generator;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
import org.spongepowered.api.data.DataContainer;
 | 
			
		||||
import org.spongepowered.api.world.WorldCreationSettings;
 | 
			
		||||
import org.spongepowered.api.world.biome.BiomeGenerationSettings;
 | 
			
		||||
import org.spongepowered.api.world.biome.BiomeType;
 | 
			
		||||
import org.spongepowered.api.world.biome.BiomeTypes;
 | 
			
		||||
import org.spongepowered.api.world.extent.MutableBiomeArea;
 | 
			
		||||
import org.spongepowered.api.world.gen.BiomeGenerator;
 | 
			
		||||
import org.spongepowered.api.world.gen.GenerationPopulator;
 | 
			
		||||
import org.spongepowered.api.world.gen.WorldGenerator;
 | 
			
		||||
import org.spongepowered.api.world.gen.WorldGeneratorModifier;
 | 
			
		||||
 | 
			
		||||
import com.flowpowered.math.vector.Vector2i;
 | 
			
		||||
import com.intellectualcrafters.plot.PS;
 | 
			
		||||
import com.intellectualcrafters.plot.generator.GeneratorWrapper;
 | 
			
		||||
import com.intellectualcrafters.plot.generator.IndependentPlotGenerator;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotArea;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotManager;
 | 
			
		||||
import com.intellectualcrafters.plot.util.MainUtil;
 | 
			
		||||
import com.intellectualcrafters.plot.util.ReflectionUtils;
 | 
			
		||||
import com.plotsquared.sponge.util.SpongeUtil;
 | 
			
		||||
 | 
			
		||||
public class SpongePlotGenerator implements WorldGeneratorModifier, GeneratorWrapper<WorldGeneratorModifier> {
 | 
			
		||||
    
 | 
			
		||||
    private final IndependentPlotGenerator plotGenerator;
 | 
			
		||||
    private final List<GenerationPopulator> populators = new ArrayList<>();
 | 
			
		||||
    private final boolean loaded = false;
 | 
			
		||||
    private PlotManager manager;
 | 
			
		||||
    private final WorldGeneratorModifier platformGenerator;
 | 
			
		||||
    private final boolean full;
 | 
			
		||||
    
 | 
			
		||||
    public SpongePlotGenerator(IndependentPlotGenerator generator) {
 | 
			
		||||
        this.plotGenerator = generator;
 | 
			
		||||
        this.platformGenerator = this;
 | 
			
		||||
        this.full = true;
 | 
			
		||||
        MainUtil.initCache();
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    public SpongePlotGenerator(WorldGeneratorModifier wgm) {
 | 
			
		||||
        this.plotGenerator = null;
 | 
			
		||||
        this.platformGenerator = wgm;
 | 
			
		||||
        this.full = false;
 | 
			
		||||
        MainUtil.initCache();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public String getId() {
 | 
			
		||||
        if (plotGenerator == null) {
 | 
			
		||||
            if (platformGenerator != this) {
 | 
			
		||||
                return platformGenerator.getId();
 | 
			
		||||
            }
 | 
			
		||||
            return "null";
 | 
			
		||||
        }
 | 
			
		||||
        return plotGenerator.getName();
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    @Override
 | 
			
		||||
    public String getName() {
 | 
			
		||||
        if (plotGenerator == null) {
 | 
			
		||||
            if (platformGenerator != this) {
 | 
			
		||||
                return platformGenerator.getName();
 | 
			
		||||
            }
 | 
			
		||||
            return "null";
 | 
			
		||||
        }
 | 
			
		||||
        return plotGenerator.getName();
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    @Override
 | 
			
		||||
    public void modifyWorldGenerator(WorldCreationSettings settings, DataContainer data, WorldGenerator wg) {
 | 
			
		||||
        final String worldname = settings.getWorldName();
 | 
			
		||||
        wg.setBaseGenerationPopulator(new SpongeTerrainGen(this, plotGenerator));
 | 
			
		||||
        wg.setBiomeGenerator(new BiomeGenerator() {
 | 
			
		||||
            @Override
 | 
			
		||||
            public void generateBiomes(MutableBiomeArea buffer) {
 | 
			
		||||
                PlotArea area = PS.get().getPlotArea(worldname, null);
 | 
			
		||||
                if (area != null) {
 | 
			
		||||
                    BiomeType biome = SpongeUtil.getBiome(area.PLOT_BIOME);
 | 
			
		||||
                    Vector2i min = buffer.getBiomeMin();
 | 
			
		||||
                    Vector2i max = buffer.getBiomeMax();
 | 
			
		||||
                    for (int x = min.getX(); x <= max.getX(); x++) {
 | 
			
		||||
                        for (int z = min.getY(); z <= max.getY(); z++) {
 | 
			
		||||
                            buffer.setBiome(x, z, biome);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                }
 | 
			
		||||
        }
 | 
			
		||||
        });
 | 
			
		||||
        for (BiomeType type : ReflectionUtils.<BiomeType> getStaticFields(BiomeTypes.class)) {
 | 
			
		||||
            BiomeGenerationSettings biomeSettings = wg.getBiomeSettings(type);
 | 
			
		||||
            biomeSettings.getGenerationPopulators().clear();
 | 
			
		||||
            biomeSettings.getPopulators().clear();
 | 
			
		||||
    }
 | 
			
		||||
        wg.getGenerationPopulators().clear();
 | 
			
		||||
        wg.getPopulators().clear();
 | 
			
		||||
        PS.get().loadWorld(worldname, this);
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    @Override
 | 
			
		||||
    public IndependentPlotGenerator getPlotGenerator() {
 | 
			
		||||
        return plotGenerator;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    @Override
 | 
			
		||||
    public WorldGeneratorModifier getPlatformGenerator() {
 | 
			
		||||
        return platformGenerator;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    @Override
 | 
			
		||||
    public void augment(PlotArea area) {
 | 
			
		||||
        SpongeAugmentedGenerator.get(SpongeUtil.getWorld(area.worldname));
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    @Override
 | 
			
		||||
    public boolean isFull() {
 | 
			
		||||
        return full;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,61 @@
 | 
			
		||||
package com.plotsquared.sponge.generator;
 | 
			
		||||
 | 
			
		||||
import org.spongepowered.api.world.World;
 | 
			
		||||
import org.spongepowered.api.world.extent.ImmutableBiomeArea;
 | 
			
		||||
import org.spongepowered.api.world.extent.MutableBlockVolume;
 | 
			
		||||
import org.spongepowered.api.world.gen.GenerationPopulator;
 | 
			
		||||
 | 
			
		||||
import com.flowpowered.math.vector.Vector3i;
 | 
			
		||||
import com.intellectualcrafters.plot.PS;
 | 
			
		||||
import com.intellectualcrafters.plot.generator.IndependentPlotGenerator;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotArea;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PseudoRandom;
 | 
			
		||||
import com.intellectualcrafters.plot.util.ChunkManager;
 | 
			
		||||
import com.intellectualcrafters.plot.util.SetQueue;
 | 
			
		||||
import com.intellectualcrafters.plot.util.SetQueue.ChunkWrapper;
 | 
			
		||||
import com.plotsquared.sponge.util.block.GenChunk;
 | 
			
		||||
 | 
			
		||||
public class SpongeTerrainGen implements GenerationPopulator {
 | 
			
		||||
    
 | 
			
		||||
    public final SpongePlotGenerator parent;
 | 
			
		||||
    public final IndependentPlotGenerator child;
 | 
			
		||||
    private final PseudoRandom random = new PseudoRandom();
 | 
			
		||||
    
 | 
			
		||||
    public SpongeTerrainGen(SpongePlotGenerator parent, IndependentPlotGenerator ipg) {
 | 
			
		||||
        this.parent = parent;
 | 
			
		||||
        this.child = ipg;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    @Override
 | 
			
		||||
    public void populate(World world, MutableBlockVolume terrain, ImmutableBiomeArea biomes) {
 | 
			
		||||
        Vector3i size = terrain.getBlockSize();
 | 
			
		||||
        if (size.getX() != 16 || size.getZ() != 16) {
 | 
			
		||||
            throw new UnsupportedOperationException("NON CHUNK POPULATION NOT SUPPORTED");
 | 
			
		||||
        }
 | 
			
		||||
        String worldname = world.getName();
 | 
			
		||||
        Vector3i min = terrain.getBlockMin();
 | 
			
		||||
        int cx = min.getX() >> 4;
 | 
			
		||||
        int cz = min.getZ() >> 4;
 | 
			
		||||
        ChunkWrapper wrap = SetQueue.IMP.new ChunkWrapper(worldname, cx, cz);
 | 
			
		||||
        // Create the result object
 | 
			
		||||
        GenChunk result = new GenChunk(terrain, null, wrap);
 | 
			
		||||
        // Catch any exceptions
 | 
			
		||||
        try {
 | 
			
		||||
            // Set random seed
 | 
			
		||||
            random.state = (cx << 16) | (cz & 0xFFFF);
 | 
			
		||||
            // Process the chunk
 | 
			
		||||
            result.modified = false;
 | 
			
		||||
            ChunkManager.preProcessChunk(result);
 | 
			
		||||
            if (result.modified) {
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            // Fill the result data
 | 
			
		||||
            PlotArea area = PS.get().getPlotArea(world.getName(), null);
 | 
			
		||||
            child.generateChunk(result, area, random);
 | 
			
		||||
            ChunkManager.postProcessChunk(result);
 | 
			
		||||
            return;
 | 
			
		||||
        } catch (Throwable e) {
 | 
			
		||||
            e.printStackTrace();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user