diff --git a/src/api/java/appeng/api/implementations/items/IGrowableCrystal.java b/src/api/java/appeng/api/implementations/items/IGrowableCrystal.java index 79964c18a..3fdb75476 100644 --- a/src/api/java/appeng/api/implementations/items/IGrowableCrystal.java +++ b/src/api/java/appeng/api/implementations/items/IGrowableCrystal.java @@ -23,13 +23,23 @@ package appeng.api.implementations.items; -import net.minecraft.block.Block; -import net.minecraft.block.Material; +import net.minecraft.block.BlockState; import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import javax.annotation.Nullable; public interface IGrowableCrystal { ItemStack triggerGrowth(ItemStack is); - float getMultiplier(Block blk, Material mat); + /** + * Gets the crystal growth multiplier based on the material it is submerged in. + * + * @param state The blockstate of the block the crystal is currently in. + * @return The multiplier for the growth tick progress. Zero if the crystal + * cannot grow in the current material. + */ + float getMultiplier(BlockState state, @Nullable World world, @Nullable BlockPos pos); } diff --git a/src/main/java/appeng/core/AEConfig.java b/src/main/java/appeng/core/AEConfig.java index 5c53b0a7a..5814dc963 100644 --- a/src/main/java/appeng/core/AEConfig.java +++ b/src/main/java/appeng/core/AEConfig.java @@ -49,6 +49,8 @@ import appeng.core.config.StringListOption; import appeng.core.settings.TickRates; import appeng.util.EnumCycler; +import javax.annotation.Nullable; + public final class AEConfig { public final ClientConfig clientConfig; @@ -398,7 +400,16 @@ public final class AEConfig { return commonConfig.quartzOreBiomeBlacklist.get(); } -// Setters keep visibility as low as possible. + @Nullable + public String getImprovedFluidTag() { + return Strings.emptyToNull(commonConfig.improvedFluidTag.get()); + } + + public float getImprovedFluidMultiplier() { + return commonConfig.improvedFluidMultiplier.get().floatValue(); + } + + // Setters keep visibility as low as possible. private static class ClientConfig { @@ -510,6 +521,11 @@ public final class AEConfig { public final IntegerOption condenserMatterBallsPower; public final IntegerOption condenserSingularityPower; + // In-World Purification + // Settings for improved speed depending on fluid the crystal is in + public final StringOption improvedFluidTag; + public final DoubleOption improvedFluidMultiplier; + public final Map tickRateMin = new HashMap<>(); public final Map tickRateMax = new HashMap<>(); @@ -604,6 +620,12 @@ public final class AEConfig { tickRateMin.put(tickRate, tickrates.addInt(tickRate.name() + "Min", tickRate.getDefaultMin())); tickRateMax.put(tickRate, tickrates.addInt(tickRate.name() + "Max", tickRate.getDefaultMax())); } + + ConfigSection inWorldPurification = root.subsection("inWorldPurification", "Settings for in-world purification of crystals."); + + improvedFluidTag = inWorldPurification.addString("improvedFluidTag", "", "A fluid tag that identifies fluids that improve crystal purification speed. Does not affect purification with water/lava."); + improvedFluidMultiplier = inWorldPurification + .addDouble("improvedFluidMultiplier", 2.0, 1.0, 10.0, "The speed multiplier to use when the crystals are submerged in the improved fluid.") } } diff --git a/src/main/java/appeng/core/api/definitions/ApiBlocks.java b/src/main/java/appeng/core/api/definitions/ApiBlocks.java index 9635b62d4..47441fd2e 100644 --- a/src/main/java/appeng/core/api/definitions/ApiBlocks.java +++ b/src/main/java/appeng/core/api/definitions/ApiBlocks.java @@ -30,6 +30,7 @@ import net.minecraft.block.Material; import net.minecraft.block.SlabBlock; import net.minecraft.client.render.RenderLayer; import net.minecraft.entity.EntityDimensions; +import net.minecraft.entity.EntityType; import net.minecraft.entity.SpawnGroup; import net.minecraft.sound.BlockSoundGroup; @@ -267,17 +268,18 @@ public final class ApiBlocks implements IBlocks { this.chiseledQuartzBlock = deco.block("chiseled_quartz_block", () -> new AEDecorativeBlock(QUARTZ_PROPERTIES)) .build(); - this.quartzGlass = registry.features(AEFeature.QUARTZ_GLASS) - .block("quartz_glass", () -> new QuartzGlassBlock(glassProps())) - .rendering(new BlockRenderingCustomizer() { - @Override - @Environment(EnvType.CLIENT) - public void customize(IBlockRendering rendering, IItemRendering itemRendering) { - rendering.renderType(RenderLayer.getCutout()); - } - }).build(); + AbstractBlock.TypedContextPredicate> neverAllowSpawn = (p1, p2, p3, p4) -> false; + this.quartzGlass = registry.features(AEFeature.QUARTZ_GLASS).block("quartz_glass", () -> { + return new QuartzGlassBlock(glassProps().allowsSpawning(neverAllowSpawn)); + }).rendering(new BlockRenderingCustomizer() { + @Override + @Environment(EnvType.CLIENT) + public void customize(IBlockRendering rendering, IItemRendering itemRendering) { + rendering.renderType(RenderLayer.getCutout()); + } + }).build(); this.quartzVibrantGlass = deco - .block("quartz_vibrant_glass", () -> new QuartzLampBlock(glassProps().lightLevel(15))) + .block("quartz_vibrant_glass", () -> new QuartzLampBlock(glassProps().lightLevel(15).allowsSpawning(neverAllowSpawn))) .addFeatures(AEFeature.DECORATIVE_LIGHTS, AEFeature.QUARTZ_GLASS) .rendering(new BlockRenderingCustomizer() { @Override diff --git a/src/main/java/appeng/core/features/registries/LocatableRegistry.java b/src/main/java/appeng/core/features/registries/LocatableRegistry.java index 970bab4f1..00eb737d2 100644 --- a/src/main/java/appeng/core/features/registries/LocatableRegistry.java +++ b/src/main/java/appeng/core/features/registries/LocatableRegistry.java @@ -25,6 +25,7 @@ import appeng.api.events.LocatableEventAnnounce; import appeng.api.events.LocatableEventAnnounce.LocatableEvent; import appeng.api.features.ILocatable; import appeng.api.features.ILocatableRegistry; +import appeng.core.AELog; import appeng.util.Platform; public final class LocatableRegistry implements ILocatableRegistry { @@ -39,8 +40,10 @@ public final class LocatableRegistry implements ILocatableRegistry { } if (change == LocatableEvent.REGISTER) { - this.set.put(target.getLocatableSerial(), target); + AELog.debug("Registering locatable %s: %s", target.getLocatableSerial(), target); + this.set.put(target.getLocatableSerial(), target); } else if (change == LocatableEvent.UNREGISTER) { + AELog.debug("Unregistering locatable %s: %s", target.getLocatableSerial(), target); this.set.remove(target.getLocatableSerial()); } }); diff --git a/src/main/java/appeng/decorative/solid/QuartzGlassBlock.java b/src/main/java/appeng/decorative/solid/QuartzGlassBlock.java index d14a1916c..b0c7f8e12 100644 --- a/src/main/java/appeng/decorative/solid/QuartzGlassBlock.java +++ b/src/main/java/appeng/decorative/solid/QuartzGlassBlock.java @@ -23,8 +23,6 @@ import net.minecraft.block.BlockState; import net.minecraft.block.Material; import net.minecraft.util.math.Direction; -import appeng.helpers.AEMaterials; - public class QuartzGlassBlock extends AbstractGlassBlock { public QuartzGlassBlock(Settings props) { @@ -33,8 +31,7 @@ public class QuartzGlassBlock extends AbstractGlassBlock { @Override public boolean isSideInvisible(BlockState state, BlockState adjacentBlockState, Direction side) { - final Material mat = adjacentBlockState.getMaterial(); - if (mat == Material.GLASS || mat == AEMaterials.GLASS) { + if (adjacentBlockState.getBlock() instanceof QuartzGlassBlock) { if (adjacentBlockState.getRenderType() == state.getRenderType()) { return true; } diff --git a/src/main/java/appeng/entity/GrowingCrystalEntity.java b/src/main/java/appeng/entity/GrowingCrystalEntity.java index 138cdb57b..dfd3d7ff6 100644 --- a/src/main/java/appeng/entity/GrowingCrystalEntity.java +++ b/src/main/java/appeng/entity/GrowingCrystalEntity.java @@ -26,6 +26,7 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.vector.Vector3d; import net.minecraft.world.World; import appeng.api.features.AEFeature; @@ -42,6 +43,22 @@ public class GrowingCrystalEntity extends AEBaseItemEntity { public static EntityType TYPE; + // Growth tick progress per tick by number of adjacent accelerators + // Expressed as 1/1000th of a growth tick, applied to progress_1000 + // each time this entity ticks. + private static final int[] GROWTH_TICK_PROGRESS = { 1, // no accelerators + 40, // 1 accelerator + 92, // 2 accelerators + 159, // 3 accelerators + 247, // 4 accelerators + 361, // 5 accelerators + 509 // 6 accelerators + }; + + /** + * The accumulated progress towards a single growth tick of the crystal in + * 1/1000th of a growth tick. + */ private int progress_1000 = 0; public GrowingCrystalEntity(EntityType type, World world) { @@ -62,126 +79,140 @@ public class GrowingCrystalEntity extends AEBaseItemEntity { super.tick(); + final ItemStack is = this.getStack(); + final Item gc = is.getItem(); + + if (!(gc instanceof IGrowableCrystal)) { + return; + } + + applyGrowthTick((IGrowableCrystal) gc, is); + } + + private void applyGrowthTick(IGrowableCrystal cry, ItemStack is) { if (!AEConfig.instance().isFeatureEnabled(AEFeature.IN_WORLD_PURIFICATION)) { return; } - final ItemStack is = this.getStack(); - final Item gc = is.getItem(); + final int x = MathHelper.floor(this.getPosX()); + final int y = MathHelper.floor((this.getBoundingBox().minY + this.getBoundingBox().maxY) / 2.0D); + final int z = MathHelper.floor(this.getPosZ()); - if (gc instanceof IGrowableCrystal) // if it changes this just stops being an issue... - { - final int j = MathHelper.floor(this.getX()); - final int i = MathHelper.floor((this.getBoundingBox().minY + this.getBoundingBox().maxY) / 2.0D); - final int k = MathHelper.floor(this.getZ()); + BlockPos pos = new BlockPos(x, y, z); + final BlockState state = this.world.getBlockState(pos); - final BlockState state = this.world.getBlockState(new BlockPos(j, i, k)); - final Material mat = state.getMaterial(); - final IGrowableCrystal cry = (IGrowableCrystal) is.getItem(); + final float multiplier = cry.getMultiplier(state, world, pos); - final float multiplier = cry.getMultiplier(state.getBlock(), mat); - final int speed = (int) Math.max(1, this.getSpeed(j, i, k) * multiplier); + if (multiplier <= 0) { + // Crystal is in unsuitable material, reset progress and quit + this.progress_1000 = 0; + return; + } - final boolean isClient = Platform.isClient(); + final int progressPerTick = (int) Math.max(1, this.getSpeed(pos) * multiplier); - if (mat.isLiquid()) { - if (isClient) { - this.progress_1000++; - } else { - this.progress_1000 += speed; - } - } else { + if (world.isRemote()) { + // On the client, we reuse the growth-tick-progress + // as a tick-counter for particle effects + int len = getTicksBetweenParticleEffects(progressPerTick); + if (++this.progress_1000 >= len) { this.progress_1000 = 0; + AppEng.instance().spawnEffect(EffectType.Vibrant, this.world, this.getX(), this.getY() + 0.2, + this.getZ(), null); } + } else { + this.progress_1000 += progressPerTick; - if (isClient) { - int len = 40; + if (this.progress_1000 >= 1000) { + // We need to copy the stack or the change detection will not work and not sync + // this new stack to the client + ItemStack newItem = is.copy(); - if (speed > 2) { - len = 20; - } - - if (speed > 90) { - len = 15; - } - - if (speed > 150) { - len = 10; - } - - if (speed > 240) { - len = 7; - } - - if (speed > 360) { - len = 3; - } - - if (speed > 500) { - len = 1; - } - - if (this.progress_1000 >= len) { - this.progress_1000 = 0; - AppEng.instance().spawnEffect(EffectType.Vibrant, this.world, this.getX(), this.getY() + 0.2, - this.getZ(), null); - } - } else { - if (this.progress_1000 > 1000) { + // If we did not use a while loop here, the fastest growth for a crystal + // would be limited to a minimum of 30 seconds (based on 600 required growth + // ticks). + // Should a crystal decide to use a high multiplier for a certain material, + // it should be possible to go faster. + do { + newItem = cry.triggerGrowth(newItem); this.progress_1000 -= 1000; - // We need to copy the stack or the change detection will not work and not sync - // this new stack to the client - ItemStack newItem = cry.triggerGrowth(is.copy()); - this.setStack(newItem); - } + // We assume that if the item changes, the process is complete and we can break + } while (this.progress_1000 >= 1000 && newItem.getItem() == is.getItem()); + + this.setStack(newItem); } } } - private int getSpeed(final int x, final int y, final int z) { - final int per = 80; - final float mul = 0.3f; - - int qty = 0; - - if (this.isAccelerated(x + 1, y, z)) { - qty += per + qty * mul; + private static int getTicksBetweenParticleEffects(int progressPerTick) { + if (progressPerTick > 500) { + return 1; // 20 times per second + } else if (progressPerTick > 360) { + return 3; + } else if (progressPerTick > 240) { + return 7; + } else if (progressPerTick > 150) { + return 10; + } else if (progressPerTick > 90) { + return 15; + } else if (progressPerTick > 2) { + return 20; + } else { + return 40; // Every 2 seconds } - - if (this.isAccelerated(x, y + 1, z)) { - qty += per + qty * mul; - } - - if (this.isAccelerated(x, y, z + 1)) { - qty += per + qty * mul; - } - - if (this.isAccelerated(x - 1, y, z)) { - qty += per + qty * mul; - } - - if (this.isAccelerated(x, y - 1, z)) { - qty += per + qty * mul; - } - - if (this.isAccelerated(x, y, z - 1)) { - qty += per + qty * mul; - } - - return qty; } - private boolean isAccelerated(final int x, final int y, final int z) { - final BlockEntity te = this.world.getBlockEntity(new BlockPos(x, y, z)); + /** + * Gets the extra progress per tick in 1/1000th of a growth tick based on the + * surrounding accelerators. + */ + private int getSpeed(BlockPos pos) { + int acceleratorCount = getAcceleratorCount(pos); + + if (acceleratorCount < 0) { + return GROWTH_TICK_PROGRESS[0]; + } else if (acceleratorCount >= GROWTH_TICK_PROGRESS.length) { + return GROWTH_TICK_PROGRESS[GROWTH_TICK_PROGRESS.length - 1]; + } else { + return GROWTH_TICK_PROGRESS[acceleratorCount]; + } + } + + private int getAcceleratorCount(BlockPos pos) { + int count = 0; + + BlockPos.Mutable testPos = new BlockPos.Mutable(); + for (Direction direction : Direction.values()) { + if (this.isPoweredAccelerator(testPos.func_239622_a_(pos, direction))) { + count++; + } + } + + return count; + } + + private boolean isPoweredAccelerator(BlockPos pos) { + final BlockEntity te = this.world.getBlockEntity(pos); return te instanceof ICrystalGrowthAccelerator && ((ICrystalGrowthAccelerator) te).isPowered(); } - // Don't let seeds "float" on water surface @Override public void applyBuoyancy() { ItemStack item = getStack(); + + // Make ungrown seeds sink, and fully grown seeds bouyant allowing for + // automation based around dropping seeds between 5 CGAs, then catchiung + // them on their way up. if (item.getItem() instanceof CrystalSeedItem) { + Vector3d v = this.getMotion(); + + // Apply a much smaller acceleration to make them slowly sink + double yAccel = this.hasNoGravity() ? 0 : -0.002; + + // Apply the x/z slow-down, and the y acceleration + this.setMotion(v.x * 0.99, v.y + yAccel, v.z * 0.99); + return; } super.applyBuoyancy(); diff --git a/src/main/java/appeng/fluids/parts/FluidImportBusPart.java b/src/main/java/appeng/fluids/parts/FluidImportBusPart.java index 4d3c9aa59..86f516c8c 100644 --- a/src/main/java/appeng/fluids/parts/FluidImportBusPart.java +++ b/src/main/java/appeng/fluids/parts/FluidImportBusPart.java @@ -141,10 +141,10 @@ public class FluidImportBusPart extends SharedFluidBusPart { return TickRateModulation.IDLE; } catch (GridAccessException e) { - e.printStackTrace(); + // skip + } } } - return TickRateModulation.SLEEP; } diff --git a/src/main/java/appeng/items/misc/CrystalSeedItem.java b/src/main/java/appeng/items/misc/CrystalSeedItem.java index dc1204dc3..208495829 100644 --- a/src/main/java/appeng/items/misc/CrystalSeedItem.java +++ b/src/main/java/appeng/items/misc/CrystalSeedItem.java @@ -26,7 +26,6 @@ import com.google.common.base.Preconditions; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; -import net.minecraft.block.Block; import net.minecraft.block.Material; import net.minecraft.client.item.TooltipContext; import net.minecraft.entity.Entity; @@ -39,10 +38,12 @@ import net.minecraft.server.world.ServerWorld; import net.minecraft.text.LiteralText; import net.minecraft.text.Text; import net.minecraft.util.collection.DefaultedList; +import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.MathHelper; import net.minecraft.world.World; import appeng.api.implementations.items.IGrowableCrystal; +import appeng.core.AEConfig; import appeng.core.localization.ButtonToolTips; import appeng.entity.GrowingCrystalEntity; import appeng.hooks.AECustomEntityItem; @@ -97,8 +98,24 @@ public class CrystalSeedItem extends AEBaseItem implements IGrowableCrystal, AEC } @Override - public float getMultiplier(final Block blk, final Material mat) { - return 0.5f; + public float getMultiplier(BlockState state, @Nullable World world, @Nullable BlockPos pos) { + + // Check for the improved fluid tag and return the improved multiplier + String improvedFluidTagName = AEConfig.instance().getImprovedFluidTag(); + if (improvedFluidTagName != null) { + ITag tag = FluidTags.getCollection().get(new ResourceLocation(improvedFluidTagName)); + if (tag != null && state.getFluidState().isTagged(tag)) { + return AEConfig.instance().getImprovedFluidMultiplier(); + } + } + + // Check for the normal supported fluid + if (world != null && world.func_234923_W_() == World.field_234919_h_) { + // In the nether, use Lava as the "normal" fluid + return state.getFluidState().isTagged(FluidTags.LAVA) ? 1 : 0; + } else { + return state.getFluidState().isTagged(FluidTags.WATER) ? 1 : 0; + } } @Override diff --git a/src/main/java/appeng/items/tools/powered/ColorApplicatorItem.java b/src/main/java/appeng/items/tools/powered/ColorApplicatorItem.java index c619c3e5b..fca14f583 100644 --- a/src/main/java/appeng/items/tools/powered/ColorApplicatorItem.java +++ b/src/main/java/appeng/items/tools/powered/ColorApplicatorItem.java @@ -320,21 +320,21 @@ public class ColorApplicatorItem extends AEBasePoweredItem return w.setBlockState(pos, newState); } + if (blk instanceof CableBusBlock && p != null) { + return ((CableBusBlock) blk).recolorBlock(w, pos, side, newColor.dye, p); + } + BlockEntity be = w.getBlockEntity(pos); if (be instanceof IColorableTile) { IColorableTile ct = (IColorableTile) be; AEColor c = ct.getColor(); if (c != newColor) { - ct.recolourBlock(side, newColor, null); + ct.recolourBlock(side, newColor, p); return true; } return false; } - if (blk instanceof CableBusBlock && p != null) { - return ((CableBusBlock) blk).recolorBlock(w, pos, side, newColor.dye, p); - } - return false; } diff --git a/src/main/java/appeng/me/cluster/implementations/QuantumCluster.java b/src/main/java/appeng/me/cluster/implementations/QuantumCluster.java index e88a35351..2767c22de 100644 --- a/src/main/java/appeng/me/cluster/implementations/QuantumCluster.java +++ b/src/main/java/appeng/me/cluster/implementations/QuantumCluster.java @@ -22,7 +22,6 @@ import java.util.Iterator; import net.minecraft.block.entity.BlockEntity; import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.ChunkPos; import net.minecraft.world.World; import appeng.api.events.LocatableEventAnnounce; @@ -157,12 +156,16 @@ public class QuantumCluster implements ILocatable, IAECluster { if (qc != null) { final World theWorld = qc.center.getWorld(); if (!qc.isDestroyed) { - ChunkPos cPos = new ChunkPos(qc.center.getPos()); - if (theWorld.getChunkManager().isChunkLoaded(cPos.x, cPos.z)) { + // In future versions, we might actually want to delay the entire registration + // until the center + // tile begins ticking normally. + if (theWorld.isBlockLoaded(qc.center.getPos())) { final World cur = theWorld.getServer().getWorld(theWorld.getRegistryKey()); final BlockEntity te = theWorld.getBlockEntity(qc.center.getPos()); return te != qc.center || theWorld != cur; + } else { + AELog.warn("Found a registered QNB with serial %s whose chunk seems to be unloaded: %s", qe, qc); } } } @@ -275,4 +278,17 @@ public class QuantumCluster implements ILocatable, IAECluster { private void setRing(final QuantumBridgeBlockEntity[] ring) { this.Ring = ring; } + + @Override + public String toString() { + if (center == null) { + return "QuantumCluster{no-center}"; + } + + World world = center.getWorld(); + BlockPos pos = center.getPos(); + + return "QuantumCluster{" + world + "," + pos + "}"; + } + } diff --git a/src/main/java/appeng/parts/CableBusContainer.java b/src/main/java/appeng/parts/CableBusContainer.java index 894f76f8e..109417047 100644 --- a/src/main/java/appeng/parts/CableBusContainer.java +++ b/src/main/java/appeng/parts/CableBusContainer.java @@ -82,7 +82,6 @@ public class CableBusContainer extends CableBusStorage implements AEMultiTile, I private final EnumSet myLayerFlags = EnumSet.noneOf(LayerFlags.class); private YesNo hasRedstone = YesNo.UNDECIDED; private IPartHost tcb; - // TODO 1.10.2-R - does somebody seriously want to make parts TESR??? Hope not. private boolean requiresDynamicRender = false; private boolean inWorld = false; // Cached collision shape for living entities @@ -1095,11 +1094,7 @@ public class CableBusContainer extends CableBusStorage implements AEMultiTile, I } } - VoxelShape shape = VoxelShapes.empty(); - for (final Box bx : boxes) { - shape = VoxelShapes.union(shape, VoxelShapes.cuboid(bx)); - } - return shape; + return VoxelShapeCache.get(boxes); } private void invalidateShapes() { diff --git a/src/main/java/appeng/parts/VoxelShapeCache.java b/src/main/java/appeng/parts/VoxelShapeCache.java new file mode 100644 index 000000000..52b28f3ac --- /dev/null +++ b/src/main/java/appeng/parts/VoxelShapeCache.java @@ -0,0 +1,81 @@ +/* + * This file is part of Applied Energistics 2. + * Copyright (c) 2013 - 2015, AlgorithmX2, All rights reserved. + * + * Applied Energistics 2 is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Applied Energistics 2 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Applied Energistics 2. If not, see . + */ + +package appeng.parts; + +import java.util.List; + +import com.google.common.cache.CacheBuilder; +import com.google.common.cache.CacheLoader; +import com.google.common.cache.LoadingCache; + +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.shapes.IBooleanFunction; +import net.minecraft.util.math.shapes.VoxelShape; +import net.minecraft.util.math.shapes.VoxelShapes; + +/** + * While creation of a {@link VoxelShape} with + * {@link VoxelShapes#create(AxisAlignedBB)} is fast enough, combining voxel + * shapes with {@link VoxelShapes#or(VoxelShape, VoxelShape)} or any other + * combination method, as well as {@link VoxelShape#simplify()} are extremely + * slow. For example: Creating a VoxelShape for a list of 5 bounding boxes + * 10,000 times takes about 1.7 seconds. + * + *

+ * To reduce the impact of this on cables, we introduce a global voxel shape + * cache so that cables can share their combined voxel shapes better. + */ +final class VoxelShapeCache { + + // Why using a List here should not make much of a difference vs. using a Set: + // The part's bounding box depends on the side it is attached to, and the sides + // are iterated over in a fixed order, meaning the order of bounding boxes + // should + // be the same for a same set of parts. + private static final LoadingCache, VoxelShape> CACHE = CacheBuilder.newBuilder()// + .maximumSize(10000L)// + .build(new CacheLoader, VoxelShape>() { + @Override + public VoxelShape load(List key) { + return create(key); + } + }); + + private VoxelShapeCache() { + } + + public static VoxelShape get(List boxes) { + return CACHE.getUnchecked(boxes); + } + + private static VoxelShape create(List boxes) { + if (boxes.isEmpty()) { + return VoxelShapes.empty(); + } + + int i = 0; + VoxelShape shape = VoxelShapes.create(boxes.get(i)); + for (; i < boxes.size(); i++) { + AxisAlignedBB box = boxes.get(i); + shape = VoxelShapes.combine(shape, VoxelShapes.create(box), IBooleanFunction.OR); + } + return shape.simplify(); + } + +} diff --git a/src/main/java/appeng/tile/AEBaseBlockEntity.java b/src/main/java/appeng/tile/AEBaseBlockEntity.java index d098fdb64..6ceb2570b 100644 --- a/src/main/java/appeng/tile/AEBaseBlockEntity.java +++ b/src/main/java/appeng/tile/AEBaseBlockEntity.java @@ -250,7 +250,7 @@ public class AEBaseBlockEntity extends BlockEntity implements IOrientable, IComm this.renderFragment |= 1; } else { // TODO: Optimize Network Load - if (this.world != null) { + if (this.world != null && !this.isRemoved() && !notLoaded()) { boolean alreadyUpdated = false; // Let the block update it's own state with our internal state changes BlockState currentState = getCachedState(); diff --git a/src/main/resources/data/appliedenergistics2/advancements/main/facade.json b/src/main/resources/data/appliedenergistics2/advancements/main/facade.json index d47b45694..530163012 100644 --- a/src/main/resources/data/appliedenergistics2/advancements/main/facade.json +++ b/src/main/resources/data/appliedenergistics2/advancements/main/facade.json @@ -1,7 +1,8 @@ { "display": { "icon": { - "item": "appliedenergistics2:facade" + "item": "appliedenergistics2:facade", + "nbt": "{item:\"minecraft:stone\"}" }, "title": { "translate": "achievement.ae2.Facade" diff --git a/src/test/resources/appeng/services/version/releases.json b/src/test/resources/appeng/services/version/releases.json deleted file mode 100644 index 8f8e00ef7..000000000 --- a/src/test/resources/appeng/services/version/releases.json +++ /dev/null @@ -1,1028 +0,0 @@ -[ - { - "url": "https://api.github.com/repos/AppliedEnergistics/Applied-Energistics-2/releases/1053651", - "assets_url": "https://api.github.com/repos/AppliedEnergistics/Applied-Energistics-2/releases/1053651/assets", - "upload_url": "https://uploads.github.com/repos/AppliedEnergistics/Applied-Energistics-2/releases/1053651/assets{?name}", - "html_url": "https://github.com/AppliedEnergistics/Applied-Energistics-2/releases/tag/rv2.beta.12", - "id": 1053651, - "tag_name": "rv2.beta.12", - "target_commitish": "4744dfab789b778c5c255a268ef4f1d4a01cca9c", - "name": "Build rv2.beta.12", - "draft": false, - "author": { - "login": "AlgorithmX2", - "id": 2846930, - "avatar_url": "https://avatars.githubusercontent.com/u/2846930?v=3", - "gravatar_id": "", - "url": "https://api.github.com/users/AlgorithmX2", - "html_url": "https://github.com/AlgorithmX2", - "followers_url": "https://api.github.com/users/AlgorithmX2/followers", - "following_url": "https://api.github.com/users/AlgorithmX2/following{/other_user}", - "gists_url": "https://api.github.com/users/AlgorithmX2/gists{/gist_id}", - "starred_url": "https://api.github.com/users/AlgorithmX2/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/AlgorithmX2/subscriptions", - "organizations_url": "https://api.github.com/users/AlgorithmX2/orgs", - "repos_url": "https://api.github.com/users/AlgorithmX2/repos", - "events_url": "https://api.github.com/users/AlgorithmX2/events{/privacy}", - "received_events_url": "https://api.github.com/users/AlgorithmX2/received_events", - "type": "User", - "site_admin": false - }, - "prerelease": true, - "created_at": "2015-03-15T17:38:03Z", - "published_at": "2015-03-16T06:32:39Z", - "assets": [], - "tarball_url": "https://api.github.com/repos/AppliedEnergistics/Applied-Energistics-2/tarball/rv2.beta.12", - "zipball_url": "https://api.github.com/repos/AppliedEnergistics/Applied-Energistics-2/zipball/rv2.beta.12", - "body": "Fixes #1024 Added zinc to the grindstone - thatsIch\r\n\r\nUpdate zh_CN.lang - bakaxyf" - }, - { - "url": "https://api.github.com/repos/AppliedEnergistics/Applied-Energistics-2/releases/1051116", - "assets_url": "https://api.github.com/repos/AppliedEnergistics/Applied-Energistics-2/releases/1051116/assets", - "upload_url": "https://uploads.github.com/repos/AppliedEnergistics/Applied-Energistics-2/releases/1051116/assets{?name}", - "html_url": "https://github.com/AppliedEnergistics/Applied-Energistics-2/releases/tag/rv2.beta.11", - "id": 1051116, - "tag_name": "rv2.beta.11", - "target_commitish": "ece09a956bdd0fdf3cc0074ffeed5efbdf3a37a4", - "name": "Build rv2.beta.11", - "draft": false, - "author": { - "login": "AlgorithmX2", - "id": 2846930, - "avatar_url": "https://avatars.githubusercontent.com/u/2846930?v=3", - "gravatar_id": "", - "url": "https://api.github.com/users/AlgorithmX2", - "html_url": "https://github.com/AlgorithmX2", - "followers_url": "https://api.github.com/users/AlgorithmX2/followers", - "following_url": "https://api.github.com/users/AlgorithmX2/following{/other_user}", - "gists_url": "https://api.github.com/users/AlgorithmX2/gists{/gist_id}", - "starred_url": "https://api.github.com/users/AlgorithmX2/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/AlgorithmX2/subscriptions", - "organizations_url": "https://api.github.com/users/AlgorithmX2/orgs", - "repos_url": "https://api.github.com/users/AlgorithmX2/repos", - "events_url": "https://api.github.com/users/AlgorithmX2/events{/privacy}", - "received_events_url": "https://api.github.com/users/AlgorithmX2/received_events", - "type": "User", - "site_admin": false - }, - "prerelease": true, - "created_at": "2015-03-13T22:49:12Z", - "published_at": "2015-03-14T23:53:49Z", - "assets": [], - "tarball_url": "https://api.github.com/repos/AppliedEnergistics/Applied-Energistics-2/tarball/rv2.beta.11", - "zipball_url": "https://api.github.com/repos/AppliedEnergistics/Applied-Energistics-2/zipball/rv2.beta.11", - "body": "Fixes #1015 Pattern terminal destroying a single item when not able to satisfy a NEI recipe - yueh\r\n\r\nFixes #1011 skip null values returned by the oredictionary - yueh\r\n\r\nUpdate zh_CN.lang - bakaxyf" - }, - { - "url": "https://api.github.com/repos/AppliedEnergistics/Applied-Energistics-2/releases/1038746", - "assets_url": "https://api.github.com/repos/AppliedEnergistics/Applied-Energistics-2/releases/1038746/assets", - "upload_url": "https://uploads.github.com/repos/AppliedEnergistics/Applied-Energistics-2/releases/1038746/assets{?name}", - "html_url": "https://github.com/AppliedEnergistics/Applied-Energistics-2/releases/tag/rv2.beta.10", - "id": 1038746, - "tag_name": "rv2.beta.10", - "target_commitish": "8ec9bb8b3b18a9fb4f350e326b267ff35c434217", - "name": "Build rv2.beta.10", - "draft": false, - "author": { - "login": "AlgorithmX2", - "id": 2846930, - "avatar_url": "https://avatars.githubusercontent.com/u/2846930?v=3", - "gravatar_id": "", - "url": "https://api.github.com/users/AlgorithmX2", - "html_url": "https://github.com/AlgorithmX2", - "followers_url": "https://api.github.com/users/AlgorithmX2/followers", - "following_url": "https://api.github.com/users/AlgorithmX2/following{/other_user}", - "gists_url": "https://api.github.com/users/AlgorithmX2/gists{/gist_id}", - "starred_url": "https://api.github.com/users/AlgorithmX2/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/AlgorithmX2/subscriptions", - "organizations_url": "https://api.github.com/users/AlgorithmX2/orgs", - "repos_url": "https://api.github.com/users/AlgorithmX2/repos", - "events_url": "https://api.github.com/users/AlgorithmX2/events{/privacy}", - "received_events_url": "https://api.github.com/users/AlgorithmX2/received_events", - "type": "User", - "site_admin": false - }, - "prerelease": true, - "created_at": "2015-03-11T15:40:32Z", - "published_at": "2015-03-11T15:53:37Z", - "assets": [], - "tarball_url": "https://api.github.com/repos/AppliedEnergistics/Applied-Energistics-2/tarball/rv2.beta.10", - "zipball_url": "https://api.github.com/repos/AppliedEnergistics/Applied-Energistics-2/zipball/rv2.beta.10", - "body": "Fixes #861 Wireless Terminal notifies player, if it is unlinked - thatsIch\r\n\r\nFixes #920 Increased GUI close distance to match Vanilla MC distance - thatsIch\r\n\r\nFixes #743 Crash with BC plugs\r\n\r\nFixes #942 BC builder can build AE networks again\r\n\r\nUpdate #319 Now compiled against BC 6.4.2, with that MJ is gone" - }, - { - "url": "https://api.github.com/repos/AppliedEnergistics/Applied-Energistics-2/releases/1033060", - "assets_url": "https://api.github.com/repos/AppliedEnergistics/Applied-Energistics-2/releases/1033060/assets", - "upload_url": "https://uploads.github.com/repos/AppliedEnergistics/Applied-Energistics-2/releases/1033060/assets{?name}", - "html_url": "https://github.com/AppliedEnergistics/Applied-Energistics-2/releases/tag/rv2.beta.9", - "id": 1033060, - "tag_name": "rv2.beta.9", - "target_commitish": "3675f154d1f3af7cf34c52816f7014c74e7031b7", - "name": "Build rv2.beta.9", - "draft": false, - "author": { - "login": "AlgorithmX2", - "id": 2846930, - "avatar_url": "https://avatars.githubusercontent.com/u/2846930?v=3", - "gravatar_id": "", - "url": "https://api.github.com/users/AlgorithmX2", - "html_url": "https://github.com/AlgorithmX2", - "followers_url": "https://api.github.com/users/AlgorithmX2/followers", - "following_url": "https://api.github.com/users/AlgorithmX2/following{/other_user}", - "gists_url": "https://api.github.com/users/AlgorithmX2/gists{/gist_id}", - "starred_url": "https://api.github.com/users/AlgorithmX2/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/AlgorithmX2/subscriptions", - "organizations_url": "https://api.github.com/users/AlgorithmX2/orgs", - "repos_url": "https://api.github.com/users/AlgorithmX2/repos", - "events_url": "https://api.github.com/users/AlgorithmX2/events{/privacy}", - "received_events_url": "https://api.github.com/users/AlgorithmX2/received_events", - "type": "User", - "site_admin": false - }, - "prerelease": true, - "created_at": "2015-03-09T14:05:21Z", - "published_at": "2015-03-10T09:42:09Z", - "assets": [], - "tarball_url": "https://api.github.com/repos/AppliedEnergistics/Applied-Energistics-2/tarball/rv2.beta.9", - "zipball_url": "https://api.github.com/repos/AppliedEnergistics/Applied-Energistics-2/zipball/rv2.beta.9", - "body": "Enhancement #817 Crafting CPU GUI now shows a green background on items being crafted, and a yellow background on scheduled items - Eearslya\r\n\r\nEnhancement Added an option to disable the colored crafting status - yueh\r\n\r\nEnhancement Added more information to the security audit - yueh\r\n\r\nEnhancement Improved performance - yueh\r\n\r\nFixes #972 Level Emitter tool-tip now corresponds to the actual behavior - thatsIch\r\n\r\nFixes #982 Auto-crafting lag reduced - yueh\r\n\r\nFixes #910 Dense cables render correctly with FMP now - yueh\r\n\r\nFixes #943 Reduced lag when breaking multiple blocks at once using Annihilation Plane - yueh\r\n\r\nFixes cable render crash and covered cables render as smart - yueh\r\n\r\nUpdate fr_FR.lang - Mazdallier\r\n\r\nUpdate zh_CN.lang - bakaxyf\r\n\r\nUpdated Texture / Model License to be more specific - AlgorithmX2\r\n\r\nUpdated Forge to recommended 10.13.2.1291 and other dependencies - yueh" - }, - { - "url": "https://api.github.com/repos/AppliedEnergistics/Applied-Energistics-2/releases/881276", - "assets_url": "https://api.github.com/repos/AppliedEnergistics/Applied-Energistics-2/releases/881276/assets", - "upload_url": "https://uploads.github.com/repos/AppliedEnergistics/Applied-Energistics-2/releases/881276/assets{?name}", - "html_url": "https://github.com/AppliedEnergistics/Applied-Energistics-2/releases/tag/rv2.beta.8", - "id": 881276, - "tag_name": "rv2.beta.8", - "target_commitish": "ef3cb0a4559ababe53cd7f45123e7b28719d06b7", - "name": "Build rv2.beta.8", - "draft": false, - "author": { - "login": "AlgorithmX2", - "id": 2846930, - "avatar_url": "https://avatars.githubusercontent.com/u/2846930?v=3", - "gravatar_id": "", - "url": "https://api.github.com/users/AlgorithmX2", - "html_url": "https://github.com/AlgorithmX2", - "followers_url": "https://api.github.com/users/AlgorithmX2/followers", - "following_url": "https://api.github.com/users/AlgorithmX2/following{/other_user}", - "gists_url": "https://api.github.com/users/AlgorithmX2/gists{/gist_id}", - "starred_url": "https://api.github.com/users/AlgorithmX2/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/AlgorithmX2/subscriptions", - "organizations_url": "https://api.github.com/users/AlgorithmX2/orgs", - "repos_url": "https://api.github.com/users/AlgorithmX2/repos", - "events_url": "https://api.github.com/users/AlgorithmX2/events{/privacy}", - "received_events_url": "https://api.github.com/users/AlgorithmX2/received_events", - "type": "User", - "site_admin": false - }, - "prerelease": true, - "created_at": "2015-01-22T16:05:23Z", - "published_at": "2015-01-24T16:46:55Z", - "assets": [], - "tarball_url": "https://api.github.com/repos/AppliedEnergistics/Applied-Energistics-2/tarball/rv2.beta.8", - "zipball_url": "https://api.github.com/repos/AppliedEnergistics/Applied-Energistics-2/zipball/rv2.beta.8", - "body": "Update pt_BR.lang - al-myr\r\n\r\nImproved the logged warning for FailledConnection Now displays to coordinates of the affected tunnels. - yueh\r\n\r\nFix #701 - Changed harvest tool to axe - TheJulianJES\r\n\r\nFormation plane can now drop blocks as items - yueh\r\n\r\nDisable level emitter on offline networks Turns off level emitters if the goes offline because it runs out of power, channels or similar. - yueh\r\n\r\nFixes #304 WAILA Integration updated and fixed WAILA offers a new interface to sync the server data to the client. - thatsIch\r\n\r\nRemoved buffer from annihilation plane - yueh\r\n\r\nEffects should not collide with anything - yueh\r\n\r\nImprove code quality - thatsIch" - }, - { - "url": "https://api.github.com/repos/AppliedEnergistics/Applied-Energistics-2/releases/818857", - "assets_url": "https://api.github.com/repos/AppliedEnergistics/Applied-Energistics-2/releases/818857/assets", - "upload_url": "https://uploads.github.com/repos/AppliedEnergistics/Applied-Energistics-2/releases/818857/assets{?name}", - "html_url": "https://github.com/AppliedEnergistics/Applied-Energistics-2/releases/tag/rv2.beta.7", - "id": 818857, - "tag_name": "rv2.beta.7", - "target_commitish": "15ba1970837804dc34de3cdae037fca511103f15", - "name": "Build rv2.beta.7", - "draft": false, - "author": { - "login": "AlgorithmX2", - "id": 2846930, - "avatar_url": "https://avatars.githubusercontent.com/u/2846930?v=3", - "gravatar_id": "", - "url": "https://api.github.com/users/AlgorithmX2", - "html_url": "https://github.com/AlgorithmX2", - "followers_url": "https://api.github.com/users/AlgorithmX2/followers", - "following_url": "https://api.github.com/users/AlgorithmX2/following{/other_user}", - "gists_url": "https://api.github.com/users/AlgorithmX2/gists{/gist_id}", - "starred_url": "https://api.github.com/users/AlgorithmX2/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/AlgorithmX2/subscriptions", - "organizations_url": "https://api.github.com/users/AlgorithmX2/orgs", - "repos_url": "https://api.github.com/users/AlgorithmX2/repos", - "events_url": "https://api.github.com/users/AlgorithmX2/events{/privacy}", - "received_events_url": "https://api.github.com/users/AlgorithmX2/received_events", - "type": "User", - "site_admin": false - }, - "prerelease": true, - "created_at": "2015-01-01T14:35:57Z", - "published_at": "2015-01-01T17:56:50Z", - "assets": [], - "tarball_url": "https://api.github.com/repos/AppliedEnergistics/Applied-Energistics-2/tarball/rv2.beta.7", - "zipball_url": "https://api.github.com/repos/AppliedEnergistics/Applied-Energistics-2/zipball/rv2.beta.7", - "body": "Fixes #666 vanishing microblocks with Immibis-Microblocks - yueh" - }, - { - "url": "https://api.github.com/repos/AppliedEnergistics/Applied-Energistics-2/releases/816514", - "assets_url": "https://api.github.com/repos/AppliedEnergistics/Applied-Energistics-2/releases/816514/assets", - "upload_url": "https://uploads.github.com/repos/AppliedEnergistics/Applied-Energistics-2/releases/816514/assets{?name}", - "html_url": "https://github.com/AppliedEnergistics/Applied-Energistics-2/releases/tag/rv2.beta.6", - "id": 816514, - "tag_name": "rv2.beta.6", - "target_commitish": "305fc6c7f2c85afa05e37e127098fc3e0330a9c2", - "name": "Build rv2.beta.6", - "draft": false, - "author": { - "login": "AlgorithmX2", - "id": 2846930, - "avatar_url": "https://avatars.githubusercontent.com/u/2846930?v=3", - "gravatar_id": "", - "url": "https://api.github.com/users/AlgorithmX2", - "html_url": "https://github.com/AlgorithmX2", - "followers_url": "https://api.github.com/users/AlgorithmX2/followers", - "following_url": "https://api.github.com/users/AlgorithmX2/following{/other_user}", - "gists_url": "https://api.github.com/users/AlgorithmX2/gists{/gist_id}", - "starred_url": "https://api.github.com/users/AlgorithmX2/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/AlgorithmX2/subscriptions", - "organizations_url": "https://api.github.com/users/AlgorithmX2/orgs", - "repos_url": "https://api.github.com/users/AlgorithmX2/repos", - "events_url": "https://api.github.com/users/AlgorithmX2/events{/privacy}", - "received_events_url": "https://api.github.com/users/AlgorithmX2/received_events", - "type": "User", - "site_admin": false - }, - "prerelease": true, - "created_at": "2014-12-30T22:34:57Z", - "published_at": "2014-12-30T22:40:56Z", - "assets": [ - { - "url": "https://api.github.com/repos/AppliedEnergistics/Applied-Energistics-2/releases/assets/361179", - "id": 361179, - "name": "appliedenergistics2-rv2-beta-6-api.jar", - "label": null, - "uploader": { - "login": "yueh", - "id": 151949, - "avatar_url": "https://avatars.githubusercontent.com/u/151949?v=3", - "gravatar_id": "", - "url": "https://api.github.com/users/yueh", - "html_url": "https://github.com/yueh", - "followers_url": "https://api.github.com/users/yueh/followers", - "following_url": "https://api.github.com/users/yueh/following{/other_user}", - "gists_url": "https://api.github.com/users/yueh/gists{/gist_id}", - "starred_url": "https://api.github.com/users/yueh/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/yueh/subscriptions", - "organizations_url": "https://api.github.com/users/yueh/orgs", - "repos_url": "https://api.github.com/users/yueh/repos", - "events_url": "https://api.github.com/users/yueh/events{/privacy}", - "received_events_url": "https://api.github.com/users/yueh/received_events", - "type": "User", - "site_admin": false - }, - "content_type": "application/octet-stream", - "state": "uploaded", - "size": 264460, - "download_count": 2, - "created_at": "2014-12-30T22:42:44Z", - "updated_at": "2014-12-30T22:42:44Z", - "browser_download_url": "https://github.com/AppliedEnergistics/Applied-Energistics-2/releases/download/rv2.beta.6/appliedenergistics2-rv2-beta-6-api.jar" - }, - { - "url": "https://api.github.com/repos/AppliedEnergistics/Applied-Energistics-2/releases/assets/361180", - "id": 361180, - "name": "appliedenergistics2-rv2-beta-6-dev.jar", - "label": null, - "uploader": { - "login": "yueh", - "id": 151949, - "avatar_url": "https://avatars.githubusercontent.com/u/151949?v=3", - "gravatar_id": "", - "url": "https://api.github.com/users/yueh", - "html_url": "https://github.com/yueh", - "followers_url": "https://api.github.com/users/yueh/followers", - "following_url": "https://api.github.com/users/yueh/following{/other_user}", - "gists_url": "https://api.github.com/users/yueh/gists{/gist_id}", - "starred_url": "https://api.github.com/users/yueh/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/yueh/subscriptions", - "organizations_url": "https://api.github.com/users/yueh/orgs", - "repos_url": "https://api.github.com/users/yueh/repos", - "events_url": "https://api.github.com/users/yueh/events{/privacy}", - "received_events_url": "https://api.github.com/users/yueh/received_events", - "type": "User", - "site_admin": false - }, - "content_type": "application/octet-stream", - "state": "uploaded", - "size": 2388010, - "download_count": 1, - "created_at": "2014-12-30T22:42:47Z", - "updated_at": "2014-12-30T22:42:48Z", - "browser_download_url": "https://github.com/AppliedEnergistics/Applied-Energistics-2/releases/download/rv2.beta.6/appliedenergistics2-rv2-beta-6-dev.jar" - }, - { - "url": "https://api.github.com/repos/AppliedEnergistics/Applied-Energistics-2/releases/assets/361178", - "id": 361178, - "name": "appliedenergistics2-rv2-beta-6.jar", - "label": null, - "uploader": { - "login": "yueh", - "id": 151949, - "avatar_url": "https://avatars.githubusercontent.com/u/151949?v=3", - "gravatar_id": "", - "url": "https://api.github.com/users/yueh", - "html_url": "https://github.com/yueh", - "followers_url": "https://api.github.com/users/yueh/followers", - "following_url": "https://api.github.com/users/yueh/following{/other_user}", - "gists_url": "https://api.github.com/users/yueh/gists{/gist_id}", - "starred_url": "https://api.github.com/users/yueh/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/yueh/subscriptions", - "organizations_url": "https://api.github.com/users/yueh/orgs", - "repos_url": "https://api.github.com/users/yueh/repos", - "events_url": "https://api.github.com/users/yueh/events{/privacy}", - "received_events_url": "https://api.github.com/users/yueh/received_events", - "type": "User", - "site_admin": false - }, - "content_type": "application/octet-stream", - "state": "uploaded", - "size": 2424995, - "download_count": 10, - "created_at": "2014-12-30T22:42:37Z", - "updated_at": "2014-12-30T22:42:39Z", - "browser_download_url": "https://github.com/AppliedEnergistics/Applied-Energistics-2/releases/download/rv2.beta.6/appliedenergistics2-rv2-beta-6.jar" - } - ], - "tarball_url": "https://api.github.com/repos/AppliedEnergistics/Applied-Energistics-2/tarball/rv2.beta.6", - "zipball_url": "https://api.github.com/repos/AppliedEnergistics/Applied-Energistics-2/zipball/rv2.beta.6", - "body": "Fixes #663 NPE on disabled Facades - thatsIch" - }, - { - "url": "https://api.github.com/repos/AppliedEnergistics/Applied-Energistics-2/releases/815358", - "assets_url": "https://api.github.com/repos/AppliedEnergistics/Applied-Energistics-2/releases/815358/assets", - "upload_url": "https://uploads.github.com/repos/AppliedEnergistics/Applied-Energistics-2/releases/815358/assets{?name}", - "html_url": "https://github.com/AppliedEnergistics/Applied-Energistics-2/releases/tag/rv2.beta.5", - "id": 815358, - "tag_name": "rv2.beta.5", - "target_commitish": "97dabc4a5cb2117f872946aea359dc49efa3b79b", - "name": "Build rv2.beta.5", - "draft": false, - "author": { - "login": "AlgorithmX2", - "id": 2846930, - "avatar_url": "https://avatars.githubusercontent.com/u/2846930?v=3", - "gravatar_id": "", - "url": "https://api.github.com/users/AlgorithmX2", - "html_url": "https://github.com/AlgorithmX2", - "followers_url": "https://api.github.com/users/AlgorithmX2/followers", - "following_url": "https://api.github.com/users/AlgorithmX2/following{/other_user}", - "gists_url": "https://api.github.com/users/AlgorithmX2/gists{/gist_id}", - "starred_url": "https://api.github.com/users/AlgorithmX2/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/AlgorithmX2/subscriptions", - "organizations_url": "https://api.github.com/users/AlgorithmX2/orgs", - "repos_url": "https://api.github.com/users/AlgorithmX2/repos", - "events_url": "https://api.github.com/users/AlgorithmX2/events{/privacy}", - "received_events_url": "https://api.github.com/users/AlgorithmX2/received_events", - "type": "User", - "site_admin": false - }, - "prerelease": true, - "created_at": "2014-12-30T13:06:08Z", - "published_at": "2014-12-30T13:31:11Z", - "assets": [ - { - "url": "https://api.github.com/repos/AppliedEnergistics/Applied-Energistics-2/releases/assets/360438", - "id": 360438, - "name": "appliedenergistics2-rv2-beta-5-api.jar", - "label": null, - "uploader": { - "login": "yueh", - "id": 151949, - "avatar_url": "https://avatars.githubusercontent.com/u/151949?v=3", - "gravatar_id": "", - "url": "https://api.github.com/users/yueh", - "html_url": "https://github.com/yueh", - "followers_url": "https://api.github.com/users/yueh/followers", - "following_url": "https://api.github.com/users/yueh/following{/other_user}", - "gists_url": "https://api.github.com/users/yueh/gists{/gist_id}", - "starred_url": "https://api.github.com/users/yueh/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/yueh/subscriptions", - "organizations_url": "https://api.github.com/users/yueh/orgs", - "repos_url": "https://api.github.com/users/yueh/repos", - "events_url": "https://api.github.com/users/yueh/events{/privacy}", - "received_events_url": "https://api.github.com/users/yueh/received_events", - "type": "User", - "site_admin": false - }, - "content_type": "application/octet-stream", - "state": "uploaded", - "size": 264460, - "download_count": 0, - "created_at": "2014-12-30T15:03:30Z", - "updated_at": "2014-12-30T15:03:30Z", - "browser_download_url": "https://github.com/AppliedEnergistics/Applied-Energistics-2/releases/download/rv2.beta.5/appliedenergistics2-rv2-beta-5-api.jar" - }, - { - "url": "https://api.github.com/repos/AppliedEnergistics/Applied-Energistics-2/releases/assets/360439", - "id": 360439, - "name": "appliedenergistics2-rv2-beta-5-dev.jar", - "label": null, - "uploader": { - "login": "yueh", - "id": 151949, - "avatar_url": "https://avatars.githubusercontent.com/u/151949?v=3", - "gravatar_id": "", - "url": "https://api.github.com/users/yueh", - "html_url": "https://github.com/yueh", - "followers_url": "https://api.github.com/users/yueh/followers", - "following_url": "https://api.github.com/users/yueh/following{/other_user}", - "gists_url": "https://api.github.com/users/yueh/gists{/gist_id}", - "starred_url": "https://api.github.com/users/yueh/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/yueh/subscriptions", - "organizations_url": "https://api.github.com/users/yueh/orgs", - "repos_url": "https://api.github.com/users/yueh/repos", - "events_url": "https://api.github.com/users/yueh/events{/privacy}", - "received_events_url": "https://api.github.com/users/yueh/received_events", - "type": "User", - "site_admin": false - }, - "content_type": "application/octet-stream", - "state": "uploaded", - "size": 2387747, - "download_count": 0, - "created_at": "2014-12-30T15:03:32Z", - "updated_at": "2014-12-30T15:03:33Z", - "browser_download_url": "https://github.com/AppliedEnergistics/Applied-Energistics-2/releases/download/rv2.beta.5/appliedenergistics2-rv2-beta-5-dev.jar" - }, - { - "url": "https://api.github.com/repos/AppliedEnergistics/Applied-Energistics-2/releases/assets/360437", - "id": 360437, - "name": "appliedenergistics2-rv2-beta-5.jar", - "label": null, - "uploader": { - "login": "yueh", - "id": 151949, - "avatar_url": "https://avatars.githubusercontent.com/u/151949?v=3", - "gravatar_id": "", - "url": "https://api.github.com/users/yueh", - "html_url": "https://github.com/yueh", - "followers_url": "https://api.github.com/users/yueh/followers", - "following_url": "https://api.github.com/users/yueh/following{/other_user}", - "gists_url": "https://api.github.com/users/yueh/gists{/gist_id}", - "starred_url": "https://api.github.com/users/yueh/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/yueh/subscriptions", - "organizations_url": "https://api.github.com/users/yueh/orgs", - "repos_url": "https://api.github.com/users/yueh/repos", - "events_url": "https://api.github.com/users/yueh/events{/privacy}", - "received_events_url": "https://api.github.com/users/yueh/received_events", - "type": "User", - "site_admin": false - }, - "content_type": "application/octet-stream", - "state": "uploaded", - "size": 2424731, - "download_count": 3, - "created_at": "2014-12-30T15:03:25Z", - "updated_at": "2014-12-30T15:03:27Z", - "browser_download_url": "https://github.com/AppliedEnergistics/Applied-Energistics-2/releases/download/rv2.beta.5/appliedenergistics2-rv2-beta-5.jar" - } - ], - "tarball_url": "https://api.github.com/repos/AppliedEnergistics/Applied-Energistics-2/tarball/rv2.beta.5", - "zipball_url": "https://api.github.com/repos/AppliedEnergistics/Applied-Energistics-2/zipball/rv2.beta.5", - "body": "Fixes #659 NPE on usage of the FZ sculpting tool - thatsIch" - }, - { - "url": "https://api.github.com/repos/AppliedEnergistics/Applied-Energistics-2/releases/814288", - "assets_url": "https://api.github.com/repos/AppliedEnergistics/Applied-Energistics-2/releases/814288/assets", - "upload_url": "https://uploads.github.com/repos/AppliedEnergistics/Applied-Energistics-2/releases/814288/assets{?name}", - "html_url": "https://github.com/AppliedEnergistics/Applied-Energistics-2/releases/tag/rv2.beta.4", - "id": 814288, - "tag_name": "rv2.beta.4", - "target_commitish": "02e59faa59ed1715366d0a659197dda9808560df", - "name": "Build rv2.beta.4", - "draft": false, - "author": { - "login": "AlgorithmX2", - "id": 2846930, - "avatar_url": "https://avatars.githubusercontent.com/u/2846930?v=3", - "gravatar_id": "", - "url": "https://api.github.com/users/AlgorithmX2", - "html_url": "https://github.com/AlgorithmX2", - "followers_url": "https://api.github.com/users/AlgorithmX2/followers", - "following_url": "https://api.github.com/users/AlgorithmX2/following{/other_user}", - "gists_url": "https://api.github.com/users/AlgorithmX2/gists{/gist_id}", - "starred_url": "https://api.github.com/users/AlgorithmX2/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/AlgorithmX2/subscriptions", - "organizations_url": "https://api.github.com/users/AlgorithmX2/orgs", - "repos_url": "https://api.github.com/users/AlgorithmX2/repos", - "events_url": "https://api.github.com/users/AlgorithmX2/events{/privacy}", - "received_events_url": "https://api.github.com/users/AlgorithmX2/received_events", - "type": "User", - "site_admin": false - }, - "prerelease": true, - "created_at": "2014-12-29T22:02:48Z", - "published_at": "2014-12-29T22:44:26Z", - "assets": [ - { - "url": "https://api.github.com/repos/AppliedEnergistics/Applied-Energistics-2/releases/assets/360441", - "id": 360441, - "name": "appliedenergistics2-rv2-beta-4-api.jar", - "label": null, - "uploader": { - "login": "yueh", - "id": 151949, - "avatar_url": "https://avatars.githubusercontent.com/u/151949?v=3", - "gravatar_id": "", - "url": "https://api.github.com/users/yueh", - "html_url": "https://github.com/yueh", - "followers_url": "https://api.github.com/users/yueh/followers", - "following_url": "https://api.github.com/users/yueh/following{/other_user}", - "gists_url": "https://api.github.com/users/yueh/gists{/gist_id}", - "starred_url": "https://api.github.com/users/yueh/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/yueh/subscriptions", - "organizations_url": "https://api.github.com/users/yueh/orgs", - "repos_url": "https://api.github.com/users/yueh/repos", - "events_url": "https://api.github.com/users/yueh/events{/privacy}", - "received_events_url": "https://api.github.com/users/yueh/received_events", - "type": "User", - "site_admin": false - }, - "content_type": "application/octet-stream", - "state": "uploaded", - "size": 264460, - "download_count": 0, - "created_at": "2014-12-30T15:03:48Z", - "updated_at": "2014-12-30T15:03:48Z", - "browser_download_url": "https://github.com/AppliedEnergistics/Applied-Energistics-2/releases/download/rv2.beta.4/appliedenergistics2-rv2-beta-4-api.jar" - }, - { - "url": "https://api.github.com/repos/AppliedEnergistics/Applied-Energistics-2/releases/assets/360442", - "id": 360442, - "name": "appliedenergistics2-rv2-beta-4-dev.jar", - "label": null, - "uploader": { - "login": "yueh", - "id": 151949, - "avatar_url": "https://avatars.githubusercontent.com/u/151949?v=3", - "gravatar_id": "", - "url": "https://api.github.com/users/yueh", - "html_url": "https://github.com/yueh", - "followers_url": "https://api.github.com/users/yueh/followers", - "following_url": "https://api.github.com/users/yueh/following{/other_user}", - "gists_url": "https://api.github.com/users/yueh/gists{/gist_id}", - "starred_url": "https://api.github.com/users/yueh/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/yueh/subscriptions", - "organizations_url": "https://api.github.com/users/yueh/orgs", - "repos_url": "https://api.github.com/users/yueh/repos", - "events_url": "https://api.github.com/users/yueh/events{/privacy}", - "received_events_url": "https://api.github.com/users/yueh/received_events", - "type": "User", - "site_admin": false - }, - "content_type": "application/octet-stream", - "state": "uploaded", - "size": 2387673, - "download_count": 0, - "created_at": "2014-12-30T15:03:50Z", - "updated_at": "2014-12-30T15:03:52Z", - "browser_download_url": "https://github.com/AppliedEnergistics/Applied-Energistics-2/releases/download/rv2.beta.4/appliedenergistics2-rv2-beta-4-dev.jar" - }, - { - "url": "https://api.github.com/repos/AppliedEnergistics/Applied-Energistics-2/releases/assets/360440", - "id": 360440, - "name": "appliedenergistics2-rv2-beta-4.jar", - "label": null, - "uploader": { - "login": "yueh", - "id": 151949, - "avatar_url": "https://avatars.githubusercontent.com/u/151949?v=3", - "gravatar_id": "", - "url": "https://api.github.com/users/yueh", - "html_url": "https://github.com/yueh", - "followers_url": "https://api.github.com/users/yueh/followers", - "following_url": "https://api.github.com/users/yueh/following{/other_user}", - "gists_url": "https://api.github.com/users/yueh/gists{/gist_id}", - "starred_url": "https://api.github.com/users/yueh/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/yueh/subscriptions", - "organizations_url": "https://api.github.com/users/yueh/orgs", - "repos_url": "https://api.github.com/users/yueh/repos", - "events_url": "https://api.github.com/users/yueh/events{/privacy}", - "received_events_url": "https://api.github.com/users/yueh/received_events", - "type": "User", - "site_admin": false - }, - "content_type": "application/octet-stream", - "state": "uploaded", - "size": 2424666, - "download_count": 0, - "created_at": "2014-12-30T15:03:45Z", - "updated_at": "2014-12-30T15:03:46Z", - "browser_download_url": "https://github.com/AppliedEnergistics/Applied-Energistics-2/releases/download/rv2.beta.4/appliedenergistics2-rv2-beta-4.jar" - } - ], - "tarball_url": "https://api.github.com/repos/AppliedEnergistics/Applied-Energistics-2/tarball/rv2.beta.4", - "zipball_url": "https://api.github.com/repos/AppliedEnergistics/Applied-Energistics-2/zipball/rv2.beta.4", - "body": "Fixes #644 Several missing null checks when disabling huge chunks of the mod via config - thatsIch\r\n\r\nUpdate ru_RU.lang - Adaptivity" - }, - { - "url": "https://api.github.com/repos/AppliedEnergistics/Applied-Energistics-2/releases/812048", - "assets_url": "https://api.github.com/repos/AppliedEnergistics/Applied-Energistics-2/releases/812048/assets", - "upload_url": "https://uploads.github.com/repos/AppliedEnergistics/Applied-Energistics-2/releases/812048/assets{?name}", - "html_url": "https://github.com/AppliedEnergistics/Applied-Energistics-2/releases/tag/rv2.beta.3", - "id": 812048, - "tag_name": "rv2.beta.3", - "target_commitish": "e712a9d8ceca11fd9571625a1902eab2173909b4", - "name": "Build rv2.beta.3", - "draft": false, - "author": { - "login": "AlgorithmX2", - "id": 2846930, - "avatar_url": "https://avatars.githubusercontent.com/u/2846930?v=3", - "gravatar_id": "", - "url": "https://api.github.com/users/AlgorithmX2", - "html_url": "https://github.com/AlgorithmX2", - "followers_url": "https://api.github.com/users/AlgorithmX2/followers", - "following_url": "https://api.github.com/users/AlgorithmX2/following{/other_user}", - "gists_url": "https://api.github.com/users/AlgorithmX2/gists{/gist_id}", - "starred_url": "https://api.github.com/users/AlgorithmX2/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/AlgorithmX2/subscriptions", - "organizations_url": "https://api.github.com/users/AlgorithmX2/orgs", - "repos_url": "https://api.github.com/users/AlgorithmX2/repos", - "events_url": "https://api.github.com/users/AlgorithmX2/events{/privacy}", - "received_events_url": "https://api.github.com/users/AlgorithmX2/received_events", - "type": "User", - "site_admin": false - }, - "prerelease": true, - "created_at": "2014-12-28T17:38:56Z", - "published_at": "2014-12-28T17:46:49Z", - "assets": [ - { - "url": "https://api.github.com/repos/AppliedEnergistics/Applied-Energistics-2/releases/assets/360444", - "id": 360444, - "name": "appliedenergistics2-rv2-beta-3-api.jar", - "label": null, - "uploader": { - "login": "yueh", - "id": 151949, - "avatar_url": "https://avatars.githubusercontent.com/u/151949?v=3", - "gravatar_id": "", - "url": "https://api.github.com/users/yueh", - "html_url": "https://github.com/yueh", - "followers_url": "https://api.github.com/users/yueh/followers", - "following_url": "https://api.github.com/users/yueh/following{/other_user}", - "gists_url": "https://api.github.com/users/yueh/gists{/gist_id}", - "starred_url": "https://api.github.com/users/yueh/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/yueh/subscriptions", - "organizations_url": "https://api.github.com/users/yueh/orgs", - "repos_url": "https://api.github.com/users/yueh/repos", - "events_url": "https://api.github.com/users/yueh/events{/privacy}", - "received_events_url": "https://api.github.com/users/yueh/received_events", - "type": "User", - "site_admin": false - }, - "content_type": "application/octet-stream", - "state": "uploaded", - "size": 264396, - "download_count": 1, - "created_at": "2014-12-30T15:04:28Z", - "updated_at": "2014-12-30T15:04:29Z", - "browser_download_url": "https://github.com/AppliedEnergistics/Applied-Energistics-2/releases/download/rv2.beta.3/appliedenergistics2-rv2-beta-3-api.jar" - }, - { - "url": "https://api.github.com/repos/AppliedEnergistics/Applied-Energistics-2/releases/assets/360445", - "id": 360445, - "name": "appliedenergistics2-rv2-beta-3-dev.jar", - "label": null, - "uploader": { - "login": "yueh", - "id": 151949, - "avatar_url": "https://avatars.githubusercontent.com/u/151949?v=3", - "gravatar_id": "", - "url": "https://api.github.com/users/yueh", - "html_url": "https://github.com/yueh", - "followers_url": "https://api.github.com/users/yueh/followers", - "following_url": "https://api.github.com/users/yueh/following{/other_user}", - "gists_url": "https://api.github.com/users/yueh/gists{/gist_id}", - "starred_url": "https://api.github.com/users/yueh/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/yueh/subscriptions", - "organizations_url": "https://api.github.com/users/yueh/orgs", - "repos_url": "https://api.github.com/users/yueh/repos", - "events_url": "https://api.github.com/users/yueh/events{/privacy}", - "received_events_url": "https://api.github.com/users/yueh/received_events", - "type": "User", - "site_admin": false - }, - "content_type": "application/octet-stream", - "state": "uploaded", - "size": 2386391, - "download_count": 0, - "created_at": "2014-12-30T15:04:30Z", - "updated_at": "2014-12-30T15:04:32Z", - "browser_download_url": "https://github.com/AppliedEnergistics/Applied-Energistics-2/releases/download/rv2.beta.3/appliedenergistics2-rv2-beta-3-dev.jar" - }, - { - "url": "https://api.github.com/repos/AppliedEnergistics/Applied-Energistics-2/releases/assets/360443", - "id": 360443, - "name": "appliedenergistics2-rv2-beta-3.jar", - "label": null, - "uploader": { - "login": "yueh", - "id": 151949, - "avatar_url": "https://avatars.githubusercontent.com/u/151949?v=3", - "gravatar_id": "", - "url": "https://api.github.com/users/yueh", - "html_url": "https://github.com/yueh", - "followers_url": "https://api.github.com/users/yueh/followers", - "following_url": "https://api.github.com/users/yueh/following{/other_user}", - "gists_url": "https://api.github.com/users/yueh/gists{/gist_id}", - "starred_url": "https://api.github.com/users/yueh/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/yueh/subscriptions", - "organizations_url": "https://api.github.com/users/yueh/orgs", - "repos_url": "https://api.github.com/users/yueh/repos", - "events_url": "https://api.github.com/users/yueh/events{/privacy}", - "received_events_url": "https://api.github.com/users/yueh/received_events", - "type": "User", - "site_admin": false - }, - "content_type": "application/octet-stream", - "state": "uploaded", - "size": 2423384, - "download_count": 0, - "created_at": "2014-12-30T15:04:25Z", - "updated_at": "2014-12-30T15:04:27Z", - "browser_download_url": "https://github.com/AppliedEnergistics/Applied-Energistics-2/releases/download/rv2.beta.3/appliedenergistics2-rv2-beta-3.jar" - } - ], - "tarball_url": "https://api.github.com/repos/AppliedEnergistics/Applied-Energistics-2/tarball/rv2.beta.3", - "zipball_url": "https://api.github.com/repos/AppliedEnergistics/Applied-Energistics-2/zipball/rv2.beta.3", - "body": "Fixes #639 Missing null check for people with disabled channels - thatsIch" - }, - { - "url": "https://api.github.com/repos/AppliedEnergistics/Applied-Energistics-2/releases/811619", - "assets_url": "https://api.github.com/repos/AppliedEnergistics/Applied-Energistics-2/releases/811619/assets", - "upload_url": "https://uploads.github.com/repos/AppliedEnergistics/Applied-Energistics-2/releases/811619/assets{?name}", - "html_url": "https://github.com/AppliedEnergistics/Applied-Energistics-2/releases/tag/rv2.beta.2", - "id": 811619, - "tag_name": "rv2.beta.2", - "target_commitish": "f7323289a50f75b6b68f2fe06bf2a6bd593d70e3", - "name": "Build rv2.beta.2", - "draft": false, - "author": { - "login": "AlgorithmX2", - "id": 2846930, - "avatar_url": "https://avatars.githubusercontent.com/u/2846930?v=3", - "gravatar_id": "", - "url": "https://api.github.com/users/AlgorithmX2", - "html_url": "https://github.com/AlgorithmX2", - "followers_url": "https://api.github.com/users/AlgorithmX2/followers", - "following_url": "https://api.github.com/users/AlgorithmX2/following{/other_user}", - "gists_url": "https://api.github.com/users/AlgorithmX2/gists{/gist_id}", - "starred_url": "https://api.github.com/users/AlgorithmX2/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/AlgorithmX2/subscriptions", - "organizations_url": "https://api.github.com/users/AlgorithmX2/orgs", - "repos_url": "https://api.github.com/users/AlgorithmX2/repos", - "events_url": "https://api.github.com/users/AlgorithmX2/events{/privacy}", - "received_events_url": "https://api.github.com/users/AlgorithmX2/received_events", - "type": "User", - "site_admin": false - }, - "prerelease": true, - "created_at": "2014-12-27T18:05:37Z", - "published_at": "2014-12-28T08:49:55Z", - "assets": [ - { - "url": "https://api.github.com/repos/AppliedEnergistics/Applied-Energistics-2/releases/assets/360447", - "id": 360447, - "name": "appliedenergistics2-rv2-beta-2-api.jar", - "label": null, - "uploader": { - "login": "yueh", - "id": 151949, - "avatar_url": "https://avatars.githubusercontent.com/u/151949?v=3", - "gravatar_id": "", - "url": "https://api.github.com/users/yueh", - "html_url": "https://github.com/yueh", - "followers_url": "https://api.github.com/users/yueh/followers", - "following_url": "https://api.github.com/users/yueh/following{/other_user}", - "gists_url": "https://api.github.com/users/yueh/gists{/gist_id}", - "starred_url": "https://api.github.com/users/yueh/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/yueh/subscriptions", - "organizations_url": "https://api.github.com/users/yueh/orgs", - "repos_url": "https://api.github.com/users/yueh/repos", - "events_url": "https://api.github.com/users/yueh/events{/privacy}", - "received_events_url": "https://api.github.com/users/yueh/received_events", - "type": "User", - "site_admin": false - }, - "content_type": "application/octet-stream", - "state": "uploaded", - "size": 264396, - "download_count": 0, - "created_at": "2014-12-30T15:04:52Z", - "updated_at": "2014-12-30T15:04:53Z", - "browser_download_url": "https://github.com/AppliedEnergistics/Applied-Energistics-2/releases/download/rv2.beta.2/appliedenergistics2-rv2-beta-2-api.jar" - }, - { - "url": "https://api.github.com/repos/AppliedEnergistics/Applied-Energistics-2/releases/assets/360448", - "id": 360448, - "name": "appliedenergistics2-rv2-beta-2-dev.jar", - "label": null, - "uploader": { - "login": "yueh", - "id": 151949, - "avatar_url": "https://avatars.githubusercontent.com/u/151949?v=3", - "gravatar_id": "", - "url": "https://api.github.com/users/yueh", - "html_url": "https://github.com/yueh", - "followers_url": "https://api.github.com/users/yueh/followers", - "following_url": "https://api.github.com/users/yueh/following{/other_user}", - "gists_url": "https://api.github.com/users/yueh/gists{/gist_id}", - "starred_url": "https://api.github.com/users/yueh/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/yueh/subscriptions", - "organizations_url": "https://api.github.com/users/yueh/orgs", - "repos_url": "https://api.github.com/users/yueh/repos", - "events_url": "https://api.github.com/users/yueh/events{/privacy}", - "received_events_url": "https://api.github.com/users/yueh/received_events", - "type": "User", - "site_admin": false - }, - "content_type": "application/octet-stream", - "state": "uploaded", - "size": 2386310, - "download_count": 0, - "created_at": "2014-12-30T15:04:55Z", - "updated_at": "2014-12-30T15:04:57Z", - "browser_download_url": "https://github.com/AppliedEnergistics/Applied-Energistics-2/releases/download/rv2.beta.2/appliedenergistics2-rv2-beta-2-dev.jar" - }, - { - "url": "https://api.github.com/repos/AppliedEnergistics/Applied-Energistics-2/releases/assets/360446", - "id": 360446, - "name": "appliedenergistics2-rv2-beta-2.jar", - "label": null, - "uploader": { - "login": "yueh", - "id": 151949, - "avatar_url": "https://avatars.githubusercontent.com/u/151949?v=3", - "gravatar_id": "", - "url": "https://api.github.com/users/yueh", - "html_url": "https://github.com/yueh", - "followers_url": "https://api.github.com/users/yueh/followers", - "following_url": "https://api.github.com/users/yueh/following{/other_user}", - "gists_url": "https://api.github.com/users/yueh/gists{/gist_id}", - "starred_url": "https://api.github.com/users/yueh/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/yueh/subscriptions", - "organizations_url": "https://api.github.com/users/yueh/orgs", - "repos_url": "https://api.github.com/users/yueh/repos", - "events_url": "https://api.github.com/users/yueh/events{/privacy}", - "received_events_url": "https://api.github.com/users/yueh/received_events", - "type": "User", - "site_admin": false - }, - "content_type": "application/octet-stream", - "state": "uploaded", - "size": 2423307, - "download_count": 2, - "created_at": "2014-12-30T15:04:47Z", - "updated_at": "2014-12-30T15:04:49Z", - "browser_download_url": "https://github.com/AppliedEnergistics/Applied-Energistics-2/releases/download/rv2.beta.2/appliedenergistics2-rv2-beta-2.jar" - } - ], - "tarball_url": "https://api.github.com/repos/AppliedEnergistics/Applied-Energistics-2/tarball/rv2.beta.2", - "zipball_url": "https://api.github.com/repos/AppliedEnergistics/Applied-Energistics-2/zipball/rv2.beta.2", - "body": "* #624 Fixes disabled features getting not disabled - thatsIch\r\n* #572 Fixes inventory validation for any kind of Player (enables automation via robots e.g.) - thatsIch\r\n* Sound improvements - TheJulianJES\r\n* Use player inventory to let NEI fill a recipe when it is not provided by the network - riking\r\n* #604 Fixes crash on Achievement - thatsIch\r\n* #593 Updating RF Integration to use version 1.7.10R1.0.2 - thatsIch" - }, - { - "url": "https://api.github.com/repos/AppliedEnergistics/Applied-Energistics-2/releases/783731", - "assets_url": "https://api.github.com/repos/AppliedEnergistics/Applied-Energistics-2/releases/783731/assets", - "upload_url": "https://uploads.github.com/repos/AppliedEnergistics/Applied-Energistics-2/releases/783731/assets{?name}", - "html_url": "https://github.com/AppliedEnergistics/Applied-Energistics-2/releases/tag/rv2.beta.1", - "id": 783731, - "tag_name": "rv2.beta.1", - "target_commitish": "8d1a0cdb7df49646d4e7a713eed30c546fff2f4a", - "name": "Build rv2.beta.1", - "draft": false, - "author": { - "login": "AlgorithmX2", - "id": 2846930, - "avatar_url": "https://avatars.githubusercontent.com/u/2846930?v=3", - "gravatar_id": "", - "url": "https://api.github.com/users/AlgorithmX2", - "html_url": "https://github.com/AlgorithmX2", - "followers_url": "https://api.github.com/users/AlgorithmX2/followers", - "following_url": "https://api.github.com/users/AlgorithmX2/following{/other_user}", - "gists_url": "https://api.github.com/users/AlgorithmX2/gists{/gist_id}", - "starred_url": "https://api.github.com/users/AlgorithmX2/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/AlgorithmX2/subscriptions", - "organizations_url": "https://api.github.com/users/AlgorithmX2/orgs", - "repos_url": "https://api.github.com/users/AlgorithmX2/repos", - "events_url": "https://api.github.com/users/AlgorithmX2/events{/privacy}", - "received_events_url": "https://api.github.com/users/AlgorithmX2/received_events", - "type": "User", - "site_admin": false - }, - "prerelease": true, - "created_at": "2014-12-15T13:59:55Z", - "published_at": "2014-12-15T14:07:25Z", - "assets": [ - { - "url": "https://api.github.com/repos/AppliedEnergistics/Applied-Energistics-2/releases/assets/360452", - "id": 360452, - "name": "appliedenergistics2-rv2-beta-1-api.jar", - "label": null, - "uploader": { - "login": "yueh", - "id": 151949, - "avatar_url": "https://avatars.githubusercontent.com/u/151949?v=3", - "gravatar_id": "", - "url": "https://api.github.com/users/yueh", - "html_url": "https://github.com/yueh", - "followers_url": "https://api.github.com/users/yueh/followers", - "following_url": "https://api.github.com/users/yueh/following{/other_user}", - "gists_url": "https://api.github.com/users/yueh/gists{/gist_id}", - "starred_url": "https://api.github.com/users/yueh/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/yueh/subscriptions", - "organizations_url": "https://api.github.com/users/yueh/orgs", - "repos_url": "https://api.github.com/users/yueh/repos", - "events_url": "https://api.github.com/users/yueh/events{/privacy}", - "received_events_url": "https://api.github.com/users/yueh/received_events", - "type": "User", - "site_admin": false - }, - "content_type": "application/octet-stream", - "state": "uploaded", - "size": 264402, - "download_count": 0, - "created_at": "2014-12-30T15:05:28Z", - "updated_at": "2014-12-30T15:05:28Z", - "browser_download_url": "https://github.com/AppliedEnergistics/Applied-Energistics-2/releases/download/rv2.beta.1/appliedenergistics2-rv2-beta-1-api.jar" - }, - { - "url": "https://api.github.com/repos/AppliedEnergistics/Applied-Energistics-2/releases/assets/360453", - "id": 360453, - "name": "appliedenergistics2-rv2-beta-1-dev.jar", - "label": null, - "uploader": { - "login": "yueh", - "id": 151949, - "avatar_url": "https://avatars.githubusercontent.com/u/151949?v=3", - "gravatar_id": "", - "url": "https://api.github.com/users/yueh", - "html_url": "https://github.com/yueh", - "followers_url": "https://api.github.com/users/yueh/followers", - "following_url": "https://api.github.com/users/yueh/following{/other_user}", - "gists_url": "https://api.github.com/users/yueh/gists{/gist_id}", - "starred_url": "https://api.github.com/users/yueh/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/yueh/subscriptions", - "organizations_url": "https://api.github.com/users/yueh/orgs", - "repos_url": "https://api.github.com/users/yueh/repos", - "events_url": "https://api.github.com/users/yueh/events{/privacy}", - "received_events_url": "https://api.github.com/users/yueh/received_events", - "type": "User", - "site_admin": false - }, - "content_type": "application/octet-stream", - "state": "uploaded", - "size": 2383463, - "download_count": 0, - "created_at": "2014-12-30T15:05:30Z", - "updated_at": "2014-12-30T15:05:32Z", - "browser_download_url": "https://github.com/AppliedEnergistics/Applied-Energistics-2/releases/download/rv2.beta.1/appliedenergistics2-rv2-beta-1-dev.jar" - }, - { - "url": "https://api.github.com/repos/AppliedEnergistics/Applied-Energistics-2/releases/assets/360451", - "id": 360451, - "name": "appliedenergistics2-rv2-beta-1.jar", - "label": null, - "uploader": { - "login": "yueh", - "id": 151949, - "avatar_url": "https://avatars.githubusercontent.com/u/151949?v=3", - "gravatar_id": "", - "url": "https://api.github.com/users/yueh", - "html_url": "https://github.com/yueh", - "followers_url": "https://api.github.com/users/yueh/followers", - "following_url": "https://api.github.com/users/yueh/following{/other_user}", - "gists_url": "https://api.github.com/users/yueh/gists{/gist_id}", - "starred_url": "https://api.github.com/users/yueh/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/yueh/subscriptions", - "organizations_url": "https://api.github.com/users/yueh/orgs", - "repos_url": "https://api.github.com/users/yueh/repos", - "events_url": "https://api.github.com/users/yueh/events{/privacy}", - "received_events_url": "https://api.github.com/users/yueh/received_events", - "type": "User", - "site_admin": false - }, - "content_type": "application/octet-stream", - "state": "uploaded", - "size": 2420383, - "download_count": 2, - "created_at": "2014-12-30T15:05:25Z", - "updated_at": "2014-12-30T15:05:27Z", - "browser_download_url": "https://github.com/AppliedEnergistics/Applied-Energistics-2/releases/download/rv2.beta.1/appliedenergistics2-rv2-beta-1.jar" - } - ], - "tarball_url": "https://api.github.com/repos/AppliedEnergistics/Applied-Energistics-2/tarball/rv2.beta.1", - "zipball_url": "https://api.github.com/repos/AppliedEnergistics/Applied-Energistics-2/zipball/rv2.beta.1", - "body": "Bump channel to beta" - } -]