From db41f395f7c340b7a52c1e9de9dc72504dedeb8c Mon Sep 17 00:00:00 2001 From: 3944Realms Date: Mon, 11 Nov 2024 17:40:36 +0800 Subject: [PATCH] =?UTF-8?q?2024/11/11=20=E5=84=AA=E5=8C=96=E4=BA=86?= =?UTF-8?q?=E5=BD=A9=E8=9B=8B=E7=89=A9=E5=93=81=E7=9A=84=E7=8D=B2=E5=8F=96?= =?UTF-8?q?=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../leashedplayer/CommonEventHandler.java | 79 +++++++++++-------- .../r3944realms/leashedplayer/utils/Util.java | 2 +- 2 files changed, 49 insertions(+), 32 deletions(-) diff --git a/src/main/java/com/r3944realms/leashedplayer/CommonEventHandler.java b/src/main/java/com/r3944realms/leashedplayer/CommonEventHandler.java index c923bb0..b3fb2bd 100644 --- a/src/main/java/com/r3944realms/leashedplayer/CommonEventHandler.java +++ b/src/main/java/com/r3944realms/leashedplayer/CommonEventHandler.java @@ -18,6 +18,7 @@ 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.tags.ItemTags; import net.minecraft.world.effect.MobEffectInstance; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EquipmentSlot; @@ -56,11 +57,13 @@ public class CommonEventHandler { ChatCommand.register(dispatcher); TickCommand.register(dispatcher); } + @SubscribeEvent public static void OnRegisterPotionBrewing(RegisterBrewingRecipesEvent event) { PotionBrewing.Builder builder = event.getBuilder(); builder.addMix(Potions.WATER, Items.SLIME_BALL, ModPotionRegister.NO_LEASH); } + @SubscribeEvent public static void OnLivingTickEvent(EntityTickEvent.Post event) { Entity entity = event.getEntity(); @@ -70,7 +73,7 @@ public class CommonEventHandler { } if (entity instanceof LivingEntity living) { MobEffectInstance effect = living.getEffect(ModEffectRegister.NO_LEASH_EFFECT); - if(effect != null && effect.getDuration() != 0){ + if (effect != null && effect.getDuration() != 0) { if (entity instanceof PlayerLeashable player) { if (player.getLeashHolder() != null) { if (player.getLeashHolder() instanceof LeashRopeArrow arrow) @@ -86,46 +89,60 @@ public class CommonEventHandler { } } if (entity instanceof Fox fox) { - if (fox.getMainHandItem().is(Items.ANVIL)) { + if (fox.getMainHandItem().is(ItemTags.ANVIL)) { fox.setItemSlot(EquipmentSlot.MAINHAND, ItemStack.EMPTY); - Util.throwItemTowardsLook(fox, ModItemRegister.NEOFORGE.get(), 1.0f, 0.1f); + Util.throwItemTowardsLook(fox, ModItemRegister.NEOFORGE.get(), 0.3f, 0.1f); fox.playSound(fox.getEatingSound(ItemStack.EMPTY)); + } else if (fox.getMainHandItem().is(ModItemRegister.NEOFORGE.get())) { + // 繞圈參數 + float rotationSpeed = 10.0f; // 每 tick 旋轉的角度 + // 計算新的旋轉角度 + fox.yBodyRot += rotationSpeed; // 身體旋轉 + fox.yHeadRot += rotationSpeed; // 頭部旋轉 + fox.yRotO += rotationSpeed; // 當前旋轉角度 + fox.yHeadRotO += rotationSpeed; // 頭部的當前旋轉角度 + + // 確保旋轉角度不超出 360 度,重置為 0 以便持續旋轉 + if (fox.yBodyRot >= 360) fox.yBodyRot -= 360; + if (fox.yHeadRot >= 360) fox.yHeadRot -= 360; + } } } } - } - @EventBusSubscriber(modid = LeashedPlayer.MOD_ID, bus = EventBusSubscriber.Bus.MOD) - public static class Mod extends CommonEventHandler { - @SubscribeEvent - public static void onCommonSetup(FMLCommonSetupEvent event) { - DispenserBlock.registerProjectileBehavior(ModItemRegister.LEASH_ROPE_ARROW.get()); - DispenserBlock.registerProjectileBehavior(ModItemRegister.TIPPED_LEASH_ROPE_ARROW.get()); - DispenserBlock.registerProjectileBehavior(ModItemRegister.SPECTRAL_LEASH_ROPE_ARROW.get()); - DispenserBlock.registerBehavior(ModItemRegister.AMETHYST_SHEARS.get(), new LeadBreakItemBehavior()); - } - @SubscribeEvent - public static void onEntityAttributeEvent(EntityAttributeCreationEvent event) { - event.put(ModEntityRegister.KID.get(), LittlePlayer.createAttributes().build()); - } - @SubscribeEvent - public static void onRegisterEvent(RegisterEvent event) { - 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) - ); + @EventBusSubscriber(modid = LeashedPlayer.MOD_ID, bus = EventBusSubscriber.Bus.MOD) + public static class Mod extends CommonEventHandler { + @SubscribeEvent + public static void onCommonSetup(FMLCommonSetupEvent event) { + DispenserBlock.registerProjectileBehavior(ModItemRegister.LEASH_ROPE_ARROW.get()); + DispenserBlock.registerProjectileBehavior(ModItemRegister.TIPPED_LEASH_ROPE_ARROW.get()); + DispenserBlock.registerProjectileBehavior(ModItemRegister.SPECTRAL_LEASH_ROPE_ARROW.get()); + DispenserBlock.registerBehavior(ModItemRegister.AMETHYST_SHEARS.get(), new LeadBreakItemBehavior()); } + + @SubscribeEvent + public static void onEntityAttributeEvent(EntityAttributeCreationEvent event) { + event.put(ModEntityRegister.KID.get(), LittlePlayer.createAttributes().build()); + } + + @SubscribeEvent + public static void onRegisterEvent(RegisterEvent event) { + 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) + ); + } + } + } } - - } diff --git a/src/main/java/com/r3944realms/leashedplayer/utils/Util.java b/src/main/java/com/r3944realms/leashedplayer/utils/Util.java index 5e0caa3..daeced5 100644 --- a/src/main/java/com/r3944realms/leashedplayer/utils/Util.java +++ b/src/main/java/com/r3944realms/leashedplayer/utils/Util.java @@ -50,7 +50,7 @@ public class Util { thrower.getZ(), new ItemStack(itemToThrow) ); - + thrownItem.setPickUpDelay(40); Vec3 lookDirection = thrower.getLookAngle(); thrownItem.setDeltaMovement(