mirror of
https://github.com/PolyhedralDev/Terra.git
synced 2025-07-02 16:05:29 +00:00
Merge branch 'structurelocate' into biome
# Conflicts: # build.gradle.kts
This commit is contained in:
commit
beb18c6e2c
@ -7,7 +7,7 @@ import org.gradle.kotlin.dsl.repositories
|
||||
fun Project.configureDependencies() {
|
||||
|
||||
repositories {
|
||||
maven { url = uri("https://hub.spigotmc.org/nexus/content/repositories/snapshots/") }
|
||||
maven { url = uri("https://papermc.io/repo/repository/maven-public/") }
|
||||
maven { url = uri("http://maven.enginehub.org/repo/") }
|
||||
maven { url = uri("https://repo.codemc.org/repository/maven-public") }
|
||||
maven { url = uri("https://papermc.io/repo/repository/maven-public/") }
|
||||
|
@ -16,7 +16,6 @@ group = "com.dfsek.terra.bukkit"
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
maven { url = uri("https://hub.spigotmc.org/nexus/content/repositories/snapshots/") }
|
||||
maven { url = uri("http://maven.enginehub.org/repo/") }
|
||||
maven { url = uri("https://repo.codemc.org/repository/maven-public") }
|
||||
maven { url = uri("https://papermc.io/repo/repository/maven-public/") }
|
||||
@ -25,7 +24,7 @@ repositories {
|
||||
dependencies {
|
||||
"shadedApi"(project(":common"))
|
||||
|
||||
"compileOnly"("org.spigotmc:spigot-api:1.16.2-R0.1-SNAPSHOT")
|
||||
"compileOnly"("com.destroystokyo.paper:paper-api:1.16.5-R0.1-SNAPSHOT")
|
||||
"shadedImplementation"("io.papermc:paperlib:1.0.5")
|
||||
|
||||
"shadedImplementation"("org.bstats:bstats-bukkit:1.7")
|
||||
@ -100,7 +99,7 @@ val testWithPaper = task<JavaExec>(name = "testWithPaper") {
|
||||
"-Daikars.new.flags=true", "-DIReallyKnowWhatIAmDoingISwear")
|
||||
maxHeapSize = "3G"
|
||||
minHeapSize = "3G"
|
||||
args = listOf("nogui")
|
||||
//args = listOf("nogui")
|
||||
workingDir = file("${testDir}/")
|
||||
classpath = files("${testDir}/paper.jar")
|
||||
}
|
||||
|
@ -19,7 +19,8 @@ import com.dfsek.terra.bukkit.command.command.structure.LocateCommand;
|
||||
import com.dfsek.terra.bukkit.generator.BukkitChunkGeneratorWrapper;
|
||||
import com.dfsek.terra.bukkit.handles.BukkitItemHandle;
|
||||
import com.dfsek.terra.bukkit.handles.BukkitWorldHandle;
|
||||
import com.dfsek.terra.bukkit.listeners.EventListener;
|
||||
import com.dfsek.terra.bukkit.listeners.CommonListener;
|
||||
import com.dfsek.terra.bukkit.listeners.PaperListener;
|
||||
import com.dfsek.terra.bukkit.listeners.SpigotListener;
|
||||
import com.dfsek.terra.bukkit.util.PaperUtil;
|
||||
import com.dfsek.terra.bukkit.world.BukkitBiome;
|
||||
@ -30,6 +31,7 @@ import com.dfsek.terra.config.lang.LangUtil;
|
||||
import com.dfsek.terra.debug.Debug;
|
||||
import com.dfsek.terra.generation.MasterChunkGenerator;
|
||||
import com.dfsek.terra.registry.ConfigRegistry;
|
||||
import io.papermc.lib.PaperLib;
|
||||
import org.bstats.bukkit.Metrics;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.TreeType;
|
||||
@ -149,11 +151,41 @@ public class TerraBukkitPlugin extends JavaPlugin implements TerraPlugin {
|
||||
|
||||
long save = config.getDataSaveInterval();
|
||||
Bukkit.getScheduler().runTaskTimerAsynchronously(this, BukkitChunkGeneratorWrapper::saveAll, save, save); // Schedule population data saving
|
||||
|
||||
Bukkit.getPluginManager().registerEvents(new EventListener(this), this); // Register master event listener
|
||||
Bukkit.getPluginManager().registerEvents(new SpigotListener(this), this); // Register Spigot event listener, once Paper accepts StructureLocateEvent PR Spigot and Paper events will be separate.
|
||||
|
||||
Bukkit.getPluginManager().registerEvents(new CommonListener(this), this); // Register master event listener
|
||||
PaperUtil.checkPaper(this);
|
||||
|
||||
if(PaperLib.isPaper()) {
|
||||
try {
|
||||
Class.forName("io.papermc.paper.event.world.StructureLocateEvent"); // Check if user is on Paper version with event.
|
||||
Bukkit.getPluginManager().registerEvents(new PaperListener(this), this); // Register Paper events.
|
||||
} catch(ClassNotFoundException e) {
|
||||
registerSpigotEvents(true); // Outdated Paper version.
|
||||
}
|
||||
} else {
|
||||
registerSpigotEvents(false);
|
||||
}
|
||||
}
|
||||
|
||||
private void registerSpigotEvents(boolean outdated) {
|
||||
if(outdated) {
|
||||
getLogger().severe("You are using an outdated version of Paper.");
|
||||
getLogger().severe("This version does not contain StructureLocateEvent.");
|
||||
getLogger().severe("Terra will now fall back to Spigot events.");
|
||||
getLogger().severe("This will prevent cartographer villagers from spawning,");
|
||||
getLogger().severe("and cause structure location to not function.");
|
||||
getLogger().severe("If you want these functionalities, update to the latest build of Paper.");
|
||||
getLogger().severe("If you use a fork, update to the latest version, then if you still");
|
||||
getLogger().severe("receive this message, ask the fork developer to update upstream.");
|
||||
} else {
|
||||
getLogger().severe("Paper is not in use. Falling back to Spigot events.");
|
||||
getLogger().severe("This will prevent cartographer villagers from spawning,");
|
||||
getLogger().severe("and cause structure location to not function.");
|
||||
getLogger().severe("If you want these functionalities (and all the other");
|
||||
getLogger().severe("benefits that Paper offers), upgrade your server to Paper.");
|
||||
getLogger().severe("Find out more at https://papermc.io/");
|
||||
}
|
||||
|
||||
Bukkit.getPluginManager().registerEvents(new SpigotListener(this), this); // Register Spigot event listener
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -22,10 +22,10 @@ import org.bukkit.event.world.StructureGrowEvent;
|
||||
/**
|
||||
* Listener for events on all implementations.
|
||||
*/
|
||||
public class EventListener implements Listener {
|
||||
public class CommonListener implements Listener {
|
||||
private final TerraPlugin main;
|
||||
|
||||
public EventListener(TerraPlugin main) {
|
||||
public CommonListener(TerraPlugin main) {
|
||||
this.main = main;
|
||||
}
|
||||
|
@ -1,11 +1,45 @@
|
||||
package com.dfsek.terra.bukkit.listeners;
|
||||
|
||||
import com.dfsek.terra.TerraWorld;
|
||||
import com.dfsek.terra.api.platform.TerraPlugin;
|
||||
import com.dfsek.terra.async.AsyncStructureFinder;
|
||||
import com.dfsek.terra.bukkit.world.BukkitAdapter;
|
||||
import com.dfsek.terra.debug.Debug;
|
||||
import com.dfsek.terra.population.items.TerraStructure;
|
||||
import io.papermc.paper.event.world.StructureLocateEvent;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
|
||||
/**
|
||||
* Placeholder, will be used once Paper accepts StructureLocateEvent PR.
|
||||
*/
|
||||
public class PaperListener implements Listener {
|
||||
private final TerraPlugin main;
|
||||
|
||||
public PaperListener(TerraPlugin main) {
|
||||
this.main = main;
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onStructureLocate(StructureLocateEvent e) {
|
||||
e.setResult(null); // Assume no result.
|
||||
String name = "minecraft:" + e.getType().getName();
|
||||
if(!TerraWorld.isTerraWorld(BukkitAdapter.adapt(e.getWorld()))) return;
|
||||
Debug.info("Overriding structure location for \"" + name + "\"");
|
||||
TerraWorld tw = main.getWorld(BukkitAdapter.adapt(e.getWorld()));
|
||||
TerraStructure config = tw.getConfig().getStructure(tw.getConfig().getTemplate().getLocatable().get(name));
|
||||
if(config != null) {
|
||||
AsyncStructureFinder finder = new AsyncStructureFinder(tw.getGrid(), config, BukkitAdapter.adapt(e.getOrigin()), 0, 500, location -> {
|
||||
if(location != null)
|
||||
e.setResult(BukkitAdapter.adapt(location.toLocation(BukkitAdapter.adapt(e.getWorld()))));
|
||||
Debug.info("Location: " + location);
|
||||
}, main);
|
||||
finder.run(); // Do this synchronously.
|
||||
} else {
|
||||
main.getLogger().warning("No overrides are defined for \"" + name + "\"");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@ -56,14 +56,21 @@ public class SpigotListener implements Listener {
|
||||
public void onCartographerChange(VillagerAcquireTradeEvent e) {
|
||||
if(!TerraWorld.isTerraWorld(BukkitAdapter.adapt(e.getEntity().getWorld()))) return;
|
||||
if(!(e.getEntity() instanceof Villager)) return;
|
||||
if(((Villager) e.getEntity()).getProfession().equals(Villager.Profession.CARTOGRAPHER))
|
||||
if(((Villager) e.getEntity()).getProfession().equals(Villager.Profession.CARTOGRAPHER)) {
|
||||
main.getLogger().severe("Prevented server crash by stopping Cartographer villager from spawning.");
|
||||
main.getLogger().severe("Please upgrade to Paper, which has a StructureLocateEvent that fixes this issue");
|
||||
main.getLogger().severe("at the source, and doesn't require us to do stupid band-aids.");
|
||||
e.setCancelled(true); // Cancel leveling if the villager is a Cartographer, to prevent crashing server.
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onCartographerLevel(VillagerCareerChangeEvent e) {
|
||||
if(!TerraWorld.isTerraWorld(BukkitAdapter.adapt(e.getEntity().getWorld()))) return;
|
||||
if(e.getProfession().equals(Villager.Profession.CARTOGRAPHER)) {
|
||||
main.getLogger().severe("Prevented server crash by stopping Cartographer villager from spawning.");
|
||||
main.getLogger().severe("Please upgrade to Paper, which has a StructureLocateEvent that fixes this issue");
|
||||
main.getLogger().severe("at the source, and doesn't require us to do stupid band-aids.");
|
||||
e.getEntity().setProfession(Villager.Profession.NITWIT); // Give villager new profession to prevent server crash.
|
||||
e.setCancelled(true);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user