mirror of
https://github.com/Ellpeck/NaturesAura.git
synced 2024-11-26 05:08:34 +01:00
Compare commits
10 commits
4c29b7a380
...
e5b2f0f9c5
Author | SHA1 | Date | |
---|---|---|---|
e5b2f0f9c5 | |||
0fb1858688 | |||
a49f71722c | |||
c251b34d48 | |||
32629006c7 | |||
dd46d4ab95 | |||
b2a7a48876 | |||
3b16db7389 | |||
fe71e62ad4 | |||
2953dd0eea |
11 changed files with 42 additions and 34 deletions
|
@ -13,7 +13,7 @@ apply plugin: 'net.minecraftforge.gradle'
|
||||||
apply plugin: 'eclipse'
|
apply plugin: 'eclipse'
|
||||||
apply plugin: 'maven-publish'
|
apply plugin: 'maven-publish'
|
||||||
|
|
||||||
version = '37.5'
|
version = '37.6'
|
||||||
group = 'de.ellpeck.naturesaura' // http://maven.apache.org/guides/mini/guide-naming-conventions.html
|
group = 'de.ellpeck.naturesaura' // http://maven.apache.org/guides/mini/guide-naming-conventions.html
|
||||||
archivesBaseName = 'NaturesAura'
|
archivesBaseName = 'NaturesAura'
|
||||||
|
|
||||||
|
|
|
@ -321,4 +321,16 @@ public final class Helper {
|
||||||
}
|
}
|
||||||
return ItemStack.EMPTY;
|
return ItemStack.EMPTY;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static BlockPos getClosestAirAboveGround(Level level, BlockPos pos, int radius) {
|
||||||
|
for (var i = 0; i < radius; i++) {
|
||||||
|
var up = pos.above(i);
|
||||||
|
if (level.isEmptyBlock(up) && !level.isEmptyBlock(up.below()))
|
||||||
|
return up;
|
||||||
|
var dn = pos.below(i);
|
||||||
|
if (level.isEmptyBlock(dn) && !level.isEmptyBlock(dn.below()))
|
||||||
|
return dn;
|
||||||
|
}
|
||||||
|
return pos;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,7 +18,6 @@ import net.minecraft.world.level.Level;
|
||||||
import net.minecraft.world.level.LevelAccessor;
|
import net.minecraft.world.level.LevelAccessor;
|
||||||
import net.minecraft.world.level.block.BaseEntityBlock;
|
import net.minecraft.world.level.block.BaseEntityBlock;
|
||||||
import net.minecraft.world.level.block.Block;
|
import net.minecraft.world.level.block.Block;
|
||||||
import net.minecraft.world.level.block.Blocks;
|
|
||||||
import net.minecraft.world.level.block.RenderShape;
|
import net.minecraft.world.level.block.RenderShape;
|
||||||
import net.minecraft.world.level.block.entity.BlockEntity;
|
import net.minecraft.world.level.block.entity.BlockEntity;
|
||||||
import net.minecraft.world.level.block.entity.BlockEntityTicker;
|
import net.minecraft.world.level.block.entity.BlockEntityTicker;
|
||||||
|
@ -127,19 +126,11 @@ public class BlockContainerImpl extends BaseEntityBlock implements IModItem {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onPlace(BlockState state, Level levelIn, BlockPos pos, BlockState newState, boolean isMoving) {
|
public void playerWillDestroy(Level p_49852_, BlockPos p_49853_, BlockState p_49854_, Player p_49855_) {
|
||||||
if (state.getBlock() != newState.getBlock()) {
|
var tile = p_49852_.getBlockEntity(p_49853_);
|
||||||
var tile = levelIn.getBlockEntity(pos);
|
if (tile instanceof BlockEntityImpl impl)
|
||||||
if (tile instanceof BlockEntityImpl)
|
impl.dropInventory();
|
||||||
((BlockEntityImpl) tile).dropInventory();
|
super.playerWillDestroy(p_49852_, p_49853_, p_49854_, p_49855_);
|
||||||
}
|
|
||||||
super.onPlace(state, levelIn, pos, newState, isMoving);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void playerDestroy(Level levelIn, Player player, BlockPos pos, BlockState state, @Nullable BlockEntity te, ItemStack stack) {
|
|
||||||
super.playerDestroy(levelIn, player, pos, state, te, stack);
|
|
||||||
levelIn.setBlockAndUpdate(pos, Blocks.AIR.defaultBlockState());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -48,7 +48,7 @@ public class BlockEntityMossGenerator extends BlockEntityImpl implements ITickab
|
||||||
var state = this.level.getBlockState(offset);
|
var state = this.level.getBlockState(offset);
|
||||||
var result = NaturesAuraAPI.BOTANIST_PICKAXE_CONVERSIONS.inverse().get(state);
|
var result = NaturesAuraAPI.BOTANIST_PICKAXE_CONVERSIONS.inverse().get(state);
|
||||||
|
|
||||||
var toAdd = 7000;
|
var toAdd = 4000;
|
||||||
if (this.canGenerateRightNow(toAdd)) {
|
if (this.canGenerateRightNow(toAdd)) {
|
||||||
this.generateAura(toAdd);
|
this.generateAura(toAdd);
|
||||||
PacketHandler.sendToAllAround(this.level, this.worldPosition, 32,
|
PacketHandler.sendToAllAround(this.level, this.worldPosition, 32,
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package de.ellpeck.naturesaura.chunk.effect;
|
package de.ellpeck.naturesaura.chunk.effect;
|
||||||
|
|
||||||
|
import de.ellpeck.naturesaura.Helper;
|
||||||
import de.ellpeck.naturesaura.ModConfig;
|
import de.ellpeck.naturesaura.ModConfig;
|
||||||
import de.ellpeck.naturesaura.NaturesAura;
|
import de.ellpeck.naturesaura.NaturesAura;
|
||||||
import de.ellpeck.naturesaura.api.NaturesAuraAPI;
|
import de.ellpeck.naturesaura.api.NaturesAuraAPI;
|
||||||
|
@ -16,9 +17,11 @@ import net.minecraft.world.entity.player.Player;
|
||||||
import net.minecraft.world.item.ItemStack;
|
import net.minecraft.world.item.ItemStack;
|
||||||
import net.minecraft.world.item.Items;
|
import net.minecraft.world.item.Items;
|
||||||
import net.minecraft.world.level.Level;
|
import net.minecraft.world.level.Level;
|
||||||
import net.minecraft.world.level.block.*;
|
import net.minecraft.world.level.block.Blocks;
|
||||||
|
import net.minecraft.world.level.block.BonemealableBlock;
|
||||||
|
import net.minecraft.world.level.block.DoublePlantBlock;
|
||||||
|
import net.minecraft.world.level.block.TallGrassBlock;
|
||||||
import net.minecraft.world.level.chunk.LevelChunk;
|
import net.minecraft.world.level.chunk.LevelChunk;
|
||||||
import net.minecraft.world.level.levelgen.Heightmap;
|
|
||||||
|
|
||||||
public class PlantBoostEffect implements IDrainSpotEffect {
|
public class PlantBoostEffect implements IDrainSpotEffect {
|
||||||
|
|
||||||
|
@ -34,7 +37,7 @@ public class PlantBoostEffect implements IDrainSpotEffect {
|
||||||
int aura = auraAndSpots.getLeft();
|
int aura = auraAndSpots.getLeft();
|
||||||
if (aura < 1500000)
|
if (aura < 1500000)
|
||||||
return false;
|
return false;
|
||||||
this.amount = Math.min(45, Mth.ceil(Math.abs(aura) / 100000F / auraAndSpots.getRight()));
|
this.amount = Math.min(75, Mth.ceil(Math.abs(aura) / 50000F / auraAndSpots.getRight()));
|
||||||
if (this.amount <= 1)
|
if (this.amount <= 1)
|
||||||
return false;
|
return false;
|
||||||
this.dist = Mth.clamp(Math.abs(aura) / 150000, 5, 35);
|
this.dist = Mth.clamp(Math.abs(aura) / 150000, 5, 35);
|
||||||
|
@ -63,15 +66,16 @@ public class PlantBoostEffect implements IDrainSpotEffect {
|
||||||
return;
|
return;
|
||||||
for (var i = this.amount / 2 + level.random.nextInt(this.amount / 2); i >= 0; i--) {
|
for (var i = this.amount / 2 + level.random.nextInt(this.amount / 2); i >= 0; i--) {
|
||||||
var x = Mth.floor(pos.getX() + (2 * level.random.nextFloat() - 1) * this.dist);
|
var x = Mth.floor(pos.getX() + (2 * level.random.nextFloat() - 1) * this.dist);
|
||||||
|
var y = Mth.floor(pos.getY() + (2 * level.random.nextFloat() - 1) * this.dist / 2);
|
||||||
var z = Mth.floor(pos.getZ() + (2 * level.random.nextFloat() - 1) * this.dist);
|
var z = Mth.floor(pos.getZ() + (2 * level.random.nextFloat() - 1) * this.dist);
|
||||||
var plantPos = new BlockPos(x, level.getHeight(Heightmap.Types.WORLD_SURFACE, x, z), z).below();
|
var plantPos = Helper.getClosestAirAboveGround(level, new BlockPos(x, y, z), this.dist / 2).below();
|
||||||
if (plantPos.distSqr(pos) <= this.dist * this.dist && level.isLoaded(plantPos)) {
|
if (plantPos.distSqr(pos) <= this.dist * this.dist && level.isLoaded(plantPos)) {
|
||||||
if (NaturesAuraAPI.instance().isEffectPowderActive(level, plantPos, PlantBoostEffect.NAME))
|
if (NaturesAuraAPI.instance().isEffectPowderActive(level, plantPos, PlantBoostEffect.NAME))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
var state = level.getBlockState(plantPos);
|
var state = level.getBlockState(plantPos);
|
||||||
var block = state.getBlock();
|
var block = state.getBlock();
|
||||||
if (block instanceof BonemealableBlock growable && !(block instanceof DoublePlantBlock) && !(block instanceof TallGrassBlock) && block != Blocks.GRASS_BLOCK) {
|
if (block instanceof BonemealableBlock growable && !(block instanceof DoublePlantBlock) && !(block instanceof TallGrassBlock) && block != Blocks.GRASS_BLOCK && block != Blocks.MOSS_BLOCK) {
|
||||||
if (growable.isValidBonemealTarget(level, plantPos, state, false)) {
|
if (growable.isValidBonemealTarget(level, plantPos, state, false)) {
|
||||||
try {
|
try {
|
||||||
growable.performBonemeal((ServerLevel) level, level.random, plantPos, state);
|
growable.performBonemeal((ServerLevel) level, level.random, plantPos, state);
|
||||||
|
|
|
@ -50,7 +50,7 @@ public class EntityLightProjectile extends ThrowableProjectile {
|
||||||
if (state.getMaterial().isReplaceable())
|
if (state.getMaterial().isReplaceable())
|
||||||
this.level.setBlockAndUpdate(pos, ModBlocks.LIGHT.defaultBlockState());
|
this.level.setBlockAndUpdate(pos, ModBlocks.LIGHT.defaultBlockState());
|
||||||
} else if (result instanceof EntityHitResult entity) {
|
} else if (result instanceof EntityHitResult entity) {
|
||||||
entity.getEntity().setRemainingFireTicks(5);
|
entity.getEntity().setSecondsOnFire(5);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this.discard();
|
this.discard();
|
||||||
|
|
|
@ -34,7 +34,6 @@ import net.minecraft.world.level.block.Blocks;
|
||||||
import net.minecraft.world.level.block.BonemealableBlock;
|
import net.minecraft.world.level.block.BonemealableBlock;
|
||||||
import net.minecraft.world.level.block.LeavesBlock;
|
import net.minecraft.world.level.block.LeavesBlock;
|
||||||
import net.minecraft.world.level.block.MyceliumBlock;
|
import net.minecraft.world.level.block.MyceliumBlock;
|
||||||
import net.minecraft.world.level.levelgen.Heightmap;
|
|
||||||
import net.minecraft.world.phys.BlockHitResult;
|
import net.minecraft.world.phys.BlockHitResult;
|
||||||
import net.minecraftforge.api.distmarker.Dist;
|
import net.minecraftforge.api.distmarker.Dist;
|
||||||
import net.minecraftforge.api.distmarker.OnlyIn;
|
import net.minecraftforge.api.distmarker.OnlyIn;
|
||||||
|
@ -110,8 +109,9 @@ public class ClientEvents {
|
||||||
var amount = Mth.floor(190 * ModConfig.instance.excessParticleAmount.get());
|
var amount = Mth.floor(190 * ModConfig.instance.excessParticleAmount.get());
|
||||||
for (var i = 0; i < amount; i++) {
|
for (var i = 0; i < amount; i++) {
|
||||||
var x = Mth.floor(mc.player.getX()) + mc.level.random.nextInt(64) - 32;
|
var x = Mth.floor(mc.player.getX()) + mc.level.random.nextInt(64) - 32;
|
||||||
|
var y = Mth.floor(mc.player.getY()) + mc.level.random.nextInt(32) - 16;
|
||||||
var z = Mth.floor(mc.player.getZ()) + mc.level.random.nextInt(64) - 32;
|
var z = Mth.floor(mc.player.getZ()) + mc.level.random.nextInt(64) - 32;
|
||||||
var pos = new BlockPos(x, mc.level.getHeight(Heightmap.Types.WORLD_SURFACE, x, z) - 1, z);
|
var pos = Helper.getClosestAirAboveGround(mc.level, new BlockPos(x, y, z), 16).below();
|
||||||
var state = mc.level.getBlockState(pos);
|
var state = mc.level.getBlockState(pos);
|
||||||
var block = state.getBlock();
|
var block = state.getBlock();
|
||||||
if (block instanceof BonemealableBlock || block instanceof IPlantable || block instanceof LeavesBlock || block instanceof MyceliumBlock) {
|
if (block instanceof BonemealableBlock || block instanceof IPlantable || block instanceof LeavesBlock || block instanceof MyceliumBlock) {
|
||||||
|
|
|
@ -21,11 +21,11 @@ import net.minecraft.world.level.ChunkPos;
|
||||||
import net.minecraft.world.level.Level;
|
import net.minecraft.world.level.Level;
|
||||||
import net.minecraft.world.level.chunk.LevelChunk;
|
import net.minecraft.world.level.chunk.LevelChunk;
|
||||||
import net.minecraftforge.event.AttachCapabilitiesEvent;
|
import net.minecraftforge.event.AttachCapabilitiesEvent;
|
||||||
|
import net.minecraftforge.event.RegisterCommandsEvent;
|
||||||
import net.minecraftforge.event.TickEvent;
|
import net.minecraftforge.event.TickEvent;
|
||||||
import net.minecraftforge.event.entity.player.PlayerInteractEvent;
|
import net.minecraftforge.event.entity.player.PlayerInteractEvent;
|
||||||
import net.minecraftforge.event.level.ChunkEvent;
|
import net.minecraftforge.event.level.ChunkEvent;
|
||||||
import net.minecraftforge.event.level.ChunkWatchEvent;
|
import net.minecraftforge.event.level.ChunkWatchEvent;
|
||||||
import net.minecraftforge.event.server.ServerStartingEvent;
|
|
||||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||||
import net.minecraftforge.fml.util.ObfuscationReflectionHelper;
|
import net.minecraftforge.fml.util.ObfuscationReflectionHelper;
|
||||||
import net.minecraftforge.registries.ForgeRegistries;
|
import net.minecraftforge.registries.ForgeRegistries;
|
||||||
|
@ -138,7 +138,7 @@ public class CommonEvents {
|
||||||
}
|
}
|
||||||
|
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public void onServerStarting(ServerStartingEvent event) {
|
public void onCommands(RegisterCommandsEvent event) {
|
||||||
CommandAura.register(event.getServer().getCommands().getDispatcher());
|
CommandAura.register(event.getDispatcher());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,6 +40,6 @@ public class GuiEnderCrate extends AbstractContainerScreen<ContainerEnderCrate>
|
||||||
var i = (this.width - this.imageWidth) / 2;
|
var i = (this.width - this.imageWidth) / 2;
|
||||||
var j = (this.height - this.imageHeight) / 2;
|
var j = (this.height - this.imageHeight) / 2;
|
||||||
this.blit(matrixStack, i, j, 0, 0, this.imageWidth, 3 * 18 + 17);
|
this.blit(matrixStack, i, j, 0, 0, this.imageWidth, 3 * 18 + 17);
|
||||||
this.blit(matrixStack, i, j + 3 * 18 + 17, 0, 126, this.imageHeight, 96);
|
this.blit(matrixStack, i, j + 3 * 18 + 17, 0, 126, this.imageWidth, 96);
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -13,6 +13,7 @@ import net.minecraft.network.chat.Component;
|
||||||
import net.minecraft.resources.ResourceLocation;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
import net.minecraft.sounds.SoundEvents;
|
import net.minecraft.sounds.SoundEvents;
|
||||||
import net.minecraft.sounds.SoundSource;
|
import net.minecraft.sounds.SoundSource;
|
||||||
|
import net.minecraft.world.entity.item.ItemEntity;
|
||||||
import net.minecraft.world.item.CreativeModeTab;
|
import net.minecraft.world.item.CreativeModeTab;
|
||||||
import net.minecraft.world.item.Item;
|
import net.minecraft.world.item.Item;
|
||||||
import net.minecraft.world.item.ItemStack;
|
import net.minecraft.world.item.ItemStack;
|
||||||
|
@ -115,7 +116,9 @@ public class ItemAuraBottle extends ItemImpl implements IColorProvidingItem, ICu
|
||||||
if (!player.level.isClientSide) {
|
if (!player.level.isClientSide) {
|
||||||
held.shrink(1);
|
held.shrink(1);
|
||||||
|
|
||||||
player.getInventory().add(ItemAuraBottle.setType(new ItemStack(ItemAuraBottle.this), IAuraType.forLevel(player.level)));
|
var stack = ItemAuraBottle.setType(new ItemStack(ItemAuraBottle.this), IAuraType.forLevel(player.level));
|
||||||
|
if (!player.addItem(stack))
|
||||||
|
player.level.addFreshEntity(new ItemEntity(player.level, player.getX(), player.getY(), player.getZ(), stack));
|
||||||
|
|
||||||
var spot = IAuraChunk.getHighestSpot(player.level, pos, 30, pos);
|
var spot = IAuraChunk.getHighestSpot(player.level, pos, 30, pos);
|
||||||
IAuraChunk.getAuraChunk(player.level, spot).drainAura(spot, 20000);
|
IAuraChunk.getAuraChunk(player.level, spot).drainAura(spot, 20000);
|
||||||
|
|
|
@ -47,11 +47,9 @@ public class ItemAxe extends AxeItem implements IModItem, ICustomItemModel {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onBlockStartBreak(ItemStack itemstack, BlockPos pos, Player player) {
|
public boolean onBlockStartBreak(ItemStack itemstack, BlockPos pos, Player player) {
|
||||||
if (itemstack.getItem() == ModItems.SKY_AXE) {
|
if (itemstack.getItem() == ModItems.SKY_AXE && !player.isShiftKeyDown() && player.level.getBlockState(pos).is(BlockTags.LOGS)) {
|
||||||
if (player.level.getBlockState(pos).is(BlockTags.LOGS)) {
|
BlockEntityWoodStand.recurseTreeDestruction(player.level, pos, pos, false, true);
|
||||||
BlockEntityWoodStand.recurseTreeDestruction(player.level, pos, pos, false, true);
|
return true;
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue