2024/11/26

联动内容#2
增加一些提示内容
This commit is contained in:
叁玖领域 2024-11-26 17:21:15 +08:00
parent b6cbcdd677
commit 52f30a4275
23 changed files with 279 additions and 19 deletions

View File

@ -1,2 +1,2 @@
// 1.21 2024-11-25T23:24:58.9917691 Languages: en_us for mod: leashedplayer
878249de532f1f04ea0ec260372cdcff2c157dc3 assets/leashedplayer/lang/en_us.json
// 1.21 2024-11-26T17:09:48.5933988 Languages: en_us for mod: leashedplayer
57ac9ce831572aed1cf8738231d163e08de00da8 assets/leashedplayer/lang/en_us.json

View File

@ -1,10 +1,14 @@
// 1.21 2024-11-16T17:30:08.038895 Recipes
// 1.21 2024-11-26T16:39:25.2156177 Recipes
13ebe9a580731296eb10c05d1844657d58e07cc1 data/leashedplayer/advancement/recipes/misc/amethyst_shears.json
1b45d1ad8dc73f1787c97777ad13d9771c9e0ad1 data/leashedplayer/advancement/recipes/misc/leash_rope_arrow.json
a89ec35176f84a580181c5839d6f249e482a65a9 data/leashedplayer/advancement/recipes/misc/nestle_rope_arrow.json
04bd2d8a0c7288776da2119eb9a9f9cf694be1b6 data/leashedplayer/recipe/amethyst_shears.json
974d74538b3e172946f2e169036b453b6eb6bc0a data/leashedplayer/recipe/leash_rope_arrow.json
093bae9d2e24a901ce8450d802ad5d142d1d74ed data/leashedplayer/recipe/nestle_rope_arrow.json
8de575d00dcc51fce8ebfa2542e193ffda1bafa8 data/minecraft/advancement/recipes/misc/nestle_rope_arrow_with_leash_rope_arrow.json
c0e05f359296d3e28573fa1b205ac44736376622 data/minecraft/advancement/recipes/misc/spectral_leash_rope_arrow_with_glowstone_dust.json
131fcbef603bfde7204d8e1ad15e4544696926bf data/minecraft/advancement/recipes/misc/spectral_leash_rope_arrow_with_leash_rope_arrow.json
fb35ec6670c3711b7e1d0e96f39ad914cb2419ae data/minecraft/recipe/nestle_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
4dffdb7a2a537b409d1ec2630d9b74300649e1d8 data/minecraft/recipe/tipped_leash_rope_arrow_a.json

View File

@ -1,2 +1,2 @@
// 1.21 2024-11-25T23:24:58.9852241 Languages: zh_cn for mod: leashedplayer
af57838d87cf64232255fdd3559cca32c9fe1234 assets/leashedplayer/lang/zh_cn.json
// 1.21 2024-11-26T17:09:48.5933988 Languages: zh_cn for mod: leashedplayer
3920364b756e9b539f175e6ac73a363020a232dd assets/leashedplayer/lang/zh_cn.json

View File

@ -1,4 +1,4 @@
// 1.21 2024-11-11T13:22:05.9272287 Advancements
// 1.21 2024-11-26T16:52:31.259654 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,5 +8,6 @@ a69a455855fb6dd8a8ac131a55099de5de45d7c4 data/leashedplayer/advancement/leash_ar
133f844ffafd37b9ba57cafa96350f035cac57f9 data/leashedplayer/advancement/leash_start.json
2d8bce7fd078f9cc6b73b77f2fbab30e6cc197f4 data/leashedplayer/advancement/leash_terminator.json
4e567c22e18462ad367fe1817140d1ffa13a6294 data/leashedplayer/advancement/neo_fox.json
95486932f200c278f23444adca2e328a82e7f863 data/leashedplayer/advancement/nestle_arrow.json
4b0bcf6b372f52e954edcef37a6b04435ec2b4e8 data/leashedplayer/advancement/no_leash.json
72f40eb5816d1e8c296bdf4df6b599c15ba7e7e9 data/leashedplayer/advancement/tipped_leash_arrow.json

View File

@ -1,2 +1,2 @@
// 1.21 2024-11-25T23:24:58.9831886 Languages: zh_tw for mod: leashedplayer
3e36d57b135382366fe919c8ce4aac57866d6ee8 assets/leashedplayer/lang/zh_tw.json
// 1.21 2024-11-26T17:09:48.5933988 Languages: zh_tw for mod: leashedplayer
08058702caab57d64d479cf22d4b5c1e10c4110d assets/leashedplayer/lang/zh_tw.json

View File

@ -17,6 +17,8 @@
"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.nestle_arrow": "Arrow with the Power of Nestle!",
"advancement.leashedplayer.nestle_arrow.desc": "The Power of Nestle!!!",
"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",
@ -64,6 +66,9 @@
"jukebox_song.leashedplayer.what_does_the_fox_say": "What does the fox say?",
"key.leashedplayer.apply_talkarea_preference": "Apply TalkArea Preference",
"key.leashedplayer.category": "Leashed Player",
"key.leashedplayer.leash_length.add": "Increase the Length of Leash Rope",
"key.leashedplayer.leash_length.not_support_to_not_player_entity": "Only work on Players",
"key.leashedplayer.leash_length.sub": "Decrease the Length of Leash Rope",
"leashedplayer.chat.none_heard_you": "Nobody heard your message",
"leashedplayer.command.chat.message.no_right": "You haven't the right to do that!",
"leashedplayer.command.chat.message.talkarea.current_config": "%s 's §6TalkArea Current§7:§e %d §6blocks §f(§aPrefence§7:§e %d §ablocks§f)§r",
@ -92,6 +97,9 @@
"leashedplayer.command.motion.message.multiply.successful": "§bMultiply Successfully.§a%s§7:§f[§eVec§7: §a(§f%f§7,§f%f§7,§f%f§a)§f]§r",
"leashedplayer.command.motion.message.setter.successful": "§bSet Successfully.§a%s§7:§f[§eVec§7: §a(§f%f§7,§f%f§7,§f%f§a)§f]§r",
"leashedplayer.lead_breaker.item.desc": "§7can break the link of leash",
"leashedplayer.lead_breaker.item.use_fai": "§cFailed to break §f%1$s§c 's Leashed Link to §f%2$s",
"leashedplayer.lead_breaker.item.use_suf": "§aSuccessfully break §f%1$s§a 's Leashed Link to §f%2$s ",
"leashedplayer.leash_rope_arrow.try_to_pickup.push_shift_tip": "§aPush §f§lShift§a to pick up quickly",
"multiplayer.disconnect.addiction": "You've triggered the anti-addiction mechanic, and you'll come back when you rest!",
"painting.leashedplayer.group_photo.author": "§9Leisure §4Time §eDock§r",
"painting.leashedplayer.group_photo.title": "§dGroup Photo §7[§6memorable§7]§r",

View File

@ -17,6 +17,8 @@
"advancement.leashedplayer.leashed_self.desc": "用拴绳拴住自己",
"advancement.leashedplayer.neo_fox": "NEOFORGE!",
"advancement.leashedplayer.neo_fox.desc": "似乎可以戴头上",
"advancement.leashedplayer.nestle_arrow": "贴贴之箭!",
"advancement.leashedplayer.nestle_arrow.desc": "贴贴之力!!!",
"advancement.leashedplayer.no_leash": "勿拴我",
"advancement.leashedplayer.no_leash.desc": "你不会被任何东西拴住",
"advancement.leashedplayer.tipped_leash_arrow": "神说要有更多箭矢",
@ -64,6 +66,9 @@
"jukebox_song.leashedplayer.what_does_the_fox_say": "狐狸是怎么叫的?",
"key.leashedplayer.apply_talkarea_preference": "应用可见区域预设",
"key.leashedplayer.category": "可拴玩家",
"key.leashedplayer.leash_length.add": "增加拴绳长度",
"key.leashedplayer.leash_length.not_support_to_not_player_entity": "只在玩家身上有效",
"key.leashedplayer.leash_length.sub": "减小拴绳长度",
"leashedplayer.chat.none_heard_you": "沒有人接收到你的消息",
"leashedplayer.command.chat.message.no_right": "你无权这样做!",
"leashedplayer.command.chat.message.talkarea.current_config": "%s§6目前聊天区域可见半径设置§7:§e %d §6格 §f(§a默认值§7:§e %d §a格§f)§r",
@ -92,6 +97,9 @@
"leashedplayer.command.motion.message.multiply.successful": "§b倍乘成功.§a%s§7:§f[§e加速度§7:§a(§f%f§7,§f%f§7,§f%f§a)§f]§r",
"leashedplayer.command.motion.message.setter.successful": "§b设置成功.§a%s§7:§f[§e加速度§7:§a(§f%f§7,§f%f§7,§f%f§a)§f]§r",
"leashedplayer.lead_breaker.item.desc": "§7可以破坏拴绳链接",
"leashedplayer.lead_breaker.item.use_fai": "§c无法剪断§f%2$s§c对§f%1$s§c拴绳链接",
"leashedplayer.lead_breaker.item.use_suf": "§a成功剪断§f%2$s§a对§f%1$s§a拴绳链接",
"leashedplayer.leash_rope_arrow.try_to_pickup.push_shift_tip": "§a按下§f§lShift键§a以加快拾取",
"multiplayer.disconnect.addiction": "你触发了防沉迷机制,休息会再来吧!",
"painting.leashedplayer.group_photo.author": "§9闲趣§4时§e坞§r",
"painting.leashedplayer.group_photo.title": "§d集体照 §7[§6纪念§7]§r",

View File

@ -17,6 +17,8 @@
"advancement.leashedplayer.leashed_self.desc": "用栓繩拴住自己",
"advancement.leashedplayer.neo_fox": "NEOFORGE!",
"advancement.leashedplayer.neo_fox.desc": "似乎可以戴著",
"advancement.leashedplayer.nestle_arrow": "貼貼之箭!",
"advancement.leashedplayer.nestle_arrow.desc": "貼貼之力!!!",
"advancement.leashedplayer.no_leash": "請恁勿拴唔",
"advancement.leashedplayer.no_leash.desc": "恁不會被任何拴住",
"advancement.leashedplayer.tipped_leash_arrow": "神說要有更多箭矢",
@ -64,6 +66,9 @@
"jukebox_song.leashedplayer.what_does_the_fox_say": "狐狸是怎麽叫的?",
"key.leashedplayer.apply_talkarea_preference": "應用設置可見區域預設",
"key.leashedplayer.category": "可拴玩家",
"key.leashedplayer.leash_length.add": "增加拴繩長度",
"key.leashedplayer.leash_length.not_support_to_not_player_entity": "僅對玩家有效",
"key.leashedplayer.leash_length.sub": "減小拴繩長度",
"leashedplayer.chat.none_heard_you": "無人接收到你的訊息",
"leashedplayer.command.chat.message.no_right": "你無權這麽做!",
"leashedplayer.command.chat.message.talkarea.current_config": "%s§6目前可見訊息聊天半徑設置§7:§e%d §6格 §f(§a默認值§7:§e%d §a格§f)§r",
@ -92,6 +97,9 @@
"leashedplayer.command.motion.message.multiply.successful": "§b倍乘成功.§a%s§7:§f[§e加速度§7:§a(§f%f§7,§f%f§7,§f%f§a)§f]§r",
"leashedplayer.command.motion.message.setter.successful": "§b設置成功.§a%s§7:§f[§e加速度§7:§a(§f%f§7,§f%f§7,§f%f§a)§f]§r",
"leashedplayer.lead_breaker.item.desc": "§7可以破壞拴繩鏈接",
"leashedplayer.lead_breaker.item.use_fai": "§c未能剪斷§f%2$s§c對§f%1$s§c拴繩鏈接",
"leashedplayer.lead_breaker.item.use_suf": "§a成功剪斷§f%2$s§a對§f%1$s§a拴繩鏈接",
"leashedplayer.leash_rope_arrow.try_to_pickup.push_shift_tip": "§a按下§f§lShift鍵§a以加速拾取",
"multiplayer.disconnect.addiction": "你觸發了防沉迷機制,休息會再來吧!",
"painting.leashedplayer.group_photo.author": "§9閑趣§4時§e塢§r",
"painting.leashedplayer.group_photo.title": "§d集體照 §7[§6紀念§7]§r",

View File

@ -0,0 +1,35 @@
{
"parent": "leashedplayer:leash_arrow",
"criteria": {
"has_nestle_rope_arrow": {
"conditions": {
"items": [
{
"items": "leashedplayer:nestle_rope_arrow"
}
]
},
"trigger": "minecraft:inventory_changed"
}
},
"display": {
"description": {
"translate": "advancement.leashedplayer.nestle_arrow.desc"
},
"frame": "goal",
"hidden": true,
"icon": {
"count": 1,
"id": "leashedplayer:nestle_rope_arrow"
},
"title": {
"translate": "advancement.leashedplayer.nestle_arrow"
}
},
"requirements": [
[
"has_nestle_rope_arrow"
]
],
"sends_telemetry_event": true
}

View File

@ -0,0 +1,32 @@
{
"parent": "minecraft:recipes/root",
"criteria": {
"has_nestle_rope": {
"conditions": {
"items": [
{
"items": "nestle:nestle_lead"
}
]
},
"trigger": "minecraft:inventory_changed"
},
"has_the_recipe": {
"conditions": {
"recipe": "leashedplayer:nestle_rope_arrow"
},
"trigger": "minecraft:recipe_unlocked"
}
},
"requirements": [
[
"has_the_recipe",
"has_nestle_rope"
]
],
"rewards": {
"recipes": [
"leashedplayer:nestle_rope_arrow"
]
}
}

View File

@ -0,0 +1,16 @@
{
"type": "minecraft:crafting_shapeless",
"category": "misc",
"ingredients": [
{
"item": "nestle:nestle_lead"
},
{
"item": "minecraft:arrow"
}
],
"result": {
"count": 1,
"id": "leashedplayer:nestle_rope_arrow"
}
}

View File

@ -0,0 +1,32 @@
{
"parent": "minecraft:recipes/root",
"criteria": {
"has_nestle": {
"conditions": {
"items": [
{
"items": "nestle:nestle"
}
]
},
"trigger": "minecraft:inventory_changed"
},
"has_the_recipe": {
"conditions": {
"recipe": "minecraft:nestle_rope_arrow_with_leash_rope_arrow"
},
"trigger": "minecraft:recipe_unlocked"
}
},
"requirements": [
[
"has_the_recipe",
"has_nestle"
]
],
"rewards": {
"recipes": [
"minecraft:nestle_rope_arrow_with_leash_rope_arrow"
]
}
}

View File

@ -0,0 +1,16 @@
{
"type": "minecraft:crafting_shapeless",
"category": "misc",
"ingredients": [
{
"item": "nestle:nestle"
},
{
"item": "leashedplayer:leash_rope_arrow"
}
],
"result": {
"count": 1,
"id": "leashedplayer:nestle_rope_arrow"
}
}

View File

@ -4,7 +4,6 @@ import com.r3944realms.leashedplayer.client.renders.entities.*;
import com.r3944realms.leashedplayer.content.ModKeyMapping;
import com.r3944realms.leashedplayer.content.commands.Command;
import com.r3944realms.leashedplayer.content.entities.ModEntityRegister;
import com.r3944realms.leashedplayer.content.entities.NestleRopeArrow;
import com.r3944realms.leashedplayer.content.gamerules.GameruleRegistry;
import com.r3944realms.leashedplayer.content.gamerules.Server.OpenTOPNeededModeWhenScreenIsNotNull;
import com.r3944realms.leashedplayer.content.items.ModItemRegister;
@ -118,6 +117,8 @@ public abstract class ClientEventHandler {
@SubscribeEvent
public static void registerKeyMapping(RegisterKeyMappingsEvent event) {
event.register(ModKeyMapping.KEY_APPLY_TALKAREA_PREFERENCE);
event.register(ModKeyMapping.KEY_ADD_LEASH_LENGTH);
event.register(ModKeyMapping.KEY_SUB_LEASH_LENGTH);
}
@SubscribeEvent

View File

@ -15,6 +15,7 @@ import com.r3944realms.leashedplayer.modInterface.PlayerLeashable;
import com.r3944realms.leashedplayer.network.client.BooleanGameRuleValueChangeData;
import com.r3944realms.leashedplayer.utils.Logger;
import com.r3944realms.leashedplayer.utils.Util;
import io.github.kunosayo.nestle.init.ModCreativeTab;
import net.minecraft.ChatFormatting;
import net.minecraft.commands.CommandSourceStack;
import net.minecraft.core.component.DataComponents;
@ -27,6 +28,7 @@ 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.item.CreativeModeTab;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Items;
import net.minecraft.world.item.alchemy.PotionBrewing;
@ -36,7 +38,9 @@ import net.minecraft.world.level.block.DispenserBlock;
import net.neoforged.bus.api.SubscribeEvent;
import net.neoforged.fml.common.EventBusSubscriber;
import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent;
import net.neoforged.neoforge.common.NeoForge;
import net.neoforged.neoforge.event.AnvilUpdateEvent;
import net.neoforged.neoforge.event.BuildCreativeModeTabContentsEvent;
import net.neoforged.neoforge.event.RegisterCommandsEvent;
import net.neoforged.neoforge.event.brewing.RegisterBrewingRecipesEvent;
import net.neoforged.neoforge.event.entity.EntityAttributeCreationEvent;
@ -143,7 +147,10 @@ public class CommonEventHandler {
public static class Mod extends CommonEventHandler {
@SubscribeEvent
public static void onCommonSetup(FMLCommonSetupEvent event) {
if(LeashedPlayer.IS_NESTLE_LOADED) Logger.logger.info("[LeashedPlayer] Hello Nestle");
if(LeashedPlayer.IS_NESTLE_LOADED) {
Logger.logger.info("[LeashedPlayer] Hello, Nestle");
DispenserBlock.registerProjectileBehavior(ModItemRegister.NESTLE_ROPE_ARROW.get());
}
DispenserBlock.registerProjectileBehavior(ModItemRegister.LEASH_ROPE_ARROW.get());
DispenserBlock.registerProjectileBehavior(ModItemRegister.TIPPED_LEASH_ROPE_ARROW.get());
DispenserBlock.registerProjectileBehavior(ModItemRegister.SPECTRAL_LEASH_ROPE_ARROW.get());
@ -155,6 +162,16 @@ public class CommonEventHandler {
event.put(ModEntityRegister.KID.get(), LittlePlayer.createAttributes().build());
}
@SubscribeEvent
public static void onBuiltCreativeModeTabContents(BuildCreativeModeTabContentsEvent event) {
if (LeashedPlayer.IS_NESTLE_LOADED){
CreativeModeTab tab = event.getTab();
if (tab == ModCreativeTab.MAIN_TABS.get()) {
event.accept(ModItemRegister.NESTLE_ROPE_ARROW.get());
}
}
}
}
}

View File

@ -9,7 +9,11 @@ import org.lwjgl.glfw.GLFW;
public class ModKeyMapping {
static String KEY_ROOT_ = "key.leashedplayer.";
public static String CATEGORY = "key.leashedplayer.category";
public static String APPLY_TALKAREA_PREFERENCE_KEY = KEY_ROOT_ + "apply_talkarea_preference";
public static String APPLY_TALKAREA_PREFERENCE_KEY = KEY_ROOT_ + "apply_talkarea_preference",
ADD_LEASH_LENGTH_KEY = KEY_ROOT_ + "leash_length.add",
SUB_LEASH_LENGTH_KEY = KEY_ROOT_ + "leash_length.sub",
NOT_SUPPORT_TO_NOT_PLAYER_ENTITY = KEY_ROOT_ + "leash_length.not_support_to_not_player_entity";
public static final KeyMapping KEY_APPLY_TALKAREA_PREFERENCE =
new KeyMapping(
APPLY_TALKAREA_PREFERENCE_KEY,
@ -19,4 +23,22 @@ public class ModKeyMapping {
GLFW.GLFW_KEY_I,
CATEGORY
);
public static final KeyMapping KEY_ADD_LEASH_LENGTH =
new KeyMapping(
ADD_LEASH_LENGTH_KEY,
KeyConflictContext.IN_GAME,
KeyModifier.CONTROL,
InputConstants.Type.KEYSYM,
GLFW.GLFW_KEY_UP,
CATEGORY
);
public static final KeyMapping KEY_SUB_LEASH_LENGTH =
new KeyMapping(
SUB_LEASH_LENGTH_KEY,
KeyConflictContext.IN_GAME,
KeyModifier.CONTROL,
InputConstants.Type.KEYSYM,
GLFW.GLFW_KEY_DOWN,
CATEGORY
);
}

View File

@ -10,6 +10,7 @@ import com.r3944realms.leashedplayer.modInterface.PlayerLeashable;
import net.minecraft.core.component.DataComponents;
import net.minecraft.core.particles.ColorParticleOption;
import net.minecraft.core.particles.ParticleTypes;
import net.minecraft.network.chat.Component;
import net.minecraft.network.syncher.EntityDataAccessor;
import net.minecraft.network.syncher.EntityDataSerializers;
import net.minecraft.network.syncher.SynchedEntityData;
@ -36,6 +37,7 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
public class LeashRopeArrow extends AbstractArrow {
public static final String PUSH_SHIFT_TO_PICKUP_QUICKLY = "leashedplayer.leash_rope_arrow.try_to_pickup.push_shift_tip";
private static final int EXPOSED_POTION_DECAY_TIME = 600;
private static final int NO_EFFECT_COLOR = -1;
private static final EntityDataAccessor<Integer> ID_EFFECT_COLOR = SynchedEntityData.defineId(LeashRopeArrow.class, EntityDataSerializers.INT);
@ -167,7 +169,10 @@ public class LeashRopeArrow extends AbstractArrow {
} else return true;
} else return false;
}
} else return false;
} else {
((ServerPlayer)pPlayer).sendSystemMessage(Component.translatable(PUSH_SHIFT_TO_PICKUP_QUICKLY), true);
return false;
}
}
else {

View File

@ -34,7 +34,7 @@ public class ModItemRegister {
public static final Supplier<Item> TIPPED_LEASH_ROPE_ARROW = ModItemRegister.register("tipped_leash_rope_arrow",
() -> new TippedLeashRopeArrow(new Item.Properties().stacksTo(16).component(DataComponents.POTION_CONTENTS, PotionContents.EMPTY)));
public static final Supplier<Item> NESTLE_ROPE_ARROW = ModItemRegister.register("nestle_rope_arrow",
public static final Supplier<Item> NESTLE_ROPE_ARROW = ModItemRegister.register("nestle_rope_arrow",
() -> new NestleRopeArrowItem(new Item.Properties().stacksTo(16)));
public static final Supplier<Item> AMETHYST_SHEARS = ModItemRegister.register("amethyst_shears",

View File

@ -3,11 +3,13 @@ package com.r3944realms.leashedplayer.content.items.type;
import com.r3944realms.leashedplayer.content.entities.LeashRopeArrow;
import com.r3944realms.leashedplayer.modInterface.PlayerLeashable;
import net.minecraft.network.chat.Component;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.sounds.SoundEvents;
import net.minecraft.tags.BlockTags;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.InteractionResult;
import net.minecraft.world.InteractionResultHolder;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.Leashable;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.player.Player;
@ -21,10 +23,13 @@ import net.minecraft.world.level.block.Blocks;
import org.jetbrains.annotations.NotNull;
import java.util.List;
import java.util.Objects;
public class LeadBreakerItem extends ShearsItem implements ITierTool{
private final Tier tier;
public static final String HOVER_KEY = "leashedplayer.lead_breaker.item.desc";
public static final String HOVER_KEY = "leashedplayer.lead_breaker.item.desc",
MESSAGE_USE_SUF = "leashedplayer.lead_breaker.item.use_suf",
MESSAGE_USE_FAI = "leashedplayer.lead_breaker.item.use_fai";
public LeadBreakerItem(Tier tier, Properties properties) {
super(properties.durability(tier.getUses()));
this.tier = tier;
@ -48,21 +53,29 @@ public class LeadBreakerItem extends ShearsItem implements ITierTool{
if (entity instanceof PlayerLeashable playerLeashable) {
if (playerLeashable.isLeashed()){
entity.playSound(SoundEvents.SHEEP_SHEAR, 1.0F, 1.0F);
playerLeashable.dropLeash(true, !(playerLeashable.getLeashHolder() instanceof LeashRopeArrow));
if (playerLeashable.getLeashHolder() instanceof LeashRopeArrow leashRopeArrow) {
Entity leashHolder = playerLeashable.getLeashHolder();
playerLeashable.dropLeash(true, !(leashHolder instanceof LeashRopeArrow));
if (leashHolder instanceof LeashRopeArrow leashRopeArrow) {
leashRopeArrow.setOwner(null);
}
if (!player.isCreative()) stack.hurtAndBreak(1, player, LivingEntity.getSlotForHand(hand));
if (leashHolder != null) {
((ServerPlayer)player).sendSystemMessage(Component.translatable(MESSAGE_USE_SUF, entity.getDisplayName(), leashHolder.getDisplayName()), true);
}
return InteractionResult.SUCCESS;
} else return InteractionResult.PASS;
} else if (entity instanceof Leashable leashable) {
if (leashable.isLeashed()){
entity.playSound(SoundEvents.SHEEP_SHEAR, 1.0F, 1.0F);
leashable.dropLeash(true, !(leashable.getLeashHolder() instanceof LeashRopeArrow));
Entity leashHolder = leashable.getLeashHolder();
leashable.dropLeash(true, !(leashHolder instanceof LeashRopeArrow));
if (leashable.getLeashHolder() instanceof LeashRopeArrow leashRopeArrow) {
leashRopeArrow.setOwner(null);
}
if (!player.isCreative()) stack.hurtAndBreak(1, player, LivingEntity.getSlotForHand(hand));
if (leashHolder != null) {
((ServerPlayer)player).sendSystemMessage(Component.translatable(MESSAGE_USE_SUF, entity.getDisplayName(), leashHolder.getDisplayName()), true);
}
return InteractionResult.SUCCESS;
} else return InteractionResult.PASS;
}
@ -75,11 +88,16 @@ public class LeadBreakerItem extends ShearsItem implements ITierTool{
if (!pLevel.isClientSide && pUsedHand == InteractionHand.MAIN_HAND) {
PlayerLeashable playerLeashable = (PlayerLeashable) pPlayer;
if (playerLeashable.isLeashed()) {
if(!(playerLeashable.getLeashHolder() instanceof LeashRopeArrow)) {
Entity leashHolder = playerLeashable.getLeashHolder();
if(!(leashHolder instanceof LeashRopeArrow)) {
playerLeashable.dropLeash(true, true);
pPlayer.getItemInHand(pUsedHand).hurtAndBreak(10, pPlayer, LivingEntity.getSlotForHand(pUsedHand));
if (leashHolder != null) {
((ServerPlayer)pPlayer).sendSystemMessage(Component.translatable(MESSAGE_USE_SUF, pPlayer.getDisplayName(), leashHolder.getDisplayName()), true);
}
return InteractionResultHolder.success(pPlayer.getItemInHand(pUsedHand));
}
((ServerPlayer)pPlayer).sendSystemMessage(Component.translatable(MESSAGE_USE_FAI, pPlayer.getDisplayName(), leashHolder.getDisplayName()), true);
}
}
if(pLevel.isClientSide) {

View File

@ -18,6 +18,7 @@ public enum ModAdvancementKey {
LEASH_TERMINATOR("leash_terminator", LEASH_START),
TIPPED_LEASH_ARROW("tipped_leash_arrow", LEASH_ARROW),
NEO_FOX("neo_fox", LEASH_START),
NESTLE_ARROW("nestle_arrow", LEASH_ARROW),
;
private final String Name;
@Nullable

View File

@ -7,6 +7,7 @@ import com.r3944realms.leashedplayer.content.commands.LeashCommand;
import com.r3944realms.leashedplayer.content.commands.MotionCommand;
import com.r3944realms.leashedplayer.content.effects.ModEffectRegister;
import com.r3944realms.leashedplayer.content.effects.ModPotionRegister;
import com.r3944realms.leashedplayer.content.entities.LeashRopeArrow;
import com.r3944realms.leashedplayer.content.entities.ModEntityRegister;
import com.r3944realms.leashedplayer.content.gamerules.Server.*;
import com.r3944realms.leashedplayer.content.items.ModCreativeTab;
@ -32,6 +33,8 @@ public enum ModLangKeyValue {
ADDICTION(ClientEventHandler.ADDICTION, ModPartEnum.NAME, "You've triggered the anti-addiction mechanic, and you'll come back when you rest!", "你触发了防沉迷机制,休息会再来吧!", "你觸發了防沉迷機制,休息會再來吧!", false),
KEY_CATEGORY(ModKeyMapping.CATEGORY, ModPartEnum.NAME, "Leashed Player", "可拴玩家", "可拴玩家", false),
KEY_APPLY_TALKAREA(ModKeyMapping.APPLY_TALKAREA_PREFERENCE_KEY, ModPartEnum.NAME, "Apply TalkArea Preference", "应用可见区域预设", "應用設置可見區域預設", false),
KEY_ADD_LEASH_OTHER_LEASH_LENGTH(ModKeyMapping.ADD_LEASH_LENGTH_KEY, ModPartEnum.NAME, "Increase the Length of Leash Rope", "增加拴绳长度", "增加拴繩長度", false),
KEY_SUB_LEASH_OTHER_LEASH_LENGTH(ModKeyMapping.SUB_LEASH_LENGTH_KEY, ModPartEnum.NAME, "Decrease the Length of Leash Rope", "减小拴绳长度", "減小拴繩長度", false),
//ITEM
ITEM_LEASH_ROPE_ARROW(ModItemRegister.LEASH_ROPE_ARROW, ModPartEnum.ITEM, "Leash Rope Arrow", "拴绳箭", "拴繩箭", true),
ITEM_SPECTRAL_LEASH_ROPE_ARROW(ModItemRegister.SPECTRAL_LEASH_ROPE_ARROW, ModPartEnum.ITEM, "Spectral Leash Rope Arrow", "拴绳光灵箭", "拴繩光靈箭", true),
@ -93,7 +96,9 @@ public enum ModLangKeyValue {
MESSAGE_CHAT_TALKAREA_PREFERENCE_NOT_SET(ChatCommand.TALK_AREA_PREFERENCE_NOT_SET, ModPartEnum.COMMAND, "%s 's talk area preference is not set!", "%s未设置默认可见消息聊天区域半径", "%s未設置可見訊息聊天半徑", "%s未置默视之",false),
MESSAGE_CHAT_TALKAREA_CURRENT_CONFIG(ChatCommand.TALK_AREA_CURRENT_CONFIG, ModPartEnum.COMMAND, "%s 's §6TalkArea Current§7:§e %d §6blocks §f(§aPrefence§7:§e %d §ablocks§f)§r", "%s§6目前聊天区域可见半径设置§7:§e %d §6格 §f(§a默认值§7:§e %d §a格§f)§r", "%s§6目前可見訊息聊天半徑設置§7:§e%d §6格 §f(§a默認值§7:§e%d §a格§f)§r", "%s§6今聊城可知半径置§e %d§6格§f(§a默§7§e%d格§f)§r",false),
MESSAGE_CHAT_TALKAREA_NO_RIGHT(ChatCommand.NO_RIGHT, ModPartEnum.COMMAND, "You haven't the right to do that!", "你无权这样做!", "你無權這麽做!", false),
MESSAGE_LEASH_BREAKER_USE_SUF(LeadBreakerItem.MESSAGE_USE_SUF, ModPartEnum.MESSAGE, "§aSuccessfully break §f%1$s§a 's Leashed Link to §f%2$s ", "§a成功剪断§f%2$s§a对§f%1$s§a拴绳链接", "§a成功剪斷§f%2$s§a對§f%1$s§a拴繩鏈接", false),
MESSAGE_LEASH_BREAKER_USE_FAI(LeadBreakerItem.MESSAGE_USE_FAI, ModPartEnum.MESSAGE, "§cFailed to break §f%1$s§c 's Leashed Link to §f%2$s", "§c无法剪断§f%2$s§c对§f%1$s§c拴绳链接", "§c未能剪斷§f%2$s§c對§f%1$s§c拴繩鏈接", false),
MESSAGE_LEASH_NOT_SUPPORT_TO_NOT_PLAYER_ENTITY(ModKeyMapping.NOT_SUPPORT_TO_NOT_PLAYER_ENTITY, ModPartEnum.MESSAGE, "Only work on Players", "只在玩家身上有效", "僅對玩家有效", false),
//GAME_RULE_NAME
DEFAULT_AREA_TALK_NAME(DefaultTalkArea.NAME_KEY, ModPartEnum.NAME, "Default Area Talk", "默认聊天区域可见半径", "默認聊天區域可見半徑",false),
TELEPORT_WITH_LEASHED_PLAYERS_NAME(TeleportWithLeashedPlayers.NAME_KEY, ModPartEnum.NAME, "Teleport leashed player with player holder", "被拴玩家随玩家持有者传送", "被拴玩家随玩家持有者傳送" ,false),
@ -103,6 +108,7 @@ public enum ModLangKeyValue {
CAN_COMMON_PLAYER_CHANGER_SELF_TALKAREA_NAME(CanCommonPlayerChangeSelfTalkArea.NAME_KEY, ModPartEnum.NAME, "Should Non-OP Player can change their TalkArea", "非OP应该可以修改自己的聊天可见半径吗?", "非OP應該可以修改自己的聊天可見半徑嗎", false),
// DISABLE_MOVE_CHECK(DisablePlayerMoveCheck.NAME_KEY, ModPartEnum.NAME, "Disable Player Move Check", "禁止检查玩家移动", "禁止檢查玩家移動", false),
TRY_TO_PICKUP_LEASHED_ROPE_ARROW(LeashRopeArrow.PUSH_SHIFT_TO_PICKUP_QUICKLY, ModPartEnum.MESSAGE, "§aPush §f§lShift§a to pick up quickly", "§a按下§f§lShift键§a以加快拾取", "§a按下§f§lShift鍵§a以加速拾取", false),
//GAME_RULE_DESCRIPTION
TELEPORT_WITH_LEASHED_DESCRIPTION(TeleportWithLeashedPlayers.DESCRIPTION_KEY, ModPartEnum.DESCRIPTION, "Holder will teleport with their leashed players ", "传送时将被拴玩家与持有者一起传送", "將被拴玩家將隨持有者一起傳送" ,false),
CREATE_LEASH_FENCE_KNOT_ENTITY_IF_ABSENT_DESCRIPTION(CreateLeashFenceKnotEntityIfAbsent.DESCRIPTION_KEY, ModPartEnum.DESCRIPTION, "Create LeashKnot Entity if it's absent on fence", "如果在栅栏处缺失拴绳结,则创建它", "如果在柵欄処缺失拴繩結,則創建它", false),
@ -124,6 +130,7 @@ public enum ModLangKeyValue {
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),
NESTLE_ARROW(ModAdvancementKey.NESTLE_ARROW.getNameKey(), ModPartEnum.NAME, "Arrow with the Power of Nestle!", "贴贴之箭!", "貼貼之箭!", 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),
@ -136,6 +143,8 @@ public enum ModLangKeyValue {
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),
NESTLE_ARROW_DESC(ModAdvancementKey.NESTLE_ARROW.getDescKey(), ModPartEnum.DESCRIPTION, "The Power of Nestle!!!", "贴贴之力!!!", "貼貼之力!!!", false),
//MOB_EFFECT
NO_LEASH_EFFECT(ModEffectRegister.getEffectKey(ModEffectRegister.NO_LEASH_EFFECT.get()), ModPartEnum.NAME, "No Leash", "禁拴", "禁拴", false),
//POTION

View File

@ -171,6 +171,19 @@ public class ModAdvancementGenerator implements AdvancementProvider.AdvancementG
.and(ModEffectRegister.NO_LEASH_EFFECT)
)
).parent(hasLeashRopeItem).save(saver, ModAdvancementKey.NO_LEASH.getNameWithNameSpace());
AdvancementHolder nestle_rope_arrow = Advancement.Builder.advancement().display(
ModItemRegister.NESTLE_ROPE_ARROW.get(),
Component.translatable(ModAdvancementKey.NESTLE_ARROW.getNameKey()),
Component.translatable(ModAdvancementKey.NESTLE_ARROW.getDescKey()),
null,
AdvancementType.GOAL,
true,
true,
true
).addCriterion("has_nestle_rope_arrow",
InventoryChangeTrigger.TriggerInstance.hasItems(ModItemRegister.NESTLE_ROPE_ARROW.get())
).parent(hasLeashRopeArrow).save(saver, ModAdvancementKey.NESTLE_ARROW.getNameWithNameSpace());
}
}

View File

@ -2,6 +2,9 @@ package com.r3944realms.leashedplayer.datagen.provider;
import com.r3944realms.leashedplayer.content.items.ModItemRegister;
import com.r3944realms.leashedplayer.content.items.repcipe.TippedLeashRopeArrowRecipe;
import io.github.kunosayo.nestle.init.ModItems;
import io.github.kunosayo.nestle.item.NestleItem;
import io.github.kunosayo.nestle.item.NestleLeadItem;
import net.minecraft.core.HolderLookup;
import net.minecraft.data.PackOutput;
import net.minecraft.data.recipes.*;
@ -29,6 +32,16 @@ public class ModRecipeProvider extends RecipeProvider {
.unlockedBy("has_lead",has(Items.LEAD))
.unlockedBy("has_spectral_arrow",has(Items.SPECTRAL_ARROW))
.save(pRecipeOutput, "spectral_leash_rope_arrow_with_leash_rope_arrow");
ShapelessRecipeBuilder.shapeless(RecipeCategory.MISC, ModItemRegister.NESTLE_ROPE_ARROW.get())
.requires(ModItems.NESTLE_LEAD)
.requires(Items.ARROW)
.unlockedBy("has_nestle_rope",has(ModItems.NESTLE_LEAD))
.save(pRecipeOutput);
ShapelessRecipeBuilder.shapeless(RecipeCategory.MISC, ModItemRegister.NESTLE_ROPE_ARROW.get())
.requires(ModItems.NESTLE)
.requires(ModItemRegister.LEASH_ROPE_ARROW.get())
.unlockedBy("has_nestle",has(ModItems.NESTLE))
.save(pRecipeOutput, "nestle_rope_arrow_with_leash_rope_arrow");
ShapedRecipeBuilder.shaped(RecipeCategory.MISC, ModItemRegister.SPECTRAL_LEASH_ROPE_ARROW.get(),1)
.pattern(" $ ")
.pattern("$#$")
@ -45,6 +58,7 @@ public class ModRecipeProvider extends RecipeProvider {
.define('%', Items.STICK)
.unlockedBy("has_amethyst_shard",has(Items.AMETHYST_SHARD))
.save(pRecipeOutput);
SpecialRecipeBuilder.special(TippedLeashRopeArrowRecipe.TippedLeashRopeArrowARecipe::new).save(pRecipeOutput,"tipped_leash_rope_arrow_a");
SpecialRecipeBuilder.special(TippedLeashRopeArrowRecipe.TippedLeashRopeArrowBRecipe::new).save(pRecipeOutput,"tipped_leash_rope_arrow_b");
}