|
3 | 3 | import mekanism.additions.client.AdditionsClient; |
4 | 4 | import mekanism.additions.common.block.BlockObsidianTNT; |
5 | 5 | import mekanism.additions.common.config.MekanismAdditionsConfig; |
| 6 | +import mekanism.additions.common.entity.EntityBalloon; |
| 7 | +import mekanism.additions.common.item.ItemBalloon; |
6 | 8 | import mekanism.additions.common.registries.AdditionsBiomeModifierSerializers; |
7 | 9 | import mekanism.additions.common.registries.AdditionsBlocks; |
8 | 10 | import mekanism.additions.common.registries.AdditionsCreativeTabs; |
|
16 | 18 | import mekanism.common.base.IModModule; |
17 | 19 | import mekanism.common.config.MekanismModConfig; |
18 | 20 | import mekanism.common.lib.Version; |
| 21 | +import mekanism.common.registration.impl.ItemRegistryObject; |
19 | 22 | import net.minecraft.core.BlockPos; |
| 23 | +import net.minecraft.core.Position; |
20 | 24 | import net.minecraft.core.dispenser.BlockSource; |
21 | 25 | import net.minecraft.core.dispenser.DefaultDispenseItemBehavior; |
22 | 26 | import net.minecraft.resources.ResourceLocation; |
| 27 | +import net.minecraft.server.level.ServerLevel; |
23 | 28 | import net.minecraft.world.item.ItemStack; |
24 | 29 | import net.minecraft.world.level.block.DispenserBlock; |
25 | 30 | import net.minecraft.world.level.gameevent.GameEvent; |
| 31 | +import net.minecraft.world.phys.Vec3; |
26 | 32 | import net.neoforged.bus.api.IEventBus; |
27 | 33 | import net.neoforged.fml.ModContainer; |
28 | 34 | import net.neoforged.fml.common.Mod; |
@@ -113,6 +119,26 @@ protected ItemStack execute(@NotNull BlockSource source, @NotNull ItemStack stac |
113 | 119 | return super.execute(source, stack); |
114 | 120 | } |
115 | 121 | }); |
| 122 | + DefaultDispenseItemBehavior balloonBehavior = new DefaultDispenseItemBehavior() { |
| 123 | + @NotNull |
| 124 | + @Override |
| 125 | + protected ItemStack execute(@NotNull BlockSource source, @NotNull ItemStack stack) { |
| 126 | + ServerLevel level = source.level(); |
| 127 | + Position position = DispenserBlock.getDispensePosition(source, 1, new Vec3(-0.5, -3.5, -0.5)); |
| 128 | + EntityBalloon balloon = EntityBalloon.create(level, position.x(), position.y(), position.z(), ((ItemBalloon) stack.getItem()).getColor()); |
| 129 | + if (balloon == null) { |
| 130 | + //Otherwise, if something went very wrong, eject it as a normal item |
| 131 | + return super.execute(source, stack); |
| 132 | + } |
| 133 | + stack.shrink(1); |
| 134 | + level.addFreshEntity(balloon); |
| 135 | + level.gameEvent(null, GameEvent.ENTITY_PLACE, new Vec3(position.x(), position.y(), position.z())); |
| 136 | + return stack; |
| 137 | + } |
| 138 | + }; |
| 139 | + for (ItemRegistryObject<ItemBalloon> balloon : AdditionsItems.BALLOONS.values()) { |
| 140 | + DispenserBlock.registerBehavior(balloon, balloonBehavior); |
| 141 | + } |
116 | 142 | }); |
117 | 143 | Mekanism.logger.info("Loaded 'Mekanism: Additions' module."); |
118 | 144 | } |
|
0 commit comments