Skip to content
This repository was archived by the owner on Jun 3, 2024. It is now read-only.

Commit d315562

Browse files
NuclearfartsNuclearfarts
authored andcommitted
changes from review
1 parent d368a39 commit d315562

12 files changed

Lines changed: 55 additions & 54 deletions

patchwork-enum-hacks/src/main/java/com/patchworkmc/api/enumhacks/EnumHacks.java

Lines changed: 16 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import java.lang.invoke.MethodHandles;
2626
import java.lang.invoke.MethodType;
2727
import java.lang.reflect.Field;
28+
import java.util.function.IntFunction;
2829
import java.util.function.Predicate;
2930

3031
import com.google.common.collect.ImmutableList;
@@ -134,71 +135,51 @@ private static void clearCachedValues(Class<? extends Enum<?>> clazz) {
134135
}
135136
}
136137

137-
public static Rarity createRarity(String name, Formatting formatting) {
138-
Rarity[] values = Rarity.values(); //each values call creates a copy of the array. avoid them.
139-
Rarity instance = RarityAccessor.invokeConstructor(name, values.length, formatting);
138+
private static <T extends Enum<T>> T constructAndAdd(Class<T> clazz, IntFunction<? extends T> constructor) {
139+
T[] values = clazz.getEnumConstants();
140+
T instance = constructor.apply(values.length);
140141
addToValues(values, instance);
141-
clearCachedValues(Rarity.class);
142+
clearCachedValues(clazz);
142143
return instance;
143144
}
144145

146+
public static Rarity createRarity(String name, Formatting formatting) {
147+
return constructAndAdd(Rarity.class, ordinal -> RarityAccessor.invokeConstructor(name, ordinal, formatting));
148+
}
149+
145150
public static EntityCategory createEntityCategory(String constantName, String name, int spawnCap, boolean peaceful, boolean animal) {
146-
EntityCategory[] values = EntityCategory.values();
147-
EntityCategory instance = EntityCategoryAccessor.invokeConstructor(constantName, values.length, name, spawnCap, peaceful, animal);
148-
addToValues(values, instance);
149-
clearCachedValues(EntityCategory.class);
150-
return instance;
151+
return constructAndAdd(EntityCategory.class, ordinal -> EntityCategoryAccessor.invokeConstructor(constantName, ordinal, name, spawnCap, peaceful, animal));
151152
}
152153

153154
public static StructurePool.Projection createStructurePoolProjection(String name, String id, ImmutableList<StructureProcessor> processors) {
154-
StructurePool.Projection[] values = StructurePool.Projection.values();
155-
StructurePool.Projection instance = StructurePoolProjectionAccessor.invokeConstructor(name, values.length, id, processors);
156-
addToValues(values, instance);
157-
clearCachedValues(StructurePool.Projection.class);
155+
StructurePool.Projection instance = constructAndAdd(StructurePool.Projection.class, ordinal -> StructurePoolProjectionAccessor.invokeConstructor(name, ordinal, id, processors));
158156
StructurePoolProjectionAccessor.getIdProjectionMap().put(id, instance);
159157
return instance;
160158
}
161159

162160
public static OreFeatureConfig.Target createOreFeatureConfigTarget(String constantName, String name, Predicate<BlockState> predicate) {
163-
OreFeatureConfig.Target[] values = OreFeatureConfig.Target.values();
164-
OreFeatureConfig.Target instance = OreFeatureConfigTargetAccessor.invokeConstructor(constantName, values.length, name, predicate);
165-
addToValues(values, instance);
166-
clearCachedValues(OreFeatureConfig.Target.class);
161+
OreFeatureConfig.Target instance = constructAndAdd(OreFeatureConfig.Target.class, ordinal -> OreFeatureConfigTargetAccessor.invokeConstructor(constantName, ordinal, name, predicate));
167162
OreFeatureConfigTargetAccessor.getNameMap().put(name, instance);
168163
return instance;
169164
}
170165

171166
public static BannerPattern createBannerPattern(String constantName, String name, String id, ItemStack baseStack) {
172-
BannerPattern[] values = BannerPattern.values();
173-
BannerPattern instance = BannerPatternAccessor.invokeConstructor(constantName, values.length, name, id, baseStack);
174-
addToValues(values, instance);
175-
clearCachedValues(BannerPattern.class);
176-
return instance;
167+
return constructAndAdd(BannerPattern.class, ordinal -> BannerPatternAccessor.invokeConstructor(constantName, ordinal, name, id, baseStack));
177168
}
178169

179170
public static BannerPattern createBannerPattern(String constantName, String name, String id, String recipePattern0, String recipePattern1, String recipePattern2) {
180-
BannerPattern[] values = BannerPattern.values();
181-
BannerPattern instance = BannerPatternAccessor.invokeConstructor(constantName, values.length, name, id, recipePattern0, recipePattern1, recipePattern2);
182-
addToValues(values, instance);
183-
clearCachedValues(BannerPattern.class);
184-
return instance;
171+
return constructAndAdd(BannerPattern.class, ordinal -> BannerPatternAccessor.invokeConstructor(constantName, ordinal, name, id, recipePattern0, recipePattern1, recipePattern2));
185172
}
186173

187174
public static SpawnRestriction.Location createSpawnRestrictionLocation(String name, TriPredicate<ViewableWorld, BlockPos, EntityType<?>> predicate) {
188-
SpawnRestriction.Location[] values = SpawnRestriction.Location.values();
189-
SpawnRestriction.Location instance = SpawnRestrictionLocationAccessor.invokeConstructor(name, values.length);
175+
SpawnRestriction.Location instance = constructAndAdd(SpawnRestriction.Location.class, ordinal -> SpawnRestrictionLocationAccessor.invokeConstructor(name, ordinal));
190176
((PatchworkSpawnRestrictionLocation) (Object) instance).patchwork_setPredicate(predicate);
191-
addToValues(values, instance);
192-
clearCachedValues(SpawnRestriction.Location.class);
193177
return instance;
194178
}
195179

196180
public static EnchantmentTarget createEnchantmentTarget(String name, Predicate<Item> predicate) {
197-
EnchantmentTarget[] values = EnchantmentTarget.values();
198-
EnchantmentTarget instance = ENCHANTMENT_TARGET_FACTORY.create(name, values.length);
181+
EnchantmentTarget instance = constructAndAdd(EnchantmentTarget.class, ordinal -> ENCHANTMENT_TARGET_FACTORY.create(name, ordinal));
199182
((PatchworkEnchantmentTarget) instance).patchwork_setPredicate(predicate);
200-
addToValues(values, instance);
201-
clearCachedValues(EnchantmentTarget.class);
202183
return instance;
203184
}
204185

patchwork-enum-hacks/src/main/java/com/patchworkmc/impl/enumhacks/PatchworkSpawnRestrictionLocation.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,14 @@
2222
import net.minecraftforge.common.util.TriPredicate;
2323

2424
import net.minecraft.entity.EntityType;
25-
import net.minecraft.entity.SpawnRestriction;
2625
import net.minecraft.util.math.BlockPos;
2726
import net.minecraft.world.ViewableWorld;
2827

29-
public interface PatchworkSpawnRestrictionLocation extends HackableEnum<SpawnRestriction.Location> {
28+
public interface PatchworkSpawnRestrictionLocation {
3029
boolean patchwork_useVanillaBehavior();
3130

3231
void patchwork_setPredicate(TriPredicate<ViewableWorld, BlockPos, EntityType<?>> predicate);
3332

34-
//Forge method, so no prefix
33+
// Forge method, so no prefix
3534
boolean canSpawnAt(ViewableWorld world, BlockPos pos, EntityType<?> type);
3635
}

patchwork-enum-hacks/src/main/java/com/patchworkmc/mixin/enumhacks/BannerPatternMixin.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,10 @@
3030

3131
@Mixin(BannerPattern.class)
3232
public class BannerPatternMixin implements HackableEnum<BannerPattern> {
33-
private static @Shadow @Final @Mutable BannerPattern[] field_11833;
33+
@Shadow
34+
@Final
35+
@Mutable
36+
private static BannerPattern[] field_11833;
3437

3538
@Override
3639
public void patchwork_setValues(BannerPattern[] values) {

patchwork-enum-hacks/src/main/java/com/patchworkmc/mixin/enumhacks/EnchantmentTargetInnerMixin.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,11 +41,10 @@ public class EnchantmentTargetInnerMixin implements PatchworkEnchantmentTarget {
4141
@Unique
4242
private Predicate<Item> predicate;
4343

44-
// Have to use full signature or the annotation processor complains
4544
@Inject(method = "isAcceptableItem(Lnet/minecraft/item/Item;)Z", at = @At("HEAD"), cancellable = true)
46-
private void checkItem(Item item, CallbackInfoReturnable<Boolean> cir) {
45+
private void checkItem(Item item, CallbackInfoReturnable<Boolean> callback) {
4746
if (isPatchwork) {
48-
cir.setReturnValue(predicate.test(item));
47+
callback.setReturnValue(predicate.test(item));
4948
}
5049
}
5150

patchwork-enum-hacks/src/main/java/com/patchworkmc/mixin/enumhacks/EnchantmentTargetMixin.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,10 @@
3030

3131
@Mixin(EnchantmentTarget.class)
3232
public class EnchantmentTargetMixin implements HackableEnum<EnchantmentTarget> {
33-
private static @Shadow @Final @Mutable EnchantmentTarget[] field_9077;
33+
@Shadow
34+
@Final
35+
@Mutable
36+
private static EnchantmentTarget[] field_9077;
3437

3538
@Override
3639
public void patchwork_setValues(EnchantmentTarget[] values) {

patchwork-enum-hacks/src/main/java/com/patchworkmc/mixin/enumhacks/EntityCategoryMixin.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,10 @@
3030

3131
@Mixin(EntityCategory.class)
3232
public class EntityCategoryMixin implements HackableEnum<EntityCategory> {
33-
private static @Shadow @Final @Mutable EntityCategory[] field_6301;
33+
@Shadow
34+
@Final
35+
@Mutable
36+
private static EntityCategory[] field_6301;
3437

3538
@Override
3639
public void patchwork_setValues(EntityCategory[] values) {

patchwork-enum-hacks/src/main/java/com/patchworkmc/mixin/enumhacks/OreFeatureConfigTargetMixin.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,10 @@
3030

3131
@Mixin(OreFeatureConfig.Target.class)
3232
public class OreFeatureConfigTargetMixin implements HackableEnum<OreFeatureConfig.Target> {
33-
private static @Shadow @Final @Mutable OreFeatureConfig.Target[] field_13729;
33+
@Shadow
34+
@Final
35+
@Mutable
36+
private static OreFeatureConfig.Target[] field_13729;
3437

3538
@Override
3639
public void patchwork_setValues(OreFeatureConfig.Target[] values) {

patchwork-enum-hacks/src/main/java/com/patchworkmc/mixin/enumhacks/RarityMixin.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,10 @@
3030

3131
@Mixin(Rarity.class)
3232
public class RarityMixin implements HackableEnum<Rarity> {
33-
private static @Shadow @Final @Mutable Rarity[] field_8905;
33+
@Shadow
34+
@Final
35+
@Mutable
36+
private static Rarity[] field_8905;
3437

3538
@Override
3639
public void patchwork_setValues(Rarity[] values) {

patchwork-enum-hacks/src/main/java/com/patchworkmc/mixin/enumhacks/SpawnHelperMixin.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,16 +34,16 @@
3434

3535
@Mixin(SpawnHelper.class)
3636
public class SpawnHelperMixin {
37-
@Inject(method = "canSpawn",
37+
@Inject(method = "canSpawn(Lnet/minecraft/entity/SpawnRestriction$Location;Lnet/minecraft/world/CollisionView;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/entity/EntityType;)Z",
3838
at = @At(value = "INVOKE", target = "net/minecraft/world/ViewableWorld.getBlockState(Lnet/minecraft/util/math/BlockPos;)Lnet/minecraft/block/BlockState;"),
3939
cancellable = true)
40-
private static void handleCustomSpawnRestrictionLocation(SpawnRestriction.Location location, ViewableWorld viewableWorld, BlockPos blockPos, EntityType<?> entityType, CallbackInfoReturnable<Boolean> cir) {
40+
private static void handleCustomSpawnRestrictionLocation(SpawnRestriction.Location location, ViewableWorld world, BlockPos pos, EntityType<?> type, CallbackInfoReturnable<Boolean> callback) {
4141
PatchworkSpawnRestrictionLocation patchworkLocation = (PatchworkSpawnRestrictionLocation) (Object) location;
4242

4343
if (patchworkLocation.patchwork_useVanillaBehavior()) {
4444
return;
4545
}
4646

47-
cir.setReturnValue(patchworkLocation.canSpawnAt(viewableWorld, blockPos, entityType));
47+
callback.setReturnValue(patchworkLocation.canSpawnAt(world, pos, type));
4848
}
4949
}

patchwork-enum-hacks/src/main/java/com/patchworkmc/mixin/enumhacks/SpawnRestrictionLocationMixin.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,14 +31,18 @@
3131
import net.minecraft.util.math.BlockPos;
3232
import net.minecraft.world.ViewableWorld;
3333

34+
import com.patchworkmc.impl.enumhacks.HackableEnum;
3435
import com.patchworkmc.impl.enumhacks.PatchworkSpawnRestrictionLocation;
3536

3637
@Mixin(SpawnRestriction.Location.class)
37-
public class SpawnRestrictionLocationMixin implements PatchworkSpawnRestrictionLocation {
38+
public class SpawnRestrictionLocationMixin implements PatchworkSpawnRestrictionLocation, HackableEnum<SpawnRestriction.Location> {
3839
@Unique
3940
private TriPredicate<ViewableWorld, BlockPos, EntityType<?>> predicate;
4041

41-
private static @Shadow @Final @Mutable SpawnRestriction.Location[] field_6319;
42+
@Shadow
43+
@Final
44+
@Mutable
45+
private static SpawnRestriction.Location[] field_6319;
4246

4347
public boolean canSpawnAt(ViewableWorld world, BlockPos pos, EntityType<?> type) {
4448
return predicate.test(world, pos, type);

0 commit comments

Comments
 (0)