Skip to content

Commit

Permalink
improve: ObjectValueをCommandLib-0.4.0に合わせてリファクタリング
Browse files Browse the repository at this point in the history
  • Loading branch information
Maru32768 committed Aug 22, 2022
1 parent 5b8b495 commit 3263222
Show file tree
Hide file tree
Showing 10 changed files with 39 additions and 73 deletions.
2 changes: 1 addition & 1 deletion bukkit/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ dependencies {
implementation "com.google.code.gson:gson:2.8.9"
implementation group: "org.apache.poi", name: "poi", version: "5.1.0"
implementation "org.apache.commons:commons-lang3:3.0"
compileOnly "com.github.TeamKun.CommandLib:bukkit:0.3.2"
compileOnly "com.github.TeamKun.CommandLib:bukkit:0.4.0"
compileOnly fileTree(dir: "./libs/", include: "patched*.jar")
compileOnly "com.mojang:brigadier:1.0.18"
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
import com.google.common.io.Files;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import net.kunmc.lab.commandlib.Nameable;
import net.kunmc.lab.configlib.gson.*;
import net.kunmc.lab.configlib.value.Nameable;
import org.apache.commons.lang3.tuple.Pair;
import org.bukkit.Bukkit;
import org.bukkit.Location;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package net.kunmc.lab.configlib.gson;

import com.google.gson.*;
import net.kunmc.lab.configlib.value.Nameable;
import net.kunmc.lab.commandlib.Nameable;
import org.bukkit.craftbukkit.libs.org.codehaus.plexus.util.ReflectionUtils;

import java.lang.reflect.Field;
Expand All @@ -25,7 +25,7 @@ public JsonElement serialize(Nameable src, Type typeOfSrc, JsonSerializationCont
throw new RuntimeException(e);
}
});

return object;
}

Expand Down

This file was deleted.

44 changes: 16 additions & 28 deletions bukkit/src/main/java/net/kunmc/lab/configlib/value/ObjectValue.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,67 +2,55 @@

import com.google.common.collect.Lists;
import net.kunmc.lab.commandlib.ArgumentBuilder;
import net.kunmc.lab.commandlib.argument.StringArgument;
import net.kunmc.lab.commandlib.Nameable;
import net.kunmc.lab.configlib.SingleValue;
import org.bukkit.command.CommandSender;

import java.util.Collection;
import java.util.List;
import java.util.function.Predicate;

public class ObjectValue<T extends Nameable> extends SingleValue<T, ObjectValue<T>> {
private transient final Collection<? extends T> candidates;
private transient final Predicate<? super T> filter;

public ObjectValue(T initial, T candidate, T... candidates) {
this(initial, Lists.asList(candidate, candidates));
}

public ObjectValue(T initial, Collection<? extends T> candidates) {
super(initial);
public ObjectValue(T initial, Predicate<T> filter, T candidate, T... candidates) {
this(initial, Lists.asList(candidate, candidates), filter);
}

checkPreconditions(candidates);
this.candidates = candidates;
public ObjectValue(T initial, Collection<? extends T> candidates) {
this(initial, candidates, x -> true);
}

private static void checkPreconditions(Collection<? extends Nameable> candidates) {
if (candidates.isEmpty()) {
throw new IllegalArgumentException("candidates is empty.");
}
public ObjectValue(T initial, Collection<? extends T> candidates, Predicate<? super T> filter) {
super(initial);

if (candidates.stream()
.map(Nameable::tabCompleteName)
.distinct()
.count() != candidates.size()) {
throw new IllegalArgumentException("candidates has duplicate name elements.");
}
this.candidates = candidates;
this.filter = filter;
}

@Override
protected void appendArgument(ArgumentBuilder builder) {
builder.stringArgument("name", StringArgument.Type.PHRASE_QUOTED, sb -> {
candidates.stream()
.map(Nameable::tabCompleteName)
.forEach(sb::suggest);
});
builder.objectArgument("name", candidates, filter);
}

@Override
protected boolean isCorrectArgument(String entryName, List<Object> argument, CommandSender sender) {
return candidates.stream()
.map(Nameable::tabCompleteName)
.anyMatch(x -> x.equals(argument.get(0)));
return true;
}

@Override
protected String incorrectArgumentMessage(String entryName, List<Object> argument, CommandSender sender) {
return String.format("%sは候補に存在しません", argument.get(0).toString());
return "";
}

@Override
protected T argumentToValue(List<Object> argument, CommandSender sender) {
return candidates.stream()
.filter(x -> x.tabCompleteName().equals(argument.get(0)))
.findFirst()
.get();
return ((T) argument.get(0));
}

@Override
Expand Down
2 changes: 1 addition & 1 deletion forge/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ repositories {
dependencies {
minecraft 'net.minecraftforge:forge:1.16.5-36.2.31'
implementation group: "org.apache.poi", name: "poi", version: "5.1.0"
compileOnly "com.github.TeamKun.CommandLib:forge:0.3.2"
compileOnly "com.github.TeamKun.CommandLib:forge:0.4.0"
implementation "org.jetbrains:annotations:16.0.2"
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@
import com.google.common.io.Files;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import net.kunmc.lab.commandlib.Nameable;
import net.kunmc.lab.commandlib.util.Location;
import net.kunmc.lab.configlib.gson.*;
import net.kunmc.lab.configlib.value.Nameable;
import net.minecraft.block.BlockState;
import net.minecraft.item.ItemStack;
import net.minecraft.scoreboard.ScorePlayerTeam;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package net.kunmc.lab.configlib.gson;

import com.google.gson.*;
import net.kunmc.lab.configlib.value.Nameable;
import net.kunmc.lab.commandlib.Nameable;
import org.codehaus.plexus.util.ReflectionUtils;

import java.lang.reflect.Field;
Expand Down

This file was deleted.

44 changes: 16 additions & 28 deletions forge/src/main/java/net/kunmc/lab/configlib/value/ObjectValue.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,67 +2,55 @@

import com.google.common.collect.Lists;
import net.kunmc.lab.commandlib.ArgumentBuilder;
import net.kunmc.lab.commandlib.argument.StringArgument;
import net.kunmc.lab.commandlib.Nameable;
import net.kunmc.lab.configlib.SingleValue;
import net.minecraft.command.CommandSource;

import java.util.Collection;
import java.util.List;
import java.util.function.Predicate;

public class ObjectValue<T extends Nameable> extends SingleValue<T, ObjectValue<T>> {
private transient final Collection<? extends T> candidates;
private transient final Predicate<? super T> filter;

public ObjectValue(T initial, T candidate, T... candidates) {
this(initial, Lists.asList(candidate, candidates));
}

public ObjectValue(T initial, Collection<? extends T> candidates) {
super(initial);
public ObjectValue(T initial, Predicate<T> filter, T candidate, T... candidates) {
this(initial, Lists.asList(candidate, candidates), filter);
}

checkPreconditions(candidates);
this.candidates = candidates;
public ObjectValue(T initial, Collection<? extends T> candidates) {
this(initial, candidates, x -> true);
}

private static void checkPreconditions(Collection<? extends Nameable> candidates) {
if (candidates.isEmpty()) {
throw new IllegalArgumentException("candidates is empty.");
}
public ObjectValue(T initial, Collection<? extends T> candidates, Predicate<? super T> filter) {
super(initial);

if (candidates.stream()
.map(Nameable::tabCompleteName)
.distinct()
.count() != candidates.size()) {
throw new IllegalArgumentException("candidates has duplicate name elements.");
}
this.candidates = candidates;
this.filter = filter;
}

@Override
protected void appendArgument(ArgumentBuilder builder) {
builder.stringArgument("name", StringArgument.Type.PHRASE_QUOTED, sb -> {
candidates.stream()
.map(Nameable::tabCompleteName)
.forEach(sb::suggest);
});
builder.objectArgument("name", candidates, filter);
}

@Override
protected boolean isCorrectArgument(String entryName, List<Object> argument, CommandSource sender) {
return candidates.stream()
.map(Nameable::tabCompleteName)
.anyMatch(x -> x.equals(argument.get(0)));
return true;
}

@Override
protected String incorrectArgumentMessage(String entryName, List<Object> argument, CommandSource sender) {
return String.format("%sは候補に存在しません", argument.get(0).toString());
return "";
}

@Override
protected T argumentToValue(List<Object> argument, CommandSource sender) {
return candidates.stream()
.filter(x -> x.tabCompleteName().equals(argument.get(0)))
.findFirst()
.get();
return ((T) argument.get(0));
}

@Override
Expand Down

0 comments on commit 3263222

Please sign in to comment.