Skip to content

Commit f7ded65

Browse files
committed
Language and MineDown support (Resolves #4)
1 parent 1415cc4 commit f7ded65

File tree

11 files changed

+181
-161
lines changed

11 files changed

+181
-161
lines changed

.gitignore

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
# IntelliJ project files
2+
.idea
3+
*.iml
4+
out
5+
gen
6+
target

pom.xml

Lines changed: 61 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<groupId>de.themoep</groupId>
88
<artifactId>entitydetection</artifactId>
9-
<version>1.2.0</version>
9+
<version>1.3.0-SNAPSHOT</version>
1010
<description>Bukkit plugin to find groups of mobs, animals or other (tile) entities.</description>
1111
<name>EntityDetection</name>
1212

@@ -19,8 +19,12 @@
1919

2020
<repositories>
2121
<repository>
22-
<id>spigot-repo</id>
23-
<url>https://hub.spigotmc.org/nexus/content/groups/public/</url>
22+
<id>minebench-repo</id>
23+
<url>https://repo.minebench.de/</url>
24+
</repository>
25+
<repository>
26+
<id>papermc-repo</id>
27+
<url>https://repo.papermc.io/repository/maven-public/</url>
2428
</repository>
2529
<repository>
2630
<id>enginehub-repo</id>
@@ -30,16 +34,34 @@
3034

3135
<dependencies>
3236
<dependency>
33-
<groupId>org.spigotmc</groupId>
34-
<artifactId>spigot-api</artifactId>
35-
<version>1.13.2-R0.1-SNAPSHOT</version>
37+
<groupId>io.papermc.paper</groupId>
38+
<artifactId>paper-api</artifactId>
39+
<version>1.17.1-R0.1-SNAPSHOT</version>
3640
<scope>provided</scope>
3741
</dependency>
3842
<dependency>
3943
<groupId>com.sk89q.worldguard</groupId>
4044
<artifactId>worldguard-bukkit</artifactId>
4145
<version>7.0.2</version>
4246
<scope>provided</scope>
47+
<exclusions>
48+
<exclusion>
49+
<groupId>org.bukkit</groupId>
50+
<artifactId>bukkit</artifactId>
51+
</exclusion>
52+
</exclusions>
53+
</dependency>
54+
<dependency>
55+
<groupId>de.themoep.utils</groupId>
56+
<artifactId>lang-bukkit</artifactId>
57+
<version>1.3-SNAPSHOT</version>
58+
<scope>compile</scope>
59+
</dependency>
60+
<dependency>
61+
<groupId>de.themoep</groupId>
62+
<artifactId>minedown-adventure</artifactId>
63+
<version>1.7.3-SNAPSHOT</version>
64+
<scope>compile</scope>
4365
</dependency>
4466
</dependencies>
4567

@@ -78,6 +100,39 @@
78100
<directory>${project.basedir}/src/main/resources</directory>
79101
</resource>
80102
</resources>
103+
<plugins>
104+
<plugin>
105+
<groupId>org.apache.maven.plugins</groupId>
106+
<artifactId>maven-shade-plugin</artifactId>
107+
<version>3.6.0</version>
108+
<executions>
109+
<execution>
110+
<phase>package</phase>
111+
<goals>
112+
<goal>shade</goal>
113+
</goals>
114+
<configuration>
115+
<artifactSet>
116+
<includes>
117+
<include>de.themoep:*</include>
118+
<include>de.themoep.utils:*</include>
119+
</includes>
120+
</artifactSet>
121+
<relocations>
122+
<relocation>
123+
<pattern>de.themoep.utils.lang</pattern>
124+
<shadedPattern>de.themoep.entitydetection.libs.lang</shadedPattern>
125+
</relocation>
126+
<relocation>
127+
<pattern>de.themoep.minedown.adventure</pattern>
128+
<shadedPattern>de.themoep.entitydetection.libs.minedown</shadedPattern>
129+
</relocation>
130+
</relocations>
131+
</configuration>
132+
</execution>
133+
</executions>
134+
</plugin>
135+
</plugins>
81136
</build>
82137

83138
</project>

src/main/java/de/themoep/entitydetection/EntityDetection.java

Lines changed: 52 additions & 95 deletions
Original file line numberDiff line numberDiff line change
@@ -9,18 +9,14 @@
99
import de.themoep.entitydetection.searcher.SearchResult;
1010
import de.themoep.entitydetection.searcher.SearchResultEntry;
1111
import de.themoep.entitydetection.searcher.SearchType;
12-
import net.md_5.bungee.api.chat.ClickEvent;
13-
import net.md_5.bungee.api.chat.ComponentBuilder;
14-
import net.md_5.bungee.api.chat.HoverEvent;
15-
import net.md_5.bungee.api.chat.TextComponent;
16-
import org.bukkit.Bukkit;
17-
import org.bukkit.ChatColor;
12+
import de.themoep.minedown.adventure.MineDown;
13+
import de.themoep.minedown.adventure.Replacer;
14+
import de.themoep.utils.lang.bukkit.LanguageManager;
15+
import net.kyori.adventure.text.Component;
1816
import org.bukkit.command.CommandSender;
19-
import org.bukkit.entity.Player;
2017
import org.bukkit.plugin.java.JavaPlugin;
2118

2219
import java.text.SimpleDateFormat;
23-
import java.util.ArrayList;
2420
import java.util.Date;
2521
import java.util.HashMap;
2622
import java.util.Iterator;
@@ -45,28 +41,31 @@
4541
* along with this program. If not, see <http://mozilla.org/MPL/2.0/>.
4642
*/
4743
public class EntityDetection extends JavaPlugin {
44+
private LanguageManager lang;
4845

4946
private EntitySearch currentSearch;
5047

5148
private Map<SearchType, SearchResult<?>> results = new HashMap<>();
5249
private Map<String, SearchResult<?>> customResults = new HashMap<>();
5350
private Map<String, SearchResult<?>> lastResultViewed = new HashMap<>();
5451

55-
private boolean serverIsSpigot = true;
56-
5752
public void onEnable() {
58-
try {
59-
Bukkit.class.getMethod("spigot");
60-
} catch (NoSuchMethodException noSpigot) {
61-
serverIsSpigot = false;
62-
}
53+
lang = new LanguageManager(this, System.getProperty("de.themoep.entitydetection.default-language", "en"));
6354
PluginCommandExecutor cmdEx = new PluginCommandExecutor(this);
6455
cmdEx.register(new SearchSubCommand(this));
6556
cmdEx.register(new TpSubCommand(this));
6657
cmdEx.register(new ListSubCommand(this));
6758
cmdEx.register(new StopSubCommand(this));
6859
}
6960

61+
public String getRawMessage(CommandSender sender, String key, String... replacements) {
62+
return lang.getConfig(sender).get(key, replacements);
63+
}
64+
65+
public Component getMessage(CommandSender sender, String key, String... replacements) {
66+
return MineDown.parse(getRawMessage(sender, key, replacements));
67+
}
68+
7069
public boolean startSearch(EntitySearch search) {
7170
if(currentSearch != null && currentSearch.isRunning()) {
7271
return false;
@@ -109,94 +108,52 @@ public void send(CommandSender sender, SearchResult<?> result) {
109108
public void send(CommandSender sender, SearchResult<?> result, int page) {
110109
lastResultViewed.put(sender.getName(), result);
111110

112-
String dateStr = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(result.getEndTime()));
111+
String dateStr = new SimpleDateFormat(getRawMessage(sender, "result.time-format")).format(new Date(result.getEndTime()));
113112

114113
int start = page * 10;
115-
if(serverIsSpigot && sender instanceof Player) {
116-
String searchedTypes = ChatColor.YELLOW + "Entity Types:\n";
117-
Iterator<String> typeIter = result.getSearched().iterator();
118-
while(typeIter.hasNext()) {
119-
searchedTypes += ChatColor.DARK_PURPLE + Utils.enumToHumanName(typeIter.next());
120-
if(typeIter.hasNext()) {
121-
searchedTypes += "\n";
122-
}
123-
}
114+
Component searchedTypes = getMessage(sender, "result.searched-types.head");
115+
Iterator<String> typeIter = result.getSearched().iterator();
116+
while (typeIter.hasNext()) {
117+
searchedTypes = searchedTypes.append(Component.newline())
118+
.append(getMessage(sender, "result.searched-types.entry", "type", Utils.enumToHumanName(typeIter.next())));
119+
}
124120

125-
ComponentBuilder builder = new ComponentBuilder(Utils.enumToHumanName(result.getType()) + " search ")
126-
.color(net.md_5.bungee.api.ChatColor.GREEN)
127-
.event(new HoverEvent(HoverEvent.Action.SHOW_TEXT, TextComponent.fromLegacyText(searchedTypes)))
128-
.append("from " + dateStr + ":")
129-
.color(net.md_5.bungee.api.ChatColor.WHITE);
130-
131-
List<? extends SearchResultEntry<?>> results = result.getSortedEntries();
132-
if(results.size() > 0) {
133-
for(int line = start; line < start + 10 && line < results.size(); line++) {
134-
SearchResultEntry<?> entry = results.get(line);
135-
136-
builder.append("\n")
137-
.retain(ComponentBuilder.FormatRetention.NONE)
138-
.append(" " + (line + 1) + ": ")
139-
.color(net.md_5.bungee.api.ChatColor.WHITE)
140-
.event(
141-
new HoverEvent(
142-
HoverEvent.Action.SHOW_TEXT,
143-
new ComponentBuilder("Click to teleport to " + (line + 1))
144-
.color(net.md_5.bungee.api.ChatColor.BLUE)
145-
.create()
146-
)
147-
)
148-
.event(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/detect tp " + (line + 1)))
149-
.append(entry.getLocation() + " ")
150-
.color(net.md_5.bungee.api.ChatColor.YELLOW)
151-
.append(entry.getSize() + " ")
152-
.color(net.md_5.bungee.api.ChatColor.RED);
153-
154-
int entitiesListed = 0;
155-
for(Entry<String, Integer> entityEntry : entry.getEntryCount()) {
156-
builder.append(Utils.enumToHumanName(entityEntry.getKey()) + "[")
157-
.color(net.md_5.bungee.api.ChatColor.GREEN)
158-
.append(entityEntry.getValue().toString())
159-
.color(net.md_5.bungee.api.ChatColor.WHITE)
160-
.append("] ")
161-
.color(net.md_5.bungee.api.ChatColor.GREEN);
162-
163-
entitiesListed++;
164-
if(entitiesListed >= 3)
165-
break;
166-
}
121+
Component message = getMessage(sender, "result.head", "type", Utils.enumToHumanName(result.getType()), "timestamp", dateStr);
122+
message = Replacer.replaceIn(message, "searchedtypes", searchedTypes);
123+
124+
List<? extends SearchResultEntry<?>> results = result.getSortedEntries();
125+
if (results.size() > 0) {
126+
for (int line = start; line < start + 10 && line < results.size(); line++) {
127+
SearchResultEntry<?> entry = results.get(line);
128+
129+
Component resultLine = getMessage(sender, "result.entry",
130+
"line", String.valueOf(line + 1),
131+
"location", String.valueOf(entry.getLocation()),
132+
"size", String.valueOf(entry.getSize())
133+
);
134+
135+
Component entityCounts = Component.empty();
136+
int entitiesListed = 0;
137+
for(Entry<String, Integer> entityEntry : entry.getEntryCount()) {
138+
entityCounts = entityCounts.append(getMessage(sender, "result.entity-count",
139+
"type", Utils.enumToHumanName(entityEntry.getKey()),
140+
"count", String.valueOf(entityEntry.getValue())
141+
));
142+
143+
entitiesListed++;
144+
if(entitiesListed >= 3)
145+
break;
167146
}
168-
} else {
169-
builder.append("\n No entities of that type found!")
170-
.color(net.md_5.bungee.api.ChatColor.RED);
171-
}
172-
173-
((Player) sender).spigot().sendMessage(builder.create());
174-
} else {
175-
List<String> msg = new ArrayList<String>();
176-
msg.add(ChatColor.GREEN + Utils.enumToHumanName(result.getType()) + " search " + ChatColor.WHITE + "from " + dateStr + ":");
177-
178-
List<? extends SearchResultEntry<?>> chunkEntries = result.getSortedEntries();
179-
if(chunkEntries.size() > 0) {
180-
for(int line = start; line < start + 10 && line < chunkEntries.size(); line++) {
181-
SearchResultEntry<?> chunkEntry = chunkEntries.get(line);
182147

183-
String lineText = ChatColor.WHITE + " " + (line + 1) + ": " + ChatColor.YELLOW + chunkEntry.getLocation() + " " + ChatColor.RED + chunkEntry.getSize() + " ";
148+
resultLine = Replacer.replaceIn(resultLine, "entitycounts", entityCounts);
184149

185-
int entitiesListed = 0;
186-
for(Entry<String, Integer> entityEntry : chunkEntry.getEntryCount()) {
187-
lineText += ChatColor.GREEN + Utils.enumToHumanName(entityEntry.getKey()) + "[" + ChatColor.WHITE + entityEntry.getValue().toString() + ChatColor.GREEN + "] ";
188-
entitiesListed++;
189-
if(entitiesListed >= 3)
190-
break;
191-
}
192-
193-
msg.add(lineText);
194-
}
195-
} else {
196-
msg.add(ChatColor.RED + " Nothing of that type found!");
150+
message = message.append(Component.newline()).append(resultLine);
197151
}
198-
sender.sendMessage(msg.toArray(new String[msg.size()]));
152+
} else {
153+
message = message.append(Component.newline()).append(getMessage(sender, "result.no-entries"));
199154
}
155+
156+
sender.sendMessage(message);
200157
}
201158

202159
public SearchResult<?> getResult(CommandSender sender) {

src/main/java/de/themoep/entitydetection/commands/ListSubCommand.java

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,12 @@
11
package de.themoep.entitydetection.commands;
22

33
import de.themoep.entitydetection.EntityDetection;
4-
import de.themoep.entitydetection.Utils;
54
import de.themoep.entitydetection.searcher.SearchResult;
6-
import de.themoep.entitydetection.searcher.SearchResultEntry;
75
import de.themoep.entitydetection.searcher.SearchType;
86
import org.bukkit.ChatColor;
9-
import org.bukkit.Chunk;
107
import org.bukkit.Material;
118
import org.bukkit.command.CommandSender;
12-
import org.bukkit.entity.Entity;
139
import org.bukkit.entity.EntityType;
14-
import org.bukkit.entity.Player;
15-
import org.bukkit.event.player.PlayerTeleportEvent;
1610

1711
/**
1812
* Copyright 2016 Max Lee (https://github.com/Phoenix616/)
@@ -32,8 +26,7 @@
3226
public class ListSubCommand extends SubCommand {
3327
public ListSubCommand(EntityDetection plugin) {
3428
super(plugin, plugin.getName().toLowerCase(), "list",
35-
"[<page> [monster|animal|misc|block|tiles|all| <type>]]",
36-
"Lists the last result. Specify a type to get a specific one."
29+
"[<page> [monster|passive|misc|block|tile|all|<type>]]"
3730
);
3831
}
3932

0 commit comments

Comments
 (0)