2024/11/11

修复成就BUG
添加了种新的拴绳药水箭的合成方式:药水箭+拴绳
This commit is contained in:
叁玖领域 2024-11-11 00:54:07 +08:00
parent e236e4a718
commit 17134e0d84
18 changed files with 152 additions and 70 deletions

View File

@ -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"
// }
}
}

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -5,7 +5,7 @@
"conditions": {
"items": [
{
"items": "leashedplayer:amethyst_shears"
"items": "leashedplayer:tipped_leash_rope_arrow"
}
]
},

View File

@ -1,4 +0,0 @@
{
"type": "minecraft:tipped_leash_rope_arrow_recipe",
"category": "misc"
}

View File

@ -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)
);
}
}
}

View File

@ -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);
}
}

View File

@ -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);
}

View File

@ -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);

View File

@ -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);
}

View File

@ -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;
}

View File

@ -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;
}
}
}

View File

@ -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);
}

View File

@ -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;

View File

@ -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)
);
}

View File

@ -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(

View File

@ -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");
}