mirror of
https://github.com/PolyhedralDev/Terra.git
synced 2025-07-02 07:55:28 +00:00
fix spawners on bukkit
This commit is contained in:
parent
589cf83c38
commit
f70a83aec3
@ -23,13 +23,11 @@ import org.jetbrains.annotations.NotNull;
|
|||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import java.util.Locale;
|
|
||||||
|
|
||||||
import com.dfsek.terra.api.block.state.BlockState;
|
import com.dfsek.terra.api.block.state.BlockState;
|
||||||
import com.dfsek.terra.api.entity.EntityType;
|
import com.dfsek.terra.api.entity.EntityType;
|
||||||
import com.dfsek.terra.api.handle.WorldHandle;
|
import com.dfsek.terra.api.handle.WorldHandle;
|
||||||
|
import com.dfsek.terra.bukkit.util.BukkitUtils;
|
||||||
import com.dfsek.terra.bukkit.world.block.data.BukkitBlockState;
|
import com.dfsek.terra.bukkit.world.block.data.BukkitBlockState;
|
||||||
import com.dfsek.terra.bukkit.world.entity.BukkitEntityType;
|
|
||||||
|
|
||||||
|
|
||||||
public class BukkitWorldHandle implements WorldHandle {
|
public class BukkitWorldHandle implements WorldHandle {
|
||||||
@ -61,22 +59,6 @@ public class BukkitWorldHandle implements WorldHandle {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @NotNull EntityType getEntity(@NotNull String id) {
|
public @NotNull EntityType getEntity(@NotNull String id) {
|
||||||
if(!id.contains(":")) { //TODO: remove in 7.0
|
return BukkitUtils.getEntityType(id);
|
||||||
String newid = "minecraft:" + id.toLowerCase();
|
|
||||||
;
|
|
||||||
logger.warn(
|
|
||||||
"Translating " + id + " to " + newid + ". In 1.20.3 entity parsing was reworked" +
|
|
||||||
". You are advised to perform this rename in your config backs as this translation will be removed in the next major " +
|
|
||||||
"version of Terra.");
|
|
||||||
}
|
|
||||||
if(!id.startsWith("minecraft:")) throw new IllegalArgumentException("Invalid entity identifier " + id);
|
|
||||||
String entityID = id.toUpperCase(Locale.ROOT).substring(10);
|
|
||||||
|
|
||||||
return new BukkitEntityType(switch(entityID) {
|
|
||||||
case "END_CRYSTAL" -> org.bukkit.entity.EntityType.END_CRYSTAL;
|
|
||||||
case "ENDER_CRYSTAL" -> throw new IllegalArgumentException(
|
|
||||||
"Invalid entity identifier " + id); // make sure this issue can't happen the other way around.
|
|
||||||
default -> org.bukkit.entity.EntityType.valueOf(entityID);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,11 +2,40 @@ package com.dfsek.terra.bukkit.util;
|
|||||||
|
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.block.data.BlockData;
|
import org.bukkit.block.data.BlockData;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import java.util.Locale;
|
||||||
|
|
||||||
|
import com.dfsek.terra.api.entity.EntityType;
|
||||||
|
import com.dfsek.terra.bukkit.world.entity.BukkitEntityType;
|
||||||
|
|
||||||
|
|
||||||
public class BukkitUtils {
|
public class BukkitUtils {
|
||||||
|
private static final Logger logger = LoggerFactory.getLogger(BukkitUtils.class);
|
||||||
|
|
||||||
public static boolean isLiquid(BlockData blockState) {
|
public static boolean isLiquid(BlockData blockState) {
|
||||||
Material material = blockState.getMaterial();
|
Material material = blockState.getMaterial();
|
||||||
return material == Material.WATER || material == Material.LAVA;
|
return material == Material.WATER || material == Material.LAVA;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static EntityType getEntityType(String id) {
|
||||||
|
if(!id.contains(":")) { //TODO: remove in 7.0
|
||||||
|
String newid = "minecraft:" + id.toLowerCase();
|
||||||
|
;
|
||||||
|
logger.warn(
|
||||||
|
"Translating " + id + " to " + newid + ". In 1.20.3 entity parsing was reworked" +
|
||||||
|
". You are advised to perform this rename in your config backs as this translation will be removed in the next major " +
|
||||||
|
"version of Terra.");
|
||||||
|
}
|
||||||
|
if(!id.startsWith("minecraft:")) throw new IllegalArgumentException("Invalid entity identifier " + id);
|
||||||
|
String entityID = id.toUpperCase(Locale.ROOT).substring(10);
|
||||||
|
|
||||||
|
return new BukkitEntityType(switch(entityID) {
|
||||||
|
case "END_CRYSTAL" -> org.bukkit.entity.EntityType.END_CRYSTAL;
|
||||||
|
case "ENDER_CRYSTAL" -> throw new IllegalArgumentException(
|
||||||
|
"Invalid entity identifier " + id); // make sure this issue can't happen the other way around.
|
||||||
|
default -> org.bukkit.entity.EntityType.valueOf(entityID);
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -20,7 +20,6 @@ package com.dfsek.terra.bukkit.world;
|
|||||||
|
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.TreeType;
|
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.generator.WorldInfo;
|
import org.bukkit.generator.WorldInfo;
|
||||||
import org.bukkit.util.Vector;
|
import org.bukkit.util.Vector;
|
||||||
@ -46,27 +45,12 @@ import com.dfsek.terra.bukkit.world.block.BukkitBlockTypeAndItem;
|
|||||||
import com.dfsek.terra.bukkit.world.block.data.BukkitBlockState;
|
import com.dfsek.terra.bukkit.world.block.data.BukkitBlockState;
|
||||||
import com.dfsek.terra.bukkit.world.inventory.BukkitItemStack;
|
import com.dfsek.terra.bukkit.world.inventory.BukkitItemStack;
|
||||||
import com.dfsek.terra.bukkit.world.inventory.meta.BukkitEnchantment;
|
import com.dfsek.terra.bukkit.world.inventory.meta.BukkitEnchantment;
|
||||||
import com.dfsek.terra.transform.MapTransform;
|
|
||||||
import com.dfsek.terra.transform.TransformerImpl;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Utility class to adapt Bukkit enums to Terra enums.
|
* Utility class to adapt Bukkit enums to Terra enums.
|
||||||
*/
|
*/
|
||||||
public final class BukkitAdapter {
|
public final class BukkitAdapter {
|
||||||
public static TransformerImpl<TreeType, String> TREE_TRANSFORMER = new TransformerImpl.Builder<TreeType, String>()
|
|
||||||
.addTransform(new MapTransform<TreeType, String>()
|
|
||||||
.add(TreeType.COCOA_TREE, "JUNGLE_COCOA")
|
|
||||||
.add(TreeType.BIG_TREE, "LARGE_OAK")
|
|
||||||
.add(TreeType.TALL_REDWOOD, "LARGE_SPRUCE")
|
|
||||||
.add(TreeType.REDWOOD, "SPRUCE")
|
|
||||||
.add(TreeType.TREE, "OAK")
|
|
||||||
.add(TreeType.MEGA_REDWOOD, "MEGA_SPRUCE")
|
|
||||||
.add(TreeType.SWAMP, "SWAMP_OAK"))
|
|
||||||
.addTransform(TreeType::toString)
|
|
||||||
.build();
|
|
||||||
|
|
||||||
|
|
||||||
public static BlockState adapt(org.bukkit.block.data.BlockData data) {
|
public static BlockState adapt(org.bukkit.block.data.BlockData data) {
|
||||||
return BukkitBlockState.newInstance(data);
|
return BukkitBlockState.newInstance(data);
|
||||||
}
|
}
|
||||||
|
@ -23,6 +23,7 @@ import org.jetbrains.annotations.NotNull;
|
|||||||
import com.dfsek.terra.api.block.entity.MobSpawner;
|
import com.dfsek.terra.api.block.entity.MobSpawner;
|
||||||
import com.dfsek.terra.api.block.entity.SerialState;
|
import com.dfsek.terra.api.block.entity.SerialState;
|
||||||
import com.dfsek.terra.api.entity.EntityType;
|
import com.dfsek.terra.api.entity.EntityType;
|
||||||
|
import com.dfsek.terra.bukkit.util.BukkitUtils;
|
||||||
import com.dfsek.terra.bukkit.world.entity.BukkitEntityType;
|
import com.dfsek.terra.bukkit.world.entity.BukkitEntityType;
|
||||||
|
|
||||||
|
|
||||||
@ -115,7 +116,7 @@ public class BukkitMobSpawner extends BukkitBlockEntity implements MobSpawner {
|
|||||||
public void applyState(String state) {
|
public void applyState(String state) {
|
||||||
SerialState.parse(state).forEach((k, v) -> {
|
SerialState.parse(state).forEach((k, v) -> {
|
||||||
switch(k) {
|
switch(k) {
|
||||||
case "type" -> setSpawnedType(new BukkitEntityType(org.bukkit.entity.EntityType.valueOf(v.toUpperCase())));
|
case "type" -> setSpawnedType(BukkitUtils.getEntityType(v));
|
||||||
case "delay" -> setDelay(Integer.parseInt(v));
|
case "delay" -> setDelay(Integer.parseInt(v));
|
||||||
case "min_delay" -> setMinSpawnDelay(Integer.parseInt(v));
|
case "min_delay" -> setMinSpawnDelay(Integer.parseInt(v));
|
||||||
case "max_delay" -> setMaxSpawnDelay(Integer.parseInt(v));
|
case "max_delay" -> setMaxSpawnDelay(Integer.parseInt(v));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user