Skip to content

Commit

Permalink
there's a lot, read the description
Browse files Browse the repository at this point in the history
- API changes: addedBlockPopulator() and addChunkGenerator()

- configuration changes: generatorType is now type String, completely redid generators.yml to include several new config options and multiple biome types for generators

- added custom block populators (that don't currently work for some reason but don't worry about it too much)

- updated generators to extend abstract class IridiumChunkGenerator

- added skyblockBiomeProvider to select and add biomes to generators
  • Loading branch information
sh0inx committed Jan 2, 2025
1 parent 6e47eb8 commit e2a6717
Show file tree
Hide file tree
Showing 18 changed files with 941 additions and 281 deletions.
6 changes: 5 additions & 1 deletion build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ repositories {
maven("https://papermc.io/repo/repository/maven-public/")
maven("https://jitpack.io")
maven("https://maven.enginehub.org/repo/")
maven("https://repo.dmulloy2.net/repository/public/")
}

dependencies {
Expand All @@ -34,6 +35,7 @@ dependencies {
compileOnly("com.github.MilkBowl:VaultAPI:1.7.1")
compileOnly("net.ess3:EssentialsXSpawn:2.16.1")
compileOnly("com.sk89q.worldedit:worldedit-bukkit:7.2.13-SNAPSHOT")
compileOnly("com.comphenix.protocol:ProtocolLib:4.8.0")

// Enable lombok annotation processing
annotationProcessor("org.projectlombok:lombok:1.18.36")
Expand All @@ -55,7 +57,8 @@ bukkit {
"EssentialsSpawn",
"RoseStacker",
"WorldEdit",
"ObsidianStacker"
"ObsidianStacker",
"ProtocolLib"
)

commands {
Expand Down Expand Up @@ -88,6 +91,7 @@ tasks {
relocate("org.intellij.lang.annotations")
relocate("org.jetbrains.annotations")
relocate("org.jnbt")
relocate("com.comphenix")

// Relocate IridiumCore dependencies
relocate("de.tr7zw.changeme.nbtapi")
Expand Down
97 changes: 56 additions & 41 deletions src/main/java/com/iridium/iridiumskyblock/IridiumSkyblock.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,27 +2,29 @@

import com.cryptomorin.xseries.reflection.XReflection;
import com.iridium.iridiumcore.Item;
import com.comphenix.protocol.PacketType;
import com.comphenix.protocol.ProtocolLibrary;
import com.comphenix.protocol.events.ListenerPriority;
import com.iridium.iridiumskyblock.configs.*;
import com.iridium.iridiumskyblock.database.Island;
import com.iridium.iridiumskyblock.database.User;
import com.iridium.iridiumskyblock.generators.*;
import com.iridium.iridiumskyblock.generators.blockPopulators.KelpBlockPopulator;
import com.iridium.iridiumskyblock.generators.blockPopulators.MagmaBlockPopulator;
import com.iridium.iridiumskyblock.generators.blockPopulators.SeagrassBlockPopulator;
import com.iridium.iridiumskyblock.listeners.*;
import com.iridium.iridiumskyblock.managers.*;
import com.iridium.iridiumskyblock.placeholders.IslandPlaceholderBuilder;
import com.iridium.iridiumskyblock.placeholders.TeamChatPlaceholderBuilder;
import com.iridium.iridiumskyblock.placeholders.UserPlaceholderBuilder;
import com.iridium.iridiumskyblock.utils.ProtocolLibUtils.IridiumPacketAdapter;
import com.iridium.iridiumteams.IridiumTeams;

import com.iridium.iridiumteams.managers.MissionManager;
import com.iridium.iridiumteams.managers.ShopManager;
import com.iridium.iridiumteams.managers.SupportManager;
import lombok.Getter;
import net.milkbowl.vault.economy.Economy;
import org.bukkit.Bukkit;
import org.bukkit.World;

import org.bukkit.generator.BlockPopulator;
import org.bukkit.generator.ChunkGenerator;
import org.bukkit.plugin.PluginDescriptionFile;
import org.bukkit.plugin.RegisteredServiceProvider;
Expand All @@ -38,9 +40,7 @@
import java.nio.file.Path;
import java.nio.file.StandardCopyOption;
import java.sql.SQLException;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Objects;
import java.util.*;

@Getter
public class IridiumSkyblock extends IridiumTeams<Island, User> {
Expand Down Expand Up @@ -82,9 +82,10 @@ public class IridiumSkyblock extends IridiumTeams<Island, User> {
private Economy economy;

private ChunkGenerator chunkGenerator;

@Getter
private int mcVersion;
private List<IridiumChunkGenerator> iridiumChunkGenerators;
private final HashMap<World.Environment, List<BlockPopulator>> blockPopulatorList = new HashMap<>();

public IridiumSkyblock(JavaPluginLoader loader, PluginDescriptionFile description, File dataFolder, File file) {
super(loader, description, dataFolder, file);
Expand All @@ -96,38 +97,7 @@ public IridiumSkyblock(JavaPluginLoader loader, PluginDescriptionFile descriptio
@Override
public void onLoad() {
super.onLoad();

setMcVersion();

getLogger().info("Loading world generator...");

// This switch statement is here so that if we end up adding another generator type, we can throw it in this.
switch (IridiumSkyblock.getInstance().getConfiguration().generatorType) {
case OCEAN: {
if(getMcVersion() >= 17) this.chunkGenerator = new OceanGenerator();
else this.chunkGenerator = new OceanGeneratorLegacy();
break;
}
case FLAT: {
if(getMcVersion() >= 17) this.chunkGenerator = new FlatGenerator();
else this.chunkGenerator = new FlatGeneratorLegacy();
break;
}
case VANILLA: {
this.chunkGenerator = null;
break;
}
case VOID: {
this.chunkGenerator = new VoidGenerator();
break;
}
default: {
getLogger().warning("Invalid generator type [" + IridiumSkyblock.getInstance().getConfiguration().generatorType + "], valid types are " + Arrays.toString(GeneratorType.values()));
getLogger().info("GENERATOR TYPE: " + GeneratorType.VOID);
this.chunkGenerator = new VoidGenerator();
break;
}
}
}

@Override
Expand All @@ -136,6 +106,23 @@ public void onEnable() {

this.teamManager = new IslandManager();

getLogger().info("Loading world generator...");

registerGenerators();
setBlockPopulators();

if(IridiumSkyblock.getInstance().getConfiguration().generatorType.equalsIgnoreCase("vanilla")) {
this.chunkGenerator = null;
} else {
for (IridiumChunkGenerator generator : IridiumSkyblock.getInstance().getIridiumChunkGenerators()) {
if (!IridiumSkyblock.getInstance().getConfiguration().generatorType.equalsIgnoreCase(generator.getName())) {
continue;
}

this.chunkGenerator = generator;
}
}

this.teamManager.createWorld(World.Environment.NORMAL, configuration.worldName);
this.teamManager.createWorld(World.Environment.NETHER, configuration.worldName + "_nether");
this.teamManager.createWorld(World.Environment.THE_END, configuration.worldName + "_the_end");
Expand Down Expand Up @@ -196,7 +183,8 @@ public void registerListeners() {
if(!XReflection.supports(15)) Bukkit.getPluginManager().registerEvents(new PortalCreateListener(), this);

if (Bukkit.getPluginManager().isPluginEnabled("ProtocolLib")) {
new ProtocolLibPacketListener().registerListeners();
IridiumSkyblock.getInstance().getLogger().warning("Let's pretend ProtocolLib has loaded.");
//new ProtocolLibPacketListener().registerListeners();
} else if (IridiumSkyblock.getInstance().getConfiguration().fixHorizon) IridiumSkyblock.getInstance().getLogger().warning("ProtocolLib is not installed - features will be limited.");
}

Expand All @@ -218,6 +206,8 @@ public void loadConfigs() {
this.biomes = getPersist().load(Biomes.class);
this.settings = getPersist().load(Settings.class);
this.generators = getPersist().load(Generators.class);
// We want to log this data specifically because
// changing the generator type during a server's lifetime can cause issues.
getLogger().info("GENERATOR TYPE: " + IridiumSkyblock.getInstance().getConfiguration().generatorType);
super.loadConfigs();

Expand Down Expand Up @@ -418,10 +408,35 @@ private void setMcVersion() {
try {
// version example: 1.20.4-R0.1-SNAPSHOT (we need 20)
version = Integer.parseInt(Bukkit.getBukkitVersion().substring(2, 4));
} catch (NumberFormatException ignored) {}
} catch (NumberFormatException ignored) {
}
this.mcVersion = version;
}

private void setBlockPopulators() {

// Overworld
if(IridiumSkyblock.getInstance().getConfiguration().generatorType.equalsIgnoreCase("ocean")
|| IridiumSkyblock.getInstance().getConfiguration().generatorType.equalsIgnoreCase("ocean-legacy")) {

IridiumSkyblock.getInstance().getBlockPopulatorList().put(World.Environment.NORMAL, Arrays.asList(
new KelpBlockPopulator(),
new MagmaBlockPopulator(),
new SeagrassBlockPopulator()
));
}
}

private void registerGenerators() {
IridiumSkyblock.getInstance().getIridiumChunkGenerators().add(new OceanGenerator("ocean", true, false));
IridiumSkyblock.getInstance().getIridiumChunkGenerators().add(new OceanGeneratorLegacy("ocean-legacy", true, false));
IridiumSkyblock.getInstance().getIridiumChunkGenerators().add(new FlatGenerator("superflat", true, true));
IridiumSkyblock.getInstance().getIridiumChunkGenerators().add(new FlatGeneratorLegacy("superflat-legacy", true, true));
IridiumSkyblock.getInstance().getIridiumChunkGenerators().add(new VoidGenerator("skyblock", false, true));
IridiumSkyblock.getInstance().getIridiumChunkGenerators().add(new VoidGenerator("skyblock", false, true));
// Vanilla chunkGenerator = null
}

@Override
public ChunkGenerator getDefaultWorldGenerator(String worldName, String id) {
return this.chunkGenerator;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import com.iridium.iridiumskyblock.IridiumSkyblock;
import com.iridium.iridiumskyblock.database.Island;
import com.iridium.iridiumskyblock.database.User;
import com.iridium.iridiumskyblock.generators.IridiumChunkGenerator;
import com.iridium.iridiumskyblock.managers.IslandManager;
import com.iridium.iridiumteams.Permission;
import com.iridium.iridiumteams.PermissionType;
Expand All @@ -12,6 +13,8 @@
import org.bukkit.Location;
import org.bukkit.OfflinePlayer;
import org.bukkit.World;
import org.bukkit.generator.BlockPopulator;
import org.bukkit.generator.ChunkGenerator;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

Expand Down Expand Up @@ -282,4 +285,32 @@ public boolean canVisitIsland(@NotNull User user, @NotNull Island island) {
return iridiumSkyblock.getIslandManager().canVisit(user.getPlayer(), island);
}

/**
* Adds a block populator to te plugin.<p>
*
* @param environment the world type to apply to
* @param blockPopulator the blockPopulator to add
* @since 4.1.0
*/
public void addBlockPopulator(@NotNull World.Environment environment, @NotNull BlockPopulator blockPopulator) {
iridiumSkyblock.getBlockPopulatorList().get(environment).add(blockPopulator);
}

/**
* Adds a ChunkGenerator to the plugin.<p>
*
* @param generator the ChunkGenerator object
* @param name the name of the generator for use in the config
* @param generatesTerrain determines if the generator will create regenWorlds
* @param lowerHorizon whether the horizon should be lowered in the overworld
*
* @since 4.1.0
*/
public void addChunkGenerator(ChunkGenerator generator, String name, boolean generatesTerrain, boolean lowerHorizon) {
IridiumChunkGenerator iridiumChunkGenerator = (IridiumChunkGenerator) generator;
iridiumChunkGenerator.setName(name);
iridiumChunkGenerator.setGeneratesTerrain(generatesTerrain);
iridiumChunkGenerator.setLowerHorizon(lowerHorizon);
iridiumSkyblock.getIridiumChunkGenerators().add(iridiumChunkGenerator);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
import com.google.common.collect.ImmutableMap;
import com.iridium.iridiumcore.Color;
import com.iridium.iridiumcore.Item;
import com.iridium.iridiumskyblock.managers.GeneratorType;
import com.iridium.iridiumteams.Reward;
import org.bukkit.World;

Expand Down Expand Up @@ -44,7 +43,7 @@ public Configuration() {
public String defaultDescription = "Default island description :c";
public String worldName = "IridiumSkyblock";
public String spawnWorldName = "world";
public GeneratorType generatorType = GeneratorType.VOID;
public String generatorType = "IridiumSkyblock" ;
public boolean fixHorizon = true;
public String islandTitleTop = "&9%island_name%";
public String islandTitleBottom = "&7%island_description%";
Expand Down
Loading

0 comments on commit e2a6717

Please sign in to comment.