SteamWar/BauSystem2.0
Archiviert
12
0

Add sand shield printing tracking

Signed-off-by: yoyosource <yoyosource@nidido.de>
Dieser Commit ist enthalten in:
yoyosource 2023-04-19 13:38:00 +02:00
Ursprung f991992528
Commit 3786f1e2bb
2 geänderte Dateien mit 49 neuen und 6 gelöschten Zeilen

Datei anzeigen

@ -25,18 +25,27 @@ import de.steamwar.bausystem.utils.bossbar.BauSystemBossbar;
import de.steamwar.bausystem.utils.bossbar.BossBarService; import de.steamwar.bausystem.utils.bossbar.BossBarService;
import de.steamwar.bausystem.utils.bossbar.RegionedBossbar; import de.steamwar.bausystem.utils.bossbar.RegionedBossbar;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.World; import org.bukkit.World;
import org.bukkit.block.Block; import org.bukkit.block.Block;
import org.bukkit.block.BlockFace; import org.bukkit.block.BlockFace;
import org.bukkit.block.data.BlockData; import org.bukkit.block.data.BlockData;
import org.bukkit.boss.BarColor; import org.bukkit.boss.BarColor;
import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.HandlerList; import org.bukkit.event.HandlerList;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockFormEvent;
import org.bukkit.event.block.BlockPistonExtendEvent; import org.bukkit.event.block.BlockPistonExtendEvent;
import org.bukkit.event.block.BlockPistonRetractEvent; import org.bukkit.event.block.BlockPistonRetractEvent;
import org.bukkit.event.block.EntityBlockFormEvent;
import org.bukkit.event.entity.EntityAirChangeEvent;
import org.bukkit.event.entity.EntityChangeBlockEvent;
import org.bukkit.event.entity.EntityDeathEvent;
import org.bukkit.event.entity.EntitySpawnEvent;
import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.util.Vector; import org.bukkit.util.Vector;
@ -47,6 +56,17 @@ public class ShieldPrinting implements Listener {
private static final World WORLD = Bukkit.getWorlds().get(0); private static final World WORLD = Bukkit.getWorlds().get(0);
static {
Bukkit.getScheduler().runTaskTimer(BauSystem.getInstance(), () -> {
ShieldPrintingCommand.SHIELD_PRINTING_MAP.values().forEach(shieldPrinting -> {
shieldPrinting.fallingBlocks.replaceAll((entity, location) -> {
if (entity.isDead()) return null;
return location;
});
});
}, 1, 1);
}
/** /**
* Vector of current position, Vector of origin * Vector of current position, Vector of origin
*/ */
@ -123,6 +143,29 @@ public class ShieldPrinting implements Listener {
updateBossbars(); updateBossbars();
} }
private Map<Entity, Location> fallingBlocks = new HashMap<>();
@EventHandler
public void onEntitySpawn(EntitySpawnEvent event) {
if (event.getEntityType() != EntityType.FALLING_BLOCK) return;
if (Region.getRegion(event.getLocation()) != region) return;
fallingBlocks.put(event.getEntity(), event.getLocation().getBlock().getLocation());
}
@EventHandler
public void onEntityChangeBlock(EntityChangeBlockEvent event) {
if (!event.getBlock().getType().isAir()) return;
if (event.getEntityType() != EntityType.FALLING_BLOCK) return;
if (Region.getRegion(event.getBlock().getLocation()) != region) return;
Location origin = fallingBlocks.remove(event.getEntity());
if (origin == null) return;
Location destination = event.getBlock().getLocation();
Vector originOrigin = shieldMap.remove(origin.toVector());
shieldMap.put(destination.toVector(), originOrigin != null ? originOrigin : origin.toVector());
updateBossbars();
}
@EventHandler @EventHandler
public void onPlayerInteract(PlayerInteractEvent event) { public void onPlayerInteract(PlayerInteractEvent event) {
if (event.getClickedBlock() == null) return; if (event.getClickedBlock() == null) return;

Datei anzeigen

@ -40,7 +40,7 @@ public class ShieldPrintingCommand extends SWCommand implements Listener {
super("shieldprinting"); super("shieldprinting");
} }
private Map<Region, ShieldPrinting> shieldMap = new HashMap<>(); static final Map<Region, ShieldPrinting> SHIELD_PRINTING_MAP = new HashMap<>();
@Register @Register
public void genericCommand(@Validator Player player, ShieldPrintingState shieldPrintingState) { public void genericCommand(@Validator Player player, ShieldPrintingState shieldPrintingState) {
@ -52,14 +52,14 @@ public class ShieldPrintingCommand extends SWCommand implements Listener {
ShieldPrinting shieldPrinting; ShieldPrinting shieldPrinting;
switch (shieldPrintingState) { switch (shieldPrintingState) {
case START: case START:
shieldPrinting = shieldMap.put(region, new ShieldPrinting(region)); shieldPrinting = SHIELD_PRINTING_MAP.put(region, new ShieldPrinting(region));
if (shieldPrinting != null) { if (shieldPrinting != null) {
shieldPrinting.disable(); shieldPrinting.disable();
} }
BauSystem.MESSAGE.send("SHIELD_PRINTING_START", player); BauSystem.MESSAGE.send("SHIELD_PRINTING_START", player);
break; break;
case COPY: case COPY:
shieldPrinting = shieldMap.get(region); shieldPrinting = SHIELD_PRINTING_MAP.get(region);
if (shieldPrinting == null) { if (shieldPrinting == null) {
BauSystem.MESSAGE.send("SHIELD_PRINTING_NOT_RUNNING", player); BauSystem.MESSAGE.send("SHIELD_PRINTING_NOT_RUNNING", player);
return; return;
@ -68,7 +68,7 @@ public class ShieldPrintingCommand extends SWCommand implements Listener {
BauSystem.MESSAGE.send("SHIELD_PRINTING_COPY", player); BauSystem.MESSAGE.send("SHIELD_PRINTING_COPY", player);
break; break;
case APPLY: case APPLY:
shieldPrinting = shieldMap.get(region); shieldPrinting = SHIELD_PRINTING_MAP.get(region);
if (shieldPrinting == null) { if (shieldPrinting == null) {
BauSystem.MESSAGE.send("SHIELD_PRINTING_NOT_RUNNING", player); BauSystem.MESSAGE.send("SHIELD_PRINTING_NOT_RUNNING", player);
return; return;
@ -86,7 +86,7 @@ public class ShieldPrintingCommand extends SWCommand implements Listener {
BauSystem.MESSAGE.send("SHIELD_PRINTING_NO_REGION", player); BauSystem.MESSAGE.send("SHIELD_PRINTING_NO_REGION", player);
return; return;
} }
ShieldPrinting shieldPrinting = shieldMap.remove(region); ShieldPrinting shieldPrinting = SHIELD_PRINTING_MAP.remove(region);
if (shieldPrinting == null) { if (shieldPrinting == null) {
BauSystem.MESSAGE.send("SHIELD_PRINTING_NOT_RUNNING", player); BauSystem.MESSAGE.send("SHIELD_PRINTING_NOT_RUNNING", player);
return; return;
@ -120,7 +120,7 @@ public class ShieldPrintingCommand extends SWCommand implements Listener {
if (region.isGlobal()) { if (region.isGlobal()) {
return; return;
} }
ShieldPrinting shieldPrinting = shieldMap.get(region); ShieldPrinting shieldPrinting = SHIELD_PRINTING_MAP.get(region);
if (shieldPrinting == null) { if (shieldPrinting == null) {
return; return;
} }