Skip to content

Commit 0dcf8ac

Browse files
authored
Merge pull request #30 from Mxpea/main 更新分支
更新分支
2 parents 49a12f3 + 9aa05d4 commit 0dcf8ac

File tree

19 files changed

+263
-10
lines changed

19 files changed

+263
-10
lines changed

src/main/java/io/github/mxpea/fadingshadow/FadingShadow.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,16 @@
22

33
import io.github.mxpea.fadingshadow.block.ModBlock;
44
import io.github.mxpea.fadingshadow.effects.ModEffect;
5+
import io.github.mxpea.fadingshadow.entity.ModEntity;
56
import io.github.mxpea.fadingshadow.item.ModCreativeTab;
67
import io.github.mxpea.fadingshadow.item.ModItem;
78
import io.github.mxpea.fadingshadow.item.ModPotion;
89
import net.minecraft.world.effect.MobEffect;
10+
import net.minecraft.world.entity.Entity;
11+
import net.minecraft.world.entity.EntityType;
912
import net.minecraft.world.item.alchemy.Potion;
1013
import net.minecraft.world.item.alchemy.Potions;
14+
import net.neoforged.neoforge.common.Tags;
1115
import org.slf4j.Logger;
1216

1317
import com.mojang.logging.LogUtils;
@@ -51,6 +55,8 @@ public class FadingShadow {
5155
public static final DeferredRegister<Potion> POTION = DeferredRegister.create(Registries.POTION, MODID);
5256
// Create a Deferred Register to hold Potion which will all be registered under the "fadingshadow" namespace
5357
public static final DeferredRegister<MobEffect> MOB_EFFECTS = DeferredRegister.create(Registries.MOB_EFFECT, MODID);
58+
// Create a Deferred Register to hold Potion which will all be registered under the "fadingshadow" namespace
59+
public static final DeferredRegister<EntityType<?>> ENTITY_TYPE = DeferredRegister.create(Registries.ENTITY_TYPE,MODID);
5460

5561
// Creates a new Block with the id "fadingshadow:example_block", combining the namespace and path
5662
public static final DeferredBlock<Block> EXAMPLE_BLOCK = BLOCKS.registerSimpleBlock("example_block", BlockBehaviour.Properties.of().mapColor(MapColor.STONE));
@@ -87,6 +93,7 @@ public FadingShadow(IEventBus modEventBus, ModContainer modContainer) {
8793

8894
ModPotion.register(modEventBus);
8995
ModEffect.register(modEventBus);
96+
ModEntity.register(modEventBus);
9097

9198
// Register the Deferred Register to the mod event bus so blocks get registered
9299
BLOCKS.register(modEventBus);
@@ -98,6 +105,8 @@ public FadingShadow(IEventBus modEventBus, ModContainer modContainer) {
98105
POTION.register(modEventBus);
99106
// Register the Deferred Register to the mod event bus so potions get registered
100107
MOB_EFFECTS.register(modEventBus);
108+
// Register the Deferred Register to the mod event bus so potions get registered
109+
ENTITY_TYPE.register(modEventBus);
101110

102111

103112
// Register ourselves for server and other game events we are interested in.

src/main/java/io/github/mxpea/fadingshadow/FadingShadowClient.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
package io.github.mxpea.fadingshadow;
22

3+
import io.github.mxpea.fadingshadow.entity.ModEntity;
34
import io.github.mxpea.fadingshadow.item.ModItem;
45
import io.github.mxpea.fadingshadow.item.ModPotion;
56
import net.minecraft.client.Minecraft;
7+
import net.minecraft.client.renderer.entity.ThrownItemRenderer;
68
import net.minecraft.world.item.alchemy.PotionBrewing;
79
import net.minecraft.world.item.alchemy.Potions;
810
import net.neoforged.api.distmarker.Dist;
@@ -11,6 +13,7 @@
1113
import net.neoforged.fml.common.EventBusSubscriber;
1214
import net.neoforged.fml.common.Mod;
1315
import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent;
16+
import net.neoforged.neoforge.client.event.EntityRenderersEvent;
1417
import net.neoforged.neoforge.client.gui.ConfigurationScreen;
1518
import net.neoforged.neoforge.client.gui.IConfigScreenFactory;
1619
import net.neoforged.neoforge.event.brewing.RegisterBrewingRecipesEvent;
@@ -27,6 +30,12 @@ public FadingShadowClient(ModContainer container) {
2730
container.registerExtensionPoint(IConfigScreenFactory.class, ConfigurationScreen::new);
2831
}
2932

33+
@SubscribeEvent
34+
public static void registerRenderers(EntityRenderersEvent.RegisterRenderers event) {
35+
// 注册让投掷闪电瓶子用标准的“物品飞出去”渲染
36+
event.registerEntityRenderer(ModEntity.LIGHTNING_BOTTLE.get(), ThrownItemRenderer::new);
37+
}
38+
3039
@SubscribeEvent
3140
static void onClientSetup(FMLClientSetupEvent event) {
3241
// Some client setup code

src/main/java/io/github/mxpea/fadingshadow/effects/ChiliEffect.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
//这个类定义了喝辣椒水(red_chili_juice)可以饮用和相关的属性
1+
//这个类定义了喝辣椒水相关的属性
22
package io.github.mxpea.fadingshadow.effects;
33

44
import net.minecraft.world.effect.MobEffect;
@@ -14,13 +14,13 @@ public ChiliEffect(MobEffectCategory category, int color) {
1414

1515
@Override
1616
public boolean applyEffectTick(LivingEntity livingEntity, int amplifier) {
17-
livingEntity.igniteForSeconds(2);
17+
livingEntity.igniteForSeconds(2);//着火两秒
1818
livingEntity.addEffect(new MobEffectInstance(MobEffects.DAMAGE_BOOST, 400, 0));
1919
livingEntity.addEffect(new MobEffectInstance(MobEffects.MOVEMENT_SPEED, 100, 1));
20-
return false;//super.applyEffectTick(livingEntity, amplifier);
20+
return false;//这个“辣辣辣”一旦执行成功就会立即消失,取而代之的是DAMAGE_BOOST和MOVEMENT_SPEED
2121
}
2222
@Override
2323
public boolean shouldApplyEffectTickThisTick(int duration, int amplifier) {
24-
return true;
24+
return true;//是否每时刻执行
2525
}
2626
}

src/main/java/io/github/mxpea/fadingshadow/effects/ChiliPepperItem.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,5 +40,4 @@ public ItemStack finishUsingItem(ItemStack stack, Level level, LivingEntity enti
4040
public int getUseDuration(ItemStack stack, LivingEntity entity) {
4141
return 32;
4242
} //设置这个物品吃的时间
43-
// 其他代码(如果你需要 food 恢复饱食度的话)省略或自己加
4443
}
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
package io.github.mxpea.fadingshadow.effects;
2+
3+
import io.github.mxpea.fadingshadow.effects.LightningBottleEntity;
4+
import io.github.mxpea.fadingshadow.item.ModItem;
5+
import net.minecraft.sounds.SoundEvents;
6+
import net.minecraft.sounds.SoundSource;
7+
import net.minecraft.stats.Stats;
8+
import net.minecraft.world.InteractionHand;
9+
import net.minecraft.world.InteractionResultHolder;
10+
import net.minecraft.world.entity.player.Player;
11+
import net.minecraft.world.item.Item;
12+
import net.minecraft.world.item.ItemStack;
13+
import net.minecraft.world.level.Level;
14+
15+
/**
16+
* 这是你自定义的“被扔出去的瓶子”的物品类。
17+
* 玩家右键使用时,会扔出一个 LightningBottleEntity 实体。
18+
*/
19+
public class LightThrowItem extends Item {
20+
public LightThrowItem(Properties properties) {
21+
super(properties);
22+
}
23+
24+
/**
25+
* 当玩家右键使用物品时触发。
26+
*/
27+
@Override
28+
public InteractionResultHolder<ItemStack> use(Level world, Player player, InteractionHand hand) {
29+
ItemStack itemStack = player.getItemInHand(hand);
30+
31+
// 播放投掷声音
32+
world.playSound(null,
33+
player.getX(), player.getY(), player.getZ(),
34+
SoundEvents.SNOWBALL_THROW,
35+
SoundSource.PLAYERS,
36+
0.5F, // 音量
37+
1.0F // 音高
38+
);
39+
40+
// 只在服务器端生成投掷物实体
41+
if (!world.isClientSide) {
42+
// 创建一个投掷物实体,参数为世界和玩家
43+
LightningBottleEntity entity = new LightningBottleEntity(world, player);
44+
45+
// 设置投掷的角度和速度
46+
// 参数依次为:玩家对象、俯仰角、偏航角、无作用的z偏移、速度、散射
47+
entity.shootFromRotation(player, player.getXRot(), player.getYRot(), 0.0F, 1.5F, 1.0F);
48+
49+
// 把实体加到世界里
50+
world.addFreshEntity(entity);
51+
}
52+
53+
// 给玩家统计“用了这个物品”次数
54+
player.awardStat(Stats.ITEM_USED.get(this));
55+
56+
// 如果不是创造模式,消耗一个瓶子
57+
if (!player.getAbilities().instabuild) {
58+
itemStack.shrink(1);
59+
}
60+
61+
// 返回结果,表示已经成功使用物品
62+
return InteractionResultHolder.sidedSuccess(itemStack, world.isClientSide());
63+
}
64+
}
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
package io.github.mxpea.fadingshadow.effects;
2+
3+
import io.github.mxpea.fadingshadow.entity.ModEntity;
4+
import io.github.mxpea.fadingshadow.item.ModItem;
5+
import net.minecraft.world.entity.LightningBolt;
6+
import net.minecraft.world.entity.LivingEntity;
7+
import net.minecraft.world.entity.projectile.ThrowableItemProjectile;
8+
import net.minecraft.world.entity.EntityType;
9+
import net.minecraft.world.item.Item;
10+
import net.minecraft.world.level.Explosion;
11+
import net.minecraft.world.level.Level;
12+
import net.minecraft.world.phys.HitResult;
13+
import net.neoforged.neoforge.client.event.RenderHighlightEvent;
14+
15+
import java.util.Random;
16+
17+
public class LightningBottleEntity extends ThrowableItemProjectile {
18+
19+
// 注册和刷怪蛋/世界生成用
20+
public LightningBottleEntity(EntityType<? extends LightningBottleEntity> type, Level world) {
21+
super(type, world);
22+
}
23+
24+
// 投掷物的构造函数
25+
public LightningBottleEntity(Level world, LivingEntity owner) {
26+
super(ModEntity.LIGHTNING_BOTTLE.get(), owner, world);
27+
}
28+
29+
30+
@Override
31+
protected Item getDefaultItem() {
32+
return ModItem.lightning_in_a_bottle.get();
33+
}
34+
35+
@Override
36+
protected void onHit(HitResult result) {
37+
super.onHit(result);
38+
if (!this.level().isClientSide) {
39+
// 这里写击中时触发的逻辑
40+
int x,y,z;
41+
x=getBlockX();
42+
y=getBlockY();
43+
z=getBlockZ();
44+
level().explode(null,x,y,z,2f,true, Level.ExplosionInteraction.TNT);
45+
LightningBolt lightning = new LightningBolt(EntityType.LIGHTNING_BOLT,level());//新建闪电实体
46+
lightning.moveTo(x, y, z); // 设置位置
47+
level().addFreshEntity(lightning);
48+
49+
int radius = 2;
50+
Random rand = new Random();
51+
double rx = x + (rand.nextDouble() * 2 * radius - radius); // [-radius, +radius]
52+
double rz = z + (rand.nextDouble() * 2 * radius - radius); // [-radius, +radius]
53+
lightning.moveTo(rx, y, rz); // 设置随机位置
54+
level().addFreshEntity(lightning);
55+
this.discard();
56+
}
57+
}
58+
}

src/main/java/io/github/mxpea/fadingshadow/effects/ModEffect.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,11 @@
1313
public class ModEffect {
1414
public static final DeferredRegister<MobEffect> MOB_EFFECTS =
1515
DeferredRegister.create(BuiltInRegistries.MOB_EFFECT, FadingShadow.MODID);
16-
16+
//这里是注册效果的地方,复制它就行
1717
public static final Holder<MobEffect> ChiliEffect = MOB_EFFECTS.register("chilieffect",
1818
() ->new ChiliEffect(MobEffectCategory.NEUTRAL,0xd25c37));
1919

20+
//下面是初始化的,不要动
2021
public static void register(IEventBus eventBus) {
2122
MOB_EFFECTS.register(eventBus);
2223
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package io.github.mxpea.fadingshadow.entity;
2+
3+
//这个类可以允许注册新的实体
4+
import io.github.mxpea.fadingshadow.FadingShadow;
5+
import io.github.mxpea.fadingshadow.effects.LightningBottleEntity;
6+
import net.minecraft.core.registries.BuiltInRegistries;
7+
import net.minecraft.world.entity.EntityType;
8+
import net.minecraft.world.entity.MobCategory;
9+
import net.neoforged.bus.api.IEventBus;
10+
import net.neoforged.neoforge.registries.DeferredRegister;
11+
12+
import java.util.function.Supplier;
13+
14+
public class ModEntity {
15+
public static final DeferredRegister<EntityType<?>> ENTITY_TYPE =
16+
DeferredRegister.create(BuiltInRegistries.ENTITY_TYPE, FadingShadow.MODID);
17+
18+
//下面可以注册新的实体,复制然后改个名字就好了
19+
public static final Supplier<EntityType<LightningBottleEntity>> LIGHTNING_BOTTLE =
20+
ENTITY_TYPE.register("lightning_bottle",() -> EntityType.Builder.<LightningBottleEntity>of(LightningBottleEntity::new, MobCategory.MISC)
21+
.sized(0.5f,1.15f).build("lightning_bottle"));
22+
23+
//初始化内容,保留别动
24+
public static void register(IEventBus eventBus){
25+
ENTITY_TYPE.register(eventBus);
26+
}
27+
}
28+
29+

src/main/java/io/github/mxpea/fadingshadow/item/ModCreativeTab.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
public class ModCreativeTab {
1717
public static final DeferredRegister<CreativeModeTab> CREATIVE_MODE_TABS =
1818
DeferredRegister.create(Registries.CREATIVE_MODE_TAB, FadingShadow.MODID);
19-
19+
//注册物品栏中
2020
public static final Supplier<CreativeModeTab> fading_shadow =
2121
CREATIVE_MODE_TABS.register("fs_tab", () -> CreativeModeTab.builder()
2222
.icon(() -> new ItemStack(ModItem.reality_fabric.get()))
@@ -25,6 +25,9 @@ public class ModCreativeTab {
2525
output.accept(ModItem.reality_fabric);
2626
output.accept(ModItem.apple_juice);
2727
output.accept(ModItem.test);
28+
output.accept(ModItem.advanced_geiger_counter);
29+
output.accept(ModItem.geiger_counter);
30+
2831
output.accept(ModItem.lightning_in_a_bottle);
2932
output.accept(ModBlock.scranton_reality_anchors);
3033
output.accept(ModBlock.netherreactor);

src/main/java/io/github/mxpea/fadingshadow/item/ModItem.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import io.github.mxpea.fadingshadow.effects.AppleJuiceItem;
44
import io.github.mxpea.fadingshadow.effects.ChiliPepperItem;
55
import io.github.mxpea.fadingshadow.FadingShadow;
6+
import io.github.mxpea.fadingshadow.effects.LightThrowItem;
67
import net.minecraft.world.item.Item;
78
import net.neoforged.bus.api.IEventBus;
89
import net.neoforged.neoforge.registries.DeferredItem;
@@ -16,18 +17,24 @@ public class ModItem {
1617
public static final DeferredItem<Item> reality_fabric =
1718
ITEMS.register("reality_fabric", () -> new Item(new Item.Properties()));
1819

19-
public static final DeferredItem<Item> lightning_in_a_bottle =
20-
ITEMS.register("lightning_in_a_bottle", () -> new Item(new Item.Properties()));
20+
public static final DeferredItem<Item> lightning_in_a_bottle = //下面的代码可以设置最大堆叠数(maxStackSize)
21+
ITEMS.register("lightning_in_a_bottle", () -> new LightThrowItem(new Item.Properties().stacksTo(1)));
2122

2223
public static final DeferredItem<Item> apple_juice =
23-
ITEMS.register("apple_juice", () -> new AppleJuiceItem(new Item.Properties()));
24+
ITEMS.register("apple_juice", () -> new AppleJuiceItem(new Item.Properties().stacksTo(1)));
2425

2526
public static final DeferredItem<Item> test =
2627
ITEMS.register("test", () -> new Item(new Item.Properties()));//be deleted later
2728

2829
public static final DeferredItem<Item> red_chili =
2930
ITEMS.register("red_chili", () -> new ChiliPepperItem(new Item.Properties()));
3031

32+
public static final DeferredItem<Item> advanced_geiger_counter =
33+
ITEMS.register("advanced_geiger_counter", () -> new Item(new Item.Properties()));
34+
35+
public static final DeferredItem<Item> geiger_counter =
36+
ITEMS.register("geiger_counter", () -> new Item(new Item.Properties()));
37+
3138

3239

3340
//下面是初始化的,不要动

0 commit comments

Comments
 (0)