mirror of
https://github.com/Ellpeck/NaturesAura.git
synced 2024-11-25 20:58:34 +01:00
animal container, part 1
This commit is contained in:
parent
e240aade3a
commit
75fb931c5f
5 changed files with 84 additions and 3 deletions
|
@ -0,0 +1,35 @@
|
||||||
|
package de.ellpeck.naturesaura.blocks;
|
||||||
|
|
||||||
|
import de.ellpeck.naturesaura.api.render.IVisualizable;
|
||||||
|
import de.ellpeck.naturesaura.blocks.tiles.TileEntityAnimalContainer;
|
||||||
|
import net.minecraft.block.material.Material;
|
||||||
|
import net.minecraft.tileentity.TileEntity;
|
||||||
|
import net.minecraft.util.math.AxisAlignedBB;
|
||||||
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
import net.minecraft.world.World;
|
||||||
|
import net.minecraftforge.api.distmarker.Dist;
|
||||||
|
import net.minecraftforge.api.distmarker.OnlyIn;
|
||||||
|
|
||||||
|
public class BlockAnimalContainer extends BlockContainerImpl implements IVisualizable {
|
||||||
|
public BlockAnimalContainer() {
|
||||||
|
super("animal_container", TileEntityAnimalContainer::new, ModBlocks.prop(Material.WOOD).hardnessAndResistance(2));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@OnlyIn(Dist.CLIENT)
|
||||||
|
public AxisAlignedBB getVisualizationBounds(World world, BlockPos pos) {
|
||||||
|
TileEntity tile = world.getTileEntity(pos);
|
||||||
|
if (tile instanceof TileEntityAnimalContainer) {
|
||||||
|
int radius = ((TileEntityAnimalContainer) tile).getRadius();
|
||||||
|
if (radius > 0)
|
||||||
|
return new AxisAlignedBB(pos).grow(radius);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@OnlyIn(Dist.CLIENT)
|
||||||
|
public int getVisualizationColor(World world, BlockPos pos) {
|
||||||
|
return 0x42ddf5;
|
||||||
|
}
|
||||||
|
}
|
|
@ -59,6 +59,7 @@ public final class ModBlocks {
|
||||||
public static Block DIMENSION_RAIL_END;
|
public static Block DIMENSION_RAIL_END;
|
||||||
public static Block BLAST_FURNACE_BOOSTER;
|
public static Block BLAST_FURNACE_BOOSTER;
|
||||||
public static Block NETHER_WART_MUSHROOM;
|
public static Block NETHER_WART_MUSHROOM;
|
||||||
|
public static Block ANIMAL_CONTAINER;
|
||||||
|
|
||||||
public static Block.Properties prop(Material material, MaterialColor color) {
|
public static Block.Properties prop(Material material, MaterialColor color) {
|
||||||
return Block.Properties.create(material, color);
|
return Block.Properties.create(material, color);
|
||||||
|
|
|
@ -1,8 +1,6 @@
|
||||||
package de.ellpeck.naturesaura.blocks.tiles;
|
package de.ellpeck.naturesaura.blocks.tiles;
|
||||||
|
|
||||||
import de.ellpeck.naturesaura.NaturesAura;
|
|
||||||
import net.minecraft.tileentity.TileEntityType;
|
import net.minecraft.tileentity.TileEntityType;
|
||||||
import net.minecraftforge.registries.ObjectHolder;
|
|
||||||
|
|
||||||
@SuppressWarnings("FieldNamingConvention")
|
@SuppressWarnings("FieldNamingConvention")
|
||||||
public final class ModTileEntities {
|
public final class ModTileEntities {
|
||||||
|
@ -35,4 +33,5 @@ public final class ModTileEntities {
|
||||||
public static TileEntityType<TileEntityTimeChanger> TIME_CHANGER;
|
public static TileEntityType<TileEntityTimeChanger> TIME_CHANGER;
|
||||||
public static TileEntityType<TileEntityWoodStand> WOOD_STAND;
|
public static TileEntityType<TileEntityWoodStand> WOOD_STAND;
|
||||||
public static TileEntityType<TileEntityBlastFurnaceBooster> BLAST_FURNACE_BOOSTER;
|
public static TileEntityType<TileEntityBlastFurnaceBooster> BLAST_FURNACE_BOOSTER;
|
||||||
|
public static TileEntityType<TileEntityAnimalContainer> ANIMAL_CONTAINER;
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,45 @@
|
||||||
|
package de.ellpeck.naturesaura.blocks.tiles;
|
||||||
|
|
||||||
|
import net.minecraft.entity.passive.AnimalEntity;
|
||||||
|
import net.minecraft.tileentity.ITickableTileEntity;
|
||||||
|
import net.minecraft.util.math.AxisAlignedBB;
|
||||||
|
import net.minecraft.util.math.Vec3d;
|
||||||
|
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
public class TileEntityAnimalContainer extends TileEntityImpl implements ITickableTileEntity {
|
||||||
|
|
||||||
|
public TileEntityAnimalContainer() {
|
||||||
|
super(ModTileEntities.ANIMAL_CONTAINER);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getRadius() {
|
||||||
|
return this.redstonePower / 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onRedstonePowerChange(int newPower) {
|
||||||
|
super.onRedstonePowerChange(newPower);
|
||||||
|
this.sendToClients();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void tick() {
|
||||||
|
if (this.world.isRemote || this.world.getGameTime() % 2 != 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
int radius = this.getRadius();
|
||||||
|
Set<AnimalEntity> animalsInRange = new HashSet<>(this.world.getEntitiesWithinAABB(AnimalEntity.class, new AxisAlignedBB(this.pos).grow(radius - 1)));
|
||||||
|
List<AnimalEntity> animalsOutRange = this.world.getEntitiesWithinAABB(AnimalEntity.class, new AxisAlignedBB(this.pos).grow(radius));
|
||||||
|
for (AnimalEntity animal : animalsOutRange) {
|
||||||
|
if (animalsInRange.contains(animal))
|
||||||
|
continue;
|
||||||
|
Vec3d pos = animal.getPositionVec();
|
||||||
|
Vec3d distance = pos.subtract(this.pos.getX(), pos.getY(), this.pos.getZ());
|
||||||
|
distance = distance.normalize().scale(-0.15F);
|
||||||
|
animal.setMotion(distance);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -107,7 +107,8 @@ public final class ModRegistry {
|
||||||
new BlockDimensionRail("nether", DimensionType.THE_NETHER, DimensionType.OVERWORLD),
|
new BlockDimensionRail("nether", DimensionType.THE_NETHER, DimensionType.OVERWORLD),
|
||||||
new BlockDimensionRail("end", DimensionType.THE_END, DimensionType.OVERWORLD),
|
new BlockDimensionRail("end", DimensionType.THE_END, DimensionType.OVERWORLD),
|
||||||
new BlockBlastFurnaceBooster(),
|
new BlockBlastFurnaceBooster(),
|
||||||
new BlockImpl("nether_wart_mushroom", ModBlocks.prop(Blocks.RED_MUSHROOM_BLOCK))
|
new BlockImpl("nether_wart_mushroom", ModBlocks.prop(Blocks.RED_MUSHROOM_BLOCK)),
|
||||||
|
new BlockAnimalContainer()
|
||||||
);
|
);
|
||||||
|
|
||||||
if (ModConfig.instance.rfConverter.get())
|
if (ModConfig.instance.rfConverter.get())
|
||||||
|
|
Loading…
Reference in a new issue