start of the refactoring
This commit is contained in:
@@ -10,8 +10,11 @@ repositories {
|
|||||||
name = "papermc"
|
name = "papermc"
|
||||||
url = uri("https://repo.papermc.io/repository/maven-public/")
|
url = uri("https://repo.papermc.io/repository/maven-public/")
|
||||||
}
|
}
|
||||||
|
mavenCentral()
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
compileOnly("io.papermc.paper:paper-api:1.21.4-R0.1-SNAPSHOT")
|
compileOnly("io.papermc.paper:paper-api:1.21.4-R0.1-SNAPSHOT")
|
||||||
|
compileOnly("org.projectlombok:lombok:1.18.42")
|
||||||
|
annotationProcessor("org.projectlombok:lombok:1.18.42")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,28 +1,23 @@
|
|||||||
package fyi.tiko.battletowers;
|
package fyi.tiko.battletowers;
|
||||||
|
|
||||||
|
import fyi.tiko.battletowers.boss.TowerBossDeathListener;
|
||||||
|
import fyi.tiko.battletowers.generation.TowerPopulator;
|
||||||
|
import fyi.tiko.battletowers.loot.TowerChestListener;
|
||||||
|
import fyi.tiko.battletowers.loot.TowerLootManager;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.experimental.Accessors;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.NamespacedKey;
|
import org.bukkit.NamespacedKey;
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@Accessors(fluent = true)
|
||||||
public final class BattleTowersPlugin extends JavaPlugin {
|
public final class BattleTowersPlugin extends JavaPlugin {
|
||||||
|
@Getter
|
||||||
private static BattleTowersPlugin instance;
|
private static BattleTowersPlugin instance;
|
||||||
|
|
||||||
public static BattleTowersPlugin instance() {
|
|
||||||
return instance;
|
|
||||||
}
|
|
||||||
|
|
||||||
private TowerLootManager lootManager;
|
private TowerLootManager lootManager;
|
||||||
private NamespacedKey towerKey;
|
private NamespacedKey towerKey;
|
||||||
|
|
||||||
public NamespacedKey towerKey() {
|
|
||||||
return towerKey;
|
|
||||||
}
|
|
||||||
|
|
||||||
public TowerLootManager getLootManager() {
|
|
||||||
return lootManager;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onEnable() {
|
public void onEnable() {
|
||||||
instance = this;
|
instance = this;
|
||||||
@@ -32,9 +27,8 @@ public final class BattleTowersPlugin extends JavaPlugin {
|
|||||||
towerKey = new NamespacedKey(this, "tower_location");
|
towerKey = new NamespacedKey(this, "tower_location");
|
||||||
lootManager = new TowerLootManager();
|
lootManager = new TowerLootManager();
|
||||||
|
|
||||||
Bukkit.getWorlds().forEach(world -> {
|
// todo: entweder als world-populator oder direkt im event maybe?
|
||||||
world.getPopulators().add(new TowerPopulator());
|
Bukkit.getWorlds().forEach(world -> world.getPopulators().add(new TowerPopulator()));
|
||||||
});
|
|
||||||
|
|
||||||
getServer().getPluginManager().registerEvents(
|
getServer().getPluginManager().registerEvents(
|
||||||
new TowerChestListener(), this
|
new TowerChestListener(), this
|
||||||
|
|||||||
@@ -1,24 +0,0 @@
|
|||||||
package fyi.tiko.battletowers;
|
|
||||||
|
|
||||||
import org.bukkit.Chunk;
|
|
||||||
import org.bukkit.World;
|
|
||||||
import org.bukkit.generator.BlockPopulator;
|
|
||||||
|
|
||||||
import java.util.Random;
|
|
||||||
|
|
||||||
public class TowerPopulator extends BlockPopulator {
|
|
||||||
|
|
||||||
private final TowerGenerator generator = new TowerGenerator();
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void populate(World world, Random random, Chunk chunk) {
|
|
||||||
|
|
||||||
// Chance pro Chunk (erstmal test)
|
|
||||||
if (random.nextInt(250) != 0) return;
|
|
||||||
|
|
||||||
int x = chunk.getX() * 16 + 8;
|
|
||||||
int z = chunk.getZ() * 16 + 8;
|
|
||||||
|
|
||||||
generator.trySpawnTower(world, random, x, z);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package fyi.tiko.battletowers;
|
package fyi.tiko.battletowers.boss;
|
||||||
|
|
||||||
import org.bukkit.entity.IronGolem;
|
import org.bukkit.entity.IronGolem;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
@@ -1,17 +1,17 @@
|
|||||||
package fyi.tiko.battletowers;
|
package fyi.tiko.battletowers.boss;
|
||||||
|
|
||||||
|
import static fyi.tiko.battletowers.BattleTowersPlugin.instance;
|
||||||
|
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.attribute.Attribute;
|
import org.bukkit.attribute.Attribute;
|
||||||
import org.bukkit.entity.IronGolem;
|
import org.bukkit.entity.IronGolem;
|
||||||
import org.bukkit.persistence.PersistentDataType;
|
import org.bukkit.persistence.PersistentDataType;
|
||||||
|
|
||||||
import static fyi.tiko.battletowers.BattleTowersPlugin.instance;
|
|
||||||
|
|
||||||
public class TowerBossSpawner {
|
public class TowerBossSpawner {
|
||||||
|
|
||||||
public static void spawnDormantBoss(org.bukkit.World world,
|
public static void spawnDormantBoss(org.bukkit.World world,
|
||||||
Location loc,
|
Location loc,
|
||||||
int towerX, int towerY, int towerZ) {
|
int towerX, int towerY, int towerZ) {
|
||||||
|
|
||||||
IronGolem golem = world.spawn(loc, IronGolem.class);
|
IronGolem golem = world.spawn(loc, IronGolem.class);
|
||||||
|
|
||||||
@@ -30,21 +30,23 @@ public class TowerBossSpawner {
|
|||||||
|
|
||||||
// Save tower coords inside entity
|
// Save tower coords inside entity
|
||||||
golem.getPersistentDataContainer().set(
|
golem.getPersistentDataContainer().set(
|
||||||
instance().towerKey(),
|
instance().towerKey(),
|
||||||
PersistentDataType.STRING,
|
PersistentDataType.STRING,
|
||||||
towerX + ";" + towerY + ";" + towerZ
|
towerX + ";" + towerY + ";" + towerZ
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void wakeUp(IronGolem golem) {
|
public static void wakeUp(IronGolem golem) {
|
||||||
|
|
||||||
if (golem.hasAI()) return;
|
if (golem.hasAI()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
golem.setAI(true);
|
golem.setAI(true);
|
||||||
golem.getWorld().playSound(
|
golem.getWorld().playSound(
|
||||||
golem.getLocation(),
|
golem.getLocation(),
|
||||||
"entity.iron_golem.repair",
|
"entity.iron_golem.repair",
|
||||||
3f, 0.6f
|
3f, 0.6f
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,25 +1,29 @@
|
|||||||
package fyi.tiko.battletowers;
|
package fyi.tiko.battletowers.boss;
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
import static fyi.tiko.battletowers.BattleTowersPlugin.instance;
|
||||||
|
|
||||||
|
import fyi.tiko.battletowers.data.Towers;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
import org.bukkit.scheduler.BukkitRunnable;
|
||||||
|
|
||||||
import static fyi.tiko.battletowers.BattleTowersPlugin.instance;
|
|
||||||
|
|
||||||
public class TowerDestroyer {
|
public class TowerDestroyer {
|
||||||
|
|
||||||
// TODO: die einzelnen floors werden nicht kaputt gemacht, sondern nur ganz oben + nachricht nur an spielern in reichweite von X blöcken...
|
// TODO: die einzelnen floors werden nicht kaputt gemacht, sondern nur ganz oben + nachricht nur an spielern in reichweite von X blöcken...
|
||||||
public static void startCollapse(Location center, Player killer) {
|
public static void startCollapse(Location center, Player killer) {
|
||||||
|
|
||||||
World world = center.getWorld();
|
World world = center.getWorld();
|
||||||
|
|
||||||
Bukkit.broadcastMessage("§cA Battletower's Guardian has fallen! The Tower will collapse...");
|
world.getNearbyEntities(center, 15, 15, 15).forEach(entity -> {
|
||||||
|
if (!(entity instanceof Player player)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
player.sendRichMessage("<red>A Battletower's Guardian has fallen! The tower will collapse...");
|
||||||
|
});
|
||||||
|
|
||||||
new BukkitRunnable() {
|
new BukkitRunnable() {
|
||||||
|
int floor = Towers.FLOOR_AMOUNT_PER_TOWER;
|
||||||
int floor = 6;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
@@ -29,9 +33,8 @@ public class TowerDestroyer {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
double y = center.getY() - (floor * 7);
|
double y = center.getY() - (floor * Towers.FLOOR_HEIGHT);
|
||||||
|
world.createExplosion(center.getX(), y, center.getZ(), 10f);
|
||||||
world.createExplosion(center, 10f);
|
|
||||||
floor--;
|
floor--;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
package fyi.tiko.battletowers.data;
|
||||||
|
|
||||||
|
public class TowerRegistry {
|
||||||
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package fyi.tiko.battletowers;
|
package fyi.tiko.battletowers.data;
|
||||||
|
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
|
|
||||||
22
src/main/java/fyi/tiko/battletowers/data/Towers.java
Normal file
22
src/main/java/fyi/tiko/battletowers/data/Towers.java
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
package fyi.tiko.battletowers.data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents constant values that are used across the plugin.
|
||||||
|
*/
|
||||||
|
public final class Towers {
|
||||||
|
private Towers() {
|
||||||
|
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* The height a floor should receive.
|
||||||
|
*/
|
||||||
|
public static final int FLOOR_HEIGHT = 7;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The amount of floors a battle tower should have, excluding the boss floor.
|
||||||
|
*/
|
||||||
|
public static final int FLOOR_AMOUNT_PER_TOWER = 6;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,5 +1,10 @@
|
|||||||
package fyi.tiko.battletowers;
|
package fyi.tiko.battletowers.generation;
|
||||||
|
|
||||||
|
import fyi.tiko.battletowers.BattleTowersPlugin;
|
||||||
|
import fyi.tiko.battletowers.data.TowerType;
|
||||||
|
import fyi.tiko.battletowers.boss.TowerBossSpawner;
|
||||||
|
import fyi.tiko.battletowers.loot.TowerLootManager;
|
||||||
|
import fyi.tiko.battletowers.loot.TowerStageItemManager;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
@@ -91,9 +96,10 @@ public class TowerGenerator {
|
|||||||
return y;
|
return y;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ✅ 1:1 Block Placement Core
|
// todo: alles weg von World#setBlockData() stattdessen: LimitedRegion#setBlockData()
|
||||||
public void generate(World world, int ix, int jy, int kz, TowerType towerChosen, boolean underground) {
|
|
||||||
|
|
||||||
|
// 1:1 Block Placement Core
|
||||||
|
public void generate(World world, int ix, int jy, int kz, TowerType towerChosen, boolean underground) {
|
||||||
Material towerWallBlock = towerChosen.wall();
|
Material towerWallBlock = towerChosen.wall();
|
||||||
Material towerLightBlock = towerChosen.light();
|
Material towerLightBlock = towerChosen.light();
|
||||||
Material towerFloorBlock = towerChosen.floor();
|
Material towerFloorBlock = towerChosen.floor();
|
||||||
@@ -384,7 +390,7 @@ public class TowerGenerator {
|
|||||||
boolean underground,
|
boolean underground,
|
||||||
boolean topFloor
|
boolean topFloor
|
||||||
) {
|
) {
|
||||||
TowerLootManager loot = BattleTowersPlugin.instance().getLootManager();
|
TowerLootManager loot = BattleTowersPlugin.instance().lootManager();
|
||||||
TowerStageItemManager floorChestManager;
|
TowerStageItemManager floorChestManager;
|
||||||
|
|
||||||
// 1. Loot-Logik (Original Forge Style)
|
// 1. Loot-Logik (Original Forge Style)
|
||||||
@@ -0,0 +1,53 @@
|
|||||||
|
package fyi.tiko.battletowers.generation;
|
||||||
|
|
||||||
|
import java.util.Random;
|
||||||
|
import org.bukkit.World;
|
||||||
|
import org.bukkit.generator.BlockPopulator;
|
||||||
|
import org.bukkit.generator.LimitedRegion;
|
||||||
|
import org.bukkit.generator.WorldInfo;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
public class TowerPopulator extends BlockPopulator {
|
||||||
|
|
||||||
|
private final TowerGenerator generator = new TowerGenerator();
|
||||||
|
|
||||||
|
/*
|
||||||
|
@Override
|
||||||
|
public void populate(@NotNull World world, Random random, @NotNull Chunk chunk) {
|
||||||
|
|
||||||
|
// Chance pro Chunk (erstmal test)
|
||||||
|
if (random.nextInt(250) != 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
int x = chunk.getX() * 16 + 8;
|
||||||
|
int z = chunk.getZ() * 16 + 8;
|
||||||
|
|
||||||
|
generator.trySpawnTower(world, random, x, z);
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void populate(
|
||||||
|
@NotNull WorldInfo worldInfo,
|
||||||
|
@NotNull Random random,
|
||||||
|
int chunkX,
|
||||||
|
int chunkZ,
|
||||||
|
@NotNull LimitedRegion limitedRegion
|
||||||
|
) {
|
||||||
|
// Chance pro Chunk (1/250)
|
||||||
|
if (random.nextInt(250) != 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Chunk-Koordinaten -> Block-Koordinaten (Chunk-Mitte)
|
||||||
|
int x = chunkX * 16 + 8;
|
||||||
|
int z = chunkZ * 16 + 8;
|
||||||
|
|
||||||
|
// Welt aus Region holen
|
||||||
|
World world = limitedRegion.getWorld();
|
||||||
|
|
||||||
|
// Tower spawnen
|
||||||
|
generator.trySpawnTower(world, random, x, z);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
package fyi.tiko.battletowers;
|
package fyi.tiko.battletowers.loot;
|
||||||
|
|
||||||
|
import fyi.tiko.battletowers.boss.TowerBossSpawner;
|
||||||
import org.bukkit.entity.IronGolem;
|
import org.bukkit.entity.IronGolem;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
@@ -1,7 +1,6 @@
|
|||||||
package fyi.tiko.battletowers;
|
package fyi.tiko.battletowers.loot;
|
||||||
|
|
||||||
import fyi.tiko.battletowers.BattleTowersPlugin;
|
import fyi.tiko.battletowers.BattleTowersPlugin;
|
||||||
|
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
|
|
||||||
public class TowerLootManager {
|
public class TowerLootManager {
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package fyi.tiko.battletowers;
|
package fyi.tiko.battletowers.loot;
|
||||||
|
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
Reference in New Issue
Block a user