NaturesAura/src/main/java/de/ellpeck/naturesaura/items/ItemStructureFinder.java

49 lines
2.1 KiB
Java
Raw Normal View History

2020-05-20 14:55:59 +02:00
package de.ellpeck.naturesaura.items;
import de.ellpeck.naturesaura.entities.EntityStructureFinder;
import de.ellpeck.naturesaura.entities.ModEntities;
2022-03-04 15:59:04 +01:00
import net.minecraft.core.Holder;
import net.minecraft.core.HolderSet;
2021-12-05 23:32:31 +01:00
import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.InteractionHand;
2021-12-15 16:24:53 +01:00
import net.minecraft.world.InteractionResult;
2021-12-05 23:32:31 +01:00
import net.minecraft.world.InteractionResultHolder;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.Level;
2022-03-04 15:59:04 +01:00
import net.minecraft.world.level.levelgen.feature.ConfiguredStructureFeature;
2020-05-20 14:55:59 +02:00
public class ItemStructureFinder extends ItemImpl {
2021-12-05 23:32:31 +01:00
2022-03-04 15:59:04 +01:00
private final Holder<ConfiguredStructureFeature<?, ?>> structureName;
2020-05-20 14:55:59 +02:00
private final int color;
2021-01-14 23:42:53 +01:00
private final int radius;
2020-05-20 14:55:59 +02:00
2022-03-04 15:59:04 +01:00
public ItemStructureFinder(String baseName, Holder<ConfiguredStructureFeature<?, ?>> structureName, int color, int radius) {
2020-05-20 14:55:59 +02:00
super(baseName);
this.structureName = structureName;
this.color = color;
2021-01-14 23:42:53 +01:00
this.radius = radius;
2020-05-20 14:55:59 +02:00
}
@Override
2021-12-05 23:32:31 +01:00
public InteractionResultHolder<ItemStack> use(Level levelIn, Player playerIn, InteractionHand handIn) {
2021-12-15 16:30:22 +01:00
var stack = playerIn.getItemInHand(handIn);
2021-12-05 23:32:31 +01:00
if (!levelIn.isClientSide && ((ServerLevel) levelIn).structureFeatureManager().shouldGenerateFeatures()) {
2022-03-04 15:59:04 +01:00
var holderSet = HolderSet.direct(this.structureName);
var pos = ((ServerLevel) levelIn).getChunkSource().getGenerator().findNearestMapFeature((ServerLevel) levelIn, holderSet, playerIn.blockPosition(), this.radius, false);
2020-05-20 14:55:59 +02:00
if (pos != null) {
2021-12-15 16:30:22 +01:00
var entity = new EntityStructureFinder(ModEntities.STRUCTURE_FINDER, levelIn);
2021-12-15 16:24:53 +01:00
entity.setPos(playerIn.getX(), playerIn.getY(0.5D), playerIn.getZ());
entity.setItem(stack);
entity.getEntityData().set(EntityStructureFinder.COLOR, this.color);
2022-03-04 15:59:04 +01:00
entity.signalTo(pos.getFirst().above(64));
2021-12-15 16:24:53 +01:00
levelIn.addFreshEntity(entity);
2020-05-20 14:55:59 +02:00
stack.shrink(1);
}
}
2021-12-15 16:24:53 +01:00
return new InteractionResultHolder<>(InteractionResult.SUCCESS, stack);
2020-05-20 14:55:59 +02:00
}
}