provider) {
diff --git a/common/src/main/java/me/shedaniel/architectury/registry/fuel/FuelRegistry.java b/common/src/main/java/me/shedaniel/architectury/registry/fuel/FuelRegistry.java
index b2b0a0dd..32bc7cbd 100644
--- a/common/src/main/java/me/shedaniel/architectury/registry/fuel/FuelRegistry.java
+++ b/common/src/main/java/me/shedaniel/architectury/registry/fuel/FuelRegistry.java
@@ -24,7 +24,8 @@ import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.ItemLike;
public final class FuelRegistry {
- private FuelRegistry() {}
+ private FuelRegistry() {
+ }
/**
* Registers a burn time for items.
diff --git a/common/src/main/java/me/shedaniel/architectury/registry/trade/SimpleTrade.java b/common/src/main/java/me/shedaniel/architectury/registry/trade/SimpleTrade.java
new file mode 100644
index 00000000..4a532bf9
--- /dev/null
+++ b/common/src/main/java/me/shedaniel/architectury/registry/trade/SimpleTrade.java
@@ -0,0 +1,73 @@
+/*
+ * This file is part of architectury.
+ * Copyright (C) 2020, 2021 architectury
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+package me.shedaniel.architectury.registry.trade;
+
+import net.minecraft.world.entity.Entity;
+import net.minecraft.world.entity.npc.VillagerTrades;
+import net.minecraft.world.item.ItemStack;
+import net.minecraft.world.item.trading.MerchantOffer;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.Random;
+
+/**
+ * This class is the easiest implementation of a trade object.
+ * All trades added by vanilla do have custom classes like {@link VillagerTrades.EmeraldForItems}, but they aren't accessible.
+ *
+ * Instead of widening the access of those classes or recreating them, this class was added to serve a basic trading implementation.
+ * To register a trade, just call
+ * {@link TradeRegistry#registerVillagerTrade(net.minecraft.world.entity.npc.VillagerProfession, int, VillagerTrades.ItemListing...)}
+ * or
+ * {@link TradeRegistry#registerTradeForWanderingTrader(boolean, VillagerTrades.ItemListing...)}.
+ */
+public class SimpleTrade implements VillagerTrades.ItemListing {
+ private final ItemStack primaryPrice;
+ private final ItemStack secondaryPrice;
+ private final ItemStack sale;
+ private final int maxTrades;
+ private final int experiencePoints;
+ private final float priceMultiplier;
+
+ /**
+ * Constructor for creating the trade.
+ * You can take a look at all the values the vanilla game uses right here {@link VillagerTrades#TRADES}.
+ *
+ * @param primaryPrice The first price a player has to pay to get the 'sale' stack.
+ * @param secondaryPrice A optional, secondary price to pay as well as the primary one. If not needed just use {@link ItemStack#EMPTY}.
+ * @param sale The ItemStack which a player can purchase in exchange for the two prices.
+ * @param maxTrades The amount of trades one villager or wanderer can do. When the amount is surpassed, the trade can't be purchased anymore.
+ * @param experiencePoints How much experience points does the player get, when trading. Vanilla uses between 2 and 30 for this.
+ * @param priceMultiplier How much should the price rise, after the trade is used. It is added to the stack size of the primary price. Vanilla uses between 0.05 and 0.2.
+ */
+ public SimpleTrade(ItemStack primaryPrice, ItemStack secondaryPrice, ItemStack sale, int maxTrades, int experiencePoints, float priceMultiplier) {
+ this.primaryPrice = primaryPrice;
+ this.secondaryPrice = secondaryPrice;
+ this.sale = sale;
+ this.maxTrades = maxTrades;
+ this.experiencePoints = experiencePoints;
+ this.priceMultiplier = priceMultiplier;
+ }
+
+ @Nullable
+ @Override
+ public MerchantOffer getOffer(Entity entity, Random random) {
+ return new MerchantOffer(this.primaryPrice, this.secondaryPrice, this.sale, this.maxTrades, this.experiencePoints, this.priceMultiplier);
+ }
+}
diff --git a/common/src/main/java/me/shedaniel/architectury/registry/trade/TradeRegistry.java b/common/src/main/java/me/shedaniel/architectury/registry/trade/TradeRegistry.java
new file mode 100644
index 00000000..c5d96efa
--- /dev/null
+++ b/common/src/main/java/me/shedaniel/architectury/registry/trade/TradeRegistry.java
@@ -0,0 +1,62 @@
+/*
+ * This file is part of architectury.
+ * Copyright (C) 2020, 2021 architectury
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+package me.shedaniel.architectury.registry.trade;
+
+import me.shedaniel.architectury.annotations.ExpectPlatform;
+import net.minecraft.world.entity.npc.VillagerProfession;
+import net.minecraft.world.entity.npc.VillagerTrades;
+
+public class TradeRegistry {
+ private TradeRegistry() {
+ }
+
+ /**
+ * Register a trade ({@link VillagerTrades.ItemListing}) for a villager by its profession and level.
+ * When the mod loader is Forge, the {@code VillagerTradesEvent} event is used.
+ *
+ * @param profession The Profession the villager needs to have this trade.
+ * @param level The level the villager needs. Vanilla range is 1 to 5, however mods may extend that upper limit further.
+ * @param trades The trades to add to this profession at the specified level.
+ */
+ public static void registerVillagerTrade(VillagerProfession profession, int level, VillagerTrades.ItemListing... trades) {
+ if (level < 1) {
+ throw new IllegalArgumentException("Villager Trade level has to be at least 1!");
+ }
+ registerVillagerTrade0(profession, level, trades);
+ }
+
+ @ExpectPlatform
+ private static void registerVillagerTrade0(VillagerProfession profession, int level, VillagerTrades.ItemListing... trades) {
+ throw new AssertionError();
+ }
+
+ /**
+ * Register a trade ({@link VillagerTrades.ItemListing}) to a wandering trader by its rarity.
+ * When the mod loader is Forge, the {@code WandererTradesEvent} event is used.
+ *
+ * @param rare Whether this trade is "rare". Rare trades have a five times lower chance of being used.
+ * @param trades The trades to add to the wandering trader.
+ */
+ @ExpectPlatform
+ public static void registerTradeForWanderingTrader(boolean rare, VillagerTrades.ItemListing... trades) {
+ throw new AssertionError();
+ }
+
+}
diff --git a/common/src/main/java/me/shedaniel/architectury/utils/EnvExecutor.java b/common/src/main/java/me/shedaniel/architectury/utils/EnvExecutor.java
index 088a51ce..59de5923 100644
--- a/common/src/main/java/me/shedaniel/architectury/utils/EnvExecutor.java
+++ b/common/src/main/java/me/shedaniel/architectury/utils/EnvExecutor.java
@@ -56,5 +56,6 @@ public final class EnvExecutor {
}
}
- private EnvExecutor() {}
+ private EnvExecutor() {
+ }
}
diff --git a/common/src/main/java/me/shedaniel/architectury/utils/NbtType.java b/common/src/main/java/me/shedaniel/architectury/utils/NbtType.java
index 0a9161b6..7d3d3f42 100644
--- a/common/src/main/java/me/shedaniel/architectury/utils/NbtType.java
+++ b/common/src/main/java/me/shedaniel/architectury/utils/NbtType.java
@@ -40,5 +40,6 @@ public final class NbtType {
*/
public static final int NUMBER = 99;
- private NbtType() {}
+ private NbtType() {
+ }
}
diff --git a/common/src/main/java/me/shedaniel/architectury/utils/PlatformExpectedError.java b/common/src/main/java/me/shedaniel/architectury/utils/PlatformExpectedError.java
index 96bf0d67..e62cb9b4 100644
--- a/common/src/main/java/me/shedaniel/architectury/utils/PlatformExpectedError.java
+++ b/common/src/main/java/me/shedaniel/architectury/utils/PlatformExpectedError.java
@@ -22,19 +22,19 @@ package me.shedaniel.architectury.utils;
public class PlatformExpectedError extends Error {
public PlatformExpectedError() {
}
-
+
public PlatformExpectedError(String message) {
super(message);
}
-
+
public PlatformExpectedError(String message, Throwable cause) {
super(message, cause);
}
-
+
public PlatformExpectedError(Throwable cause) {
super(cause);
}
-
+
public PlatformExpectedError(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
}
diff --git a/common/src/main/java/me/shedaniel/architectury/utils/Value.java b/common/src/main/java/me/shedaniel/architectury/utils/Value.java
index ecb63d70..27e65a29 100644
--- a/common/src/main/java/me/shedaniel/architectury/utils/Value.java
+++ b/common/src/main/java/me/shedaniel/architectury/utils/Value.java
@@ -22,4 +22,5 @@ package me.shedaniel.architectury.utils;
import java.util.function.Consumer;
import java.util.function.Supplier;
-public interface Value extends Supplier, Consumer {}
+public interface Value extends Supplier, Consumer {
+}
diff --git a/common/src/main/resources/architectury-common.mixins.json b/common/src/main/resources/architectury-common.mixins.json
index 565d6978..403934b2 100644
--- a/common/src/main/resources/architectury-common.mixins.json
+++ b/common/src/main/resources/architectury-common.mixins.json
@@ -5,7 +5,11 @@
"minVersion": "0.7.11",
"client": [
],
- "mixins": ["MixinFallingBlockEntity", "FluidTagsAccessor", "MixinLightningBolt"],
+ "mixins": [
+ "MixinFallingBlockEntity",
+ "FluidTagsAccessor",
+ "MixinLightningBolt"
+ ],
"injectors": {
"maxShiftBy": 5,
"defaultRequire": 1
diff --git a/fabric/src/main/java/me/shedaniel/architectury/compat/fabric/ModMenuCompatibility.java b/fabric/src/main/java/me/shedaniel/architectury/compat/fabric/ModMenuCompatibility.java
index 065305be..2d3128ac 100644
--- a/fabric/src/main/java/me/shedaniel/architectury/compat/fabric/ModMenuCompatibility.java
+++ b/fabric/src/main/java/me/shedaniel/architectury/compat/fabric/ModMenuCompatibility.java
@@ -22,8 +22,8 @@ package me.shedaniel.architectury.compat.fabric;
import com.google.common.collect.Maps;
import io.github.prospector.modmenu.api.ConfigScreenFactory;
import io.github.prospector.modmenu.api.ModMenuApi;
-import me.shedaniel.architectury.platform.fabric.PlatformImpl;
import me.shedaniel.architectury.platform.Mod;
+import me.shedaniel.architectury.platform.fabric.PlatformImpl;
import java.util.Map;
diff --git a/fabric/src/main/java/me/shedaniel/architectury/hooks/fabric/BlockEntityHooksImpl.java b/fabric/src/main/java/me/shedaniel/architectury/hooks/fabric/BlockEntityHooksImpl.java
index 9df256a3..867ec8d5 100644
--- a/fabric/src/main/java/me/shedaniel/architectury/hooks/fabric/BlockEntityHooksImpl.java
+++ b/fabric/src/main/java/me/shedaniel/architectury/hooks/fabric/BlockEntityHooksImpl.java
@@ -19,7 +19,6 @@
package me.shedaniel.architectury.hooks.fabric;
-import com.google.common.base.Preconditions;
import net.fabricmc.fabric.api.block.entity.BlockEntityClientSerializable;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.level.Level;
diff --git a/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/ExplosionPreInvoker.java b/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/ExplosionPreInvoker.java
index d6d352bd..ad00385d 100644
--- a/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/ExplosionPreInvoker.java
+++ b/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/ExplosionPreInvoker.java
@@ -35,10 +35,10 @@ import org.spongepowered.asm.mixin.injection.callback.LocalCapture;
@Mixin(value = {Level.class, ServerLevel.class})
public class ExplosionPreInvoker {
- @Inject(method = "explode(Lnet/minecraft/world/entity/Entity;Lnet/minecraft/world/damagesource/DamageSource;Lnet/minecraft/world/level/ExplosionDamageCalculator;DDDFZLnet/minecraft/world/level/Explosion$BlockInteraction;)Lnet/minecraft/world/level/Explosion;",
+ @Inject(method = "explode(Lnet/minecraft/world/entity/Entity;Lnet/minecraft/world/damagesource/DamageSource;Lnet/minecraft/world/level/ExplosionDamageCalculator;DDDFZLnet/minecraft/world/level/Explosion$BlockInteraction;)Lnet/minecraft/world/level/Explosion;",
at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/Explosion;explode()V"), cancellable = true, locals = LocalCapture.CAPTURE_FAILHARD)
private void explodePre(Entity entity, DamageSource damageSource, ExplosionDamageCalculator explosionDamageCalculator, double d, double e, double f, float g, boolean bl, Explosion.BlockInteraction blockInteraction, CallbackInfoReturnable cir, Explosion explosion) {
- if (ExplosionEvent.PRE.invoker().explode((Level)(Object) this, explosion) == InteractionResult.FAIL) {
+ if (ExplosionEvent.PRE.invoker().explode((Level) (Object) this, explosion) == InteractionResult.FAIL) {
cir.setReturnValue(explosion);
}
}
diff --git a/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinBlockItem.java b/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinBlockItem.java
index 70c31fb9..04405873 100644
--- a/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinBlockItem.java
+++ b/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinBlockItem.java
@@ -32,7 +32,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
public abstract class MixinBlockItem {
@Inject(method = "place",
at = @At(value = "INVOKE",
- target = "Lnet/minecraft/world/item/context/BlockPlaceContext;getClickedPos()Lnet/minecraft/core/BlockPos;"),
+ target = "Lnet/minecraft/world/item/context/BlockPlaceContext;getClickedPos()Lnet/minecraft/core/BlockPos;"),
cancellable = true)
private void place(BlockPlaceContext context, CallbackInfoReturnable cir) {
InteractionResult result = BlockEvent.PLACE.invoker().placeBlock(context.getLevel(), context.getClickedPos(), context.getLevel().getBlockState(context.getClickedPos()), context.getPlayer());
diff --git a/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinCommands.java b/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinCommands.java
index 70de43ae..af5d3be2 100644
--- a/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinCommands.java
+++ b/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinCommands.java
@@ -35,7 +35,7 @@ import org.spongepowered.asm.mixin.injection.Redirect;
@Mixin(Commands.class)
public class MixinCommands {
@Redirect(method = "performCommand",
- at = @At(value = "INVOKE", target = "Lcom/mojang/brigadier/CommandDispatcher;execute(Lcom/mojang/brigadier/StringReader;Ljava/lang/Object;)I", remap = false))
+ at = @At(value = "INVOKE", target = "Lcom/mojang/brigadier/CommandDispatcher;execute(Lcom/mojang/brigadier/StringReader;Ljava/lang/Object;)I", remap = false))
private int performCommand(CommandDispatcher dispatcher, StringReader input, Object source) throws CommandSyntaxException {
CommandSourceStack stack = (CommandSourceStack) source;
ParseResults parse = dispatcher.parse(input, stack);
diff --git a/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinExplosion.java b/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinExplosion.java
index ce4b5d14..a777903f 100644
--- a/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinExplosion.java
+++ b/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinExplosion.java
@@ -38,13 +38,28 @@ import java.util.Set;
@Mixin(Explosion.class)
public class MixinExplosion implements ExplosionHooksImpl.ExplosionExtensions {
- @Shadow @Final private Level level;
- @Shadow @Final private double x;
- @Shadow @Final private double y;
- @Shadow @Final private double z;
- @Shadow @Final @Nullable private Entity source;
- @Shadow @Final @Mutable private float radius;
- @Unique Vec3 position;
+ @Shadow
+ @Final
+ private Level level;
+ @Shadow
+ @Final
+ private double x;
+ @Shadow
+ @Final
+ private double y;
+ @Shadow
+ @Final
+ private double z;
+ @Shadow
+ @Final
+ @Nullable
+ private Entity source;
+ @Shadow
+ @Final
+ @Mutable
+ private float radius;
+ @Unique
+ Vec3 position;
@Inject(method = "explode", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/phys/Vec3;(DDD)V", ordinal = 0),
locals = LocalCapture.CAPTURE_FAILHARD)
diff --git a/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinFarmBlock.java b/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinFarmBlock.java
index c2e27c85..422df92b 100644
--- a/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinFarmBlock.java
+++ b/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinFarmBlock.java
@@ -21,19 +21,15 @@ package me.shedaniel.architectury.mixin.fabric;
import me.shedaniel.architectury.event.events.InteractionEvent;
import net.minecraft.core.BlockPos;
-import net.minecraft.util.Tuple;
-import net.minecraft.world.InteractionResult;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.FarmBlock;
import net.minecraft.world.level.block.state.BlockState;
import org.apache.commons.lang3.tuple.Triple;
import org.spongepowered.asm.mixin.Mixin;
-import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.Unique;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
-import org.spongepowered.asm.mixin.injection.Redirect;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin(FarmBlock.class)
diff --git a/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinFurnaceResultSlot.java b/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinFurnaceResultSlot.java
index 27692b9d..fcd89347 100644
--- a/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinFurnaceResultSlot.java
+++ b/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinFurnaceResultSlot.java
@@ -32,7 +32,9 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin(FurnaceResultSlot.class)
public class MixinFurnaceResultSlot {
- @Shadow @Final private Player player;
+ @Shadow
+ @Final
+ private Player player;
@Inject(method = "checkTakeAchievements", at = @At("RETURN"))
private void checkTakeAchievements(ItemStack itemStack, CallbackInfo ci) {
diff --git a/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinNaturalSpawner.java b/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinNaturalSpawner.java
index 65977ee8..c068200f 100644
--- a/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinNaturalSpawner.java
+++ b/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinNaturalSpawner.java
@@ -22,7 +22,8 @@ package me.shedaniel.architectury.mixin.fabric;
import me.shedaniel.architectury.event.EventResult;
import me.shedaniel.architectury.event.events.EntityEvent;
import net.minecraft.server.level.ServerLevel;
-import net.minecraft.world.entity.*;
+import net.minecraft.world.entity.Mob;
+import net.minecraft.world.entity.MobSpawnType;
import net.minecraft.world.level.LevelAccessor;
import net.minecraft.world.level.NaturalSpawner;
import org.spongepowered.asm.mixin.Mixin;
diff --git a/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinPhantomSpawner.java b/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinPhantomSpawner.java
index 322b79e6..8c5a5a09 100644
--- a/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinPhantomSpawner.java
+++ b/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinPhantomSpawner.java
@@ -53,8 +53,8 @@ public abstract class MixinPhantomSpawner {
locals = LocalCapture.CAPTURE_FAILSOFT // SOFT, because this will break in 2 seconds
)
private void checkPhantomSpawn(ServerLevel level, boolean bl, boolean bl2, CallbackInfoReturnable cir,
- Random random, int i, Iterator it, Player player, BlockPos pos, DifficultyInstance diff, BlockPos pos2,
- SpawnGroupData sgd, int l, int m, Phantom entity) {
+ Random random, int i, Iterator it, Player player, BlockPos pos, DifficultyInstance diff, BlockPos pos2,
+ SpawnGroupData sgd, int l, int m, Phantom entity) {
if (EntityEvent.LIVING_CHECK_SPAWN.invoker().canSpawn(entity, level, pos.getX(), pos.getY(), pos.getZ(), MobSpawnType.NATURAL, null).value() == Boolean.FALSE) {
cir.setReturnValue(0);
cir.cancel();
diff --git a/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinPlayer.java b/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinPlayer.java
index 1af6979c..07fd34ad 100644
--- a/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinPlayer.java
+++ b/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinPlayer.java
@@ -54,8 +54,8 @@ public class MixinPlayer {
}
@Inject(method = "interactOn", at = @At(value = "INVOKE",
- target = "Lnet/minecraft/world/entity/player/Player;getItemInHand(Lnet/minecraft/world/InteractionHand;)Lnet/minecraft/world/item/ItemStack;",
- ordinal = 0),
+ target = "Lnet/minecraft/world/entity/player/Player;getItemInHand(Lnet/minecraft/world/InteractionHand;)Lnet/minecraft/world/item/ItemStack;",
+ ordinal = 0),
cancellable = true)
private void entityInteract(Entity entity, InteractionHand interactionHand, CallbackInfoReturnable cir) {
InteractionResult result = InteractionEvent.INTERACT_ENTITY.invoker().interact((Player) (Object) this, entity, interactionHand);
diff --git a/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinPlayerAdvancements.java b/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinPlayerAdvancements.java
index 5edda21d..4cb98a2c 100644
--- a/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinPlayerAdvancements.java
+++ b/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinPlayerAdvancements.java
@@ -31,11 +31,12 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
@Mixin(PlayerAdvancements.class)
public class MixinPlayerAdvancements {
- @Shadow private ServerPlayer player;
+ @Shadow
+ private ServerPlayer player;
@Inject(method = "award",
at = @At(value = "INVOKE", target = "Lnet/minecraft/advancements/AdvancementRewards;grant(Lnet/minecraft/server/level/ServerPlayer;)V",
- shift = At.Shift.AFTER))
+ shift = At.Shift.AFTER))
private void award(Advancement advancement, String string, CallbackInfoReturnable cir) {
PlayerEvent.PLAYER_ADVANCEMENT.invoker().award(player, advancement);
}
diff --git a/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinResultSlot.java b/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinResultSlot.java
index 7fd0ca1c..ba839b75 100644
--- a/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinResultSlot.java
+++ b/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinResultSlot.java
@@ -33,13 +33,17 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin(ResultSlot.class)
public class MixinResultSlot {
- @Shadow @Final private Player player;
+ @Shadow
+ @Final
+ private Player player;
- @Shadow @Final private CraftingContainer craftSlots;
+ @Shadow
+ @Final
+ private CraftingContainer craftSlots;
@Inject(method = "checkTakeAchievements", at = @At(value = "INVOKE",
- target = "Lnet/minecraft/world/item/ItemStack;onCraftedBy(Lnet/minecraft/world/level/Level;Lnet/minecraft/world/entity/player/Player;I)V",
- shift = At.Shift.AFTER))
+ target = "Lnet/minecraft/world/item/ItemStack;onCraftedBy(Lnet/minecraft/world/level/Level;Lnet/minecraft/world/entity/player/Player;I)V",
+ shift = At.Shift.AFTER))
private void craft(ItemStack itemStack, CallbackInfo ci) {
PlayerEvent.CRAFT_ITEM.invoker().craft(player, itemStack, craftSlots);
}
diff --git a/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinServerGamePacketListenerImpl.java b/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinServerGamePacketListenerImpl.java
index 3c2c5b45..fdf7fbab 100644
--- a/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinServerGamePacketListenerImpl.java
+++ b/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinServerGamePacketListenerImpl.java
@@ -24,14 +24,12 @@ import me.shedaniel.architectury.impl.fabric.ChatComponentImpl;
import net.minecraft.network.chat.ChatType;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.TranslatableComponent;
-import net.minecraft.network.protocol.game.ServerboundChatPacket;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.server.network.ServerGamePacketListenerImpl;
import net.minecraft.server.network.TextFilter;
import net.minecraft.world.InteractionResult;
import net.minecraft.world.InteractionResultHolder;
-import org.apache.commons.lang3.StringUtils;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
@@ -44,11 +42,15 @@ import java.util.Objects;
@Mixin(ServerGamePacketListenerImpl.class)
public abstract class MixinServerGamePacketListenerImpl {
- @Shadow public ServerPlayer player;
+ @Shadow
+ public ServerPlayer player;
- @Shadow @Final private MinecraftServer server;
+ @Shadow
+ @Final
+ private MinecraftServer server;
- @Shadow private int chatSpamTickCount;
+ @Shadow
+ private int chatSpamTickCount;
@Shadow
public abstract void disconnect(Component component);
diff --git a/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinServerPlayer.java b/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinServerPlayer.java
index eb1a2802..746ed323 100644
--- a/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinServerPlayer.java
+++ b/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinServerPlayer.java
@@ -54,7 +54,7 @@ public class MixinServerPlayer {
@Inject(method = "doCloseContainer",
at = @At(value = "INVOKE", target = "Lnet/minecraft/world/inventory/AbstractContainerMenu;removed(Lnet/minecraft/world/entity/player/Player;)V",
- shift = At.Shift.AFTER))
+ shift = At.Shift.AFTER))
private void doCloseContainer(CallbackInfo ci) {
PlayerEvent.CLOSE_MENU.invoker().close((ServerPlayer) (Object) this, ((ServerPlayer) (Object) this).containerMenu);
}
diff --git a/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinServerPlayerGameMode.java b/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinServerPlayerGameMode.java
index 6e8620a6..8d6188a6 100644
--- a/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinServerPlayerGameMode.java
+++ b/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinServerPlayerGameMode.java
@@ -35,13 +35,15 @@ import org.spongepowered.asm.mixin.injection.callback.LocalCapture;
@Mixin(ServerPlayerGameMode.class)
public class MixinServerPlayerGameMode {
- @Shadow public ServerLevel level;
+ @Shadow
+ public ServerLevel level;
- @Shadow public ServerPlayer player;
+ @Shadow
+ public ServerPlayer player;
@Inject(method = "destroyBlock", at = @At(value = "INVOKE",
- target = "Lnet/minecraft/world/level/block/state/BlockState;getBlock()Lnet/minecraft/world/level/block/Block;",
- ordinal = 0),
+ target = "Lnet/minecraft/world/level/block/state/BlockState;getBlock()Lnet/minecraft/world/level/block/Block;",
+ ordinal = 0),
locals = LocalCapture.CAPTURE_FAILHARD, cancellable = true)
private void onBreak(BlockPos blockPos, CallbackInfoReturnable cir, BlockState state) {
if (BlockEvent.BREAK.invoker().breakBlock(this.level, blockPos, state, this.player, null) == InteractionResult.FAIL) {
diff --git a/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/client/MixinClientPacketListener.java b/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/client/MixinClientPacketListener.java
index 766ba948..c17c5f2e 100644
--- a/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/client/MixinClientPacketListener.java
+++ b/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/client/MixinClientPacketListener.java
@@ -43,9 +43,13 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin(ClientPacketListener.class)
public class MixinClientPacketListener {
- @Shadow private Minecraft minecraft;
- @Shadow @Final private RecipeManager recipeManager;
- @Unique private LocalPlayer tmpPlayer;
+ @Shadow
+ private Minecraft minecraft;
+ @Shadow
+ @Final
+ private RecipeManager recipeManager;
+ @Unique
+ private LocalPlayer tmpPlayer;
@Inject(method = "handleLogin", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Options;broadcastOptions()V"))
private void handleLogin(ClientboundLoginPacket packet, CallbackInfo ci) {
@@ -58,14 +62,14 @@ public class MixinClientPacketListener {
}
@Inject(method = "handleRespawn", at = @At(value = "INVOKE",
- target = "Lnet/minecraft/client/multiplayer/ClientLevel;addPlayer(ILnet/minecraft/client/player/AbstractClientPlayer;)V"))
+ target = "Lnet/minecraft/client/multiplayer/ClientLevel;addPlayer(ILnet/minecraft/client/player/AbstractClientPlayer;)V"))
private void handleRespawn(ClientboundRespawnPacket packet, CallbackInfo ci) {
ClientPlayerEvent.CLIENT_PLAYER_RESPAWN.invoker().respawn(tmpPlayer, minecraft.player);
this.tmpPlayer = null;
}
@Inject(method = "handleChat", at = @At(value = "INVOKE",
- target = "Lnet/minecraft/client/gui/Gui;handleChat(Lnet/minecraft/network/chat/ChatType;Lnet/minecraft/network/chat/Component;Ljava/util/UUID;)V"),
+ target = "Lnet/minecraft/client/gui/Gui;handleChat(Lnet/minecraft/network/chat/ChatType;Lnet/minecraft/network/chat/Component;Ljava/util/UUID;)V"),
cancellable = true)
private void handleChat(ClientboundChatPacket packet, CallbackInfo ci) {
InteractionResultHolder process = ClientChatEvent.CLIENT_RECEIVED.invoker().process(packet.getType(), packet.getMessage(), packet.getSender());
diff --git a/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/client/MixinGameRenderer.java b/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/client/MixinGameRenderer.java
index a04a291d..f874f9e7 100644
--- a/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/client/MixinGameRenderer.java
+++ b/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/client/MixinGameRenderer.java
@@ -34,11 +34,13 @@ import org.spongepowered.asm.mixin.injection.callback.LocalCapture;
@Mixin(GameRenderer.class)
public abstract class MixinGameRenderer {
- @Shadow @Final private Minecraft minecraft;
+ @Shadow
+ @Final
+ private Minecraft minecraft;
@Inject(method = "render(FJZ)V",
at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screens/Screen;render(Lcom/mojang/blaze3d/vertex/PoseStack;IIF)V",
- ordinal = 0), locals = LocalCapture.CAPTURE_FAILEXCEPTION, cancellable = true)
+ ordinal = 0), locals = LocalCapture.CAPTURE_FAILEXCEPTION, cancellable = true)
public void renderScreenPre(float tickDelta, long startTime, boolean tick, CallbackInfo ci, int mouseX, int mouseY, PoseStack matrices) {
if (GuiEvent.RENDER_PRE.invoker().render(minecraft.screen, matrices, mouseX, mouseY, minecraft.getDeltaFrameTime()) == InteractionResult.FAIL) {
ci.cancel();
@@ -47,7 +49,7 @@ public abstract class MixinGameRenderer {
@Inject(method = "render(FJZ)V",
at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screens/Screen;render(Lcom/mojang/blaze3d/vertex/PoseStack;IIF)V",
- shift = At.Shift.AFTER, ordinal = 0), locals = LocalCapture.CAPTURE_FAILEXCEPTION)
+ shift = At.Shift.AFTER, ordinal = 0), locals = LocalCapture.CAPTURE_FAILEXCEPTION)
public void renderScreenPost(float tickDelta, long startTime, boolean tick, CallbackInfo ci, int mouseX, int mouseY, PoseStack matrices) {
GuiEvent.RENDER_POST.invoker().render(minecraft.screen, matrices, mouseX, mouseY, minecraft.getDeltaFrameTime());
}
diff --git a/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/client/MixinKeyboardHandler.java b/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/client/MixinKeyboardHandler.java
index ab7e3169..bb63b077 100644
--- a/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/client/MixinKeyboardHandler.java
+++ b/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/client/MixinKeyboardHandler.java
@@ -78,8 +78,8 @@ public class MixinKeyboardHandler {
}
@Inject(method = "keyPress", at = @At(value = "INVOKE",
- target = "Lnet/minecraft/client/gui/screens/Screen;wrapScreenError(Ljava/lang/Runnable;Ljava/lang/String;Ljava/lang/String;)V",
- ordinal = 0), cancellable = true)
+ target = "Lnet/minecraft/client/gui/screens/Screen;wrapScreenError(Ljava/lang/Runnable;Ljava/lang/String;Ljava/lang/String;)V",
+ ordinal = 0), cancellable = true)
public void onKey(long long_1, int int_1, int int_2, int int_3, int int_4, CallbackInfo info) {
if (!info.isCancelled()) {
if (int_3 != 1 && (int_3 != 2 || !this.sendRepeatsToGui)) {
@@ -97,8 +97,8 @@ public class MixinKeyboardHandler {
}
@Inject(method = "keyPress", at = @At(value = "INVOKE",
- target = "Lnet/minecraft/client/gui/screens/Screen;wrapScreenError(Ljava/lang/Runnable;Ljava/lang/String;Ljava/lang/String;)V",
- ordinal = 0, shift = At.Shift.AFTER), locals = LocalCapture.CAPTURE_FAILHARD,
+ target = "Lnet/minecraft/client/gui/screens/Screen;wrapScreenError(Ljava/lang/Runnable;Ljava/lang/String;Ljava/lang/String;)V",
+ ordinal = 0, shift = At.Shift.AFTER), locals = LocalCapture.CAPTURE_FAILHARD,
cancellable = true)
public void onKeyAfter(long long_1, int int_1, int int_2, int int_3, int int_4, CallbackInfo info, ContainerEventHandler containerEventHandler, boolean bls[]) {
if (!info.isCancelled() && !bls[0]) {
diff --git a/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/client/MixinMinecraft.java b/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/client/MixinMinecraft.java
index aa36a7a9..25d818c0 100644
--- a/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/client/MixinMinecraft.java
+++ b/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/client/MixinMinecraft.java
@@ -43,9 +43,13 @@ import org.spongepowered.asm.mixin.injection.callback.LocalCapture;
@Unique
@Mixin(Minecraft.class)
public abstract class MixinMinecraft {
- @Shadow @Nullable public LocalPlayer player;
+ @Shadow
+ @Nullable
+ public LocalPlayer player;
- @Shadow @Nullable public HitResult hitResult;
+ @Shadow
+ @Nullable
+ public HitResult hitResult;
@Shadow
public abstract void setScreen(@Nullable Screen screen);
@@ -75,10 +79,10 @@ public abstract class MixinMinecraft {
@ModifyVariable(
method = "setScreen",
at = @At(value = "FIELD",
- opcode = Opcodes.PUTFIELD,
- target = "Lnet/minecraft/client/Minecraft;screen:Lnet/minecraft/client/gui/screens/Screen;",
- shift = At.Shift.BY,
- by = -1),
+ opcode = Opcodes.PUTFIELD,
+ target = "Lnet/minecraft/client/Minecraft;screen:Lnet/minecraft/client/gui/screens/Screen;",
+ shift = At.Shift.BY,
+ by = -1),
argsOnly = true
)
public Screen modifyScreen(Screen screen) {
@@ -102,10 +106,10 @@ public abstract class MixinMinecraft {
@Inject(
method = "setScreen",
at = @At(value = "FIELD",
- opcode = Opcodes.PUTFIELD,
- target = "Lnet/minecraft/client/Minecraft;screen:Lnet/minecraft/client/gui/screens/Screen;",
- shift = At.Shift.BY,
- by = -1),
+ opcode = Opcodes.PUTFIELD,
+ target = "Lnet/minecraft/client/Minecraft;screen:Lnet/minecraft/client/gui/screens/Screen;",
+ shift = At.Shift.BY,
+ by = -1),
cancellable = true
)
public void cancelSetScreen(@Nullable Screen screen, CallbackInfo ci) {
diff --git a/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/client/MixinMouseHandler.java b/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/client/MixinMouseHandler.java
index a39bccc6..3fcd138b 100644
--- a/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/client/MixinMouseHandler.java
+++ b/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/client/MixinMouseHandler.java
@@ -52,7 +52,7 @@ public class MixinMouseHandler {
@Inject(method = "onScroll",
at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screens/Screen;mouseScrolled(DDD)Z",
- ordinal = 0), cancellable = true, locals = LocalCapture.CAPTURE_FAILHARD)
+ ordinal = 0), cancellable = true, locals = LocalCapture.CAPTURE_FAILHARD)
public void onMouseScrolled(long handle, double xOffset, double yOffset, CallbackInfo info, double amount, double x, double y) {
if (!info.isCancelled()) {
InteractionResult result = ClientScreenInputEvent.MOUSE_SCROLLED_PRE.invoker().mouseScrolled(minecraft, minecraft.screen, x, y, amount);
@@ -63,7 +63,7 @@ public class MixinMouseHandler {
@Inject(method = "onScroll",
at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screens/Screen;mouseScrolled(DDD)Z",
- ordinal = 0, shift = At.Shift.AFTER), cancellable = true, locals = LocalCapture.CAPTURE_FAILHARD)
+ ordinal = 0, shift = At.Shift.AFTER), cancellable = true, locals = LocalCapture.CAPTURE_FAILHARD)
public void onMouseScrolledPost(long handle, double xOffset, double yOffset, CallbackInfo info, double amount, double x, double y) {
if (!info.isCancelled()) {
InteractionResult result = ClientScreenInputEvent.MOUSE_SCROLLED_POST.invoker().mouseScrolled(minecraft, minecraft.screen, x, y, amount);
@@ -72,7 +72,7 @@ public class MixinMouseHandler {
@Inject(method = "onScroll",
at = @At(value = "INVOKE", target = "Lnet/minecraft/client/player/LocalPlayer;isSpectator()Z",
- ordinal = 0), cancellable = true, locals = LocalCapture.CAPTURE_FAILHARD)
+ ordinal = 0), cancellable = true, locals = LocalCapture.CAPTURE_FAILHARD)
public void onRawMouseScrolled(long handle, double xOffset, double yOffset, CallbackInfo info, double amount) {
if (!info.isCancelled()) {
InteractionResult result = ClientRawInputEvent.MOUSE_SCROLLED.invoker().mouseScrolled(minecraft, amount);
@@ -107,7 +107,7 @@ public class MixinMouseHandler {
@Inject(method = "onPress", at = @At(value = "INVOKE",
target = "Lnet/minecraft/client/Minecraft;getOverlay()Lnet/minecraft/client/gui/screens/Overlay;",
- ordinal = 0), cancellable = true)
+ ordinal = 0), cancellable = true)
public void onRawMouseClicked(long handle, int button, int action, int mods, CallbackInfo info) {
if (!info.isCancelled()) {
InteractionResult result = ClientRawInputEvent.MOUSE_CLICKED_PRE.invoker().mouseClicked(minecraft, button, action, mods);
diff --git a/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/client/MixinMultiPlayerGameMode.java b/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/client/MixinMultiPlayerGameMode.java
index ccb9edb0..653706af 100644
--- a/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/client/MixinMultiPlayerGameMode.java
+++ b/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/client/MixinMultiPlayerGameMode.java
@@ -34,7 +34,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
public class MixinMultiPlayerGameMode {
@Inject(method = "interact",
at = @At(value = "INVOKE", target = "Lnet/minecraft/client/multiplayer/ClientPacketListener;send(Lnet/minecraft/network/protocol/Packet;)V",
- shift = At.Shift.AFTER),
+ shift = At.Shift.AFTER),
cancellable = true)
private void entityInteract(Player player, Entity entity, InteractionHand interactionHand, CallbackInfoReturnable cir) {
InteractionResult result = InteractionEvent.INTERACT_ENTITY.invoker().interact(player, entity, interactionHand);
diff --git a/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/client/MixinScreen.java b/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/client/MixinScreen.java
index ce3f0f0a..1aaea406 100644
--- a/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/client/MixinScreen.java
+++ b/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/client/MixinScreen.java
@@ -44,9 +44,13 @@ import java.util.List;
@Mixin(Screen.class)
public abstract class MixinScreen implements ScreenInputDelegate {
- @Shadow @Final public List buttons;
- @Unique private static ThreadLocal tooltipPositionContext = ThreadLocal.withInitial(TooltipEventPositionContextImpl::new);
- @Unique private static ThreadLocal tooltipColorContext = ThreadLocal.withInitial(TooltipEventColorContextImpl::new);
+ @Shadow
+ @Final
+ public List buttons;
+ @Unique
+ private static ThreadLocal tooltipPositionContext = ThreadLocal.withInitial(TooltipEventPositionContextImpl::new);
+ @Unique
+ private static ThreadLocal tooltipColorContext = ThreadLocal.withInitial(TooltipEventColorContextImpl::new);
@Shadow
public abstract List extends GuiEventListener> children();
@@ -102,13 +106,13 @@ public abstract class MixinScreen implements ScreenInputDelegate {
}
@ModifyVariable(method = "renderTooltipInternal",
- at = @At(value = "HEAD"), ordinal = 0)
+ at = @At(value = "HEAD"), ordinal = 0)
private int modifyTooltipX(int original) {
return tooltipPositionContext.get().getTooltipX();
}
@ModifyVariable(method = "renderTooltipInternal",
- at = @At(value = "HEAD"), ordinal = 1)
+ at = @At(value = "HEAD"), ordinal = 1)
private int modifyTooltipY(int original) {
return tooltipPositionContext.get().getTooltipY();
}
diff --git a/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/client/MixinTextureAtlas.java b/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/client/MixinTextureAtlas.java
index f2cc8ae9..adcd07e5 100644
--- a/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/client/MixinTextureAtlas.java
+++ b/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/client/MixinTextureAtlas.java
@@ -38,7 +38,7 @@ import java.util.stream.Stream;
public class MixinTextureAtlas {
@Inject(method = "prepareToStitch",
at = @At(value = "INVOKE", target = "Lnet/minecraft/util/profiling/ProfilerFiller;popPush(Ljava/lang/String;)V", ordinal = 0,
- shift = At.Shift.AFTER), locals = LocalCapture.CAPTURE_FAILHARD)
+ shift = At.Shift.AFTER), locals = LocalCapture.CAPTURE_FAILHARD)
private void preStitch(ResourceManager resourceManager, Stream stream, ProfilerFiller profilerFiller, int i, CallbackInfoReturnable cir, Set set) {
TextureStitchEvent.PRE.invoker().stitch((TextureAtlas) (Object) this, set::add);
}
diff --git a/fabric/src/main/java/me/shedaniel/architectury/registry/fabric/BiomeModificationsImpl.java b/fabric/src/main/java/me/shedaniel/architectury/registry/fabric/BiomeModificationsImpl.java
index 8a88317c..3dcfa077 100644
--- a/fabric/src/main/java/me/shedaniel/architectury/registry/fabric/BiomeModificationsImpl.java
+++ b/fabric/src/main/java/me/shedaniel/architectury/registry/fabric/BiomeModificationsImpl.java
@@ -79,13 +79,13 @@ public class BiomeModificationsImpl {
static {
BiomeModification modification = net.fabricmc.fabric.api.biome.v1.BiomeModifications.create(FABRIC_MODIFICATION);
- registerModification(modification,ModificationPhase.ADDITIONS, ADDITIONS);
- registerModification(modification,ModificationPhase.POST_PROCESSING, POST_PROCESSING);
- registerModification(modification,ModificationPhase.REMOVALS, REMOVALS);
- registerModification(modification,ModificationPhase.REPLACEMENTS, REPLACEMENTS);
+ registerModification(modification, ModificationPhase.ADDITIONS, ADDITIONS);
+ registerModification(modification, ModificationPhase.POST_PROCESSING, POST_PROCESSING);
+ registerModification(modification, ModificationPhase.REMOVALS, REMOVALS);
+ registerModification(modification, ModificationPhase.REPLACEMENTS, REPLACEMENTS);
}
- private static void registerModification( BiomeModification modification, ModificationPhase phase, List, BiConsumer>> list ) {
+ private static void registerModification(BiomeModification modification, ModificationPhase phase, List, BiConsumer>> list) {
modification.add(phase, Predicates.alwaysTrue(), (biomeSelectionContext, biomeModificationContext) -> {
BiomeContext biomeContext = wrapSelectionContext(biomeSelectionContext);
BiomeProperties.Mutable mutableBiome = wrapMutableBiome(biomeSelectionContext.getBiome(), biomeModificationContext);
@@ -153,43 +153,43 @@ public class BiomeModificationsImpl {
super(biome);
this.context = context;
}
-
+
@Override
public Mutable setSurfaceBuilder(ConfiguredSurfaceBuilder> builder) {
this.context.setBuiltInSurfaceBuilder(builder);
return this;
}
-
+
@Override
public Mutable addFeature(GenerationStep.Decoration decoration, ConfiguredFeature, ?> feature) {
this.context.addBuiltInFeature(decoration, feature);
return this;
}
-
+
@Override
public Mutable addCarver(GenerationStep.Carving carving, ConfiguredWorldCarver> feature) {
context.addBuiltInCarver(carving, feature);
return this;
}
-
+
@Override
public Mutable addStructure(ConfiguredStructureFeature, ?> feature) {
context.addBuiltInStructure(feature);
return this;
}
-
+
@Override
public Mutable removeFeature(GenerationStep.Decoration decoration, ConfiguredFeature, ?> feature) {
context.removeBuiltInFeature(decoration, feature);
return this;
}
-
+
@Override
public Mutable removeCarver(GenerationStep.Carving carving, ConfiguredWorldCarver> feature) {
context.removeBuiltInCarver(carving, feature);
return this;
}
-
+
@Override
public Mutable removeStructure(ConfiguredStructureFeature, ?> feature) {
context.removeBuiltInStructure(feature);
@@ -199,47 +199,47 @@ public class BiomeModificationsImpl {
private static class MutableSpawnProperties extends BiomeHooks.SpawnSettingsWrapped implements SpawnProperties.Mutable {
protected final SpawnSettingsContext context;
-
+
public MutableSpawnProperties(Biome biome, SpawnSettingsContext context) {
super(biome);
this.context = context;
}
-
+
@Override
public @NotNull Mutable setCreatureProbability(float probability) {
context.setCreatureSpawnProbability(probability);
return this;
}
-
+
@Override
public Mutable addSpawn(MobCategory category, MobSpawnSettings.SpawnerData data) {
context.addSpawn(category, data);
return this;
}
-
+
@Override
public boolean removeSpawns(BiPredicate predicate) {
return context.removeSpawns(predicate);
}
-
+
@Override
public Mutable setSpawnCost(EntityType> entityType, MobSpawnSettings.MobSpawnCost cost) {
context.setSpawnCost(entityType, cost.getCharge(), cost.getEnergyBudget());
return this;
}
-
+
@Override
public Mutable setSpawnCost(EntityType> entityType, double mass, double gravityLimit) {
context.setSpawnCost(entityType, mass, gravityLimit);
return this;
}
-
+
@Override
public Mutable clearSpawnCost(EntityType> entityType) {
context.clearSpawnCost(entityType);
return this;
}
-
+
@Override
public @NotNull Mutable setPlayerSpawnFriendly(boolean friendly) {
context.setPlayerSpawnFriendly(friendly);
diff --git a/fabric/src/main/java/me/shedaniel/architectury/registry/fabric/GameRuleFactoryImpl.java b/fabric/src/main/java/me/shedaniel/architectury/registry/fabric/GameRuleFactoryImpl.java
index 6ee405f6..0506c6d5 100644
--- a/fabric/src/main/java/me/shedaniel/architectury/registry/fabric/GameRuleFactoryImpl.java
+++ b/fabric/src/main/java/me/shedaniel/architectury/registry/fabric/GameRuleFactoryImpl.java
@@ -29,15 +29,15 @@ public class GameRuleFactoryImpl {
public static GameRules.Type createBooleanRule(boolean defaultValue) {
return GameRuleFactory.createBooleanRule(defaultValue);
}
-
+
public static GameRules.Type createBooleanRule(boolean defaultValue, BiConsumer changedCallback) {
return GameRuleFactory.createBooleanRule(defaultValue, changedCallback);
}
-
+
public static GameRules.Type createIntRule(int defaultValue) {
return GameRuleFactory.createIntRule(defaultValue);
}
-
+
public static GameRules.Type createIntRule(int defaultValue, BiConsumer changedCallback) {
return GameRuleFactory.createIntRule(defaultValue, changedCallback);
}
diff --git a/fabric/src/main/java/me/shedaniel/architectury/registry/trade/fabric/TradeRegistryImpl.java b/fabric/src/main/java/me/shedaniel/architectury/registry/trade/fabric/TradeRegistryImpl.java
new file mode 100644
index 00000000..b2802972
--- /dev/null
+++ b/fabric/src/main/java/me/shedaniel/architectury/registry/trade/fabric/TradeRegistryImpl.java
@@ -0,0 +1,36 @@
+/*
+ * This file is part of architectury.
+ * Copyright (C) 2020, 2021 architectury
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+package me.shedaniel.architectury.registry.trade.fabric;
+
+import net.fabricmc.fabric.api.object.builder.v1.trade.TradeOfferHelper;
+import net.minecraft.world.entity.npc.VillagerProfession;
+import net.minecraft.world.entity.npc.VillagerTrades;
+
+import java.util.Collections;
+
+public class TradeRegistryImpl {
+ public static void registerVillagerTrade0(VillagerProfession profession, int level, VillagerTrades.ItemListing... trades) {
+ TradeOfferHelper.registerVillagerOffers(profession, level, allTradesList -> Collections.addAll(allTradesList, trades));
+ }
+
+ public static void registerTradeForWanderingTrader(boolean rare, VillagerTrades.ItemListing... trades) {
+ TradeOfferHelper.registerWanderingTraderOffers(rare ? 2 : 1, allTradesList -> Collections.addAll(allTradesList, trades));
+ }
+}
diff --git a/forge/build.gradle b/forge/build.gradle
index 5be4ef4b..268e33e7 100644
--- a/forge/build.gradle
+++ b/forge/build.gradle
@@ -68,7 +68,7 @@ publishing {
}
}
}
-
+
repositories {
if (System.getenv("MAVEN_PASS") != null) {
maven {
diff --git a/forge/gradle.properties b/forge/gradle.properties
index 82425854..32f842a6 100644
--- a/forge/gradle.properties
+++ b/forge/gradle.properties
@@ -1 +1 @@
-loom.platform=forge
+loom.platform=forge
\ No newline at end of file
diff --git a/forge/src/main/java/me/shedaniel/architectury/hooks/forge/FluidStackHooksForge.java b/forge/src/main/java/me/shedaniel/architectury/hooks/forge/FluidStackHooksForge.java
index 16955d58..808cf3f9 100644
--- a/forge/src/main/java/me/shedaniel/architectury/hooks/forge/FluidStackHooksForge.java
+++ b/forge/src/main/java/me/shedaniel/architectury/hooks/forge/FluidStackHooksForge.java
@@ -23,7 +23,8 @@ import me.shedaniel.architectury.fluid.FluidStack;
import me.shedaniel.architectury.utils.Fraction;
public final class FluidStackHooksForge {
- private FluidStackHooksForge() {}
+ private FluidStackHooksForge() {
+ }
public static FluidStack fromForge(net.minecraftforge.fluids.FluidStack stack) {
return FluidStack.create(stack.getFluid().delegate, Fraction.ofWhole(stack.getAmount()), stack.getTag());
diff --git a/forge/src/main/java/me/shedaniel/architectury/networking/forge/NetworkManagerImpl.java b/forge/src/main/java/me/shedaniel/architectury/networking/forge/NetworkManagerImpl.java
index 5ec26f0b..b7975911 100644
--- a/forge/src/main/java/me/shedaniel/architectury/networking/forge/NetworkManagerImpl.java
+++ b/forge/src/main/java/me/shedaniel/architectury/networking/forge/NetworkManagerImpl.java
@@ -33,7 +33,6 @@ import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.entity.player.Player;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
-import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.entity.player.PlayerEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.DistExecutor;
diff --git a/forge/src/main/java/me/shedaniel/architectury/platform/forge/EventBuses.java b/forge/src/main/java/me/shedaniel/architectury/platform/forge/EventBuses.java
index 3fd13c9f..2709ad85 100644
--- a/forge/src/main/java/me/shedaniel/architectury/platform/forge/EventBuses.java
+++ b/forge/src/main/java/me/shedaniel/architectury/platform/forge/EventBuses.java
@@ -25,7 +25,8 @@ import java.util.*;
import java.util.function.Consumer;
public final class EventBuses {
- private EventBuses() {}
+ private EventBuses() {
+ }
private static final Map EVENT_BUS_MAP = new HashMap<>();
private static final Map>> ON_REGISTERED = new HashMap<>();
diff --git a/forge/src/main/java/me/shedaniel/architectury/registry/entity/forge/EntityAttributesImpl.java b/forge/src/main/java/me/shedaniel/architectury/registry/entity/forge/EntityAttributesImpl.java
index 369127aa..79ff13bf 100644
--- a/forge/src/main/java/me/shedaniel/architectury/registry/entity/forge/EntityAttributesImpl.java
+++ b/forge/src/main/java/me/shedaniel/architectury/registry/entity/forge/EntityAttributesImpl.java
@@ -27,7 +27,6 @@ import net.minecraft.world.entity.ai.attributes.AttributeSupplier;
import net.minecraftforge.event.entity.EntityAttributeCreationEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
-import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Supplier;
diff --git a/forge/src/main/java/me/shedaniel/architectury/registry/forge/BiomeModificationsImpl.java b/forge/src/main/java/me/shedaniel/architectury/registry/forge/BiomeModificationsImpl.java
index ca3a2b6f..83b09db6 100644
--- a/forge/src/main/java/me/shedaniel/architectury/registry/forge/BiomeModificationsImpl.java
+++ b/forge/src/main/java/me/shedaniel/architectury/registry/forge/BiomeModificationsImpl.java
@@ -157,7 +157,9 @@ public class BiomeModificationsImpl {
private static class GenerationSettingsBuilderWrapped implements GenerationProperties {
protected final BiomeGenerationSettingsBuilder generation;
- public GenerationSettingsBuilderWrapped(BiomeGenerationSettingsBuilder generation) {this.generation = generation;}
+ public GenerationSettingsBuilderWrapped(BiomeGenerationSettingsBuilder generation) {
+ this.generation = generation;
+ }
@Override
public @NotNull Optional>> getSurfaceBuilder() {
@@ -184,7 +186,9 @@ public class BiomeModificationsImpl {
private static class SpawnSettingsBuilderWrapped implements SpawnProperties {
protected final MobSpawnInfoBuilder builder;
- public SpawnSettingsBuilderWrapped(MobSpawnInfoBuilder builder) {this.builder = builder;}
+ public SpawnSettingsBuilderWrapped(MobSpawnInfoBuilder builder) {
+ this.builder = builder;
+ }
@Override
public float getCreatureProbability() {
diff --git a/forge/src/main/java/me/shedaniel/architectury/registry/forge/GameRuleFactoryImpl.java b/forge/src/main/java/me/shedaniel/architectury/registry/forge/GameRuleFactoryImpl.java
index 3051ad01..72354bbd 100644
--- a/forge/src/main/java/me/shedaniel/architectury/registry/forge/GameRuleFactoryImpl.java
+++ b/forge/src/main/java/me/shedaniel/architectury/registry/forge/GameRuleFactoryImpl.java
@@ -26,7 +26,8 @@ import net.minecraft.world.level.GameRules;
import java.util.function.BiConsumer;
public class GameRuleFactoryImpl {
- private GameRuleFactoryImpl() {}
+ private GameRuleFactoryImpl() {
+ }
public static GameRules.Type createBooleanRule(boolean defaultValue) {
return GameRulesAccessor.BooleanValueSimple.invokeCreateArchitectury(defaultValue);
diff --git a/forge/src/main/java/me/shedaniel/architectury/registry/trade/forge/TradeRegistryImpl.java b/forge/src/main/java/me/shedaniel/architectury/registry/trade/forge/TradeRegistryImpl.java
new file mode 100644
index 00000000..8cc7b2bf
--- /dev/null
+++ b/forge/src/main/java/me/shedaniel/architectury/registry/trade/forge/TradeRegistryImpl.java
@@ -0,0 +1,75 @@
+/*
+ * This file is part of architectury.
+ * Copyright (C) 2020, 2021 architectury
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+package me.shedaniel.architectury.registry.trade.forge;
+
+import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
+import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
+import me.shedaniel.architectury.forge.ArchitecturyForge;
+import net.minecraft.core.NonNullList;
+import net.minecraft.world.entity.npc.VillagerProfession;
+import net.minecraft.world.entity.npc.VillagerTrades;
+import net.minecraftforge.event.village.VillagerTradesEvent;
+import net.minecraftforge.event.village.WandererTradesEvent;
+import net.minecraftforge.eventbus.api.SubscribeEvent;
+import net.minecraftforge.fml.common.Mod;
+
+import java.util.*;
+
+@Mod.EventBusSubscriber(modid = ArchitecturyForge.MOD_ID)
+public class TradeRegistryImpl {
+ private static final Map>> TRADES_TO_ADD = new HashMap<>();
+ private static final List WANDERER_TRADER_TRADES_GENERIC = new ArrayList<>();
+ private static final List WANDERER_TRADER_TRADES_RARE = new ArrayList<>();
+
+ public static void registerVillagerTrade0(VillagerProfession profession, int level, VillagerTrades.ItemListing... trades) {
+ Int2ObjectMap> tradesForProfession = TRADES_TO_ADD.computeIfAbsent(profession, $ -> new Int2ObjectOpenHashMap<>());
+ List tradesForLevel = tradesForProfession.computeIfAbsent(level, $ -> new ArrayList<>());
+ Collections.addAll(tradesForLevel, trades);
+ }
+
+ public static void registerTradeForWanderingTrader(boolean rare, VillagerTrades.ItemListing... trades) {
+ if (rare) {
+ Collections.addAll(WANDERER_TRADER_TRADES_RARE, trades);
+ } else {
+ Collections.addAll(WANDERER_TRADER_TRADES_GENERIC, trades);
+ }
+ }
+
+ @SubscribeEvent
+ public static void onTradeRegistering(VillagerTradesEvent event) {
+ Int2ObjectMap> trades = TRADES_TO_ADD.get(event.getType());
+
+ if (trades != null) {
+ for (Int2ObjectMap.Entry> entry : trades.int2ObjectEntrySet()) {
+ event.getTrades().computeIfAbsent(entry.getIntKey(), $ -> NonNullList.create()).addAll(entry.getValue());
+ }
+ }
+ }
+
+ @SubscribeEvent
+ public static void onWanderingTradeRegistering(WandererTradesEvent event) {
+ if (!WANDERER_TRADER_TRADES_GENERIC.isEmpty()) {
+ event.getGenericTrades().addAll(WANDERER_TRADER_TRADES_GENERIC);
+ }
+ if (!WANDERER_TRADER_TRADES_RARE.isEmpty()) {
+ event.getRareTrades().addAll(WANDERER_TRADER_TRADES_RARE);
+ }
+ }
+}
diff --git a/forge/src/main/resources/META-INF/mods.toml b/forge/src/main/resources/META-INF/mods.toml
index 09091f4b..e53a223c 100644
--- a/forge/src/main/resources/META-INF/mods.toml
+++ b/forge/src/main/resources/META-INF/mods.toml
@@ -11,7 +11,7 @@ authors = "shedaniel"
description = '''
A intermediary api aimed to ease developing multiplatform mods.
'''
-logoFile="icon.png"
+logoFile = "icon.png"
license = "LGPL-3"
[[dependencies.architectury]]
diff --git a/forge/src/main/resources/architectury.mixins.json b/forge/src/main/resources/architectury.mixins.json
index 277733fc..c8711807 100644
--- a/forge/src/main/resources/architectury.mixins.json
+++ b/forge/src/main/resources/architectury.mixins.json
@@ -7,9 +7,17 @@
"client": [
],
"mixins": [
- "BiomeGenerationSettingsBuilderAccessor", "GameRulesAccessor", "GameRulesAccessor$BooleanValue", "GameRulesAccessor$BooleanValueSimple",
- "GameRulesAccessor$IntegerValue", "GameRulesAccessor$IntegerValueSimple", "MixinBlockEntity", "MixinBlockEntityExtension", "MixinItemExtension",
- "MixinRegistryEntry", "MobSpawnSettingsBuilderAccessor"
+ "BiomeGenerationSettingsBuilderAccessor",
+ "GameRulesAccessor",
+ "GameRulesAccessor$BooleanValue",
+ "GameRulesAccessor$BooleanValueSimple",
+ "GameRulesAccessor$IntegerValue",
+ "GameRulesAccessor$IntegerValueSimple",
+ "MixinBlockEntity",
+ "MixinBlockEntityExtension",
+ "MixinItemExtension",
+ "MixinRegistryEntry",
+ "MobSpawnSettingsBuilderAccessor"
],
"injectors": {
"defaultRequire": 1
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index e5338d37..0f80bbf5 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.1-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
diff --git a/testmod-common/src/main/java/me/shedaniel/architectury/test/TestMod.java b/testmod-common/src/main/java/me/shedaniel/architectury/test/TestMod.java
index e1e87e5b..1193c342 100644
--- a/testmod-common/src/main/java/me/shedaniel/architectury/test/TestMod.java
+++ b/testmod-common/src/main/java/me/shedaniel/architectury/test/TestMod.java
@@ -28,6 +28,7 @@ import me.shedaniel.architectury.test.gamerule.TestGameRules;
import me.shedaniel.architectury.test.registry.TestRegistries;
import me.shedaniel.architectury.test.registry.client.TestKeybinds;
import me.shedaniel.architectury.test.tags.TestTags;
+import me.shedaniel.architectury.test.trade.TestTrades;
import me.shedaniel.architectury.utils.Env;
import me.shedaniel.architectury.utils.EnvExecutor;
@@ -40,6 +41,7 @@ public class TestMod {
TestRegistries.initialize();
TestGameRules.init();
TestTags.initialize();
+ TestTrades.init();
if (Platform.getEnvironment() == Env.CLIENT)
TestKeybinds.initialize();
}
diff --git a/testmod-common/src/main/java/me/shedaniel/architectury/test/events/DebugEvents.java b/testmod-common/src/main/java/me/shedaniel/architectury/test/events/DebugEvents.java
index 3b8db67b..a530d2ad 100644
--- a/testmod-common/src/main/java/me/shedaniel/architectury/test/events/DebugEvents.java
+++ b/testmod-common/src/main/java/me/shedaniel/architectury/test/events/DebugEvents.java
@@ -29,7 +29,6 @@ import me.shedaniel.architectury.platform.Platform;
import me.shedaniel.architectury.utils.Env;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
-import net.minecraft.client.gui.screens.ChatScreen;
import net.minecraft.client.gui.screens.inventory.AnvilScreen;
import net.minecraft.core.Position;
import net.minecraft.core.Vec3i;
diff --git a/testmod-common/src/main/java/me/shedaniel/architectury/test/gamerule/TestGameRules.java b/testmod-common/src/main/java/me/shedaniel/architectury/test/gamerule/TestGameRules.java
index d2fe1462..64baaf7a 100644
--- a/testmod-common/src/main/java/me/shedaniel/architectury/test/gamerule/TestGameRules.java
+++ b/testmod-common/src/main/java/me/shedaniel/architectury/test/gamerule/TestGameRules.java
@@ -28,11 +28,12 @@ import static me.shedaniel.architectury.registry.GameRuleRegistry.register;
public class TestGameRules {
private static final Logger LOGGER = LogManager.getLogger();
-
+
public static final GameRules.Key SIMPLE_BOOL = register("simpleBool", GameRules.Category.MISC, GameRuleFactory.createBooleanRule(true));
public static final GameRules.Key SIMPLE_INT = register("simpleInt", GameRules.Category.MISC, GameRuleFactory.createIntRule(10));
public static final GameRules.Key CALLBACK_BOOL = register("callbackBool", GameRules.Category.MISC, GameRuleFactory.createBooleanRule(true, (server, value) -> LOGGER.info("changed to {}", value.get())));
public static final GameRules.Key CALLBACK_INT = register("callbackInt", GameRules.Category.MISC, GameRuleFactory.createIntRule(10, (server, value) -> LOGGER.info("changed to {}", value.get())));
-
- public static void init() {}
+
+ public static void init() {
+ }
}
diff --git a/testmod-common/src/main/java/me/shedaniel/architectury/test/trade/TestTrades.java b/testmod-common/src/main/java/me/shedaniel/architectury/test/trade/TestTrades.java
new file mode 100644
index 00000000..bb92779c
--- /dev/null
+++ b/testmod-common/src/main/java/me/shedaniel/architectury/test/trade/TestTrades.java
@@ -0,0 +1,42 @@
+/*
+ * This file is part of architectury.
+ * Copyright (C) 2020, 2021 architectury
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+package me.shedaniel.architectury.test.trade;
+
+import me.shedaniel.architectury.registry.trade.SimpleTrade;
+import me.shedaniel.architectury.registry.trade.TradeRegistry;
+import net.minecraft.core.Registry;
+import net.minecraft.world.entity.npc.VillagerProfession;
+import net.minecraft.world.entity.npc.VillagerTrades;
+import net.minecraft.world.item.ItemStack;
+import net.minecraft.world.item.Items;
+
+public class TestTrades {
+ public static void init() {
+ for (VillagerProfession villagerProfession : Registry.VILLAGER_PROFESSION) {
+ TradeRegistry.registerVillagerTrade(villagerProfession, 1, TestTrades.createTrades());
+ }
+ TradeRegistry.registerTradeForWanderingTrader(false, TestTrades.createTrades());
+ }
+
+ private static VillagerTrades.ItemListing[] createTrades() {
+ SimpleTrade trade = new SimpleTrade(Items.APPLE.getDefaultInstance(), ItemStack.EMPTY, Items.ACACIA_BOAT.getDefaultInstance(), 1, 0, 1.0F);
+ return new VillagerTrades.ItemListing[]{trade};
+ }
+}
diff --git a/testmod-common/src/main/resources/data/architectury-test/tags/blocks/heart_particles2.json b/testmod-common/src/main/resources/data/architectury-test/tags/blocks/heart_particles2.json
index 434965a2..e7cca299 100644
--- a/testmod-common/src/main/resources/data/architectury-test/tags/blocks/heart_particles2.json
+++ b/testmod-common/src/main/resources/data/architectury-test/tags/blocks/heart_particles2.json
@@ -1,6 +1,6 @@
{
- "replace": false,
- "values": [
- "minecraft:emerald_block"
- ]
+ "replace": false,
+ "values": [
+ "minecraft:emerald_block"
+ ]
}
diff --git a/testmod-fabric/build.gradle b/testmod-fabric/build.gradle
index 74127e78..d19a1741 100644
--- a/testmod-fabric/build.gradle
+++ b/testmod-fabric/build.gradle
@@ -12,7 +12,7 @@ dependencies {
minecraft "com.mojang:minecraft:${rootProject.architectury.minecraft}"
mappings loom.officialMojangMappings()
modImplementation "net.fabricmc:fabric-loader:${rootProject.fabric_loader_version}"
- modApi "net.fabricmc.fabric-api:fabric-api:${rootProject.fabric_api_version}"
+ modImplementation "net.fabricmc.fabric-api:fabric-api:${rootProject.fabric_api_version}"
implementation project(path: ":fabric", configuration: "dev")
implementation(project(path: ":common")) {
diff --git a/testmod-forge/build.gradle b/testmod-forge/build.gradle
index b8eb8568..8cd8ffb9 100644
--- a/testmod-forge/build.gradle
+++ b/testmod-forge/build.gradle
@@ -5,7 +5,7 @@ plugins {
loom {
mixinConfig "architectury.mixins.json"
-
+
localMods {
it.add(project(":forge").sourceSets.main)
}
diff --git a/testmod-forge/gradle.properties b/testmod-forge/gradle.properties
index 82425854..32f842a6 100644
--- a/testmod-forge/gradle.properties
+++ b/testmod-forge/gradle.properties
@@ -1 +1 @@
-loom.platform=forge
+loom.platform=forge
\ No newline at end of file