Inspired by 2020's April Fools' 20w14infinite Snapshot, this mod brings endless randomly generated dimensions into Minecraft.
1package net.lerariemann.infinity.item;
2
3import dev.architectury.core.item.ArchitecturyBucketItem;
4import net.lerariemann.infinity.registry.core.ModBlocks;
5import net.lerariemann.infinity.util.VersionMethods;
6import net.lerariemann.infinity.util.platform.InfinityPlatform;
7import net.minecraft.advancements.CriteriaTriggers;
8import net.minecraft.core.BlockPos;
9import net.minecraft.server.level.ServerPlayer;
10import net.minecraft.world.InteractionResult;
11import net.minecraft.world.entity.player.Player;
12import net.minecraft.world.item.Item;
13import net.minecraft.world.item.ItemStack;
14import net.minecraft.world.item.ItemUtils;
15import net.minecraft.world.item.Items;
16import net.minecraft.world.item.context.UseOnContext;
17import net.minecraft.world.level.Level;
18import net.minecraft.world.level.block.Blocks;
19import net.minecraft.world.level.block.state.BlockState;
20
21public class IridescenceBucketItem extends ArchitecturyBucketItem {
22 public IridescenceBucketItem(Item.Properties properties) {
23 super(InfinityPlatform.INSTANCE.getIridescenceStill(), properties.craftRemainder(Items.BUCKET).stacksTo(1));
24 }
25
26 @Override
27 public InteractionResult useOn(UseOnContext context) {
28 Level level = context.getLevel();
29 BlockPos blockPos = context.getClickedPos();
30 BlockState blockState = level.getBlockState(blockPos);
31
32 Player player = context.getPlayer();
33
34 if (!blockState.is(Blocks.CAULDRON) || player == null)
35 return InteractionResult.PASS;
36
37 this.playEmptySound(player, level, blockPos);
38
39 ItemStack itemStack = context.getItemInHand();
40 ItemStack itemStack2 = ItemUtils.createFilledResult(itemStack, player, Items.BUCKET.getDefaultInstance());
41
42 player.setItemInHand(context.getHand(), itemStack2);
43 level.setBlockAndUpdate(blockPos, ModBlocks.IRIDESCENCE_CAULDRON.get().defaultBlockState());
44
45 if (player instanceof ServerPlayer serverPlayer)
46 CriteriaTriggers.ITEM_USED_ON_BLOCK.trigger(serverPlayer, blockPos, itemStack);
47
48 return VersionMethods.sidedSuccess(level.isClientSide());
49 }
50}