2024/11/11
添加了彩蛋物品的獲取方式
This commit is contained in:
parent
087f203e00
commit
6c9f27041d
8
Resource/neoforge.json
Normal file
8
Resource/neoforge.json
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
{
|
||||
"credit": "Made with Blockbench",
|
||||
"parent": "minecraft:item/generated",
|
||||
"textures": {
|
||||
"1": "leashedplayer:item/neoforge",
|
||||
"particle": "leashedplayer:item/neoforge"
|
||||
}
|
||||
}
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
// 1.21 2024-11-08T12:16:30.8995908 Item Models: leashedplayer
|
||||
// 1.21 2024-11-11T12:51:27.0438541 Item Models: leashedplayer
|
||||
766c487fbf0c59e9045eeaf81daf583eb679b0e1 assets/leashedplayer/models/item/amethyst_shears.json
|
||||
5846df9d85726428905701120ef34c9324c20faf assets/leashedplayer/models/item/bow_lra_pulling_0.json
|
||||
845a7316b86e26f88c6932d4ef2656126503727a assets/leashedplayer/models/item/bow_lra_pulling_1.json
|
||||
|
|
@ -7,6 +7,5 @@
|
|||
bb0d76077719c83c8a8bd4346a24ea1766175125 assets/leashedplayer/models/item/fabric.json
|
||||
63ec6c618a3a23eab4cab9c52d7d3250de9b516e assets/leashedplayer/models/item/kid_spawn_egg.json
|
||||
114d3cc5832ef047403114504483c6f3ea07e77c assets/leashedplayer/models/item/leash_rope_arrow.json
|
||||
39b631c9dacf0481bfe8b84c7e7dd5841baf4ff7 assets/leashedplayer/models/item/neoforge.json
|
||||
c4748995a5fe190d20e3bd16f4b2244164ec0f83 assets/leashedplayer/models/item/spectral_leash_rope_arrow.json
|
||||
c4ef06f3162fe85f152c5b4a25ecdb4c2c56f945 assets/leashedplayer/models/item/tipped_leash_rope_arrow.json
|
||||
|
|
|
|||
|
|
@ -1,2 +1,3 @@
|
|||
// 1.21 2024-11-08T16:34:21.9849347 Tags for minecraft:item mod id leashedplayer
|
||||
// 1.21 2024-11-11T12:54:18.1914427 Tags for minecraft:item mod id leashedplayer
|
||||
63e4ad58dc8397171f84264d53dfe4fb503c7b1e data/minecraft/tags/item/arrows.json
|
||||
5cf114c796db4c2235df11ee7f656bba09d72a7a data/minecraft/tags/item/head_armor.json
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
// 1.21 2024-11-08T21:47:39.4393293 Languages: en_us for mod: leashedplayer
|
||||
b97b093aa096d9da7d04c5776b65187091d23f5a assets/leashedplayer/lang/en_us.json
|
||||
// 1.21 2024-11-11T13:22:05.9272287 Languages: en_us for mod: leashedplayer
|
||||
4addbeba8c66e52ed59604cfd0f32643a427565c assets/leashedplayer/lang/en_us.json
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
// 1.21 2024-11-08T21:47:39.4379612 Languages: zh_cn for mod: leashedplayer
|
||||
ab838eecdadc795951fdb15fe04df7ae6cbf67af assets/leashedplayer/lang/zh_cn.json
|
||||
// 1.21 2024-11-11T13:22:05.9272287 Languages: zh_cn for mod: leashedplayer
|
||||
fc4499fb20705f63dbce27b56b0b84cd94e63e8c assets/leashedplayer/lang/zh_cn.json
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
// 1.21 2024-11-10T23:56:54.4171709 Advancements
|
||||
// 1.21 2024-11-11T13:22:05.9272287 Advancements
|
||||
4d97adba079f1966090a52443bb439319f550680 data/leashedplayer/advancement/advancement_leash_arrow.json
|
||||
f16184b81ea35a0fbd8f2c49b085a96c32818c69 data/leashedplayer/advancement/dog_running_player.json
|
||||
bce12ed339b3b0fded263ba039f7a4e6fcfb84ca data/leashedplayer/advancement/follow_arrow.json
|
||||
|
|
@ -7,5 +7,6 @@ bce12ed339b3b0fded263ba039f7a4e6fcfb84ca data/leashedplayer/advancement/follow_a
|
|||
a69a455855fb6dd8a8ac131a55099de5de45d7c4 data/leashedplayer/advancement/leash_arrow.json
|
||||
133f844ffafd37b9ba57cafa96350f035cac57f9 data/leashedplayer/advancement/leash_start.json
|
||||
2d8bce7fd078f9cc6b73b77f2fbab30e6cc197f4 data/leashedplayer/advancement/leash_terminator.json
|
||||
4e567c22e18462ad367fe1817140d1ffa13a6294 data/leashedplayer/advancement/neo_fox.json
|
||||
4b0bcf6b372f52e954edcef37a6b04435ec2b4e8 data/leashedplayer/advancement/no_leash.json
|
||||
72f40eb5816d1e8c296bdf4df6b599c15ba7e7e9 data/leashedplayer/advancement/tipped_leash_arrow.json
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
// 1.21 2024-11-08T21:47:39.4299508 Languages: zh_tw for mod: leashedplayer
|
||||
dc4a7182da45af2eaa987ef614cb6b2aa1a9b5c0 assets/leashedplayer/lang/zh_tw.json
|
||||
// 1.21 2024-11-11T13:22:05.9192042 Languages: zh_tw for mod: leashedplayer
|
||||
5c54c9e6bbc71fd718b1c711ce7ed17452a78f39 assets/leashedplayer/lang/zh_tw.json
|
||||
|
|
|
|||
|
|
@ -15,6 +15,8 @@
|
|||
"advancement.leashedplayer.leashed_friend.desc": "Be Bond by player with lead",
|
||||
"advancement.leashedplayer.leashed_self": "Stable Connection",
|
||||
"advancement.leashedplayer.leashed_self.desc": "“Restrain oneself with a rope",
|
||||
"advancement.leashedplayer.neo_fox": "NEOFORGE!",
|
||||
"advancement.leashedplayer.neo_fox.desc": "It seems can be equipped.",
|
||||
"advancement.leashedplayer.no_leash": "Don't tie me up",
|
||||
"advancement.leashedplayer.no_leash.desc": "You cannot be leashed by ANY",
|
||||
"advancement.leashedplayer.tipped_leash_arrow": "God said there should be more arrows",
|
||||
|
|
|
|||
|
|
@ -15,6 +15,8 @@
|
|||
"advancement.leashedplayer.leashed_friend.desc": "被玩家用拴绳链接",
|
||||
"advancement.leashedplayer.leashed_self": "稳固联结",
|
||||
"advancement.leashedplayer.leashed_self.desc": "用拴绳拴住自己",
|
||||
"advancement.leashedplayer.neo_fox": "NEOFORGE!",
|
||||
"advancement.leashedplayer.neo_fox.desc": "似乎可以戴头上",
|
||||
"advancement.leashedplayer.no_leash": "勿拴我",
|
||||
"advancement.leashedplayer.no_leash.desc": "你不会被任何东西拴住",
|
||||
"advancement.leashedplayer.tipped_leash_arrow": "神说要有更多箭矢",
|
||||
|
|
|
|||
|
|
@ -15,6 +15,8 @@
|
|||
"advancement.leashedplayer.leashed_friend.desc": "被玩家用拴繩鏈接",
|
||||
"advancement.leashedplayer.leashed_self": "穩固聯結",
|
||||
"advancement.leashedplayer.leashed_self.desc": "用栓繩拴住自己",
|
||||
"advancement.leashedplayer.neo_fox": "NEOFORGE!",
|
||||
"advancement.leashedplayer.neo_fox.desc": "似乎可以戴著",
|
||||
"advancement.leashedplayer.no_leash": "請恁勿拴唔",
|
||||
"advancement.leashedplayer.no_leash.desc": "恁不會被任何拴住",
|
||||
"advancement.leashedplayer.tipped_leash_arrow": "神說要有更多箭矢",
|
||||
|
|
|
|||
|
|
@ -1,6 +0,0 @@
|
|||
{
|
||||
"parent": "minecraft:item/generated",
|
||||
"textures": {
|
||||
"layer0": "leashedplayer:item/neoforge"
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
{
|
||||
"parent": "leashedplayer:leash_start",
|
||||
"criteria": {
|
||||
"has_neo_fox": {
|
||||
"conditions": {
|
||||
"items": [
|
||||
{
|
||||
"items": "leashedplayer:neoforge"
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:inventory_changed"
|
||||
}
|
||||
},
|
||||
"display": {
|
||||
"announce_to_chat": false,
|
||||
"description": {
|
||||
"translate": "advancement.leashedplayer.neo_fox.desc"
|
||||
},
|
||||
"frame": "goal",
|
||||
"hidden": true,
|
||||
"icon": {
|
||||
"count": 1,
|
||||
"id": "leashedplayer:neoforge"
|
||||
},
|
||||
"title": {
|
||||
"translate": "advancement.leashedplayer.neo_fox"
|
||||
}
|
||||
},
|
||||
"requirements": [
|
||||
[
|
||||
"has_neo_fox"
|
||||
]
|
||||
],
|
||||
"sends_telemetry_event": true
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"type": "minecraft:tipped_leash_rope_arrow_a_recipe",
|
||||
"category": "misc"
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"type": "minecraft:tipped_leash_rope_arrow_b_recipe",
|
||||
"category": "misc"
|
||||
}
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"values": [
|
||||
"leashedplayer:neoforge",
|
||||
"minecraft:lead"
|
||||
]
|
||||
}
|
||||
|
|
@ -15,18 +15,26 @@ import com.r3944realms.leashedplayer.content.items.repcipe.ModRecipeSerializer;
|
|||
import com.r3944realms.leashedplayer.content.items.repcipe.TippedLeashRopeArrowRecipe;
|
||||
import com.r3944realms.leashedplayer.content.misc.LeadBreakItemBehavior;
|
||||
import com.r3944realms.leashedplayer.modInterface.PlayerLeashable;
|
||||
import com.r3944realms.leashedplayer.utils.Util;
|
||||
import net.minecraft.commands.CommandSourceStack;
|
||||
import net.minecraft.core.registries.BuiltInRegistries;
|
||||
import net.minecraft.world.effect.MobEffectInstance;
|
||||
import net.minecraft.world.entity.Entity;
|
||||
import net.minecraft.world.entity.EquipmentSlot;
|
||||
import net.minecraft.world.entity.Leashable;
|
||||
import net.minecraft.world.entity.LivingEntity;
|
||||
import net.minecraft.world.entity.animal.Fox;
|
||||
import net.minecraft.world.entity.item.ItemEntity;
|
||||
import net.minecraft.world.item.Item;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.item.Items;
|
||||
import net.minecraft.world.item.alchemy.PotionBrewing;
|
||||
import net.minecraft.world.item.alchemy.Potions;
|
||||
import net.minecraft.world.item.crafting.RecipeSerializer;
|
||||
import net.minecraft.world.item.crafting.SimpleCraftingRecipeSerializer;
|
||||
import net.minecraft.world.level.Level;
|
||||
import net.minecraft.world.level.block.DispenserBlock;
|
||||
import net.minecraft.world.phys.Vec3;
|
||||
import net.neoforged.bus.api.SubscribeEvent;
|
||||
import net.neoforged.fml.common.EventBusSubscriber;
|
||||
import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent;
|
||||
|
|
@ -56,7 +64,8 @@ public class CommonEventHandler {
|
|||
@SubscribeEvent
|
||||
public static void OnLivingTickEvent(EntityTickEvent.Post event) {
|
||||
Entity entity = event.getEntity();
|
||||
if (entity.level().isClientSide()) {
|
||||
Level level = entity.level();
|
||||
if (level.isClientSide()) {
|
||||
return;
|
||||
}
|
||||
if (entity instanceof LivingEntity living) {
|
||||
|
|
@ -76,6 +85,13 @@ public class CommonEventHandler {
|
|||
}
|
||||
}
|
||||
}
|
||||
if (entity instanceof Fox fox) {
|
||||
if (fox.getMainHandItem().is(Items.ANVIL)) {
|
||||
fox.setItemSlot(EquipmentSlot.MAINHAND, ItemStack.EMPTY);
|
||||
Util.throwItemTowardsLook(fox, ModItemRegister.NEOFORGE.get(), 1.0f, 0.1f);
|
||||
fox.playSound(fox.getEatingSound(ItemStack.EMPTY));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,11 +2,10 @@ 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) {
|
||||
public StunnedEffect() {
|
||||
super(MobEffectCategory.HARMFUL, 0XFFFBC5);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -46,7 +46,7 @@ public class ModItemRegister {
|
|||
);
|
||||
|
||||
public static final Supplier<Item> NEOFORGE = ModItemRegister.register("neoforge",
|
||||
() -> new Item(DistProperties(ModJukeboxSongs.FOX_MUSIC)));
|
||||
() -> new CanEquipOnHead(DistProperties(ModJukeboxSongs.FOX_MUSIC)));
|
||||
|
||||
public static Item.Properties DistProperties(ResourceKey<JukeboxSong> song) {
|
||||
return new Item.Properties().stacksTo(1).rarity(Rarity.RARE).jukeboxPlayable(song);
|
||||
|
|
|
|||
|
|
@ -0,0 +1,17 @@
|
|||
package com.r3944realms.leashedplayer.content.items.type;
|
||||
|
||||
import net.minecraft.world.entity.EquipmentSlot;
|
||||
import net.minecraft.world.item.Equipable;
|
||||
import net.minecraft.world.item.Item;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class CanEquipOnHead extends Item implements Equipable {
|
||||
public CanEquipOnHead(Properties pProperties) {
|
||||
super(pProperties);
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull EquipmentSlot getEquipmentSlot() {
|
||||
return EquipmentSlot.HEAD;
|
||||
}
|
||||
}
|
||||
|
|
@ -17,6 +17,7 @@ public enum ModAdvancementKey {
|
|||
NO_LEASH("no_leash", LEASH_START),
|
||||
LEASH_TERMINATOR("leash_terminator", LEASH_START),
|
||||
TIPPED_LEASH_ARROW("tipped_leash_arrow", LEASH_ARROW),
|
||||
NEO_FOX("neo_fox", LEASH_START),
|
||||
;
|
||||
private final String Name;
|
||||
@Nullable
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@ public enum ModLangKeyValue {
|
|||
TEST_FABRIC_ITEM(ModItemRegister.FABRIC, ModPartEnum.ITEM, "Fabric", "Fabric", "Fabric", true),
|
||||
AMETHYST_SHEARS(ModItemRegister.AMETHYST_SHEARS, ModPartEnum.ITEM, "Amethyst Shears", "紫水晶剪刀", "紫水晶剪刀", true),
|
||||
KID_SPAWN_EGG(ModItemRegister.KID_SPAWN_EGG, ModPartEnum.ITEM, "Kid Spawn Egg", "小孩生成蛋", "小孩生成蛋", false),
|
||||
NEO_FORGE(ModItemRegister.NEOFORGE, ModPartEnum.ITEM, "NeoForge", "NeoForge", "NeoForge", true),
|
||||
NEO_FORGE(ModItemRegister.NEOFORGE, ModPartEnum.ITEM, "NeoForge", "NeoForge", "NeoForge", false),
|
||||
TIPPED_LEASH_ROPE_ARROW(TippedLeashRopeArrow.TIPPED_LEASH_ROPE_ARROW_NAME, ModPartEnum.ITEM, "Tipped Leash Rope Arrow Soaked By %1$s", "用%1$s浸泡过的拴绳箭", "蘸有%1$s的拴繩箭", false),
|
||||
//ITEM_DESC
|
||||
DESC_ITEM_LEASH_ROPE_ARROW(LeashRopeArrowItem.descKey, ModPartEnum.DESCRIPTION, "Arrows with ropes attached?","带有拴绳的箭矢?", "帶有拴繩的箭矢?", false),
|
||||
|
|
@ -104,6 +104,7 @@ public enum ModLangKeyValue {
|
|||
TERMINATOR(ModAdvancementKey.LEASH_TERMINATOR.getNameKey(), ModPartEnum.NAME, "The Lead Terminator", "拴绳终结者","拴繩終結者", false),
|
||||
NO_LEASH(ModAdvancementKey.NO_LEASH.getNameKey(), ModPartEnum.NAME, "Don't tie me up", "勿拴我", "請恁勿拴唔", false),
|
||||
TIPPED_LEASH_ARROW(ModAdvancementKey.TIPPED_LEASH_ARROW.getNameKey(), ModPartEnum.NAME, "God said there should be more arrows", "神说要有更多箭矢", "神說要有更多箭矢", false),
|
||||
NEO_FOX(ModAdvancementKey.NEO_FOX.getNameKey(), ModPartEnum.NAME, "NEOFORGE!", "NEOFORGE!", "NEOFORGE!", false),
|
||||
//ADV_DESC
|
||||
LEASH_START_DESC(ModAdvancementKey.LEASH_START.getDescKey(), ModPartEnum.DESCRIPTION, "Journey to becoming a Leash Expert", "拴绳大师之路", "拴繩大師之路", false),
|
||||
LEASH_LR_ARROW_DESC(ModAdvancementKey.LEASH_ARROW.getDescKey(), ModPartEnum.DESCRIPTION, "Maybe you can using it to shoot some mob?", "也许可以用它来发射生物?", "也許可以用它發射生物?", false),
|
||||
|
|
@ -112,9 +113,10 @@ public enum ModLangKeyValue {
|
|||
LEASH_PLAYER_DESC(ModAdvancementKey.LEASHED_FRIEND.getDescKey(),ModPartEnum.DESCRIPTION, "Be Bond by player with lead", "被玩家用拴绳链接", "被玩家用拴繩鏈接", false),
|
||||
FOLLOW_ARROW_DESC(ModAdvancementKey.FOLLOW_LEASH_ARROW.getDescKey(), ModPartEnum.DESCRIPTION, "Mc, what are you talking about in physics?", "抱歉,我的世界不存在物理学" , "抱歉,麦块不講物理學",false),
|
||||
FOLLOW_WOLF_DESC(ModAdvancementKey.DOG_RUNNING_PLAYER.getDescKey(), ModPartEnum.DESCRIPTION, "In the park where dogs are not allowed to be walked, the dog decided to walk the human instead", "公园不能遛狗,于是狗站起来遛人", "公園裏不許遛狗,於是狗站起來遛人",false),
|
||||
NO_LEASH_DESC(ModAdvancementKey.NO_LEASH.getDescKey(), ModPartEnum.NAME, "You cannot be leashed by ANY", "你不会被任何东西拴住", "恁不會被任何拴住", false),
|
||||
NO_LEASH_DESC(ModAdvancementKey.NO_LEASH.getDescKey(), ModPartEnum.DESCRIPTION, "You cannot be leashed by ANY", "你不会被任何东西拴住", "恁不會被任何拴住", false),
|
||||
TERMINATOR_DESC(ModAdvancementKey.LEASH_TERMINATOR.getDescKey(), ModPartEnum.DESCRIPTION, "I am Lead Terminator!", "我來终结拴绳者!", "吾將終結拴繩!", false),
|
||||
TIPPED_LEASH_ARROW_DESC(ModAdvancementKey.TIPPED_LEASH_ARROW.getDescKey(), ModPartEnum.DESCRIPTION, "A dazzling array of Leash Rope arrows", "真是琳琅满目啊", "真是琳琅滿目啊", false),
|
||||
NEO_FOX_DESC(ModAdvancementKey.NEO_FOX.getDescKey(), ModPartEnum.DESCRIPTION, "It seems can be equipped.", "似乎可以戴头上", "似乎可以戴著", false),
|
||||
//MOB_EFFECT
|
||||
NO_LEASH_EFFECT(ModEffectRegister.getEffectKey(ModEffectRegister.NO_LEASH_EFFECT.get()), ModPartEnum.NAME, "No Leash", "禁拴", "禁拴", false),
|
||||
//POTION
|
||||
|
|
|
|||
|
|
@ -143,6 +143,18 @@ public class ModAdvancementGenerator implements AdvancementProvider.AdvancementG
|
|||
true
|
||||
).addCriterion("has_tipped_leash_arrow", InventoryChangeTrigger.TriggerInstance.hasItems(ModItemRegister.TIPPED_LEASH_ROPE_ARROW.get())
|
||||
).parent(hasLeashRopeArrow).save(saver, ModAdvancementKey.TIPPED_LEASH_ARROW.getNameWithNameSpace());
|
||||
AdvancementHolder neo_fox = Advancement.Builder.advancement().display(
|
||||
ModItemRegister.NEOFORGE.get(),
|
||||
Component.translatable(ModAdvancementKey.NEO_FOX.getNameKey()),
|
||||
Component.translatable(ModAdvancementKey.NEO_FOX.getDescKey()),
|
||||
null,
|
||||
AdvancementType.GOAL,
|
||||
true,
|
||||
false,
|
||||
true
|
||||
).addCriterion("has_neo_fox", InventoryChangeTrigger.TriggerInstance.hasItems(ModItemRegister.NEOFORGE.get())
|
||||
).parent(hasLeashRopeItem).save(saver, ModAdvancementKey.NEO_FOX.getNameWithNameSpace());
|
||||
|
||||
|
||||
AdvancementHolder no_leash = Advancement.Builder.advancement().display(
|
||||
Items.BARRIER,
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ import net.minecraft.core.HolderLookup;
|
|||
import net.minecraft.data.PackOutput;
|
||||
import net.minecraft.data.tags.ItemTagsProvider;
|
||||
import net.minecraft.tags.ItemTags;
|
||||
import net.minecraft.world.item.Items;
|
||||
import net.minecraft.world.level.block.Block;
|
||||
import net.neoforged.neoforge.common.data.ExistingFileHelper;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
|
@ -24,5 +25,8 @@ public class ModItemTagProvider extends ItemTagsProvider {
|
|||
.add(ModItemRegister.LEASH_ROPE_ARROW.get())
|
||||
.add(ModItemRegister.SPECTRAL_LEASH_ROPE_ARROW.get())
|
||||
.add(ModItemRegister.TIPPED_LEASH_ROPE_ARROW.get());
|
||||
this.tag(ItemTags.HEAD_ARMOR)
|
||||
.add(ModItemRegister.NEOFORGE.get())
|
||||
.add(Items.LEAD);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,13 +6,16 @@ import net.minecraft.server.level.ServerLevel;
|
|||
import net.minecraft.server.level.ServerPlayer;
|
||||
import net.minecraft.world.InteractionResult;
|
||||
import net.minecraft.world.entity.Entity;
|
||||
import net.minecraft.world.entity.EquipmentSlot;
|
||||
import net.minecraft.world.entity.Leashable;
|
||||
import net.minecraft.world.entity.decoration.LeashFenceKnotEntity;
|
||||
import net.minecraft.world.entity.player.Player;
|
||||
import net.minecraft.world.item.Equipable;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.item.LeadItem;
|
||||
import net.minecraft.world.level.Level;
|
||||
import net.minecraft.world.level.gameevent.GameEvent;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
|
|
@ -21,7 +24,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
|||
import java.util.List;
|
||||
|
||||
@Mixin(LeadItem.class)
|
||||
public class MixinLeadItem {
|
||||
public class MixinLeadItem implements Equipable {
|
||||
/**
|
||||
* 拴住自己的逻辑
|
||||
*/
|
||||
|
|
@ -54,4 +57,9 @@ public class MixinLeadItem {
|
|||
cir.setReturnValue(InteractionResult.SUCCESS);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull EquipmentSlot getEquipmentSlot() {
|
||||
return EquipmentSlot.HEAD;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,6 +2,11 @@ package com.r3944realms.leashedplayer.utils;
|
|||
|
||||
import com.r3944realms.leashedplayer.LeashedPlayer;
|
||||
import com.r3944realms.leashedplayer.content.gamerules.Gamerules;
|
||||
import net.minecraft.world.entity.Entity;
|
||||
import net.minecraft.world.entity.item.ItemEntity;
|
||||
import net.minecraft.world.item.Item;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.phys.Vec3;
|
||||
import net.neoforged.fml.loading.FMLPaths;
|
||||
|
||||
import java.io.File;
|
||||
|
|
@ -37,4 +42,23 @@ public class Util {
|
|||
}
|
||||
}
|
||||
}
|
||||
public static void throwItemTowardsLook(Entity thrower, Item itemToThrow, float velocity, float inaccuracy) {
|
||||
ItemEntity thrownItem = new ItemEntity(
|
||||
thrower.level(),
|
||||
thrower.getX(),
|
||||
thrower.getEyeY() - 0.1,
|
||||
thrower.getZ(),
|
||||
new ItemStack(itemToThrow)
|
||||
);
|
||||
|
||||
Vec3 lookDirection = thrower.getLookAngle();
|
||||
|
||||
thrownItem.setDeltaMovement(
|
||||
lookDirection.x * velocity + (thrower.level().random.nextGaussian() * 0.0075 * inaccuracy),
|
||||
lookDirection.y * velocity + (thrower.level().random.nextGaussian() * 0.0075 * inaccuracy),
|
||||
lookDirection.z * velocity + (thrower.level().random.nextGaussian() * 0.0075 * inaccuracy)
|
||||
);
|
||||
|
||||
thrower.level().addFreshEntity(thrownItem);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,12 @@
|
|||
{
|
||||
"parent": "minecraft:item/generated",
|
||||
"textures": {
|
||||
"layer0": "leashedplayer:item/neoforge"
|
||||
},
|
||||
"display": {
|
||||
"head": {
|
||||
"translation": [0, 0, -7.5],
|
||||
"scale": [1.25, 1.25, 1.25]
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user