Skip to content

Commit 83f617d

Browse files
authored
Clean up code smells (#99)
1 parent 7935f6d commit 83f617d

12 files changed

Lines changed: 65 additions & 49 deletions

File tree

enchanting-common/src/main/java/com/github/jikoo/planarenchanting/anvil/CombineEnchants.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
import java.util.Objects;
77
import com.github.jikoo.planarenchanting.util.EnchantData;
88
import com.github.jikoo.planarenchanting.util.EnchantmentAccess;
9+
import com.github.jikoo.planarenchanting.util.EnchantDataService;
10+
911
import org.bukkit.enchantments.Enchantment;
1012
import org.jspecify.annotations.NullMarked;
1113

@@ -22,7 +24,7 @@ public class CombineEnchants<T> implements AnvilFunction<T> {
2224

2325
protected CombineEnchants(Platform platform, EnchantmentAccess<T> access) {
2426
this.access = access;
25-
this.platform = platform.platform;
27+
this.platform = platform.internalPlatform;
2628
}
2729

2830
@Override
@@ -110,10 +112,10 @@ public enum Platform {
110112
JAVA(new Java()),
111113
BEDROCK(new Bedrock()),;
112114

113-
private final EnchantingPlatform platform;
115+
private final EnchantingPlatform internalPlatform;
114116

115117
Platform(EnchantingPlatform platform) {
116-
this.platform = platform;
118+
this.internalPlatform = platform;
117119
}
118120
}
119121

@@ -128,7 +130,7 @@ private sealed interface EnchantingPlatform {
128130
private static final class Java implements EnchantingPlatform {
129131
@Override
130132
public int getAnvilCost(Enchantment enchantment, boolean isFromBook) {
131-
int value = EnchantData.Service.PROVIDER.of(enchantment).getAnvilCost();
133+
int value = EnchantDataService.PROVIDER.of(enchantment).getAnvilCost();
132134
return isFromBook ? Math.max(1, value / 2) : value;
133135
}
134136

@@ -146,7 +148,7 @@ public int getInapplicableCost() {
146148
private static final class Bedrock implements EnchantingPlatform {
147149
@Override
148150
public int getAnvilCost(Enchantment enchantment, boolean isFromBook) {
149-
EnchantData data = EnchantData.Service.PROVIDER.of(enchantment);
151+
EnchantData data = EnchantDataService.PROVIDER.of(enchantment);
150152

151153
int cost = data.getAnvilCost();
152154

enchanting-common/src/main/java/com/github/jikoo/planarenchanting/table/EnchantingTable.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.github.jikoo.planarenchanting.table;
22

33
import com.github.jikoo.planarenchanting.util.EnchantData;
4+
import com.github.jikoo.planarenchanting.util.EnchantDataService;
45
import com.github.jikoo.planarwrappers.util.WeightedRandom;
56
import java.util.Collection;
67
import java.util.Collections;
@@ -104,7 +105,7 @@ public void setMaxLevel(@NotNull ToIntFunction<@NotNull Enchantment> maxLevel) {
104105
Map<Enchantment, Integer> available = new HashMap<>();
105106

106107
for (Enchantment enchantment : this.enchantments) {
107-
EnchantData data = EnchantData.Service.PROVIDER.of(enchantment);
108+
EnchantData data = EnchantDataService.PROVIDER.of(enchantment);
108109
// Find a level appropriate for the finalized enchanting level.
109110
for (int lvl = maxLevel.applyAsInt(enchantment); lvl >= enchantment.getStartLevel(); --lvl) {
110111
if (enchantQuality >= data.getMinModifiedCost(lvl)
@@ -138,7 +139,7 @@ private void addEnchant(
138139
Enchantment choice = WeightedRandom.choose(
139140
random,
140141
available.keySet(),
141-
enchant -> EnchantData.Service.PROVIDER.of(enchant).getWeight()
142+
enchant -> EnchantDataService.PROVIDER.of(enchant).getWeight()
142143
);
143144

144145
// Add selected enchantment and remove it from the available listings.

enchanting-common/src/main/java/com/github/jikoo/planarenchanting/util/EnchantData.java

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
package com.github.jikoo.planarenchanting.util;
22

3-
import java.util.ServiceLoader;
43
import org.bukkit.enchantments.Enchantment;
5-
import org.jetbrains.annotations.ApiStatus;
64
import org.jspecify.annotations.NullMarked;
75

86
/**
@@ -53,7 +51,7 @@ public interface EnchantData {
5351
/**
5452
* An enchantment data provider.
5553
*
56-
* @see Service#PROVIDER
54+
* @see EnchantDataService#PROVIDER
5755
*/
5856
@NullMarked
5957
interface Provider {
@@ -62,15 +60,4 @@ interface Provider {
6260

6361
}
6462

65-
@ApiStatus.NonExtendable
66-
interface Service {
67-
68-
/**
69-
* A {@link Provider} loaded from a service.
70-
*/
71-
Provider PROVIDER = ServiceLoader.load(Provider.class, Provider.class.getClassLoader())
72-
.findFirst().orElseThrow();
73-
74-
}
75-
7663
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.github.jikoo.planarenchanting.util;
2+
3+
import java.util.ServiceLoader;
4+
5+
import org.jetbrains.annotations.ApiStatus;
6+
7+
import com.github.jikoo.planarenchanting.util.EnchantData.Provider;
8+
9+
@ApiStatus.NonExtendable
10+
public class EnchantDataService {
11+
12+
/**
13+
* A {@link Provider} loaded from a service.
14+
*/
15+
public static final Provider PROVIDER = ServiceLoader.load(Provider.class, Provider.class.getClassLoader())
16+
.findFirst().orElseThrow();
17+
18+
private EnchantDataService() {
19+
throw new IllegalStateException("Cannot instantiate static helper container.");
20+
}
21+
22+
}

enchanting-common/src/test/java/com/github/jikoo/planarenchanting/anvil/CombineEnchantsTest.java

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121
import com.github.jikoo.planarenchanting.anvil.CombineEnchants.Platform;
2222
import com.github.jikoo.planarenchanting.util.EnchantData;
2323
import com.github.jikoo.planarenchanting.util.EnchantmentAccess;
24+
import com.github.jikoo.planarenchanting.util.EnchantDataService;
25+
2426
import java.util.Map;
2527
import org.bukkit.Bukkit;
2628
import org.bukkit.NamespacedKey;
@@ -185,7 +187,7 @@ void getLevelCostMerge(Platform platform, int cost, boolean conflict) {
185187
Map<Enchantment, Integer> base = Map.of(enchantment, 1);
186188
Map<Enchantment, Integer> added = Map.of(enchantment, 1);
187189

188-
EnchantData data = EnchantData.Service.PROVIDER.of(enchantment);
190+
EnchantData data = EnchantDataService.PROVIDER.of(enchantment);
189191
doReturn(5).when(data).getAnvilCost();
190192

191193
CombineEnchants<Void> function = new CombineEnchants<>(platform, access);
@@ -220,7 +222,7 @@ void getLevelCostUsesHigher(
220222
Map<Enchantment, Integer> base = Map.of(enchantment, baseLevel);
221223
Map<Enchantment, Integer> added = Map.of(enchantment, addedLevel);
222224

223-
EnchantData data = EnchantData.Service.PROVIDER.of(enchantment);
225+
EnchantData data = EnchantDataService.PROVIDER.of(enchantment);
224226
int anvilCost = 5;
225227
doReturn(anvilCost).when(data).getAnvilCost();
226228

@@ -252,7 +254,7 @@ void getLevelCostCapsToMax(int baseLevel, int addedLevel, int maxLevel) {
252254
Map<Enchantment, Integer> base = Map.of(enchantment, baseLevel);
253255
Map<Enchantment, Integer> added = Map.of(enchantment, addedLevel);
254256

255-
EnchantData data = EnchantData.Service.PROVIDER.of(enchantment);
257+
EnchantData data = EnchantDataService.PROVIDER.of(enchantment);
256258
int anvilCost = 5;
257259
doReturn(anvilCost).when(data).getAnvilCost();
258260

@@ -284,7 +286,7 @@ void getLevelCostBook(Platform platform) {
284286
Map<Enchantment, Integer> base = Map.of();
285287
Map<Enchantment, Integer> added = Map.of(enchantment, 1);
286288

287-
EnchantData data = EnchantData.Service.PROVIDER.of(enchantment);
289+
EnchantData data = EnchantDataService.PROVIDER.of(enchantment);
288290
int anvilCost = 5;
289291
doReturn(anvilCost).when(data).getAnvilCost();
290292

@@ -314,7 +316,7 @@ void getLevelCostBedrockTrident() {
314316
Map<Enchantment, Integer> base = Map.of();
315317
Map<Enchantment, Integer> added = Map.of(enchantment, 1);
316318

317-
EnchantData data = EnchantData.Service.PROVIDER.of(enchantment);
319+
EnchantData data = EnchantDataService.PROVIDER.of(enchantment);
318320
int anvilCost = 5;
319321
doReturn(anvilCost).when(data).getAnvilCost();
320322
doReturn(true).when(data).isTridentEnchant();
@@ -352,7 +354,7 @@ void getResult() {
352354
doReturn(1).when(behavior).getEnchantMaxLevel(any());
353355

354356
Enchantment enchantment = mock();
355-
EnchantData data = EnchantData.Service.PROVIDER.of(enchantment);
357+
EnchantData data = EnchantDataService.PROVIDER.of(enchantment);
356358
doReturn(5).when(data).getAnvilCost();
357359
doReturn(Map.of()).doReturn(Map.of(enchantment, 1)).when(access).getEnchantments(any());
358360

@@ -381,7 +383,7 @@ void getResultNegative() {
381383
doReturn(view).when(state).getAnvilView();
382384

383385
Enchantment enchantment = mock();
384-
EnchantData data = EnchantData.Service.PROVIDER.of(enchantment);
386+
EnchantData data = EnchantDataService.PROVIDER.of(enchantment);
385387
doReturn(5).when(data).getAnvilCost();
386388
doReturn(Map.of(enchantment, -2)).when(access).getEnchantments(any());
387389

enchanting-common/src/test/java/com/github/jikoo/planarenchanting/anvil/PlanarForgeTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ void beforeEach() {
5151
functions = mock(Mockito.RETURNS_MOCKS);
5252
forgeResult = mock();
5353
anvil = new PlanarForge<>(
54-
view -> {
54+
localView -> {
5555
WorkPiece<Void> piece = mock();
5656
doReturn(forgeResult).when(piece).temper();
5757
doAnswer(invocation -> {

enchanting-common/src/test/java/com/github/jikoo/planarenchanting/table/EnchantingTableTest.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
import static org.mockito.Mockito.mockStatic;
2020

2121
import com.github.jikoo.planarenchanting.util.EnchantData;
22+
import com.github.jikoo.planarenchanting.util.EnchantDataService;
23+
2224
import java.util.Arrays;
2325
import java.util.Collection;
2426
import java.util.List;
@@ -96,7 +98,7 @@ void setUpEach() {
9698
}
9799

98100
static void setUpToolEnchants() {
99-
EnchantData data = EnchantData.Service.PROVIDER.of(Enchantment.EFFICIENCY);
101+
EnchantData data = EnchantDataService.PROVIDER.of(Enchantment.EFFICIENCY);
100102
doReturn(10).when(data).getWeight();
101103
doAnswer(invocation -> {
102104
int level = invocation.getArgument(0);
@@ -108,7 +110,7 @@ static void setUpToolEnchants() {
108110
}).when(data).getMaxModifiedCost(anyInt());
109111
doReturn(5).when(Enchantment.EFFICIENCY).getMaxLevel();
110112

111-
data = EnchantData.Service.PROVIDER.of(Enchantment.UNBREAKING);
113+
data = EnchantDataService.PROVIDER.of(Enchantment.UNBREAKING);
112114
doReturn(5).when(data).getWeight();
113115
doAnswer(invocation -> {
114116
int level = invocation.getArgument(0);
@@ -120,7 +122,7 @@ static void setUpToolEnchants() {
120122
}).when(data).getMaxModifiedCost(anyInt());
121123
doReturn(3).when(Enchantment.UNBREAKING).getMaxLevel();
122124

123-
data = EnchantData.Service.PROVIDER.of(Enchantment.FORTUNE);
125+
data = EnchantDataService.PROVIDER.of(Enchantment.FORTUNE);
124126
doReturn(2).when(data).getWeight();
125127
doAnswer(invocation -> {
126128
int level = invocation.getArgument(0);
@@ -132,7 +134,7 @@ static void setUpToolEnchants() {
132134
}).when(data).getMaxModifiedCost(anyInt());
133135
doReturn(3).when(Enchantment.FORTUNE).getMaxLevel();
134136

135-
data = EnchantData.Service.PROVIDER.of(Enchantment.SILK_TOUCH);
137+
data = EnchantDataService.PROVIDER.of(Enchantment.SILK_TOUCH);
136138
doReturn(1).when(data).getWeight();
137139
doReturn(15).when(data).getMinModifiedCost(anyInt());
138140
doReturn(65).when(data).getMaxModifiedCost(anyInt());
@@ -231,7 +233,7 @@ private boolean conflicts(Enchantment enchantment1, Enchantment enchantment2) {
231233
@ParameterizedTest
232234
@CsvSource({"1,0", "10,0", "15,0", "1,12348", "10,98124", "15,23479"})
233235
void testGetButtonLevels(int shelves, int seed) {
234-
Random random = new Random(seed);
236+
random.setSeed(seed);
235237
int[] buttonLevels1 = EnchantingTable.getButtonLevels(random, shelves);
236238
random.setSeed(seed);
237239
int[] buttonLevels2 = EnchantingTable.getButtonLevels(random, shelves);

enchanting-common/src/test/java/com/github/jikoo/planarenchanting/table/TableEnchantListenerTest.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,8 @@
6060
class TableEnchantListenerTest {
6161

6262
private MockedStatic<Bukkit> bukkit;
63-
private final Material ENCHANTABLE_MATERIAL = Material.COAL_ORE;
64-
private final Material UNENCHANTABLE_MATERIAL = Material.DIRT;
63+
private final Material enchantableMaterial = Material.COAL_ORE;
64+
private final Material unenchantableMaterial = Material.DIRT;
6565
private Enchantment validEnchant;
6666
private Collection<Enchantment> toolEnchants;
6767

@@ -77,9 +77,9 @@ void setUpAll() {
7777
bukkit.when(() -> Bukkit.getRegistry(any())).thenAnswer(inv -> {
7878
Registry<Enchantment> registry = mock();
7979
doAnswer(invocation -> {
80-
NamespacedKey key = invocation.getArgument(0);
80+
NamespacedKey invocationKey = invocation.getArgument(0);
8181
Enchantment enchant = mock();
82-
doReturn(key).when(enchant).getKey();
82+
doReturn(invocationKey).when(enchant).getKey();
8383
return enchant;
8484
}).when(registry).getOrThrow(any());
8585
return registry;
@@ -114,7 +114,7 @@ void setUp() {
114114

115115
@Override
116116
protected boolean isIneligible(Player player, ItemStack enchanted) {
117-
return itemStack.getType() != ENCHANTABLE_MATERIAL;
117+
return itemStack.getType() != enchantableMaterial;
118118
}
119119

120120
@Override
@@ -148,7 +148,7 @@ protected EnchantingTable getTable(Player player, ItemStack enchanted) {
148148
}).when(player).setEnchantmentSeed(anyInt());
149149

150150
itemStack = mock();
151-
doReturn(ENCHANTABLE_MATERIAL).when(itemStack).getType();
151+
doReturn(enchantableMaterial).when(itemStack).getType();
152152
doReturn(1).when(itemStack).getAmount();
153153
key = new NamespacedKey(plugin, "enchanting_table_seed");
154154
}
@@ -167,7 +167,7 @@ void testCanNotEnchantStack() {
167167

168168
@Test
169169
void testCanNotEnchantWrongMaterial() {
170-
doReturn(UNENCHANTABLE_MATERIAL).when(itemStack).getType();
170+
doReturn(unenchantableMaterial).when(itemStack).getType();
171171
assertThat(
172172
"Material with no enchants cannot be enchanted",
173173
listener.canNotEnchant(player, itemStack));
@@ -183,7 +183,7 @@ void testCanEnchant() {
183183

184184
@Test
185185
void testPrepareItemEnchantInvalid() {
186-
doReturn(UNENCHANTABLE_MATERIAL).when(itemStack).getType();
186+
doReturn(unenchantableMaterial).when(itemStack).getType();
187187
var event = prepareEvent(15);
188188
assertDoesNotThrow(() -> listener.onPrepareItemEnchant(event));
189189
assertThat(

enchanting-components/src/main/java/com/github/jikoo/planarenchanting/anvil/ComponentAnvilFunctions.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,7 @@ public void modifyResult(ItemStack modified) {
228228
public static final AnvilFunction<ItemStack> COMBINE_ENCHANTMENTS_JAVA;
229229
public static final AnvilFunction<ItemStack> COMBINE_ENCHANTMENTS_BEDROCK;
230230

231-
public static ComponentAnvilFunctions INSTANCE = new ComponentAnvilFunctions();
231+
public static final ComponentAnvilFunctions INSTANCE = new ComponentAnvilFunctions();
232232

233233
static {
234234
ComponentEnchantmentAccess access = new ComponentEnchantmentAccess();

enchanting-generator/src/main/java/com/github/jikoo/planarenchanting/generator/Generator.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public abstract class Generator {
2323
protected final ClassName generatedClass;
2424
protected TypeSpec.@UnknownNullability Builder builder;
2525

26-
public Generator(String pkg, String name) {
26+
protected Generator(String pkg, String name) {
2727
this.generatedClass = ClassName.get(pkg, name);
2828
}
2929

@@ -105,7 +105,7 @@ protected String tweakFormatting(String content) {
105105
/**
106106
* Lenient annotation declaration. This is a bit hairy, because annotations may have values set.
107107
*/
108-
private static final @RegExp String ANNOTATION = "@[\\w.]+(?:\\(.*?\\))?";
108+
private static final @RegExp String ANNOTATION = "@[\\w.]+(?:\\([^\\)]*+\\))?";
109109
/** Lenient generic type declaration. */
110110
private static final @RegExp String GENERIC = "<(?:(?:" + ANNOTATION + " )*?[\\w<>, ]+)+>";
111111
/**
@@ -157,7 +157,7 @@ protected String tweakFormatting(String content) {
157157
// Javadoc comments. Multi-line only, because JavaPoet only generates multi-line Javadocs.
158158
+ "(?: {2}/\\*\\*\n(?:.*\n)*?\\s*\\*/\n)?"
159159
// Regular comments in case of comment hack fields.
160-
+ "(?: {2}//.*?\n)?"
160+
+ "(?: {2}//[^\\n]*+\n)?"
161161
// Any annotations.
162162
+ "(?: {2}" + ANNOTATION + "\n)*?"
163163
// Matching indent.

0 commit comments

Comments
 (0)