diff --git a/helps/ResourcesMapping.md b/helps/ResourcesMapping.md index 97c917c..43d73dc 100644 --- a/helps/ResourcesMapping.md +++ b/helps/ResourcesMapping.md @@ -15,62 +15,56 @@ |白萝卜|√||||||| |薄荷|||||一次性||| |鱼肉||原版可食用鱼肉|||||| -|胡椒|||屠夫||||| +|胡椒|||屠夫3||||| |番茄|√||||||| |面粉||||√|||| |甜甜花|||||一次性||| |洋葱|√||||||| -|熏禽肉|||屠夫||||| +|熏禽肉|||屠夫3,用鸡肉处理||||| |卷心菜|√||||||| |树莓|||||可反复||| |土豆||√|||||| |牛奶||√|||||| |糖||√|||||| -|杏仁|||农民||||| +|杏仁|||农民3||||| |金鱼草|||||一次性,沼泽||| -|豆腐|||农民||||| +|豆腐|||农民3||||| |莲蓬||荷叶|||||| |松茸|||||一次性||| |稻米|√||||||| -|虾仁|||渔夫||||| +|虾仁|||渔夫4||||| |胡萝卜||√|||||| |奶油||||√|||| -|螃蟹|||渔夫||||| +|螃蟹|||渔夫4||||| |奶酪||||√|||| |松果|||||云杉树叶掉落||| |果酱||||√|||| -|盐|||屠夫||||| +|盐|||屠夫3||||| |黄油||||√|||| |火腿||||√|||| |培根||||√|||| |香肠||||√|||| -|青蛙|||渔夫||||| -|电气水晶||||||√|| -|蜥蜴尾巴|||牧师||||| -|冰雾花花朵|||||||√| -|烈焰花花蕊|||||||√| -|蝴蝶翅膀|||牧师||||| -|晶核|||牧师||||| +|青蛙|||牧师3||||| +|电气水晶||||||高山|| +|蜥蜴尾巴|||牧师3||||| +|冰雾花花朵|||牧师4||||| +|烈焰花花蕊|||牧师4||||| +|蝴蝶翅膀|||牧师3||||| +|晶核|||牧师3||||| |铁块||||||√|| |白铁块||||||√|| |水晶块||||||√|| |蟹黄||||√|||| |小麦||√|||||| |魔晶块||||||√|| -|鳅鳅宝玉|||牧师||||| -|竹笋|||||||√| -|发光髓|||||||√| -|「冷鲜肉」|||||||√| +|鳅鳅宝玉|||牧师5||||| +|竹笋|||农民5,用竹子处理||||| +|发光髓|||牧师3||||| +|「冷鲜肉」||||√,更改为冰块+猪肉|||| |星银矿石||||||高山|| |奇异的「牙齿」|||||||√| |汲取了生命力的龙牙|||||||√| |马尾|||||一次性,沼泽||| -|嬗变之尘|||||||√| -|北陆单手剑原胚|||||||√| -|北陆双手剑原胚|||||||√| -|北陆长柄武器原胚|||||||√| -|北陆弓原胚|||||||√| -|北陆法器原胚|||||||√| |苹果||√|||||| |日落果|||||白桦树叶掉落||| |塞西莉亚花|||||一次性,高山||| @@ -82,7 +76,7 @@ |风车菊|||||一次性||| |钩钩果|||||可反复||| |清心|||||一次性,高山||| -|星螺|||牧师||||| +|星螺|||牧师5||||| * 所有可种植物品,加入农民一级收购列表,尝试将这些作物设为农民可接受的作物,就像原版作物一样,如果不行就将作物种子设定为流浪商人贩卖 * 野外采集的,一次性表示类似于花的处理方式,采完就没了,可用刷花机量产。可反复表示类似于浆果丛的处理方式,可以反复采摘,但是只能在原地采摘,不能重新集中化种植。树叶掉落的,按照类似橡木树叶掉落苹果的方式处理掉落。 diff --git a/src/main/java/net/yyc12345/teyvatcraft/init/TerrainsManager.java b/src/main/java/net/yyc12345/teyvatcraft/init/TerrainsManager.java index 1f9ddc1..9a7b38f 100644 --- a/src/main/java/net/yyc12345/teyvatcraft/init/TerrainsManager.java +++ b/src/main/java/net/yyc12345/teyvatcraft/init/TerrainsManager.java @@ -117,12 +117,12 @@ public class TerrainsManager { .configure((new RandomPatchFeatureConfig.Builder( (BlockStateProvider)provider, (BlockPlacer)SimpleBlockPlacer.INSTANCE)) - .tries(64) + .tries(8) .whitelist((Set)ImmutableSet.of(Blocks.GRASS_BLOCK.getDefaultState().getBlock())) - .cannotProject() + //.cannotProject() .build()) .decorate(Decorators.SQUARE_HEIGHTMAP_SPREAD_DOUBLE) - .applyChance(24); + .applyChance(48); } // ================ biome register diff --git a/src/main/java/net/yyc12345/teyvatcraft/init/VillagerManager.java b/src/main/java/net/yyc12345/teyvatcraft/init/VillagerManager.java index 568f5b5..9a64508 100644 --- a/src/main/java/net/yyc12345/teyvatcraft/init/VillagerManager.java +++ b/src/main/java/net/yyc12345/teyvatcraft/init/VillagerManager.java @@ -3,8 +3,12 @@ package net.yyc12345.teyvatcraft.init; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; +import net.fabricmc.fabric.api.object.builder.v1.trade.TradeOfferHelper; import net.minecraft.item.Item; +import net.minecraft.item.Items; +import net.minecraft.village.VillagerProfession; import net.yyc12345.teyvatcraft.mixin.VillagerAccess; +import net.yyc12345.teyvatcraft.trading.VillagerTradingBuilder; public class VillagerManager { @@ -27,5 +31,59 @@ public class VillagerManager { villagerGatherables.add(ItemsManager.RADISH); VillagerAccess.setGatherableItems(villagerGatherables.build()); + // register trading + TradeOfferHelper.registerVillagerOffers(VillagerProfession.FARMER, 1, (factories -> { + // crops + VillagerTradingBuilder.VillagerBuyVanilla(factories, 1, ItemsManager.RADISH, 26, 1); + VillagerTradingBuilder.VillagerBuyVanilla(factories, 1, ItemsManager.TOMATO, 26, 1); + VillagerTradingBuilder.VillagerBuyVanilla(factories, 1, ItemsManager.ONION, 26, 1); + VillagerTradingBuilder.VillagerBuyVanilla(factories, 1, ItemsManager.CABBAGE, 26, 1); + VillagerTradingBuilder.VillagerBuyVanilla(factories, 1, ItemsManager.RICE, 26, 1); + })); + TradeOfferHelper.registerVillagerOffers(VillagerProfession.FARMER, 3, (factories -> { + // sold items + VillagerTradingBuilder.VillagerSellVanilla(factories, 3, ItemsManager.ALMOND, 1, 6); + VillagerTradingBuilder.VillagerSellVanilla(factories, 3, ItemsManager.TOFU, 1, 6); + })); + TradeOfferHelper.registerVillagerOffers(VillagerProfession.FARMER, 5, (factories -> { + VillagerTradingBuilder.VillagerProcessVanilla(factories, 5, Items.BAMBOO, ItemsManager.BAMBOO_SHOOT, 2); + })); + + TradeOfferHelper.registerVillagerOffers(VillagerProfession.BUTCHER, 3, (factories -> { + // soled items + VillagerTradingBuilder.VillagerSellVanilla(factories, 3, ItemsManager.PEPPER, 1, 1); + VillagerTradingBuilder.VillagerProcessVanilla(factories, 3, Items.CHICKEN, ItemsManager.SMOKED_FOWL, 2); + VillagerTradingBuilder.VillagerSellVanilla(factories, 3, ItemsManager.SALT, 1, 1); + })); + + TradeOfferHelper.registerVillagerOffers(VillagerProfession.FISHERMAN, 4, (factories -> { + VillagerTradingBuilder.VillagerSellVanilla(factories, 4, ItemsManager.SHRIMP_MEAT, 1, 6); + VillagerTradingBuilder.VillagerSellVanilla(factories, 4, ItemsManager.CRAB, 1, 6); + })); + + TradeOfferHelper.registerVillagerOffers(VillagerProfession.CLERIC, 3, (factories -> { + VillagerTradingBuilder.VillagerSellVanilla(factories, 3, ItemsManager.FROG, 1, 6); + VillagerTradingBuilder.VillagerSellVanilla(factories, 3, ItemsManager.LIZARD_TAIL, 1, 6); + VillagerTradingBuilder.VillagerSellVanilla(factories, 3, ItemsManager.BUTTERFLY_WINGS, 1, 6); + VillagerTradingBuilder.VillagerSellVanilla(factories, 3, ItemsManager.CRYSTAL_CORE, 1, 6); + VillagerTradingBuilder.VillagerSellVanilla(factories, 3, ItemsManager.LUMINESCENT_SPINE, 1, 6); + })); + TradeOfferHelper.registerVillagerOffers(VillagerProfession.CLERIC, 4, (factories -> { + VillagerTradingBuilder.VillagerSellVanilla(factories, 4, ItemsManager.MIST_FLOWER_COROLLA, 1, 6); + VillagerTradingBuilder.VillagerSellVanilla(factories, 4, ItemsManager.FLAMING_FLOWER_STAMEN, 1, 6); + })); + TradeOfferHelper.registerVillagerOffers(VillagerProfession.CLERIC, 5, (factories -> { + VillagerTradingBuilder.VillagerSellVanilla(factories, 5, ItemsManager.LOACH_PEARL, 1, 6); + VillagerTradingBuilder.VillagerSellVanilla(factories, 5, ItemsManager.STARCONCH, 1, 6); + })); + + // register wandering trading + TradeOfferHelper.registerWanderingTraderOffers(2, (factories -> { + VillagerTradingBuilder.VillagerSellVanilla(factories, 5, ItemsManager.RICE_SEED, 1, 2); + VillagerTradingBuilder.VillagerSellVanilla(factories, 5, ItemsManager.RADISH, 1, 2); + VillagerTradingBuilder.VillagerSellVanilla(factories, 5, ItemsManager.TOMATO, 1, 2); + VillagerTradingBuilder.VillagerSellVanilla(factories, 5, ItemsManager.ONION, 1, 2); + VillagerTradingBuilder.VillagerSellVanilla(factories, 5, ItemsManager.CABBAGE, 1, 2); + })); } } diff --git a/src/main/java/net/yyc12345/teyvatcraft/mixin/GrassBlockFixer.java b/src/main/java/net/yyc12345/teyvatcraft/mixin/GrassBlockFixer.java index 0f87466..4a71e74 100644 --- a/src/main/java/net/yyc12345/teyvatcraft/mixin/GrassBlockFixer.java +++ b/src/main/java/net/yyc12345/teyvatcraft/mixin/GrassBlockFixer.java @@ -3,9 +3,11 @@ package net.yyc12345.teyvatcraft.mixin; import java.util.List; import java.util.Random; +import org.jetbrains.annotations.Nullable; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.LocalCapture; import org.spongepowered.asm.mixin.injection.At; import net.minecraft.block.Block; @@ -24,6 +26,7 @@ import net.minecraft.world.gen.feature.FlowerFeature; @Mixin(GrassBlock.class) public class GrassBlockFixer { + @Inject(method = "grow", at = @At("HEAD")) public void grow(ServerWorld world, Random random, BlockPos pos, BlockState state, CallbackInfo ci) { BlockPos blockPos = pos.up(); @@ -35,7 +38,7 @@ public class GrassBlockFixer { // random walk for (int j = 0; j < i / 16; ) { blockPos2 = blockPos2.add(random.nextInt(3) - 1, (random.nextInt(3) - 1) * random.nextInt(3) / 2, random.nextInt(3) - 1); - if (world.getBlockState(blockPos2.down()).isOf(world.getBlockState(pos).getBlock()/* this */)) { + if (world.getBlockState(blockPos2.down()).isOf(world.getBlockState(pos).getBlock())) { if (world.getBlockState(blockPos2).isFullCube((BlockView)world, blockPos2)) continue label32; j++; @@ -61,4 +64,5 @@ public class GrassBlockFixer { continue; } } + } diff --git a/src/main/java/net/yyc12345/teyvatcraft/trading/VillagerTradingBuilder.java b/src/main/java/net/yyc12345/teyvatcraft/trading/VillagerTradingBuilder.java new file mode 100644 index 0000000..2f47851 --- /dev/null +++ b/src/main/java/net/yyc12345/teyvatcraft/trading/VillagerTradingBuilder.java @@ -0,0 +1,37 @@ +package net.yyc12345.teyvatcraft.trading; + +import java.util.List; + +import net.minecraft.item.Item; +import net.minecraft.village.TradeOffers; +import net.minecraft.item.ItemStack; +import net.minecraft.village.TradeOffer; +import net.minecraft.item.Items; + +public class VillagerTradingBuilder { + public VillagerTradingBuilder() {} + + public static final int basicRewardedExp = 5; + //public static final int basicMaxUses = 12; + public static final float basicPriceMultiplier = 0.05f; + + public static int GetRewardedExpWithLevel(int level) { + return 5 * level; + } + public static int GetMaxUsesWithLevel(int level) { + if (level <= 3) return 12; + else return 8; + } + + public static void VillagerBuyVanilla(List factories, int level, Item item, int itemCount, int emeraldCount) { + factories.add((entity, random) -> new TradeOffer(new ItemStack(item, itemCount), new ItemStack(Items.EMERALD, emeraldCount), GetMaxUsesWithLevel(level), GetRewardedExpWithLevel(level), basicPriceMultiplier)); + } + + public static void VillagerSellVanilla(List factories, int level, Item item, int itemCount, int emeraldCount) { + factories.add((entity, random) -> new TradeOffer(new ItemStack(Items.EMERALD, emeraldCount), new ItemStack(item, itemCount), GetMaxUsesWithLevel(level), GetRewardedExpWithLevel(level), basicPriceMultiplier)); + } + + public static void VillagerProcessVanilla(List factories, int level, Item originalItem, Item resultItem, int emeraldCount) { + factories.add((entity, random) -> new TradeOffer(new ItemStack(originalItem, 1), new ItemStack(Items.EMERALD, emeraldCount), new ItemStack(resultItem, 1), GetMaxUsesWithLevel(level), GetRewardedExpWithLevel(level), basicPriceMultiplier)); + } +}