fixed tower spawning issues
This commit is contained in:
parent
5e5f36153e
commit
5ef254b75f
@ -57,7 +57,7 @@ public class Towerdefense extends StatelessGame {
|
|||||||
this.getPlayers().forEach(player -> {
|
this.getPlayers().forEach(player -> {
|
||||||
TowerdefenseRoom newRoom = new TowerdefenseRoom(player, this);
|
TowerdefenseRoom newRoom = new TowerdefenseRoom(player, this);
|
||||||
this.instances.add(newRoom);
|
this.instances.add(newRoom);
|
||||||
player.setInstance(newRoom);
|
player.setInstance(newRoom, new Pos(0, 1, 0));
|
||||||
newRoom.startWave(List.of(
|
newRoom.startWave(List.of(
|
||||||
new GroupFactory(new EnemyFactory(EntityType.VILLAGER, 2, 0.1), 1, 800)
|
new GroupFactory(new EnemyFactory(EntityType.VILLAGER, 2, 0.1), 1, 800)
|
||||||
));
|
));
|
||||||
|
@ -18,9 +18,11 @@ import net.minestom.server.event.entity.projectile.ProjectileCollideWithBlockEve
|
|||||||
import net.minestom.server.event.entity.projectile.ProjectileCollideWithEntityEvent;
|
import net.minestom.server.event.entity.projectile.ProjectileCollideWithEntityEvent;
|
||||||
import net.minestom.server.event.inventory.InventoryPreClickEvent;
|
import net.minestom.server.event.inventory.InventoryPreClickEvent;
|
||||||
import net.minestom.server.event.item.ItemDropEvent;
|
import net.minestom.server.event.item.ItemDropEvent;
|
||||||
|
import net.minestom.server.event.item.PlayerBeginItemUseEvent;
|
||||||
import net.minestom.server.event.player.*;
|
import net.minestom.server.event.player.*;
|
||||||
import net.minestom.server.instance.InstanceContainer;
|
import net.minestom.server.instance.InstanceContainer;
|
||||||
import net.minestom.server.instance.block.Block;
|
import net.minestom.server.instance.block.Block;
|
||||||
|
import net.minestom.server.item.ItemAnimation;
|
||||||
import net.minestom.server.item.ItemStack;
|
import net.minestom.server.item.ItemStack;
|
||||||
import net.minestom.server.item.Material;
|
import net.minestom.server.item.Material;
|
||||||
import net.minestom.server.timer.TaskSchedule;
|
import net.minestom.server.timer.TaskSchedule;
|
||||||
@ -52,8 +54,12 @@ public class TowerdefenseRoom extends InstanceContainer {
|
|||||||
this.player.getAttribute(Attribute.BLOCK_INTERACTION_RANGE).setBaseValue(reach);
|
this.player.getAttribute(Attribute.BLOCK_INTERACTION_RANGE).setBaseValue(reach);
|
||||||
this.player.getAttribute(Attribute.ENTITY_INTERACTION_RANGE).setBaseValue(reach);
|
this.player.getAttribute(Attribute.ENTITY_INTERACTION_RANGE).setBaseValue(reach);
|
||||||
|
|
||||||
this.player.getInventory().addItemStack(ItemStack.of(Material.SPECTRAL_ARROW).withCustomName(Component.text("Schießen", TextColor.color(255, 180, 0))));
|
this.player.getInventory().addItemStack(
|
||||||
this.player.getInventory().addItemStack(ItemStack.of(Material.BARRIER).withCustomName(Component.text("Löschen", TextColor.color(255,0,0))));
|
ItemStack.of(Material.BOW).withCustomName(Component.text("Schießen", TextColor.color(255, 180, 0)))
|
||||||
|
);
|
||||||
|
this.player.getInventory().addItemStack(
|
||||||
|
ItemStack.of(Material.BARRIER).withCustomName(Component.text("Löschen", TextColor.color(255,0,0)))
|
||||||
|
);
|
||||||
this.game.getAvailableTowers().forEach((material, tower) -> {
|
this.game.getAvailableTowers().forEach((material, tower) -> {
|
||||||
int price = this.game.getPrices().get(tower);
|
int price = this.game.getPrices().get(tower);
|
||||||
this.player.getInventory().addItemStack(ItemStack.of(material).withMaxStackSize(price).withAmount(price));
|
this.player.getInventory().addItemStack(ItemStack.of(material).withMaxStackSize(price).withAmount(price));
|
||||||
@ -91,12 +97,15 @@ public class TowerdefenseRoom extends InstanceContainer {
|
|||||||
.addListener(PlayerHandAnimationEvent.class, event -> this.useItem())
|
.addListener(PlayerHandAnimationEvent.class, event -> this.useItem())
|
||||||
.addListener(ItemDropEvent.class, CommonEventHandles::cancel)
|
.addListener(ItemDropEvent.class, CommonEventHandles::cancel)
|
||||||
.addListener(InventoryPreClickEvent.class, CommonEventHandles::cancel)
|
.addListener(InventoryPreClickEvent.class, CommonEventHandles::cancel)
|
||||||
.addListener(PlayerSwapItemEvent.class, CommonEventHandles::cancel);
|
.addListener(PlayerSwapItemEvent.class, CommonEventHandles::cancel)
|
||||||
|
.addListener(PlayerBeginItemUseEvent.class, event -> {
|
||||||
|
if(event.getAnimation().equals(ItemAnimation.BOW)) event.setCancelled(true);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private void useItem() {
|
private void useItem() {
|
||||||
Material itemInHand = this.player.getItemInMainHand().material();
|
Material itemInHand = this.player.getItemInMainHand().material();
|
||||||
if(itemInHand.equals(Material.SPECTRAL_ARROW)) {
|
if(itemInHand.equals(Material.BOW)) {
|
||||||
this.playerAttack();
|
this.playerAttack();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -117,7 +126,7 @@ public class TowerdefenseRoom extends InstanceContainer {
|
|||||||
projectile.setAerodynamics(new Aerodynamics(0, 1, 0));
|
projectile.setAerodynamics(new Aerodynamics(0, 1, 0));
|
||||||
|
|
||||||
Vec projectileVelocity = p.getPosition().direction().normalize().mul(20);
|
Vec projectileVelocity = p.getPosition().direction().normalize().mul(20);
|
||||||
projectile.setVelocity(projectileVelocity);
|
projectile.setVelocity(projectileVelocity.add(this.player.getVelocity()));
|
||||||
projectile.scheduleRemove(Duration.ofSeconds(5));
|
projectile.scheduleRemove(Duration.ofSeconds(5));
|
||||||
projectile.setInstance(this, p.getPosition().add(0, p.getEyeHeight(), 0));
|
projectile.setInstance(this, p.getPosition().add(0, p.getEyeHeight(), 0));
|
||||||
projectile.eventNode()
|
projectile.eventNode()
|
||||||
@ -136,7 +145,7 @@ public class TowerdefenseRoom extends InstanceContainer {
|
|||||||
this.player.setLevel(this.money);
|
this.player.setLevel(this.money);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void placeTower() {
|
private synchronized void placeTower() {
|
||||||
if(!this.canPlaceActiveTower()) {
|
if(!this.canPlaceActiveTower()) {
|
||||||
if(this.cursor.isCursorActive() && !this.enoughMoneyForActiveTower()) {
|
if(this.cursor.isCursorActive() && !this.enoughMoneyForActiveTower()) {
|
||||||
this.player.sendActionBar(Component.text("Nicht genug Geld!", TextColor.color(255,0,0)));
|
this.player.sendActionBar(Component.text("Nicht genug Geld!", TextColor.color(255,0,0)));
|
||||||
@ -154,10 +163,12 @@ public class TowerdefenseRoom extends InstanceContainer {
|
|||||||
.newInstance();
|
.newInstance();
|
||||||
this.setBlock(this.cursor.getTargetBlockPosition(), Block.BLUE_WOOL);
|
this.setBlock(this.cursor.getTargetBlockPosition(), Block.BLUE_WOOL);
|
||||||
tower.setInstance(this, this.cursor.getPosition());
|
tower.setInstance(this, this.cursor.getPosition());
|
||||||
|
System.out.println("PLACE");
|
||||||
this.towers.add(tower);
|
this.towers.add(tower);
|
||||||
this.addMoney(-this.game.getPrices().get(tower.getClass()));
|
this.addMoney(-this.game.getPrices().get(tower.getClass()));
|
||||||
} catch (Exception ignored) {
|
} catch (Exception ignored) {
|
||||||
}
|
}
|
||||||
|
this.cursor.updateCursorPosition(this.player);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void removeTower() {
|
private void removeTower() {
|
||||||
@ -201,15 +212,16 @@ public class TowerdefenseRoom extends InstanceContainer {
|
|||||||
this.changeEnemyGoal(enemy, 0);
|
this.changeEnemyGoal(enemy, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void changeEnemyGoal(EntityCreature enemy, int positionIndex) {
|
private synchronized void changeEnemyGoal(EntityCreature enemy, int positionIndex) {
|
||||||
if(positionIndex == this.game.getMazePath().size()-1) {
|
if(positionIndex == this.game.getMazePath().size()-1) {
|
||||||
this.enemies.remove(enemy);
|
this.enemies.remove(enemy);
|
||||||
enemy.remove();
|
enemy.remove();
|
||||||
float damage = (float) Math.ceil(enemy.getHealth()/10);
|
float damage = (float) Math.ceil(enemy.getHealth()/10);
|
||||||
if(this.player.getHealth() - damage <= 0) {
|
if(this.player.getHealth() - damage <= 0) {
|
||||||
this.player.setInstance(this.game);
|
|
||||||
this.getEnemies().forEach(Entity::remove);
|
this.getEnemies().forEach(Entity::remove);
|
||||||
this.towers.forEach(Entity::remove);
|
this.towers.forEach(Entity::remove);
|
||||||
|
this.player.setInstance(this.game).thenRun(() -> MinecraftServer.getInstanceManager().unregisterInstance(this));
|
||||||
|
this.player.heal();
|
||||||
this.game.getScore().insertResult(this.player);
|
this.game.getScore().insertResult(this.player);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user