First, initial commit of the revamp. Currently using old legacy code-base, trying to rebase from that.
This commit is contained in:
1
.idea/gradle.xml
generated
1
.idea/gradle.xml
generated
@@ -1,5 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<project version="4">
|
<project version="4">
|
||||||
|
<component name="GradleMigrationSettings" migrationVersion="1" />
|
||||||
<component name="GradleSettings">
|
<component name="GradleSettings">
|
||||||
<option name="linkedExternalProjectsSettings">
|
<option name="linkedExternalProjectsSettings">
|
||||||
<GradleProjectSettings>
|
<GradleProjectSettings>
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ public class TowerBossDeathListener implements Listener {
|
|||||||
@EventHandler
|
@EventHandler
|
||||||
public void onBossDeath(final EntityDeathEvent event) {
|
public void onBossDeath(final EntityDeathEvent event) {
|
||||||
|
|
||||||
if (!(event.getEntity() instanceof IronGolem golem)) {
|
if (!(event.getEntity() instanceof final IronGolem golem)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -30,7 +30,10 @@ public class TowerBossDeathListener implements Listener {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var deepTower = data.split(";");
|
||||||
|
boolean underground = Boolean.parseBoolean(deepTower[3]);
|
||||||
|
|
||||||
// Tower Collapse Start
|
// Tower Collapse Start
|
||||||
TowerDestroyer.startCollapse(golem.getLocation(), event.getEntity().getKiller());
|
TowerDestroyer.startCollapse(golem.getLocation(), event.getEntity().getKiller(), underground);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,18 +1,22 @@
|
|||||||
package fyi.tiko.battletowers.boss;
|
package fyi.tiko.battletowers.boss;
|
||||||
|
|
||||||
import static fyi.tiko.battletowers.BattleTowersPlugin.instance;
|
import fyi.tiko.battletowers.BattleTowersPlugin;
|
||||||
|
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.World;
|
||||||
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;
|
||||||
|
|
||||||
public class TowerBossSpawner {
|
public class TowerBossSpawner {
|
||||||
|
|
||||||
public static void spawnDormantBoss(org.bukkit.World world,
|
public static void spawnDormantBoss(
|
||||||
|
World world,
|
||||||
Location loc,
|
Location loc,
|
||||||
int towerX, int towerY, int towerZ) {
|
int towerX,
|
||||||
|
int towerY,
|
||||||
|
int towerZ,
|
||||||
|
boolean underground
|
||||||
|
) {
|
||||||
IronGolem golem = world.spawn(loc, IronGolem.class);
|
IronGolem golem = world.spawn(loc, IronGolem.class);
|
||||||
|
|
||||||
// ===== Boss Stats like Forge =====
|
// ===== Boss Stats like Forge =====
|
||||||
@@ -30,9 +34,9 @@ public class TowerBossSpawner {
|
|||||||
|
|
||||||
// Save tower coords inside entity
|
// Save tower coords inside entity
|
||||||
golem.getPersistentDataContainer().set(
|
golem.getPersistentDataContainer().set(
|
||||||
instance().towerKey(),
|
BattleTowersPlugin.instance().towerKey(),
|
||||||
PersistentDataType.STRING,
|
PersistentDataType.STRING,
|
||||||
towerX + ";" + towerY + ";" + towerZ
|
towerX + ";" + towerY + ";" + towerZ + ";" + underground
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
package fyi.tiko.battletowers.boss;
|
package fyi.tiko.battletowers.boss;
|
||||||
|
|
||||||
import static fyi.tiko.battletowers.BattleTowersPlugin.instance;
|
import fyi.tiko.battletowers.BattleTowersPlugin;
|
||||||
|
|
||||||
import fyi.tiko.battletowers.data.Towers;
|
import fyi.tiko.battletowers.data.Towers;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
@@ -11,7 +10,7 @@ import org.bukkit.scheduler.BukkitRunnable;
|
|||||||
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, boolean deep) {
|
||||||
World world = center.getWorld();
|
World world = center.getWorld();
|
||||||
|
|
||||||
world.getNearbyEntities(center, 15, 15, 15).forEach(entity -> {
|
world.getNearbyEntities(center, 15, 15, 15).forEach(entity -> {
|
||||||
@@ -33,11 +32,11 @@ public class TowerDestroyer {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
double y = center.getY() - (floor * Towers.FLOOR_HEIGHT);
|
double y = !deep ? (center.getY() - (floor * Towers.FLOOR_HEIGHT)) : center.getY() + (floor * Towers.FLOOR_HEIGHT);
|
||||||
world.createExplosion(center.getX(), y, center.getZ(), 10f);
|
world.createExplosion(center.getX(), y, center.getZ(), 10f);
|
||||||
floor--;
|
floor--;
|
||||||
}
|
}
|
||||||
|
|
||||||
}.runTaskTimer(instance(), 20 * 15, 20 * 5);
|
}.runTaskTimer(BattleTowersPlugin.instance(), 20 * 15, 20 * 5);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
package fyi.tiko.battletowers.generation;
|
package fyi.tiko.battletowers.generation;
|
||||||
|
|
||||||
import fyi.tiko.battletowers.BattleTowersPlugin;
|
import fyi.tiko.battletowers.BattleTowersPlugin;
|
||||||
import fyi.tiko.battletowers.data.TowerType;
|
|
||||||
import fyi.tiko.battletowers.boss.TowerBossSpawner;
|
import fyi.tiko.battletowers.boss.TowerBossSpawner;
|
||||||
|
import fyi.tiko.battletowers.data.TowerType;
|
||||||
import fyi.tiko.battletowers.loot.TowerLootManager;
|
import fyi.tiko.battletowers.loot.TowerLootManager;
|
||||||
import fyi.tiko.battletowers.loot.TowerStageItemManager;
|
import fyi.tiko.battletowers.loot.TowerStageItemManager;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
@@ -334,7 +334,7 @@ public class TowerGenerator {
|
|||||||
// ===== TOP FLOOR → BOSS GOLEM =====
|
// ===== TOP FLOOR → BOSS GOLEM =====
|
||||||
TowerBossSpawner.spawnDormantBoss(world,
|
TowerBossSpawner.spawnDormantBoss(world,
|
||||||
new Location(world, ix + 0.5, builderHeight + 6, kz + 0.5),
|
new Location(world, ix + 0.5, builderHeight + 6, kz + 0.5),
|
||||||
ix, builderHeight + 6, kz);
|
ix, builderHeight + 6, kz, underground);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
@@ -354,7 +354,6 @@ public class TowerGenerator {
|
|||||||
// oder nutzen einfach deine Logik weiter, aber rufen es sicher auf.
|
// oder nutzen einfach deine Logik weiter, aber rufen es sicher auf.
|
||||||
placeFloorChests(world, ix, builderHeight, kz, floor, underground, topFloor);
|
placeFloorChests(world, ix, builderHeight, kz, floor, underground, topFloor);
|
||||||
|
|
||||||
|
|
||||||
// ============================
|
// ============================
|
||||||
// CHEST PETAL (PODEST) - WIEDER EINGEFÜGT
|
// CHEST PETAL (PODEST) - WIEDER EINGEFÜGT
|
||||||
// ============================
|
// ============================
|
||||||
@@ -446,18 +445,24 @@ public class TowerGenerator {
|
|||||||
boolean underground) {
|
boolean underground) {
|
||||||
|
|
||||||
var state = world.getBlockAt(x, y, z).getState();
|
var state = world.getBlockAt(x, y, z).getState();
|
||||||
if (!(state instanceof org.bukkit.block.Chest chest)) return;
|
if (!(state instanceof org.bukkit.block.Chest chest)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
int attempts = BattleTowersPlugin.instance()
|
int attempts = BattleTowersPlugin.instance()
|
||||||
.getConfig()
|
.getConfig()
|
||||||
.getInt("tower.itemGenerateAttemptsPerFloor");
|
.getInt("tower.itemGenerateAttemptsPerFloor");
|
||||||
|
|
||||||
if (underground) attempts *= 2;
|
if (underground) {
|
||||||
|
attempts *= 2;
|
||||||
|
}
|
||||||
|
|
||||||
for (int i = 0; i < attempts; i++) {
|
for (int i = 0; i < attempts; i++) {
|
||||||
|
|
||||||
ItemStack item = manager.getStageItem(random);
|
ItemStack item = manager.getStageItem(random);
|
||||||
if (item == null) continue;
|
if (item == null) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
chest.getInventory().setItem(
|
chest.getInventory().setItem(
|
||||||
random.nextInt(chest.getInventory().getSize()),
|
random.nextInt(chest.getInventory().getSize()),
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ import org.bukkit.generator.WorldInfo;
|
|||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
public class TowerPopulator extends BlockPopulator {
|
public class TowerPopulator extends BlockPopulator {
|
||||||
|
|
||||||
private final TowerGenerator generator = new TowerGenerator();
|
private final TowerGenerator generator = new TowerGenerator();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -35,19 +34,23 @@ public class TowerPopulator extends BlockPopulator {
|
|||||||
int chunkZ,
|
int chunkZ,
|
||||||
@NotNull LimitedRegion limitedRegion
|
@NotNull LimitedRegion limitedRegion
|
||||||
) {
|
) {
|
||||||
// Chance pro Chunk (1/250)
|
// 1. Chance prüfen
|
||||||
if (random.nextInt(250) != 0) {
|
if (random.nextInt(250) != 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Chunk-Koordinaten -> Block-Koordinaten (Chunk-Mitte)
|
// 2. Wir nutzen die Mitte des Chunks
|
||||||
int x = chunkX * 16 + 8;
|
int blockX = (chunkX << 4) + 8;
|
||||||
int z = chunkZ * 16 + 8;
|
int blockZ = (chunkZ << 4) + 8;
|
||||||
|
|
||||||
// Welt aus Region holen
|
// 3. WICHTIG: Prüfen, ob der gesamte Tower-Bereich (Radius 8) in der Region ist
|
||||||
World world = limitedRegion.getWorld();
|
// LimitedRegion deckt meist 3x3 Chunks ab, aber sicher ist sicher:
|
||||||
|
if (!limitedRegion.isInRegion(blockX + 7, 64, blockZ + 7) ||
|
||||||
|
!limitedRegion.isInRegion(blockX - 7, 64, blockZ - 7)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// Tower spawnen
|
// 4. Nur noch die Region und World Info übergeben, nicht die ganze World wenn möglich
|
||||||
generator.trySpawnTower(world, random, x, z);
|
generator.trySpawnTower(limitedRegion, limitedRegion.getWorld(), random, blockX, blockZ);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user