9
0
mirror of https://github.com/Xiao-MoMi/Custom-Crops.git synced 2026-01-06 15:51:52 +00:00

Additional slime world event listener

This commit is contained in:
XiaoMoMi
2024-11-04 04:03:42 +08:00
parent 9b14f07df9
commit e0df70529d
7 changed files with 41 additions and 14 deletions

View File

@@ -81,6 +81,7 @@ public class GreenhouseBlock extends AbstractCustomCropsBlock {
CustomCropsBlockState state = getOrFixState(world, pos3);
GreenhouseGlassBreakEvent breakEvent = new GreenhouseGlassBreakEvent(event.entityBreaker(), event.blockBreaker(), event.location(), event.brokenID(), state, event.reason());
if (EventUtils.fireAndCheckCancel(breakEvent)) {
breakEvent.setCancelled(true);
return;
}
world.removeBlockState(pos3);

View File

@@ -81,6 +81,7 @@ public class ScarecrowBlock extends AbstractCustomCropsBlock {
CustomCropsBlockState state = getOrFixState(world, pos3);
ScarecrowBreakEvent breakEvent = new ScarecrowBreakEvent(event.entityBreaker(), event.blockBreaker(), event.location(), event.brokenID(), state, event.reason());
if (EventUtils.fireAndCheckCancel(breakEvent)) {
event.setCancelled(true);
return;
}
world.removeBlockState(pos3);

View File

@@ -72,6 +72,8 @@ public interface WorldManager extends Reloadable {
*/
boolean unloadWorld(World world, boolean disabling);
boolean isMechanicEnabled(World world);
/**
* Retrieves a CustomCrops world based on the specified Bukkit world, if loaded.
*

View File

@@ -18,6 +18,7 @@
package net.momirealms.customcrops.bukkit.integration.adaptor.asp_r1;
import com.flowpowered.nbt.*;
import com.infernalsuite.aswm.api.events.LoadSlimeWorldEvent;
import com.infernalsuite.aswm.api.world.SlimeWorld;
import net.momirealms.customcrops.api.BukkitCustomCropsPlugin;
import net.momirealms.customcrops.api.core.InternalRegistries;
@@ -27,8 +28,12 @@ import net.momirealms.customcrops.api.core.world.adaptor.AbstractWorldAdaptor;
import net.momirealms.customcrops.api.util.StringUtils;
import net.momirealms.customcrops.api.util.TagUtils;
import net.momirealms.customcrops.common.helper.GsonHelper;
import net.momirealms.customcrops.common.plugin.CustomCropsPlugin;
import net.momirealms.customcrops.common.util.Key;
import org.bukkit.Bukkit;
import org.bukkit.World;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.plugin.Plugin;
import org.jetbrains.annotations.Nullable;
@@ -40,7 +45,7 @@ import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.PriorityBlockingQueue;
import java.util.function.Function;
public class SlimeWorldAdaptorR1 extends AbstractWorldAdaptor<SlimeWorld> {
public class SlimeWorldAdaptorR1 extends AbstractWorldAdaptor<SlimeWorld> implements Listener {
private final Function<String, SlimeWorld> getSlimeWorldFunction;
@@ -76,6 +81,13 @@ public class SlimeWorldAdaptorR1 extends AbstractWorldAdaptor<SlimeWorld> {
}
}
@EventHandler
public void onWorldLoad(LoadSlimeWorldEvent event) {
World world = Bukkit.getWorld(event.getSlimeWorld().getName());
if (!BukkitCustomCropsPlugin.getInstance().getWorldManager().isMechanicEnabled(world)) return;
BukkitCustomCropsPlugin.getInstance().getWorldManager().loadWorld(world);
}
@Override
public CustomCropsWorld<SlimeWorld> adapt(Object world) {
return CustomCropsWorld.create((SlimeWorld) world, this);

View File

@@ -1,6 +1,6 @@
# Project settings
# Rule: [major update].[feature update].[bug fix]
project_version=3.6.17
project_version=3.6.19
config_version=42
project_group=net.momirealms
@@ -18,7 +18,7 @@ asm_commons_version=9.7.1
jar_relocator_version=1.7
adventure_bundle_version=4.17.0
adventure_platform_version=4.3.4
sparrow_heart_version=0.45
sparrow_heart_version=0.46
cloud_core_version=2.0.0
cloud_services_version=2.0.0
cloud_brigadier_version=2.0.0-beta.10

View File

@@ -45,7 +45,7 @@ public abstract class BukkitItemFactory extends ItemFactory<CustomCropsPlugin, R
return new UniversalItemFactory(plugin);
}
case "1.20.5", "1.20.6",
"1.21", "1.21.1", "1.21.2" -> {
"1.21", "1.21.1", "1.21.2", "1.21.3", "1.21.4" -> {
return new ComponentItemFactory(plugin);
}
default -> throw new IllegalStateException("Unsupported server version: " + plugin.getServerVersion());

View File

@@ -56,12 +56,16 @@ public class BukkitWorldManager implements WorldManager, Listener {
this.plugin = plugin;
try {
Class.forName("com.infernalsuite.aswm.api.SlimePlugin");
adaptors.add(new SlimeWorldAdaptorR1(1));
SlimeWorldAdaptorR1 adaptor = new SlimeWorldAdaptorR1(1);
adaptors.add(adaptor);
Bukkit.getPluginManager().registerEvents(adaptor, plugin.getBootstrap());
plugin.getPluginLogger().info("SlimeWorldManager hooked!");
} catch (ClassNotFoundException ignored) {
}
if (Bukkit.getPluginManager().isPluginEnabled("SlimeWorldPlugin")) {
adaptors.add(new SlimeWorldAdaptorR1(2));
SlimeWorldAdaptorR1 adaptor = new SlimeWorldAdaptorR1(2);
adaptors.add(adaptor);
Bukkit.getPluginManager().registerEvents(adaptor, plugin.getBootstrap());
plugin.getPluginLogger().info("AdvancedSlimePaper hooked!");
}
this.adaptors.add(new BukkitWorldAdaptor());
@@ -140,6 +144,19 @@ public class BukkitWorldManager implements WorldManager, Listener {
this.worldSettings.clear();
}
@Override
public void disable() {
this.unload();
for (World world : Bukkit.getWorlds()) {
unloadWorld(world, true);
}
for (WorldAdaptor<?> adaptor : this.adaptors) {
if (adaptor instanceof Listener listener) {
HandlerList.unregisterAll(listener);
}
}
}
private void loadConfig() {
YamlDocument config = BukkitConfigManager.getMainConfig();
@@ -176,14 +193,6 @@ public class BukkitWorldManager implements WorldManager, Listener {
}
}
@Override
public void disable() {
this.unload();
for (World world : Bukkit.getWorlds()) {
unloadWorld(world, true);
}
}
@Override
public CustomCropsWorld<?> loadWorld(World world) {
Optional<CustomCropsWorld<?>> optionalWorld = getWorld(world);
@@ -282,7 +291,9 @@ public class BukkitWorldManager implements WorldManager, Listener {
});
}
@Override
public boolean isMechanicEnabled(World world) {
if (world == null) return false;
if (matchRule == MatchRule.WHITELIST) {
return worldList.contains(world.getName());
} else if (matchRule == MatchRule.BLACKLIST) {