diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/TraceCommand.java b/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/TraceCommand.java index edc879fd..c906b29b 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/TraceCommand.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/TraceCommand.java @@ -27,12 +27,15 @@ import de.steamwar.bausystem.features.tracer.show.ShowModeParameter; import de.steamwar.bausystem.features.tracer.show.ShowModeParameterType; import de.steamwar.bausystem.features.tracer.show.StoredRecords; import de.steamwar.bausystem.features.tracer.show.TraceShowManager; +import de.steamwar.bausystem.features.tracer.show.mode.BlockShowMode; import de.steamwar.bausystem.features.tracer.show.mode.TraceEntityShowMode; import de.steamwar.bausystem.linkage.LinkageType; import de.steamwar.bausystem.linkage.Linked; +import de.steamwar.bausystem.shared.ShowMode; import de.steamwar.command.SWCommand; import de.steamwar.command.SWCommandUtils; import de.steamwar.command.TypeMapper; +import lombok.NonNull; import org.bukkit.entity.Player; import java.util.ArrayList; @@ -141,13 +144,37 @@ public class TraceCommand extends SWCommand { } @Register({"show"}) - public void showCommand(Player p, ShowModeParameterType... showModeParameterTypes) { + @Register({"show", "entity"}) + public void showEntityCommand(Player p, ShowModeParameterType... showModeParameterTypes) { + internalShow(p, ShowModeType.ENTITY, showModeParameterTypes); + } + + @Register({"show", "block"}) + public void showBlockCommand(Player p, ShowModeParameterType... showModeParameterTypes) { + internalShow(p, ShowModeType.BLOCK, showModeParameterTypes); + } + + private enum ShowModeType { + ENTITY, + BLOCK + } + + private void internalShow(Player p, @NonNull ShowModeType showModeType, ShowModeParameterType... showModeParameterTypes) { if (!permissionCheck(p)) return; ShowModeParameter showModeParameter = new ShowModeParameter(); for (ShowModeParameterType showModeParameterType : showModeParameterTypes) { showModeParameterType.getShowModeParameterConsumer().accept(showModeParameter); } - TraceShowManager.show(p, new TraceEntityShowMode(p, showModeParameter)); + switch (showModeType) { + case BLOCK: + TraceShowManager.show(p, new BlockShowMode(p, showModeParameter)); + break; + case ENTITY: + TraceShowManager.show(p, new TraceEntityShowMode(p, showModeParameter)); + break; + default: + return; + } BauSystem.MESSAGE.send("TRACE_MESSAGE_SHOW", p); } diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/show/mode/BlockShowMode.java b/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/show/mode/BlockShowMode.java new file mode 100644 index 00000000..f53ee3a9 --- /dev/null +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/show/mode/BlockShowMode.java @@ -0,0 +1,67 @@ +/* + * This file is a part of the SteamWar software. + * + * Copyright (C) 2021 SteamWar.de-Serverteam + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package de.steamwar.bausystem.features.tracer.show.mode; + +import de.steamwar.bausystem.features.tracer.TNTPosition; +import de.steamwar.bausystem.features.tracer.TNTTracer_15; +import de.steamwar.bausystem.features.tracer.show.ShowModeParameter; +import de.steamwar.bausystem.region.Point; +import de.steamwar.bausystem.shared.ShowMode; +import de.steamwar.core.VersionedCallable; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.util.Vector; + +import java.util.HashSet; +import java.util.Set; + +public class BlockShowMode implements ShowMode { + + protected final Player player; + protected final ShowModeParameter showModeParameter; + + private Set positionSet = new HashSet<>(); + + public BlockShowMode(Player player, ShowModeParameter showModeParameter) { + this.player = player; + this.showModeParameter = showModeParameter; + } + + @Override + public void show(TNTPosition position) { + Location location = position.getLocation().toLocation(player.getWorld()); + Point point = Point.fromLocation(location); + if (positionSet.contains(point)) { + return; + } + positionSet.add(point); + player.sendBlockChange(location, Material.RED_STAINED_GLASS.createBlockData()); + } + + @Override + public void hide() { + positionSet.forEach(point -> { + Location location = point.toLocation(player.getWorld()); + player.sendBlockChange(location, location.getBlock().getBlockData()); + }); + positionSet.clear(); + } +}