2024/11/11
修复成就BUG 添加了种新的拴绳药水箭的合成方式:药水箭+拴绳
This commit is contained in:
parent
e236e4a718
commit
17134e0d84
12
build.gradle
12
build.gradle
|
|
@ -96,7 +96,7 @@ dependencies {
|
|||
// And its provides the option to then use net.minecraft as the group, and one of; client, server or joined as the module name, plus the game version as version.
|
||||
// For all intends and purposes: You can treat this dependency as if it is a normal library you would use.
|
||||
implementation "net.neoforged:neoforge:${neo_version}"
|
||||
|
||||
// compileOnly("mezz.jei:jei-${mc_version}-neoforge-api:${jei_version}")
|
||||
// Example optional mod dependency with JEI
|
||||
// The JEI API is declared for compile time use, while the full JEI artifact is used at runtime
|
||||
// compileOnly "mezz.jei:jei-${mc_version}-common-api:${jei_version}"
|
||||
|
|
@ -156,6 +156,16 @@ publishing {
|
|||
maven {
|
||||
url "file://${project.projectDir}/repo"
|
||||
}
|
||||
// maven {
|
||||
// // location of the maven that hosts JEI files since January 2023
|
||||
// name = "Jared's maven"
|
||||
// url = "https://maven.blamejared.com/"
|
||||
// }
|
||||
// maven {
|
||||
// // location of a maven mirror for JEI files, as a fallback
|
||||
// name = "ModMaven"
|
||||
// url = "https://modmaven.dev"
|
||||
// }
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -21,7 +21,9 @@ neo_version=21.0.157
|
|||
neo_version_range=[21.0.0-beta,)
|
||||
# The loader version range can only use the major version of FML as bounds
|
||||
loader_version_range=[4,)
|
||||
|
||||
#jei_setting
|
||||
#jei_version=19.5.0.59
|
||||
#mc_version=1.21
|
||||
## Mod Properties
|
||||
|
||||
# The unique mod identifier for the mod. Must be lowercase in English locale. Must fit the regex [a-z][a-z0-9_]{1,63}
|
||||
|
|
@ -32,7 +34,7 @@ mod_name=Leashed Player
|
|||
# The license of the mod. Review your options at https://choosealicense.com/. All Rights Reserved is the default.
|
||||
mod_license=MIT
|
||||
# The mod version. See https://semver.org/
|
||||
mod_version=0.0.3.9.9
|
||||
mod_version=0.0.3.9.9.1
|
||||
# The group ID for the mod. It is only important when publishing as an artifact to a Maven repository.
|
||||
# This should match the base package used for the mod sources.
|
||||
# See https://maven.apache.org/guides/mini/guide-naming-conventions.html
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
// 1.21 2024-11-08T16:34:21.9849347 Recipes
|
||||
// 1.21 2024-11-11T00:11:59.3315663 Recipes
|
||||
13ebe9a580731296eb10c05d1844657d58e07cc1 data/leashedplayer/advancement/recipes/misc/amethyst_shears.json
|
||||
1b45d1ad8dc73f1787c97777ad13d9771c9e0ad1 data/leashedplayer/advancement/recipes/misc/leash_rope_arrow.json
|
||||
04bd2d8a0c7288776da2119eb9a9f9cf694be1b6 data/leashedplayer/recipe/amethyst_shears.json
|
||||
|
|
@ -7,4 +7,5 @@ c0e05f359296d3e28573fa1b205ac44736376622 data/minecraft/advancement/recipes/misc
|
|||
131fcbef603bfde7204d8e1ad15e4544696926bf data/minecraft/advancement/recipes/misc/spectral_leash_rope_arrow_with_leash_rope_arrow.json
|
||||
bb5909aa91d878c8f0ef9999881cfe89532509dd data/minecraft/recipe/spectral_leash_rope_arrow_with_glowstone_dust.json
|
||||
a1381da885fbedec01243c78afbb0a50ca803ee4 data/minecraft/recipe/spectral_leash_rope_arrow_with_leash_rope_arrow.json
|
||||
0553b07b223b84a1e4b4ce089f92b56a4d76ee84 data/minecraft/recipe/tipped_leash_rope_arrow.json
|
||||
789cca4f5f6e86d5b7515afc4129121cf79d4579 data/minecraft/recipe/tipped_leash_rope_arrow_a.json
|
||||
afe9e74453638d25e9fed30fd2ddc23afcc4e397 data/minecraft/recipe/tipped_leash_rope_arrow_b.json
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
// 1.21 2024-11-08T21:47:39.4393293 Advancements
|
||||
// 1.21 2024-11-10T23:56:54.4171709 Advancements
|
||||
4d97adba079f1966090a52443bb439319f550680 data/leashedplayer/advancement/advancement_leash_arrow.json
|
||||
f16184b81ea35a0fbd8f2c49b085a96c32818c69 data/leashedplayer/advancement/dog_running_player.json
|
||||
bce12ed339b3b0fded263ba039f7a4e6fcfb84ca data/leashedplayer/advancement/follow_arrow.json
|
||||
|
|
@ -8,4 +8,4 @@ a69a455855fb6dd8a8ac131a55099de5de45d7c4 data/leashedplayer/advancement/leash_ar
|
|||
133f844ffafd37b9ba57cafa96350f035cac57f9 data/leashedplayer/advancement/leash_start.json
|
||||
2d8bce7fd078f9cc6b73b77f2fbab30e6cc197f4 data/leashedplayer/advancement/leash_terminator.json
|
||||
4b0bcf6b372f52e954edcef37a6b04435ec2b4e8 data/leashedplayer/advancement/no_leash.json
|
||||
f1350976a55f2344f2f3b12f00ad8f465f400de5 data/leashedplayer/advancement/tipped_leash_arrow.json
|
||||
72f40eb5816d1e8c296bdf4df6b599c15ba7e7e9 data/leashedplayer/advancement/tipped_leash_arrow.json
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
"conditions": {
|
||||
"items": [
|
||||
{
|
||||
"items": "leashedplayer:amethyst_shears"
|
||||
"items": "leashedplayer:tipped_leash_rope_arrow"
|
||||
}
|
||||
]
|
||||
},
|
||||
|
|
|
|||
|
|
@ -1,4 +0,0 @@
|
|||
{
|
||||
"type": "minecraft:tipped_leash_rope_arrow_recipe",
|
||||
"category": "misc"
|
||||
}
|
||||
|
|
@ -16,7 +16,7 @@ import com.r3944realms.leashedplayer.content.items.repcipe.TippedLeashRopeArrowR
|
|||
import com.r3944realms.leashedplayer.content.misc.LeadBreakItemBehavior;
|
||||
import com.r3944realms.leashedplayer.modInterface.PlayerLeashable;
|
||||
import net.minecraft.commands.CommandSourceStack;
|
||||
import net.minecraft.data.recipes.SpecialRecipeBuilder;
|
||||
import net.minecraft.core.registries.BuiltInRegistries;
|
||||
import net.minecraft.world.effect.MobEffectInstance;
|
||||
import net.minecraft.world.entity.Entity;
|
||||
import net.minecraft.world.entity.Leashable;
|
||||
|
|
@ -95,7 +95,17 @@ public class CommonEventHandler {
|
|||
}
|
||||
@SubscribeEvent
|
||||
public static void onRegisterEvent(RegisterEvent event) {
|
||||
ModRecipeSerializer.TIPPED_LEASH_ROPE_ARROW_RECIPE = RecipeSerializer.register("tipped_leash_rope_arrow_recipe", new SimpleCraftingRecipeSerializer<>(TippedLeashRopeArrowRecipe::new));
|
||||
if (event.getRegistry() == BuiltInRegistries.RECIPE_SERIALIZER) {
|
||||
ModRecipeSerializer.TIPPED_LEASH_ROPE_ARROW_A_RECIPE =
|
||||
RecipeSerializer.register(
|
||||
"tipped_leash_rope_arrow_a_recipe",
|
||||
new SimpleCraftingRecipeSerializer<>(TippedLeashRopeArrowRecipe.TippedLeashRopeArrowARecipe::new)
|
||||
);
|
||||
ModRecipeSerializer.TIPPED_LEASH_ROPE_ARROW_B_RECIPE =
|
||||
RecipeSerializer.register("tipped_leash_rope_arrow_b_recipe",
|
||||
new SimpleCraftingRecipeSerializer<>(TippedLeashRopeArrowRecipe.TippedLeashRopeArrowBRecipe::new)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,12 @@
|
|||
package com.r3944realms.leashedplayer.content.effects.type;
|
||||
|
||||
import net.minecraft.world.effect.MobEffect;
|
||||
import net.minecraft.world.effect.MobEffectCategory;
|
||||
import net.minecraft.world.entity.ai.attributes.Attributes;
|
||||
|
||||
|
||||
public class StunnedEffect extends MobEffect {
|
||||
public StunnedEffect(MobEffectCategory pCategory, int pColor) {
|
||||
super(MobEffectCategory.HARMFUL, 0XFFFBC5);
|
||||
}
|
||||
}
|
||||
|
|
@ -15,7 +15,6 @@ import net.minecraft.network.syncher.EntityDataSerializers;
|
|||
import net.minecraft.network.syncher.SynchedEntityData;
|
||||
import net.minecraft.server.level.ServerLevel;
|
||||
import net.minecraft.server.level.ServerPlayer;
|
||||
import net.minecraft.sounds.SoundEvent;
|
||||
import net.minecraft.sounds.SoundEvents;
|
||||
import net.minecraft.tags.BlockTags;
|
||||
import net.minecraft.world.effect.MobEffectInstance;
|
||||
|
|
@ -27,7 +26,6 @@ import net.minecraft.world.entity.decoration.LeashFenceKnotEntity;
|
|||
import net.minecraft.world.entity.item.ItemEntity;
|
||||
import net.minecraft.world.entity.player.Player;
|
||||
import net.minecraft.world.entity.projectile.AbstractArrow;
|
||||
import net.minecraft.world.entity.projectile.Arrow;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.item.Items;
|
||||
import net.minecraft.world.item.alchemy.PotionContents;
|
||||
|
|
@ -66,7 +64,7 @@ public class LeashRopeArrow extends AbstractArrow {
|
|||
}
|
||||
|
||||
@Override
|
||||
protected void defineSynchedData(SynchedEntityData.Builder pBuilder) {
|
||||
protected void defineSynchedData(SynchedEntityData.@NotNull Builder pBuilder) {
|
||||
super.defineSynchedData(pBuilder);
|
||||
pBuilder.define(ID_EFFECT_COLOR, -1);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ import static com.r3944realms.leashedplayer.content.gamerules.Gamerules.GAMERULE
|
|||
|
||||
@EventBusSubscriber(modid = LeashedPlayer.MOD_ID, bus = EventBusSubscriber.Bus.MOD)
|
||||
public class DefaultTalkArea {
|
||||
public static String CHAT_NONE_HEARD_YOU = "leashedplayer.chat.none_heard_you";
|
||||
public static final String CHAT_NONE_HEARD_YOU = "leashedplayer.chat.none_heard_you";
|
||||
public static final int DEFAULT_VALUE = -1;
|
||||
public static final String ID = Util.getGameruleName(DefaultTalkArea.class);
|
||||
public static final String DESCRIPTION_KEY = Gamerules.getDescriptionKey(DefaultTalkArea.class);
|
||||
|
|
|
|||
|
|
@ -47,6 +47,7 @@ public class ModItemRegister {
|
|||
|
||||
public static final Supplier<Item> NEOFORGE = ModItemRegister.register("neoforge",
|
||||
() -> new Item(DistProperties(ModJukeboxSongs.FOX_MUSIC)));
|
||||
|
||||
public static Item.Properties DistProperties(ResourceKey<JukeboxSong> song) {
|
||||
return new Item.Properties().stacksTo(1).rarity(Rarity.RARE).jukeboxPlayable(song);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,5 +4,6 @@ import net.minecraft.world.item.crafting.Recipe;
|
|||
import net.minecraft.world.item.crafting.RecipeSerializer;
|
||||
|
||||
public abstract class ModRecipeSerializer<T extends Recipe<?>> implements RecipeSerializer<T> {
|
||||
public static RecipeSerializer<TippedLeashRopeArrowRecipe> TIPPED_LEASH_ROPE_ARROW_RECIPE;
|
||||
public static RecipeSerializer<TippedLeashRopeArrowRecipe.TippedLeashRopeArrowARecipe> TIPPED_LEASH_ROPE_ARROW_A_RECIPE;
|
||||
public static RecipeSerializer<TippedLeashRopeArrowRecipe.TippedLeashRopeArrowBRecipe> TIPPED_LEASH_ROPE_ARROW_B_RECIPE;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,61 +5,115 @@ import net.minecraft.core.HolderLookup;
|
|||
import net.minecraft.core.component.DataComponents;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.item.Items;
|
||||
import net.minecraft.world.item.crafting.*;
|
||||
import net.minecraft.world.item.crafting.CraftingBookCategory;
|
||||
import net.minecraft.world.item.crafting.CraftingInput;
|
||||
import net.minecraft.world.item.crafting.CustomRecipe;
|
||||
import net.minecraft.world.item.crafting.RecipeSerializer;
|
||||
import net.minecraft.world.level.Level;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class TippedLeashRopeArrowRecipe extends CustomRecipe {
|
||||
public TippedLeashRopeArrowRecipe(CraftingBookCategory pCategory) {
|
||||
super(pCategory);
|
||||
}
|
||||
public abstract class TippedLeashRopeArrowRecipe {
|
||||
public static class TippedLeashRopeArrowARecipe extends CustomRecipe {
|
||||
public TippedLeashRopeArrowARecipe(CraftingBookCategory pCategory) {
|
||||
super(pCategory);
|
||||
}
|
||||
|
||||
public boolean matches(CraftingInput pInput, @NotNull Level pLevel) {
|
||||
if (pInput.width() == 3 && pInput.height() == 3) {
|
||||
for (int i = 0; i < pInput.height(); i++) {
|
||||
for (int j = 0; j < pInput.width(); j++) {
|
||||
ItemStack itemstack = pInput.getItem(j, i);
|
||||
if (itemstack.isEmpty()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (j == 1 && i == 1) {
|
||||
if (!itemstack.is(Items.LINGERING_POTION)) {
|
||||
public boolean matches(CraftingInput pInput, @NotNull Level pLevel) {
|
||||
if (pInput.width() == 3 && pInput.height() == 3) {
|
||||
for (int i = 0; i < pInput.height(); i++) {
|
||||
for (int j = 0; j < pInput.width(); j++) {
|
||||
ItemStack itemstack = pInput.getItem(j, i);
|
||||
if (itemstack.isEmpty()) {
|
||||
return false;
|
||||
}
|
||||
} else if (!itemstack.is(ModItemRegister.LEASH_ROPE_ARROW.get())) {
|
||||
return false;
|
||||
|
||||
if (j == 1 && i == 1) {
|
||||
if (!itemstack.is(Items.LINGERING_POTION)) {
|
||||
return false;
|
||||
}
|
||||
} else if (!itemstack.is(ModItemRegister.LEASH_ROPE_ARROW.get())) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public @NotNull ItemStack assemble(CraftingInput pInput, HolderLookup.@NotNull Provider pRegistries) {
|
||||
ItemStack itemstack = pInput.getItem(1, 1);
|
||||
if (!itemstack.is(Items.LINGERING_POTION)) {
|
||||
return ItemStack.EMPTY;
|
||||
} else {
|
||||
ItemStack itemstack1 = new ItemStack(ModItemRegister.TIPPED_LEASH_ROPE_ARROW.get(), 8);
|
||||
itemstack1.set(DataComponents.POTION_CONTENTS, itemstack.get(DataComponents.POTION_CONTENTS));
|
||||
return itemstack1;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Used to determine if this recipe can fit in a grid of the given width/height
|
||||
*/
|
||||
@Override
|
||||
public boolean canCraftInDimensions(int pWidth, int pHeight) {
|
||||
return pWidth >= 3 && pHeight >= 3;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull RecipeSerializer<?> getSerializer() {
|
||||
return ModRecipeSerializer.TIPPED_LEASH_ROPE_ARROW_A_RECIPE;
|
||||
}
|
||||
}
|
||||
public static class TippedLeashRopeArrowBRecipe extends CustomRecipe {
|
||||
|
||||
public TippedLeashRopeArrowBRecipe(CraftingBookCategory pCategory) {
|
||||
super(pCategory);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean matches(CraftingInput pInput, @NotNull Level pLevel) {
|
||||
int tipped_arrow_count = 0, lead_count = 0;
|
||||
for (int i = 0; i < pInput.width(); i++) {
|
||||
for (int j = 0; j < pInput.height(); j++) {
|
||||
if (pInput.getItem(i, j).is(Items.TIPPED_ARROW))
|
||||
tipped_arrow_count++;
|
||||
else if(pInput.getItem(i, j).is(Items.LEAD))
|
||||
lead_count++;
|
||||
}
|
||||
}
|
||||
return tipped_arrow_count == 1 && lead_count == 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull ItemStack assemble(@NotNull CraftingInput pInput, HolderLookup.@NotNull Provider pRegistries) {
|
||||
ItemStack tipped_arrow = null;
|
||||
NODE:for (int i = 0; i < pInput.width(); i++) {
|
||||
for (int j = 0; j < pInput.height(); j++) {
|
||||
if (pInput.getItem(i, j).is(Items.TIPPED_ARROW)) {
|
||||
tipped_arrow = pInput.getItem(i, j);
|
||||
break NODE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public @NotNull ItemStack assemble(CraftingInput pInput, HolderLookup.@NotNull Provider pRegistries) {
|
||||
ItemStack itemstack = pInput.getItem(1, 1);
|
||||
if (!itemstack.is(Items.LINGERING_POTION)) {
|
||||
if(tipped_arrow != null) {
|
||||
ItemStack itemstack1 = new ItemStack(ModItemRegister.TIPPED_LEASH_ROPE_ARROW.get(), 1);
|
||||
itemstack1.set(DataComponents.POTION_CONTENTS, tipped_arrow.get(DataComponents.POTION_CONTENTS));
|
||||
return itemstack1;
|
||||
}
|
||||
return ItemStack.EMPTY;
|
||||
} else {
|
||||
ItemStack itemstack1 = new ItemStack(ModItemRegister.TIPPED_LEASH_ROPE_ARROW.get(), 8);
|
||||
itemstack1.set(DataComponents.POTION_CONTENTS, itemstack.get(DataComponents.POTION_CONTENTS));
|
||||
return itemstack1;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Used to determine if this recipe can fit in a grid of the given width/height
|
||||
*/
|
||||
@Override
|
||||
public boolean canCraftInDimensions(int pWidth, int pHeight) {
|
||||
return pWidth >= 3 && pHeight >= 3;
|
||||
}
|
||||
@Override
|
||||
public boolean canCraftInDimensions(int pWidth, int pHeight) {
|
||||
return pWidth >= 2 && pHeight >= 2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull RecipeSerializer<?> getSerializer() {
|
||||
return ModRecipeSerializer.TIPPED_LEASH_ROPE_ARROW_RECIPE;
|
||||
@Override
|
||||
public @NotNull RecipeSerializer<?> getSerializer() {
|
||||
return ModRecipeSerializer.TIPPED_LEASH_ROPE_ARROW_B_RECIPE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ import org.jetbrains.annotations.NotNull;
|
|||
import java.util.List;
|
||||
|
||||
public class LeadBreakerItem extends ShearsItem {
|
||||
public static String HOVER_KEY = "leashedplayer.lead_breaker.item.desc";
|
||||
public static final String HOVER_KEY = "leashedplayer.lead_breaker.item.desc";
|
||||
public LeadBreakerItem(Properties properties) {
|
||||
super(properties);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@ import com.r3944realms.leashedplayer.content.items.ModItemRegister;
|
|||
import com.r3944realms.leashedplayer.content.items.type.LeadBreakerItem;
|
||||
import com.r3944realms.leashedplayer.content.items.type.LeashRopeArrowItem;
|
||||
import com.r3944realms.leashedplayer.content.items.type.TippedLeashRopeArrow;
|
||||
import com.r3944realms.leashedplayer.content.misc.LeadBreakItemBehavior;
|
||||
import com.r3944realms.leashedplayer.content.sounds.ModSoundRegister;
|
||||
import com.r3944realms.leashedplayer.datagen.provider.attributes.ModPaintingVariants;
|
||||
import com.r3944realms.leashedplayer.utils.Enum.LanguageEnum;
|
||||
|
|
|
|||
|
|
@ -84,9 +84,7 @@ public class ModDataGeneratorHandler {
|
|||
private static void ModPaintVariantTagsProvider(GatherDataEvent event, CompletableFuture<HolderLookup.Provider> completableFuture, ExistingFileHelper helper) {
|
||||
event.getGenerator().addProvider(
|
||||
event.includeServer(),
|
||||
(DataProvider.Factory<ModPaintingVariantTagsProvider>) pOutput -> {
|
||||
return new ModPaintingVariantTagsProvider(pOutput, completableFuture, LeashedPlayer.MOD_ID, helper);
|
||||
}
|
||||
(DataProvider.Factory<ModPaintingVariantTagsProvider>) pOutput -> new ModPaintingVariantTagsProvider(pOutput, completableFuture, LeashedPlayer.MOD_ID, helper)
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -141,7 +141,7 @@ public class ModAdvancementGenerator implements AdvancementProvider.AdvancementG
|
|||
true,
|
||||
true,
|
||||
true
|
||||
).addCriterion("has_tipped_leash_arrow", InventoryChangeTrigger.TriggerInstance.hasItems(ModItemRegister.AMETHYST_SHEARS.get())
|
||||
).addCriterion("has_tipped_leash_arrow", InventoryChangeTrigger.TriggerInstance.hasItems(ModItemRegister.TIPPED_LEASH_ROPE_ARROW.get())
|
||||
).parent(hasLeashRopeArrow).save(saver, ModAdvancementKey.TIPPED_LEASH_ARROW.getNameWithNameSpace());
|
||||
|
||||
AdvancementHolder no_leash = Advancement.Builder.advancement().display(
|
||||
|
|
|
|||
|
|
@ -45,8 +45,8 @@ public class ModRecipeProvider extends RecipeProvider {
|
|||
.define('%', Items.STICK)
|
||||
.unlockedBy("has_amethyst_shard",has(Items.AMETHYST_SHARD))
|
||||
.save(pRecipeOutput);
|
||||
SpecialRecipeBuilder.special(TippedLeashRopeArrowRecipe::new).save(pRecipeOutput,"tipped_leash_rope_arrow");
|
||||
|
||||
SpecialRecipeBuilder.special(TippedLeashRopeArrowRecipe.TippedLeashRopeArrowARecipe::new).save(pRecipeOutput,"tipped_leash_rope_arrow_a");
|
||||
SpecialRecipeBuilder.special(TippedLeashRopeArrowRecipe.TippedLeashRopeArrowBRecipe::new).save(pRecipeOutput,"tipped_leash_rope_arrow_b");
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user