Made wolves generated with chunks correctly inherit variants

This commit is contained in:
OakLoaf 2025-08-01 16:53:32 +01:00
parent 9f546370cd
commit b53d475f42

View File

@ -27,6 +27,7 @@ import com.dfsek.terra.bukkit.world.BukkitPlatformBiome;
import org.bukkit.NamespacedKey; import org.bukkit.NamespacedKey;
import org.bukkit.World; import org.bukkit.World;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Wolf; import org.bukkit.entity.Wolf;
import org.bukkit.entity.Wolf.Variant; import org.bukkit.entity.Wolf.Variant;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
@ -34,6 +35,7 @@ import org.bukkit.event.Listener;
import org.bukkit.event.entity.CreatureSpawnEvent; import org.bukkit.event.entity.CreatureSpawnEvent;
import org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason; import org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason;
import org.bukkit.event.server.PluginEnableEvent; import org.bukkit.event.server.PluginEnableEvent;
import org.bukkit.event.world.ChunkLoadEvent;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -68,21 +70,12 @@ public class CommonListener implements Listener {
} }
} }
@EventHandler private void applyWolfVariant(Wolf wolf) {
public void onWolfSpawn(CreatureSpawnEvent event) {
if (!(event.getEntity() instanceof Wolf wolf)) {
return;
}
// Doesn't apply if variant has already been applied // Doesn't apply if variant has already been applied
if (wolf.getVariant() != Variant.PALE) { if (wolf.getVariant() != Variant.PALE) {
return; return;
} }
if (!WOLF_VARIANT_SPAWN_REASONS.contains(event.getSpawnReason())) {
return;
}
World world = wolf.getWorld(); World world = wolf.getWorld();
if (!(world.getGenerator() instanceof BukkitChunkGeneratorWrapper wrapper)) { if (!(world.getGenerator() instanceof BukkitChunkGeneratorWrapper wrapper)) {
return; return;
@ -113,4 +106,31 @@ public class CommonListener implements Listener {
} }
}); });
} }
@EventHandler
public void onWolfSpawn(CreatureSpawnEvent event) {
if (!(event.getEntity() instanceof Wolf wolf)) {
return;
}
if (!WOLF_VARIANT_SPAWN_REASONS.contains(event.getSpawnReason())) {
logger.info("Ignoring wolf spawned with reason: " + event.getSpawnReason());
return;
}
applyWolfVariant(wolf);
}
@EventHandler
public void onChunkGenerate(ChunkLoadEvent event) {
if (!event.isNewChunk()) {
return;
}
for (Entity entity : event.getChunk().getEntities()) {
if (entity instanceof Wolf wolf) {
applyWolfVariant(wolf);
}
}
}
} }