This commit is contained in:
modmuss50 2024-03-06 16:40:52 +00:00
parent 403ef19793
commit 031f0cf067
17 changed files with 68 additions and 63 deletions
fabric-object-builder-api-v1/src
main/java/net/fabricmc/fabric/mixin/object/builder
testmod/java/net/fabricmc/fabric/test/object/builder

View file

@ -25,12 +25,12 @@ import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.Redirect;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import net.minecraft.class_9306;
import net.minecraft.entity.Entity;
import net.minecraft.registry.DefaultedRegistry;
import net.minecraft.util.math.random.Random;
import net.minecraft.village.TradeOffer;
import net.minecraft.village.TradeOffers;
import net.minecraft.village.TradedItem;
import net.minecraft.village.VillagerType;
@Mixin(TradeOffers.TypeAwareBuyForOneEmeraldFactory.class)
@ -50,8 +50,8 @@ public abstract class TradeOffersTypeAwareBuyForOneEmeraldFactoryMixin {
* To prevent "item" -> "air" trades, if the result of a type aware trade is air, make sure no offer is created.
*/
@Inject(method = "create", at = @At(value = "NEW", target = "net/minecraft/village/TradeOffer"), cancellable = true)
private void failOnNullItem(Entity entity, Random random, CallbackInfoReturnable<TradeOffer> cir, @Local() class_9306 buyingItem) {
if (buyingItem.itemStack().isEmpty()) { // Will return true for an "empty" item stack that had null passed in the ctor
private void failOnNullItem(Entity entity, Random random, CallbackInfoReturnable<TradeOffer> cir, @Local() TradedItem tradedItem) {
if (tradedItem.itemStack().isEmpty()) { // Will return true for an "empty" item stack that had null passed in the ctor
cir.setReturnValue(null); // Return null to prevent creation of empty trades
}
}

View file

@ -25,7 +25,6 @@ import java.util.Optional;
import com.mojang.brigadier.exceptions.SimpleCommandExceptionType;
import net.minecraft.class_9306;
import net.minecraft.entity.Entity;
import net.minecraft.entity.passive.WanderingTraderEntity;
import net.minecraft.item.Item;
@ -37,6 +36,7 @@ import net.minecraft.util.Identifier;
import net.minecraft.util.math.random.Random;
import net.minecraft.village.TradeOffer;
import net.minecraft.village.TradeOffers;
import net.minecraft.village.TradedItem;
import net.minecraft.village.VillagerProfession;
import net.fabricmc.api.ModInitializer;
@ -51,16 +51,16 @@ public class VillagerTypeTest1 implements ModInitializer {
public void onInitialize() {
TradeOfferHelper.registerVillagerOffers(VillagerProfession.ARMORER, 1, (factories, rebalanced) -> {
Item scrap = rebalanced ? Items.NETHER_BRICK : Items.NETHERITE_SCRAP;
factories.add(new SimpleTradeFactory(new TradeOffer(new class_9306(Items.GOLD_INGOT, 3), Optional.of(new class_9306(scrap, 4)), new ItemStack(Items.NETHERITE_INGOT), 2, 6, 0.15F)));
factories.add(new SimpleTradeFactory(new TradeOffer(new TradedItem(Items.GOLD_INGOT, 3), Optional.of(new TradedItem(scrap, 4)), new ItemStack(Items.NETHERITE_INGOT), 2, 6, 0.15F)));
});
// Toolsmith is not rebalanced yet
TradeOfferHelper.registerVillagerOffers(VillagerProfession.TOOLSMITH, 1, (factories, rebalanced) -> {
Item scrap = rebalanced ? Items.NETHER_BRICK : Items.NETHERITE_SCRAP;
factories.add(new SimpleTradeFactory(new TradeOffer(new class_9306(Items.GOLD_INGOT, 3), Optional.of(new class_9306(scrap, 4)), new ItemStack(Items.NETHERITE_INGOT), 2, 6, 0.15F)));
factories.add(new SimpleTradeFactory(new TradeOffer(new TradedItem(Items.GOLD_INGOT, 3), Optional.of(new TradedItem(scrap, 4)), new ItemStack(Items.NETHERITE_INGOT), 2, 6, 0.15F)));
});
TradeOfferHelper.registerWanderingTraderOffers(1, factories -> {
factories.add(new SimpleTradeFactory(new TradeOffer(new class_9306(Items.GOLD_INGOT, 3), Optional.of(new class_9306(Items.NETHERITE_SCRAP, 4)), new ItemStack(Items.NETHERITE_INGOT), 2, 6, 0.35F)));
factories.add(new SimpleTradeFactory(new TradeOffer(new TradedItem(Items.GOLD_INGOT, 3), Optional.of(new TradedItem(Items.NETHERITE_SCRAP, 4)), new ItemStack(Items.NETHERITE_INGOT), 2, 6, 0.35F)));
});
TradeOfferHelper.registerRebalancedWanderingTraderOffers(builder -> {
@ -68,28 +68,28 @@ public class VillagerTypeTest1 implements ModInitializer {
FOOD_POOL_ID,
5,
Registries.ITEM.stream().filter(item -> item.getFoodComponent() != null).map(
item -> new SimpleTradeFactory(new TradeOffer(new class_9306(Items.NETHERITE_INGOT), new ItemStack(item), 3, 4, 0.15F))
item -> new SimpleTradeFactory(new TradeOffer(new TradedItem(Items.NETHERITE_INGOT), new ItemStack(item), 3, 4, 0.15F))
).toList()
);
builder.addAll(
THING_POOL_ID,
new SimpleTradeFactory(new TradeOffer(new class_9306(Items.NETHERITE_INGOT), new ItemStack(Items.MOJANG_BANNER_PATTERN), 1, 4, 0.15F))
new SimpleTradeFactory(new TradeOffer(new TradedItem(Items.NETHERITE_INGOT), new ItemStack(Items.MOJANG_BANNER_PATTERN), 1, 4, 0.15F))
);
builder.addOffersToPool(
TradeOfferHelper.WanderingTraderOffersBuilder.BUY_ITEMS_POOL,
new SimpleTradeFactory(new TradeOffer(new class_9306(Items.BLAZE_POWDER, 1), new ItemStack(Items.EMERALD, 4), 3, 4, 0.15F)),
new SimpleTradeFactory(new TradeOffer(new class_9306(Items.NETHER_WART, 5), new ItemStack(Items.EMERALD, 1), 3, 4, 0.15F)),
new SimpleTradeFactory(new TradeOffer(new class_9306(Items.GOLDEN_CARROT, 4), new ItemStack(Items.EMERALD, 1), 3, 4, 0.15F))
new SimpleTradeFactory(new TradeOffer(new TradedItem(Items.BLAZE_POWDER, 1), new ItemStack(Items.EMERALD, 4), 3, 4, 0.15F)),
new SimpleTradeFactory(new TradeOffer(new TradedItem(Items.NETHER_WART, 5), new ItemStack(Items.EMERALD, 1), 3, 4, 0.15F)),
new SimpleTradeFactory(new TradeOffer(new TradedItem(Items.GOLDEN_CARROT, 4), new ItemStack(Items.EMERALD, 1), 3, 4, 0.15F))
);
builder.addOffersToPool(
TradeOfferHelper.WanderingTraderOffersBuilder.SELL_SPECIAL_ITEMS_POOL,
new SimpleTradeFactory(new TradeOffer(new class_9306(Items.EMERALD, 6), new ItemStack(Items.BRUSH, 1), 1, 4, 0.15F)),
new SimpleTradeFactory(new TradeOffer(new class_9306(Items.DIAMOND, 16), new ItemStack(Items.ELYTRA, 1), 1, 4, 0.15F)),
new SimpleTradeFactory(new TradeOffer(new class_9306(Items.EMERALD, 3), new ItemStack(Items.LEAD, 2), 3, 4, 0.15F))
new SimpleTradeFactory(new TradeOffer(new TradedItem(Items.EMERALD, 6), new ItemStack(Items.BRUSH, 1), 1, 4, 0.15F)),
new SimpleTradeFactory(new TradeOffer(new TradedItem(Items.DIAMOND, 16), new ItemStack(Items.ELYTRA, 1), 1, 4, 0.15F)),
new SimpleTradeFactory(new TradeOffer(new TradedItem(Items.EMERALD, 3), new ItemStack(Items.LEAD, 2), 3, 4, 0.15F))
);
builder.addOffersToPool(
FOOD_POOL_ID,
new SimpleTradeFactory(new TradeOffer(new class_9306(Items.NETHERITE_INGOT), new ItemStack(Items.EGG), 3, 4, 0.15F))
new SimpleTradeFactory(new TradeOffer(new TradedItem(Items.NETHERITE_INGOT), new ItemStack(Items.EGG), 3, 4, 0.15F))
);
});

View file

@ -16,10 +16,10 @@
package net.fabricmc.fabric.test.object.builder;
import net.minecraft.class_9306;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.village.TradeOffer;
import net.minecraft.village.TradedItem;
import net.minecraft.village.VillagerProfession;
import net.fabricmc.api.ModInitializer;
@ -32,22 +32,22 @@ public class VillagerTypeTest2 implements ModInitializer {
@Override
public void onInitialize() {
TradeOfferHelper.registerVillagerOffers(VillagerProfession.WEAPONSMITH, 1, factories -> {
factories.add(new SimpleTradeFactory(new TradeOffer(new class_9306(Items.DIAMOND, 5), new ItemStack(Items.NETHERITE_INGOT), 3, 4, 0.15F)));
factories.add(new SimpleTradeFactory(new TradeOffer(new TradedItem(Items.DIAMOND, 5), new ItemStack(Items.NETHERITE_INGOT), 3, 4, 0.15F)));
});
TradeOfferHelper.registerVillagerOffers(VillagerProfession.ARMORER, 1, factories -> {
factories.add(new SimpleTradeFactory(new TradeOffer(new class_9306(Items.DIAMOND, 6), new ItemStack(Items.ELYTRA), 3, 4, 0.15F)));
factories.add(new SimpleTradeFactory(new TradeOffer(new TradedItem(Items.DIAMOND, 6), new ItemStack(Items.ELYTRA), 3, 4, 0.15F)));
});
TradeOfferHelper.registerVillagerOffers(VillagerProfession.ARMORER, 1, factories -> {
factories.add(new SimpleTradeFactory(new TradeOffer(new class_9306(Items.DIAMOND, 7), new ItemStack(Items.CHAINMAIL_BOOTS), 3, 4, 0.15F)));
factories.add(new SimpleTradeFactory(new TradeOffer(new TradedItem(Items.DIAMOND, 7), new ItemStack(Items.CHAINMAIL_BOOTS), 3, 4, 0.15F)));
});
TradeOfferHelper.registerVillagerOffers(VillagerProfession.ARMORER, 1, factories -> {
factories.add(new SimpleTradeFactory(new TradeOffer(new class_9306(Items.DIAMOND, 8), new ItemStack(Items.CHAINMAIL_CHESTPLATE), 3, 4, 0.15F)));
factories.add(new SimpleTradeFactory(new TradeOffer(new TradedItem(Items.DIAMOND, 8), new ItemStack(Items.CHAINMAIL_CHESTPLATE), 3, 4, 0.15F)));
});
TradeOfferHelper.registerVillagerOffers(VillagerProfession.ARMORER, 1, factories -> {
factories.add(new SimpleTradeFactory(new TradeOffer(new class_9306(Items.DIAMOND, 9), new ItemStack(Items.CHAINMAIL_HELMET), 3, 4, 0.15F)));
factories.add(new SimpleTradeFactory(new TradeOffer(new TradedItem(Items.DIAMOND, 9), new ItemStack(Items.CHAINMAIL_HELMET), 3, 4, 0.15F)));
});
TradeOfferHelper.registerVillagerOffers(VillagerProfession.ARMORER, 1, factories -> {
factories.add(new SimpleTradeFactory(new TradeOffer(new class_9306(Items.DIAMOND, 10), new ItemStack(Items.CHAINMAIL_LEGGINGS), 3, 4, 0.15F)));
factories.add(new SimpleTradeFactory(new TradeOffer(new TradedItem(Items.DIAMOND, 10), new ItemStack(Items.CHAINMAIL_LEGGINGS), 3, 4, 0.15F)));
});
}
}