some more misc fixes

This commit is contained in:
Ellpeck 2020-01-22 23:21:52 +01:00
parent 8d064816ef
commit 8fb7beb49f
40 changed files with 714 additions and 674 deletions

View file

@ -88,7 +88,7 @@ public final class Helper {
List<ItemFrameEntity> frames = world.getEntitiesWithinAABB(ItemFrameEntity.class, new AxisAlignedBB(pos).grow(0.25)); List<ItemFrameEntity> frames = world.getEntitiesWithinAABB(ItemFrameEntity.class, new AxisAlignedBB(pos).grow(0.25));
for (int i = frames.size() - 1; i >= 0; i--) { for (int i = frames.size() - 1; i >= 0; i--) {
ItemFrameEntity frame = frames.get(i); ItemFrameEntity frame = frames.get(i);
BlockPos framePos = frame.getHangingPosition().offset(frame.getHorizontalFacing()); BlockPos framePos = frame.getHangingPosition().offset(frame.getHorizontalFacing().getOpposite());
if (!pos.equals(framePos)) if (!pos.equals(framePos))
frames.remove(i); frames.remove(i);
} }

View file

@ -84,7 +84,7 @@ public final class ModConfig {
//@Comment("If debug information about Aura around the player should be displayed in the F3 debug menu if the player is in creative mode") //@Comment("If debug information about Aura around the player should be displayed in the F3 debug menu if the player is in creative mode")
public boolean debugText = true; public boolean debugText = true;
//@Comment("If, when the F3 debug menu is open and the player is in creative mode, every Aura spot should be highlighted in the world for debug purposes") //@Comment("If, when the F3 debug menu is open and the player is in creative mode, every Aura spot should be highlighted in the world for debug purposes")
public boolean debugWorld = false; public boolean debugWorld = true;
} }
public static void initOrReload(boolean reload) { public static void initOrReload(boolean reload) {

View file

@ -3,6 +3,7 @@ package de.ellpeck.naturesaura.api.multiblock;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks; import net.minecraft.block.Blocks;
import net.minecraft.tags.Tag;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.world.IWorld; import net.minecraft.world.IWorld;
@ -28,31 +29,8 @@ public class Matcher {
return new Matcher(Blocks.AIR.getDefaultState(), null); return new Matcher(Blocks.AIR.getDefaultState(), null);
} }
public static Matcher oreDict(Block defaultBlock, String name) { public static Matcher tag(Block defaultBlock, Tag tag) {
return new Matcher(defaultBlock.getDefaultState(), return new Matcher(defaultBlock.getDefaultState(), (world, start, offset, pos, state, c) -> state.getBlock().getTags().contains(tag.getId()));
(world, start, offset, pos, state, otherC) -> state.getBlock() == defaultBlock);
/* TODO return new Matcher(defaultBlock.getDefaultState(), new ICheck() {
private List<BlockState> states;
@Override
public boolean matches(World world, BlockPos start, BlockPos offset, BlockPos pos, BlockState state, char c) {
if (this.states == null) {
this.states = new ArrayList<>();
for (ItemStack stack : OreDictionary.getOres(name)) {
Block block = Block.getBlockFromItem(stack.getItem());
if (block != null && block != Blocks.AIR) {
int damage = stack.getItemDamage();
if (damage == OreDictionary.WILDCARD_VALUE)
this.states.addAll(block.getBlockState().getValidStates());
else
this.states.add(block.getStateFromMeta(damage));
}
}
}
return this.states.isEmpty() || this.states.contains(state);
}
});*/
} }
public interface ICheck { public interface ICheck {

View file

@ -2,6 +2,9 @@ package de.ellpeck.naturesaura.blocks;
import de.ellpeck.naturesaura.api.aura.chunk.IAuraChunk; import de.ellpeck.naturesaura.api.aura.chunk.IAuraChunk;
import de.ellpeck.naturesaura.items.ModItems; import de.ellpeck.naturesaura.items.ModItems;
import de.ellpeck.naturesaura.packet.PacketClient;
import de.ellpeck.naturesaura.packet.PacketHandler;
import de.ellpeck.naturesaura.packet.PacketParticles;
import de.ellpeck.naturesaura.reg.IModItem; import de.ellpeck.naturesaura.reg.IModItem;
import de.ellpeck.naturesaura.reg.IModelProvider; import de.ellpeck.naturesaura.reg.IModelProvider;
import de.ellpeck.naturesaura.reg.ModRegistry; import de.ellpeck.naturesaura.reg.ModRegistry;
@ -60,7 +63,7 @@ public class BlockDimensionRail extends AbstractRailBlock implements IModItem, I
if (stack.getItem() == ModItems.RANGE_VISUALIZER) { if (stack.getItem() == ModItems.RANGE_VISUALIZER) {
if (!worldIn.isRemote) { if (!worldIn.isRemote) {
BlockPos goalPos = this.getGoalCoords(worldIn, pos); BlockPos goalPos = this.getGoalCoords(worldIn, pos);
// TODO PacketHandler.sendTo(player, new PacketClient(0, this.goalDim, goalPos.getX(), goalPos.getY(), goalPos.getZ())); PacketHandler.sendTo(player, new PacketClient(0, this.goalDim, goalPos.getX(), goalPos.getY(), goalPos.getZ()));
} }
return true; return true;
} }
@ -77,7 +80,7 @@ public class BlockDimensionRail extends AbstractRailBlock implements IModItem, I
return; return;
AxisAlignedBB box = cart.getCollisionBoundingBox(); AxisAlignedBB box = cart.getCollisionBoundingBox();
// TODO PacketHandler.sendToAllAround(world, pos, 32, new PacketParticles((float) box.minX, (float) box.minY, (float) box.minZ, 25, (int) ((box.maxX - box.minX) * 100F), (int) ((box.maxY - box.minY) * 100F), (int) ((box.maxZ - box.minZ) * 100F))); PacketHandler.sendToAllAround(world, pos, 32, new PacketParticles((float) box.minX, (float) box.minY, (float) box.minZ, 25, (int) ((box.maxX - box.minX) * 100F), (int) ((box.maxY - box.minY) * 100F), (int) ((box.maxZ - box.minZ) * 100F)));
world.playSound(null, pos, SoundEvents.ENTITY_ENDERMAN_TELEPORT, SoundCategory.BLOCKS, 1F, 1F); world.playSound(null, pos, SoundEvents.ENTITY_ENDERMAN_TELEPORT, SoundCategory.BLOCKS, 1F, 1F);
BlockPos goalCoords = this.getGoalCoords(world, pos); BlockPos goalCoords = this.getGoalCoords(world, pos);
@ -118,7 +121,6 @@ public class BlockDimensionRail extends AbstractRailBlock implements IModItem, I
return SHAPE; return SHAPE;
} }
public boolean isFlexibleRail(BlockState state, IBlockReader world, BlockPos pos) { public boolean isFlexibleRail(BlockState state, IBlockReader world, BlockPos pos) {
return false; return false;
} }

View file

@ -98,10 +98,9 @@ public class BlockGoldenLeaves extends LeavesBlock implements
} }
*/ */
@Override @Override
public void tick(BlockState state, World worldIn, BlockPos pos, Random random) { public void randomTick(BlockState state, World worldIn, BlockPos pos, Random random) {
super.tick(state, worldIn, pos, random); super.randomTick(state, worldIn, pos, random);
if (!worldIn.isRemote) { if (!worldIn.isRemote) {
int stage = state.get(STAGE); int stage = state.get(STAGE);
if (stage < HIGHEST_STAGE) { if (stage < HIGHEST_STAGE) {
@ -118,8 +117,7 @@ public class BlockGoldenLeaves extends LeavesBlock implements
public static boolean convert(World world, BlockPos pos) { public static boolean convert(World world, BlockPos pos) {
BlockState state = world.getBlockState(pos); BlockState state = world.getBlockState(pos);
if (state.getBlock().isFoliage(state, world, pos) && if ((state.getBlock().isFoliage(state, world, pos) || state.getBlock() instanceof LeavesBlock) && !(state.getBlock() instanceof BlockAncientLeaves || state.getBlock() instanceof BlockGoldenLeaves)) {
!(state.getBlock() instanceof BlockAncientLeaves || state.getBlock() instanceof BlockGoldenLeaves)) {
if (!world.isRemote) { if (!world.isRemote) {
world.setBlockState(pos, ModBlocks.GOLDEN_LEAVES.getDefaultState() world.setBlockState(pos, ModBlocks.GOLDEN_LEAVES.getDefaultState()
.with(DISTANCE, state.has(DISTANCE) ? state.get(DISTANCE) : 1) .with(DISTANCE, state.has(DISTANCE) ? state.get(DISTANCE) : 1)

View file

@ -3,6 +3,8 @@ package de.ellpeck.naturesaura.blocks;
import de.ellpeck.naturesaura.Helper; import de.ellpeck.naturesaura.Helper;
import de.ellpeck.naturesaura.api.render.IVisualizable; import de.ellpeck.naturesaura.api.render.IVisualizable;
import de.ellpeck.naturesaura.blocks.tiles.TileEntityPickupStopper; import de.ellpeck.naturesaura.blocks.tiles.TileEntityPickupStopper;
import de.ellpeck.naturesaura.packet.PacketHandler;
import de.ellpeck.naturesaura.packet.PacketParticles;
import net.minecraft.block.SoundType; import net.minecraft.block.SoundType;
import net.minecraft.block.material.Material; import net.minecraft.block.material.Material;
import net.minecraft.entity.item.ItemEntity; import net.minecraft.entity.item.ItemEntity;
@ -43,9 +45,9 @@ public class BlockPickupStopper extends BlockContainerImpl implements IVisualiza
event.setCanceled(true); event.setCanceled(true);
/* if (item.world.getGameTime() % 3 == 0) TODO particles if (item.world.getGameTime() % 3 == 0)
PacketHandler.sendToAllAround(item.world, pos, 32, PacketHandler.sendToAllAround(item.world, pos, 32,
new PacketParticles((float) item.posX, (float) item.posY, (float) item.posZ, 14));*/ new PacketParticles((float) item.posX, (float) item.posY, (float) item.posZ, 14));
return true; return true;
}); });
} }

View file

@ -2,8 +2,9 @@ package de.ellpeck.naturesaura.blocks;
import de.ellpeck.naturesaura.api.NaturesAuraAPI; import de.ellpeck.naturesaura.api.NaturesAuraAPI;
import de.ellpeck.naturesaura.api.aura.chunk.IAuraChunk; import de.ellpeck.naturesaura.api.aura.chunk.IAuraChunk;
import de.ellpeck.naturesaura.blocks.tiles.ModTileEntities;
import de.ellpeck.naturesaura.blocks.tiles.TileEntityProjectileGenerator; import de.ellpeck.naturesaura.blocks.tiles.TileEntityProjectileGenerator;
import de.ellpeck.naturesaura.packet.PacketHandler;
import de.ellpeck.naturesaura.packet.PacketParticles;
import net.minecraft.block.SoundType; import net.minecraft.block.SoundType;
import net.minecraft.block.material.Material; import net.minecraft.block.material.Material;
import net.minecraft.entity.Entity; import net.minecraft.entity.Entity;
@ -13,6 +14,7 @@ import net.minecraft.util.SoundCategory;
import net.minecraft.util.SoundEvents; import net.minecraft.util.SoundEvents;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.BlockRayTraceResult; import net.minecraft.util.math.BlockRayTraceResult;
import net.minecraft.util.math.RayTraceResult;
import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.entity.ProjectileImpactEvent; import net.minecraftforge.event.entity.ProjectileImpactEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.eventbus.api.SubscribeEvent;
@ -30,15 +32,18 @@ public class BlockProjectileGenerator extends BlockContainerImpl/* implements IT
Entity entity = event.getEntity(); Entity entity = event.getEntity();
if (entity.world.isRemote) if (entity.world.isRemote)
return; return;
BlockRayTraceResult ray = (BlockRayTraceResult) event.getRayTraceResult(); RayTraceResult ray = event.getRayTraceResult();
BlockPos pos = ray.getPos(); if (!(ray instanceof BlockRayTraceResult))
return;
BlockRayTraceResult blockRay = (BlockRayTraceResult) ray;
BlockPos pos = blockRay.getPos();
if (pos == null) if (pos == null)
return; return;
TileEntity tile = entity.world.getTileEntity(pos); TileEntity tile = entity.world.getTileEntity(pos);
if (!(tile instanceof TileEntityProjectileGenerator)) if (!(tile instanceof TileEntityProjectileGenerator))
return; return;
TileEntityProjectileGenerator generator = (TileEntityProjectileGenerator) tile; TileEntityProjectileGenerator generator = (TileEntityProjectileGenerator) tile;
if (generator.nextSide != ray.getFace()) if (generator.nextSide != blockRay.getFace())
return; return;
ResourceLocation name = ForgeRegistries.ENTITIES.getKey(entity.getType()); ResourceLocation name = ForgeRegistries.ENTITIES.getKey(entity.getType());
Integer amount = NaturesAuraAPI.PROJECTILE_GENERATIONS.get(name); Integer amount = NaturesAuraAPI.PROJECTILE_GENERATIONS.get(name);
@ -48,9 +53,8 @@ public class BlockProjectileGenerator extends BlockContainerImpl/* implements IT
BlockPos spot = IAuraChunk.getLowestSpot(entity.world, pos, 35, pos); BlockPos spot = IAuraChunk.getLowestSpot(entity.world, pos, 35, pos);
IAuraChunk.getAuraChunk(entity.world, spot).storeAura(spot, amount); IAuraChunk.getAuraChunk(entity.world, spot).storeAura(spot, amount);
// TODO particles PacketHandler.sendToAllAround(entity.world, pos, 32,
/* PacketHandler.sendToAllAround(entity.world, pos, 32, new PacketParticles((float) entity.posX, (float) entity.posY, (float) entity.posZ, 26, pos.getX(), pos.getY(), pos.getZ()));
new PacketParticles((float) entity.posX, (float) entity.posY, (float) entity.posZ, 26, pos.getX(), pos.getY(), pos.getZ()));*/
entity.world.playSound(null, pos.getX(), pos.getY(), pos.getZ(), SoundEvents.ENTITY_ENDER_EYE_LAUNCH, SoundCategory.BLOCKS, 0.8F, 1F); entity.world.playSound(null, pos.getX(), pos.getY(), pos.getZ(), SoundEvents.ENTITY_ENDER_EYE_LAUNCH, SoundCategory.BLOCKS, 0.8F, 1F);
generator.nextSide = generator.nextSide.rotateY(); generator.nextSide = generator.nextSide.rotateY();

View file

@ -5,6 +5,8 @@ import de.ellpeck.naturesaura.api.aura.chunk.IAuraChunk;
import de.ellpeck.naturesaura.api.render.IVisualizable; import de.ellpeck.naturesaura.api.render.IVisualizable;
import de.ellpeck.naturesaura.blocks.tiles.ModTileEntities; import de.ellpeck.naturesaura.blocks.tiles.ModTileEntities;
import de.ellpeck.naturesaura.blocks.tiles.TileEntitySpawnLamp; import de.ellpeck.naturesaura.blocks.tiles.TileEntitySpawnLamp;
import de.ellpeck.naturesaura.packet.PacketHandler;
import de.ellpeck.naturesaura.packet.PacketParticles;
import net.minecraft.block.SoundType; import net.minecraft.block.SoundType;
import net.minecraft.block.material.Material; import net.minecraft.block.material.Material;
import net.minecraft.entity.MobEntity; import net.minecraft.entity.MobEntity;
@ -55,9 +57,8 @@ public class BlockSpawnLamp extends BlockContainerImpl implements IVisualizable
BlockPos spot = IAuraChunk.getHighestSpot(world, lampPos, 32, lampPos); BlockPos spot = IAuraChunk.getHighestSpot(world, lampPos, 32, lampPos);
IAuraChunk.getAuraChunk(world, spot).drainAura(spot, 200); IAuraChunk.getAuraChunk(world, spot).drainAura(spot, 200);
// TODO particles PacketHandler.sendToAllAround(world, lampPos, 32,
/*PacketHandler.sendToAllAround(world, lampPos, 32, new PacketParticles(lampPos.getX(), lampPos.getY(), lampPos.getZ(), 15));
new PacketParticles(lampPos.getX(), lampPos.getY(), lampPos.getZ(), 15));*/
} }
event.setResult(Event.Result.DENY); event.setResult(Event.Result.DENY);

View file

@ -10,6 +10,7 @@ import net.minecraft.block.Blocks;
import net.minecraft.block.LogBlock; import net.minecraft.block.LogBlock;
import net.minecraft.block.SaplingBlock; import net.minecraft.block.SaplingBlock;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.tags.BlockTags;
import net.minecraft.util.ResourceLocation; import net.minecraft.util.ResourceLocation;
public final class Multiblocks { public final class Multiblocks {
@ -23,7 +24,7 @@ public final class Multiblocks {
{" ", " WBW ", " WBW ", " WWCWCWW ", " BBW WBB ", " WWCWCWW ", " WBW ", " WBW ", " "}}, {" ", " WBW ", " WBW ", " WWCWCWW ", " BBW WBB ", " WWCWCWW ", " WBW ", " WBW ", " "}},
'C', Blocks.CHISELED_STONE_BRICKS, 'C', Blocks.CHISELED_STONE_BRICKS,
'B', Blocks.STONE_BRICKS, 'B', Blocks.STONE_BRICKS,
'W', Blocks.OAK_PLANKS, // TODO create a matcher that matches by tag for planks 'W', Matcher.tag(Blocks.OAK_PLANKS, BlockTags.PLANKS),
'M', ModBlocks.GOLD_BRICK, 'M', ModBlocks.GOLD_BRICK,
'0', ModBlocks.NATURE_ALTAR, '0', ModBlocks.NATURE_ALTAR,
' ', Matcher.wildcard()); ' ', Matcher.wildcard());

View file

@ -1,6 +1,8 @@
package de.ellpeck.naturesaura.blocks.tiles; package de.ellpeck.naturesaura.blocks.tiles;
import de.ellpeck.naturesaura.api.aura.chunk.IAuraChunk; import de.ellpeck.naturesaura.api.aura.chunk.IAuraChunk;
import de.ellpeck.naturesaura.packet.PacketHandler;
import de.ellpeck.naturesaura.packet.PacketParticles;
import net.minecraft.tileentity.ITickableTileEntity; import net.minecraft.tileentity.ITickableTileEntity;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
@ -28,8 +30,8 @@ public class TileEntityAnimalGenerator extends TileEntityImpl implements ITickab
remain -= IAuraChunk.getAuraChunk(this.world, spot).storeAura(spot, remain); remain -= IAuraChunk.getAuraChunk(this.world, spot).storeAura(spot, remain);
} }
/*PacketHandler.sendToAllAround(this.world, this.pos, 32, TODO particles PacketHandler.sendToAllAround(this.world, this.pos, 32,
new PacketParticles(this.pos.getX(), this.pos.getY(), this.pos.getZ(), 16));*/ new PacketParticles(this.pos.getX(), this.pos.getY(), this.pos.getZ(), 16));
} }
this.timeRemaining -= 10; this.timeRemaining -= 10;

View file

@ -6,6 +6,8 @@ import de.ellpeck.naturesaura.api.aura.chunk.IAuraChunk;
import de.ellpeck.naturesaura.api.aura.type.IAuraType; import de.ellpeck.naturesaura.api.aura.type.IAuraType;
import de.ellpeck.naturesaura.api.recipes.AnimalSpawnerRecipe; import de.ellpeck.naturesaura.api.recipes.AnimalSpawnerRecipe;
import de.ellpeck.naturesaura.blocks.multi.Multiblocks; import de.ellpeck.naturesaura.blocks.multi.Multiblocks;
import de.ellpeck.naturesaura.packet.PacketHandler;
import de.ellpeck.naturesaura.packet.PacketParticles;
import net.minecraft.entity.Entity; import net.minecraft.entity.Entity;
import net.minecraft.entity.item.ItemEntity; import net.minecraft.entity.item.ItemEntity;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
@ -87,9 +89,8 @@ public class TileEntityAnimalSpawner extends TileEntityImpl implements ITickable
for (ItemEntity item : items) { for (ItemEntity item : items) {
item.remove(); item.remove();
// TODO particles PacketHandler.sendToAllAround(this.world, this.pos, 32,
/*PacketHandler.sendToAllAround(this.world, this.pos, 32, new PacketParticles((float) item.posX, (float) item.posY, (float) item.posZ, 19));
new PacketParticles((float) item.posX, (float) item.posY, (float) item.posZ, 19));*/
} }
this.currentRecipe = recipe; this.currentRecipe = recipe;

View file

@ -2,6 +2,8 @@ package de.ellpeck.naturesaura.blocks.tiles;
import de.ellpeck.naturesaura.blocks.BlockAutoCrafter; import de.ellpeck.naturesaura.blocks.BlockAutoCrafter;
import de.ellpeck.naturesaura.blocks.multi.Multiblocks; import de.ellpeck.naturesaura.blocks.multi.Multiblocks;
import de.ellpeck.naturesaura.packet.PacketHandler;
import de.ellpeck.naturesaura.packet.PacketParticles;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.entity.item.ItemEntity; import net.minecraft.entity.item.ItemEntity;
import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerEntity;
@ -107,9 +109,8 @@ public class TileEntityAutoCrafter extends TileEntityImpl implements ITickableTi
this.world.addEntity(remItem); this.world.addEntity(remItem);
} }
// TODO particles PacketHandler.sendToAllAround(this.world, this.pos, 32,
/* PacketHandler.sendToAllAround(this.world, this.pos, 32, new PacketParticles((float) item.posX, (float) item.posY, (float) item.posZ, 19));
new PacketParticles((float) item.posX, (float) item.posY, (float) item.posZ, 19));*/
} }
} }
} }

View file

@ -4,6 +4,8 @@ import de.ellpeck.naturesaura.api.NaturesAuraAPI;
import de.ellpeck.naturesaura.api.aura.chunk.IAuraChunk; import de.ellpeck.naturesaura.api.aura.chunk.IAuraChunk;
import de.ellpeck.naturesaura.api.aura.container.BasicAuraContainer; import de.ellpeck.naturesaura.api.aura.container.BasicAuraContainer;
import de.ellpeck.naturesaura.api.aura.container.IAuraContainer; import de.ellpeck.naturesaura.api.aura.container.IAuraContainer;
import de.ellpeck.naturesaura.packet.PacketHandler;
import de.ellpeck.naturesaura.packet.PacketParticles;
import net.minecraft.block.Blocks; import net.minecraft.block.Blocks;
import net.minecraft.entity.item.ItemEntity; import net.minecraft.entity.item.ItemEntity;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
@ -70,9 +72,8 @@ public class TileEntityEndFlower extends TileEntityImpl implements ITickableTile
this.isDrainMode = true; this.isDrainMode = true;
item.remove(); item.remove();
// TODO particles PacketHandler.sendToAllAround(this.world, this.pos, 32,
/* PacketHandler.sendToAllAround(this.world, this.pos, 32, new PacketParticles((float) item.posX, (float) item.posY, (float) item.posZ, 21, this.container.getAuraColor()));
new PacketParticles((float) item.posX, (float) item.posY, (float) item.posZ, 21, this.container.getAuraColor()));*/
break; break;
} }
} else { } else {

View file

@ -3,6 +3,9 @@ package de.ellpeck.naturesaura.blocks.tiles;
import de.ellpeck.naturesaura.Helper; import de.ellpeck.naturesaura.Helper;
import de.ellpeck.naturesaura.ModConfig; import de.ellpeck.naturesaura.ModConfig;
import de.ellpeck.naturesaura.api.aura.chunk.IAuraChunk; import de.ellpeck.naturesaura.api.aura.chunk.IAuraChunk;
import de.ellpeck.naturesaura.api.aura.type.IAuraType;
import de.ellpeck.naturesaura.packet.PacketHandler;
import de.ellpeck.naturesaura.packet.PacketParticleStream;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.entity.item.ItemFrameEntity; import net.minecraft.entity.item.ItemFrameEntity;
@ -154,8 +157,7 @@ public class TileEntityFieldCreator extends TileEntityImpl implements ITickableT
private void sendParticles() { private void sendParticles() {
for (int j = 0; j < 2; j++) { for (int j = 0; j < 2; j++) {
BlockPos p = j == 0 ? this.pos : this.getConnectedPos(); BlockPos p = j == 0 ? this.pos : this.getConnectedPos();
// TODO particles PacketHandler.sendToAllAround(this.world, p, 32, new PacketParticleStream(
/* PacketHandler.sendToAllAround(this.world, p, 32, new PacketParticleStream(
p.getX() + (float) this.world.rand.nextGaussian() * 3F, p.getX() + (float) this.world.rand.nextGaussian() * 3F,
p.getY() + 1 + this.world.rand.nextFloat() * 3F, p.getY() + 1 + this.world.rand.nextFloat() * 3F,
p.getZ() + (float) this.world.rand.nextGaussian() * 3F, p.getZ() + (float) this.world.rand.nextGaussian() * 3F,
@ -163,7 +165,7 @@ public class TileEntityFieldCreator extends TileEntityImpl implements ITickableT
p.getY() + 0.5F, p.getY() + 0.5F,
p.getZ() + 0.5F, p.getZ() + 0.5F,
this.world.rand.nextFloat() * 0.07F + 0.07F, IAuraType.forWorld(this.world).getColor(), this.world.rand.nextFloat() + 0.5F this.world.rand.nextFloat() * 0.07F + 0.07F, IAuraType.forWorld(this.world).getColor(), this.world.rand.nextFloat() + 0.5F
));*/ ));
} }
} }

View file

@ -1,6 +1,9 @@
package de.ellpeck.naturesaura.blocks.tiles; package de.ellpeck.naturesaura.blocks.tiles;
import com.google.common.primitives.Ints;
import de.ellpeck.naturesaura.api.aura.chunk.IAuraChunk; import de.ellpeck.naturesaura.api.aura.chunk.IAuraChunk;
import de.ellpeck.naturesaura.packet.PacketHandler;
import de.ellpeck.naturesaura.packet.PacketParticles;
import net.minecraft.entity.item.FireworkRocketEntity; import net.minecraft.entity.item.FireworkRocketEntity;
import net.minecraft.entity.item.ItemEntity; import net.minecraft.entity.item.ItemEntity;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
@ -105,10 +108,9 @@ public class TileEntityFireworkGenerator extends TileEntityImpl implements ITick
data.add(this.pos.getY()); data.add(this.pos.getY());
data.add(this.pos.getZ()); data.add(this.pos.getZ());
data.addAll(usedColors); data.addAll(usedColors);
// TODO particles PacketHandler.sendToAllLoaded(this.world, this.pos, new PacketParticles(
/* PacketHandler.sendToAllLoaded(this.world, this.pos, new PacketParticles(
(float) this.trackedEntity.posX, (float) this.trackedEntity.posY, (float) this.trackedEntity.posZ, (float) this.trackedEntity.posX, (float) this.trackedEntity.posY, (float) this.trackedEntity.posZ,
24, Ints.toArray(data)));*/ 24, Ints.toArray(data)));
} }
} }

View file

@ -4,13 +4,15 @@ import de.ellpeck.naturesaura.Helper;
import de.ellpeck.naturesaura.api.NaturesAuraAPI; import de.ellpeck.naturesaura.api.NaturesAuraAPI;
import de.ellpeck.naturesaura.api.aura.chunk.IAuraChunk; import de.ellpeck.naturesaura.api.aura.chunk.IAuraChunk;
import de.ellpeck.naturesaura.api.aura.type.IAuraType; import de.ellpeck.naturesaura.api.aura.type.IAuraType;
import de.ellpeck.naturesaura.packet.PacketHandler;
import de.ellpeck.naturesaura.packet.PacketParticleStream;
import de.ellpeck.naturesaura.packet.PacketParticles;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.nbt.CompoundNBT; import net.minecraft.nbt.CompoundNBT;
import net.minecraft.nbt.INBT; import net.minecraft.nbt.INBT;
import net.minecraft.nbt.ListNBT; import net.minecraft.nbt.ListNBT;
import net.minecraft.tileentity.ITickableTileEntity; import net.minecraft.tileentity.ITickableTileEntity;
import net.minecraft.tileentity.TileEntityType;
import net.minecraft.util.ResourceLocation; import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraftforge.registries.ForgeRegistries; import net.minecraftforge.registries.ForgeRegistries;
@ -77,10 +79,9 @@ public class TileEntityFlowerGenerator extends TileEntityImpl implements ITickab
this.world.removeBlock(pos, false); this.world.removeBlock(pos, false);
// TODO particles
int color = Helper.blendColors(0x5ccc30, 0xe53c16, toAdd / (float) addAmount); int color = Helper.blendColors(0x5ccc30, 0xe53c16, toAdd / (float) addAmount);
if (toAdd > 0) { if (toAdd > 0) {
/*for (int i = this.world.rand.nextInt(5) + 5; i >= 0; i--) for (int i = this.world.rand.nextInt(5) + 5; i >= 0; i--)
PacketHandler.sendToAllAround(this.world, this.pos, 32, new PacketParticleStream( PacketHandler.sendToAllAround(this.world, this.pos, 32, new PacketParticleStream(
pos.getX() + 0.25F + this.world.rand.nextFloat() * 0.5F, pos.getX() + 0.25F + this.world.rand.nextFloat() * 0.5F,
pos.getY() + 0.25F + this.world.rand.nextFloat() * 0.5F, pos.getY() + 0.25F + this.world.rand.nextFloat() * 0.5F,
@ -90,9 +91,9 @@ public class TileEntityFlowerGenerator extends TileEntityImpl implements ITickab
this.pos.getZ() + 0.25F + this.world.rand.nextFloat() * 0.5F, this.pos.getZ() + 0.25F + this.world.rand.nextFloat() * 0.5F,
this.world.rand.nextFloat() * 0.02F + 0.1F, color, 1F this.world.rand.nextFloat() * 0.02F + 0.1F, color, 1F
)); ));
PacketHandler.sendToAllAround(this.world, this.pos, 32, new PacketParticles(this.pos.getX(), this.pos.getY(), this.pos.getZ(), 8));*/ PacketHandler.sendToAllAround(this.world, this.pos, 32, new PacketParticles(this.pos.getX(), this.pos.getY(), this.pos.getZ(), 8));
} }
//PacketHandler.sendToAllAround(this.world, this.pos, 32, new PacketParticles(pos.getX(), pos.getY(), pos.getZ(), 7, color)); PacketHandler.sendToAllAround(this.world, this.pos, 32, new PacketParticles(pos.getX(), pos.getY(), pos.getZ(), 7, color));
} }
} }

View file

@ -1,7 +1,10 @@
package de.ellpeck.naturesaura.blocks.tiles; package de.ellpeck.naturesaura.blocks.tiles;
import de.ellpeck.naturesaura.api.aura.chunk.IAuraChunk; import de.ellpeck.naturesaura.api.aura.chunk.IAuraChunk;
import de.ellpeck.naturesaura.api.aura.type.IAuraType;
import de.ellpeck.naturesaura.blocks.BlockFurnaceHeater; import de.ellpeck.naturesaura.blocks.BlockFurnaceHeater;
import de.ellpeck.naturesaura.packet.PacketHandler;
import de.ellpeck.naturesaura.packet.PacketParticleStream;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.nbt.CompoundNBT; import net.minecraft.nbt.CompoundNBT;
import net.minecraft.tileentity.FurnaceTileEntity; import net.minecraft.tileentity.FurnaceTileEntity;
@ -44,8 +47,7 @@ public class TileEntityFurnaceHeater extends TileEntityImpl implements ITickable
did = true; did = true;
if (this.world.getGameTime() % 15 == 0) { if (this.world.getGameTime() % 15 == 0) {
// TODO particles PacketHandler.sendToAllAround(this.world, this.pos, 32, new PacketParticleStream(
/*PacketHandler.sendToAllAround(this.world, this.pos, 32, new PacketParticleStream(
this.pos.getX() + (float) this.world.rand.nextGaussian() * 5F, this.pos.getX() + (float) this.world.rand.nextGaussian() * 5F,
this.pos.getY() + 1 + this.world.rand.nextFloat() * 5F, this.pos.getY() + 1 + this.world.rand.nextFloat() * 5F,
this.pos.getZ() + (float) this.world.rand.nextGaussian() * 5F, this.pos.getZ() + (float) this.world.rand.nextGaussian() * 5F,
@ -53,7 +55,7 @@ public class TileEntityFurnaceHeater extends TileEntityImpl implements ITickable
tilePos.getY() + this.world.rand.nextFloat(), tilePos.getY() + this.world.rand.nextFloat(),
tilePos.getZ() + this.world.rand.nextFloat(), tilePos.getZ() + this.world.rand.nextFloat(),
this.world.rand.nextFloat() * 0.07F + 0.07F, IAuraType.forWorld(this.world).getColor(), this.world.rand.nextFloat() + 0.5F this.world.rand.nextFloat() * 0.07F + 0.07F, IAuraType.forWorld(this.world).getColor(), this.world.rand.nextFloat() + 0.5F
));*/ ));
} }
} }
} }

View file

@ -1,6 +1,8 @@
package de.ellpeck.naturesaura.blocks.tiles; package de.ellpeck.naturesaura.blocks.tiles;
import de.ellpeck.naturesaura.api.aura.chunk.IAuraChunk; import de.ellpeck.naturesaura.api.aura.chunk.IAuraChunk;
import de.ellpeck.naturesaura.packet.PacketHandler;
import de.ellpeck.naturesaura.packet.PacketParticles;
import net.minecraft.block.HopperBlock; import net.minecraft.block.HopperBlock;
import net.minecraft.entity.item.ItemEntity; import net.minecraft.entity.item.ItemEntity;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
@ -60,9 +62,8 @@ public class TileEntityHopperUpgrade extends TileEntityImpl implements ITickable
BlockPos spot = IAuraChunk.getHighestSpot(this.world, this.pos, 25, this.pos); BlockPos spot = IAuraChunk.getHighestSpot(this.world, this.pos, 25, this.pos);
IAuraChunk.getAuraChunk(this.world, spot).drainAura(spot, 500); IAuraChunk.getAuraChunk(this.world, spot).drainAura(spot, 500);
// TODO particles PacketHandler.sendToAllAround(this.world, this.pos, 32,
/* PacketHandler.sendToAllAround(this.world, this.pos, 32, new PacketParticles((float) item.posX, (float) item.posY, (float) item.posZ, 10));
new PacketParticles((float) item.posX, (float) item.posY, (float) item.posZ, 10));*/
} }
} }
} }

View file

@ -6,6 +6,7 @@ import de.ellpeck.naturesaura.api.aura.container.IAuraContainer;
import de.ellpeck.naturesaura.blocks.ModBlocks; import de.ellpeck.naturesaura.blocks.ModBlocks;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.entity.item.ItemEntity; import net.minecraft.entity.item.ItemEntity;
import net.minecraft.entity.player.ServerPlayerEntity;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.nbt.CompoundNBT; import net.minecraft.nbt.CompoundNBT;
import net.minecraft.network.NetworkManager; import net.minecraft.network.NetworkManager;
@ -13,8 +14,8 @@ import net.minecraft.network.play.server.SUpdateTileEntityPacket;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraft.tileentity.TileEntityType; import net.minecraft.tileentity.TileEntityType;
import net.minecraft.util.Direction; import net.minecraft.util.Direction;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.ChunkPos;
import net.minecraft.world.World; import net.minecraft.world.server.ServerWorld;
import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.util.LazyOptional; import net.minecraftforge.common.util.LazyOptional;
import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.CapabilityItemHandler;
@ -22,6 +23,7 @@ import net.minecraftforge.items.IItemHandler;
import net.minecraftforge.items.IItemHandlerModifiable; import net.minecraftforge.items.IItemHandlerModifiable;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import java.util.stream.Stream;
public class TileEntityImpl extends TileEntity { public class TileEntityImpl extends TileEntity {
@ -31,12 +33,6 @@ public class TileEntityImpl extends TileEntity {
super(tileEntityTypeIn); super(tileEntityTypeIn);
} }
// TODO figure out if this was still needed
/* @Override
public boolean shouldRefresh(World world, BlockPos pos, BlockState oldState, BlockState newState) {
return oldState.getBlock() != newState.getBlock();
}*/
@Override @Override
public CompoundNBT write(CompoundNBT compound) { public CompoundNBT write(CompoundNBT compound) {
this.writeNBT(compound, SaveType.TILE); this.writeNBT(compound, SaveType.TILE);
@ -92,11 +88,10 @@ public class TileEntityImpl extends TileEntity {
} }
public void sendToClients() { public void sendToClients() {
// TODO send this shit to the client somehow ServerWorld world = (ServerWorld) this.getWorld();
/* ServerWorld world = (ServerWorld) this.getWorld(); Stream<ServerPlayerEntity> entities = world.getChunkProvider().chunkManager.getTrackingPlayers(new ChunkPos(this.getPos()), false);
Stream<ServerPlayerEntity> entities = world.getChunkProvider().chunkManager.getTrackingPlayers(new ChunkPos(this.getPos().getX() >> 4, this.getPos().getZ() >> 4), false);
SUpdateTileEntityPacket packet = this.getUpdatePacket(); SUpdateTileEntityPacket packet = this.getUpdatePacket();
entities.forEach(()-> packet.packet);*/ entities.forEach(e -> e.connection.sendPacket(packet));
} }
public IItemHandlerModifiable getItemHandler(Direction facing) { public IItemHandlerModifiable getItemHandler(Direction facing) {

View file

@ -2,6 +2,8 @@ package de.ellpeck.naturesaura.blocks.tiles;
import de.ellpeck.naturesaura.api.NaturesAuraAPI; import de.ellpeck.naturesaura.api.NaturesAuraAPI;
import de.ellpeck.naturesaura.api.aura.chunk.IAuraChunk; import de.ellpeck.naturesaura.api.aura.chunk.IAuraChunk;
import de.ellpeck.naturesaura.packet.PacketHandler;
import de.ellpeck.naturesaura.packet.PacketParticles;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.tileentity.ITickableTileEntity; import net.minecraft.tileentity.ITickableTileEntity;
@ -46,9 +48,8 @@ public class TileEntityMossGenerator extends TileEntityImpl implements ITickable
toAdd -= IAuraChunk.getAuraChunk(this.world, spot).storeAura(spot, toAdd); toAdd -= IAuraChunk.getAuraChunk(this.world, spot).storeAura(spot, toAdd);
} }
// TODO particles PacketHandler.sendToAllAround(this.world, this.pos, 32,
/*PacketHandler.sendToAllAround(this.world, this.pos, 32, new PacketParticles(offset.getX(), offset.getY(), offset.getZ(), 23));
new PacketParticles(offset.getX(), offset.getY(), offset.getZ(), 23));*/
} }
this.world.playEvent(2001, offset, Block.getStateId(state)); this.world.playEvent(2001, offset, Block.getStateId(state));

View file

@ -7,6 +7,9 @@ import de.ellpeck.naturesaura.api.aura.container.IAuraContainer;
import de.ellpeck.naturesaura.api.aura.type.IAuraType; import de.ellpeck.naturesaura.api.aura.type.IAuraType;
import de.ellpeck.naturesaura.api.recipes.AltarRecipe; import de.ellpeck.naturesaura.api.recipes.AltarRecipe;
import de.ellpeck.naturesaura.blocks.multi.Multiblocks; import de.ellpeck.naturesaura.blocks.multi.Multiblocks;
import de.ellpeck.naturesaura.packet.PacketHandler;
import de.ellpeck.naturesaura.packet.PacketParticleStream;
import de.ellpeck.naturesaura.packet.PacketParticles;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.Ingredient; import net.minecraft.item.crafting.Ingredient;
@ -100,15 +103,14 @@ public class TileEntityNatureAltar extends TileEntityImpl implements ITickableTi
chunk.drainAura(spot, toStore); chunk.drainAura(spot, toStore);
this.container.storeAura(toStore, false); this.container.storeAura(toStore, false);
// TODO particles if (this.world.getGameTime() % 3 == 0)
/*if (this.world.getGameTime() % 3 == 0)
PacketHandler.sendToAllAround(this.world, this.pos, 32, new PacketParticleStream( PacketHandler.sendToAllAround(this.world, this.pos, 32, new PacketParticleStream(
this.pos.getX() + (float) rand.nextGaussian() * 10F, this.pos.getX() + (float) rand.nextGaussian() * 10F,
this.pos.getY() + rand.nextFloat() * 10F, this.pos.getY() + rand.nextFloat() * 10F,
this.pos.getZ() + (float) rand.nextGaussian() * 10F, this.pos.getZ() + (float) rand.nextGaussian() * 10F,
this.pos.getX() + 0.5F, this.pos.getY() + 0.5F, this.pos.getZ() + 0.5F, this.pos.getX() + 0.5F, this.pos.getY() + 0.5F, this.pos.getZ() + 0.5F,
rand.nextFloat() * 0.1F + 0.1F, 0x89cc37, rand.nextFloat() * 1F + 1F rand.nextFloat() * 0.1F + 0.1F, 0x89cc37, rand.nextFloat() * 1F + 1F
));*/ ));
} }
} }
@ -121,10 +123,8 @@ public class TileEntityNatureAltar extends TileEntityImpl implements ITickableTi
if (stored > 0) { if (stored > 0) {
this.container.drainAura(stored, false); this.container.drainAura(stored, false);
// TODO particles if (this.world.getGameTime() % 4 == 0)
/*if (this.world.getGameTime() % 4 == 0)
PacketHandler.sendToAllAround(this.world, this.pos, 32, new PacketParticles(this.pos.getX(), this.pos.getY(), this.pos.getZ(), 4)); PacketHandler.sendToAllAround(this.world, this.pos, 32, new PacketParticles(this.pos.getX(), this.pos.getY(), this.pos.getZ(), 4));
*/
} }
} }
} else { } else {
@ -141,10 +141,8 @@ public class TileEntityNatureAltar extends TileEntityImpl implements ITickableTi
if (this.container.getStoredAura() >= req) { if (this.container.getStoredAura() >= req) {
this.container.drainAura(req, false); this.container.drainAura(req, false);
// TODO particles if (this.timer % 4 == 0)
/*if (this.timer % 4 == 0)
PacketHandler.sendToAllAround(this.world, this.pos, 32, new PacketParticles(this.pos.getX(), this.pos.getY(), this.pos.getZ(), 4)); PacketHandler.sendToAllAround(this.world, this.pos, 32, new PacketParticles(this.pos.getX(), this.pos.getY(), this.pos.getZ(), 4));
*/
this.timer++; this.timer++;
if (this.timer >= this.currentRecipe.time) { if (this.timer >= this.currentRecipe.time) {

View file

@ -1,6 +1,8 @@
package de.ellpeck.naturesaura.blocks.tiles; package de.ellpeck.naturesaura.blocks.tiles;
import de.ellpeck.naturesaura.api.aura.chunk.IAuraChunk; import de.ellpeck.naturesaura.api.aura.chunk.IAuraChunk;
import de.ellpeck.naturesaura.packet.PacketHandler;
import de.ellpeck.naturesaura.packet.PacketParticles;
import net.minecraft.block.LogBlock; import net.minecraft.block.LogBlock;
import net.minecraft.tileentity.ITickableTileEntity; import net.minecraft.tileentity.ITickableTileEntity;
import net.minecraft.tileentity.TileEntityType; import net.minecraft.tileentity.TileEntityType;
@ -31,10 +33,9 @@ public class TileEntityOakGenerator extends TileEntityImpl implements ITickableT
toAdd -= IAuraChunk.getAuraChunk(this.world, spot).storeAura(spot, toAdd); toAdd -= IAuraChunk.getAuraChunk(this.world, spot).storeAura(spot, toAdd);
} }
// TODO particles PacketHandler.sendToAllAround(this.world, this.pos, 32, new PacketParticles(
/* PacketHandler.sendToAllAround(this.world, this.pos, 32, new PacketParticles(
this.pos.getX(), this.pos.getY(), this.pos.getZ(), 12, this.pos.getX(), this.pos.getY(), this.pos.getZ(), 12,
pos.getX(), pos.getY(), pos.getZ(), canGen ? 1 : 0));*/ pos.getX(), pos.getY(), pos.getZ(), canGen ? 1 : 0));
} }
} }
} }

View file

@ -4,6 +4,8 @@ import de.ellpeck.naturesaura.Helper;
import de.ellpeck.naturesaura.api.NaturesAuraAPI; import de.ellpeck.naturesaura.api.NaturesAuraAPI;
import de.ellpeck.naturesaura.api.recipes.OfferingRecipe; import de.ellpeck.naturesaura.api.recipes.OfferingRecipe;
import de.ellpeck.naturesaura.blocks.multi.Multiblocks; import de.ellpeck.naturesaura.blocks.multi.Multiblocks;
import de.ellpeck.naturesaura.packet.PacketHandler;
import de.ellpeck.naturesaura.packet.PacketParticles;
import net.minecraft.entity.item.ItemEntity; import net.minecraft.entity.item.ItemEntity;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.nbt.CompoundNBT; import net.minecraft.nbt.CompoundNBT;
@ -74,10 +76,9 @@ public class TileEntityOfferingTable extends TileEntityImpl implements ITickable
// TODO weather effects // TODO weather effects
//this.world.addWeatherEffect(new LightningBoltEntity(this.world, this.pos.getX(), this.pos.getY(), this.pos.getZ(), true)); //this.world.addWeatherEffect(new LightningBoltEntity(this.world, this.pos.getX(), this.pos.getY(), this.pos.getZ(), true));
// TODO particles PacketHandler.sendToAllAround(this.world, this.pos, 32, new PacketParticles(
/* PacketHandler.sendToAllAround(this.world, this.pos, 32, new PacketParticles(
(float) item.posX, (float) item.posY, (float) item.posZ, 13, (float) item.posX, (float) item.posY, (float) item.posZ, 13,
this.pos.getX(), this.pos.getY(), this.pos.getZ()));*/ this.pos.getX(), this.pos.getY(), this.pos.getZ()));
break; break;
} }

View file

@ -3,6 +3,8 @@ package de.ellpeck.naturesaura.blocks.tiles;
import de.ellpeck.naturesaura.Helper; import de.ellpeck.naturesaura.Helper;
import de.ellpeck.naturesaura.api.aura.chunk.IAuraChunk; import de.ellpeck.naturesaura.api.aura.chunk.IAuraChunk;
import de.ellpeck.naturesaura.items.ModItems; import de.ellpeck.naturesaura.items.ModItems;
import de.ellpeck.naturesaura.packet.PacketHandler;
import de.ellpeck.naturesaura.packet.PacketParticles;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks; import net.minecraft.block.Blocks;
import net.minecraft.entity.item.ItemFrameEntity; import net.minecraft.entity.item.ItemFrameEntity;
@ -74,8 +76,7 @@ public class TileEntityPlacer extends TileEntityImpl implements ITickableTileEnt
BlockPos spot = IAuraChunk.getHighestSpot(this.world, this.pos, 10, this.pos); BlockPos spot = IAuraChunk.getHighestSpot(this.world, this.pos, 10, this.pos);
IAuraChunk.getAuraChunk(this.world, spot).drainAura(spot, 1000); IAuraChunk.getAuraChunk(this.world, spot).drainAura(spot, 1000);
// TODO particles PacketHandler.sendToAllAround(this.world, this.pos, 32, new PacketParticles(pos.getX(), pos.getY(), pos.getZ(), 9));
// PacketHandler.sendToAllAround(this.world, this.pos, 32, new PacketParticles(pos.getX(), pos.getY(), pos.getZ(), 9));
return; return;
} }

View file

@ -2,10 +2,13 @@ package de.ellpeck.naturesaura.blocks.tiles;
import de.ellpeck.naturesaura.api.aura.chunk.IAuraChunk; import de.ellpeck.naturesaura.api.aura.chunk.IAuraChunk;
import de.ellpeck.naturesaura.blocks.multi.Multiblocks; import de.ellpeck.naturesaura.blocks.multi.Multiblocks;
import de.ellpeck.naturesaura.packet.PacketHandler;
import de.ellpeck.naturesaura.packet.PacketParticles;
import net.minecraft.entity.AreaEffectCloudEntity; import net.minecraft.entity.AreaEffectCloudEntity;
import net.minecraft.potion.Effect; import net.minecraft.potion.Effect;
import net.minecraft.potion.EffectInstance; import net.minecraft.potion.EffectInstance;
import net.minecraft.potion.Potion; import net.minecraft.potion.Potion;
import net.minecraft.potion.PotionUtils;
import net.minecraft.tileentity.ITickableTileEntity; import net.minecraft.tileentity.ITickableTileEntity;
import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
@ -49,10 +52,9 @@ public class TileEntityPotionGenerator extends TileEntityImpl implements ITickab
toAdd -= IAuraChunk.getAuraChunk(this.world, spot).storeAura(spot, toAdd); toAdd -= IAuraChunk.getAuraChunk(this.world, spot).storeAura(spot, toAdd);
} }
// TODO particles PacketHandler.sendToAllAround(this.world, this.pos, 32, new PacketParticles(
/* PacketHandler.sendToAllAround(this.world, this.pos, 32, new PacketParticles(
this.pos.getX(), this.pos.getY(), this.pos.getZ(), 5, this.pos.getX(), this.pos.getY(), this.pos.getZ(), 5,
PotionUtils.getPotionColor(type), canGen ? 1 : 0));*/ PotionUtils.getPotionColor(type), canGen ? 1 : 0));
addedOne = true; addedOne = true;
break; break;

View file

@ -3,6 +3,8 @@ package de.ellpeck.naturesaura.blocks.tiles;
import de.ellpeck.naturesaura.ModConfig; import de.ellpeck.naturesaura.ModConfig;
import de.ellpeck.naturesaura.api.aura.chunk.IAuraChunk; import de.ellpeck.naturesaura.api.aura.chunk.IAuraChunk;
import de.ellpeck.naturesaura.blocks.multi.Multiblocks; import de.ellpeck.naturesaura.blocks.multi.Multiblocks;
import de.ellpeck.naturesaura.packet.PacketHandler;
import de.ellpeck.naturesaura.packet.PacketParticles;
import net.minecraft.nbt.CompoundNBT; import net.minecraft.nbt.CompoundNBT;
import net.minecraft.tileentity.ITickableTileEntity; import net.minecraft.tileentity.ITickableTileEntity;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
@ -82,9 +84,8 @@ public class TileEntityRFConverter extends TileEntityImpl implements ITickableTi
BlockPos pos = IAuraChunk.getHighestSpot(this.world, this.pos, 45, this.pos); BlockPos pos = IAuraChunk.getHighestSpot(this.world, this.pos, 45, this.pos);
IAuraChunk.getAuraChunk(this.world, pos).drainAura(pos, amountToUse); IAuraChunk.getAuraChunk(this.world, pos).drainAura(pos, amountToUse);
// TODO particles PacketHandler.sendToAllAround(this.world, this.pos, 32,
/*PacketHandler.sendToAllAround(this.world, this.pos, 32, new PacketParticles(this.pos.getX(), this.pos.getY(), this.pos.getZ(), 20));
new PacketParticles(this.pos.getX(), this.pos.getY(), this.pos.getZ(), 20));*/
} }
} }

View file

@ -40,7 +40,7 @@ public class TileEntityTimeChanger extends TileEntityImpl implements ITickableTi
continue; continue;
if (this.goalTime > 0) { if (this.goalTime > 0) {
long current = this.world.getGameTime(); long current = this.world.getDayTime();
long toAdd = Math.min(75, this.goalTime - current); long toAdd = Math.min(75, this.goalTime - current);
if (toAdd <= 0) { if (toAdd <= 0) {
this.goalTime = 0; this.goalTime = 0;
@ -93,7 +93,7 @@ public class TileEntityTimeChanger extends TileEntityImpl implements ITickableTi
this.sendToClients(); this.sendToClients();
} }
} else if (this.goalTime > 0 && this.world.rand.nextFloat() >= 0.25F) { } else if (this.goalTime > 0 && this.world.rand.nextFloat() >= 0.25F) {
double angle = Math.toRadians(this.world.getGameTime() * 5F % 360); double angle = Math.toRadians(this.world.getDayTime() * 5F % 360);
double x = this.pos.getX() + 0.5 + Math.sin(angle) * 3F; double x = this.pos.getX() + 0.5 + Math.sin(angle) * 3F;
double z = this.pos.getZ() + 0.5 + Math.cos(angle) * 3F; double z = this.pos.getZ() + 0.5 + Math.cos(angle) * 3F;
int color = this.goalTime % 24000 > 12000 ? 0xe2e2e2 : 0xffe926; int color = this.goalTime % 24000 > 12000 ? 0xe2e2e2 : 0xffe926;

View file

@ -3,6 +3,9 @@ package de.ellpeck.naturesaura.blocks.tiles;
import de.ellpeck.naturesaura.api.NaturesAuraAPI; import de.ellpeck.naturesaura.api.NaturesAuraAPI;
import de.ellpeck.naturesaura.api.recipes.TreeRitualRecipe; import de.ellpeck.naturesaura.api.recipes.TreeRitualRecipe;
import de.ellpeck.naturesaura.blocks.multi.Multiblocks; import de.ellpeck.naturesaura.blocks.multi.Multiblocks;
import de.ellpeck.naturesaura.packet.PacketHandler;
import de.ellpeck.naturesaura.packet.PacketParticleStream;
import de.ellpeck.naturesaura.packet.PacketParticles;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks; import net.minecraft.block.Blocks;
import net.minecraft.block.LeavesBlock; import net.minecraft.block.LeavesBlock;
@ -61,20 +64,19 @@ public class TileEntityWoodStand extends TileEntityImpl implements ITickableTile
Multiblocks.TREE_RITUAL.forEach(this.ritualPos, 'W', (pos, matcher) -> { Multiblocks.TREE_RITUAL.forEach(this.ritualPos, 'W', (pos, matcher) -> {
TileEntity tile = this.world.getTileEntity(pos); TileEntity tile = this.world.getTileEntity(pos);
if (tile instanceof TileEntityWoodStand && !((TileEntityWoodStand) tile).items.getStackInSlot(0).isEmpty()) { if (tile instanceof TileEntityWoodStand && !((TileEntityWoodStand) tile).items.getStackInSlot(0).isEmpty()) {
// TODO particles PacketHandler.sendToAllAround(this.world, this.pos, 32, new PacketParticleStream(
/* PacketHandler.sendToAllAround(this.world, this.pos, 32, new PacketParticleStream(
(float) pos.getX() + 0.2F + this.world.rand.nextFloat() * 0.6F, (float) pos.getX() + 0.2F + this.world.rand.nextFloat() * 0.6F,
(float) pos.getY() + 0.85F, (float) pos.getY() + 0.85F,
(float) pos.getZ() + 0.2F + this.world.rand.nextFloat() * 0.6F, (float) pos.getZ() + 0.2F + this.world.rand.nextFloat() * 0.6F,
this.ritualPos.getX() + 0.5F, this.ritualPos.getY() + this.world.rand.nextFloat() * 3F + 2F, this.ritualPos.getZ() + 0.5F, this.ritualPos.getX() + 0.5F, this.ritualPos.getY() + this.world.rand.nextFloat() * 3F + 2F, this.ritualPos.getZ() + 0.5F,
this.world.rand.nextFloat() * 0.04F + 0.04F, 0x89cc37, this.world.rand.nextFloat() * 1F + 1F this.world.rand.nextFloat() * 0.04F + 0.04F, 0x89cc37, this.world.rand.nextFloat() * 1F + 1F
));*/ ));
} }
return true; return true;
}); });
/* PacketHandler.sendToAllAround(this.world, this.ritualPos, 32, PacketHandler.sendToAllAround(this.world, this.ritualPos, 32,
new PacketParticles(this.ritualPos.getX(), this.ritualPos.getY(), this.ritualPos.getZ(), 0));*/ new PacketParticles(this.ritualPos.getX(), this.ritualPos.getY(), this.ritualPos.getZ(), 0));
if (this.timer >= this.recipe.time) { if (this.timer >= this.recipe.time) {
this.recurseTreeDestruction(this.ritualPos, this.ritualPos); this.recurseTreeDestruction(this.ritualPos, this.ritualPos);
@ -88,8 +90,8 @@ public class TileEntityWoodStand extends TileEntityImpl implements ITickableTile
this.recipe.result.copy()); this.recipe.result.copy());
this.world.addEntity(item); this.world.addEntity(item);
/*PacketHandler.sendToAllAround(this.world, this.pos, 32, PacketHandler.sendToAllAround(this.world, this.pos, 32,
new PacketParticles((float) item.posX, (float) item.posY, (float) item.posZ, 3));*/ new PacketParticles((float) item.posX, (float) item.posY, (float) item.posZ, 3));
this.world.playSound(null, this.pos.getX() + 0.5, this.pos.getY() + 0.5, this.pos.getZ() + 0.5, this.world.playSound(null, this.pos.getX() + 0.5, this.pos.getY() + 0.5, this.pos.getZ() + 0.5,
SoundEvents.ENTITY_ENDERMAN_TELEPORT, SoundCategory.BLOCKS, 0.65F, 1F); SoundEvents.ENTITY_ENDERMAN_TELEPORT, SoundCategory.BLOCKS, 0.65F, 1F);
@ -102,8 +104,8 @@ public class TileEntityWoodStand extends TileEntityImpl implements ITickableTile
if (tile instanceof TileEntityWoodStand) { if (tile instanceof TileEntityWoodStand) {
TileEntityWoodStand stand = (TileEntityWoodStand) tile; TileEntityWoodStand stand = (TileEntityWoodStand) tile;
if (!stand.items.getStackInSlot(0).isEmpty()) { if (!stand.items.getStackInSlot(0).isEmpty()) {
/* PacketHandler.sendToAllAround(this.world, this.pos, 32, PacketHandler.sendToAllAround(this.world, this.pos, 32,
new PacketParticles(stand.pos.getX(), stand.pos.getY(), stand.pos.getZ(), 1));*/ new PacketParticles(stand.pos.getX(), stand.pos.getY(), stand.pos.getZ(), 1));
this.world.playSound(null, stand.pos.getX() + 0.5, stand.pos.getY() + 0.5, stand.pos.getZ() + 0.5, this.world.playSound(null, stand.pos.getX() + 0.5, stand.pos.getY() + 0.5, stand.pos.getZ() + 0.5,
SoundEvents.BLOCK_WOOD_STEP, SoundCategory.BLOCKS, 0.5F, 1F); SoundEvents.BLOCK_WOOD_STEP, SoundCategory.BLOCKS, 0.5F, 1F);
@ -139,7 +141,7 @@ public class TileEntityWoodStand extends TileEntityImpl implements ITickableTile
BlockState state = this.world.getBlockState(offset); BlockState state = this.world.getBlockState(offset);
if (state.getBlock() instanceof LogBlock || state.getBlock() instanceof LeavesBlock) { if (state.getBlock() instanceof LogBlock || state.getBlock() instanceof LeavesBlock) {
this.world.setBlockState(offset, Blocks.AIR.getDefaultState()); this.world.setBlockState(offset, Blocks.AIR.getDefaultState());
//PacketHandler.sendToAllAround(this.world, this.pos, 32, new PacketParticles(offset.getX(), offset.getY(), offset.getZ(), 2)); PacketHandler.sendToAllAround(this.world, this.pos, 32, new PacketParticles(offset.getX(), offset.getY(), offset.getZ(), 2));
this.recurseTreeDestruction(offset, start); this.recurseTreeDestruction(offset, start);
} }

View file

@ -4,6 +4,8 @@ import de.ellpeck.naturesaura.api.NaturesAuraAPI;
import de.ellpeck.naturesaura.api.aura.chunk.IAuraChunk; import de.ellpeck.naturesaura.api.aura.chunk.IAuraChunk;
import de.ellpeck.naturesaura.api.aura.chunk.IDrainSpotEffect; import de.ellpeck.naturesaura.api.aura.chunk.IDrainSpotEffect;
import de.ellpeck.naturesaura.api.aura.type.IAuraType; import de.ellpeck.naturesaura.api.aura.type.IAuraType;
import de.ellpeck.naturesaura.packet.PacketAuraChunk;
import de.ellpeck.naturesaura.packet.PacketHandler;
import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.nbt.CompoundNBT; import net.minecraft.nbt.CompoundNBT;
@ -12,6 +14,7 @@ import net.minecraft.nbt.ListNBT;
import net.minecraft.util.ResourceLocation; import net.minecraft.util.ResourceLocation;
import net.minecraft.util.Tuple; import net.minecraft.util.Tuple;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.ChunkPos;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraft.world.chunk.Chunk; import net.minecraft.world.chunk.Chunk;
import org.apache.commons.lang3.mutable.MutableInt; import org.apache.commons.lang3.mutable.MutableInt;
@ -113,8 +116,9 @@ public class AuraChunk implements IAuraChunk {
private void addDrainSpot(BlockPos pos, MutableInt spot) { private void addDrainSpot(BlockPos pos, MutableInt spot) {
int expX = pos.getX() >> 4; int expX = pos.getX() >> 4;
int expZ = pos.getZ() >> 4; int expZ = pos.getZ() >> 4;
if (expX != this.chunk.getPos().x || expZ != this.chunk.getPos().z) ChunkPos myPos = this.chunk.getPos();
throw new IllegalArgumentException("Tried to add drain spot " + pos + " to chunk at " + this.chunk.getPos().x + ", " + this.chunk.getPos().z + " when it should've been added to chunk at " + expX + ", " + expZ); if (expX != myPos.x || expZ != myPos.z)
throw new IllegalArgumentException("Tried to add drain spot " + pos + " to chunk at " + myPos.x + ", " + myPos.z + " when it should've been added to chunk at " + expX + ", " + expZ);
this.drainSpots.put(pos, spot); this.drainSpots.put(pos, spot);
} }
@ -147,19 +151,18 @@ public class AuraChunk implements IAuraChunk {
} }
if (this.needsSync) { if (this.needsSync) {
// TODO packets ChunkPos pos = this.chunk.getPos();
/*PacketHandler.sendToAllLoaded(world, PacketHandler.sendToAllLoaded(world,
new BlockPos(this.chunk.x * 16, 0, this.chunk.z * 16), new BlockPos(pos.x * 16, 0, pos.z * 16),
this.makePacket());*/ this.makePacket());
this.needsSync = false; this.needsSync = false;
} }
} }
/* public PacketAuraChunk makePacket() {
public IMessage makePacket() { ChunkPos pos = this.chunk.getPos();
return new PacketAuraChunk(this.chunk.x, this.chunk.z, this.drainSpots); return new PacketAuraChunk(pos.x, pos.z, this.drainSpots);
} }
*/
public void getSpotsInArea(BlockPos pos, int radius, BiConsumer<BlockPos, Integer> consumer) { public void getSpotsInArea(BlockPos pos, int radius, BiConsumer<BlockPos, Integer> consumer) {
for (Map.Entry<BlockPos, MutableInt> entry : this.drainSpots.entrySet()) { for (Map.Entry<BlockPos, MutableInt> entry : this.drainSpots.entrySet()) {

View file

@ -6,6 +6,8 @@ import de.ellpeck.naturesaura.api.NaturesAuraAPI;
import de.ellpeck.naturesaura.api.aura.chunk.IAuraChunk; import de.ellpeck.naturesaura.api.aura.chunk.IAuraChunk;
import de.ellpeck.naturesaura.api.aura.chunk.IDrainSpotEffect; import de.ellpeck.naturesaura.api.aura.chunk.IDrainSpotEffect;
import de.ellpeck.naturesaura.api.aura.type.IAuraType; import de.ellpeck.naturesaura.api.aura.type.IAuraType;
import de.ellpeck.naturesaura.packet.PacketHandler;
import de.ellpeck.naturesaura.packet.PacketParticles;
import net.minecraft.block.*; import net.minecraft.block.*;
import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
@ -75,9 +77,8 @@ public class PlantBoostEffect implements IDrainSpotEffect {
BlockPos closestSpot = IAuraChunk.getHighestSpot(world, plantPos, 25, pos); BlockPos closestSpot = IAuraChunk.getHighestSpot(world, plantPos, 25, pos);
IAuraChunk.getAuraChunk(world, closestSpot).drainAura(closestSpot, 3500); IAuraChunk.getAuraChunk(world, closestSpot).drainAura(closestSpot, 3500);
// TODO particles PacketHandler.sendToAllAround(world, plantPos, 32,
/* PacketHandler.sendToAllAround(world, plantPos, 32, new PacketParticles(plantPos.getX(), plantPos.getY(), plantPos.getZ(), 6));
new PacketParticles(plantPos.getX(), plantPos.getY(), plantPos.getZ(), 6));*/
} }
} }
} }

View file

@ -2,6 +2,8 @@ package de.ellpeck.naturesaura.entities;
import de.ellpeck.naturesaura.api.aura.chunk.IAuraChunk; import de.ellpeck.naturesaura.api.aura.chunk.IAuraChunk;
import de.ellpeck.naturesaura.items.ModItems; import de.ellpeck.naturesaura.items.ModItems;
import de.ellpeck.naturesaura.packet.PacketHandler;
import de.ellpeck.naturesaura.packet.PacketParticles;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks; import net.minecraft.block.Blocks;
import net.minecraft.entity.Entity; import net.minecraft.entity.Entity;
@ -48,13 +50,12 @@ public class EntityMoverMinecart extends AbstractMinecartEntity {
BlockPos pos = this.getPosition(); BlockPos pos = this.getPosition();
if (!this.spotOffsets.isEmpty() && this.world.getGameTime() % 10 == 0) if (!this.spotOffsets.isEmpty() && this.world.getGameTime() % 10 == 0)
// TODO particles PacketHandler.sendToAllAround(this.world, pos, 32, new PacketParticles(
/*PacketHandler.sendToAllAround(this.world, pos, 32, new PacketParticles(
(float) this.posX, (float) this.posY, (float) this.posZ, 22, (float) this.posX, (float) this.posY, (float) this.posZ, 22,
MathHelper.floor(this.motionX * 100F), MathHelper.floor(this.motionY * 100F), MathHelper.floor(this.motionZ * 100F)));*/ MathHelper.floor(this.getMotion().getX() * 100F), MathHelper.floor(this.getMotion().getY() * 100F), MathHelper.floor(this.getMotion().getZ() * 100F)));
if (pos.distanceSq(this.lastPosition) < 8 * 8) if (pos.distanceSq(this.lastPosition) < 8 * 8)
return; return;
this.moveAura(this.world, this.lastPosition, this.world, pos); this.moveAura(this.world, this.lastPosition, this.world, pos);
this.lastPosition = pos; this.lastPosition = pos;

View file

@ -16,6 +16,7 @@ import de.ellpeck.naturesaura.compat.Compat;
import de.ellpeck.naturesaura.items.AuraCache; import de.ellpeck.naturesaura.items.AuraCache;
import de.ellpeck.naturesaura.items.ModItems; import de.ellpeck.naturesaura.items.ModItems;
import de.ellpeck.naturesaura.items.RangeVisualizer; import de.ellpeck.naturesaura.items.RangeVisualizer;
import de.ellpeck.naturesaura.packet.PacketAuraChunk;
import de.ellpeck.naturesaura.particles.ParticleHandler; import de.ellpeck.naturesaura.particles.ParticleHandler;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
@ -54,6 +55,7 @@ import org.apache.commons.lang3.mutable.MutableInt;
import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL11;
import java.text.NumberFormat; import java.text.NumberFormat;
import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -65,9 +67,12 @@ public class ClientEvents {
public static final ResourceLocation BOOK_GUI = new ResourceLocation(NaturesAura.MOD_ID, "textures/gui/book.png"); public static final ResourceLocation BOOK_GUI = new ResourceLocation(NaturesAura.MOD_ID, "textures/gui/book.png");
private static final ItemStack ITEM_FRAME = new ItemStack(Items.ITEM_FRAME); private static final ItemStack ITEM_FRAME = new ItemStack(Items.ITEM_FRAME);
private static final Map<ResourceLocation, Tuple<ItemStack, Boolean>> SHOWING_EFFECTS = new HashMap<>(); private static final Map<ResourceLocation, Tuple<ItemStack, Boolean>> SHOWING_EFFECTS = new HashMap<>();
public static final List<PacketAuraChunk> PENDING_AURA_CHUNKS = new ArrayList<>();
private static ItemStack heldCache = ItemStack.EMPTY; private static ItemStack heldCache = ItemStack.EMPTY;
private static ItemStack heldEye = ItemStack.EMPTY; private static ItemStack heldEye = ItemStack.EMPTY;
private static ItemStack heldOcular = ItemStack.EMPTY; private static ItemStack heldOcular = ItemStack.EMPTY;
private float height;
private float previousHeight;
@SubscribeEvent @SubscribeEvent
public void onDebugRender(RenderGameOverlayEvent.Text event) { public void onDebugRender(RenderGameOverlayEvent.Text event) {
@ -97,13 +102,12 @@ public class ClientEvents {
@SubscribeEvent @SubscribeEvent
public void onRenderLast(RenderWorldLastEvent event) { public void onRenderLast(RenderWorldLastEvent event) {
Minecraft mc = Minecraft.getInstance();
ParticleHandler.renderParticles(event.getPartialTicks()); ParticleHandler.renderParticles(event.getPartialTicks());
} }
@SubscribeEvent @SubscribeEvent
public void onClientTick(TickEvent.ClientTickEvent event) { public void onClientTick(TickEvent.ClientTickEvent event) {
if (event.phase == TickEvent.Phase.END) { if (event.phase != TickEvent.Phase.END) {
heldCache = ItemStack.EMPTY; heldCache = ItemStack.EMPTY;
heldEye = ItemStack.EMPTY; heldEye = ItemStack.EMPTY;
heldOcular = ItemStack.EMPTY; heldOcular = ItemStack.EMPTY;
@ -112,55 +116,64 @@ public class ClientEvents {
if (mc.world == null) { if (mc.world == null) {
ParticleHandler.clearParticles(); ParticleHandler.clearParticles();
RangeVisualizer.clear(); RangeVisualizer.clear();
} else if (!mc.isGamePaused()) { PENDING_AURA_CHUNKS.clear();
if (mc.world.getGameTime() % 20 == 0) { } else {
int amount = MathHelper.floor(190 * ModConfig.client.excessParticleAmount); PENDING_AURA_CHUNKS.removeIf(next -> next.tryHandle(mc.world));
for (int i = 0; i < amount; i++) {
int x = MathHelper.floor(mc.player.posX) + mc.world.rand.nextInt(64) - 32; if (mc.player != null) {
int z = MathHelper.floor(mc.player.posZ) + mc.world.rand.nextInt(64) - 32; this.previousHeight = this.height;
BlockPos pos = new BlockPos(x, mc.world.getHeight(Heightmap.Type.WORLD_SURFACE, x, z) - 1, z); this.height += (mc.player.getEyeHeight() - this.height) * 0.5F;
BlockState state = mc.world.getBlockState(pos); }
Block block = state.getBlock();
if (block instanceof IGrowable || block instanceof IPlantable || block instanceof LeavesBlock) { if (!mc.isGamePaused()) {
int excess = IAuraChunk.triangulateAuraInArea(mc.world, pos, 45) - IAuraChunk.DEFAULT_AURA; if (mc.world.getGameTime() % 20 == 0) {
if (excess > 0) { int amount = MathHelper.floor(190 * ModConfig.client.excessParticleAmount);
int chance = Math.max(10, 50 - excess / 25000); for (int i = 0; i < amount; i++) {
if (mc.world.rand.nextInt(chance) <= 0) int x = MathHelper.floor(mc.player.posX) + mc.world.rand.nextInt(64) - 32;
NaturesAuraAPI.instance().spawnMagicParticle( int z = MathHelper.floor(mc.player.posZ) + mc.world.rand.nextInt(64) - 32;
pos.getX() + mc.world.rand.nextFloat(), BlockPos pos = new BlockPos(x, mc.world.getHeight(Heightmap.Type.WORLD_SURFACE, x, z) - 1, z);
pos.getY() + 0.5F, BlockState state = mc.world.getBlockState(pos);
pos.getZ() + mc.world.rand.nextFloat(), Block block = state.getBlock();
mc.world.rand.nextGaussian() * 0.01F, if (block instanceof IGrowable || block instanceof IPlantable || block instanceof LeavesBlock) {
mc.world.rand.nextFloat() * 0.025F, int excess = IAuraChunk.triangulateAuraInArea(mc.world, pos, 45) - IAuraChunk.DEFAULT_AURA;
mc.world.rand.nextGaussian() * 0.01F, if (excess > 0) {
BiomeColors.getFoliageColor(mc.world, pos), int chance = Math.max(10, 50 - excess / 25000);
Math.min(2F, 1F + mc.world.rand.nextFloat() * (excess / 30000F)), if (mc.world.rand.nextInt(chance) <= 0)
Math.min(300, 100 + mc.world.rand.nextInt(excess / 3000 + 1)), NaturesAuraAPI.instance().spawnMagicParticle(
0F, false, true); pos.getX() + mc.world.rand.nextFloat(),
pos.getY() + 0.5F,
pos.getZ() + mc.world.rand.nextFloat(),
mc.world.rand.nextGaussian() * 0.01F,
mc.world.rand.nextFloat() * 0.025F,
mc.world.rand.nextGaussian() * 0.01F,
BiomeColors.getFoliageColor(mc.world, pos),
Math.min(2F, 1F + mc.world.rand.nextFloat() * (excess / 30000F)),
Math.min(300, 100 + mc.world.rand.nextInt(excess / 3000 + 1)),
0F, false, true);
}
} }
} }
} }
}
if (Helper.isHoldingItem(mc.player, ModItems.RANGE_VISUALIZER) && mc.world.getGameTime() % 5 == 0) { if (Helper.isHoldingItem(mc.player, ModItems.RANGE_VISUALIZER) && mc.world.getGameTime() % 5 == 0) {
NaturesAuraAPI.IInternalHooks inst = NaturesAuraAPI.instance(); NaturesAuraAPI.IInternalHooks inst = NaturesAuraAPI.instance();
inst.setParticleSpawnRange(512); inst.setParticleSpawnRange(512);
inst.setParticleDepth(false); inst.setParticleDepth(false);
for (BlockPos pos : RangeVisualizer.VISUALIZED_RAILS.get(mc.world.getDimension().getType())) { for (BlockPos pos : RangeVisualizer.VISUALIZED_RAILS.get(mc.world.getDimension().getType())) {
NaturesAuraAPI.instance().spawnMagicParticle( NaturesAuraAPI.instance().spawnMagicParticle(
pos.getX() + mc.world.rand.nextFloat(), pos.getX() + mc.world.rand.nextFloat(),
pos.getY() + mc.world.rand.nextFloat(), pos.getY() + mc.world.rand.nextFloat(),
pos.getZ() + mc.world.rand.nextFloat(), pos.getZ() + mc.world.rand.nextFloat(),
0F, 0F, 0F, 0xe0faff, mc.world.rand.nextFloat() * 5 + 1, 100, 0F, false, true); 0F, 0F, 0F, 0xe0faff, mc.world.rand.nextFloat() * 5 + 1, 100, 0F, false, true);
}
inst.setParticleDepth(true);
inst.setParticleSpawnRange(32);
} }
inst.setParticleDepth(true);
inst.setParticleSpawnRange(32);
}
ParticleHandler.updateParticles(); ParticleHandler.updateParticles();
if (Compat.baubles) { if (Compat.baubles) {
// TODO baubles // TODO baubles
/*IItemHandler baubles = BaublesApi.getBaublesHandler(mc.player); /*IItemHandler baubles = BaublesApi.getBaublesHandler(mc.player);
for (int i = 0; i < baubles.getSlots(); i++) { for (int i = 0; i < baubles.getSlots(); i++) {
ItemStack slot = baubles.getStackInSlot(i); ItemStack slot = baubles.getStackInSlot(i);
@ -173,24 +186,25 @@ public class ClientEvents {
heldOcular = slot; heldOcular = slot;
} }
}*/ }*/
}
for (int i = 0; i < mc.player.inventory.getSizeInventory(); i++) {
ItemStack slot = mc.player.inventory.getStackInSlot(i);
if (!slot.isEmpty()) {
if (slot.getItem() instanceof AuraCache)
heldCache = slot;
else if (slot.getItem() == ModItems.EYE && i <= 8)
heldEye = slot;
else if (slot.getItem() == ModItems.EYE_IMPROVED)
heldOcular = slot;
} }
}
if (!heldOcular.isEmpty() && mc.world.getGameTime() % 20 == 0) { for (int i = 0; i < mc.player.inventory.getSizeInventory(); i++) {
SHOWING_EFFECTS.clear(); ItemStack slot = mc.player.inventory.getStackInSlot(i);
Helper.getAuraChunksInArea(mc.world, mc.player.getPosition(), 100, if (!slot.isEmpty()) {
chunk -> chunk.getActiveEffectIcons(mc.player, SHOWING_EFFECTS)); if (slot.getItem() instanceof AuraCache)
heldCache = slot;
else if (slot.getItem() == ModItems.EYE && i <= 8)
heldEye = slot;
else if (slot.getItem() == ModItems.EYE_IMPROVED)
heldOcular = slot;
}
}
if (!heldOcular.isEmpty() && mc.world.getGameTime() % 20 == 0) {
SHOWING_EFFECTS.clear();
Helper.getAuraChunksInArea(mc.world, mc.player.getPosition(), 100,
chunk -> chunk.getActiveEffectIcons(mc.player, SHOWING_EFFECTS));
}
} }
} }
} }
@ -203,7 +217,7 @@ public class ClientEvents {
float partial = event.getPartialTicks(); float partial = event.getPartialTicks();
GL11.glTranslated( GL11.glTranslated(
-mc.player.prevPosX - (mc.player.posX - mc.player.prevPosX) * partial, -mc.player.prevPosX - (mc.player.posX - mc.player.prevPosX) * partial,
-mc.player.prevPosY - (mc.player.posY - mc.player.prevPosY) * partial, -mc.player.prevPosY - (mc.player.posY - mc.player.prevPosY) * partial - (double) MathHelper.lerp(partial, this.previousHeight, this.height),
-mc.player.prevPosZ - (mc.player.posZ - mc.player.prevPosZ) * partial); -mc.player.prevPosZ - (mc.player.posZ - mc.player.prevPosZ) * partial);
if (mc.gameSettings.showDebugInfo && mc.player.isCreative() && ModConfig.client.debugWorld) { if (mc.gameSettings.showDebugInfo && mc.player.isCreative() && ModConfig.client.debugWorld) {
@ -271,7 +285,8 @@ public class ClientEvents {
GL11.glPopMatrix(); GL11.glPopMatrix();
} }
private void renderVisualize(IVisualizable visualize, World world, BlockPos pos) { private void renderVisualize(IVisualizable visualize, World
world, BlockPos pos) {
AxisAlignedBB box = visualize.getVisualizationBounds(world, pos); AxisAlignedBB box = visualize.getVisualizationBounds(world, pos);
if (box == null) if (box == null)
return; return;
@ -306,7 +321,7 @@ public class ClientEvents {
float scale = 0.75F; float scale = 0.75F;
GlStateManager.scalef(scale, scale, scale); GlStateManager.scalef(scale, scale, scale);
String s = heldCache.getDisplayName().getFormattedText(); String s = heldCache.getDisplayName().getFormattedText();
mc.fontRenderer.drawString(s, (x + 80) / scale - mc.fontRenderer.getStringWidth(s), (y - 7) / scale, color); mc.fontRenderer.drawStringWithShadow(s, (x + 80) / scale - mc.fontRenderer.getStringWidth(s), (y - 7) / scale, color);
GlStateManager.color3f(1F, 1F, 1F); GlStateManager.color3f(1F, 1F, 1F);
GlStateManager.popMatrix(); GlStateManager.popMatrix();
@ -357,13 +372,13 @@ public class ClientEvents {
int color = heldOcular.isEmpty() ? 0x53a008 : 0xa05308; int color = heldOcular.isEmpty() ? 0x53a008 : 0xa05308;
if (totalPercentage > (heldOcular.isEmpty() ? 1F : 1.5F)) if (totalPercentage > (heldOcular.isEmpty() ? 1F : 1.5F))
mc.fontRenderer.drawString("+", startX + plusOffX, startY - 0.5F, color); mc.fontRenderer.drawStringWithShadow("+", startX + plusOffX, startY - 0.5F, color);
if (totalPercentage < (heldOcular.isEmpty() ? 0F : -0.5F)) if (totalPercentage < (heldOcular.isEmpty() ? 0F : -0.5F))
mc.fontRenderer.drawString("-", startX + plusOffX, startY - 0.5F + (heldOcular.isEmpty() ? 44 : 70), color); mc.fontRenderer.drawStringWithShadow("-", startX + plusOffX, startY - 0.5F + (heldOcular.isEmpty() ? 44 : 70), color);
GlStateManager.pushMatrix(); GlStateManager.pushMatrix();
GlStateManager.scalef(textScale, textScale, textScale); GlStateManager.scalef(textScale, textScale, textScale);
mc.fontRenderer.drawString(text, textX / textScale, textY / textScale, 0x53a008); mc.fontRenderer.drawStringWithShadow(text, textX / textScale, textY / textScale, 0x53a008);
GlStateManager.popMatrix(); GlStateManager.popMatrix();
if (!heldOcular.isEmpty()) { if (!heldOcular.isEmpty()) {
@ -398,7 +413,7 @@ public class ClientEvents {
BlockState state = mc.world.getBlockState(pos); BlockState state = mc.world.getBlockState(pos);
ItemStack blockStack = state.getBlock().getPickBlock(state, mc.objectMouseOver, mc.world, pos, mc.player); ItemStack blockStack = state.getBlock().getPickBlock(state, mc.objectMouseOver, mc.world, pos, mc.player);
this.drawContainerInfo(container.getStoredAura(), container.getMaxAura(), container.getAuraColor(), this.drawContainerInfo(container.getStoredAura(), container.getMaxAura(), container.getAuraColor(),
mc, res, 35, blockStack.getDisplayName().toString(), null); mc, res, 35, blockStack.getDisplayName().getFormattedText(), null);
if (tile instanceof TileEntityNatureAltar) { if (tile instanceof TileEntityNatureAltar) {
ItemStack tileStack = ((TileEntityNatureAltar) tile).getItemHandler(null).getStackInSlot(0); ItemStack tileStack = ((TileEntityNatureAltar) tile).getItemHandler(null).getStackInSlot(0);
@ -406,7 +421,7 @@ public class ClientEvents {
IAuraContainer stackCont = tileStack.getCapability(NaturesAuraAPI.capAuraContainer, null).orElse(null); IAuraContainer stackCont = tileStack.getCapability(NaturesAuraAPI.capAuraContainer, null).orElse(null);
if (stackCont != null) { if (stackCont != null) {
this.drawContainerInfo(stackCont.getStoredAura(), stackCont.getMaxAura(), stackCont.getAuraColor(), this.drawContainerInfo(stackCont.getStoredAura(), stackCont.getMaxAura(), stackCont.getAuraColor(),
mc, res, 55, tileStack.getDisplayName().toString(), null); mc, res, 55, tileStack.getDisplayName().getFormattedText(), null);
} }
} }
} }
@ -422,7 +437,7 @@ public class ClientEvents {
int x = res.getScaledWidth() / 2; int x = res.getScaledWidth() / 2;
int y = res.getScaledHeight() / 2; int y = res.getScaledHeight() / 2;
if (stack.isEmpty()) if (stack.isEmpty())
mc.fontRenderer.drawString( mc.fontRenderer.drawStringWithShadow(
TextFormatting.GRAY.toString() + TextFormatting.ITALIC + I18n.format("info.naturesaura.empty"), TextFormatting.GRAY.toString() + TextFormatting.ITALIC + I18n.format("info.naturesaura.empty"),
x + 5, y - 11, 0xFFFFFF); x + 5, y - 11, 0xFFFFFF);
else else
@ -445,7 +460,9 @@ public class ClientEvents {
} }
} }
private void drawContainerInfo(int stored, int max, int color, Minecraft mc, MainWindow res, int yOffset, String name, String textBelow) { private void drawContainerInfo(int stored, int max,
int color, Minecraft mc, MainWindow res, int yOffset, String name, String
textBelow) {
GlStateManager.color3f((color >> 16 & 255) / 255F, (color >> 8 & 255) / 255F, (color & 255) / 255F); GlStateManager.color3f((color >> 16 & 255) / 255F, (color >> 8 & 255) / 255F, (color & 255) / 255F);
int x = res.getScaledWidth() / 2 - 40; int x = res.getScaledWidth() / 2 - 40;
@ -458,9 +475,9 @@ public class ClientEvents {
if (width > 0) if (width > 0)
AbstractGui.blit(x, y, 0, 6, width, 6, 256, 256); AbstractGui.blit(x, y, 0, 6, width, 6, 256, 256);
mc.fontRenderer.drawString(name, x + 40 - mc.fontRenderer.getStringWidth(name) / 2F, y - 9, color); mc.fontRenderer.drawStringWithShadow(name, x + 40 - mc.fontRenderer.getStringWidth(name) / 2F, y - 9, color);
if (textBelow != null) if (textBelow != null)
mc.fontRenderer.drawString(textBelow, x + 40 - mc.fontRenderer.getStringWidth(textBelow) / 2F, y + 7, color); mc.fontRenderer.drawStringWithShadow(textBelow, x + 40 - mc.fontRenderer.getStringWidth(textBelow) / 2F, y + 7, color);
} }
} }

View file

@ -7,16 +7,26 @@ import de.ellpeck.naturesaura.api.aura.chunk.IAuraChunk;
import de.ellpeck.naturesaura.chunk.AuraChunk; import de.ellpeck.naturesaura.chunk.AuraChunk;
import de.ellpeck.naturesaura.chunk.AuraChunkProvider; import de.ellpeck.naturesaura.chunk.AuraChunkProvider;
import de.ellpeck.naturesaura.misc.WorldData; import de.ellpeck.naturesaura.misc.WorldData;
import de.ellpeck.naturesaura.packet.PacketHandler;
import net.minecraft.util.ResourceLocation; import net.minecraft.util.ResourceLocation;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraft.world.chunk.Chunk; import net.minecraft.world.chunk.Chunk;
import net.minecraft.world.server.ChunkHolder;
import net.minecraft.world.server.ChunkManager;
import net.minecraft.world.server.ServerChunkProvider;
import net.minecraftforge.event.AttachCapabilitiesEvent; import net.minecraftforge.event.AttachCapabilitiesEvent;
import net.minecraftforge.event.TickEvent; import net.minecraftforge.event.TickEvent;
import net.minecraftforge.event.world.ChunkWatchEvent; import net.minecraftforge.event.world.ChunkWatchEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.ObfuscationReflectionHelper;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class CommonEvents { public class CommonEvents {
private static final Method GET_LOADED_CHUNKS_METHOD = ObfuscationReflectionHelper.findMethod(ChunkManager.class, "func_223491_f");
@SubscribeEvent @SubscribeEvent
public void onChunkCapsAttach(AttachCapabilitiesEvent<Chunk> event) { public void onChunkCapsAttach(AttachCapabilitiesEvent<Chunk> event) {
Chunk chunk = event.getObject(); Chunk chunk = event.getObject();
@ -32,13 +42,22 @@ public class CommonEvents {
public void onWorldTick(TickEvent.WorldTickEvent event) { public void onWorldTick(TickEvent.WorldTickEvent event) {
if (!event.world.isRemote && event.phase == TickEvent.Phase.END) { if (!event.world.isRemote && event.phase == TickEvent.Phase.END) {
if (event.world.getGameTime() % 20 == 0) { if (event.world.getGameTime() % 20 == 0) {
// TODO update loaded aura chunks event.world.getProfiler().startSection(NaturesAura.MOD_ID + ":onWorldTick");
/*Iterator<Chunk> chunks = event.world.getPersistentChunkIterable(((ServerWorld) event.world).getPlayerChunkMap().getChunkIterator()); try {
while (chunks.hasNext()) { ChunkManager manager = ((ServerChunkProvider) event.world.getChunkProvider()).chunkManager;
Chunk chunk = chunks.next(); Iterable<ChunkHolder> chunks = (Iterable<ChunkHolder>) GET_LOADED_CHUNKS_METHOD.invoke(manager);
AuraChunk auraChunk = (AuraChunk) chunk.getCapability(NaturesAuraAPI.capAuraChunk, null).orElse(null); for (ChunkHolder holder : chunks) {
auraChunk.update(); Chunk chunk = holder.func_219298_c();
}*/ if (chunk == null)
continue;
AuraChunk auraChunk = (AuraChunk) chunk.getCapability(NaturesAuraAPI.capAuraChunk, null).orElse(null);
if (auraChunk != null)
auraChunk.update();
}
} catch (IllegalAccessException | InvocationTargetException e) {
NaturesAura.LOGGER.fatal(e);
}
event.world.getProfiler().endSection();
} }
} }
} }
@ -62,9 +81,8 @@ public class CommonEvents {
Chunk chunk = event.getWorld().getChunk(event.getPos().x, event.getPos().z); Chunk chunk = event.getWorld().getChunk(event.getPos().x, event.getPos().z);
if (!chunk.getWorld().isRemote) { if (!chunk.getWorld().isRemote) {
AuraChunk auraChunk = (AuraChunk) chunk.getCapability(NaturesAuraAPI.capAuraChunk, null).orElse(null); AuraChunk auraChunk = (AuraChunk) chunk.getCapability(NaturesAuraAPI.capAuraChunk, null).orElse(null);
// TODO packets if (auraChunk != null)
/*if (auraChunk != null) PacketHandler.sendTo(event.getPlayer(), auraChunk.makePacket());
PacketHandler.sendTo(event.getPlayer(), auraChunk.makePacket());*/
} }
} }

View file

@ -5,6 +5,8 @@ import de.ellpeck.naturesaura.NaturesAura;
import de.ellpeck.naturesaura.api.NaturesAuraAPI; import de.ellpeck.naturesaura.api.NaturesAuraAPI;
import de.ellpeck.naturesaura.api.render.ITrinketItem; import de.ellpeck.naturesaura.api.render.ITrinketItem;
import de.ellpeck.naturesaura.items.tools.Armor; import de.ellpeck.naturesaura.items.tools.Armor;
import de.ellpeck.naturesaura.packet.PacketHandler;
import de.ellpeck.naturesaura.packet.PacketParticles;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.block.SoundType; import net.minecraft.block.SoundType;
import net.minecraft.block.material.Material; import net.minecraft.block.material.Material;
@ -105,7 +107,7 @@ public class ShockwaveCreator extends ItemImpl implements ITrinketItem {
if (worldIn instanceof ServerWorld) if (worldIn instanceof ServerWorld)
((ServerWorld) worldIn).spawnParticle(ParticleTypes.POOF, living.posX, living.posY + 0.01F, living.posZ, 15, 0D, 0D, 0D, 0.15D); ((ServerWorld) worldIn).spawnParticle(ParticleTypes.POOF, living.posX, living.posY + 0.01F, living.posZ, 15, 0D, 0D, 0D, 0.15D);
// TODO PacketHandler.sendToAllAround(worldIn, pos, 32, new PacketParticles((float) living.posX, (float) living.posY, (float) living.posZ, 11)); PacketHandler.sendToAllAround(worldIn, pos, 32, new PacketParticles((float) living.posX, (float) living.posY, (float) living.posZ, 11));
} }
} }

View file

@ -1,4 +0,0 @@
package de.ellpeck.naturesaura.packet;
public interface IPacket {
}

View file

@ -2,7 +2,7 @@ package de.ellpeck.naturesaura.packet;
import de.ellpeck.naturesaura.api.NaturesAuraAPI; import de.ellpeck.naturesaura.api.NaturesAuraAPI;
import de.ellpeck.naturesaura.chunk.AuraChunk; import de.ellpeck.naturesaura.chunk.AuraChunk;
import net.minecraft.client.Minecraft; import de.ellpeck.naturesaura.events.ClientEvents;
import net.minecraft.network.PacketBuffer; import net.minecraft.network.PacketBuffer;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World; import net.minecraft.world.World;
@ -16,12 +16,21 @@ import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.function.Supplier; import java.util.function.Supplier;
public class PacketAuraChunk implements IPacket { public class PacketAuraChunk {
private int chunkX; private int chunkX;
private int chunkZ; private int chunkZ;
private Map<BlockPos, MutableInt> drainSpots; private Map<BlockPos, MutableInt> drainSpots;
public PacketAuraChunk(int chunkX, int chunkZ, Map<BlockPos, MutableInt> drainSpots) {
this.chunkX = chunkX;
this.chunkZ = chunkZ;
this.drainSpots = drainSpots;
}
private PacketAuraChunk() {
}
public static PacketAuraChunk fromBytes(PacketBuffer buf) { public static PacketAuraChunk fromBytes(PacketBuffer buf) {
PacketAuraChunk packet = new PacketAuraChunk(); PacketAuraChunk packet = new PacketAuraChunk();
packet.chunkX = buf.readInt(); packet.chunkX = buf.readInt();
@ -50,22 +59,20 @@ public class PacketAuraChunk implements IPacket {
} }
} }
public static class Handler { public boolean tryHandle(World world) {
Chunk chunk = world.getChunk(this.chunkX, this.chunkZ);
if (chunk.isEmpty())
return false;
AuraChunk auraChunk = (AuraChunk) chunk.getCapability(NaturesAuraAPI.capAuraChunk).orElse(null);
if (auraChunk == null)
return false;
auraChunk.setSpots(this.drainSpots);
return true;
}
@OnlyIn(Dist.CLIENT) @OnlyIn(Dist.CLIENT)
public static void onMessage(PacketAuraChunk message, Supplier<NetworkEvent.Context> ctx) { public static void onMessage(PacketAuraChunk message, Supplier<NetworkEvent.Context> ctx) {
ctx.get().enqueueWork(() -> { ctx.get().enqueueWork(() -> ClientEvents.PENDING_AURA_CHUNKS.add(message));
World world = Minecraft.getInstance().world; ctx.get().setPacketHandled(true);
if (world != null) {
Chunk chunk = world.getChunk(message.chunkX, message.chunkZ);
if (chunk.getCapability(NaturesAuraAPI.capAuraChunk).isPresent()) {
AuraChunk auraChunk = (AuraChunk) chunk.getCapability(NaturesAuraAPI.capAuraChunk).orElse(null);
auraChunk.setSpots(message.drainSpots);
}
}
});
ctx.get().setPacketHandled(true);
}
} }
} }

View file

@ -11,11 +11,19 @@ import net.minecraftforge.fml.network.NetworkEvent;
import java.util.function.Supplier; import java.util.function.Supplier;
public class PacketClient implements IPacket { public class PacketClient {
private int type; private int type;
private int[] data; private int[] data;
public PacketClient(int type, int... data) {
this.type = type;
this.data = data;
}
private PacketClient() {
}
public static PacketClient fromBytes(PacketBuffer buf) { public static PacketClient fromBytes(PacketBuffer buf) {
PacketClient client = new PacketClient(); PacketClient client = new PacketClient();
client.type = buf.readByte(); client.type = buf.readByte();
@ -33,23 +41,19 @@ public class PacketClient implements IPacket {
buf.writeInt(i); buf.writeInt(i);
} }
public static class Handler { @OnlyIn(Dist.CLIENT)
public static void onMessage(PacketClient message, Supplier<NetworkEvent.Context> ctx) {
@OnlyIn(Dist.CLIENT) ctx.get().enqueueWork(() -> {
public static void onMessage(PacketClient message, Supplier<NetworkEvent.Context> ctx) { Minecraft mc = Minecraft.getInstance();
ctx.get().enqueueWork(() -> { if (mc.world != null) {
Minecraft mc = Minecraft.getInstance(); switch (message.type) {
if (mc.world != null) { case 0: // dimension rail visualization
switch (message.type) { int goalDim = message.data[0];
case 0: // dimension rail visualization BlockPos goalPos = new BlockPos(message.data[1], message.data[2], message.data[3]);
int goalDim = message.data[0]; RangeVisualizer.visualize(mc.player, RangeVisualizer.VISUALIZED_RAILS, DimensionType.getById(goalDim), goalPos);
BlockPos goalPos = new BlockPos(message.data[1], message.data[2], message.data[3]);
RangeVisualizer.visualize(mc.player, RangeVisualizer.VISUALIZED_RAILS, DimensionType.getById(goalDim), goalPos);
}
} }
}); }
});
ctx.get().setPacketHandled(true); ctx.get().setPacketHandled(true);
}
} }
} }

View file

@ -12,37 +12,26 @@ import net.minecraftforge.fml.network.simple.SimpleChannel;
public final class PacketHandler { public final class PacketHandler {
private static String version = "1"; private static final String VERSION = "1";
private static SimpleChannel network; private static SimpleChannel network;
public static void init() { public static void init() {
network = NetworkRegistry.newSimpleChannel( network = NetworkRegistry.newSimpleChannel(NaturesAura.createRes("network"), () -> VERSION, VERSION::equals, VERSION::equals);
NaturesAura.createRes("network"), network.registerMessage(0, PacketParticleStream.class, PacketParticleStream::toBytes, PacketParticleStream::fromBytes, PacketParticleStream::onMessage);
() -> version, network.registerMessage(1, PacketParticles.class, PacketParticles::toBytes, PacketParticles::fromBytes, PacketParticles::onMessage);
version::equals, network.registerMessage(2, PacketAuraChunk.class, PacketAuraChunk::toBytes, PacketAuraChunk::fromBytes, PacketAuraChunk::onMessage);
version::equals); network.registerMessage(3, PacketClient.class, PacketClient::toBytes, PacketClient::fromBytes, PacketClient::onMessage);
network.registerMessage(0, PacketParticleStream.class, PacketParticleStream::toBytes, PacketParticleStream::fromBytes, PacketParticleStream.Handler::onMessage);
network.registerMessage(1, PacketParticles.class, PacketParticles::toBytes, PacketParticles::fromBytes, PacketParticles.Handler::onMessage);
network.registerMessage(2, PacketAuraChunk.class, PacketAuraChunk::toBytes, PacketAuraChunk::fromBytes, PacketAuraChunk.Handler::onMessage);
network.registerMessage(3, PacketClient.class, PacketClient::toBytes, PacketClient::fromBytes, PacketClient.Handler::onMessage);
} }
@Deprecated public static void sendToAllLoaded(World world, BlockPos pos, Object message) {
public static void sendToAllLoaded(World world, BlockPos pos, IPacket message) { network.send(PacketDistributor.TRACKING_CHUNK.with(() -> world.getChunkAt(pos)), message);
sendToAllLoaded(message);
} }
public static void sendToAllLoaded(IPacket message) { public static void sendToAllAround(IWorld world, BlockPos pos, int range, Object message) {
network.send(PacketDistributor.ALL.noArg(), message); network.send(PacketDistributor.NEAR.with(() -> new PacketDistributor.TargetPoint(pos.getX(), pos.getY(), pos.getZ(), range, world.getDimension().getType())), message);
} }
public static void sendToAllAround(IWorld world, BlockPos pos, int range, IPacket message) { public static void sendTo(PlayerEntity player, Object message) {
network.send(PacketDistributor.NEAR.with(
() -> new PacketDistributor.TargetPoint(pos.getX(), pos.getY(), pos.getZ(), range, world.getDimension().getType())),
message);
}
public static void sendTo(PlayerEntity player, IPacket message) {
network.send(PacketDistributor.PLAYER.with(() -> (ServerPlayerEntity) player), message); network.send(PacketDistributor.PLAYER.with(() -> (ServerPlayerEntity) player), message);
} }
} }

View file

@ -1,8 +1,6 @@
package de.ellpeck.naturesaura.packet; package de.ellpeck.naturesaura.packet;
import de.ellpeck.naturesaura.NaturesAura;
import de.ellpeck.naturesaura.api.NaturesAuraAPI; import de.ellpeck.naturesaura.api.NaturesAuraAPI;
import io.netty.buffer.ByteBuf;
import net.minecraft.network.PacketBuffer; import net.minecraft.network.PacketBuffer;
import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.api.distmarker.OnlyIn;
@ -10,7 +8,7 @@ import net.minecraftforge.fml.network.NetworkEvent;
import java.util.function.Supplier; import java.util.function.Supplier;
public class PacketParticleStream implements IPacket { public class PacketParticleStream {
private float startX; private float startX;
private float startY; private float startY;
@ -36,8 +34,7 @@ public class PacketParticleStream implements IPacket {
this.scale = scale; this.scale = scale;
} }
public PacketParticleStream() { private PacketParticleStream() {
} }
public static PacketParticleStream fromBytes(PacketBuffer buf) { public static PacketParticleStream fromBytes(PacketBuffer buf) {
@ -68,16 +65,13 @@ public class PacketParticleStream implements IPacket {
buf.writeFloat(packet.scale); buf.writeFloat(packet.scale);
} }
public static class Handler { @OnlyIn(Dist.CLIENT)
public static void onMessage(PacketParticleStream message, Supplier<NetworkEvent.Context> ctx) {
ctx.get().enqueueWork(() -> NaturesAuraAPI.instance().spawnParticleStream(
message.startX, message.startY, message.startZ,
message.endX, message.endY, message.endZ,
message.speed, message.color, message.scale));
@OnlyIn(Dist.CLIENT) ctx.get().setPacketHandled(true);
public static void onMessage(PacketParticleStream message, Supplier<NetworkEvent.Context> ctx) {
ctx.get().enqueueWork(() -> NaturesAuraAPI.instance().spawnParticleStream(
message.startX, message.startY, message.startZ,
message.endX, message.endY, message.endZ,
message.speed, message.color, message.scale));
ctx.get().setPacketHandled(true);
}
} }
} }

View file

@ -18,7 +18,7 @@ import net.minecraftforge.fml.network.NetworkEvent;
import java.util.function.Supplier; import java.util.function.Supplier;
public class PacketParticles implements IPacket { public class PacketParticles {
private float posX; private float posX;
private float posY; private float posY;
@ -26,6 +26,17 @@ public class PacketParticles implements IPacket {
private int type; private int type;
private int[] data; private int[] data;
public PacketParticles(float posX, float posY, float posZ, int type, int... data) {
this.posX = posX;
this.posY = posY;
this.posZ = posZ;
this.type = type;
this.data = data;
}
private PacketParticles() {
}
public static PacketParticles fromBytes(PacketBuffer buf) { public static PacketParticles fromBytes(PacketBuffer buf) {
PacketParticles packet = new PacketParticles(); PacketParticles packet = new PacketParticles();
@ -54,380 +65,376 @@ public class PacketParticles implements IPacket {
} }
} }
public static class Handler { @OnlyIn(Dist.CLIENT)
public static void onMessage(PacketParticles message, Supplier<NetworkEvent.Context> ctx) {
ctx.get().enqueueWork(() -> {
World world = Minecraft.getInstance().world;
if (world != null) {
switch (message.type) {
case 0: // Tree ritual: Gold powder
BlockPos pos = new BlockPos(message.posX, message.posY, message.posZ);
Multiblocks.TREE_RITUAL.forEach(pos, 'G', (dustPos, matcher) -> {
BlockState state = world.getBlockState(dustPos);
AxisAlignedBB box = state.getShape(world, dustPos).getBoundingBox();
NaturesAuraAPI.instance().spawnMagicParticle(
dustPos.getX() + box.minX + (box.maxX - box.minX) * world.rand.nextFloat(),
dustPos.getY() + 0.1F,
dustPos.getZ() + box.minZ + (box.maxZ - box.minZ) * world.rand.nextFloat(),
(float) world.rand.nextGaussian() * 0.02F,
world.rand.nextFloat() * 0.01F + 0.02F,
(float) world.rand.nextGaussian() * 0.02F,
0xf4cb42, 2F, 50, 0F, false, true);
return true;
});
break;
case 1: // Tree ritual: Consuming item
for (int i = world.rand.nextInt(20) + 10; i >= 0; i--) {
NaturesAuraAPI.instance().spawnMagicParticle(
message.posX + 0.5F, message.posY + 0.9F, message.posZ + 0.5F,
(float) world.rand.nextGaussian() * 0.04F, world.rand.nextFloat() * 0.04F, (float) world.rand.nextGaussian() * 0.04F,
0x89cc37, 1.5F, 25, 0F, false, true);
}
break;
case 2: // Tree ritual: Tree disappearing
for (int i = world.rand.nextInt(5) + 3; i >= 0; i--) {
NaturesAuraAPI.instance().spawnMagicParticle(
message.posX + world.rand.nextFloat(), message.posY + world.rand.nextFloat(), message.posZ + world.rand.nextFloat(),
0F, 0F, 0F,
0x33FF33, 1F, 50, 0F, false, true);
}
break;
case 3: // Tree ritual: Spawn result item
for (int i = world.rand.nextInt(10) + 10; i >= 0; i--) {
NaturesAuraAPI.instance().spawnMagicParticle(
message.posX, message.posY, message.posZ,
world.rand.nextGaussian() * 0.1F, world.rand.nextGaussian() * 0.1F, world.rand.nextGaussian() * 0.1F,
0x89cc37, 2F, 100, 0F, true, true);
}
break;
case 4: // Nature altar: Conversion
for (int i = world.rand.nextInt(5) + 2; i >= 0; i--) {
NaturesAuraAPI.instance().spawnMagicParticle(
message.posX + 0.25F + world.rand.nextFloat() * 0.5F,
message.posY + 0.9F + 0.25F * world.rand.nextFloat(),
message.posZ + 0.25F + world.rand.nextFloat() * 0.5F,
world.rand.nextGaussian() * 0.02F, world.rand.nextFloat() * 0.02F, world.rand.nextGaussian() * 0.02F,
0x00FF00, world.rand.nextFloat() * 1.5F + 0.75F, 20, 0F, false, true);
}
break;
case 5: // Potion generator
int color = message.data[0];
boolean releaseAura = message.data[1] > 0;
for (int i = world.rand.nextInt(5) + 5; i >= 0; i--) {
NaturesAuraAPI.instance().spawnMagicParticle(
message.posX + world.rand.nextFloat(),
message.posY + 1.1F,
message.posZ + world.rand.nextFloat(),
world.rand.nextGaussian() * 0.01F, world.rand.nextFloat() * 0.1F, world.rand.nextGaussian() * 0.01F,
color, 2F + world.rand.nextFloat(), 40, 0F, true, true);
@OnlyIn(Dist.CLIENT) if (releaseAura)
public static void onMessage(PacketParticles message, Supplier<NetworkEvent.Context> ctx) { for (int x = -1; x <= 1; x += 2)
ctx.get().enqueueWork(() -> { for (int z = -1; z <= 1; z += 2) {
World world = Minecraft.getInstance().world; NaturesAuraAPI.instance().spawnMagicParticle(
if (world != null) { message.posX + x * 3 + 0.5F,
switch (message.type) { message.posY + 2.5,
case 0: // Tree ritual: Gold powder message.posZ + z * 3 + 0.5F,
BlockPos pos = new BlockPos(message.posX, message.posY, message.posZ); world.rand.nextGaussian() * 0.02F,
Multiblocks.TREE_RITUAL.forEach(pos, 'G', (dustPos, matcher) -> { world.rand.nextFloat() * 0.04F,
BlockState state = world.getBlockState(dustPos); world.rand.nextGaussian() * 0.02F,
//AxisAlignedBB box = state.getBoundingBox(world, dustPos); // TODO 0xd6340c, 1F + world.rand.nextFloat() * 2F, 75, 0F, true, true);
AxisAlignedBB box = state.getShape(world, dustPos).getBoundingBox(); }
}
break;
case 6: // Plant boost effect
for (int i = world.rand.nextInt(20) + 15; i >= 0; i--)
NaturesAuraAPI.instance().spawnMagicParticle(
message.posX + world.rand.nextFloat(),
message.posY + 0.25F + world.rand.nextFloat() * 0.5F,
message.posZ + world.rand.nextFloat(),
0F, world.rand.nextFloat() * 0.02F, 0F,
0x5ccc30, 1F + world.rand.nextFloat() * 2F, 50, 0F, false, true);
break;
case 7: // Flower generator consumation
color = message.data[0];
for (int i = world.rand.nextInt(10) + 10; i >= 0; i--)
NaturesAuraAPI.instance().spawnMagicParticle(
message.posX + 0.25F + world.rand.nextFloat() * 0.5F,
message.posY + 0.25F + world.rand.nextFloat() * 0.5F,
message.posZ + 0.25F + world.rand.nextFloat() * 0.5F,
world.rand.nextGaussian() * 0.02F,
world.rand.nextGaussian() * 0.02F,
world.rand.nextGaussian() * 0.02F,
color, world.rand.nextFloat() * 2F + 1F, 25, 0F, false, true);
break;
case 8: // Flower generator, firework generator aura creation
for (int i = world.rand.nextInt(10) + 5; i >= 0; i--)
NaturesAuraAPI.instance().spawnMagicParticle(
message.posX + 0.25F + world.rand.nextFloat() * 0.5F,
message.posY + 1.01F,
message.posZ + 0.25F + world.rand.nextFloat() * 0.5F,
world.rand.nextGaussian() * 0.01F,
world.rand.nextFloat() * 0.04F + 0.02F,
world.rand.nextGaussian() * 0.01F,
0x5ccc30, 1F + world.rand.nextFloat() * 1.5F, 40, 0F, false, true);
break;
case 9: // Placer placing
for (int i = world.rand.nextInt(20) + 20; i >= 0; i--) {
boolean side = world.rand.nextBoolean();
float x = side ? world.rand.nextFloat() : (world.rand.nextBoolean() ? 1.1F : -0.1F);
float z = !side ? world.rand.nextFloat() : (world.rand.nextBoolean() ? 1.1F : -0.1F);
NaturesAuraAPI.instance().spawnMagicParticle(
message.posX + x, message.posY + 0.1F + world.rand.nextFloat() * 0.98F, message.posZ + z,
0F, 0F, 0F,
0xad7a37, world.rand.nextFloat() + 1F, 50, 0F, true, true);
}
break;
case 10: // Hopper upgrade picking up
for (int i = world.rand.nextInt(20) + 10; i >= 0; i--)
NaturesAuraAPI.instance().spawnMagicParticle(
message.posX, message.posY + 0.45F, message.posZ,
world.rand.nextGaussian() * 0.015F,
world.rand.nextGaussian() * 0.015F,
world.rand.nextGaussian() * 0.015F,
0xdde7ff, world.rand.nextFloat() + 1F, 30, -0.06F, true, true);
break;
case 11: // Shockwave creator particles
for (int i = 0; i < 360; i += 2) {
double rad = Math.toRadians(i);
NaturesAuraAPI.instance().spawnMagicParticle(
message.posX, message.posY + 0.01F, message.posZ,
(float) Math.sin(rad) * 0.65F,
0F,
(float) Math.cos(rad) * 0.65F,
0x911b07, 3F, 10, 0F, false, true);
}
break;
case 12: // Oak generator
int sapX = message.data[0];
int sapY = message.data[1];
int sapZ = message.data[2];
releaseAura = message.data[3] > 0;
for (int i = world.rand.nextInt(20) + 10; i >= 0; i--)
NaturesAuraAPI.instance().spawnParticleStream(
sapX + 0.5F + (float) world.rand.nextGaussian() * 3F,
sapY + 0.5F + world.rand.nextFloat() * 4F,
sapZ + 0.5F + (float) world.rand.nextGaussian() * 3F,
message.posX + 0.5F,
message.posY + 0.5F,
message.posZ + 0.5F,
0.6F, BiomeColors.getFoliageColor(world, new BlockPos(sapX, sapY, sapZ)), 1.5F);
if (releaseAura)
for (int i = world.rand.nextInt(10) + 10; i >= 0; i--)
NaturesAuraAPI.instance().spawnMagicParticle( NaturesAuraAPI.instance().spawnMagicParticle(
dustPos.getX() + box.minX + (box.maxX - box.minX) * world.rand.nextFloat(), message.posX + 0.25F + world.rand.nextFloat() * 0.5F,
dustPos.getY() + 0.1F, message.posY + 1.01F,
dustPos.getZ() + box.minZ + (box.maxZ - box.minZ) * world.rand.nextFloat(), message.posZ + 0.25F + world.rand.nextFloat() * 0.5F,
(float) world.rand.nextGaussian() * 0.02F, world.rand.nextGaussian() * 0.03F,
world.rand.nextFloat() * 0.01F + 0.02F, world.rand.nextFloat() * 0.04F + 0.04F,
(float) world.rand.nextGaussian() * 0.02F, world.rand.nextGaussian() * 0.03F,
0xf4cb42, 2F, 50, 0F, false, true); 0x5ccc30, 1F + world.rand.nextFloat() * 1.5F, 60, 0F, false, true);
break;
case 13: // Offering table
int genX = message.data[0];
int genY = message.data[1];
int genZ = message.data[2];
for (int i = world.rand.nextInt(20) + 10; i >= 0; i--)
NaturesAuraAPI.instance().spawnMagicParticle(
message.posX, message.posY + 0.5F, message.posZ,
world.rand.nextGaussian() * 0.02F,
world.rand.nextFloat() * 0.25F,
world.rand.nextGaussian() * 0.02F,
0xffadfd, 1.5F, 40, 0F, false, true);
for (int i = world.rand.nextInt(50) + 30; i >= 0; i--)
NaturesAuraAPI.instance().spawnMagicParticle(
genX + 0.5F + world.rand.nextGaussian() * 2.5F,
genY + 0.1F,
genZ + 0.5F + world.rand.nextGaussian() * 2.5F,
world.rand.nextGaussian() * 0.01F,
world.rand.nextFloat() * 0.01F,
world.rand.nextGaussian() * 0.01F,
0xd3e4ff, 1.5F, 150, 0F, false, true);
break;
case 14: // Pickup stopper
NaturesAuraAPI.instance().spawnMagicParticle(
message.posX, message.posY + 0.4F, message.posZ,
world.rand.nextGaussian() * 0.005F,
world.rand.nextFloat() * 0.005F,
world.rand.nextGaussian() * 0.005F,
0xcc3116, 1.5F, 40, 0F, false, true);
break;
case 15: // Spawn lamp
for (int i = world.rand.nextInt(5) + 5; i >= 0; i--)
NaturesAuraAPI.instance().spawnMagicParticle(
message.posX + 0.3F + world.rand.nextFloat() * 0.4F,
message.posY + 0.15F + world.rand.nextFloat() * 0.5F,
message.posZ + 0.3F + world.rand.nextFloat() * 0.4F,
0F, 0F, 0F,
0xf4a142, 1F, 30, 0F, false, true);
break;
case 16: // Animal generator aura creation
for (int i = world.rand.nextInt(5) + 5; i >= 0; i--)
NaturesAuraAPI.instance().spawnMagicParticle(
message.posX + 0.25F + world.rand.nextFloat() * 0.5F,
message.posY + 1.01F,
message.posZ + 0.25F + world.rand.nextFloat() * 0.5F,
world.rand.nextGaussian() * 0.01F,
world.rand.nextFloat() * 0.04F + 0.02F,
world.rand.nextGaussian() * 0.01F,
0xd13308, 1F + world.rand.nextFloat() * 1.5F, 40, 0F, false, true);
break;
case 17: // Animal generator consuming
boolean child = message.data[0] > 0;
float height = message.data[1] / 10F;
genX = message.data[2];
genY = message.data[3];
genZ = message.data[4];
for (int i = (child ? world.rand.nextInt(10) + 10 : world.rand.nextInt(20) + 20); i >= 0; i--)
NaturesAuraAPI.instance().spawnMagicParticle(
message.posX + world.rand.nextGaussian() * 0.25F,
message.posY + height * 0.75F + world.rand.nextGaussian() * 0.25F,
message.posZ + world.rand.nextGaussian() * 0.25F,
world.rand.nextGaussian() * 0.01F,
world.rand.nextFloat() * 0.01F,
world.rand.nextGaussian() * 0.01F,
0x42f4c8, world.rand.nextFloat() * (child ? 0.5F : 2F) + 1F, world.rand.nextInt(30) + 40, 0F, true, true);
NaturesAuraAPI.instance().spawnParticleStream(
message.posX, message.posY + height * 0.75F, message.posZ,
genX + 0.5F, genY + 0.5F, genZ + 0.5F,
0.15F, 0x41c4f4, child ? 1.5F : 3F);
break;
case 18: // End flower decay
color = message.data[0];
for (int i = world.rand.nextInt(10) + 20; i >= 0; i--)
NaturesAuraAPI.instance().spawnMagicParticle(
message.posX + world.rand.nextFloat(),
message.posY + world.rand.nextFloat(),
message.posZ + world.rand.nextFloat(),
world.rand.nextGaussian() * 0.01F,
world.rand.nextFloat() * 0.01F,
world.rand.nextGaussian() * 0.01F,
color, 1.5F, 80, 0F, true, true);
break;
case 19: // Animal spawner, auto crafter
for (int i = world.rand.nextInt(20) + 10; i >= 0; i--)
NaturesAuraAPI.instance().spawnMagicParticle(
message.posX, message.posY + 0.5F, message.posZ,
world.rand.nextGaussian() * 0.02F,
world.rand.nextFloat() * 0.02F,
world.rand.nextGaussian() * 0.02F,
0x16b7b2, 1.5F, 40, 0F, false, true);
break;
case 20: // RF converter
for (int i = world.rand.nextInt(5) + 2; i >= 0; i--)
Multiblocks.RF_CONVERTER.forEach(new BlockPos(message.posX, message.posY, message.posZ), 'R', (blockPos, matcher) -> {
if (world.rand.nextFloat() < 0.35F) {
NaturesAuraAPI.instance().spawnParticleStream(
blockPos.getX() + world.rand.nextFloat(),
blockPos.getY() + world.rand.nextFloat(),
blockPos.getZ() + world.rand.nextFloat(),
message.posX + world.rand.nextFloat(),
message.posY + world.rand.nextFloat(),
message.posZ + world.rand.nextFloat(),
0.05F, 0xff1a05, 1.5F);
}
return true; return true;
}); });
break; break;
case 1: // Tree ritual: Consuming item case 21: // End flower item consuming
for (int i = world.rand.nextInt(20) + 10; i >= 0; i--) { color = message.data[0];
NaturesAuraAPI.instance().spawnMagicParticle( for (int i = world.rand.nextInt(20) + 10; i >= 0; i--)
message.posX + 0.5F, message.posY + 0.9F, message.posZ + 0.5F,
(float) world.rand.nextGaussian() * 0.04F, world.rand.nextFloat() * 0.04F, (float) world.rand.nextGaussian() * 0.04F,
0x89cc37, 1.5F, 25, 0F, false, true);
}
break;
case 2: // Tree ritual: Tree disappearing
for (int i = world.rand.nextInt(5) + 3; i >= 0; i--) {
NaturesAuraAPI.instance().spawnMagicParticle(
message.posX + world.rand.nextFloat(), message.posY + world.rand.nextFloat(), message.posZ + world.rand.nextFloat(),
0F, 0F, 0F,
0x33FF33, 1F, 50, 0F, false, true);
}
break;
case 3: // Tree ritual: Spawn result item
for (int i = world.rand.nextInt(10) + 10; i >= 0; i--) {
NaturesAuraAPI.instance().spawnMagicParticle(
message.posX, message.posY, message.posZ,
world.rand.nextGaussian() * 0.1F, world.rand.nextGaussian() * 0.1F, world.rand.nextGaussian() * 0.1F,
0x89cc37, 2F, 100, 0F, true, true);
}
break;
case 4: // Nature altar: Conversion
for (int i = world.rand.nextInt(5) + 2; i >= 0; i--) {
NaturesAuraAPI.instance().spawnMagicParticle(
message.posX + 0.25F + world.rand.nextFloat() * 0.5F,
message.posY + 0.9F + 0.25F * world.rand.nextFloat(),
message.posZ + 0.25F + world.rand.nextFloat() * 0.5F,
world.rand.nextGaussian() * 0.02F, world.rand.nextFloat() * 0.02F, world.rand.nextGaussian() * 0.02F,
0x00FF00, world.rand.nextFloat() * 1.5F + 0.75F, 20, 0F, false, true);
}
break;
case 5: // Potion generator
int color = message.data[0];
boolean releaseAura = message.data[1] > 0;
for (int i = world.rand.nextInt(5) + 5; i >= 0; i--) {
NaturesAuraAPI.instance().spawnMagicParticle(
message.posX + world.rand.nextFloat(),
message.posY + 1.1F,
message.posZ + world.rand.nextFloat(),
world.rand.nextGaussian() * 0.01F, world.rand.nextFloat() * 0.1F, world.rand.nextGaussian() * 0.01F,
color, 2F + world.rand.nextFloat(), 40, 0F, true, true);
if (releaseAura)
for (int x = -1; x <= 1; x += 2)
for (int z = -1; z <= 1; z += 2) {
NaturesAuraAPI.instance().spawnMagicParticle(
message.posX + x * 3 + 0.5F,
message.posY + 2.5,
message.posZ + z * 3 + 0.5F,
world.rand.nextGaussian() * 0.02F,
world.rand.nextFloat() * 0.04F,
world.rand.nextGaussian() * 0.02F,
0xd6340c, 1F + world.rand.nextFloat() * 2F, 75, 0F, true, true);
}
}
break;
case 6: // Plant boost effect
for (int i = world.rand.nextInt(20) + 15; i >= 0; i--)
NaturesAuraAPI.instance().spawnMagicParticle(
message.posX + world.rand.nextFloat(),
message.posY + 0.25F + world.rand.nextFloat() * 0.5F,
message.posZ + world.rand.nextFloat(),
0F, world.rand.nextFloat() * 0.02F, 0F,
0x5ccc30, 1F + world.rand.nextFloat() * 2F, 50, 0F, false, true);
break;
case 7: // Flower generator consumation
color = message.data[0];
for (int i = world.rand.nextInt(10) + 10; i >= 0; i--)
NaturesAuraAPI.instance().spawnMagicParticle(
message.posX + 0.25F + world.rand.nextFloat() * 0.5F,
message.posY + 0.25F + world.rand.nextFloat() * 0.5F,
message.posZ + 0.25F + world.rand.nextFloat() * 0.5F,
world.rand.nextGaussian() * 0.02F,
world.rand.nextGaussian() * 0.02F,
world.rand.nextGaussian() * 0.02F,
color, world.rand.nextFloat() * 2F + 1F, 25, 0F, false, true);
break;
case 8: // Flower generator, firework generator aura creation
for (int i = world.rand.nextInt(10) + 5; i >= 0; i--)
NaturesAuraAPI.instance().spawnMagicParticle(
message.posX + 0.25F + world.rand.nextFloat() * 0.5F,
message.posY + 1.01F,
message.posZ + 0.25F + world.rand.nextFloat() * 0.5F,
world.rand.nextGaussian() * 0.01F,
world.rand.nextFloat() * 0.04F + 0.02F,
world.rand.nextGaussian() * 0.01F,
0x5ccc30, 1F + world.rand.nextFloat() * 1.5F, 40, 0F, false, true);
break;
case 9: // Placer placing
for (int i = world.rand.nextInt(20) + 20; i >= 0; i--) {
boolean side = world.rand.nextBoolean();
float x = side ? world.rand.nextFloat() : (world.rand.nextBoolean() ? 1.1F : -0.1F);
float z = !side ? world.rand.nextFloat() : (world.rand.nextBoolean() ? 1.1F : -0.1F);
NaturesAuraAPI.instance().spawnMagicParticle(
message.posX + x, message.posY + 0.1F + world.rand.nextFloat() * 0.98F, message.posZ + z,
0F, 0F, 0F,
0xad7a37, world.rand.nextFloat() + 1F, 50, 0F, true, true);
}
break;
case 10: // Hopper upgrade picking up
for (int i = world.rand.nextInt(20) + 10; i >= 0; i--)
NaturesAuraAPI.instance().spawnMagicParticle(
message.posX, message.posY + 0.45F, message.posZ,
world.rand.nextGaussian() * 0.015F,
world.rand.nextGaussian() * 0.015F,
world.rand.nextGaussian() * 0.015F,
0xdde7ff, world.rand.nextFloat() + 1F, 30, -0.06F, true, true);
break;
case 11: // Shockwave creator particles
for (int i = 0; i < 360; i += 2) {
double rad = Math.toRadians(i);
NaturesAuraAPI.instance().spawnMagicParticle(
message.posX, message.posY + 0.01F, message.posZ,
(float) Math.sin(rad) * 0.65F,
0F,
(float) Math.cos(rad) * 0.65F,
0x911b07, 3F, 10, 0F, false, true);
}
break;
case 12: // Oak generator
int sapX = message.data[0];
int sapY = message.data[1];
int sapZ = message.data[2];
releaseAura = message.data[3] > 0;
for (int i = world.rand.nextInt(20) + 10; i >= 0; i--)
NaturesAuraAPI.instance().spawnParticleStream(
sapX + 0.5F + (float) world.rand.nextGaussian() * 3F,
sapY + 0.5F + world.rand.nextFloat() * 4F,
sapZ + 0.5F + (float) world.rand.nextGaussian() * 3F,
message.posX + 0.5F,
message.posY + 0.5F,
message.posZ + 0.5F,
0.6F, BiomeColors.getFoliageColor(world, new BlockPos(sapX, sapY, sapZ)), 1.5F);
if (releaseAura)
for (int i = world.rand.nextInt(10) + 10; i >= 0; i--)
NaturesAuraAPI.instance().spawnMagicParticle(
message.posX + 0.25F + world.rand.nextFloat() * 0.5F,
message.posY + 1.01F,
message.posZ + 0.25F + world.rand.nextFloat() * 0.5F,
world.rand.nextGaussian() * 0.03F,
world.rand.nextFloat() * 0.04F + 0.04F,
world.rand.nextGaussian() * 0.03F,
0x5ccc30, 1F + world.rand.nextFloat() * 1.5F, 60, 0F, false, true);
break;
case 13: // Offering table
int genX = message.data[0];
int genY = message.data[1];
int genZ = message.data[2];
for (int i = world.rand.nextInt(20) + 10; i >= 0; i--)
NaturesAuraAPI.instance().spawnMagicParticle(
message.posX, message.posY + 0.5F, message.posZ,
world.rand.nextGaussian() * 0.02F,
world.rand.nextFloat() * 0.25F,
world.rand.nextGaussian() * 0.02F,
0xffadfd, 1.5F, 40, 0F, false, true);
for (int i = world.rand.nextInt(50) + 30; i >= 0; i--)
NaturesAuraAPI.instance().spawnMagicParticle(
genX + 0.5F + world.rand.nextGaussian() * 2.5F,
genY + 0.1F,
genZ + 0.5F + world.rand.nextGaussian() * 2.5F,
world.rand.nextGaussian() * 0.01F,
world.rand.nextFloat() * 0.01F,
world.rand.nextGaussian() * 0.01F,
0xd3e4ff, 1.5F, 150, 0F, false, true);
break;
case 14: // Pickup stopper
NaturesAuraAPI.instance().spawnMagicParticle( NaturesAuraAPI.instance().spawnMagicParticle(
message.posX, message.posY + 0.4F, message.posZ, message.posX, message.posY + 0.5F, message.posZ,
world.rand.nextGaussian() * 0.005F, world.rand.nextGaussian() * 0.01F,
world.rand.nextFloat() * 0.005F, world.rand.nextFloat() * 0.01F,
world.rand.nextGaussian() * 0.005F, world.rand.nextGaussian() * 0.01F,
0xcc3116, 1.5F, 40, 0F, false, true); color, 1.5F, 40, 0F, false, true);
break; break;
case 15: // Spawn lamp case 22: // Mover cart
for (int i = world.rand.nextInt(5) + 5; i >= 0; i--) float motionX = message.data[0] / 100F;
NaturesAuraAPI.instance().spawnMagicParticle( float motionY = message.data[1] / 100F;
message.posX + 0.3F + world.rand.nextFloat() * 0.4F, float motionZ = message.data[2] / 100F;
message.posY + 0.15F + world.rand.nextFloat() * 0.5F, for (int i = world.rand.nextInt(60) + 30; i >= 0; i--)
message.posZ + 0.3F + world.rand.nextFloat() * 0.4F, NaturesAuraAPI.instance().spawnMagicParticle(
0F, 0F, 0F, message.posX + world.rand.nextGaussian() * 10F,
0xf4a142, 1F, 30, 0F, false, true); message.posY + world.rand.nextGaussian() * 10F,
break; message.posZ + world.rand.nextGaussian() * 10F,
case 16: // Animal generator aura creation motionX * 0.2F, motionY * 0.2F, motionZ * 0.2F,
for (int i = world.rand.nextInt(5) + 5; i >= 0; i--) IAuraType.forWorld(world).getColor(), 2F, 30, 0F, false, true);
NaturesAuraAPI.instance().spawnMagicParticle( break;
message.posX + 0.25F + world.rand.nextFloat() * 0.5F, case 23: // Moss generator
message.posY + 1.01F, for (int i = world.rand.nextInt(30) + 30; i >= 0; i--) {
message.posZ + 0.25F + world.rand.nextFloat() * 0.5F, int side = world.rand.nextInt(3);
world.rand.nextGaussian() * 0.01F, float x = side != 0 ? world.rand.nextFloat() : (world.rand.nextBoolean() ? 1.1F : -0.1F);
world.rand.nextFloat() * 0.04F + 0.02F, float y = side != 1 ? world.rand.nextFloat() : (world.rand.nextBoolean() ? 1.1F : -0.1F);
world.rand.nextGaussian() * 0.01F, float z = side != 2 ? world.rand.nextFloat() : (world.rand.nextBoolean() ? 1.1F : -0.1F);
0xd13308, 1F + world.rand.nextFloat() * 1.5F, 40, 0F, false, true); NaturesAuraAPI.instance().spawnMagicParticle(
break; message.posX + x,
case 17: // Animal generator consuming message.posY + y,
boolean child = message.data[0] > 0; message.posZ + z,
float height = message.data[1] / 10F; 0F, 0F, 0F,
genX = message.data[2]; 0x184c0d, world.rand.nextFloat() + 1F, 30, 0F, true, true);
genY = message.data[3]; }
genZ = message.data[4]; for (int i = world.rand.nextInt(20) + 10; i >= 0; i--)
for (int i = (child ? world.rand.nextInt(10) + 10 : world.rand.nextInt(20) + 20); i >= 0; i--) NaturesAuraAPI.instance().spawnMagicParticle(
NaturesAuraAPI.instance().spawnMagicParticle( message.posX + world.rand.nextFloat(),
message.posX + world.rand.nextGaussian() * 0.25F, message.posY + 1F,
message.posY + height * 0.75F + world.rand.nextGaussian() * 0.25F, message.posZ + world.rand.nextFloat(),
message.posZ + world.rand.nextGaussian() * 0.25F, world.rand.nextGaussian() * 0.01F,
world.rand.nextGaussian() * 0.01F, world.rand.nextFloat() * 0.04F + 0.02F,
world.rand.nextFloat() * 0.01F, world.rand.nextGaussian() * 0.01F,
world.rand.nextGaussian() * 0.01F, 0x5ccc30, 1F + world.rand.nextFloat() * 1.5F, 40, 0F, true, true);
0x42f4c8, world.rand.nextFloat() * (child ? 0.5F : 2F) + 1F, world.rand.nextInt(30) + 40, 0F, true, true); break;
case 24: // Firework generator
int goalX = message.data[0];
int goalY = message.data[1];
int goalZ = message.data[2];
NaturesAuraAPI.instance().setParticleSpawnRange(64);
for (int i = world.rand.nextInt(30) + 30; i >= 0; i--)
NaturesAuraAPI.instance().spawnParticleStream( NaturesAuraAPI.instance().spawnParticleStream(
message.posX, message.posY + height * 0.75F, message.posZ, message.posX + (float) world.rand.nextGaussian(),
genX + 0.5F, genY + 0.5F, genZ + 0.5F, message.posY + (float) world.rand.nextGaussian(),
0.15F, 0x41c4f4, child ? 1.5F : 3F); message.posZ + (float) world.rand.nextGaussian(),
break; goalX + 0.25F + world.rand.nextFloat() * 0.5F,
case 18: // End flower decay goalY + 0.25F + world.rand.nextFloat() * 0.5F,
color = message.data[0]; goalZ + 0.25F + world.rand.nextFloat() * 0.5F,
for (int i = world.rand.nextInt(10) + 20; i >= 0; i--) 0.65F, message.data[3 + world.rand.nextInt(message.data.length - 3)], 1F);
NaturesAuraAPI.instance().spawnMagicParticle( NaturesAuraAPI.instance().setParticleSpawnRange(32);
message.posX + world.rand.nextFloat(), break;
message.posY + world.rand.nextFloat(), case 25: // Dimension rail
message.posZ + world.rand.nextFloat(), float width = message.data[0] / 100F;
world.rand.nextGaussian() * 0.01F, height = message.data[1] / 100F;
world.rand.nextFloat() * 0.01F, float depth = message.data[2] / 100F;
world.rand.nextGaussian() * 0.01F, for (int i = world.rand.nextInt(100) + 50; i >= 0; i--)
color, 1.5F, 80, 0F, true, true); NaturesAuraAPI.instance().spawnMagicParticle(
break; message.posX + world.rand.nextFloat() * width,
case 19: // Animal spawner, auto crafter message.posY + world.rand.nextFloat() * height,
for (int i = world.rand.nextInt(20) + 10; i >= 0; i--) message.posZ + world.rand.nextFloat() * depth,
NaturesAuraAPI.instance().spawnMagicParticle( 0F, 0F, 0F, 0xd60cff, 1F + world.rand.nextFloat(), 60, 0F, false, true);
message.posX, message.posY + 0.5F, message.posZ, break;
world.rand.nextGaussian() * 0.02F, case 26: // Projectile generator
world.rand.nextFloat() * 0.02F, int x = message.data[0];
world.rand.nextGaussian() * 0.02F, int y = message.data[1];
0x16b7b2, 1.5F, 40, 0F, false, true); int z = message.data[2];
break; for (int i = world.rand.nextInt(10) + 5; i >= 0; i--)
case 20: // RF converter NaturesAuraAPI.instance().spawnMagicParticle(
for (int i = world.rand.nextInt(5) + 2; i >= 0; i--) x + 0.25F + world.rand.nextFloat() * 0.5F,
Multiblocks.RF_CONVERTER.forEach(new BlockPos(message.posX, message.posY, message.posZ), 'R', (blockPos, matcher) -> { y + 1.01F,
if (world.rand.nextFloat() < 0.35F) { z + 0.25F + world.rand.nextFloat() * 0.5F,
NaturesAuraAPI.instance().spawnParticleStream( world.rand.nextGaussian() * 0.01F,
blockPos.getX() + world.rand.nextFloat(), world.rand.nextFloat() * 0.04F + 0.02F,
blockPos.getY() + world.rand.nextFloat(), world.rand.nextGaussian() * 0.01F,
blockPos.getZ() + world.rand.nextFloat(), 0x5ccc30, 1F + world.rand.nextFloat() * 1.5F, 40, 0F, false, true);
message.posX + world.rand.nextFloat(), for (int i = world.rand.nextInt(10) + 10; i >= 0; i--)
message.posY + world.rand.nextFloat(), world.addParticle(ParticleTypes.FIREWORK,
message.posZ + world.rand.nextFloat(), message.posX, message.posY, message.posZ,
0.05F, 0xff1a05, 1.5F); world.rand.nextGaussian() * 0.03F,
} world.rand.nextGaussian() * 0.03F,
return true; world.rand.nextGaussian() * 0.03F);
});
break;
case 21: // End flower item consuming
color = message.data[0];
for (int i = world.rand.nextInt(20) + 10; i >= 0; i--)
NaturesAuraAPI.instance().spawnMagicParticle(
message.posX, message.posY + 0.5F, message.posZ,
world.rand.nextGaussian() * 0.01F,
world.rand.nextFloat() * 0.01F,
world.rand.nextGaussian() * 0.01F,
color, 1.5F, 40, 0F, false, true);
break;
case 22: // Mover cart
float motionX = message.data[0] / 100F;
float motionY = message.data[1] / 100F;
float motionZ = message.data[2] / 100F;
for (int i = world.rand.nextInt(60) + 30; i >= 0; i--)
NaturesAuraAPI.instance().spawnMagicParticle(
message.posX + world.rand.nextGaussian() * 10F,
message.posY + world.rand.nextGaussian() * 10F,
message.posZ + world.rand.nextGaussian() * 10F,
motionX * 0.2F, motionY * 0.2F, motionZ * 0.2F,
IAuraType.forWorld(world).getColor(), 2F, 30, 0F, false, true);
break;
case 23: // Moss generator
for (int i = world.rand.nextInt(30) + 30; i >= 0; i--) {
int side = world.rand.nextInt(3);
float x = side != 0 ? world.rand.nextFloat() : (world.rand.nextBoolean() ? 1.1F : -0.1F);
float y = side != 1 ? world.rand.nextFloat() : (world.rand.nextBoolean() ? 1.1F : -0.1F);
float z = side != 2 ? world.rand.nextFloat() : (world.rand.nextBoolean() ? 1.1F : -0.1F);
NaturesAuraAPI.instance().spawnMagicParticle(
message.posX + x,
message.posY + y,
message.posZ + z,
0F, 0F, 0F,
0x184c0d, world.rand.nextFloat() + 1F, 30, 0F, true, true);
}
for (int i = world.rand.nextInt(20) + 10; i >= 0; i--)
NaturesAuraAPI.instance().spawnMagicParticle(
message.posX + world.rand.nextFloat(),
message.posY + 1F,
message.posZ + world.rand.nextFloat(),
world.rand.nextGaussian() * 0.01F,
world.rand.nextFloat() * 0.04F + 0.02F,
world.rand.nextGaussian() * 0.01F,
0x5ccc30, 1F + world.rand.nextFloat() * 1.5F, 40, 0F, true, true);
break;
case 24: // Firework generator
int goalX = message.data[0];
int goalY = message.data[1];
int goalZ = message.data[2];
NaturesAuraAPI.instance().setParticleSpawnRange(64);
for (int i = world.rand.nextInt(30) + 30; i >= 0; i--)
NaturesAuraAPI.instance().spawnParticleStream(
message.posX + (float) world.rand.nextGaussian(),
message.posY + (float) world.rand.nextGaussian(),
message.posZ + (float) world.rand.nextGaussian(),
goalX + 0.25F + world.rand.nextFloat() * 0.5F,
goalY + 0.25F + world.rand.nextFloat() * 0.5F,
goalZ + 0.25F + world.rand.nextFloat() * 0.5F,
0.65F, message.data[3 + world.rand.nextInt(message.data.length - 3)], 1F);
NaturesAuraAPI.instance().setParticleSpawnRange(32);
break;
case 25: // Dimension rail
float width = message.data[0] / 100F;
height = message.data[1] / 100F;
float depth = message.data[2] / 100F;
for (int i = world.rand.nextInt(100) + 50; i >= 0; i--)
NaturesAuraAPI.instance().spawnMagicParticle(
message.posX + world.rand.nextFloat() * width,
message.posY + world.rand.nextFloat() * height,
message.posZ + world.rand.nextFloat() * depth,
0F, 0F, 0F, 0xd60cff, 1F + world.rand.nextFloat(), 60, 0F, false, true);
break;
case 26: // Projectile generator
int x = message.data[0];
int y = message.data[1];
int z = message.data[2];
for (int i = world.rand.nextInt(10) + 5; i >= 0; i--)
NaturesAuraAPI.instance().spawnMagicParticle(
x + 0.25F + world.rand.nextFloat() * 0.5F,
y + 1.01F,
z + 0.25F + world.rand.nextFloat() * 0.5F,
world.rand.nextGaussian() * 0.01F,
world.rand.nextFloat() * 0.04F + 0.02F,
world.rand.nextGaussian() * 0.01F,
0x5ccc30, 1F + world.rand.nextFloat() * 1.5F, 40, 0F, false, true);
for (int i = world.rand.nextInt(10) + 10; i >= 0; i--)
world.addParticle(ParticleTypes.FIREWORK,
message.posX, message.posY, message.posZ,
world.rand.nextGaussian() * 0.03F,
world.rand.nextGaussian() * 0.03F,
world.rand.nextGaussian() * 0.03F);
}
} }
}); }
ctx.get().setPacketHandled(true); });
} ctx.get().setPacketHandled(true);
} }
} }