From d0a24f7041298bcb072889088747917dbe83a4ff Mon Sep 17 00:00:00 2001 From: dfsek Date: Tue, 5 Jan 2021 01:23:54 -0700 Subject: [PATCH] add spawner state info --- .../world/block/state/BukkitBlockState.java | 2 + .../world/block/state/BukkitMobSpawner.java | 128 ++++++++++++++++++ 2 files changed, 130 insertions(+) create mode 100644 platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/world/block/state/BukkitMobSpawner.java diff --git a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/world/block/state/BukkitBlockState.java b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/world/block/state/BukkitBlockState.java index bff9d1a67..c96c520de 100644 --- a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/world/block/state/BukkitBlockState.java +++ b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/world/block/state/BukkitBlockState.java @@ -6,6 +6,7 @@ import com.dfsek.terra.api.platform.block.state.BlockState; import com.dfsek.terra.bukkit.world.block.BukkitBlock; import com.dfsek.terra.bukkit.world.block.data.BukkitBlockData; import org.bukkit.block.Container; +import org.bukkit.block.CreatureSpawner; import org.bukkit.block.Sign; public class BukkitBlockState implements BlockState { @@ -18,6 +19,7 @@ public class BukkitBlockState implements BlockState { public static BukkitBlockState newInstance(org.bukkit.block.BlockState block) { if(block instanceof Container) return new BukkitContainer((Container) block); if(block instanceof Sign) return new BukkitSign((Sign) block); + if(block instanceof CreatureSpawner) return new BukkitMobSpawner((CreatureSpawner) block); return new BukkitBlockState(block); } diff --git a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/world/block/state/BukkitMobSpawner.java b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/world/block/state/BukkitMobSpawner.java new file mode 100644 index 000000000..b3a4e64aa --- /dev/null +++ b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/world/block/state/BukkitMobSpawner.java @@ -0,0 +1,128 @@ +package com.dfsek.terra.bukkit.world.block.state; + +import com.dfsek.terra.api.platform.block.state.MobSpawner; +import com.dfsek.terra.api.platform.block.state.SerialState; +import com.dfsek.terra.api.platform.world.entity.EntityType; +import com.dfsek.terra.bukkit.world.entity.BukkitEntityType; +import org.bukkit.block.CreatureSpawner; +import org.jetbrains.annotations.NotNull; + +public class BukkitMobSpawner extends BukkitBlockState implements MobSpawner { + protected BukkitMobSpawner(CreatureSpawner block) { + super(block); + } + + @Override + public EntityType getSpawnedType() { + return new BukkitEntityType(((CreatureSpawner) getHandle()).getSpawnedType()); + } + + @Override + public void setSpawnedType(@NotNull EntityType creatureType) { + ((CreatureSpawner) getHandle()).setSpawnedType(((BukkitEntityType) creatureType).getHandle()); + } + + @Override + public int getDelay() { + return ((CreatureSpawner) getHandle()).getDelay(); + } + + @Override + public void setDelay(int delay) { + ((CreatureSpawner) getHandle()).setDelay(delay); + } + + @Override + public int getMinSpawnDelay() { + return ((CreatureSpawner) getHandle()).getMinSpawnDelay(); + } + + @Override + public void setMinSpawnDelay(int delay) { + ((CreatureSpawner) getHandle()).setMinSpawnDelay(delay); + } + + @Override + public int getMaxSpawnDelay() { + return ((CreatureSpawner) getHandle()).getMaxSpawnDelay(); + } + + @Override + public void setMaxSpawnDelay(int delay) { + ((CreatureSpawner) getHandle()).setMaxSpawnDelay(delay); + } + + @Override + public int getSpawnCount() { + return ((CreatureSpawner) getHandle()).getSpawnCount(); + } + + @Override + public void setSpawnCount(int spawnCount) { + ((CreatureSpawner) getHandle()).setSpawnCount(spawnCount); + } + + @Override + public int getMaxNearbyEntities() { + return ((CreatureSpawner) getHandle()).getMaxNearbyEntities(); + } + + @Override + public void setMaxNearbyEntities(int maxNearbyEntities) { + ((CreatureSpawner) getHandle()).setMaxNearbyEntities(maxNearbyEntities); + } + + @Override + public int getRequiredPlayerRange() { + return ((CreatureSpawner) getHandle()).getRequiredPlayerRange(); + } + + @Override + public void setRequiredPlayerRange(int requiredPlayerRange) { + ((CreatureSpawner) getHandle()).setRequiredPlayerRange(requiredPlayerRange); + } + + @Override + public int getSpawnRange() { + return ((CreatureSpawner) getHandle()).getSpawnRange(); + } + + @Override + public void setSpawnRange(int spawnRange) { + ((CreatureSpawner) getHandle()).setSpawnRange(spawnRange); + } + + @Override + public void applyState(String state) { + SerialState.parse(state).forEach((k, v) -> { + switch(k) { + case "type": + setSpawnedType(new BukkitEntityType(org.bukkit.entity.EntityType.valueOf(v))); + return; + case "delay": + setDelay(Integer.parseInt(v)); + return; + case "min_delay": + setMinSpawnDelay(Integer.parseInt(v)); + return; + case "max_delay": + setMaxSpawnDelay(Integer.parseInt(v)); + return; + case "count": + setSpawnCount(Integer.parseInt(v)); + return; + case "range": + setSpawnRange(Integer.parseInt(v)); + return; + case "max_nearby": + setMaxNearbyEntities(Integer.parseInt(v)); + return; + case "activate": + setRequiredPlayerRange(Integer.parseInt(v)); + return; + default: + throw new IllegalArgumentException("Invalid property: " + k); + } + }); + } +}