Skip to content

Commit

Permalink
Fix biome null
Browse files Browse the repository at this point in the history
  • Loading branch information
Dueris committed Jun 6, 2024
1 parent e531ded commit fa78116
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import me.dueris.genesismc.factory.conditions.types.*;
import me.dueris.genesismc.registry.Registries;
import net.minecraft.core.BlockPos;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.level.biome.Biome;
import org.bukkit.Location;
import org.bukkit.NamespacedKey;
Expand Down Expand Up @@ -141,7 +142,7 @@ public CraftEntity right() {
return false;
}

public static boolean testBiome(FactoryJsonObject condition, org.bukkit.block.Biome biome, Location blockPos) {
public static boolean testBiome(FactoryJsonObject condition, org.bukkit.block.Biome biome, Location blockPos, ServerLevel level) {
if (condition == null || condition.isEmpty()) return true; // Empty condition, do nothing
if (isMetaCondition(condition)) {
String type = condition.getString("type");
Expand All @@ -155,7 +156,7 @@ public static boolean testBiome(FactoryJsonObject condition, org.bukkit.block.Bi
Registrar<BiomeConditions.ConditionFactory> factory = GenesisMC.getPlugin().registry.retrieve(Registries.BIOME_CONDITION);
BiomeConditions.ConditionFactory con = factory.get(NamespacedKey.fromString(obj.getString("type")));
if (con != null) {
cons.add(getPossibleInvert(condition.getBooleanOrDefault("inverted", false), testBiome(obj, biome, blockPos)));
cons.add(getPossibleInvert(condition.getBooleanOrDefault("inverted", false), testBiome(obj, biome, blockPos, level)));
} else {
cons.add(getPossibleInvert(condition.getBooleanOrDefault("inverted", false), true)); // Condition null or not found.
}
Expand All @@ -175,7 +176,7 @@ public static boolean testBiome(FactoryJsonObject condition, org.bukkit.block.Bi
Registrar<BiomeConditions.ConditionFactory> factory = GenesisMC.getPlugin().registry.retrieve(Registries.BIOME_CONDITION);
BiomeConditions.ConditionFactory con = factory.get(NamespacedKey.fromString(obj.getString("type")));
if (con != null) {
cons.add(getPossibleInvert(condition.getBooleanOrDefault("inverted", false), testBiome(obj, biome, blockPos)));
cons.add(getPossibleInvert(condition.getBooleanOrDefault("inverted", false), testBiome(obj, biome, blockPos, level)));
} else {
cons.add(getPossibleInvert(condition.getBooleanOrDefault("inverted", false), true)); // Condition null or not found.
}
Expand All @@ -195,11 +196,19 @@ public static boolean testBiome(FactoryJsonObject condition, org.bukkit.block.Bi
}
} else {
// return the condition
Biome nmsBiome = CraftBiome.bukkitToMinecraft(biome);
if (nmsBiome == null) {
BlockPos nmsPos = CraftLocation.toBlockPosition(blockPos);
nmsBiome = level.getBiome(nmsPos).value();
if (nmsBiome == null) {
throw new RuntimeException("Unable to convert biome to NMS equivalent!");
}
}
Registrar<BiomeConditions.ConditionFactory> factory = GenesisMC.getPlugin().registry.retrieve(Registries.BIOME_CONDITION);
BiomeConditions.ConditionFactory con = factory.get(NamespacedKey.fromString(condition.getString("type")));
boolean invert = condition.getBooleanOrDefault("inverted", false);
if (con != null) {
return getPossibleInvert(invert, con.test(condition, new oshi.util.tuples.Pair<Biome, BlockPos>(CraftBiome.bukkitToMinecraft(biome), CraftLocation.toBlockPosition(blockPos))));
return getPossibleInvert(invert, con.test(condition, new oshi.util.tuples.Pair<Biome, BlockPos>(nmsBiome, CraftLocation.toBlockPosition(blockPos))));
} else {
return getPossibleInvert(invert, true); // Condition null or not found.
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -544,7 +544,7 @@ public void registerConditions() {
}));
register(new ConditionFactory(GenesisMC.apoliIdentifier("biome"), (condition, entity) -> {
if (condition.isPresent("condition")) {
return ConditionExecutor.testBiome(condition.getJsonObject("condition"), entity.getLocation().getBlock().getBiome(), entity.getLocation());
return ConditionExecutor.testBiome(condition.getJsonObject("condition"), entity.getLocation().getBlock().getBiome(), entity.getLocation(), ((CraftWorld)entity.getWorld()).getHandle());
} else { // Assumed to be trying to get biome type
String key = condition.getString("biome");
if (key.contains(":")) {
Expand Down

0 comments on commit fa78116

Please sign in to comment.