mirror of
https://github.com/BentoBoxWorld/BentoBox.git
synced 2024-12-23 09:37:38 +01:00
2356 better deletion (#2364)
* Fix 1.20.4 backwards compatibility * Improve deletion speed and memory usage
This commit is contained in:
parent
83698c267f
commit
d288528a17
4
pom.xml
4
pom.xml
@ -73,10 +73,10 @@
|
|||||||
<postgresql.version>42.2.18</postgresql.version>
|
<postgresql.version>42.2.18</postgresql.version>
|
||||||
<hikaricp.version>5.0.1</hikaricp.version>
|
<hikaricp.version>5.0.1</hikaricp.version>
|
||||||
<!-- More visible way to change dependency versions -->
|
<!-- More visible way to change dependency versions -->
|
||||||
<spigot.version>1.20.5-R0.1-SNAPSHOT</spigot.version>
|
<spigot.version>1.20.6-R0.1-SNAPSHOT</spigot.version>
|
||||||
<!-- Might differ from the last Spigot release for short periods
|
<!-- Might differ from the last Spigot release for short periods
|
||||||
of time -->
|
of time -->
|
||||||
<paper.version>1.20.4-R0.1-SNAPSHOT</paper.version>
|
<paper.version>1.20.6-R0.1-SNAPSHOT</paper.version>
|
||||||
<bstats.version>3.0.0</bstats.version>
|
<bstats.version>3.0.0</bstats.version>
|
||||||
<vault.version>1.7.1</vault.version>
|
<vault.version>1.7.1</vault.version>
|
||||||
<placeholderapi.version>2.10.9</placeholderapi.version>
|
<placeholderapi.version>2.10.9</placeholderapi.version>
|
||||||
|
@ -38,6 +38,7 @@ import world.bentobox.bentobox.listeners.DeathListener;
|
|||||||
import world.bentobox.bentobox.listeners.JoinLeaveListener;
|
import world.bentobox.bentobox.listeners.JoinLeaveListener;
|
||||||
import world.bentobox.bentobox.listeners.PanelListenerManager;
|
import world.bentobox.bentobox.listeners.PanelListenerManager;
|
||||||
import world.bentobox.bentobox.listeners.PrimaryIslandListener;
|
import world.bentobox.bentobox.listeners.PrimaryIslandListener;
|
||||||
|
import world.bentobox.bentobox.listeners.SeedWorldMakerListener;
|
||||||
import world.bentobox.bentobox.listeners.StandardSpawnProtectionListener;
|
import world.bentobox.bentobox.listeners.StandardSpawnProtectionListener;
|
||||||
import world.bentobox.bentobox.listeners.teleports.EntityTeleportListener;
|
import world.bentobox.bentobox.listeners.teleports.EntityTeleportListener;
|
||||||
import world.bentobox.bentobox.listeners.teleports.PlayerTeleportListener;
|
import world.bentobox.bentobox.listeners.teleports.PlayerTeleportListener;
|
||||||
@ -313,6 +314,8 @@ public class BentoBox extends JavaPlugin implements Listener {
|
|||||||
manager.registerEvents(islandDeletionManager, this);
|
manager.registerEvents(islandDeletionManager, this);
|
||||||
// Primary Island Listener
|
// Primary Island Listener
|
||||||
manager.registerEvents(new PrimaryIslandListener(this), this);
|
manager.registerEvents(new PrimaryIslandListener(this), this);
|
||||||
|
// Seed world chunk generator
|
||||||
|
manager.registerEvents(new SeedWorldMakerListener(this), this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -133,9 +133,9 @@ public class PanelItem {
|
|||||||
}
|
}
|
||||||
if (meta != null) {
|
if (meta != null) {
|
||||||
if (glow) {
|
if (glow) {
|
||||||
meta.addEnchant(Enchantment.POWER, 0, glow);
|
meta.addEnchant(Enchantment.LURE, 0, glow);
|
||||||
} else {
|
} else {
|
||||||
meta.removeEnchant(Enchantment.POWER);
|
meta.removeEnchant(Enchantment.LURE);
|
||||||
}
|
}
|
||||||
icon.setItemMeta(meta);
|
icon.setItemMeta(meta);
|
||||||
|
|
||||||
|
@ -67,17 +67,21 @@ public class User implements MetaDataAble {
|
|||||||
Map<Particle, Class<?>> v = new EnumMap<>(Particle.class);
|
Map<Particle, Class<?>> v = new EnumMap<>(Particle.class);
|
||||||
v.put(Enums.getIfPresent(Particle.class, "DUST")
|
v.put(Enums.getIfPresent(Particle.class, "DUST")
|
||||||
.or(Enums.getIfPresent(Particle.class, "REDSTONE").or(Particle.FLAME)), Particle.DustOptions.class);
|
.or(Enums.getIfPresent(Particle.class, "REDSTONE").or(Particle.FLAME)), Particle.DustOptions.class);
|
||||||
|
if (Enums.getIfPresent(Particle.class, "ITEM").isPresent()) {
|
||||||
|
// 1.20.6 Particles
|
||||||
v.put(Particle.ITEM, ItemStack.class);
|
v.put(Particle.ITEM, ItemStack.class);
|
||||||
v.put(Particle.ITEM_COBWEB, ItemStack.class);
|
v.put(Particle.ITEM_COBWEB, ItemStack.class);
|
||||||
v.put(Particle.FALLING_DUST, BlockData.class);
|
|
||||||
v.put(Particle.BLOCK, BlockData.class);
|
v.put(Particle.BLOCK, BlockData.class);
|
||||||
|
v.put(Particle.DUST_PILLAR, BlockData.class);
|
||||||
|
v.put(Particle.ENTITY_EFFECT, Color.class);
|
||||||
|
}
|
||||||
|
v.put(Particle.FALLING_DUST, BlockData.class);
|
||||||
v.put(Particle.BLOCK_MARKER, BlockData.class);
|
v.put(Particle.BLOCK_MARKER, BlockData.class);
|
||||||
v.put(Particle.DUST_COLOR_TRANSITION, DustTransition.class);
|
v.put(Particle.DUST_COLOR_TRANSITION, DustTransition.class);
|
||||||
v.put(Particle.DUST_PILLAR, BlockData.class);
|
|
||||||
v.put(Particle.VIBRATION, Vibration.class);
|
v.put(Particle.VIBRATION, Vibration.class);
|
||||||
v.put(Particle.SCULK_CHARGE, Float.class);
|
v.put(Particle.SCULK_CHARGE, Float.class);
|
||||||
v.put(Particle.SHRIEK, Integer.class);
|
v.put(Particle.SHRIEK, Integer.class);
|
||||||
v.put(Particle.ENTITY_EFFECT, Color.class);
|
|
||||||
VALIDATION_CHECK = Collections.unmodifiableMap(v);
|
VALIDATION_CHECK = Collections.unmodifiableMap(v);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -732,7 +736,8 @@ public class User implements MetaDataAble {
|
|||||||
// Check if this particle is beyond the viewing distance of the server
|
// Check if this particle is beyond the viewing distance of the server
|
||||||
if (this.player != null && this.player.getLocation().toVector().distanceSquared(new Vector(x, y,
|
if (this.player != null && this.player.getLocation().toVector().distanceSquared(new Vector(x, y,
|
||||||
z)) < (Bukkit.getServer().getViewDistance() * 256 * Bukkit.getServer().getViewDistance())) {
|
z)) < (Bukkit.getServer().getViewDistance() * 256 * Bukkit.getServer().getViewDistance())) {
|
||||||
if (particle.equals(Particle.DUST)) {
|
if (particle.equals(Enums.getIfPresent(Particle.class, "DUST")
|
||||||
|
.or(Enums.getIfPresent(Particle.class, "REDSTONE").or(Particle.FLAME)))) {
|
||||||
player.spawnParticle(particle, x, y, z, 1, 0, 0, 0, 1, dustOptions);
|
player.spawnParticle(particle, x, y, z, 1, 0, 0, 0, 1, dustOptions);
|
||||||
} else if (dustOptions != null) {
|
} else if (dustOptions != null) {
|
||||||
player.spawnParticle(particle, x, y, z, 1, dustOptions);
|
player.spawnParticle(particle, x, y, z, 1, dustOptions);
|
||||||
|
@ -24,6 +24,7 @@ import org.bukkit.potion.PotionEffectType;
|
|||||||
import org.bukkit.potion.PotionType;
|
import org.bukkit.potion.PotionType;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
|
import com.google.common.base.Enums;
|
||||||
import com.meowj.langutils.lang.LanguageHelper;
|
import com.meowj.langutils.lang.LanguageHelper;
|
||||||
|
|
||||||
import world.bentobox.bentobox.BentoBox;
|
import world.bentobox.bentobox.BentoBox;
|
||||||
@ -286,10 +287,6 @@ public class LangUtilsHook extends Hook {
|
|||||||
case LUCK -> "Potion of Luck";
|
case LUCK -> "Potion of Luck";
|
||||||
case TURTLE_MASTER -> "Potion of the Turtle Master";
|
case TURTLE_MASTER -> "Potion of the Turtle Master";
|
||||||
case SLOW_FALLING -> "Potion of Slow Falling";
|
case SLOW_FALLING -> "Potion of Slow Falling";
|
||||||
case HARMING -> "Potion of Harming";
|
|
||||||
case HEALING -> "Potion of Healing";
|
|
||||||
case INFESTED -> "Infested Potion";
|
|
||||||
case LEAPING -> "Potion of Leaping";
|
|
||||||
case LONG_FIRE_RESISTANCE -> "Potion of Long Fire Resistance";
|
case LONG_FIRE_RESISTANCE -> "Potion of Long Fire Resistance";
|
||||||
case LONG_INVISIBILITY -> "Potion of Long Invisibility";
|
case LONG_INVISIBILITY -> "Potion of Long Invisibility";
|
||||||
case LONG_NIGHT_VISION -> "Potion of Long Night Vision";
|
case LONG_NIGHT_VISION -> "Potion of Long Night Vision";
|
||||||
@ -302,8 +299,6 @@ public class LangUtilsHook extends Hook {
|
|||||||
case LONG_TURTLE_MASTER -> "Potion of Long Turtle Master";
|
case LONG_TURTLE_MASTER -> "Potion of Long Turtle Master";
|
||||||
case LONG_WATER_BREATHING -> "Potion of Long Water Breathing";
|
case LONG_WATER_BREATHING -> "Potion of Long Water Breathing";
|
||||||
case LONG_WEAKNESS -> "Potion of Long Weakness";
|
case LONG_WEAKNESS -> "Potion of Long Weakness";
|
||||||
case OOZING -> "Potion of Oozing";
|
|
||||||
case REGENERATION -> "Potion of Regeneration";
|
|
||||||
case STRONG_HARMING -> "Potion of Strong Harming";
|
case STRONG_HARMING -> "Potion of Strong Harming";
|
||||||
case STRONG_HEALING -> "Potion of Strong Healing";
|
case STRONG_HEALING -> "Potion of Strong Healing";
|
||||||
case STRONG_LEAPING -> "Potion of Strong Leaping";
|
case STRONG_LEAPING -> "Potion of Strong Leaping";
|
||||||
@ -313,10 +308,7 @@ public class LangUtilsHook extends Hook {
|
|||||||
case STRONG_STRENGTH -> "Potion of Strong Strength";
|
case STRONG_STRENGTH -> "Potion of Strong Strength";
|
||||||
case STRONG_SWIFTNESS -> "Potion of Swiftness";
|
case STRONG_SWIFTNESS -> "Potion of Swiftness";
|
||||||
case STRONG_TURTLE_MASTER -> "Potion of Strong Turtle Master";
|
case STRONG_TURTLE_MASTER -> "Potion of Strong Turtle Master";
|
||||||
case SWIFTNESS -> "Potion of Swiftness";
|
default -> "Potion of " + Util.prettifyText(potionType.name());
|
||||||
case WEAVING -> "Potion of Weaving";
|
|
||||||
case WIND_CHARGED -> "Potion of Wind Charged";
|
|
||||||
default -> "Potion (Unknown)";
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,59 @@
|
|||||||
|
package world.bentobox.bentobox.listeners;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.World;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.EventPriority;
|
||||||
|
import org.bukkit.event.Listener;
|
||||||
|
import org.bukkit.event.world.ChunkLoadEvent;
|
||||||
|
|
||||||
|
import world.bentobox.bentobox.BentoBox;
|
||||||
|
import world.bentobox.bentobox.api.addons.GameModeAddon;
|
||||||
|
import world.bentobox.bentobox.api.events.BentoBoxReadyEvent;
|
||||||
|
import world.bentobox.bentobox.util.Util;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Updates chunks in seed worlds if they have been generated in the main world
|
||||||
|
* @author tastybento
|
||||||
|
*/
|
||||||
|
public class SeedWorldMakerListener implements Listener {
|
||||||
|
|
||||||
|
private final BentoBox plugin;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whether BentoBox is ready or not.
|
||||||
|
* This helps to avoid hanging out the server on startup as a lot of {@link ChunkLoadEvent} are called at this time.
|
||||||
|
* @since 1.1
|
||||||
|
*/
|
||||||
|
private boolean ready;
|
||||||
|
|
||||||
|
|
||||||
|
public SeedWorldMakerListener(BentoBox bentoBox) {
|
||||||
|
this.plugin = bentoBox;
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
|
||||||
|
public void onBentoBoxReady(BentoBoxReadyEvent e) {
|
||||||
|
ready = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
|
||||||
|
public void onChunkLoad(ChunkLoadEvent e) {
|
||||||
|
if (!ready || !e.getChunk().isGenerated()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
World world = e.getWorld();
|
||||||
|
plugin.getIWM().getAddon(world).filter(GameModeAddon::isUsesNewChunkGeneration).ifPresent(gma -> {
|
||||||
|
World seed = Bukkit.getWorld(world.getName() + "/bentobox");
|
||||||
|
int x = e.getChunk().getX();
|
||||||
|
int z = e.getChunk().getZ();
|
||||||
|
if (seed != null && !seed.getChunkAt(x, z, false).isGenerated()) {
|
||||||
|
Util.getChunkAtAsync(seed, x, z, true);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -46,6 +46,7 @@ import world.bentobox.bentobox.database.objects.IslandDeletion;
|
|||||||
import world.bentobox.bentobox.hooks.ItemsAdderHook;
|
import world.bentobox.bentobox.hooks.ItemsAdderHook;
|
||||||
import world.bentobox.bentobox.hooks.SlimefunHook;
|
import world.bentobox.bentobox.hooks.SlimefunHook;
|
||||||
import world.bentobox.bentobox.util.MyBiomeGrid;
|
import world.bentobox.bentobox.util.MyBiomeGrid;
|
||||||
|
import world.bentobox.bentobox.util.Util;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Regenerates by using a seed world. The seed world is created using the same generator as the game
|
* Regenerates by using a seed world. The seed world is created using the same generator as the game
|
||||||
@ -101,7 +102,10 @@ public abstract class CopyWorldRegenerator implements WorldRegenerator {
|
|||||||
}
|
}
|
||||||
final int x = chunkX;
|
final int x = chunkX;
|
||||||
final int z = chunkZ;
|
final int z = chunkZ;
|
||||||
|
// Only add chunks that are generated
|
||||||
|
if (world.getChunkAt(x, z, false).isGenerated()) {
|
||||||
newTasks.add(regenerateChunk(di, world, x, z));
|
newTasks.add(regenerateChunk(di, world, x, z));
|
||||||
|
}
|
||||||
chunkZ++;
|
chunkZ++;
|
||||||
if (chunkZ > di.getMaxZChunk()) {
|
if (chunkZ > di.getMaxZChunk()) {
|
||||||
chunkZ = di.getMinZChunk();
|
chunkZ = di.getMinZChunk();
|
||||||
@ -126,6 +130,11 @@ public abstract class CopyWorldRegenerator implements WorldRegenerator {
|
|||||||
private CompletableFuture<Void> regenerateChunk(@Nullable IslandDeletion di, @NonNull World world, int chunkX,
|
private CompletableFuture<Void> regenerateChunk(@Nullable IslandDeletion di, @NonNull World world, int chunkX,
|
||||||
int chunkZ) {
|
int chunkZ) {
|
||||||
|
|
||||||
|
// Check if chunk has been generated
|
||||||
|
if (!world.getChunkAt(chunkX, chunkZ, false).isGenerated()) {
|
||||||
|
return CompletableFuture.completedFuture(null);
|
||||||
|
}
|
||||||
|
|
||||||
CompletableFuture<Chunk> seedWorldFuture = getSeedWorldChunk(world, chunkX, chunkZ);
|
CompletableFuture<Chunk> seedWorldFuture = getSeedWorldChunk(world, chunkX, chunkZ);
|
||||||
|
|
||||||
// Set up a future to get the chunk requests using Paper's Lib. If Paper is used, this should be done async
|
// Set up a future to get the chunk requests using Paper's Lib. If Paper is used, this should be done async
|
||||||
|
@ -344,7 +344,8 @@ public class ItemParser {
|
|||||||
PatternType pt = Enums.getIfPresent(PatternType.class, part[i]).orNull();
|
PatternType pt = Enums.getIfPresent(PatternType.class, part[i]).orNull();
|
||||||
if (pt == null) {
|
if (pt == null) {
|
||||||
// Try to convert old to new
|
// Try to convert old to new
|
||||||
if (part[i].trim().equals("STRIPE_SMALL")) {
|
if (part[i].trim().equals("STRIPE_SMALL")
|
||||||
|
&& Enums.getIfPresent(PatternType.class, "SMALL_STRIPES").isPresent()) {
|
||||||
pt = PatternType.SMALL_STRIPES;
|
pt = PatternType.SMALL_STRIPES;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -748,6 +748,7 @@ public class Util {
|
|||||||
String serverPackageName = Bukkit.getServer().getClass().getPackage().getName();
|
String serverPackageName = Bukkit.getServer().getClass().getPackage().getName();
|
||||||
String pluginPackageName = plugin.getClass().getPackage().getName();
|
String pluginPackageName = plugin.getClass().getPackage().getName();
|
||||||
String version = serverPackageName.substring(serverPackageName.lastIndexOf('.') + 1);
|
String version = serverPackageName.substring(serverPackageName.lastIndexOf('.') + 1);
|
||||||
|
BentoBox.getInstance().log("Optimizing for " + version);
|
||||||
PasteHandler handler;
|
PasteHandler handler;
|
||||||
try {
|
try {
|
||||||
Class<?> clazz = Class.forName(pluginPackageName + ".nms." + version + ".PasteHandlerImpl");
|
Class<?> clazz = Class.forName(pluginPackageName + ".nms." + version + ".PasteHandlerImpl");
|
||||||
|
Loading…
Reference in New Issue
Block a user