punchster2
05/08/2022, 12:10 AMpunchster2
05/08/2022, 12:10 AMpunchster2
05/08/2022, 12:12 AMpunchster2
05/08/2022, 12:12 AMpunchster2
05/08/2022, 12:16 AMpunchster2
05/08/2022, 12:17 AMpunchster2
05/30/2022, 8:53 AMpunchster2
05/30/2022, 9:44 AMMyren
05/30/2022, 7:46 PMpunchster2
06/13/2022, 11:46 AMMyren
06/13/2022, 12:52 PMpublic EnumActionResult onItemUse(EntityPlayer stack, World playerIn, BlockPos worldIn, EnumHand pos, EnumFacing hand, float facing, float hitX, float hitY)
{
if (hand == EnumFacing.DOWN)
{
return EnumActionResult.FAIL;
}
else
{
IBlockState iblockstate = playerIn.getBlockState(worldIn); [<-- THIS CAN BE SLOWED DOWN USING CLUSTER CHUNKS OR BY TRIGGERING POPULATION]
Block block = iblockstate.getBlock();
boolean flag = block.isReplaceable(playerIn, worldIn);
if (!flag)
{
if (!playerIn.getBlockState(worldIn).getMaterial().isSolid())
{
return EnumActionResult.FAIL;
}
worldIn = worldIn.offset(hand);
}
ItemStack itemstack = stack.getHeldItem(pos); [<-- THIS IS THE END OF THE RACE CONDITION]Myren
06/13/2022, 12:52 PMpublic static ItemStack dispenseArmor(IBlockSource blockSource, ItemStack stack)
{
BlockPos blockpos = blockSource.getBlockPos().offset((EnumFacing)blockSource.getBlockState().getValue(BlockDispenser.FACING));
[THE RACE CONDITION STARTS WHEN THE FOLLOWING LIST GETS CREATED]
List<EntityLivingBase> list = blockSource.getWorld().<EntityLivingBase>getEntitiesWithinAABB(EntityLivingBase.class, new AxisAlignedBB(blockpos), Predicates.and(EntitySelectors.NOT_SPECTATING, new EntitySelectors.ArmoredMob(stack)));
[LIST CREATION CAN BE SLOWED DOWN BY HAVING MANY ENTITIES IN THE CHUNK]
if (list.isEmpty())
{
return ItemStack.field_190927_a;
}
else
{
EntityLivingBase entitylivingbase = (EntityLivingBase)list.get(0);
EntityEquipmentSlot entityequipmentslot = EntityLiving.getSlotForItemStack(stack);
ItemStack itemstack = stack.splitStack(1);
entitylivingbase.setItemStackToSlot(entityequipmentslot, itemstack); [<-- THIS IS THE END OF THE RACE CONDITION]
if (entitylivingbase instanceof EntityLiving)
{
((EntityLiving)entitylivingbase).setDropChance(entityequipmentslot, 2.0F);
}
return stack;
}
}Myren
06/13/2022, 12:52 PMMyren
06/13/2022, 12:56 PMpunchster2
08/27/2022, 3:20 AMpunchster2
09/07/2022, 12:11 AMJKM
09/07/2022, 2:55 PMJKM
09/07/2022, 2:55 PMTFirst
09/08/2022, 6:36 PMpunchster2
09/08/2022, 6:48 PMMyren
11/24/2022, 9:03 PMMyren
12/05/2022, 10:16 AMpunchster2
05/03/2023, 3:42 AMMyren
05/06/2023, 12:44 PMMyren
01/10/2025, 12:32 PMMyren
05/31/2025, 8:24 AMMyren
06/05/2026, 5:34 PMCactusCreative
07/15/2026, 10:02 PMTFirst
09/02/2026, 1:37 AMWorldGenBigTree shared by every biome in the JVM. generate keeps its state in instance fields. if we freeze giant oak tree generation on the async thread, and then populate a chunk chunk with the main thread while stopping a big tree from generating, a failed validTreeLocation call overwrites world and basePos. when generateLeadNodeBases runs on the async thread, it re-reads basePos, but foliageCoords is old position. when the async tree generates, limb creates a giant branch from the new position to the old one (confirmed). because it also sets world, it should be able to place blocks cross world and could potentially carry the async line across worlds (unconfirmed). credit @Matthew BolanMyren
10/02/2026, 2:42 PM