2024/11/01
Fix some BUG and Add new Item to break lead rope
This commit is contained in:
parent
f0d078e770
commit
107ef3dc7d
|
|
@ -1,4 +1,5 @@
|
|||
// 1.21.3 2024-10-27T23:14:21.0486567 Item Models: leashedplayer
|
||||
// 1.21.3 2024-10-31T23:28:04.7117269 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
|
||||
5bd1f9f28b91005c587f1c38fb77cd19b59495e3 assets/leashedplayer/models/item/bow_lra_pulling_2.json
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
// 1.21.3 2024-10-27T23:14:21.0349914 Tags for minecraft:item mod id leashedplayer
|
||||
// 1.21.3 2024-10-31T20:50:40.9982605 Tags for minecraft:item mod id leashedplayer
|
||||
36c1cccc1dfa448620c4e9cbc4a7d73986ff9e47 data/minecraft/tags/item/arrows.json
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
// 1.21.3 2024-10-27T23:14:21.0486567 Languages: en_us for mod: leashedplayer
|
||||
4dc2ca922a540c7133a4a6867dfcd8bfec5a1db4 assets/leashedplayer/lang/en_us.json
|
||||
// 1.21.3 2024-10-31T23:28:04.7137271 Languages: en_us for mod: leashedplayer
|
||||
05969780f698fcb4d6b63800dcdb76e4b0cad090 assets/leashedplayer/lang/en_us.json
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
// 1.21.3 2024-10-27T23:14:21.047502 Languages: zh_cn for mod: leashedplayer
|
||||
35bc6c3001138c5306d1ee9d55ef3dfbfd417e08 assets/leashedplayer/lang/zh_cn.json
|
||||
// 1.21.3 2024-10-31T23:28:04.710726 Languages: zh_cn for mod: leashedplayer
|
||||
98ca8da6ea1688abc5d4beda986cfe0406255f1c assets/leashedplayer/lang/zh_cn.json
|
||||
|
|
|
|||
|
|
@ -1,6 +1,8 @@
|
|||
// 1.21.3 2024-10-28T12:36:36.0959778 LeashedPlayer Recipes
|
||||
// 1.21.3 2024-10-31T23:50:18.2165227 LeashedPlayer Recipes
|
||||
13ebe9a580731296eb10c05d1844657d58e07cc1 data/leashedplayer/advancement/recipes/misc/amethyst_shears.json
|
||||
1b45d1ad8dc73f1787c97777ad13d9771c9e0ad1 data/leashedplayer/advancement/recipes/misc/leash_rope_arrow.json
|
||||
a26d63c2360b32df0b636a5dec96dd919139e022 data/leashedplayer/advancement/recipes/misc/spectral_leash_rope_arrow.json
|
||||
af1f65626735f1001426e0984217139e15649725 data/leashedplayer/recipe/amethyst_shears.json
|
||||
db45be6e2bbddc49e60a6c1b12e2ef44afad30d8 data/leashedplayer/recipe/leash_rope_arrow.json
|
||||
db37bd69a700eaae69bff48c77ed49ca55fb9bf1 data/leashedplayer/recipe/spectral_leash_rope_arrow.json
|
||||
935d8732ca65dd73e4668a197cda60480053fbcd data/minecraft/advancement/recipes/misc/leash_rope_arrow_shape.json
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
// 1.21.3 2024-10-27T23:14:21.0497079 Advancements
|
||||
// 1.21.3 2024-10-31T23:28:04.7147278 Advancements
|
||||
4d97adba079f1966090a52443bb439319f550680 data/leashedplayer/advancement/advancement_leash_arrow.json
|
||||
f16184b81ea35a0fbd8f2c49b085a96c32818c69 data/leashedplayer/advancement/dog_running_player.json
|
||||
bce12ed339b3b0fded263ba039f7a4e6fcfb84ca data/leashedplayer/advancement/follow_arrow.json
|
||||
|
|
@ -6,4 +6,5 @@ bce12ed339b3b0fded263ba039f7a4e6fcfb84ca data/leashedplayer/advancement/follow_a
|
|||
25f6b476b194a27c0fe0e75d74ac3a7ff4054789 data/leashedplayer/advancement/leashed_self.json
|
||||
a69a455855fb6dd8a8ac131a55099de5de45d7c4 data/leashedplayer/advancement/leash_arrow.json
|
||||
133f844ffafd37b9ba57cafa96350f035cac57f9 data/leashedplayer/advancement/leash_start.json
|
||||
2d8bce7fd078f9cc6b73b77f2fbab30e6cc197f4 data/leashedplayer/advancement/leash_terminator.json
|
||||
4b0bcf6b372f52e954edcef37a6b04435ec2b4e8 data/leashedplayer/advancement/no_leash.json
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
// 1.21.3 2024-10-27T23:14:21.0467812 Languages: zh_tw for mod: leashedplayer
|
||||
c6df14a1f53a3e892ebc6b396b552ff27f1a7580 assets/leashedplayer/lang/zh_tw.json
|
||||
// 1.21.3 2024-10-31T23:28:04.7097257 Languages: zh_tw for mod: leashedplayer
|
||||
be94545852f60710429320d1e25f77d633940f36 assets/leashedplayer/lang/zh_tw.json
|
||||
|
|
|
|||
|
|
@ -9,6 +9,8 @@
|
|||
"advancement.leashedplayer.leash_arrow.desc": "Maybe you can using it to shoot some mob?",
|
||||
"advancement.leashedplayer.leash_start": "The Power of Traction",
|
||||
"advancement.leashedplayer.leash_start.desc": "Journey to becoming a Leash Expert",
|
||||
"advancement.leashedplayer.leash_terminator": "The Lead Terminator",
|
||||
"advancement.leashedplayer.leash_terminator.desc": "I am Lead Terminator!",
|
||||
"advancement.leashedplayer.leashed_friend": "Be bound by Rope",
|
||||
"advancement.leashedplayer.leashed_friend.desc": "Be Bond by player with lead",
|
||||
"advancement.leashedplayer.leashed_self": "Stable Connection",
|
||||
|
|
@ -28,6 +30,7 @@
|
|||
"gamerule.LP.TeleportWithLeashedPlayers": "Teleport leashed player with player holder",
|
||||
"gamerule.LP.TeleportWithLeashedPlayers.description": "Holder will teleport with their leashed players ",
|
||||
"item.leash_rope_arrow.description": "Arrows with ropes attached?",
|
||||
"item.leashedplayer.amethyst_shears": "Amethyst Shears",
|
||||
"item.leashedplayer.fabric": "Fabric",
|
||||
"item.leashedplayer.leash_rope_arrow": "Leash Rope Arrow",
|
||||
"item.leashedplayer.spectral_leash_rope_arrow": "Spectral Leash Rope Arrow",
|
||||
|
|
|
|||
|
|
@ -9,6 +9,8 @@
|
|||
"advancement.leashedplayer.leash_arrow.desc": "也许可以用它来发射生物?",
|
||||
"advancement.leashedplayer.leash_start": "牵引之力",
|
||||
"advancement.leashedplayer.leash_start.desc": "拴绳大师之路",
|
||||
"advancement.leashedplayer.leash_terminator": "拴绳终结者",
|
||||
"advancement.leashedplayer.leash_terminator.desc": "我來终结拴绳者!",
|
||||
"advancement.leashedplayer.leashed_friend": "拴绳链接",
|
||||
"advancement.leashedplayer.leashed_friend.desc": "被玩家用拴绳链接",
|
||||
"advancement.leashedplayer.leashed_self": "稳固联结",
|
||||
|
|
@ -28,6 +30,7 @@
|
|||
"gamerule.LP.TeleportWithLeashedPlayers": "被拴玩家随玩家持有者传送",
|
||||
"gamerule.LP.TeleportWithLeashedPlayers.description": "传送时将被拴玩家与持有者一起传送",
|
||||
"item.leash_rope_arrow.description": "带有拴绳的箭矢?",
|
||||
"item.leashedplayer.amethyst_shears": "紫水晶剪刀",
|
||||
"item.leashedplayer.fabric": "Fabric",
|
||||
"item.leashedplayer.leash_rope_arrow": "拴绳箭",
|
||||
"item.leashedplayer.spectral_leash_rope_arrow": "拴绳光灵箭",
|
||||
|
|
|
|||
|
|
@ -9,6 +9,8 @@
|
|||
"advancement.leashedplayer.leash_arrow.desc": "也許可以用它發射生物?",
|
||||
"advancement.leashedplayer.leash_start": "牽引之力",
|
||||
"advancement.leashedplayer.leash_start.desc": "拴繩大師之路",
|
||||
"advancement.leashedplayer.leash_terminator": "拴繩終結者",
|
||||
"advancement.leashedplayer.leash_terminator.desc": "吾將終結拴繩!",
|
||||
"advancement.leashedplayer.leashed_friend": "拴繩鏈接",
|
||||
"advancement.leashedplayer.leashed_friend.desc": "被玩家用拴繩鏈接",
|
||||
"advancement.leashedplayer.leashed_self": "穩固聯結",
|
||||
|
|
@ -28,6 +30,7 @@
|
|||
"gamerule.LP.TeleportWithLeashedPlayers": "被拴玩家随玩家持有者傳送",
|
||||
"gamerule.LP.TeleportWithLeashedPlayers.description": "將被拴玩家將隨持有者一起傳送",
|
||||
"item.leash_rope_arrow.description": "帶有拴繩的箭矢?",
|
||||
"item.leashedplayer.amethyst_shears": "紫水晶剪刀",
|
||||
"item.leashedplayer.fabric": "Fabric",
|
||||
"item.leashedplayer.leash_rope_arrow": "拴繩箭",
|
||||
"item.leashedplayer.spectral_leash_rope_arrow": "拴繩光靈箭",
|
||||
|
|
|
|||
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"parent": "minecraft:item/generated",
|
||||
"textures": {
|
||||
"layer0": "leashedplayer:item/amethyst_shears"
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,34 @@
|
|||
{
|
||||
"parent": "leashedplayer:leash_start",
|
||||
"criteria": {
|
||||
"has_amethyst_shears": {
|
||||
"conditions": {
|
||||
"items": [
|
||||
{
|
||||
"items": "leashedplayer:amethyst_shears"
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:inventory_changed"
|
||||
}
|
||||
},
|
||||
"display": {
|
||||
"description": {
|
||||
"translate": "advancement.leashedplayer.leash_terminator.desc"
|
||||
},
|
||||
"hidden": true,
|
||||
"icon": {
|
||||
"count": 1,
|
||||
"id": "leashedplayer:amethyst_shears"
|
||||
},
|
||||
"title": {
|
||||
"translate": "advancement.leashedplayer.leash_terminator"
|
||||
}
|
||||
},
|
||||
"requirements": [
|
||||
[
|
||||
"has_amethyst_shears"
|
||||
]
|
||||
],
|
||||
"sends_telemetry_event": true
|
||||
}
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
{
|
||||
"parent": "minecraft:recipes/root",
|
||||
"criteria": {
|
||||
"has_amethyst_shard": {
|
||||
"conditions": {
|
||||
"items": [
|
||||
{
|
||||
"items": "minecraft:amethyst_shard"
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:inventory_changed"
|
||||
},
|
||||
"has_the_recipe": {
|
||||
"conditions": {
|
||||
"recipe": "leashedplayer:amethyst_shears"
|
||||
},
|
||||
"trigger": "minecraft:recipe_unlocked"
|
||||
}
|
||||
},
|
||||
"requirements": [
|
||||
[
|
||||
"has_the_recipe",
|
||||
"has_amethyst_shard"
|
||||
]
|
||||
],
|
||||
"rewards": {
|
||||
"recipes": [
|
||||
"leashedplayer:amethyst_shears"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
{
|
||||
"type": "minecraft:crafting_shaped",
|
||||
"category": "misc",
|
||||
"key": {
|
||||
"#": "minecraft:amethyst_shard",
|
||||
"%": "minecraft:stick"
|
||||
},
|
||||
"pattern": [
|
||||
"#%",
|
||||
"%#"
|
||||
],
|
||||
"result": {
|
||||
"count": 1,
|
||||
"id": "leashedplayer:amethyst_shears"
|
||||
}
|
||||
}
|
||||
|
|
@ -4,6 +4,7 @@ import com.r3944realms.leashedplayer.client.renders.LeashRendererUtil;
|
|||
import com.r3944realms.leashedplayer.client.renders.entities.LeashRopeArrowRenderer;
|
||||
import com.r3944realms.leashedplayer.client.renders.entities.SpectralLeashRopeArrowRenderer;
|
||||
import com.r3944realms.leashedplayer.content.entities.ModEntityRegister;
|
||||
import com.r3944realms.leashedplayer.content.items.ModCreativeTab;
|
||||
import com.r3944realms.leashedplayer.content.items.ModItemRegister;
|
||||
import com.r3944realms.leashedplayer.content.items.type.ILeashRopeArrow;
|
||||
import com.r3944realms.leashedplayer.modInterface.IPlayerRenderStateExtension;
|
||||
|
|
@ -11,6 +12,7 @@ import net.minecraft.client.renderer.entity.state.PlayerRenderState;
|
|||
import net.minecraft.client.renderer.item.ItemProperties;
|
||||
import net.minecraft.core.component.DataComponents;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.world.item.CreativeModeTab;
|
||||
import net.minecraft.world.item.Items;
|
||||
import net.minecraft.world.item.component.ChargedProjectiles;
|
||||
import net.neoforged.api.distmarker.Dist;
|
||||
|
|
@ -18,7 +20,6 @@ import net.neoforged.bus.api.SubscribeEvent;
|
|||
import net.neoforged.fml.common.EventBusSubscriber;
|
||||
import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent;
|
||||
import net.neoforged.neoforge.client.event.EntityRenderersEvent;
|
||||
import net.neoforged.neoforge.client.event.RenderLivingEvent;
|
||||
import net.neoforged.neoforge.client.event.RenderPlayerEvent;
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ 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.items.ModItemRegister;
|
||||
import com.r3944realms.leashedplayer.content.misc.LeadBreakItemBehavior;
|
||||
import com.r3944realms.leashedplayer.modInterface.PlayerLeashable;
|
||||
import net.minecraft.commands.CommandSourceStack;
|
||||
import net.minecraft.world.effect.MobEffectInstance;
|
||||
|
|
@ -73,6 +74,7 @@ public class CommonEventHandler {
|
|||
public static void onCommonSetup(FMLCommonSetupEvent event) {
|
||||
DispenserBlock.registerProjectileBehavior(ModItemRegister.LEASH_ROPE_ARROW.get());
|
||||
DispenserBlock.registerProjectileBehavior(ModItemRegister.SPECTRAL_LEASH_ROPE_ARROW.get());
|
||||
DispenserBlock.registerBehavior(ModItemRegister.AMETHYST_SHEARS.get(), new LeadBreakItemBehavior());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -30,6 +30,7 @@ public class ModCreativeTab {
|
|||
pOutput.accept(Items.CROSSBOW);
|
||||
pOutput.accept(ModItemRegister.LEASH_ROPE_ARROW.get());
|
||||
pOutput.accept(ModItemRegister.SPECTRAL_LEASH_ROPE_ARROW.get());
|
||||
pOutput.accept(ModItemRegister.AMETHYST_SHEARS.get());
|
||||
HolderLookup.RegistryLookup<Potion> potionRegistryLookup = CommonHooks.resolveLookup(Registries.POTION);
|
||||
if(potionRegistryLookup != null) {
|
||||
potionRegistryLookup.listElements()
|
||||
|
|
|
|||
|
|
@ -1,14 +1,18 @@
|
|||
package com.r3944realms.leashedplayer.content.items;
|
||||
|
||||
import com.r3944realms.leashedplayer.LeashedPlayer;
|
||||
import com.r3944realms.leashedplayer.content.items.type.LeadBreakerItem;
|
||||
import com.r3944realms.leashedplayer.content.items.type.LeashRopeArrowItem;
|
||||
import com.r3944realms.leashedplayer.content.items.type.SpectralLeashRopeArrowItem;
|
||||
import com.r3944realms.leashedplayer.content.items.type.TestItem;
|
||||
import net.minecraft.core.component.DataComponents;
|
||||
import net.minecraft.core.registries.BuiltInRegistries;
|
||||
import net.minecraft.core.registries.Registries;
|
||||
import net.minecraft.resources.ResourceKey;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.world.item.Item;
|
||||
import net.minecraft.world.item.Rarity;
|
||||
import net.minecraft.world.item.ShearsItem;
|
||||
import net.neoforged.bus.api.IEventBus;
|
||||
import net.neoforged.neoforge.registries.DeferredRegister;
|
||||
|
||||
|
|
@ -25,7 +29,9 @@ public class ModItemRegister {
|
|||
);
|
||||
public static final Supplier<Item> SPECTRAL_LEASH_ROPE_ARROW = ModItemRegister.register("spectral_leash_rope_arrow",
|
||||
() -> new SpectralLeashRopeArrowItem(new Item.Properties().stacksTo(16)));
|
||||
|
||||
public static final Supplier<Item> AMETHYST_SHEARS = ModItemRegister.register("amethyst_shears",
|
||||
() -> new LeadBreakerItem(new Item.Properties().durability(100).component(DataComponents.TOOL, ShearsItem.createToolProperties())
|
||||
.stacksTo(1).setId(ResourceKey.create(Registries.ITEM, ResourceLocation.fromNamespaceAndPath(LeashedPlayer.MOD_ID, "amethyst_shears")))));
|
||||
public static final Supplier<Item> FABRIC = ModItemRegister.register("fabric",
|
||||
() -> new TestItem(new Item.Properties().stacksTo(1)
|
||||
.setId(ResourceKey.create(Registries.ITEM, ResourceLocation.fromNamespaceAndPath(LeashedPlayer.MOD_ID, "fabric")))));
|
||||
|
|
|
|||
|
|
@ -0,0 +1,67 @@
|
|||
package com.r3944realms.leashedplayer.content.items.type;
|
||||
|
||||
import com.r3944realms.leashedplayer.content.entities.LeashRopeArrow;
|
||||
import com.r3944realms.leashedplayer.modInterface.PlayerLeashable;
|
||||
import net.minecraft.core.HolderGetter;
|
||||
import net.minecraft.core.HolderSet;
|
||||
import net.minecraft.core.registries.BuiltInRegistries;
|
||||
import net.minecraft.tags.BlockTags;
|
||||
import net.minecraft.world.InteractionResult;
|
||||
import net.minecraft.world.entity.Leashable;
|
||||
import net.minecraft.world.entity.LivingEntity;
|
||||
import net.minecraft.world.entity.player.Player;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.item.ShearsItem;
|
||||
import net.minecraft.world.item.component.Tool;
|
||||
import net.minecraft.world.level.block.Block;
|
||||
import net.minecraft.world.level.block.Blocks;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class LeadBreakerItem extends ShearsItem {
|
||||
|
||||
public LeadBreakerItem(Properties properties) {
|
||||
super(properties);
|
||||
}
|
||||
|
||||
public static Tool createToolProperties() {
|
||||
HolderGetter<Block> holdergetter = BuiltInRegistries.acquireBootstrapRegistrationLookup(BuiltInRegistries.BLOCK);
|
||||
return new Tool(
|
||||
List.of(
|
||||
Tool.Rule.minesAndDrops(HolderSet.direct(Blocks.COBWEB.builtInRegistryHolder()), 18.0F),
|
||||
Tool.Rule.overrideSpeed(holdergetter.getOrThrow(BlockTags.LEAVES), 25.0F),
|
||||
Tool.Rule.overrideSpeed(holdergetter.getOrThrow(BlockTags.WOOL), 8.0F),
|
||||
Tool.Rule.overrideSpeed(HolderSet.direct(Blocks.VINE.builtInRegistryHolder(), Blocks.GLOW_LICHEN.builtInRegistryHolder()), 4.0F)
|
||||
),
|
||||
1.0F,
|
||||
1
|
||||
);
|
||||
}
|
||||
@Override
|
||||
public @NotNull InteractionResult interactLivingEntity(@NotNull ItemStack stack, @NotNull Player player, @NotNull LivingEntity entity, net.minecraft.world.@NotNull InteractionHand hand) {
|
||||
if(!entity.level().isClientSide) {
|
||||
if (entity instanceof PlayerLeashable playerLeashable) {
|
||||
if (playerLeashable.isLeashed()){
|
||||
playerLeashable.dropLeash(true, !(playerLeashable.getLeashHolder() instanceof LeashRopeArrow));
|
||||
if (playerLeashable.getLeashHolder() instanceof LeashRopeArrow leashRopeArrow) {
|
||||
leashRopeArrow.setOwner(null);
|
||||
}
|
||||
if (!player.isCreative()) stack.hurtAndBreak(1, player, LivingEntity.getSlotForHand(hand));
|
||||
return InteractionResult.SUCCESS;
|
||||
} else return InteractionResult.PASS;
|
||||
} else if (entity instanceof Leashable leashable) {
|
||||
if (leashable.isLeashed()){
|
||||
leashable.dropLeash(true, !(leashable.getLeashHolder() instanceof LeashRopeArrow));
|
||||
if (leashable.getLeashHolder() instanceof LeashRopeArrow leashRopeArrow) {
|
||||
leashRopeArrow.setOwner(null);
|
||||
}
|
||||
if (!player.isCreative()) stack.hurtAndBreak(1, player, LivingEntity.getSlotForHand(hand));
|
||||
return InteractionResult.SUCCESS;
|
||||
} else return InteractionResult.PASS;
|
||||
}
|
||||
}
|
||||
return InteractionResult.PASS;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,78 @@
|
|||
package com.r3944realms.leashedplayer.content.misc;
|
||||
|
||||
import com.r3944realms.leashedplayer.content.entities.LeashRopeArrow;
|
||||
import com.r3944realms.leashedplayer.modInterface.PlayerLeashable;
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.core.dispenser.BlockSource;
|
||||
import net.minecraft.core.dispenser.OptionalDispenseItemBehavior;
|
||||
import net.minecraft.server.level.ServerLevel;
|
||||
import net.minecraft.sounds.SoundEvents;
|
||||
import net.minecraft.sounds.SoundSource;
|
||||
import net.minecraft.tags.BlockTags;
|
||||
import net.minecraft.world.InteractionResult;
|
||||
import net.minecraft.world.entity.EntitySelector;
|
||||
import net.minecraft.world.entity.Leashable;
|
||||
import net.minecraft.world.entity.LivingEntity;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.level.block.BeehiveBlock;
|
||||
import net.minecraft.world.level.block.DispenserBlock;
|
||||
import net.minecraft.world.level.block.entity.BeehiveBlockEntity;
|
||||
import net.minecraft.world.level.block.state.BlockState;
|
||||
import net.minecraft.world.level.gameevent.GameEvent;
|
||||
import net.minecraft.world.phys.AABB;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class LeadBreakItemBehavior extends OptionalDispenseItemBehavior {
|
||||
@Override
|
||||
protected @NotNull ItemStack execute(@NotNull BlockSource blockSource, @NotNull ItemStack item) {
|
||||
ServerLevel serverLevel = blockSource.level();
|
||||
if(!serverLevel.isClientSide()) {
|
||||
BlockPos blockPos = blockSource.pos().relative(blockSource.state().getValue(DispenserBlock.FACING));
|
||||
this.setSuccess(tryShearBeehive(serverLevel, blockPos) || tryShearLivingEntity(serverLevel, blockPos, item));
|
||||
if (this.isSuccess()) {
|
||||
item.hurtAndBreak(1, serverLevel, null, p_348118_ -> {
|
||||
});
|
||||
}
|
||||
}
|
||||
return item;
|
||||
}
|
||||
private static boolean tryShearBeehive(ServerLevel level, BlockPos pos) {
|
||||
BlockState blockstate = level.getBlockState(pos);
|
||||
if (blockstate.is(BlockTags.BEEHIVES, p_202454_ -> p_202454_.hasProperty(BeehiveBlock.HONEY_LEVEL) && p_202454_.getBlock() instanceof BeehiveBlock)) {
|
||||
int i = blockstate.getValue(BeehiveBlock.HONEY_LEVEL);
|
||||
if (i >= 5) {
|
||||
level.playSound(null, pos, SoundEvents.BEEHIVE_SHEAR, SoundSource.BLOCKS, 1.0F, 1.0F);
|
||||
BeehiveBlock.dropHoneycomb(level, pos);
|
||||
((BeehiveBlock)blockstate.getBlock())
|
||||
.releaseBeesAndResetHoneyLevel(level, blockstate, pos, null, BeehiveBlockEntity.BeeReleaseStatus.BEE_RELEASED);
|
||||
level.gameEvent(null, GameEvent.SHEAR, pos);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private static boolean tryShearLivingEntity(ServerLevel level, BlockPos pos, ItemStack item) {
|
||||
for (LivingEntity livingentity : level.getEntitiesOfClass(LivingEntity.class, new AABB(pos), EntitySelector.NO_SPECTATORS)) {
|
||||
if (livingentity instanceof PlayerLeashable playerLeashable) {
|
||||
if (playerLeashable.isLeashed()){
|
||||
playerLeashable.dropLeash(true, !(playerLeashable.getLeashHolder() instanceof LeashRopeArrow));
|
||||
if (playerLeashable.getLeashHolder() instanceof LeashRopeArrow leashRopeArrow) {
|
||||
leashRopeArrow.setOwner(null);
|
||||
}
|
||||
return true;
|
||||
} else return false;
|
||||
} else if (livingentity instanceof Leashable leashable) {
|
||||
if (leashable.isLeashed()) {
|
||||
leashable.dropLeash(true, !(leashable.getLeashHolder() instanceof LeashRopeArrow));
|
||||
if (leashable.getLeashHolder() instanceof LeashRopeArrow leashRopeArrow) {
|
||||
leashRopeArrow.setOwner(null);
|
||||
}
|
||||
return true;
|
||||
} else return false;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
@ -18,7 +18,7 @@ public class ModPaintingsRegister {
|
|||
DeferredRegister.create(Registries.PAINTING_VARIANT, LeashedPlayer.MOD_ID);
|
||||
public static final Supplier<PaintingVariant> GROUP_PHOTO = PAINTING_VARIANT.register("group_photo", () -> new PaintingVariant(1920, 1080, getAssetId("group_photo"), Optional.of(Component.translatable(ModPaintingVariants.getPaintingVariantTitleKey(ModPaintingVariants.GROUP_PHOTO))), Optional.of(Component.translatable(ModPaintingVariants.getPaintingVariantAuthorKey(ModPaintingVariants.GROUP_PHOTO)))));
|
||||
|
||||
private static @NotNull ResourceLocation getAssetId( String paint_name) {
|
||||
private static @NotNull ResourceLocation getAssetId(String paint_name) {
|
||||
return ResourceLocation.fromNamespaceAndPath(LeashedPlayer.MOD_ID, "textures/painting/"+paint_name+".png");
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@ public enum ModAdvancementKey {
|
|||
FOLLOW_LEASH_ARROW("follow_arrow", LEASH_ARROW),
|
||||
DOG_RUNNING_PLAYER("dog_running_player", LEASH_ARROW),
|
||||
NO_LEASH("no_leash", LEASH_START),
|
||||
LEASH_TERMINATOR("leash_terminator", LEASH_START),
|
||||
;
|
||||
private final String Name;
|
||||
@Nullable
|
||||
|
|
|
|||
|
|
@ -29,6 +29,8 @@ public enum ModLangKeyValue {
|
|||
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),
|
||||
TEST_FABRIC_ITEM(ModItemRegister.FABRIC, ModPartEnum.ITEM, "Fabric", "Fabric", "Fabric", true),
|
||||
AMETHYST_SHEARS(ModItemRegister.AMETHYST_SHEARS, ModPartEnum.ITEM, "Amethyst Shears", "紫水晶剪刀", "紫水晶剪刀", true),
|
||||
// LEAD_ROPE_POTTERY_SHERD(ModItemRegister.LEAD_ROPE_POTTERY_SHERD, ModPartEnum.ITEM, "Lead Rope Pottery Sherd", "拴绳纹样陶片", "拴繩紋樣陶片", true),
|
||||
//ITEM_DESC
|
||||
DESC_ITEM_LEASH_ROPE_ARROW(LeashRopeArrowItem.descKey, ModPartEnum.DESCRIPTION, "Arrows with ropes attached?","带有拴绳的箭矢?", "帶有拴繩的箭矢?", false),
|
||||
//PAINTING
|
||||
|
|
@ -74,6 +76,7 @@ public enum ModLangKeyValue {
|
|||
FOLLOW_ARROW(ModAdvancementKey.FOLLOW_LEASH_ARROW.getNameKey(), ModPartEnum.NAME, "Launch!!!", "启航!!!" , "啓航!!!",false),
|
||||
FOLLOW_WOLF(ModAdvancementKey.DOG_RUNNING_PLAYER.getNameKey(), ModPartEnum.NAME, "It's Walking human time.", "遛“人”时间", "遛“人”時間",false),
|
||||
NO_LEASH(ModAdvancementKey.NO_LEASH.getNameKey(), ModPartEnum.NAME, "Don't tie me up", "勿拴我", "請恁勿拴唔", false),
|
||||
TERMINATOR(ModAdvancementKey.LEASH_TERMINATOR.getNameKey(), ModPartEnum.NAME, "The Lead Terminator", "拴绳终结者","拴繩終結者", 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),
|
||||
|
|
@ -82,6 +85,7 @@ 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),
|
||||
TERMINATOR_DESC(ModAdvancementKey.LEASH_TERMINATOR.getDescKey(), ModPartEnum.DESCRIPTION, "I am Lead Terminator!", "我來终结拴绳者!", "吾將終結拴繩!", false),
|
||||
NO_LEASH_DESC(ModAdvancementKey.NO_LEASH.getDescKey(), ModPartEnum.NAME, "You cannot be leashed by ANY", "你不会被任何东西拴住", "恁不會被任何拴住", false),
|
||||
//MOB_EFFECT
|
||||
NO_LEASH_EFFECT(ModEffectRegister.getEffectKey(ModEffectRegister.NO_LEASH_EFFECT.get()), ModPartEnum.NAME, "No Leash", "禁拴", "禁拴", false),
|
||||
|
|
|
|||
|
|
@ -123,6 +123,18 @@ public class ModAdvancementGenerator implements AdvancementProvider.AdvancementG
|
|||
)
|
||||
)
|
||||
.parent(hasLeashRopeItem).save(saver, ModAdvancementKey.LEASHED_FRIEND.getNameWithNameSpace());
|
||||
AdvancementHolder lead_rope_terminator = Advancement.Builder.advancement().display(
|
||||
ModItemRegister.AMETHYST_SHEARS.get(),
|
||||
Component.translatable(ModAdvancementKey.LEASH_TERMINATOR.getNameKey()),
|
||||
Component.translatable(ModAdvancementKey.LEASH_TERMINATOR.getDescKey()),
|
||||
null,
|
||||
AdvancementType.TASK,
|
||||
true,
|
||||
true,
|
||||
true
|
||||
).addCriterion("has_amethyst_shears", InventoryChangeTrigger.TriggerInstance.hasItems(ModItemRegister.AMETHYST_SHEARS.get())
|
||||
).parent(hasLeashRopeItem).save(saver, ModAdvancementKey.LEASH_TERMINATOR.getNameWithNameSpace());
|
||||
|
||||
AdvancementHolder no_leash = Advancement.Builder.advancement().display(
|
||||
Items.BARRIER,
|
||||
Component.translatable(ModAdvancementKey.NO_LEASH.getNameKey()),
|
||||
|
|
|
|||
|
|
@ -38,6 +38,13 @@ public class ModRecipeProvider extends RecipeProvider {
|
|||
.unlockedBy("has_lead",has(Items.LEAD))
|
||||
.unlockedBy("has_glowstone_dust",has(Items.GLOWSTONE_DUST))
|
||||
.save(this.output,"leash_rope_arrow_shape");
|
||||
this.shaped(RecipeCategory.MISC, ModItemRegister.AMETHYST_SHEARS.get(),1)
|
||||
.pattern("#%")
|
||||
.pattern("%#")
|
||||
.define('#', Items.AMETHYST_SHARD)
|
||||
.define('%', Items.STICK)
|
||||
.unlockedBy("has_amethyst_shard",has(Items.AMETHYST_SHARD))
|
||||
.save(this.output);
|
||||
}
|
||||
public static class Runner extends RecipeProvider.Runner {
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package com.r3944realms.leashedplayer.mixin.server;
|
||||
|
||||
import com.r3944realms.leashedplayer.content.gamerules.GameruleRegistry;
|
||||
import com.r3944realms.leashedplayer.content.gamerules.Server.DisablePlayerMoveCheck;
|
||||
import com.r3944realms.leashedplayer.content.gamerules.Server.TeleportWithLeashedPlayers;
|
||||
import com.r3944realms.leashedplayer.modInterface.PlayerLeashable;
|
||||
import net.minecraft.network.protocol.game.ServerboundMovePlayerPacket;
|
||||
|
|
@ -60,7 +61,7 @@ public class MixinServerGamePacketListenerImpl {
|
|||
@SuppressWarnings("DiscouragedShift")
|
||||
@Inject(method = {"handleMovePlayer"}, at = @At(value = "INVOKE",target = "Lorg/slf4j/Logger;warn(Ljava/lang/String;[Ljava/lang/Object;)V", ordinal = 0, shift = At.Shift.BEFORE), cancellable = true)
|
||||
private void handleMovePlayer(ServerboundMovePlayerPacket pPacket, CallbackInfo ci) {
|
||||
if(GameruleRegistry.getGameruleBoolValue(this.player.serverLevel(), TeleportWithLeashedPlayers.ID))
|
||||
if(GameruleRegistry.getGameruleBoolValue(this.player.serverLevel(), DisablePlayerMoveCheck.ID))
|
||||
ci.cancel();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
25
src/main/java/com/r3944realms/leashedplayer/utils/Lazy.java
Normal file
25
src/main/java/com/r3944realms/leashedplayer/utils/Lazy.java
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
package com.r3944realms.leashedplayer.utils;
|
||||
|
||||
import java.util.function.Supplier;
|
||||
|
||||
public class Lazy<T> implements Supplier<T> {
|
||||
|
||||
private final Supplier<T> delegate;
|
||||
private T value;
|
||||
|
||||
public Lazy(Supplier<T> delegate) {
|
||||
|
||||
this.delegate = delegate;
|
||||
}
|
||||
|
||||
@Override
|
||||
public T get() {
|
||||
|
||||
if (this.value == null) {
|
||||
|
||||
this.value = this.delegate.get();
|
||||
}
|
||||
|
||||
return this.value;
|
||||
}
|
||||
}
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 452 B |
Binary file not shown.
|
After Width: | Height: | Size: 347 B |
Binary file not shown.
|
After Width: | Height: | Size: 384 B |
Loading…
Reference in New Issue
Block a user