Skip to content

Commit

Permalink
Add convex origin visualization & permission to use lock command
Browse files Browse the repository at this point in the history
Resolves #42
  • Loading branch information
MrMicky-FR committed Dec 23, 2022
1 parent a2ba243 commit 0ce2296
Show file tree
Hide file tree
Showing 10 changed files with 62 additions and 15 deletions.
4 changes: 2 additions & 2 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ jobs:

strategy:
matrix:
java-version: [8, 11, 17]
java-version: [ 8, 11, 17 ]

steps:
- name: Checkout repository
Expand All @@ -31,7 +31,7 @@ jobs:
run: ./gradlew build

- name: Upload artifact
uses: actions/upload-artifact@v2
uses: actions/upload-artifact@v3
with:
name: WorldEditSelectionVisualizer
path: plugin/build/libs/WorldEditSelectionVisualizer-*.jar
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# WorldEditSelectionVisualizer

[![Java CI](https://github.com/MrMicky-FR/WorldEditSelectionVisualizer/actions/workflows/build.yml/badge.svg)](https://github.com/MrMicky-FR/WorldEditSelectionVisualizer/actions/workflows/build.yml)
[![Language grade](https://img.shields.io/lgtm/grade/java/g/MrMicky-FR/WorldEditSelectionVisualizer.svg?label=code%20quality&logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/MrMicky-FR/WorldEditSelectionVisualizer/context:java)
[![CodeQL](https://github.com/MrMicky-FR/WorldEditSelectionVisualizer/actions/workflows/codeql.yml/badge.svg)](https://github.com/MrMicky-FR/WorldEditSelectionVisualizer/actions/workflows/codeql.yml)
[![Discord](https://img.shields.io/discord/390919659874156560.svg?colorB=5865f2&label=Discord&logo=discord&logoColor=white)](https://discord.gg/q9UwaBT)

WorldEditSelectionVisualizer (WESV) is essentially the famous [WorldEditCUI](http://www.minecraftforum.net/topic/2171206-172-worldeditcui/) mod in the form of a Bukkit plugin, which means that players don't need to install anything on their client.
Expand Down
4 changes: 2 additions & 2 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
allprojects {
group = 'fr.mrmicky'
version = '2.1.2'
version = '2.1.3'
}

subprojects {
Expand All @@ -21,7 +21,7 @@ subprojects {
}

dependencies {
compileOnly 'org.jetbrains:annotations:23.0.0'
compileOnly 'org.jetbrains:annotations:23.1.0'
compileOnly 'org.spigotmc:spigot-api:1.16.4-R0.1-SNAPSHOT'
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@ public interface RegionAdapter {

@NotNull List<Vector3d[]> getConvexTriangles();

@NotNull List<Vector3d> getConvexVertices();

@NotNull Region transform(@NotNull Transform transform,
@NotNull Vector3d origin);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,18 @@ public long getVolume() {
.collect(Collectors.toList());
}

@Override
public @NotNull List<Vector3d> getConvexVertices() {
if (!(this.region instanceof ConvexPolyhedralRegion)) {
throw new UnsupportedOperationException();
}

return ((ConvexPolyhedralRegion) this.region).getVertices()
.stream()
.map(Vectors6::toVector3d)
.collect(Collectors.toList());
}

@Override
public void shift(@NotNull Vector3d vector) throws RegionOperationException {
this.region.shift(Vectors6.toVector(vector));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,18 @@ public long getVolume() {
.collect(Collectors.toList());
}

@Override
public @NotNull List<Vector3d> getConvexVertices() {
if (!(this.region instanceof ConvexPolyhedralRegion)) {
throw new UnsupportedOperationException();
}

return ((ConvexPolyhedralRegion) this.region).getVertices()
.stream()
.map(Vectors7::toVector3d)
.collect(Collectors.toList());
}

@Override
public void shift(@NotNull Vector3d vector) throws RegionOperationException {
this.region.shift(Vectors7.toBlockVector3(vector));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -199,7 +199,10 @@ private void migrateV1Config() {
File configFile = new File(getDataFolder(), "config.yml");
File configBackupFile = new File(getDataFolder(), "config-old.yml");

configFile.renameTo(configBackupFile);
if (!configFile.renameTo(configBackupFile)) {
getLogger().warning("Unable to rename old config.yml file.");
}

saveDefaultConfig();
reloadConfig();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ public boolean onCommand(@NotNull CommandSender sender,
return true;
}

if (args[0].equalsIgnoreCase("toggle")) {
if (args[0].equalsIgnoreCase("toggle") && sender.hasPermission("wesv.toggle")) {
if (!(sender instanceof Player)) {
sender.sendMessage(ChatColor.RED + "Only players can use this command.");
return true;
Expand All @@ -58,7 +58,7 @@ public boolean onCommand(@NotNull CommandSender sender,
return true;
}

if (args[0].equalsIgnoreCase("lock")) {
if (args[0].equalsIgnoreCase("lock") && sender.hasPermission("wesv.lock")) {
if (!(sender instanceof Player)) {
sender.sendMessage(ChatColor.RED + "Only players can use this command.");
return true;
Expand Down Expand Up @@ -87,8 +87,13 @@ public List<String> onTabComplete(@NotNull CommandSender sender,
List<String> completions = new ArrayList<>();

if (sender instanceof Player) {
completions.add("toggle");
completions.add("lock");
if (sender.hasPermission("wesv.lock")) {
completions.add("toggle");
}

if (sender.hasPermission("wesv.lock")) {
completions.add("lock");
}
}

if (sender.hasPermission("wesv.reload")) {
Expand Down Expand Up @@ -164,10 +169,15 @@ private void sendUsage(CommandSender sender) {
sender.sendMessage(ChatUtils.color("&6WorldEditSelectionVisualizer v" + version + "&7 by &6MrMicky&7."));

if (sender instanceof Player) {
sender.sendMessage(ChatUtils.color("&7- /wesv lock"));
sender.sendMessage(ChatUtils.color("&7- /wesv lock tp"));
sender.sendMessage(ChatUtils.color("&7- /wesv toggle"));
sender.sendMessage(ChatUtils.color("&7- /wesv toggle clipboard"));
if (sender.hasPermission("wesv.lock")) {
sender.sendMessage(ChatUtils.color("&7- /wesv lock"));
sender.sendMessage(ChatUtils.color("&7- /wesv lock tp"));
}

if (sender.hasPermission("wesv.toggle")) {
sender.sendMessage(ChatUtils.color("&7- /wesv toggle"));
sender.sendMessage(ChatUtils.color("&7- /wesv toggle clipboard"));
}
}

if (sender.hasPermission("wesv.reload")) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import fr.mrmicky.worldeditselectionvisualizer.compat.RegionAdapter;
import fr.mrmicky.worldeditselectionvisualizer.config.GlobalSelectionConfig;
import fr.mrmicky.worldeditselectionvisualizer.geometry.Line;
import fr.mrmicky.worldeditselectionvisualizer.geometry.Point;
import fr.mrmicky.worldeditselectionvisualizer.geometry.Shape;
import fr.mrmicky.worldeditselectionvisualizer.math.Vector3d;
import fr.mrmicky.worldeditselectionvisualizer.selection.SelectionPoints;
Expand All @@ -24,6 +25,7 @@ public SelectionPoints processSelection(ConvexPolyhedralRegion region,
RegionAdapter adapter,
GlobalSelectionConfig config) {
List<Vector3d[]> triangles = adapter.getConvexTriangles();
List<Vector3d> vertices = adapter.getConvexVertices();
List<Vector3d> corners = new ArrayList<>(triangles.size() * 3);

for (Vector3d[] triangle : triangles) {
Expand All @@ -33,12 +35,14 @@ public SelectionPoints processSelection(ConvexPolyhedralRegion region,
}

List<Shape> primary = new ArrayList<>(corners.size());
Point origin = vertices.isEmpty()
? null : new Point(vertices.get(0).add(0.5, 0.5, 0.5));

for (int i = 0; i < corners.size(); i++) {
Vector3d end = corners.get(i + 1 < corners.size() ? i + 1 : 0);
primary.add(new Line(corners.get(i), end, config.primary()));
}

return new SelectionPoints(primary, Collections.emptyList());
return new SelectionPoints(primary, Collections.emptyList(), origin);
}
}
4 changes: 4 additions & 0 deletions plugin/src/main/resources/plugin.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,17 @@ permissions:
children:
wesv.use: true
wesv.toggle: true
wesv.lock: true
wesv.reload: true
wesv.use:
default: true
description: Allows the visualizer to be used.
wesv.toggle:
default: true
description: Allows the visualizer to be toggled.
wesv.lock:
default: true
description: Allows to use the lock and lock tp command.
wesv.reload:
default: op
description: Allows the configuration of this plugin to be reloaded from the config.yml file.

0 comments on commit 0ce2296

Please sign in to comment.