From f6dca158a6c5c22d4897b8ce14fdc9755d45469d Mon Sep 17 00:00:00 2001 From: Woder <17339354+wode490390@users.noreply.github.com> Date: Wed, 27 Mar 2024 20:35:20 +0800 Subject: [PATCH] Bedrock 1.20.70 --- src/main/java/cn/nukkit/GameVersion.java | 1 + src/main/java/cn/nukkit/Player.java | 206 ++++++++--- src/main/java/cn/nukkit/Server.java | 12 +- src/main/java/cn/nukkit/block/Block.java | 249 ++++++------- src/main/java/cn/nukkit/block/BlockAir.java | 4 +- src/main/java/cn/nukkit/block/BlockAllow.java | 6 +- .../java/cn/nukkit/block/BlockAmethyst.java | 13 +- .../cn/nukkit/block/BlockAmethystBud.java | 8 +- .../cn/nukkit/block/BlockAmethystBudding.java | 14 +- .../cn/nukkit/block/BlockAmethystCluster.java | 18 +- .../cn/nukkit/block/BlockAncientDebris.java | 9 +- src/main/java/cn/nukkit/block/BlockAnvil.java | 8 +- .../java/cn/nukkit/block/BlockAzalea.java | 11 + .../java/cn/nukkit/block/BlockBamboo.java | 7 +- .../cn/nukkit/block/BlockBambooSapling.java | 4 +- .../java/cn/nukkit/block/BlockBanner.java | 7 +- .../java/cn/nukkit/block/BlockBarrel.java | 11 +- .../java/cn/nukkit/block/BlockBarrier.java | 4 +- .../java/cn/nukkit/block/BlockBasalt.java | 11 +- .../cn/nukkit/block/BlockBasaltSmooth.java | 11 +- .../java/cn/nukkit/block/BlockBeacon.java | 10 +- src/main/java/cn/nukkit/block/BlockBed.java | 10 +- .../java/cn/nukkit/block/BlockBedrock.java | 4 +- .../nukkit/block/BlockBedrockInvisible.java | 4 +- .../java/cn/nukkit/block/BlockBeeNest.java | 8 +- .../java/cn/nukkit/block/BlockBeehive.java | 9 +- .../java/cn/nukkit/block/BlockBeetroot.java | 3 +- src/main/java/cn/nukkit/block/BlockBell.java | 7 +- .../java/cn/nukkit/block/BlockBlackstone.java | 11 +- .../nukkit/block/BlockBlackstoneGilded.java | 11 +- .../nukkit/block/BlockBlackstonePolished.java | 11 +- .../BlockBlackstonePolishedChiseled.java | 11 +- src/main/java/cn/nukkit/block/BlockBone.java | 8 +- .../java/cn/nukkit/block/BlockBookshelf.java | 14 +- .../java/cn/nukkit/block/BlockBorder.java | 6 +- .../cn/nukkit/block/BlockBrewingStand.java | 12 +- .../java/cn/nukkit/block/BlockBricks.java | 9 +- .../block/BlockBricksBlackstonePolished.java | 11 +- .../BlockBricksBlackstonePolishedCracked.java | 11 +- .../cn/nukkit/block/BlockBricksDeepslate.java | 11 +- .../cn/nukkit/block/BlockBricksEndStone.java | 11 +- .../java/cn/nukkit/block/BlockBricksMud.java | 11 +- .../cn/nukkit/block/BlockBricksNether.java | 9 +- .../cn/nukkit/block/BlockBricksQuartz.java | 11 +- .../cn/nukkit/block/BlockBricksStone.java | 11 +- .../cn/nukkit/block/BlockBubbleColumn.java | 4 +- .../java/cn/nukkit/block/BlockButton.java | 12 +- .../cn/nukkit/block/BlockButtonStone.java | 5 +- .../cn/nukkit/block/BlockButtonWooden.java | 2 +- .../java/cn/nukkit/block/BlockCactus.java | 14 +- src/main/java/cn/nukkit/block/BlockCake.java | 10 +- .../java/cn/nukkit/block/BlockCakeCandle.java | 2 +- .../java/cn/nukkit/block/BlockCalcite.java | 13 +- .../java/cn/nukkit/block/BlockCamera.java | 4 +- .../java/cn/nukkit/block/BlockCampfire.java | 9 +- .../cn/nukkit/block/BlockCampfireSoul.java | 3 +- .../java/cn/nukkit/block/BlockCandle.java | 10 +- .../java/cn/nukkit/block/BlockCarpet.java | 8 +- .../java/cn/nukkit/block/BlockCarpetMoss.java | 5 + .../java/cn/nukkit/block/BlockCarrot.java | 3 +- .../nukkit/block/BlockCartographyTable.java | 11 +- .../java/cn/nukkit/block/BlockCauldron.java | 8 +- .../java/cn/nukkit/block/BlockCaveVines.java | 2 +- .../block/BlockCaveVinesBerriesBody.java | 2 +- src/main/java/cn/nukkit/block/BlockChain.java | 9 +- src/main/java/cn/nukkit/block/BlockChest.java | 13 +- .../cn/nukkit/block/BlockChorusFlower.java | 214 +++++++++++- .../cn/nukkit/block/BlockChorusPlant.java | 109 ++++-- src/main/java/cn/nukkit/block/BlockClay.java | 11 +- .../block/BlockClientRequestPlaceholder.java | 4 +- src/main/java/cn/nukkit/block/BlockCoal.java | 9 +- .../cn/nukkit/block/BlockCobblestone.java | 9 +- .../java/cn/nukkit/block/BlockCobweb.java | 11 +- src/main/java/cn/nukkit/block/BlockCocoa.java | 16 +- .../java/cn/nukkit/block/BlockCommand.java | 5 +- .../java/cn/nukkit/block/BlockComposter.java | 11 +- .../java/cn/nukkit/block/BlockConcrete.java | 11 +- .../cn/nukkit/block/BlockConcretePowder.java | 11 +- .../java/cn/nukkit/block/BlockConduit.java | 7 +- .../java/cn/nukkit/block/BlockCopper.java | 8 +- .../java/cn/nukkit/block/BlockCopperRaw.java | 9 +- src/main/java/cn/nukkit/block/BlockCoral.java | 3 +- .../java/cn/nukkit/block/BlockCoralBlock.java | 9 +- .../java/cn/nukkit/block/BlockCoralFan.java | 2 +- .../cn/nukkit/block/BlockCoralFanHang.java | 3 +- .../cn/nukkit/block/BlockCraftingTable.java | 11 +- .../nukkit/block/BlockDaylightDetector.java | 6 +- .../java/cn/nukkit/block/BlockDeadBush.java | 2 +- .../java/cn/nukkit/block/BlockDeepslate.java | 9 +- .../nukkit/block/BlockDeepslateChiseled.java | 11 +- .../nukkit/block/BlockDeepslateCobbled.java | 11 +- .../nukkit/block/BlockDeepslateInfested.java | 16 +- .../nukkit/block/BlockDeepslatePolished.java | 11 +- .../block/BlockDeepslateReinforced.java | 7 +- .../cn/nukkit/block/BlockDeepslateTiles.java | 11 +- src/main/java/cn/nukkit/block/BlockDeny.java | 6 +- .../java/cn/nukkit/block/BlockDiamond.java | 9 +- src/main/java/cn/nukkit/block/BlockDirt.java | 13 +- .../java/cn/nukkit/block/BlockDirtRooted.java | 11 +- .../java/cn/nukkit/block/BlockDispenser.java | 8 +- src/main/java/cn/nukkit/block/BlockDoor.java | 2 +- .../java/cn/nukkit/block/BlockDoorIron.java | 8 +- .../java/cn/nukkit/block/BlockDoorWood.java | 7 +- .../cn/nukkit/block/BlockDoublePlant.java | 4 +- .../block/BlockDoubleSlabBlackstone.java | 11 +- .../block/BlockDoubleSlabCopperCut.java | 8 +- .../block/BlockDoubleSlabDeepslateBrick.java | 11 +- .../BlockDoubleSlabDeepslateCobbled.java | 11 +- .../BlockDoubleSlabDeepslatePolished.java | 11 +- .../block/BlockDoubleSlabDeepslateTile.java | 11 +- .../nukkit/block/BlockDoubleSlabMudBrick.java | 11 +- .../cn/nukkit/block/BlockDoubleSlabStone.java | 9 +- .../cn/nukkit/block/BlockDoubleSlabWood.java | 10 +- .../java/cn/nukkit/block/BlockDragonEgg.java | 9 +- .../java/cn/nukkit/block/BlockDriedKelp.java | 11 +- .../cn/nukkit/block/BlockDripleafBig.java | 10 +- .../cn/nukkit/block/BlockDripleafSmall.java | 9 +- .../java/cn/nukkit/block/BlockDripstone.java | 11 +- .../nukkit/block/BlockDripstonePointed.java | 13 +- .../java/cn/nukkit/block/BlockEmerald.java | 9 +- .../cn/nukkit/block/BlockEnchantingTable.java | 8 +- .../java/cn/nukkit/block/BlockEndGateway.java | 5 +- .../java/cn/nukkit/block/BlockEndPortal.java | 5 +- .../cn/nukkit/block/BlockEndPortalFrame.java | 4 +- .../java/cn/nukkit/block/BlockEndRod.java | 10 +- .../java/cn/nukkit/block/BlockEndStone.java | 9 +- .../java/cn/nukkit/block/BlockEnderChest.java | 10 +- .../java/cn/nukkit/block/BlockFarmland.java | 9 +- src/main/java/cn/nukkit/block/BlockFence.java | 7 +- .../java/cn/nukkit/block/BlockFenceGate.java | 77 +++-- .../nukkit/block/BlockFenceNetherBrick.java | 7 +- src/main/java/cn/nukkit/block/BlockFire.java | 15 +- .../cn/nukkit/block/BlockFletchingTable.java | 11 +- .../java/cn/nukkit/block/BlockFlowable.java | 4 +- .../java/cn/nukkit/block/BlockFlowerPot.java | 2 +- .../java/cn/nukkit/block/BlockFrogSpawn.java | 2 +- .../java/cn/nukkit/block/BlockFroglight.java | 8 +- .../java/cn/nukkit/block/BlockFullNames.java | 27 ++ .../java/cn/nukkit/block/BlockFungusStem.java | 7 +- .../nukkit/block/BlockFungusStemStripped.java | 8 +- .../cn/nukkit/block/BlockFurnaceBurning.java | 14 +- src/main/java/cn/nukkit/block/BlockGlass.java | 11 +- .../java/cn/nukkit/block/BlockGlassPane.java | 11 +- .../cn/nukkit/block/BlockGlassTinted.java | 8 +- .../java/cn/nukkit/block/BlockGlowLichen.java | 12 +- .../java/cn/nukkit/block/BlockGlowstone.java | 11 +- src/main/java/cn/nukkit/block/BlockGold.java | 9 +- .../java/cn/nukkit/block/BlockGoldRaw.java | 9 +- src/main/java/cn/nukkit/block/BlockGrass.java | 6 +- .../java/cn/nukkit/block/BlockGrassPath.java | 11 +- .../java/cn/nukkit/block/BlockGravel.java | 11 +- .../java/cn/nukkit/block/BlockGrindstone.java | 8 +- .../cn/nukkit/block/BlockHangingRoots.java | 4 +- .../java/cn/nukkit/block/BlockHayBale.java | 11 +- src/main/java/cn/nukkit/block/BlockHoney.java | 8 +- .../java/cn/nukkit/block/BlockHoneycomb.java | 6 +- .../java/cn/nukkit/block/BlockHopper.java | 8 +- .../cn/nukkit/block/BlockHugeMushroom.java | 12 +- .../java/cn/nukkit/block/BlockHyphae.java | 9 +- .../cn/nukkit/block/BlockHyphaeStripped.java | 10 +- src/main/java/cn/nukkit/block/BlockID.java | 83 ++--- src/main/java/cn/nukkit/block/BlockIce.java | 30 +- .../java/cn/nukkit/block/BlockIceBlue.java | 21 +- .../java/cn/nukkit/block/BlockIceFrosted.java | 20 +- .../java/cn/nukkit/block/BlockIcePacked.java | 23 +- .../java/cn/nukkit/block/BlockInfoUpdate.java | 4 +- .../cn/nukkit/block/BlockInfoUpdate2.java | 4 +- src/main/java/cn/nukkit/block/BlockIron.java | 9 +- .../java/cn/nukkit/block/BlockIronBars.java | 9 +- .../java/cn/nukkit/block/BlockIronRaw.java | 9 +- .../java/cn/nukkit/block/BlockItemFrame.java | 12 +- .../java/cn/nukkit/block/BlockJigsaw.java | 5 +- .../java/cn/nukkit/block/BlockJukebox.java | 10 +- src/main/java/cn/nukkit/block/BlockKelp.java | 8 +- .../java/cn/nukkit/block/BlockLadder.java | 9 +- .../java/cn/nukkit/block/BlockLantern.java | 11 +- src/main/java/cn/nukkit/block/BlockLapis.java | 9 +- .../java/cn/nukkit/block/BlockLeaves.java | 84 +++-- .../java/cn/nukkit/block/BlockLectern.java | 16 +- src/main/java/cn/nukkit/block/BlockLever.java | 12 +- src/main/java/cn/nukkit/block/BlockLight.java | 4 +- .../cn/nukkit/block/BlockLightningRod.java | 8 +- .../java/cn/nukkit/block/BlockLiquid.java | 9 +- .../java/cn/nukkit/block/BlockLodestone.java | 12 +- src/main/java/cn/nukkit/block/BlockLog.java | 7 +- .../cn/nukkit/block/BlockLogStripped.java | 8 +- src/main/java/cn/nukkit/block/BlockLoom.java | 11 +- src/main/java/cn/nukkit/block/BlockMagma.java | 12 +- .../nukkit/block/BlockMangrovePropagule.java | 6 +- .../cn/nukkit/block/BlockMangroveRoots.java | 11 +- .../nukkit/block/BlockMangroveRootsMuddy.java | 11 +- src/main/java/cn/nukkit/block/BlockMelon.java | 10 +- .../java/cn/nukkit/block/BlockMobSpawner.java | 9 +- .../java/cn/nukkit/block/BlockMonsterEgg.java | 18 +- src/main/java/cn/nukkit/block/BlockMoss.java | 11 +- .../java/cn/nukkit/block/BlockMossStone.java | 9 +- .../java/cn/nukkit/block/BlockMoving.java | 4 +- src/main/java/cn/nukkit/block/BlockMud.java | 11 +- .../java/cn/nukkit/block/BlockMudPacked.java | 7 +- .../java/cn/nukkit/block/BlockMycelium.java | 12 +- src/main/java/cn/nukkit/block/BlockNames.java | 27 ++ .../cn/nukkit/block/BlockNetherPortal.java | 11 +- .../cn/nukkit/block/BlockNetherReactor.java | 8 +- .../cn/nukkit/block/BlockNetherSprouts.java | 4 +- .../cn/nukkit/block/BlockNetherVines.java | 2 +- .../java/cn/nukkit/block/BlockNetherWart.java | 2 +- .../cn/nukkit/block/BlockNetherWartBlock.java | 10 +- .../java/cn/nukkit/block/BlockNetherite.java | 9 +- .../java/cn/nukkit/block/BlockNetherrack.java | 10 +- .../java/cn/nukkit/block/BlockNoteblock.java | 11 +- .../java/cn/nukkit/block/BlockNylium.java | 3 +- .../java/cn/nukkit/block/BlockObserver.java | 7 +- .../java/cn/nukkit/block/BlockObsidian.java | 15 +- .../cn/nukkit/block/BlockObsidianCrying.java | 9 +- .../cn/nukkit/block/BlockObsidianGlowing.java | 9 +- .../java/cn/nukkit/block/BlockOreCoal.java | 9 +- .../nukkit/block/BlockOreCoalDeepslate.java | 4 +- .../java/cn/nukkit/block/BlockOreCopper.java | 9 +- .../nukkit/block/BlockOreCopperDeepslate.java | 4 +- .../java/cn/nukkit/block/BlockOreDiamond.java | 9 +- .../block/BlockOreDiamondDeepslate.java | 4 +- .../java/cn/nukkit/block/BlockOreEmerald.java | 9 +- .../block/BlockOreEmeraldDeepslate.java | 4 +- .../java/cn/nukkit/block/BlockOreGold.java | 9 +- .../nukkit/block/BlockOreGoldDeepslate.java | 4 +- .../cn/nukkit/block/BlockOreGoldNether.java | 9 +- .../java/cn/nukkit/block/BlockOreIron.java | 9 +- .../nukkit/block/BlockOreIronDeepslate.java | 4 +- .../java/cn/nukkit/block/BlockOreLapis.java | 9 +- .../nukkit/block/BlockOreLapisDeepslate.java | 4 +- .../java/cn/nukkit/block/BlockOreQuartz.java | 9 +- .../cn/nukkit/block/BlockOreRedstone.java | 9 +- .../block/BlockOreRedstoneDeepslate.java | 4 +- .../BlockOreRedstoneGlowingDeepslate.java | 4 +- .../java/cn/nukkit/block/BlockPistonBase.java | 36 +- .../java/cn/nukkit/block/BlockPistonHead.java | 20 +- .../java/cn/nukkit/block/BlockPlanks.java | 7 +- .../cn/nukkit/block/BlockPlanksAbstract.java | 8 +- .../java/cn/nukkit/block/BlockPotato.java | 3 +- .../nukkit/block/BlockPressurePlateBase.java | 6 +- .../nukkit/block/BlockPressurePlateStone.java | 13 +- .../nukkit/block/BlockPressurePlateWood.java | 14 +- .../java/cn/nukkit/block/BlockPrismarine.java | 11 +- .../java/cn/nukkit/block/BlockPumpkin.java | 7 +- .../java/cn/nukkit/block/BlockPurpur.java | 10 +- .../java/cn/nukkit/block/BlockQuartz.java | 10 +- src/main/java/cn/nukkit/block/BlockRail.java | 13 +- .../cn/nukkit/block/BlockRailActivator.java | 11 +- .../cn/nukkit/block/BlockRailDetector.java | 3 +- .../cn/nukkit/block/BlockRailPowered.java | 5 +- .../cn/nukkit/block/BlockRedSandstone.java | 3 +- .../java/cn/nukkit/block/BlockRedstone.java | 9 +- .../cn/nukkit/block/BlockRedstoneDiode.java | 6 +- .../cn/nukkit/block/BlockRedstoneLamp.java | 16 +- .../cn/nukkit/block/BlockRedstoneTorch.java | 4 +- .../cn/nukkit/block/BlockRedstoneWire.java | 2 +- .../java/cn/nukkit/block/BlockReserved6.java | 4 +- .../cn/nukkit/block/BlockRespawnAnchor.java | 8 +- src/main/java/cn/nukkit/block/BlockSand.java | 11 +- .../java/cn/nukkit/block/BlockSandstone.java | 11 +- .../cn/nukkit/block/BlockScaffolding.java | 9 +- src/main/java/cn/nukkit/block/BlockSculk.java | 14 +- .../cn/nukkit/block/BlockSculkCatalyst.java | 10 +- .../cn/nukkit/block/BlockSculkSensor.java | 13 +- .../cn/nukkit/block/BlockSculkShrieker.java | 9 +- .../java/cn/nukkit/block/BlockSculkVein.java | 12 +- .../java/cn/nukkit/block/BlockSeaLantern.java | 11 +- .../java/cn/nukkit/block/BlockSeaPickle.java | 2 +- .../java/cn/nukkit/block/BlockSeagrass.java | 9 +- .../cn/nukkit/block/BlockShroomlight.java | 7 +- .../java/cn/nukkit/block/BlockSignPost.java | 7 +- src/main/java/cn/nukkit/block/BlockSkull.java | 17 +- .../cn/nukkit/block/BlockSlabBlackstone.java | 11 +- .../cn/nukkit/block/BlockSlabCopperCut.java | 8 +- .../nukkit/block/BlockSlabDeepslateBrick.java | 11 +- .../block/BlockSlabDeepslateCobbled.java | 11 +- .../block/BlockSlabDeepslatePolished.java | 11 +- .../nukkit/block/BlockSlabDeepslateTile.java | 11 +- .../cn/nukkit/block/BlockSlabMudBrick.java | 11 +- .../java/cn/nukkit/block/BlockSlabStone.java | 9 +- .../java/cn/nukkit/block/BlockSlabWood.java | 7 +- src/main/java/cn/nukkit/block/BlockSlime.java | 4 +- .../cn/nukkit/block/BlockSmithingTable.java | 11 +- .../cn/nukkit/block/BlockSmoothStone.java | 11 +- src/main/java/cn/nukkit/block/BlockSnow.java | 10 +- .../java/cn/nukkit/block/BlockSnowLayer.java | 12 +- .../java/cn/nukkit/block/BlockSnowPowder.java | 15 +- .../java/cn/nukkit/block/BlockSoulSand.java | 11 +- .../java/cn/nukkit/block/BlockSoulSoil.java | 11 +- .../java/cn/nukkit/block/BlockSponge.java | 10 +- .../java/cn/nukkit/block/BlockStairs.java | 2 +- .../cn/nukkit/block/BlockStairsAndesite.java | 9 +- .../nukkit/block/BlockStairsBlackstone.java | 9 +- .../cn/nukkit/block/BlockStairsBrick.java | 7 +- .../nukkit/block/BlockStairsCobblestone.java | 7 +- .../cn/nukkit/block/BlockStairsCopperCut.java | 8 +- .../block/BlockStairsDarkPrismarine.java | 9 +- .../block/BlockStairsDeepslateBrick.java | 9 +- .../block/BlockStairsDeepslateCobbled.java | 9 +- .../block/BlockStairsDeepslatePolished.java | 9 +- .../block/BlockStairsDeepslateTile.java | 9 +- .../cn/nukkit/block/BlockStairsDiorite.java | 9 +- .../cn/nukkit/block/BlockStairsEndBrick.java | 7 +- .../cn/nukkit/block/BlockStairsGranite.java | 9 +- .../block/BlockStairsMossyCobblestone.java | 7 +- .../block/BlockStairsMossyStoneBrick.java | 9 +- .../cn/nukkit/block/BlockStairsMudBrick.java | 9 +- .../nukkit/block/BlockStairsNetherBrick.java | 7 +- .../block/BlockStairsPolishedAndesite.java | 9 +- .../block/BlockStairsPolishedBlackstone.java | 9 +- .../BlockStairsPolishedBlackstoneBrick.java | 9 +- .../block/BlockStairsPolishedDiorite.java | 9 +- .../block/BlockStairsPolishedGranite.java | 9 +- .../nukkit/block/BlockStairsPrismarine.java | 9 +- .../block/BlockStairsPrismarineBrick.java | 9 +- .../cn/nukkit/block/BlockStairsPurpur.java | 9 +- .../cn/nukkit/block/BlockStairsQuartz.java | 9 +- .../block/BlockStairsRedNetherBrick.java | 7 +- .../nukkit/block/BlockStairsRedSandstone.java | 9 +- .../cn/nukkit/block/BlockStairsSandstone.java | 9 +- .../nukkit/block/BlockStairsSmoothQuartz.java | 9 +- .../block/BlockStairsSmoothRedSandstone.java | 7 +- .../block/BlockStairsSmoothSandstone.java | 7 +- .../cn/nukkit/block/BlockStairsStone.java | 7 +- .../nukkit/block/BlockStairsStoneBrick.java | 10 +- .../java/cn/nukkit/block/BlockStairsWood.java | 10 +- .../java/cn/nukkit/block/BlockStemMelon.java | 3 +- .../cn/nukkit/block/BlockStemPumpkin.java | 3 +- src/main/java/cn/nukkit/block/BlockStone.java | 11 +- .../cn/nukkit/block/BlockStonecutter.java | 12 +- .../nukkit/block/BlockStonecutterLegacy.java | 13 +- .../java/cn/nukkit/block/BlockStructure.java | 5 +- .../cn/nukkit/block/BlockStructureVoid.java | 4 +- .../java/cn/nukkit/block/BlockSugarcane.java | 5 +- .../cn/nukkit/block/BlockSweetBerryBush.java | 6 +- src/main/java/cn/nukkit/block/BlockTNT.java | 4 +- .../java/cn/nukkit/block/BlockTallGrass.java | 4 +- .../java/cn/nukkit/block/BlockTarget.java | 11 +- .../java/cn/nukkit/block/BlockTerracotta.java | 11 +- .../nukkit/block/BlockTerracottaGlazed.java | 10 +- .../nukkit/block/BlockTerracottaStained.java | 11 +- .../java/cn/nukkit/block/BlockToolType.java | 11 + .../java/cn/nukkit/block/BlockTrapdoor.java | 7 +- .../cn/nukkit/block/BlockTrapdoorIron.java | 7 +- .../java/cn/nukkit/block/BlockTripWire.java | 6 +- .../cn/nukkit/block/BlockTripWireHook.java | 8 +- src/main/java/cn/nukkit/block/BlockTuff.java | 11 +- .../java/cn/nukkit/block/BlockTurtleEgg.java | 19 +- .../nukkit/block/BlockUndyedShulkerBox.java | 14 +- .../java/cn/nukkit/block/BlockUnknown.java | 7 + .../cn/nukkit/block/BlockUnknownBlock.java | 4 +- src/main/java/cn/nukkit/block/BlockVine.java | 11 +- .../cn/nukkit/block/BlockWallBlackstone.java | 11 +- .../BlockWallBlackstoneBrickPolished.java | 11 +- .../block/BlockWallBlackstonePolished.java | 11 +- .../cn/nukkit/block/BlockWallCobblestone.java | 9 +- .../nukkit/block/BlockWallDeepslateBrick.java | 11 +- .../block/BlockWallDeepslateCobbled.java | 11 +- .../block/BlockWallDeepslatePolished.java | 11 +- .../nukkit/block/BlockWallDeepslateTile.java | 11 +- .../cn/nukkit/block/BlockWallMudBrick.java | 11 +- .../BlockWeightedPressurePlateHeavy.java | 13 +- .../BlockWeightedPressurePlateLight.java | 13 +- src/main/java/cn/nukkit/block/BlockWheat.java | 3 +- src/main/java/cn/nukkit/block/BlockWood.java | 7 +- .../java/cn/nukkit/block/BlockWoodBark.java | 7 +- src/main/java/cn/nukkit/block/BlockWool.java | 9 +- src/main/java/cn/nukkit/block/Blocks.java | 37 +- .../java/cn/nukkit/block/CustomBlock.java | 4 +- .../nukkit/block/edu/BlockChemicalHeat.java | 13 +- .../nukkit/block/edu/BlockChemistryTable.java | 12 +- .../cn/nukkit/block/edu/BlockElement.java | 4 +- .../cn/nukkit/block/edu/BlockGlassHard.java | 7 +- .../nukkit/block/edu/BlockGlassPaneHard.java | 7 +- .../block/edu/BlockGlassPaneStainedHard.java | 7 +- .../block/edu/BlockGlassStainedHard.java | 7 +- .../nukkit/blockentity/BlockEntityBeacon.java | 3 +- .../cn/nukkit/blockentity/BlockEntityBed.java | 2 +- .../command/defaults/ParticleCommand.java | 12 +- .../command/defaults/PlaySoundCommand.java | 3 +- src/main/java/cn/nukkit/entity/Entity.java | 88 ++++- .../java/cn/nukkit/entity/EntityHuman.java | 5 + .../java/cn/nukkit/entity/EntityLiving.java | 7 +- .../cn/nukkit/entity/data/ByteEntityData.java | 4 + .../cn/nukkit/entity/data/EntityDataID.java | 4 + .../cn/nukkit/entity/data/EntityMetadata.java | 16 + .../entity/item/EntityAreaEffectCloud.java | 24 ++ .../cn/nukkit/entity/item/EntityBoat.java | 18 +- .../nukkit/entity/item/EntityBoatChest.java | 6 + .../nukkit/entity/item/EntityFishingHook.java | 2 +- .../entity/item/EntityMinecartAbstract.java | 36 +- .../entity/item/EntityMinecartEmpty.java | 22 -- .../cn/nukkit/entity/item/EntityPotion.java | 6 +- .../cn/nukkit/entity/item/EntityXPOrb.java | 2 +- .../nukkit/entity/mob/EntityCaveSpider.java | 23 ++ .../cn/nukkit/entity/mob/EntityDrowned.java | 3 + .../nukkit/entity/mob/EntityEnderDragon.java | 5 + .../cn/nukkit/entity/mob/EntityEndermite.java | 5 + .../cn/nukkit/entity/mob/EntityHoglin.java | 9 + .../java/cn/nukkit/entity/mob/EntityHusk.java | 10 + .../nukkit/entity/mob/EntityPiglinBrute.java | 3 + .../cn/nukkit/entity/mob/EntityRavager.java | 7 + .../cn/nukkit/entity/mob/EntitySpider.java | 22 ++ .../cn/nukkit/entity/mob/EntityWither.java | 6 + .../entity/mob/EntityWitherSkeleton.java | 9 + .../cn/nukkit/entity/mob/EntityZoglin.java | 8 +- .../cn/nukkit/entity/mob/EntityZombie.java | 10 + .../nukkit/entity/mob/EntityZombiePigman.java | 10 + .../entity/mob/EntityZombieVillager.java | 10 + .../entity/mob/EntityZombieVillagerV1.java | 10 + .../entity/passive/EntityAbstractHorse.java | 2 +- .../cn/nukkit/entity/passive/EntityBee.java | 3 +- .../cn/nukkit/entity/passive/EntityCamel.java | 12 + .../cn/nukkit/entity/passive/EntityCat.java | 7 + .../nukkit/entity/passive/EntityChicken.java | 7 + .../cn/nukkit/entity/passive/EntityCow.java | 7 + .../nukkit/entity/passive/EntityDonkey.java | 10 + .../cn/nukkit/entity/passive/EntityHorse.java | 10 + .../cn/nukkit/entity/passive/EntityLlama.java | 10 + .../entity/passive/EntityMooshroom.java | 7 + .../cn/nukkit/entity/passive/EntityMule.java | 10 + .../nukkit/entity/passive/EntityOcelot.java | 7 + .../cn/nukkit/entity/passive/EntityPanda.java | 7 + .../cn/nukkit/entity/passive/EntityPig.java | 10 + .../cn/nukkit/entity/passive/EntitySheep.java | 10 + .../entity/passive/EntitySkeletonHorse.java | 10 + .../nukkit/entity/passive/EntityStrider.java | 13 + .../entity/passive/EntityTraderLlama.java | 10 + .../cn/nukkit/entity/passive/EntityWolf.java | 7 + .../entity/passive/EntityZombieHorse.java | 10 + .../nukkit/entity/projectile/EntityArrow.java | 11 + .../entity/projectile/EntityProjectile.java | 6 +- .../projectile/EntityThrownTrident.java | 58 +++- .../nukkit/event/block/BlockExplodeEvent.java | 8 +- .../entity/EntityDamageByEntityEvent.java | 4 +- .../event/entity/EntityExplodeEvent.java | 12 +- .../inventory/DoubleChestInventory.java | 8 +- .../inventory/PlayerEnderChestInventory.java | 4 +- src/main/java/cn/nukkit/item/Item.java | 5 + .../java/cn/nukkit/item/ItemAxeDiamond.java | 7 + src/main/java/cn/nukkit/item/ItemAxeGold.java | 7 + src/main/java/cn/nukkit/item/ItemAxeIron.java | 7 + .../java/cn/nukkit/item/ItemAxeNetherite.java | 7 + .../java/cn/nukkit/item/ItemAxeStone.java | 7 + src/main/java/cn/nukkit/item/ItemAxeWood.java | 7 + .../cn/nukkit/item/ItemBlockFullNames.java | 27 ++ src/main/java/cn/nukkit/item/ItemBlockID.java | 27 ++ .../java/cn/nukkit/item/ItemBlockNames.java | 27 ++ .../java/cn/nukkit/item/ItemHoeDiamond.java | 7 + src/main/java/cn/nukkit/item/ItemHoeGold.java | 7 + src/main/java/cn/nukkit/item/ItemHoeIron.java | 7 + .../java/cn/nukkit/item/ItemHoeNetherite.java | 7 + .../java/cn/nukkit/item/ItemHoeStone.java | 7 + src/main/java/cn/nukkit/item/ItemHoeWood.java | 7 + .../cn/nukkit/item/ItemPickaxeDiamond.java | 7 + .../java/cn/nukkit/item/ItemPickaxeGold.java | 7 + .../java/cn/nukkit/item/ItemPickaxeIron.java | 7 + .../cn/nukkit/item/ItemPickaxeNetherite.java | 7 + .../java/cn/nukkit/item/ItemPickaxeStone.java | 7 + .../java/cn/nukkit/item/ItemPickaxeWood.java | 7 + src/main/java/cn/nukkit/item/ItemShears.java | 6 + .../cn/nukkit/item/ItemShovelDiamond.java | 7 + .../java/cn/nukkit/item/ItemShovelGold.java | 7 + .../java/cn/nukkit/item/ItemShovelIron.java | 7 + .../cn/nukkit/item/ItemShovelNetherite.java | 7 + .../java/cn/nukkit/item/ItemShovelStone.java | 7 + .../java/cn/nukkit/item/ItemShovelWood.java | 7 + .../java/cn/nukkit/item/ItemSpawnEgg.java | 2 +- .../java/cn/nukkit/item/ItemSwordDiamond.java | 7 + .../java/cn/nukkit/item/ItemSwordGold.java | 7 + .../java/cn/nukkit/item/ItemSwordIron.java | 7 + .../cn/nukkit/item/ItemSwordNetherite.java | 7 + .../java/cn/nukkit/item/ItemSwordStone.java | 7 + .../java/cn/nukkit/item/ItemSwordWood.java | 7 + src/main/java/cn/nukkit/item/ItemTool.java | 23 +- src/main/java/cn/nukkit/item/ItemTrident.java | 5 +- .../cn/nukkit/item/food/FoodChorusFruit.java | 6 +- .../java/cn/nukkit/level/ChunkPosition.java | 4 + src/main/java/cn/nukkit/level/Explosion.java | 61 ++-- .../level/GlobalBlockPaletteInterface.java | 1 + src/main/java/cn/nukkit/level/Level.java | 251 +++++++------- src/main/java/cn/nukkit/level/Location.java | 5 +- .../cn/nukkit/level/format/FullChunk.java | 7 +- .../level/format/generic/BaseFullChunk.java | 19 +- .../java/cn/nukkit/math/BlockVector3.java | 129 ++++++- src/main/java/cn/nukkit/math/Mth.java | 1 + .../cn/nukkit/math/SimpleAxisAlignedBB.java | 39 ++- src/main/java/cn/nukkit/math/Vector2.java | 45 ++- src/main/java/cn/nukkit/math/Vector2f.java | 59 +++- src/main/java/cn/nukkit/math/Vector3.java | 119 ++++++- src/main/java/cn/nukkit/math/Vector3f.java | 113 +++++- .../network/protocol/LevelEventPacket.java | 6 +- .../nukkit/network/protocol/ProtocolInfo.java | 4 +- src/main/java/cn/nukkit/potion/Potion.java | 6 + src/main/java/cn/nukkit/utils/BlockColor.java | 12 + .../java/cn/nukkit/utils/BlockIterator.java | 61 +++- .../resources/block_properties_table.json | 51 +++ src/main/resources/vanilla_texts/en_US.lang | 327 +++++++++++------- 498 files changed, 4270 insertions(+), 2451 deletions(-) create mode 100644 src/main/java/cn/nukkit/block/BlockToolType.java diff --git a/src/main/java/cn/nukkit/GameVersion.java b/src/main/java/cn/nukkit/GameVersion.java index 0576f9e2da4..9bb6cd12e4a 100644 --- a/src/main/java/cn/nukkit/GameVersion.java +++ b/src/main/java/cn/nukkit/GameVersion.java @@ -49,6 +49,7 @@ public enum GameVersion { V1_20_40(622, "1.20.40"), V1_20_50(630, "1.20.50"), V1_20_60(649, "1.20.60"), + V1_20_70(662, "1.20.70"), ; private static GameVersion FEATURE_VERSION = GameVersion.V1_18_0; diff --git a/src/main/java/cn/nukkit/Player.java b/src/main/java/cn/nukkit/Player.java index 7821fdf8a7b..9dc097f4c9c 100644 --- a/src/main/java/cn/nukkit/Player.java +++ b/src/main/java/cn/nukkit/Player.java @@ -117,6 +117,10 @@ public class Player extends EntityHuman implements CommandSender, InventoryHolde public static final int SPECTATOR = 3; public static final int VIEWER = SPECTATOR; + public static final int MAX_REACH_DISTANCE_CREATIVE = 13 + 1; + public static final int MAX_REACH_DISTANCE_SURVIVAL = 7 + 1; + public static final int MAX_REACH_DISTANCE_ENTITY_INTERACTION = 8; + public static final int SURVIVAL_SLOTS = 36; public static final int CRAFTING_SMALL = 0; @@ -253,8 +257,6 @@ public class Player extends EntityHuman implements CommandSender, InventoryHolde private Locale locale; - private int hash; - private String buttonText = ""; protected boolean enableClientCommand = true; @@ -1228,7 +1230,7 @@ public boolean sleepOn(Vector3 pos) { for (Entity p : this.level.getNearbyEntities(this.boundingBox.grow(2, 1, 2), this)) { if (p instanceof Player) { - if (((Player) p).sleeping != null && pos.distance(((Player) p).sleeping) <= 0.1) { + if (((Player) p).sleeping != null && pos.distanceSquared(((Player) p).sleeping) <= 0.1 * 0.1) { return false; } } @@ -2113,13 +2115,9 @@ public boolean onUpdate(int currentTick) { public void checkInteractNearby() { if (!checkInteractNearby) return; int interactDistance = isCreative() ? 5 : 3; - if (canInteract(this, interactDistance)) { - if (getEntityPlayerLookingAt(interactDistance) != null) { - EntityInteractable onInteract = getEntityPlayerLookingAt(interactDistance); - setButtonText(onInteract.getInteractButtonText(this)); - } else { - setButtonText(""); - } + EntityInteractable onInteract = getEntityPlayerLookingAt(interactDistance); + if (onInteract != null) { + setButtonText(onInteract.getInteractButtonText(this)); } else { setButtonText(""); } @@ -2192,18 +2190,19 @@ public void checkNetwork() { } public boolean canInteract(Vector3 pos, double maxDistance) { - return this.canInteract(pos, maxDistance, 6.0); + return this.canInteract(pos, maxDistance, Mth.SQRT_OF_THREE / 2); } public boolean canInteract(Vector3 pos, double maxDistance, double maxDiff) { - if (this.distanceSquared(pos) > maxDistance * maxDistance) { + Vector3 eyePos = this.getEyePosition(); + if (eyePos.distanceSquared(pos) > maxDistance * maxDistance) { return false; } - Vector2 dV = this.getDirectionPlane(); - double dot = dV.dot(new Vector2(this.x, this.z)); - double dot1 = dV.dot(new Vector2(pos.x, pos.z)); - return (dot1 - dot) >= -maxDiff; + Vector3 dV = this.getDirectionVector(); + double eyeDot = dV.dot(eyePos); + double targetDot = dV.dot(pos); + return (targetDot - eyeDot) >= -maxDiff; } protected void processLogin() { @@ -2707,7 +2706,7 @@ public void onCompletion(Server server) { if (this.riding instanceof EntityBoat boat) { if (this.temporalVector.setComponents(moveEntityPacket.x, moveEntityPacket.y, moveEntityPacket.z).distanceSquared(this.riding) < 1000) { - boat.onInput(moveEntityPacket.x, moveEntityPacket.y, moveEntityPacket.z, moveEntityPacket.yaw % 360); + boat.onInput(moveEntityPacket.x, moveEntityPacket.y, moveEntityPacket.z, moveEntityPacket.yaw % 360, 0); } } break; @@ -2778,7 +2777,7 @@ public void onCompletion(Server server) { long currentBreak = System.currentTimeMillis(); BlockVector3 currentBreakPosition = new BlockVector3(playerActionPacket.x, playerActionPacket.y, playerActionPacket.z); // HACK: Client spams multiple left clicks so we need to skip them. - if ((lastBreakPosition.equalsVec(currentBreakPosition) && (currentBreak - this.lastBreak) < 10) || pos.distanceSquared(this) > 100) { + if ((lastBreakPosition.equalsVec(currentBreakPosition) && (currentBreak - this.lastBreak) < 10) || !canInteract(pos.blockCenter(), isCreative() ? MAX_REACH_DISTANCE_CREATIVE : MAX_REACH_DISTANCE_SURVIVAL)) { break; } Block target = this.level.getBlock(pos, false); @@ -2907,6 +2906,9 @@ public void onCompletion(Server server) { break packetswitch; } PlayerToggleSprintEvent playerToggleSprintEvent = new PlayerToggleSprintEvent(this, true); + if (hasEffect(Effect.BLINDNESS)) { + playerToggleSprintEvent.setCancelled(); + } this.server.getPluginManager().callEvent(playerToggleSprintEvent); if (playerToggleSprintEvent.isCancelled()) { this.sendData(this); @@ -3087,6 +3089,9 @@ public void onCompletion(Server server) { return; } Block block = this.level.getBlock(pickRequestPacket.x, pickRequestPacket.y, pickRequestPacket.z, false); + if (block.isAir()) { + return; + } item = block.pick(pickRequestPacket.addUserData); if (pickRequestPacket.addUserData) { @@ -3094,17 +3099,14 @@ public void onCompletion(Server server) { if (blockEntity != null) { CompoundTag nbt = blockEntity.getCleanedNBT(); if (nbt != null) { - Item item1 = this.getInventory().getItemInHand(); - item1.setCustomBlockData(nbt); - item1.setLore("+(DATA)"); - this.getInventory().setItemInHand(item1); + item.setCustomBlockData(nbt); + item.setLore("+(DATA)"); } } } PlayerBlockPickEvent pickEvent = new PlayerBlockPickEvent(this, block, item); - if (!this.isCreative()) { -// log.debug("Got block-pick request from " + this.getName() + " when not in creative mode (gamemode " + this.getGamemode() + ")"); + if (this.isSpectator()) { pickEvent.setCancelled(); } @@ -3112,15 +3114,49 @@ public void onCompletion(Server server) { if (!pickEvent.isCancelled()) { boolean itemExists = false; - for (int slot = 0; slot != this.inventory.getHotbarSize(); slot++) { + int itemSlot = -1; + for (int slot = 0; slot < this.inventory.getHotbarSize(); slot++) { if (this.inventory.getItem(slot).equals(pickEvent.getItem())) { - this.inventory.setHeldItemSlot(slot); + if (slot < this.inventory.getHotbarSize()) { + this.inventory.setHeldItemSlot(slot); + } else { + itemSlot = slot; + } itemExists = true; break; } } - if (!itemExists) { + + for (int slot = 0; slot < this.inventory.getHotbarSize(); slot++) { + if (this.inventory.getItem(slot).isNull()) { + if (!itemExists && this.isCreative()) { + this.inventory.setHeldItemSlot(slot); + this.inventory.setItemInHand(pickEvent.getItem()); + break packetswitch; + } else if (itemSlot > -1) { + this.inventory.setHeldItemSlot(slot); + this.inventory.setItemInHand(this.inventory.getItem(itemSlot)); + this.inventory.clear(itemSlot, true); + break packetswitch; + } + } + } + + if (!itemExists && this.isCreative()) { + Item itemInHand = this.inventory.getItemInHand(); this.inventory.setItemInHand(pickEvent.getItem()); + if (!this.inventory.isFull()) { + for (int slot = 0; slot < this.inventory.getSize(); slot++) { + if (this.inventory.getItem(slot).isNull()) { + this.inventory.setItem(slot, itemInHand); + break; + } + } + } + } else if (itemSlot > -1) { + Item itemInHand = this.inventory.getItemInHand(); + this.inventory.setItemInHand(this.inventory.getItem(itemSlot)); + this.inventory.setItem(itemSlot, itemInHand); } } break; @@ -3150,7 +3186,7 @@ public void onCompletion(Server server) { boat.onPaddle(animation, paddleTime); } - break; + return; case SWING_ARM: this.swingTime = -1; this.swinging = true; @@ -3304,7 +3340,7 @@ public void onCompletion(Server server) { case ProtocolInfo.REQUEST_CHUNK_RADIUS_PACKET: RequestChunkRadiusPacket requestChunkRadiusPacket = (RequestChunkRadiusPacket) packet; ChunkRadiusUpdatedPacket chunkRadiusUpdatePacket = new ChunkRadiusUpdatedPacket(); - this.chunkRadius = Math.max(3, Math.min(requestChunkRadiusPacket.radius, this.viewDistance)); + this.chunkRadius = Math.max(4, Math.min(requestChunkRadiusPacket.radius, this.viewDistance)); chunkRadiusUpdatePacket.radius = this.chunkRadius; this.dataPacket(chunkRadiusUpdatePacket); break; @@ -3478,7 +3514,7 @@ public void onCompletion(Server server) { case InventoryTransactionPacket.USE_ITEM_ACTION_CLICK_BLOCK: this.setDataFlag(DATA_FLAG_ACTION, false); - if (this.canInteract(blockVector.add(0.5, 0.5, 0.5), this.isCreative() ? 16 : 10)) { + if (this.canInteract(blockVector.add(0.5, 0.5, 0.5), this.isCreative() ? MAX_REACH_DISTANCE_CREATIVE : MAX_REACH_DISTANCE_SURVIVAL)) { if (this.isCreative()) { Item i = inventory.getItemInHand(); if (this.level.useItemOn(blockVector.asVector3(), i, face, useItemData.clickPos.x, useItemData.clickPos.y, useItemData.clickPos.z, this) != null) { @@ -3537,7 +3573,7 @@ public void onCompletion(Server server) { Item oldItem = i.clone(); - if (this.canInteract(blockVector.add(0.5, 0.5, 0.5), this.isCreative() ? 16 : 8) && (i = this.level.useBreakOn(blockVector.asVector3(), i, this, true)) != null) { + if (this.canInteract(blockVector.add(0.5, 0.5, 0.5), this.isCreative() ? MAX_REACH_DISTANCE_CREATIVE : MAX_REACH_DISTANCE_SURVIVAL) && (i = this.level.useBreakOn(blockVector.asVector3(), i, this, true)) != null) { if (this.isSurvival()) { this.getFoodData().updateFoodExpLevel(0.005f); if (!i.equals(oldItem) || i.getCount() != oldItem.getCount()) { @@ -3618,6 +3654,10 @@ public void onCompletion(Server server) { switch (type) { case InventoryTransactionPacket.USE_ITEM_ON_ENTITY_ACTION_INTERACT: + if (!this.canInteract(target, isCreative() ? MAX_REACH_DISTANCE_ENTITY_INTERACTION : 5)) { + break; + } + PlayerInteractEntityEvent playerInteractEntityEvent = new PlayerInteractEntityEvent(this, target, item, useItemOnEntityData.clickPos); if (this.isSpectator()) playerInteractEntityEvent.setCancelled(); getServer().getPluginManager().callEvent(playerInteractEntityEvent); @@ -3643,7 +3683,7 @@ public void onCompletion(Server server) { } break; case InventoryTransactionPacket.USE_ITEM_ON_ENTITY_ACTION_ATTACK: - if (!this.canInteract(target, isCreative() ? 8 : 5)) { + if (!this.canInteract(target, isCreative() ? MAX_REACH_DISTANCE_ENTITY_INTERACTION : 5)) { break; } else if (target instanceof Player) { if ((((Player) target).getGamemode() & 0x01) > 0) { @@ -3968,13 +4008,17 @@ public boolean kick(PlayerKickEvent.Reason reason, String reasonString, boolean return false; } - public void setViewDistance(int distance) { - this.chunkRadius = distance; + public boolean setViewDistance(int distance) { + int viewDistance = Math.max(4, Math.min(distance, this.viewDistance)); + if (this.chunkRadius == viewDistance) { + return false; + } + this.chunkRadius = viewDistance; ChunkRadiusUpdatedPacket pk = new ChunkRadiusUpdatedPacket(); - pk.radius = distance; - + pk.radius = viewDistance; this.dataPacket(pk); + return true; } public int getViewDistance() { @@ -4764,7 +4808,7 @@ public boolean attack(EntityDamageEvent source) { } //Critical hit - if (!damager.onGround && damager instanceof Player player) { + if (!damager.onGround && damager instanceof Player player && !damager.hasEffect(Effect.BLINDNESS)) { if (player.speed != null && player.speed.y > 0) { if (player.attackCriticalThisJump <= 0) { critical = true; @@ -5592,8 +5636,7 @@ public boolean pickupEntity(Entity entity, boolean near) { entity.close(); return true; - } else if (entity instanceof EntityThrownTrident && ((EntityThrownTrident) entity).hadCollision) { - EntityThrownTrident trident = (EntityThrownTrident) entity; + } else if (entity instanceof EntityThrownTrident trident && trident.hadCollision && !trident.hasLoyalty()) { Item item = trident.getItem(); if (!this.isCreative() && !this.inventory.canAddItem(item)) { return false; @@ -5724,22 +5767,8 @@ public boolean pickupEntity(Entity entity, boolean near) { return false; } - @Override - public int hashCode() { - if ((this.hash == 0) || (this.hash == 485)) { - this.hash = (485 + (getUniqueId() != null ? getUniqueId().hashCode() : 0)); - } - - return this.hash; - } - - @Override - public boolean equals(Object obj) { - if (!(obj instanceof Player)) { - return false; - } - Player other = (Player) obj; - return Objects.equals(this.getUniqueId(), other.getUniqueId()) && this.getId() == other.getId(); + public final int rawHashCode() { + return System.identityHashCode(this); } public boolean isBreakingBlock() { @@ -6194,4 +6223,71 @@ public void sendDisconnectScreen(int reason, @Nullable String message) { } dataPacket(packet); } + + /** + * @since 1.11.0 + */ + public void playOnScreenEffectAnimation(int effectId) { + } + + /** + * @since 1.19.50 + */ + public void lockInput() { + lockInput(true, true); + } + + /** + * @since 1.19.50 + */ + public void lockInput(boolean movement) { + lockInput(movement, false); + } + + /** + * @since 1.19.50 + */ + public void lockInput(boolean movement, boolean rotation) { + } + + /** + * @since 1.19.50 + */ + public void unlockInput() { + lockInput(false, false); + } + + public void openBlockEditor(int x, int y, int z, int type) { + ContainerOpenPacket packet = new ContainerOpenPacket(); + packet.type = type; + packet.x = x; + packet.y = y; + packet.z = z; + packet.windowId = Math.max(FIRST_AVAILABLE_WINDOW_ID, ++windowCnt % 99); + dataPacket(packet); + } + + /** + * @since 1.20.60 + */ + public void hideHud() { + } + + /** + * @since 1.20.60 + */ + public void hideHudElements(int... elements) { + } + + /** + * @since 1.20.60 + */ + public void showHud() { + } + + /** + * @since 1.20.60 + */ + public void showHudElements(int... elements) { + } } diff --git a/src/main/java/cn/nukkit/Server.java b/src/main/java/cn/nukkit/Server.java index 060019392cc..e480abfe1aa 100755 --- a/src/main/java/cn/nukkit/Server.java +++ b/src/main/java/cn/nukkit/Server.java @@ -658,9 +658,9 @@ public int broadcast(TextContainer message, String permissions) { } public static void broadcastPacket(Collection players, DataPacket packet) { - if (players.size() > 1) { - packet.tryEncode(); - } +// if (players.size() > 1) { +// packet.tryEncode(); +// } for (Player player : players) { player.dataPacket(packet); @@ -668,9 +668,9 @@ public static void broadcastPacket(Collection players, DataPacket packet } public static void broadcastPacket(Player[] players, DataPacket packet) { - if (players.length > 1) { - packet.tryEncode(); - } +// if (players.length > 1) { +// packet.tryEncode(); +// } for (Player player : players) { player.dataPacket(packet); diff --git a/src/main/java/cn/nukkit/block/Block.java b/src/main/java/cn/nukkit/block/Block.java index d046631790a..cbe35254a4b 100644 --- a/src/main/java/cn/nukkit/block/Block.java +++ b/src/main/java/cn/nukkit/block/Block.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.AdventureSettings; import cn.nukkit.Player; import cn.nukkit.Server; import cn.nukkit.entity.Entity; @@ -36,7 +37,6 @@ import java.util.Arrays; import java.util.List; import java.util.Objects; -import java.util.Optional; import java.util.function.Supplier; import static cn.nukkit.SharedConstants.*; @@ -490,6 +490,10 @@ public int tickRate() { } public boolean onBreak(Item item) { + return onBreak(item, null); + } + + public boolean onBreak(Item item, @Nullable Player player) { return this.getLevel().setBlock(this, Block.get(BlockID.AIR), true, true); } @@ -509,12 +513,12 @@ public boolean onActivate(Item item, @Nullable BlockFace face, @Nullable Player return false; } - public double getHardness() { - return 10; + public float getHardness() { + return 0; } - public double getResistance() { - return 1; + public float getResistance() { + return getHardness() * 5; } public int getBurnChance() { @@ -529,11 +533,11 @@ public int getBurnAbility() { } public int getToolType() { - return ItemTool.TYPE_NONE; + return BlockToolType.NONE; } - public double getFrictionFactor() { - return 0.6; + public float getFrictionFactor() { + return 0.6f; } public int getLightLevel() { @@ -677,166 +681,127 @@ public final void position(Position v) { } public Item[] getDrops(Item item) { - if (this.getId() < 0 || this.getId() > list.length) { //Unknown blocks - return new Item[0]; - } else { - return new Item[]{ - this.toItem(true) - }; - } + return getDrops(item, null); } - private static double toolBreakTimeBonus0(int toolType, int toolTier, int blockId) { - if (toolType == ItemTool.TYPE_SWORD) return blockId == Block.WEB ? 15.0 : 1.0; - if (toolType == ItemTool.TYPE_SHEARS) { - if (blockId == Block.WOOL || blockId == LEAVES || blockId == LEAVES2) { - return 5.0; - } else if (blockId == WEB) { - return 15.0; + public Item[] getDrops(Item item, @Nullable Player player) { + return new Item[]{ + this.toItem(true) + }; + } + + private float getDestroySpeed(Item item, boolean correctTool) { + int toolType = item.getBlockToolType(); + if (toolType == BlockToolType.SWORD) { + if (is(WEB)) { + return 15; + } + if (is(BAMBOO)) { + return 10; + } + return 1.5f; + } + if (!correctTool) { + return 1; + } + if (toolType == BlockToolType.SHEARS) { + if (is(WEB) || isLeaves()) { + return 15; + } + if (is(WOOL)) { + return 5; + } + if (is(VINE) || is(GLOW_LICHEN)) { + return 2; } - return 1.0; + return 1; } - if (toolType == ItemTool.TYPE_NONE) return 1.0; - switch (toolTier) { + if (toolType == BlockToolType.NONE) { + return 1; + } + switch (item.getTier()) { case ItemTool.TIER_WOODEN: - return 2.0; + return 2; case ItemTool.TIER_STONE: - return 4.0; + return 4; case ItemTool.TIER_IRON: - return 6.0; + return 6; case ItemTool.TIER_DIAMOND: - return 8.0; + return 8; case ItemTool.TIER_NETHERITE: return 9; case ItemTool.TIER_GOLD: - return 12.0; + return 12; default: - return 1.0; + return 1; } } - private static double speedBonusByEfficiencyLore0(int efficiencyLoreLevel) { - if (efficiencyLoreLevel == 0) return 0; - return efficiencyLoreLevel * efficiencyLoreLevel + 1; - } - - private static double speedRateByHasteLore0(int hasteLoreLevel) { - return 1.0 + (0.2 * hasteLoreLevel); - } - - private static int toolType0(Item item) { - if (item.isSword()) return ItemTool.TYPE_SWORD; - if (item.isShovel()) return ItemTool.TYPE_SHOVEL; - if (item.isPickaxe()) return ItemTool.TYPE_PICKAXE; - if (item.isAxe()) return ItemTool.TYPE_AXE; - if (item.isHoe()) return ItemTool.TYPE_HOE; - if (item.isShears()) return ItemTool.TYPE_SHEARS; - return ItemTool.TYPE_NONE; - } - - private static boolean correctTool0(int blockToolType, Item item) { - return (blockToolType == ItemTool.TYPE_SWORD && item.isSword()) || - (blockToolType == ItemTool.TYPE_SHOVEL && item.isShovel()) || - (blockToolType == ItemTool.TYPE_PICKAXE && item.isPickaxe()) || - (blockToolType == ItemTool.TYPE_AXE && item.isAxe()) || - (blockToolType == ItemTool.TYPE_HOE && item.isHoe()) || - (blockToolType == ItemTool.TYPE_SHEARS && item.isShears()) || - blockToolType == ItemTool.TYPE_NONE; - } - - //http://minecraft.gamepedia.com/Breaking - private static double breakTime0(double blockHardness, boolean correctTool, boolean canHarvestWithHand, - int blockId, int toolType, int toolTier, int efficiencyLoreLevel, int hasteEffectLevel, - boolean insideOfWaterWithoutAquaAffinity, boolean outOfWaterButNotOnGround) { - double baseTime = ((correctTool || canHarvestWithHand) ? 1.5 : 5.0) * blockHardness; - double speed = 1.0 / baseTime; - if (correctTool) speed *= toolBreakTimeBonus0(toolType, toolTier, blockId); - speed += correctTool ? speedBonusByEfficiencyLore0(efficiencyLoreLevel) : 0; - speed *= speedRateByHasteLore0(hasteEffectLevel); - if (insideOfWaterWithoutAquaAffinity) speed *= 0.2; - if (outOfWaterButNotOnGround) speed *= 0.2; - return 1.0 / speed; - } - - public double getBreakTime(Item item, Player player) { + public float getBreakTime(Item item, Player player) { Objects.requireNonNull(item, "getBreakTime: Item can not be null"); Objects.requireNonNull(player, "getBreakTime: Player can not be null"); - double blockHardness = getHardness(); + float blockHardness = getHardness(); if (blockHardness == 0) { return 0; } - int blockId = getId(); - boolean correctTool = correctTool0(getToolType(), item) - || item.isShears() && (blockId == WEB || blockId == LEAVES || blockId == LEAVES2); - boolean canHarvestWithHand = canHarvestWithHand(); - int itemToolType = toolType0(item); - int itemTier = item.getTier(); - int efficiencyLoreLevel = item.getId() != Item.ENCHANTED_BOOK ? Optional.ofNullable(item.getEnchantment(Enchantment.EFFICIENCY)) - .map(Enchantment::getLevel).orElse(0) : 0; - int hasteEffectLevel = Optional.ofNullable(player.getEffect(Effect.HASTE)) - .map(Effect::getAmplifier).orElse(0); - boolean insideOfWaterWithoutAquaAffinity = player.isInsideOfWater() && - Optional.ofNullable(player.getInventory().getHelmet().getEnchantment(Enchantment.AQUA_AFFINITY)) - .map(Enchantment::getLevel).map(l -> l >= 1).orElse(false); - boolean outOfWaterButNotOnGround = (!player.isInsideOfWater()) && (!player.isOnGround()); - return breakTime0(blockHardness, correctTool, canHarvestWithHand, blockId, itemToolType, itemTier, - efficiencyLoreLevel, hasteEffectLevel, insideOfWaterWithoutAquaAffinity, outOfWaterButNotOnGround); - } + int toolType = getToolType(); + boolean correctTool = isToolCompatible(toolType, item.getBlockToolType()); + float baseTime = (correctTool || canHarvestWithHand() ? 1.5f : 5) * blockHardness; + float speed = 1 / baseTime; - /** - * @deprecated This function is lack of Player class and is not accurate enough, use #getBreakTime(Item, Player) - * @param item item used - * @return break time - */ - @Deprecated - public double getBreakTime(Item item) { - double base = this.getHardness() * 1.5; - if (this.canBeBrokenWith(item)) { - if (this.getToolType() == ItemTool.TYPE_SHEARS && item.isShears()) { - base /= 15; - } else if ( - (this.getToolType() == ItemTool.TYPE_PICKAXE && item.isPickaxe()) || - (this.getToolType() == ItemTool.TYPE_AXE && item.isAxe()) || - (this.getToolType() == ItemTool.TYPE_SHOVEL && item.isShovel()) || - (this.getToolType() == ItemTool.TYPE_HOE && item.isHoe()) - ) { - int tier = item.getTier(); - switch (tier) { - case ItemTool.TIER_WOODEN: - base /= 2; - break; - case ItemTool.TIER_STONE: - base /= 4; - break; - case ItemTool.TIER_IRON: - base /= 6; - break; - case ItemTool.TIER_DIAMOND: - base /= 8; - break; - case ItemTool.TIER_NETHERITE: - base /= 9; - break; - case ItemTool.TIER_GOLD: - base /= 12; - break; - } + float destroySpeedBonus = 0; + if (correctTool) { + int efficiency = item.getEnchantmentLevel(Enchantment.EFFICIENCY); + if (efficiency > 0) { + destroySpeedBonus = efficiency * efficiency + 1; } - } else { - base *= 3.33; } - if (item.isSword()) { - base *= 0.5; + speed *= getDestroySpeed(item, correctTool) + destroySpeedBonus; + + int amp = 0; + Effect digSpeed = player.getEffect(Effect.HASTE); + if (digSpeed != null) { + amp = digSpeed.getAmplifier() + 1; + } + Effect conduitPower = player.getEffect(Effect.CONDUIT_POWER); + if (conduitPower != null) { + amp = Math.max(amp, conduitPower.getAmplifier() + 1); + } + if (amp > 0) { + speed *= 1 + 0.2f * amp; + } + + Effect digSlowdown = player.getEffect(Effect.MINING_FATIGUE); + if (digSlowdown != null) { + speed *= Math.pow(0.3f, digSlowdown.getAmplifier() + 1); + } + + if (player.isRiding() || !player.isOnGround() && !player.getAdventureSettings().get(AdventureSettings.Type.NO_CLIP) && !player.getAdventureSettings().get(AdventureSettings.Type.FLYING)) { + speed *= 0.2f; } + if (player.isInsideOfWater() && !player.getInventory().getHelmet().hasEnchantment(Enchantment.AQUA_AFFINITY)) { + speed *= 0.2f; + } + + return 1 / speed; + } - return base; + public boolean isToolCompatible(Item item) { + return isToolCompatible(item.getBlockToolType()); } - public boolean canBeBrokenWith(Item item) { - return this.getHardness() != -1; + public boolean isToolCompatible(int toolType) { + return isToolCompatible(getToolType(), toolType); + } + + public static boolean isToolCompatible(int blockToolType, int itemToolType) { + if (blockToolType == BlockToolType.NONE) { + return false; + } + return (blockToolType & itemToolType) != 0; } @Override @@ -1160,11 +1125,15 @@ public static boolean equals(Block b1, Block b2, boolean checkDamage) { @Override public boolean equals(Object obj) { + if (obj == this) { + return true; + } return obj instanceof Block && equals(this, (Block) obj) && (this.level == null || (this.level == ((Block) obj).level && super.equals(obj))); } - public boolean superEquals(Object obj) { - return super.equals(obj); + @Override + public int hashCode() { + return getFullId(); } public Item toItem() { diff --git a/src/main/java/cn/nukkit/block/BlockAir.java b/src/main/java/cn/nukkit/block/BlockAir.java index a11dd4ad925..e15109d7e59 100644 --- a/src/main/java/cn/nukkit/block/BlockAir.java +++ b/src/main/java/cn/nukkit/block/BlockAir.java @@ -59,12 +59,12 @@ protected AxisAlignedBB recalculateBoundingBox() { } @Override - public double getHardness() { + public float getHardness() { return 0; } @Override - public double getResistance() { + public float getResistance() { return 0; } diff --git a/src/main/java/cn/nukkit/block/BlockAllow.java b/src/main/java/cn/nukkit/block/BlockAllow.java index 9864c651bef..a4810fb615a 100644 --- a/src/main/java/cn/nukkit/block/BlockAllow.java +++ b/src/main/java/cn/nukkit/block/BlockAllow.java @@ -19,12 +19,12 @@ public String getName() { } @Override - public double getHardness() { - return 0.2; + public float getHardness() { + return 0.2f; } @Override - public double getResistance() { + public float getResistance() { return 18000; } diff --git a/src/main/java/cn/nukkit/block/BlockAmethyst.java b/src/main/java/cn/nukkit/block/BlockAmethyst.java index 1a281469826..edfd748a38c 100644 --- a/src/main/java/cn/nukkit/block/BlockAmethyst.java +++ b/src/main/java/cn/nukkit/block/BlockAmethyst.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; @@ -19,18 +20,18 @@ public String getName() { } @Override - public double getHardness() { - return 1.5; + public float getHardness() { + return 1.5f; } @Override - public double getResistance() { - return 7.5; + public float getResistance() { + return 7.5f; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override @@ -39,7 +40,7 @@ public boolean canHarvestWithHand() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{ toItem(true), diff --git a/src/main/java/cn/nukkit/block/BlockAmethystBud.java b/src/main/java/cn/nukkit/block/BlockAmethystBud.java index 4d8c211f935..6f1ad54e43f 100644 --- a/src/main/java/cn/nukkit/block/BlockAmethystBud.java +++ b/src/main/java/cn/nukkit/block/BlockAmethystBud.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; public abstract class BlockAmethystBud extends BlockAmethystCluster { @@ -8,12 +9,7 @@ protected BlockAmethystBud(int meta) { } @Override - public boolean canHarvestWithHand() { - return false; - } - - @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { return new Item[0]; } } diff --git a/src/main/java/cn/nukkit/block/BlockAmethystBudding.java b/src/main/java/cn/nukkit/block/BlockAmethystBudding.java index da2aca1ef68..2fa8a3c3cd8 100644 --- a/src/main/java/cn/nukkit/block/BlockAmethystBudding.java +++ b/src/main/java/cn/nukkit/block/BlockAmethystBudding.java @@ -1,7 +1,7 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; -import cn.nukkit.item.ItemTool; import cn.nukkit.level.Level; import cn.nukkit.math.BlockFace; import cn.nukkit.utils.BlockColor; @@ -23,18 +23,18 @@ public String getName() { } @Override - public double getHardness() { - return 1.5; + public float getHardness() { + return 1.5f; } @Override - public double getResistance() { - return 7.5; + public float getResistance() { + return 7.5f; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override @@ -43,7 +43,7 @@ public boolean canHarvestWithHand() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { return new Item[0]; } diff --git a/src/main/java/cn/nukkit/block/BlockAmethystCluster.java b/src/main/java/cn/nukkit/block/BlockAmethystCluster.java index 6bce80a29d4..f787f22a077 100644 --- a/src/main/java/cn/nukkit/block/BlockAmethystCluster.java +++ b/src/main/java/cn/nukkit/block/BlockAmethystCluster.java @@ -2,7 +2,6 @@ import cn.nukkit.Player; import cn.nukkit.item.Item; -import cn.nukkit.item.ItemTool; import cn.nukkit.level.Level; import cn.nukkit.math.AxisAlignedBB; import cn.nukkit.math.BlockFace; @@ -32,18 +31,18 @@ public String getName() { } @Override - public double getHardness() { - return 0.25; + public float getHardness() { + return 1.5f; } @Override - public double getResistance() { - return 1.25; + public float getResistance() { + return 7.5f; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override @@ -57,7 +56,7 @@ public Item toItem(boolean addUserData) { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { return new Item[]{ Item.get(Item.AMETHYST_SHARD, 0, item.isPickaxe() ? 4 : 2), }; @@ -127,6 +126,11 @@ public boolean sticksToPiston() { return false; } + @Override + public boolean canProvideSupport(BlockFace face, SupportType type) { + return false; + } + @Override public boolean canContainWater() { return true; diff --git a/src/main/java/cn/nukkit/block/BlockAncientDebris.java b/src/main/java/cn/nukkit/block/BlockAncientDebris.java index dd1850105ad..0b36508f03f 100644 --- a/src/main/java/cn/nukkit/block/BlockAncientDebris.java +++ b/src/main/java/cn/nukkit/block/BlockAncientDebris.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; @@ -19,18 +20,18 @@ public String getName() { } @Override - public double getHardness() { + public float getHardness() { return 30; } @Override - public double getResistance() { + public float getResistance() { return 6000; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override @@ -39,7 +40,7 @@ public boolean canHarvestWithHand() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_DIAMOND) { return new Item[]{ toItem(true), diff --git a/src/main/java/cn/nukkit/block/BlockAnvil.java b/src/main/java/cn/nukkit/block/BlockAnvil.java index 7695fe5fc04..e7e6f649386 100644 --- a/src/main/java/cn/nukkit/block/BlockAnvil.java +++ b/src/main/java/cn/nukkit/block/BlockAnvil.java @@ -71,18 +71,18 @@ public boolean isTransparent() { } @Override - public double getHardness() { + public float getHardness() { return 5; } @Override - public double getResistance() { + public float getResistance() { return 6000; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override @@ -117,7 +117,7 @@ public Item toItem(boolean addUserData) { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{ this.toItem(true) diff --git a/src/main/java/cn/nukkit/block/BlockAzalea.java b/src/main/java/cn/nukkit/block/BlockAzalea.java index fd78ecb6bbd..54378256b28 100644 --- a/src/main/java/cn/nukkit/block/BlockAzalea.java +++ b/src/main/java/cn/nukkit/block/BlockAzalea.java @@ -4,6 +4,7 @@ import cn.nukkit.item.Item; import cn.nukkit.level.Level; import cn.nukkit.level.particle.BoneMealParticle; +import cn.nukkit.math.AxisAlignedBB; import cn.nukkit.math.BlockFace; import cn.nukkit.utils.BlockColor; @@ -80,6 +81,16 @@ public int onUpdate(int type) { return 0; } + @Override + protected AxisAlignedBB recalculateBoundingBox() { + return this; + } + + @Override + public boolean canPassThrough() { + return false; + } + @Override public boolean canContainWater() { return true; diff --git a/src/main/java/cn/nukkit/block/BlockBamboo.java b/src/main/java/cn/nukkit/block/BlockBamboo.java index c38e9fa44fc..7f39b1782c5 100644 --- a/src/main/java/cn/nukkit/block/BlockBamboo.java +++ b/src/main/java/cn/nukkit/block/BlockBamboo.java @@ -4,7 +4,6 @@ import cn.nukkit.item.Item; import cn.nukkit.item.ItemDye; import cn.nukkit.item.ItemID; -import cn.nukkit.item.ItemTool; import cn.nukkit.level.Level; import cn.nukkit.level.particle.BoneMealParticle; import cn.nukkit.math.AxisAlignedBB; @@ -49,11 +48,11 @@ public String getName() { @Override public int getToolType() { - return ItemTool.TYPE_SWORD; + return BlockToolType.SWORD | BlockToolType.AXE; } @Override - public double getHardness() { + public float getHardness() { if (ENABLE_BLOCK_DESTROY_SPEED_COMPATIBILITY || V1_20_30.isAvailable()) { return 1; } @@ -61,7 +60,7 @@ public double getHardness() { } @Override - public double getResistance() { + public float getResistance() { return 5; } diff --git a/src/main/java/cn/nukkit/block/BlockBambooSapling.java b/src/main/java/cn/nukkit/block/BlockBambooSapling.java index 87c3d55a079..026f3965a38 100644 --- a/src/main/java/cn/nukkit/block/BlockBambooSapling.java +++ b/src/main/java/cn/nukkit/block/BlockBambooSapling.java @@ -34,7 +34,7 @@ public String getName() { } @Override - public double getHardness() { + public float getHardness() { if (V1_20_30.isAvailable()) { return 1; } @@ -42,7 +42,7 @@ public double getHardness() { } @Override - public double getResistance() { + public float getResistance() { return 5; } diff --git a/src/main/java/cn/nukkit/block/BlockBanner.java b/src/main/java/cn/nukkit/block/BlockBanner.java index 387d562d9fd..ee6c2f792d7 100644 --- a/src/main/java/cn/nukkit/block/BlockBanner.java +++ b/src/main/java/cn/nukkit/block/BlockBanner.java @@ -6,7 +6,6 @@ import cn.nukkit.blockentity.BlockEntityBanner; import cn.nukkit.blockentity.BlockEntityType; import cn.nukkit.item.Item; -import cn.nukkit.item.ItemTool; import cn.nukkit.level.Level; import cn.nukkit.math.AxisAlignedBB; import cn.nukkit.math.BlockFace; @@ -43,18 +42,18 @@ public int getBlockEntityType() { } @Override - public double getHardness() { + public float getHardness() { return 1; } @Override - public double getResistance() { + public float getResistance() { return 5; } @Override public int getToolType() { - return ItemTool.TYPE_AXE; + return BlockToolType.AXE; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockBarrel.java b/src/main/java/cn/nukkit/block/BlockBarrel.java index defe98c6a1e..1a637300fe9 100644 --- a/src/main/java/cn/nukkit/block/BlockBarrel.java +++ b/src/main/java/cn/nukkit/block/BlockBarrel.java @@ -7,7 +7,6 @@ import cn.nukkit.blockentity.BlockEntityType; import cn.nukkit.inventory.ContainerInventory; import cn.nukkit.item.Item; -import cn.nukkit.item.ItemTool; import cn.nukkit.math.BlockFace; import cn.nukkit.nbt.tag.CompoundTag; import cn.nukkit.utils.BlockColor; @@ -44,18 +43,18 @@ public int getBlockEntityType() { } @Override - public double getHardness() { - return 2.5; + public float getHardness() { + return 2.5f; } @Override - public double getResistance() { - return 12.5; + public float getResistance() { + return 12.5f; } @Override public int getToolType() { - return ItemTool.TYPE_AXE; + return BlockToolType.AXE; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockBarrier.java b/src/main/java/cn/nukkit/block/BlockBarrier.java index d79b537df8f..a4f9c9ef95a 100644 --- a/src/main/java/cn/nukkit/block/BlockBarrier.java +++ b/src/main/java/cn/nukkit/block/BlockBarrier.java @@ -19,12 +19,12 @@ public String getName() { } @Override - public double getHardness() { + public float getHardness() { return -1; } @Override - public double getResistance() { + public float getResistance() { return 18000000; } diff --git a/src/main/java/cn/nukkit/block/BlockBasalt.java b/src/main/java/cn/nukkit/block/BlockBasalt.java index d791f8f00b9..9f5bbb1834e 100644 --- a/src/main/java/cn/nukkit/block/BlockBasalt.java +++ b/src/main/java/cn/nukkit/block/BlockBasalt.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; @@ -24,18 +25,18 @@ public String getName() { } @Override - public double getHardness() { - return 1.25; + public float getHardness() { + return 1.25f; } @Override - public double getResistance() { + public float getResistance() { return 21; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override @@ -44,7 +45,7 @@ public boolean canHarvestWithHand() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{ toItem(true), diff --git a/src/main/java/cn/nukkit/block/BlockBasaltSmooth.java b/src/main/java/cn/nukkit/block/BlockBasaltSmooth.java index 50c1eced774..98d8090c81f 100644 --- a/src/main/java/cn/nukkit/block/BlockBasaltSmooth.java +++ b/src/main/java/cn/nukkit/block/BlockBasaltSmooth.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; @@ -19,18 +20,18 @@ public String getName() { } @Override - public double getHardness() { - return 1.25; + public float getHardness() { + return 1.25f; } @Override - public double getResistance() { + public float getResistance() { return 21; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override @@ -39,7 +40,7 @@ public boolean canHarvestWithHand() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{ toItem(true), diff --git a/src/main/java/cn/nukkit/block/BlockBeacon.java b/src/main/java/cn/nukkit/block/BlockBeacon.java index 613f29e77db..6ce556c255f 100644 --- a/src/main/java/cn/nukkit/block/BlockBeacon.java +++ b/src/main/java/cn/nukkit/block/BlockBeacon.java @@ -7,7 +7,6 @@ import cn.nukkit.blockentity.BlockEntityType; import cn.nukkit.inventory.BeaconInventory; import cn.nukkit.item.Item; -import cn.nukkit.item.ItemTool; import cn.nukkit.math.BlockFace; import cn.nukkit.nbt.tag.CompoundTag; import cn.nukkit.utils.BlockColor; @@ -31,12 +30,12 @@ public int getBlockEntityType() { } @Override - public double getHardness() { + public float getHardness() { return 3; } @Override - public double getResistance() { + public float getResistance() { return 15; } @@ -45,11 +44,6 @@ public int getLightLevel() { return 15; } - @Override - public int getToolType() { - return ItemTool.TYPE_PICKAXE; - } - @Override public String getName() { return "Beacon"; diff --git a/src/main/java/cn/nukkit/block/BlockBed.java b/src/main/java/cn/nukkit/block/BlockBed.java index 6d18af12ceb..0ceaf3b373c 100644 --- a/src/main/java/cn/nukkit/block/BlockBed.java +++ b/src/main/java/cn/nukkit/block/BlockBed.java @@ -54,13 +54,13 @@ public boolean canBeActivated() { } @Override - public double getResistance() { + public float getResistance() { return 1; } @Override - public double getHardness() { - return 0.2; + public float getHardness() { + return 0.2f; } @Override @@ -150,7 +150,7 @@ public boolean place(Item item, Block block, Block target, BlockFace face, doubl } @Override - public boolean onBreak(Item item) { + public boolean onBreak(Item item, Player player) { int meta = getDamage(); int direction = meta & DIRECTION_MASK; BlockFace face = BlockFace.fromHorizontalIndex(direction); @@ -163,7 +163,7 @@ public boolean onBreak(Item item) { this.getLevel().setBlock(pair, Block.get(BlockID.AIR), true, false); } - return super.onBreak(item); + return super.onBreak(item, player); } private void createBlockEntity(Vector3 pos, int color) { diff --git a/src/main/java/cn/nukkit/block/BlockBedrock.java b/src/main/java/cn/nukkit/block/BlockBedrock.java index aae8ac016fd..34d75824071 100644 --- a/src/main/java/cn/nukkit/block/BlockBedrock.java +++ b/src/main/java/cn/nukkit/block/BlockBedrock.java @@ -23,12 +23,12 @@ public int getId() { } @Override - public double getHardness() { + public float getHardness() { return -1; } @Override - public double getResistance() { + public float getResistance() { return 18000000; } diff --git a/src/main/java/cn/nukkit/block/BlockBedrockInvisible.java b/src/main/java/cn/nukkit/block/BlockBedrockInvisible.java index babef5d320d..e511d5f7a9a 100644 --- a/src/main/java/cn/nukkit/block/BlockBedrockInvisible.java +++ b/src/main/java/cn/nukkit/block/BlockBedrockInvisible.java @@ -23,12 +23,12 @@ public String getName() { } @Override - public double getHardness() { + public float getHardness() { return -1; } @Override - public double getResistance() { + public float getResistance() { return 18000000; } diff --git a/src/main/java/cn/nukkit/block/BlockBeeNest.java b/src/main/java/cn/nukkit/block/BlockBeeNest.java index 745034eb51f..7b330840461 100644 --- a/src/main/java/cn/nukkit/block/BlockBeeNest.java +++ b/src/main/java/cn/nukkit/block/BlockBeeNest.java @@ -23,13 +23,13 @@ public String getName() { } @Override - public double getHardness() { - return 0.3; + public float getHardness() { + return 0.3f; } @Override - public double getResistance() { - return 1.5; + public float getResistance() { + return 1.5f; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockBeehive.java b/src/main/java/cn/nukkit/block/BlockBeehive.java index aaf5650364a..c36b08ac689 100644 --- a/src/main/java/cn/nukkit/block/BlockBeehive.java +++ b/src/main/java/cn/nukkit/block/BlockBeehive.java @@ -7,7 +7,6 @@ import cn.nukkit.blockentity.BlockEntityType; import cn.nukkit.item.Item; import cn.nukkit.item.ItemID; -import cn.nukkit.item.ItemTool; import cn.nukkit.level.GameRule; import cn.nukkit.math.BlockFace; import cn.nukkit.math.Mth; @@ -50,16 +49,16 @@ public int getBlockEntityType() { @Override public int getToolType() { - return ItemTool.TYPE_AXE; + return BlockToolType.AXE; } @Override - public double getHardness() { - return 0.6; + public float getHardness() { + return 0.6f; } @Override - public double getResistance() { + public float getResistance() { return 3; } diff --git a/src/main/java/cn/nukkit/block/BlockBeetroot.java b/src/main/java/cn/nukkit/block/BlockBeetroot.java index cd9b87b8f3d..3ceecf5c9c0 100644 --- a/src/main/java/cn/nukkit/block/BlockBeetroot.java +++ b/src/main/java/cn/nukkit/block/BlockBeetroot.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import java.util.concurrent.ThreadLocalRandom; @@ -33,7 +34,7 @@ public Item toItem(boolean addUserData) { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (this.getDamage() >= 0x07) { return new Item[]{ Item.get(Item.BEETROOT, 0, 1), diff --git a/src/main/java/cn/nukkit/block/BlockBell.java b/src/main/java/cn/nukkit/block/BlockBell.java index 6fecb806cb1..c1e8726dd60 100644 --- a/src/main/java/cn/nukkit/block/BlockBell.java +++ b/src/main/java/cn/nukkit/block/BlockBell.java @@ -7,7 +7,6 @@ import cn.nukkit.blockentity.BlockEntityType; import cn.nukkit.item.Item; import cn.nukkit.item.ItemID; -import cn.nukkit.item.ItemTool; import cn.nukkit.level.Level; import cn.nukkit.math.AxisAlignedBB; import cn.nukkit.math.BlockFace; @@ -54,11 +53,11 @@ public int getId() { @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override - public double getHardness() { + public float getHardness() { if (V1_20_30.isAvailable()) { return 5; } @@ -66,7 +65,7 @@ public double getHardness() { } @Override - public double getResistance() { + public float getResistance() { return 25; } diff --git a/src/main/java/cn/nukkit/block/BlockBlackstone.java b/src/main/java/cn/nukkit/block/BlockBlackstone.java index 25d183b1054..28a5da5ec61 100644 --- a/src/main/java/cn/nukkit/block/BlockBlackstone.java +++ b/src/main/java/cn/nukkit/block/BlockBlackstone.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; @@ -19,18 +20,18 @@ public String getName() { } @Override - public double getHardness() { - return 1.5; + public float getHardness() { + return 1.5f; } @Override - public double getResistance() { + public float getResistance() { return 30; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override @@ -39,7 +40,7 @@ public boolean canHarvestWithHand() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{ toItem(true), diff --git a/src/main/java/cn/nukkit/block/BlockBlackstoneGilded.java b/src/main/java/cn/nukkit/block/BlockBlackstoneGilded.java index 8f42166d90d..b3b59a4ba4c 100644 --- a/src/main/java/cn/nukkit/block/BlockBlackstoneGilded.java +++ b/src/main/java/cn/nukkit/block/BlockBlackstoneGilded.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; @@ -21,18 +22,18 @@ public String getName() { } @Override - public double getHardness() { - return 1.5; + public float getHardness() { + return 1.5f; } @Override - public double getResistance() { + public float getResistance() { return 30; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override @@ -41,7 +42,7 @@ public boolean canHarvestWithHand() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { ThreadLocalRandom random = ThreadLocalRandom.current(); if (random.nextInt(10) == 0) { diff --git a/src/main/java/cn/nukkit/block/BlockBlackstonePolished.java b/src/main/java/cn/nukkit/block/BlockBlackstonePolished.java index 58f467cac45..6b628db1883 100644 --- a/src/main/java/cn/nukkit/block/BlockBlackstonePolished.java +++ b/src/main/java/cn/nukkit/block/BlockBlackstonePolished.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; @@ -21,21 +22,21 @@ public String getName() { } @Override - public double getHardness() { + public float getHardness() { if (V1_20_30.isAvailable()) { return 2; } - return 1.5; + return 1.5f; } @Override - public double getResistance() { + public float getResistance() { return 30; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override @@ -44,7 +45,7 @@ public boolean canHarvestWithHand() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{ toItem(true), diff --git a/src/main/java/cn/nukkit/block/BlockBlackstonePolishedChiseled.java b/src/main/java/cn/nukkit/block/BlockBlackstonePolishedChiseled.java index fe985176371..7176826bb73 100644 --- a/src/main/java/cn/nukkit/block/BlockBlackstonePolishedChiseled.java +++ b/src/main/java/cn/nukkit/block/BlockBlackstonePolishedChiseled.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; @@ -19,18 +20,18 @@ public String getName() { } @Override - public double getHardness() { - return 1.5; + public float getHardness() { + return 1.5f; } @Override - public double getResistance() { + public float getResistance() { return 30; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override @@ -39,7 +40,7 @@ public boolean canHarvestWithHand() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{ toItem(true), diff --git a/src/main/java/cn/nukkit/block/BlockBone.java b/src/main/java/cn/nukkit/block/BlockBone.java index d963cecf749..fea48543b90 100644 --- a/src/main/java/cn/nukkit/block/BlockBone.java +++ b/src/main/java/cn/nukkit/block/BlockBone.java @@ -40,22 +40,22 @@ public String getName() { } @Override - public double getHardness() { + public float getHardness() { return 2; } @Override - public double getResistance() { + public float getResistance() { return 10; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{toItem(true)}; } diff --git a/src/main/java/cn/nukkit/block/BlockBookshelf.java b/src/main/java/cn/nukkit/block/BlockBookshelf.java index 390ba610143..2763fab26b1 100644 --- a/src/main/java/cn/nukkit/block/BlockBookshelf.java +++ b/src/main/java/cn/nukkit/block/BlockBookshelf.java @@ -1,7 +1,7 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; -import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; /** @@ -28,18 +28,18 @@ public int getId() { } @Override - public double getHardness() { - return 1.5D; + public float getHardness() { + return 1.5f; } @Override - public double getResistance() { - return 7.5D; + public float getResistance() { + return 7.5f; } @Override public int getToolType() { - return ItemTool.TYPE_AXE; + return BlockToolType.AXE; } @Override @@ -53,7 +53,7 @@ public int getBurnAbility() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { return new Item[]{ Item.get(Item.BOOK, 0, 3) }; diff --git a/src/main/java/cn/nukkit/block/BlockBorder.java b/src/main/java/cn/nukkit/block/BlockBorder.java index 744d6c50f96..62946dedbcc 100644 --- a/src/main/java/cn/nukkit/block/BlockBorder.java +++ b/src/main/java/cn/nukkit/block/BlockBorder.java @@ -24,12 +24,12 @@ public String getName() { } @Override - public double getHardness() { - return 0.2; + public float getHardness() { + return 0.2f; } @Override - public double getResistance() { + public float getResistance() { return 18000; } diff --git a/src/main/java/cn/nukkit/block/BlockBrewingStand.java b/src/main/java/cn/nukkit/block/BlockBrewingStand.java index e56688ed60a..1cda62eb475 100644 --- a/src/main/java/cn/nukkit/block/BlockBrewingStand.java +++ b/src/main/java/cn/nukkit/block/BlockBrewingStand.java @@ -41,18 +41,18 @@ public boolean canBeActivated() { } @Override - public double getHardness() { - return 0.5; + public float getHardness() { + return 0.5f; } @Override - public double getResistance() { - return 2.5; + public float getResistance() { + return 2.5f; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override @@ -126,7 +126,7 @@ public Item toItem(boolean addUserData) { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{ toItem(true) diff --git a/src/main/java/cn/nukkit/block/BlockBricks.java b/src/main/java/cn/nukkit/block/BlockBricks.java index 9dfa483d513..9058270fc9c 100644 --- a/src/main/java/cn/nukkit/block/BlockBricks.java +++ b/src/main/java/cn/nukkit/block/BlockBricks.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; @@ -23,22 +24,22 @@ public int getId() { } @Override - public double getHardness() { + public float getHardness() { return 2; } @Override - public double getResistance() { + public float getResistance() { return 30; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{ Item.get(Item.BRICK_BLOCK, 0, 1) diff --git a/src/main/java/cn/nukkit/block/BlockBricksBlackstonePolished.java b/src/main/java/cn/nukkit/block/BlockBricksBlackstonePolished.java index 4605dcdc422..eeaba2d4d8a 100644 --- a/src/main/java/cn/nukkit/block/BlockBricksBlackstonePolished.java +++ b/src/main/java/cn/nukkit/block/BlockBricksBlackstonePolished.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; @@ -19,18 +20,18 @@ public String getName() { } @Override - public double getHardness() { - return 1.5; + public float getHardness() { + return 1.5f; } @Override - public double getResistance() { + public float getResistance() { return 30; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override @@ -39,7 +40,7 @@ public boolean canHarvestWithHand() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{ toItem(true), diff --git a/src/main/java/cn/nukkit/block/BlockBricksBlackstonePolishedCracked.java b/src/main/java/cn/nukkit/block/BlockBricksBlackstonePolishedCracked.java index 3b955dc6236..14156f62735 100644 --- a/src/main/java/cn/nukkit/block/BlockBricksBlackstonePolishedCracked.java +++ b/src/main/java/cn/nukkit/block/BlockBricksBlackstonePolishedCracked.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; @@ -19,18 +20,18 @@ public String getName() { } @Override - public double getHardness() { - return 1.5; + public float getHardness() { + return 1.5f; } @Override - public double getResistance() { + public float getResistance() { return 30; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override @@ -39,7 +40,7 @@ public boolean canHarvestWithHand() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{ toItem(true), diff --git a/src/main/java/cn/nukkit/block/BlockBricksDeepslate.java b/src/main/java/cn/nukkit/block/BlockBricksDeepslate.java index 454b78a88cf..d4967c193cd 100644 --- a/src/main/java/cn/nukkit/block/BlockBricksDeepslate.java +++ b/src/main/java/cn/nukkit/block/BlockBricksDeepslate.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; @@ -19,18 +20,18 @@ public String getName() { } @Override - public double getHardness() { - return 3.5; + public float getHardness() { + return 3.5f; } @Override - public double getResistance() { + public float getResistance() { return 30; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override @@ -39,7 +40,7 @@ public boolean canHarvestWithHand() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{ toItem(true), diff --git a/src/main/java/cn/nukkit/block/BlockBricksEndStone.java b/src/main/java/cn/nukkit/block/BlockBricksEndStone.java index 62917da4656..d73b6eba670 100644 --- a/src/main/java/cn/nukkit/block/BlockBricksEndStone.java +++ b/src/main/java/cn/nukkit/block/BlockBricksEndStone.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; @@ -23,19 +24,19 @@ public int getId() { @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override - public double getHardness() { + public float getHardness() { if (V1_20_30.isAvailable()) { return 3; } - return 0.8; + return 0.8f; } @Override - public double getResistance() { + public float getResistance() { return 45; } @@ -45,7 +46,7 @@ public boolean canHarvestWithHand() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{ Item.get(Item.END_BRICKS, 0, 1) diff --git a/src/main/java/cn/nukkit/block/BlockBricksMud.java b/src/main/java/cn/nukkit/block/BlockBricksMud.java index 3eb16013cbb..d4ba3ddfc17 100644 --- a/src/main/java/cn/nukkit/block/BlockBricksMud.java +++ b/src/main/java/cn/nukkit/block/BlockBricksMud.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; @@ -22,21 +23,21 @@ public String getName() { } @Override - public double getHardness() { + public float getHardness() { if (ENABLE_BLOCK_DESTROY_SPEED_COMPATIBILITY || V1_20_30.isAvailable()) { - return 1.5; + return 1.5f; } return 2; } @Override - public double getResistance() { + public float getResistance() { return 15; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override @@ -45,7 +46,7 @@ public boolean canHarvestWithHand() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{ toItem(true), diff --git a/src/main/java/cn/nukkit/block/BlockBricksNether.java b/src/main/java/cn/nukkit/block/BlockBricksNether.java index 77cd81c6628..bc97ba4c3e6 100644 --- a/src/main/java/cn/nukkit/block/BlockBricksNether.java +++ b/src/main/java/cn/nukkit/block/BlockBricksNether.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; @@ -25,16 +26,16 @@ public int getId() { @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override - public double getHardness() { + public float getHardness() { return 2; } @Override - public double getResistance() { + public float getResistance() { return 30; } @@ -44,7 +45,7 @@ public boolean canHarvestWithHand() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{ toItem(true) diff --git a/src/main/java/cn/nukkit/block/BlockBricksQuartz.java b/src/main/java/cn/nukkit/block/BlockBricksQuartz.java index acb5aee11b8..abe8ec59877 100644 --- a/src/main/java/cn/nukkit/block/BlockBricksQuartz.java +++ b/src/main/java/cn/nukkit/block/BlockBricksQuartz.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; @@ -19,18 +20,18 @@ public String getName() { } @Override - public double getHardness() { - return 0.8; + public float getHardness() { + return 0.8f; } @Override - public double getResistance() { + public float getResistance() { return 4; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override @@ -39,7 +40,7 @@ public boolean canHarvestWithHand() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{ toItem(true), diff --git a/src/main/java/cn/nukkit/block/BlockBricksStone.java b/src/main/java/cn/nukkit/block/BlockBricksStone.java index 7ea1ba8784a..60e70ed6f35 100644 --- a/src/main/java/cn/nukkit/block/BlockBricksStone.java +++ b/src/main/java/cn/nukkit/block/BlockBricksStone.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; @@ -37,12 +38,12 @@ public int getId() { } @Override - public double getHardness() { - return 1.5; + public float getHardness() { + return 1.5f; } @Override - public double getResistance() { + public float getResistance() { return 30; } @@ -52,7 +53,7 @@ public String getName() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{ Item.get(Item.STONEBRICK, this.getDamage() & 0x03, 1) @@ -64,7 +65,7 @@ public Item[] getDrops(Item item) { @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockBubbleColumn.java b/src/main/java/cn/nukkit/block/BlockBubbleColumn.java index 86674700c2a..51b578fb1a7 100644 --- a/src/main/java/cn/nukkit/block/BlockBubbleColumn.java +++ b/src/main/java/cn/nukkit/block/BlockBubbleColumn.java @@ -28,12 +28,12 @@ public String getName() { } @Override - public double getHardness() { + public float getHardness() { return -1; } @Override - public double getResistance() { + public float getResistance() { return 18000000; } diff --git a/src/main/java/cn/nukkit/block/BlockButton.java b/src/main/java/cn/nukkit/block/BlockButton.java index 5e137ada5e4..e38d2a36168 100644 --- a/src/main/java/cn/nukkit/block/BlockButton.java +++ b/src/main/java/cn/nukkit/block/BlockButton.java @@ -52,13 +52,13 @@ protected AxisAlignedBB recalculateBoundingBox() { } @Override - public double getResistance() { - return 2.5; + public float getResistance() { + return 2.5f; } @Override - public double getHardness() { - return 0.5; + public float getHardness() { + return 0.5f; } @Override @@ -145,12 +145,12 @@ public int getStrongPower(BlockFace side) { } @Override - public boolean onBreak(Item item) { + public boolean onBreak(Item item, Player player) { if (isActivated()) { this.level.getServer().getPluginManager().callEvent(new BlockRedstoneEvent(this, 15, 0)); } - return super.onBreak(item); + return super.onBreak(item, player); } @Override diff --git a/src/main/java/cn/nukkit/block/BlockButtonStone.java b/src/main/java/cn/nukkit/block/BlockButtonStone.java index 10c183a1eb8..f67a339f8fd 100644 --- a/src/main/java/cn/nukkit/block/BlockButtonStone.java +++ b/src/main/java/cn/nukkit/block/BlockButtonStone.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; @@ -28,11 +29,11 @@ public String getName() { @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{ this.toItem(true) diff --git a/src/main/java/cn/nukkit/block/BlockButtonWooden.java b/src/main/java/cn/nukkit/block/BlockButtonWooden.java index 490fa749034..43d7d5cda51 100644 --- a/src/main/java/cn/nukkit/block/BlockButtonWooden.java +++ b/src/main/java/cn/nukkit/block/BlockButtonWooden.java @@ -27,6 +27,6 @@ public String getName() { @Override public int getToolType() { - return ItemTool.TYPE_AXE; + return BlockToolType.AXE; } } diff --git a/src/main/java/cn/nukkit/block/BlockCactus.java b/src/main/java/cn/nukkit/block/BlockCactus.java index 2bf3a8a3461..2378e86f1c7 100644 --- a/src/main/java/cn/nukkit/block/BlockCactus.java +++ b/src/main/java/cn/nukkit/block/BlockCactus.java @@ -11,7 +11,6 @@ import cn.nukkit.math.AxisAlignedBB; import cn.nukkit.math.BlockFace; import cn.nukkit.math.SimpleAxisAlignedBB; -import cn.nukkit.math.Vector3; import cn.nukkit.utils.BlockColor; /** @@ -33,12 +32,12 @@ public int getId() { } @Override - public double getHardness() { - return 0.4; + public float getHardness() { + return 0.4f; } @Override - public double getResistance() { + public float getResistance() { return 2; } @@ -98,8 +97,11 @@ public int onUpdate(int type) { } else if (type == Level.BLOCK_UPDATE_RANDOM) { if (down().getId() != CACTUS) { if (this.getDamage() == 0x0F) { + int blockX = getFloorX(); + int blockY = getFloorY(); + int blockZ = getFloorZ(); for (int y = 1; y < 3; ++y) { - Block b = this.getLevel().getBlock(new Vector3(this.x, this.y + y, this.z)); + Block b = this.getLevel().getBlock(blockX, blockY + y, blockZ); if (b.getId() == AIR) { BlockGrowEvent event = new BlockGrowEvent(b, Block.get(BlockID.CACTUS)); Server.getInstance().getPluginManager().callEvent(event); @@ -151,7 +153,7 @@ public BlockColor getColor() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { return new Item[]{ Item.get(Item.CACTUS, 0, 1) }; diff --git a/src/main/java/cn/nukkit/block/BlockCake.java b/src/main/java/cn/nukkit/block/BlockCake.java index 506ca15b6d4..9d3adea9265 100644 --- a/src/main/java/cn/nukkit/block/BlockCake.java +++ b/src/main/java/cn/nukkit/block/BlockCake.java @@ -39,13 +39,13 @@ public boolean canBeActivated() { } @Override - public double getHardness() { - return 0.5; + public float getHardness() { + return 0.5f; } @Override - public double getResistance() { - return 2.5; + public float getResistance() { + return 2.5f; } @Override @@ -97,7 +97,7 @@ public int onUpdate(int type) { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { return new Item[0]; } diff --git a/src/main/java/cn/nukkit/block/BlockCakeCandle.java b/src/main/java/cn/nukkit/block/BlockCakeCandle.java index a3871467420..f26a918068e 100644 --- a/src/main/java/cn/nukkit/block/BlockCakeCandle.java +++ b/src/main/java/cn/nukkit/block/BlockCakeCandle.java @@ -43,7 +43,7 @@ public int getComparatorInputOverride() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { return new Item[] { Item.get(getItemId(getCandleBlockId())), }; diff --git a/src/main/java/cn/nukkit/block/BlockCalcite.java b/src/main/java/cn/nukkit/block/BlockCalcite.java index bedf1b61bac..75a3f9212c8 100644 --- a/src/main/java/cn/nukkit/block/BlockCalcite.java +++ b/src/main/java/cn/nukkit/block/BlockCalcite.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; @@ -19,18 +20,18 @@ public String getName() { } @Override - public double getHardness() { - return 0.75; + public float getHardness() { + return 0.75f; } @Override - public double getResistance() { - return 3.75; + public float getResistance() { + return 3.75f; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override @@ -39,7 +40,7 @@ public boolean canHarvestWithHand() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{ toItem(true), diff --git a/src/main/java/cn/nukkit/block/BlockCamera.java b/src/main/java/cn/nukkit/block/BlockCamera.java index 7156ba8a34f..4995dda200e 100644 --- a/src/main/java/cn/nukkit/block/BlockCamera.java +++ b/src/main/java/cn/nukkit/block/BlockCamera.java @@ -18,12 +18,12 @@ public String getName() { } @Override - public double getHardness() { + public float getHardness() { return 0; } @Override - public double getResistance() { + public float getResistance() { return 0; } diff --git a/src/main/java/cn/nukkit/block/BlockCampfire.java b/src/main/java/cn/nukkit/block/BlockCampfire.java index b78b55a91e1..5e5af9bcaaf 100644 --- a/src/main/java/cn/nukkit/block/BlockCampfire.java +++ b/src/main/java/cn/nukkit/block/BlockCampfire.java @@ -16,7 +16,6 @@ import cn.nukkit.inventory.RecipeTag; import cn.nukkit.item.Item; import cn.nukkit.item.ItemID; -import cn.nukkit.item.ItemTool; import cn.nukkit.item.enchantment.Enchantment; import cn.nukkit.item.enchantment.EnchantmentID; import cn.nukkit.level.GameRule; @@ -63,11 +62,11 @@ public int getBlockEntityType() { @Override public int getToolType() { - return ItemTool.TYPE_AXE; + return BlockToolType.AXE; } @Override - public double getHardness() { + public float getHardness() { if (ENABLE_BLOCK_DESTROY_SPEED_COMPATIBILITY || V1_20_30.isAvailable()) { return 2; } @@ -75,7 +74,7 @@ public double getHardness() { } @Override - public double getResistance() { + public float getResistance() { return 10; } @@ -163,7 +162,7 @@ public Item toItem(boolean addUserData) { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { return new Item[]{ Item.get(ItemID.COAL, 1, 2) }; diff --git a/src/main/java/cn/nukkit/block/BlockCampfireSoul.java b/src/main/java/cn/nukkit/block/BlockCampfireSoul.java index a7a8aa0a452..0f177d874ec 100644 --- a/src/main/java/cn/nukkit/block/BlockCampfireSoul.java +++ b/src/main/java/cn/nukkit/block/BlockCampfireSoul.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.blockentity.BlockEntityCampfire; import cn.nukkit.inventory.RecipeTag; import cn.nukkit.item.Item; @@ -43,7 +44,7 @@ public Item toItem(boolean addUserData) { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { return new Item[]{ Item.get(ItemID.SOUL_SOIL), }; diff --git a/src/main/java/cn/nukkit/block/BlockCandle.java b/src/main/java/cn/nukkit/block/BlockCandle.java index 931a5393b98..8b7aef2df04 100644 --- a/src/main/java/cn/nukkit/block/BlockCandle.java +++ b/src/main/java/cn/nukkit/block/BlockCandle.java @@ -36,13 +36,13 @@ public String getName() { } @Override - public double getHardness() { - return 0.1; + public float getHardness() { + return 0.1f; } @Override - public double getResistance() { - return 0.5; + public float getResistance() { + return 0.5f; } @Override @@ -61,7 +61,7 @@ public Item toItem(boolean addUserData) { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { Item[] drops = new Item[getCandleCount()]; for (int i = 0; i < drops.length; i++) { drops[i] = toItem(true); diff --git a/src/main/java/cn/nukkit/block/BlockCarpet.java b/src/main/java/cn/nukkit/block/BlockCarpet.java index 2a15b060c5d..8a6ef79b76d 100644 --- a/src/main/java/cn/nukkit/block/BlockCarpet.java +++ b/src/main/java/cn/nukkit/block/BlockCarpet.java @@ -31,13 +31,13 @@ public int getId() { } @Override - public double getHardness() { - return 0.1; + public float getHardness() { + return 0.1f; } @Override - public double getResistance() { - return 0.5; + public float getResistance() { + return 0.5f; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockCarpetMoss.java b/src/main/java/cn/nukkit/block/BlockCarpetMoss.java index 6cd28e95c51..fdfe163f1e0 100644 --- a/src/main/java/cn/nukkit/block/BlockCarpetMoss.java +++ b/src/main/java/cn/nukkit/block/BlockCarpetMoss.java @@ -21,6 +21,11 @@ public String getName() { return "Moss Carpet"; } + @Override + public int getToolType() { + return BlockToolType.HOE | BlockToolType.AXE; + } + @Override public boolean breaksWhenMoved() { return true; diff --git a/src/main/java/cn/nukkit/block/BlockCarrot.java b/src/main/java/cn/nukkit/block/BlockCarrot.java index 1697f8515a1..e78621f1a42 100644 --- a/src/main/java/cn/nukkit/block/BlockCarrot.java +++ b/src/main/java/cn/nukkit/block/BlockCarrot.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import java.util.concurrent.ThreadLocalRandom; @@ -28,7 +29,7 @@ public int getId() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (getDamage() >= 0x07) { return new Item[]{ Item.get(Item.CARROT, 0, ThreadLocalRandom.current().nextInt(3) + 1) diff --git a/src/main/java/cn/nukkit/block/BlockCartographyTable.java b/src/main/java/cn/nukkit/block/BlockCartographyTable.java index 13ba859c3f2..218a23ddaf8 100644 --- a/src/main/java/cn/nukkit/block/BlockCartographyTable.java +++ b/src/main/java/cn/nukkit/block/BlockCartographyTable.java @@ -3,7 +3,6 @@ import cn.nukkit.Player; import cn.nukkit.inventory.CartographyTableInventory; import cn.nukkit.item.Item; -import cn.nukkit.item.ItemTool; import cn.nukkit.math.BlockFace; import cn.nukkit.utils.BlockColor; @@ -24,17 +23,17 @@ public int getId() { @Override public int getToolType() { - return ItemTool.TYPE_AXE; + return BlockToolType.AXE; } @Override - public double getHardness() { - return 2.5; + public float getHardness() { + return 2.5f; } @Override - public double getResistance() { - return 12.5; + public float getResistance() { + return 12.5f; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockCauldron.java b/src/main/java/cn/nukkit/block/BlockCauldron.java index d7e99677a10..f3f5f7526e4 100644 --- a/src/main/java/cn/nukkit/block/BlockCauldron.java +++ b/src/main/java/cn/nukkit/block/BlockCauldron.java @@ -68,18 +68,18 @@ public int getBlockEntityType() { } @Override - public double getResistance() { + public float getResistance() { return 10; } @Override - public double getHardness() { + public float getHardness() { return 2; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override @@ -621,7 +621,7 @@ public boolean place(Item item, Block block, Block target, BlockFace face, doubl } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{Item.get(Item.CAULDRON)}; } diff --git a/src/main/java/cn/nukkit/block/BlockCaveVines.java b/src/main/java/cn/nukkit/block/BlockCaveVines.java index 853bdf220e3..a328d37f8d9 100644 --- a/src/main/java/cn/nukkit/block/BlockCaveVines.java +++ b/src/main/java/cn/nukkit/block/BlockCaveVines.java @@ -37,7 +37,7 @@ public Item toItem(boolean addUserData) { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { return new Item[0]; } diff --git a/src/main/java/cn/nukkit/block/BlockCaveVinesBerriesBody.java b/src/main/java/cn/nukkit/block/BlockCaveVinesBerriesBody.java index a09f7fe4872..50e4e344722 100644 --- a/src/main/java/cn/nukkit/block/BlockCaveVinesBerriesBody.java +++ b/src/main/java/cn/nukkit/block/BlockCaveVinesBerriesBody.java @@ -31,7 +31,7 @@ public int getLightLevel() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { return new Item[]{ toItem(true), }; diff --git a/src/main/java/cn/nukkit/block/BlockChain.java b/src/main/java/cn/nukkit/block/BlockChain.java index aa1de221c5b..23d9b51fa6b 100644 --- a/src/main/java/cn/nukkit/block/BlockChain.java +++ b/src/main/java/cn/nukkit/block/BlockChain.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.math.AxisAlignedBB; @@ -37,18 +38,18 @@ public boolean isTransparent() { } @Override - public double getHardness() { + public float getHardness() { return 5; } @Override - public double getResistance() { + public float getResistance() { return 30; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override @@ -57,7 +58,7 @@ public boolean canHarvestWithHand() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{ toItem(true), diff --git a/src/main/java/cn/nukkit/block/BlockChest.java b/src/main/java/cn/nukkit/block/BlockChest.java index edd9e2966e1..02ad1663e7e 100644 --- a/src/main/java/cn/nukkit/block/BlockChest.java +++ b/src/main/java/cn/nukkit/block/BlockChest.java @@ -7,7 +7,6 @@ import cn.nukkit.blockentity.BlockEntityType; import cn.nukkit.inventory.ContainerInventory; import cn.nukkit.item.Item; -import cn.nukkit.item.ItemTool; import cn.nukkit.math.BlockFace; import cn.nukkit.nbt.tag.CompoundTag; import cn.nukkit.nbt.tag.ListTag; @@ -55,18 +54,18 @@ public int getBlockEntityType() { } @Override - public double getHardness() { - return 2.5; + public float getHardness() { + return 2.5f; } @Override - public double getResistance() { - return 12.5; + public float getResistance() { + return 12.5f; } @Override public int getToolType() { - return ItemTool.TYPE_AXE; + return BlockToolType.AXE; } @Override @@ -150,7 +149,7 @@ public boolean place(Item item, Block block, Block target, BlockFace face, doubl } @Override - public boolean onBreak(Item item) { + public boolean onBreak(Item item, Player player) { BlockEntity t = this.getLevel().getBlockEntity(this); if (t instanceof BlockEntityChest) { ((BlockEntityChest) t).unpair(); diff --git a/src/main/java/cn/nukkit/block/BlockChorusFlower.java b/src/main/java/cn/nukkit/block/BlockChorusFlower.java index 15341171d7d..0d713603927 100644 --- a/src/main/java/cn/nukkit/block/BlockChorusFlower.java +++ b/src/main/java/cn/nukkit/block/BlockChorusFlower.java @@ -2,7 +2,17 @@ import cn.nukkit.Player; import cn.nukkit.item.Item; +import cn.nukkit.level.Level; +import cn.nukkit.math.AxisAlignedBB; import cn.nukkit.math.BlockFace; +import cn.nukkit.math.BlockFace.Plane; +import cn.nukkit.math.Vector3; +import cn.nukkit.network.protocol.LevelSoundEventPacket; +import cn.nukkit.utils.BlockColor; + +import java.util.EnumSet; +import java.util.Set; +import java.util.concurrent.ThreadLocalRandom; public class BlockChorusFlower extends BlockFlowable { @@ -25,28 +35,224 @@ public String getName() { } @Override - public double getHardness() { - return 0.4; + public float getHardness() { + return 0.4f; } @Override - public double getResistance() { + public float getResistance() { return 2; } + @Override + public int getToolType() { + return BlockToolType.AXE; + } + + @Override + public Item[] getDrops(Item item, Player player) { + if (player == null || !player.isSurvivalLike()) { + return new Item[0]; + } + return new Item[]{toItem()}; + } + + @Override + public Item toItem(boolean addUserData) { + return Item.get(getItemId()); + } + + @Override + public BlockColor getColor() { + return BlockColor.PURPLE_BLOCK_COLOR; + } + @Override public boolean isVegetation() { return true; } + @Override + public boolean canPassThrough() { + return false; + } + + @Override + protected AxisAlignedBB recalculateBoundingBox() { + return this; + } + @Override public boolean place(Item item, Block block, Block target, BlockFace face, double fx, double fy, double fz, Player player) { if (block.isLiquid() || !block.isAir() && block.canContainWater() && level.getExtraBlock(this).isWater()) { return false; } - //TODO: more check + if (!canSurvive()) { + return false; + } return super.place(item, block, target, face, fx, fy, fz, player); } + + @Override + public int onUpdate(int type) { + if (type == Level.BLOCK_UPDATE_NORMAL) { + level.scheduleUpdate(this, 1); + return type; + } + + if (type == Level.BLOCK_UPDATE_SCHEDULED) { + if (canSurvive()) { + return 0; + } + + level.useBreakOn(this, true); + return Level.BLOCK_UPDATE_NORMAL; + } + + if (type == Level.BLOCK_UPDATE_RANDOM) { + grow(); + return type; + } + + return 0; + } + + private void grow() { + int age = getDamage(); + if (age >= 5) { + return; + } + + if (getFloorY() + 1 >= level.getHeightRange().getMaxY()) { + return; + } + + Block above = up(); + if (!above.isAir()) { + return; + } + + boolean replaceAndGrow = false; + boolean pillarOnEndStone = false; + + Block below = down(); + if (below.is(END_STONE) || below.isAir()) { + replaceAndGrow = true; + } else if (below.is(CHORUS_PLANT)) { + int height = 1; + for (int i = 0; i < 4; i++) { + Block testBlock = level.getBlock(down(height + 1)); + if (testBlock.is(CHORUS_PLANT)) { + height++; + continue; + } + if (testBlock.is(END_STONE)) { + pillarOnEndStone = true; + } + break; + } + + if (height < 2 || ThreadLocalRandom.current().nextInt(pillarOnEndStone ? 5 : 4) >= height) { + replaceAndGrow = true; + } + } + + if (replaceAndGrow && allNeighborsEmpty(above, null) && above.up().isAir()) { + level.setBlock(this, get(CHORUS_PLANT), true); + placeGrownFlower(above, age); + } else if (age < 4) { + ThreadLocalRandom random = ThreadLocalRandom.current(); + int numBranchAttempts = random.nextInt(4); + if (pillarOnEndStone) { + numBranchAttempts++; + } + boolean createdBranch = false; + + Set failed = EnumSet.noneOf(BlockFace.class); + for (int i = 0; i < numBranchAttempts; i++) { + BlockFace direction = Plane.HORIZONTAL.random(random); + if (failed.contains(direction)) { + continue; + } + Block target = getSide(direction); + + if (!target.isAir()) { + failed.add(direction); + continue; + } + if (!target.down().isAir()) { + failed.add(direction); + continue; + } + if (!allNeighborsEmpty(target, direction.getOpposite())) { + failed.add(direction); + continue; + } + + placeGrownFlower(target, age + 1); + createdBranch = true; + } + + if (createdBranch) { + level.setBlock(this, get(CHORUS_PLANT), true); + } else { + placeDeadFlower(); + } + } else { + placeDeadFlower(); + } + } + + private static boolean allNeighborsEmpty(Block block, BlockFace ignore) { + for (BlockFace face : Plane.HORIZONTAL) { + if (face == ignore) { + continue; + } + if (!block.getSide(face).isAir()) { + return false; + } + } + return true; + } + + private void placeGrownFlower(Vector3 pos, int newAge) { + level.setBlock(pos, get(CHORUS_FLOWER, newAge), true); + + level.addLevelSoundEvent(pos, LevelSoundEventPacket.SOUND_CHORUSGROW); + } + + private void placeDeadFlower() { + setDamage(5); + level.setBlock(this, this, true); + + level.addLevelSoundEvent(this, LevelSoundEventPacket.SOUND_CHORUSDEATH); + } + + private boolean canSurvive() { + Block below = down(); + if (BlockChorusPlant.canGrowChorus(below)) { + return true; + } + if (!below.isAir()) { + return false; + } + + boolean hasNeighbor = false; + for (BlockFace face : Plane.HORIZONTAL) { + Block neighbor = getSide(face); + if (neighbor.is(CHORUS_PLANT)) { + if (hasNeighbor) { + return false; + } + hasNeighbor = true; + continue; + } + if (!neighbor.isAir()) { + return false; + } + } + return hasNeighbor; + } } diff --git a/src/main/java/cn/nukkit/block/BlockChorusPlant.java b/src/main/java/cn/nukkit/block/BlockChorusPlant.java index d216d828245..7548859c096 100644 --- a/src/main/java/cn/nukkit/block/BlockChorusPlant.java +++ b/src/main/java/cn/nukkit/block/BlockChorusPlant.java @@ -3,15 +3,23 @@ import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemID; -import cn.nukkit.item.ItemTool; +import cn.nukkit.level.Level; +import cn.nukkit.math.AxisAlignedBB; import cn.nukkit.math.BlockFace; +import cn.nukkit.math.BlockFace.Plane; +import cn.nukkit.math.SimpleAxisAlignedBB; import cn.nukkit.utils.BlockColor; import java.util.concurrent.ThreadLocalRandom; -public class BlockChorusPlant extends BlockTransparent { +public class BlockChorusPlant extends BlockFlowable { public BlockChorusPlant() { + this(0); + } + + public BlockChorusPlant(int meta) { + super(0); } @Override @@ -25,28 +33,23 @@ public String getName() { } @Override - public double getHardness() { - return 0.4; + public float getHardness() { + return 0.4f; } @Override - public double getResistance() { + public float getResistance() { return 2; } @Override - public Item[] getDrops(Item item) { - return ThreadLocalRandom.current().nextBoolean() ? new Item[]{Item.get(ItemID.CHORUS_FRUIT, 0, 1)} : new Item[0]; - } - - @Override - public boolean breaksWhenMoved() { - return true; + public int getToolType() { + return BlockToolType.AXE; } @Override - public boolean sticksToPiston() { - return false; + public Item[] getDrops(Item item, Player player) { + return ThreadLocalRandom.current().nextBoolean() ? new Item[]{Item.get(ItemID.CHORUS_FRUIT, 0, 1)} : new Item[0]; } @Override @@ -55,18 +58,25 @@ public BlockColor getColor() { } @Override - public boolean isSolid() { - return false; + public boolean isVegetation() { + return true; } @Override - public boolean canProvideSupport(BlockFace face, SupportType type) { + public boolean canPassThrough() { return false; } @Override - public boolean isVegetation() { - return true; + protected AxisAlignedBB recalculateBoundingBox() { + return new SimpleAxisAlignedBB( + connectsTo(getSide(BlockFace.WEST)) ? x : x + 2 / 16.0, + connectsTo(getSide(BlockFace.DOWN)) ? y : y + 2 / 16.0, + connectsTo(getSide(BlockFace.NORTH)) ? z : z + 2 / 16.0, + connectsTo(getSide(BlockFace.EAST)) ? x + 1 : x + 1 - 2 / 16.0, + connectsTo(getSide(BlockFace.UP)) ? y + 1 : y + 1 - 2 / 16.0, + connectsTo(getSide(BlockFace.SOUTH)) ? z + 1 : z + 1 - 2 / 16.0 + ); } @Override @@ -75,10 +85,67 @@ public boolean place(Item item, Block block, Block target, BlockFace face, doubl return false; } - //TODO: more check + if (!canSurvive()) { + return false; + } return super.place(item, block, target, face, fx, fy, fz, player); } - //TODO: neighborChanged + @Override + public int onUpdate(int type) { + if (type == Level.BLOCK_UPDATE_NORMAL) { + level.scheduleUpdate(this, 1); + return type; + } + + if (type == Level.BLOCK_UPDATE_SCHEDULED) { + if (canSurvive()) { + return 0; + } + + level.useBreakOn(this, true); + return Level.BLOCK_UPDATE_NORMAL; + } + + return 0; + } + + @Override + public int getFullId() { + return getId() << BLOCK_META_BITS; + } + + @Override + public void setDamage(int meta) { + } + + private boolean canSurvive() { + Block below = down(); + boolean emptyVertical = below.isAir() || up().isAir(); + + for (BlockFace face : Plane.HORIZONTAL) { + Block neighbor = getSide(face); + if (!canGrowChorus(neighbor)) { + continue; + } + if (!emptyVertical) { + return false; + } + if (canGrowChorus(neighbor.down())) { + return true; + } + } + + return canGrowChorus(below); + } + + private static boolean connectsTo(Block block) { + return canGrowChorus(block) || block.getId() == CHORUS_FLOWER; + } + + static boolean canGrowChorus(Block block) { + int id = block.getId(); + return id == CHORUS_PLANT || id == END_STONE; + } } diff --git a/src/main/java/cn/nukkit/block/BlockClay.java b/src/main/java/cn/nukkit/block/BlockClay.java index 9ea8b6b2ac5..c44e43db86c 100644 --- a/src/main/java/cn/nukkit/block/BlockClay.java +++ b/src/main/java/cn/nukkit/block/BlockClay.java @@ -4,7 +4,6 @@ import cn.nukkit.item.Item; import cn.nukkit.item.ItemDye; import cn.nukkit.item.ItemID; -import cn.nukkit.item.ItemTool; import cn.nukkit.math.BlockFace; import cn.nukkit.utils.BlockColor; @@ -17,18 +16,18 @@ public BlockClay() { } @Override - public double getHardness() { - return 0.6; + public float getHardness() { + return 0.6f; } @Override - public double getResistance() { + public float getResistance() { return 3; } @Override public int getToolType() { - return ItemTool.TYPE_SHOVEL; + return BlockToolType.SHOVEL; } @Override @@ -42,7 +41,7 @@ public String getName() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { return new Item[]{ Item.get(Item.CLAY_BALL, 0, 4) }; diff --git a/src/main/java/cn/nukkit/block/BlockClientRequestPlaceholder.java b/src/main/java/cn/nukkit/block/BlockClientRequestPlaceholder.java index 7e8010cdeb0..3b31103c9c9 100644 --- a/src/main/java/cn/nukkit/block/BlockClientRequestPlaceholder.java +++ b/src/main/java/cn/nukkit/block/BlockClientRequestPlaceholder.java @@ -18,12 +18,12 @@ public String getName() { } @Override - public double getHardness() { + public float getHardness() { return -1; } @Override - public double getResistance() { + public float getResistance() { return 18000000; } diff --git a/src/main/java/cn/nukkit/block/BlockCoal.java b/src/main/java/cn/nukkit/block/BlockCoal.java index 58df93b7a9d..63317fdded0 100644 --- a/src/main/java/cn/nukkit/block/BlockCoal.java +++ b/src/main/java/cn/nukkit/block/BlockCoal.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; @@ -18,18 +19,18 @@ public int getId() { } @Override - public double getHardness() { + public float getHardness() { return 5; } @Override - public double getResistance() { + public float getResistance() { return 30; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override @@ -48,7 +49,7 @@ public String getName() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{ toItem(true) diff --git a/src/main/java/cn/nukkit/block/BlockCobblestone.java b/src/main/java/cn/nukkit/block/BlockCobblestone.java index 5d2be1f4b61..c0f69da16f1 100644 --- a/src/main/java/cn/nukkit/block/BlockCobblestone.java +++ b/src/main/java/cn/nukkit/block/BlockCobblestone.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; @@ -18,18 +19,18 @@ public int getId() { } @Override - public double getHardness() { + public float getHardness() { return 2; } @Override - public double getResistance() { + public float getResistance() { return 30; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override @@ -38,7 +39,7 @@ public String getName() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{ toItem(true) diff --git a/src/main/java/cn/nukkit/block/BlockCobweb.java b/src/main/java/cn/nukkit/block/BlockCobweb.java index 4b491470f09..70719413d59 100644 --- a/src/main/java/cn/nukkit/block/BlockCobweb.java +++ b/src/main/java/cn/nukkit/block/BlockCobweb.java @@ -1,9 +1,8 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.entity.Entity; import cn.nukkit.item.Item; -import cn.nukkit.item.ItemTool; -import cn.nukkit.math.BlockFace; import cn.nukkit.utils.BlockColor; /** @@ -30,18 +29,18 @@ public int getId() { } @Override - public double getHardness() { + public float getHardness() { return 4; } @Override - public double getResistance() { + public float getResistance() { return 20; } @Override public int getToolType() { - return ItemTool.TYPE_SWORD; + return BlockToolType.SWORD | BlockToolType.SHEARS; } @Override @@ -55,7 +54,7 @@ public void onEntityCollide(Entity entity) { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isShears()) { return new Item[]{ this.toItem(true) diff --git a/src/main/java/cn/nukkit/block/BlockCocoa.java b/src/main/java/cn/nukkit/block/BlockCocoa.java index 79394d1bc0e..524a2a17ff5 100644 --- a/src/main/java/cn/nukkit/block/BlockCocoa.java +++ b/src/main/java/cn/nukkit/block/BlockCocoa.java @@ -5,7 +5,6 @@ import cn.nukkit.event.block.BlockGrowEvent; import cn.nukkit.item.Item; import cn.nukkit.item.ItemDye; -import cn.nukkit.item.ItemTool; import cn.nukkit.level.Level; import cn.nukkit.level.particle.BoneMealParticle; import cn.nukkit.math.AxisAlignedBB; @@ -121,6 +120,11 @@ private AxisAlignedBB getRelativeBoundingBox() { return ALL[damage] = bbs[this.getDamage() >> 2]; } + @Override + public boolean canPassThrough() { + return false; + } + @Override public boolean place(Item item, Block block, Block target, BlockFace face, double fx, double fy, double fz, Player player) { if (face.isVertical()) { @@ -200,18 +204,18 @@ public boolean onActivate(Item item, BlockFace face, Player player) { } @Override - public double getResistance() { + public float getResistance() { return 15; } @Override - public double getHardness() { - return 0.2; + public float getHardness() { + return 0.2f; } @Override public int getToolType() { - return ItemTool.TYPE_AXE; + return BlockToolType.AXE; } @Override @@ -220,7 +224,7 @@ public Item toItem(boolean addUserData) { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (this.getDamage() >= 0x8) { return new Item[]{ Item.get(Item.DYE, ItemDye.COCOA_BEANS, 3) diff --git a/src/main/java/cn/nukkit/block/BlockCommand.java b/src/main/java/cn/nukkit/block/BlockCommand.java index 8da3e25f68e..b05e77e7664 100644 --- a/src/main/java/cn/nukkit/block/BlockCommand.java +++ b/src/main/java/cn/nukkit/block/BlockCommand.java @@ -42,12 +42,12 @@ public int getBlockEntityType() { } @Override - public double getHardness() { + public float getHardness() { return -1; } @Override - public double getResistance() { + public float getResistance() { return 18000000; } @@ -129,6 +129,7 @@ public boolean onActivate(Item item, BlockFace face, Player player) { return true; } //TODO: UI + //player.openBlockEditor(getFloorX(), getFloorY(), getFloorZ(), ContainerType.COMMAND_BLOCK); return true; } diff --git a/src/main/java/cn/nukkit/block/BlockComposter.java b/src/main/java/cn/nukkit/block/BlockComposter.java index d66c8ae16c8..f8460745419 100644 --- a/src/main/java/cn/nukkit/block/BlockComposter.java +++ b/src/main/java/cn/nukkit/block/BlockComposter.java @@ -4,7 +4,6 @@ import cn.nukkit.item.Item; import cn.nukkit.item.ItemDye; import cn.nukkit.item.ItemID; -import cn.nukkit.item.ItemTool; import cn.nukkit.level.GameRule; import cn.nukkit.level.Level; import cn.nukkit.math.BlockFace; @@ -42,15 +41,15 @@ public int getId() { } @Override - public double getHardness() { + public float getHardness() { if (ENABLE_BLOCK_DESTROY_SPEED_COMPATIBILITY || V1_20_30.isAvailable()) { - return 0.6; + return 0.6f; } return 2; } @Override - public double getResistance() { + public float getResistance() { return 3; } @@ -66,7 +65,7 @@ public int getBurnAbility() { @Override public int getToolType() { - return ItemTool.TYPE_AXE; + return BlockToolType.AXE; } @Override @@ -100,7 +99,7 @@ public Item toItem(boolean addUserData) { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { Item drop = this.toItem(true); return getDamage() == 0x8 ? new Item[]{ drop, diff --git a/src/main/java/cn/nukkit/block/BlockConcrete.java b/src/main/java/cn/nukkit/block/BlockConcrete.java index d5b89caf05c..d71bb6faac0 100644 --- a/src/main/java/cn/nukkit/block/BlockConcrete.java +++ b/src/main/java/cn/nukkit/block/BlockConcrete.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; @@ -24,13 +25,13 @@ public int getId() { } @Override - public double getResistance() { + public float getResistance() { return 9; } @Override - public double getHardness() { - return 1.8; + public float getHardness() { + return 1.8f; } @Override @@ -40,11 +41,11 @@ public String getName() { @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { return item.getTier() >= ItemTool.TIER_WOODEN ? new Item[]{toItem(true)} : new Item[0]; } diff --git a/src/main/java/cn/nukkit/block/BlockConcretePowder.java b/src/main/java/cn/nukkit/block/BlockConcretePowder.java index 62b147c0cf4..fae9f47d018 100644 --- a/src/main/java/cn/nukkit/block/BlockConcretePowder.java +++ b/src/main/java/cn/nukkit/block/BlockConcretePowder.java @@ -2,7 +2,6 @@ import cn.nukkit.Player; import cn.nukkit.item.Item; -import cn.nukkit.item.ItemTool; import cn.nukkit.level.Level; import cn.nukkit.math.BlockFace; import cn.nukkit.utils.BlockColor; @@ -48,18 +47,18 @@ public String getName() { } @Override - public double getResistance() { - return 2.5; + public float getResistance() { + return 2.5f; } @Override - public double getHardness() { - return 0.5; + public float getHardness() { + return 0.5f; } @Override public int getToolType() { - return ItemTool.TYPE_SHOVEL; + return BlockToolType.SHOVEL; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockConduit.java b/src/main/java/cn/nukkit/block/BlockConduit.java index 6f442d1ad63..90ae524511d 100644 --- a/src/main/java/cn/nukkit/block/BlockConduit.java +++ b/src/main/java/cn/nukkit/block/BlockConduit.java @@ -6,7 +6,6 @@ import cn.nukkit.blockentity.BlockEntityConduit; import cn.nukkit.blockentity.BlockEntityType; import cn.nukkit.item.Item; -import cn.nukkit.item.ItemTool; import cn.nukkit.math.BlockFace; import cn.nukkit.nbt.tag.CompoundTag; import cn.nukkit.utils.BlockColor; @@ -35,16 +34,16 @@ public int getBlockEntityType() { @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override - public double getHardness() { + public float getHardness() { return 3; } @Override - public double getResistance() { + public float getResistance() { return 15; } diff --git a/src/main/java/cn/nukkit/block/BlockCopper.java b/src/main/java/cn/nukkit/block/BlockCopper.java index 2ad8b57d699..1be8c0bada4 100644 --- a/src/main/java/cn/nukkit/block/BlockCopper.java +++ b/src/main/java/cn/nukkit/block/BlockCopper.java @@ -26,18 +26,18 @@ public String getName() { } @Override - public double getHardness() { + public float getHardness() { return 3; } @Override - public double getResistance() { + public float getResistance() { return 30; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override @@ -46,7 +46,7 @@ public boolean canHarvestWithHand() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_STONE) { return new Item[]{ toItem(true), diff --git a/src/main/java/cn/nukkit/block/BlockCopperRaw.java b/src/main/java/cn/nukkit/block/BlockCopperRaw.java index a317ef5bf74..3949b44ef65 100644 --- a/src/main/java/cn/nukkit/block/BlockCopperRaw.java +++ b/src/main/java/cn/nukkit/block/BlockCopperRaw.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; @@ -19,18 +20,18 @@ public String getName() { } @Override - public double getHardness() { + public float getHardness() { return 5; } @Override - public double getResistance() { + public float getResistance() { return 30; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override @@ -39,7 +40,7 @@ public boolean canHarvestWithHand() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_STONE) { return new Item[]{ toItem(true), diff --git a/src/main/java/cn/nukkit/block/BlockCoral.java b/src/main/java/cn/nukkit/block/BlockCoral.java index 328416b5994..4a2f9c13e95 100644 --- a/src/main/java/cn/nukkit/block/BlockCoral.java +++ b/src/main/java/cn/nukkit/block/BlockCoral.java @@ -3,7 +3,6 @@ import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.level.Level; -import cn.nukkit.math.AxisAlignedBB; import cn.nukkit.math.BlockFace; import cn.nukkit.math.BlockFace.Plane; import cn.nukkit.utils.BlockColor; @@ -82,7 +81,7 @@ public boolean canContainWater() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { return new Item[0]; } diff --git a/src/main/java/cn/nukkit/block/BlockCoralBlock.java b/src/main/java/cn/nukkit/block/BlockCoralBlock.java index 828f65edde4..f73cea142c4 100644 --- a/src/main/java/cn/nukkit/block/BlockCoralBlock.java +++ b/src/main/java/cn/nukkit/block/BlockCoralBlock.java @@ -2,7 +2,6 @@ import cn.nukkit.Player; import cn.nukkit.item.Item; -import cn.nukkit.item.ItemTool; import cn.nukkit.level.Level; import cn.nukkit.math.BlockFace; import cn.nukkit.utils.BlockColor; @@ -53,21 +52,21 @@ public String getName() { } @Override - public double getHardness() { + public float getHardness() { if (ENABLE_BLOCK_DESTROY_SPEED_COMPATIBILITY || V1_20_30.isAvailable()) { - return 1.5; + return 1.5f; } return 7; } @Override - public double getResistance() { + public float getResistance() { return 30; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockCoralFan.java b/src/main/java/cn/nukkit/block/BlockCoralFan.java index e5da5a3e695..7f0bdcd593f 100644 --- a/src/main/java/cn/nukkit/block/BlockCoralFan.java +++ b/src/main/java/cn/nukkit/block/BlockCoralFan.java @@ -87,7 +87,7 @@ public Item toItem(boolean addUserData) { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { return new Item[0]; } diff --git a/src/main/java/cn/nukkit/block/BlockCoralFanHang.java b/src/main/java/cn/nukkit/block/BlockCoralFanHang.java index 2fc332d39a9..e552b78286a 100644 --- a/src/main/java/cn/nukkit/block/BlockCoralFanHang.java +++ b/src/main/java/cn/nukkit/block/BlockCoralFanHang.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.level.Level; import cn.nukkit.math.BlockFace; @@ -63,7 +64,7 @@ public Item toItem(boolean addUserData) { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { return new Item[0]; } diff --git a/src/main/java/cn/nukkit/block/BlockCraftingTable.java b/src/main/java/cn/nukkit/block/BlockCraftingTable.java index 72d51a0e1e2..31eca4cb80c 100644 --- a/src/main/java/cn/nukkit/block/BlockCraftingTable.java +++ b/src/main/java/cn/nukkit/block/BlockCraftingTable.java @@ -3,7 +3,6 @@ import cn.nukkit.Player; import cn.nukkit.inventory.RecipeTag; import cn.nukkit.item.Item; -import cn.nukkit.item.ItemTool; import cn.nukkit.math.BlockFace; import cn.nukkit.network.protocol.ContainerOpenPacket; import cn.nukkit.network.protocol.types.ContainerType; @@ -33,18 +32,18 @@ public boolean canBeActivated() { } @Override - public double getHardness() { - return 2.5; + public float getHardness() { + return 2.5f; } @Override - public double getResistance() { - return 12.5; + public float getResistance() { + return 12.5f; } @Override public int getToolType() { - return ItemTool.TYPE_AXE; + return BlockToolType.AXE; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockDaylightDetector.java b/src/main/java/cn/nukkit/block/BlockDaylightDetector.java index 42c9a837d25..248922d24f8 100644 --- a/src/main/java/cn/nukkit/block/BlockDaylightDetector.java +++ b/src/main/java/cn/nukkit/block/BlockDaylightDetector.java @@ -42,12 +42,12 @@ public int getBlockEntityType() { } @Override - public double getHardness() { - return 0.2; + public float getHardness() { + return 0.2f; } @Override - public double getResistance() { + public float getResistance() { return 1; } diff --git a/src/main/java/cn/nukkit/block/BlockDeadBush.java b/src/main/java/cn/nukkit/block/BlockDeadBush.java index 075db40079d..14849efb849 100644 --- a/src/main/java/cn/nukkit/block/BlockDeadBush.java +++ b/src/main/java/cn/nukkit/block/BlockDeadBush.java @@ -59,7 +59,7 @@ public int onUpdate(int type) { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isShears()) { return new Item[]{ toItem(true) diff --git a/src/main/java/cn/nukkit/block/BlockDeepslate.java b/src/main/java/cn/nukkit/block/BlockDeepslate.java index c11e306a551..cba15c50c62 100644 --- a/src/main/java/cn/nukkit/block/BlockDeepslate.java +++ b/src/main/java/cn/nukkit/block/BlockDeepslate.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; @@ -24,18 +25,18 @@ public String getName() { } @Override - public double getHardness() { + public float getHardness() { return 3; } @Override - public double getResistance() { + public float getResistance() { return 30; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override @@ -44,7 +45,7 @@ public boolean canHarvestWithHand() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{ Item.get(getItemId(COBBLED_DEEPSLATE)), diff --git a/src/main/java/cn/nukkit/block/BlockDeepslateChiseled.java b/src/main/java/cn/nukkit/block/BlockDeepslateChiseled.java index 56ad8100189..207c7c9dfaf 100644 --- a/src/main/java/cn/nukkit/block/BlockDeepslateChiseled.java +++ b/src/main/java/cn/nukkit/block/BlockDeepslateChiseled.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; @@ -19,18 +20,18 @@ public String getName() { } @Override - public double getHardness() { - return 3.5; + public float getHardness() { + return 3.5f; } @Override - public double getResistance() { + public float getResistance() { return 30; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override @@ -39,7 +40,7 @@ public boolean canHarvestWithHand() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{ toItem(true), diff --git a/src/main/java/cn/nukkit/block/BlockDeepslateCobbled.java b/src/main/java/cn/nukkit/block/BlockDeepslateCobbled.java index 445450757e5..3bf9cfcf236 100644 --- a/src/main/java/cn/nukkit/block/BlockDeepslateCobbled.java +++ b/src/main/java/cn/nukkit/block/BlockDeepslateCobbled.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; @@ -19,18 +20,18 @@ public String getName() { } @Override - public double getHardness() { - return 3.5; + public float getHardness() { + return 3.5f; } @Override - public double getResistance() { + public float getResistance() { return 30; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override @@ -39,7 +40,7 @@ public boolean canHarvestWithHand() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{ toItem(true), diff --git a/src/main/java/cn/nukkit/block/BlockDeepslateInfested.java b/src/main/java/cn/nukkit/block/BlockDeepslateInfested.java index c4bb324dee8..26936bb930f 100644 --- a/src/main/java/cn/nukkit/block/BlockDeepslateInfested.java +++ b/src/main/java/cn/nukkit/block/BlockDeepslateInfested.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.item.enchantment.Enchantment; @@ -24,17 +25,17 @@ public String getName() { } @Override - public double getHardness() { - return 1.5; + public float getHardness() { + return 1.5f; } @Override - public double getResistance() { - return 3.75; + public float getResistance() { + return 3.75f; } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN && item.hasEnchantment(Enchantment.SILK_TOUCH)) { return new Item[]{ Item.get(getItemId(DEEPSLATE)), @@ -42,4 +43,9 @@ public Item[] getDrops(Item item) { } return new Item[0]; } + + @Override + public boolean canHarvestWithHand() { + return true; + } } diff --git a/src/main/java/cn/nukkit/block/BlockDeepslatePolished.java b/src/main/java/cn/nukkit/block/BlockDeepslatePolished.java index e56c5e80048..80a69245971 100644 --- a/src/main/java/cn/nukkit/block/BlockDeepslatePolished.java +++ b/src/main/java/cn/nukkit/block/BlockDeepslatePolished.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; @@ -19,18 +20,18 @@ public String getName() { } @Override - public double getHardness() { - return 3.5; + public float getHardness() { + return 3.5f; } @Override - public double getResistance() { + public float getResistance() { return 30; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override @@ -39,7 +40,7 @@ public boolean canHarvestWithHand() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{ toItem(true), diff --git a/src/main/java/cn/nukkit/block/BlockDeepslateReinforced.java b/src/main/java/cn/nukkit/block/BlockDeepslateReinforced.java index 955570fcee2..d4c3bc77855 100644 --- a/src/main/java/cn/nukkit/block/BlockDeepslateReinforced.java +++ b/src/main/java/cn/nukkit/block/BlockDeepslateReinforced.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.utils.BlockColor; @@ -18,12 +19,12 @@ public String getName() { } @Override - public double getHardness() { + public float getHardness() { return 55; } @Override - public double getResistance() { + public float getResistance() { return 6000; } @@ -33,7 +34,7 @@ public boolean canHarvestWithHand() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { return new Item[0]; } diff --git a/src/main/java/cn/nukkit/block/BlockDeepslateTiles.java b/src/main/java/cn/nukkit/block/BlockDeepslateTiles.java index 4b883893103..27373a32029 100644 --- a/src/main/java/cn/nukkit/block/BlockDeepslateTiles.java +++ b/src/main/java/cn/nukkit/block/BlockDeepslateTiles.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; @@ -19,18 +20,18 @@ public String getName() { } @Override - public double getHardness() { - return 3.5; + public float getHardness() { + return 3.5f; } @Override - public double getResistance() { + public float getResistance() { return 30; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override @@ -39,7 +40,7 @@ public boolean canHarvestWithHand() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{ toItem(true), diff --git a/src/main/java/cn/nukkit/block/BlockDeny.java b/src/main/java/cn/nukkit/block/BlockDeny.java index 87a65f2e7ce..647d2e51a89 100644 --- a/src/main/java/cn/nukkit/block/BlockDeny.java +++ b/src/main/java/cn/nukkit/block/BlockDeny.java @@ -19,12 +19,12 @@ public String getName() { } @Override - public double getHardness() { - return 0.2; + public float getHardness() { + return 0.2f; } @Override - public double getResistance() { + public float getResistance() { return 18000; } diff --git a/src/main/java/cn/nukkit/block/BlockDiamond.java b/src/main/java/cn/nukkit/block/BlockDiamond.java index f77e32ad2bc..2bcd2a8ca39 100644 --- a/src/main/java/cn/nukkit/block/BlockDiamond.java +++ b/src/main/java/cn/nukkit/block/BlockDiamond.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; @@ -13,18 +14,18 @@ public BlockDiamond() { } @Override - public double getHardness() { + public float getHardness() { return 5; } @Override - public double getResistance() { + public float getResistance() { return 30; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override @@ -38,7 +39,7 @@ public String getName() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_IRON) { return new Item[]{ toItem(true) diff --git a/src/main/java/cn/nukkit/block/BlockDirt.java b/src/main/java/cn/nukkit/block/BlockDirt.java index 7b2e3d04c5d..75a6564f849 100644 --- a/src/main/java/cn/nukkit/block/BlockDirt.java +++ b/src/main/java/cn/nukkit/block/BlockDirt.java @@ -4,7 +4,6 @@ import cn.nukkit.item.Item; import cn.nukkit.item.ItemDye; import cn.nukkit.item.ItemID; -import cn.nukkit.item.ItemTool; import cn.nukkit.math.BlockFace; import cn.nukkit.utils.BlockColor; @@ -36,18 +35,18 @@ public boolean canBeActivated() { } @Override - public double getResistance() { - return 2.5; + public float getResistance() { + return 2.5f; } @Override - public double getHardness() { - return 0.5; + public float getHardness() { + return 0.5f; } @Override public int getToolType() { - return ItemTool.TYPE_SHOVEL; + return BlockToolType.SHOVEL; } @Override @@ -81,7 +80,7 @@ public boolean onActivate(Item item, BlockFace face, Player player) { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { return new Item[]{ Item.get(DIRT) }; diff --git a/src/main/java/cn/nukkit/block/BlockDirtRooted.java b/src/main/java/cn/nukkit/block/BlockDirtRooted.java index 5d248816199..1d1e5bca53f 100644 --- a/src/main/java/cn/nukkit/block/BlockDirtRooted.java +++ b/src/main/java/cn/nukkit/block/BlockDirtRooted.java @@ -2,7 +2,6 @@ import cn.nukkit.Player; import cn.nukkit.item.Item; -import cn.nukkit.item.ItemTool; import cn.nukkit.level.particle.BoneMealParticle; import cn.nukkit.math.BlockFace; import cn.nukkit.utils.BlockColor; @@ -22,18 +21,18 @@ public String getName() { } @Override - public double getHardness() { - return 0.5; + public float getHardness() { + return 0.5f; } @Override - public double getResistance() { - return 2.5; + public float getResistance() { + return 2.5f; } @Override public int getToolType() { - return ItemTool.TYPE_SHOVEL; + return BlockToolType.SHOVEL; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockDispenser.java b/src/main/java/cn/nukkit/block/BlockDispenser.java index 63e253b60e2..5bf0c23dd25 100644 --- a/src/main/java/cn/nukkit/block/BlockDispenser.java +++ b/src/main/java/cn/nukkit/block/BlockDispenser.java @@ -56,13 +56,13 @@ public int getBlockEntityType() { } @Override - public double getHardness() { - return 3.5; + public float getHardness() { + return 3.5f; } @Override - public double getResistance() { - return 17.5; + public float getResistance() { + return 17.5f; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockDoor.java b/src/main/java/cn/nukkit/block/BlockDoor.java index 4236a6fc67b..c7997ddfabc 100644 --- a/src/main/java/cn/nukkit/block/BlockDoor.java +++ b/src/main/java/cn/nukkit/block/BlockDoor.java @@ -269,7 +269,7 @@ public boolean place(Item item, Block block, Block target, BlockFace face, doubl } @Override - public boolean onBreak(Item item) { + public boolean onBreak(Item item, Player player) { if (isTop(this.getDamage())) { Block down = this.down(); if (down.getId() == this.getId()) { diff --git a/src/main/java/cn/nukkit/block/BlockDoorIron.java b/src/main/java/cn/nukkit/block/BlockDoorIron.java index 37989840e7f..df54c40f239 100644 --- a/src/main/java/cn/nukkit/block/BlockDoorIron.java +++ b/src/main/java/cn/nukkit/block/BlockDoorIron.java @@ -36,22 +36,22 @@ public boolean canBeActivated() { } @Override - public double getHardness() { + public float getHardness() { return 5; } @Override - public double getResistance() { + public float getResistance() { return 25; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{ toItem(true) diff --git a/src/main/java/cn/nukkit/block/BlockDoorWood.java b/src/main/java/cn/nukkit/block/BlockDoorWood.java index 075a60060f5..0342a910954 100644 --- a/src/main/java/cn/nukkit/block/BlockDoorWood.java +++ b/src/main/java/cn/nukkit/block/BlockDoorWood.java @@ -1,7 +1,6 @@ package cn.nukkit.block; import cn.nukkit.item.Item; -import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; /** @@ -29,18 +28,18 @@ public int getId() { } @Override - public double getHardness() { + public float getHardness() { return 3; } @Override - public double getResistance() { + public float getResistance() { return 15; } @Override public int getToolType() { - return ItemTool.TYPE_AXE; + return BlockToolType.AXE; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockDoublePlant.java b/src/main/java/cn/nukkit/block/BlockDoublePlant.java index 9bd5605c399..5c0023ab66b 100644 --- a/src/main/java/cn/nukkit/block/BlockDoublePlant.java +++ b/src/main/java/cn/nukkit/block/BlockDoublePlant.java @@ -102,7 +102,7 @@ public boolean place(Item item, Block block, Block target, BlockFace face, doubl } @Override - public boolean onBreak(Item item) { + public boolean onBreak(Item item, Player player) { Block down = down(); if ((this.getDamage() & TOP_HALF_BITMASK) == TOP_HALF_BITMASK) { // Top half @@ -115,7 +115,7 @@ public boolean onBreak(Item item) { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if ((this.getDamage() & TOP_HALF_BITMASK) != TOP_HALF_BITMASK) { switch (this.getPlantType()) { case TYPE_TALL_GRASS: diff --git a/src/main/java/cn/nukkit/block/BlockDoubleSlabBlackstone.java b/src/main/java/cn/nukkit/block/BlockDoubleSlabBlackstone.java index b0b08e190b4..c3b35983cf2 100644 --- a/src/main/java/cn/nukkit/block/BlockDoubleSlabBlackstone.java +++ b/src/main/java/cn/nukkit/block/BlockDoubleSlabBlackstone.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; @@ -27,18 +28,18 @@ public String getName() { } @Override - public double getHardness() { - return 1.5; + public float getHardness() { + return 1.5f; } @Override - public double getResistance() { + public float getResistance() { return 30; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override @@ -47,7 +48,7 @@ public boolean canHarvestWithHand() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{ Item.get(getItemId(getSlabBlockId()), this.getSlabType(), 2), diff --git a/src/main/java/cn/nukkit/block/BlockDoubleSlabCopperCut.java b/src/main/java/cn/nukkit/block/BlockDoubleSlabCopperCut.java index da4f67b21ad..62f2c6fb5ad 100644 --- a/src/main/java/cn/nukkit/block/BlockDoubleSlabCopperCut.java +++ b/src/main/java/cn/nukkit/block/BlockDoubleSlabCopperCut.java @@ -34,18 +34,18 @@ public String getName() { } @Override - public double getHardness() { + public float getHardness() { return 3; } @Override - public double getResistance() { + public float getResistance() { return 30; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override @@ -54,7 +54,7 @@ public boolean canHarvestWithHand() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_STONE) { return new Item[]{ Item.get(getItemId(getSlabBlockId()), getSlabType(), 2), diff --git a/src/main/java/cn/nukkit/block/BlockDoubleSlabDeepslateBrick.java b/src/main/java/cn/nukkit/block/BlockDoubleSlabDeepslateBrick.java index 9321de5671e..8078b5b9443 100644 --- a/src/main/java/cn/nukkit/block/BlockDoubleSlabDeepslateBrick.java +++ b/src/main/java/cn/nukkit/block/BlockDoubleSlabDeepslateBrick.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; @@ -27,18 +28,18 @@ public String getName() { } @Override - public double getHardness() { - return 3.5; + public float getHardness() { + return 3.5f; } @Override - public double getResistance() { + public float getResistance() { return 30; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override @@ -47,7 +48,7 @@ public boolean canHarvestWithHand() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{ Item.get(getItemId(getSlabBlockId()), this.getSlabType(), 2), diff --git a/src/main/java/cn/nukkit/block/BlockDoubleSlabDeepslateCobbled.java b/src/main/java/cn/nukkit/block/BlockDoubleSlabDeepslateCobbled.java index 32b95ae47a5..b7c09c66c8f 100644 --- a/src/main/java/cn/nukkit/block/BlockDoubleSlabDeepslateCobbled.java +++ b/src/main/java/cn/nukkit/block/BlockDoubleSlabDeepslateCobbled.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; @@ -27,18 +28,18 @@ public String getName() { } @Override - public double getHardness() { - return 3.5; + public float getHardness() { + return 3.5f; } @Override - public double getResistance() { + public float getResistance() { return 30; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override @@ -47,7 +48,7 @@ public boolean canHarvestWithHand() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{ Item.get(getItemId(getSlabBlockId()), this.getSlabType(), 2), diff --git a/src/main/java/cn/nukkit/block/BlockDoubleSlabDeepslatePolished.java b/src/main/java/cn/nukkit/block/BlockDoubleSlabDeepslatePolished.java index 184ec793db7..244542d440f 100644 --- a/src/main/java/cn/nukkit/block/BlockDoubleSlabDeepslatePolished.java +++ b/src/main/java/cn/nukkit/block/BlockDoubleSlabDeepslatePolished.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; @@ -27,18 +28,18 @@ public String getName() { } @Override - public double getHardness() { - return 3.5; + public float getHardness() { + return 3.5f; } @Override - public double getResistance() { + public float getResistance() { return 30; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override @@ -47,7 +48,7 @@ public boolean canHarvestWithHand() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{ Item.get(getItemId(getSlabBlockId()), this.getSlabType(), 2), diff --git a/src/main/java/cn/nukkit/block/BlockDoubleSlabDeepslateTile.java b/src/main/java/cn/nukkit/block/BlockDoubleSlabDeepslateTile.java index 914ecb618a6..fdad281b97e 100644 --- a/src/main/java/cn/nukkit/block/BlockDoubleSlabDeepslateTile.java +++ b/src/main/java/cn/nukkit/block/BlockDoubleSlabDeepslateTile.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; @@ -27,18 +28,18 @@ public String getName() { } @Override - public double getHardness() { - return 3.5; + public float getHardness() { + return 3.5f; } @Override - public double getResistance() { + public float getResistance() { return 30; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override @@ -47,7 +48,7 @@ public boolean canHarvestWithHand() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{ Item.get(getItemId(getSlabBlockId()), this.getSlabType(), 2), diff --git a/src/main/java/cn/nukkit/block/BlockDoubleSlabMudBrick.java b/src/main/java/cn/nukkit/block/BlockDoubleSlabMudBrick.java index 8b922bf7a4d..9a9945825dd 100644 --- a/src/main/java/cn/nukkit/block/BlockDoubleSlabMudBrick.java +++ b/src/main/java/cn/nukkit/block/BlockDoubleSlabMudBrick.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; @@ -30,21 +31,21 @@ public String getName() { } @Override - public double getHardness() { + public float getHardness() { if (ENABLE_BLOCK_DESTROY_SPEED_COMPATIBILITY || V1_20_30.isAvailable()) { - return 1.5; + return 1.5f; } return 2; } @Override - public double getResistance() { + public float getResistance() { return 15; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override @@ -53,7 +54,7 @@ public boolean canHarvestWithHand() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{ Item.get(getItemId(getSlabBlockId()), getSlabType(), 2), diff --git a/src/main/java/cn/nukkit/block/BlockDoubleSlabStone.java b/src/main/java/cn/nukkit/block/BlockDoubleSlabStone.java index 9dc7f93e9d7..1fd6281a251 100644 --- a/src/main/java/cn/nukkit/block/BlockDoubleSlabStone.java +++ b/src/main/java/cn/nukkit/block/BlockDoubleSlabStone.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; @@ -43,18 +44,18 @@ public int getId() { } @Override - public double getHardness() { + public float getHardness() { return 2; } @Override - public double getResistance() { + public float getResistance() { return 30; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override @@ -63,7 +64,7 @@ public String getName() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{ Item.get(getItemId(getSlabBlockId()), this.getSlabType(), 2) diff --git a/src/main/java/cn/nukkit/block/BlockDoubleSlabWood.java b/src/main/java/cn/nukkit/block/BlockDoubleSlabWood.java index d4c6804aecd..ebfedf19d4d 100644 --- a/src/main/java/cn/nukkit/block/BlockDoubleSlabWood.java +++ b/src/main/java/cn/nukkit/block/BlockDoubleSlabWood.java @@ -1,7 +1,7 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; -import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; /** @@ -42,12 +42,12 @@ public int getId() { } @Override - public double getHardness() { + public float getHardness() { return 2; } @Override - public double getResistance() { + public float getResistance() { return 15; } @@ -63,7 +63,7 @@ public int getBurnAbility() { @Override public int getToolType() { - return ItemTool.TYPE_AXE; + return BlockToolType.AXE; } @Override @@ -71,7 +71,7 @@ public String getName() { return NAMES[getSlabType()]; } - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { return new Item[]{ Item.get(getItemId(getSlabBlockId()), getSlabType(), 2) }; diff --git a/src/main/java/cn/nukkit/block/BlockDragonEgg.java b/src/main/java/cn/nukkit/block/BlockDragonEgg.java index 94ba726cf6b..f7903dca974 100644 --- a/src/main/java/cn/nukkit/block/BlockDragonEgg.java +++ b/src/main/java/cn/nukkit/block/BlockDragonEgg.java @@ -24,12 +24,12 @@ public int getId() { } @Override - public double getHardness() { + public float getHardness() { return 3; } @Override - public double getResistance() { + public float getResistance() { return 45; } @@ -107,4 +107,9 @@ public boolean canContainWater() { public boolean canProvideSupport(BlockFace face, SupportType type) { return false; } + + @Override + public int getToolType() { + return BlockToolType.PICKAXE; + } } diff --git a/src/main/java/cn/nukkit/block/BlockDriedKelp.java b/src/main/java/cn/nukkit/block/BlockDriedKelp.java index c6fbfe6f97f..918f48e8d2b 100644 --- a/src/main/java/cn/nukkit/block/BlockDriedKelp.java +++ b/src/main/java/cn/nukkit/block/BlockDriedKelp.java @@ -1,6 +1,5 @@ package cn.nukkit.block; -import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; public class BlockDriedKelp extends BlockSolid { @@ -20,17 +19,17 @@ public int getId() { @Override public int getToolType() { - return ItemTool.TYPE_HOE; + return BlockToolType.HOE; } @Override - public double getHardness() { - return 0.5; + public float getHardness() { + return 0.5f; } @Override - public double getResistance() { - return 12.5; + public float getResistance() { + return 12.5f; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockDripleafBig.java b/src/main/java/cn/nukkit/block/BlockDripleafBig.java index f737b3dc62c..6b23e61dacc 100644 --- a/src/main/java/cn/nukkit/block/BlockDripleafBig.java +++ b/src/main/java/cn/nukkit/block/BlockDripleafBig.java @@ -44,16 +44,16 @@ public String getName() { } @Override - public double getHardness() { + public float getHardness() { if (V1_20_30.isAvailable()) { - return 0.1; + return 0.1f; } return 0; } @Override - public double getResistance() { - return 0.5; + public float getResistance() { + return 0.5f; } @Override @@ -72,7 +72,7 @@ public Item toItem(boolean addUserData) { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { return new Item[]{ toItem(true), }; diff --git a/src/main/java/cn/nukkit/block/BlockDripleafSmall.java b/src/main/java/cn/nukkit/block/BlockDripleafSmall.java index 174f6863522..9eef2290532 100644 --- a/src/main/java/cn/nukkit/block/BlockDripleafSmall.java +++ b/src/main/java/cn/nukkit/block/BlockDripleafSmall.java @@ -2,7 +2,6 @@ import cn.nukkit.Player; import cn.nukkit.item.Item; -import cn.nukkit.item.ItemTool; import cn.nukkit.level.Level; import cn.nukkit.level.particle.BoneMealParticle; import cn.nukkit.math.AxisAlignedBB; @@ -36,12 +35,12 @@ public String getName() { } @Override - public double getHardness() { + public float getHardness() { return 0; } @Override - public double getResistance() { + public float getResistance() { return 0; } @@ -57,7 +56,7 @@ public int getBurnAbility() { @Override public int getToolType() { - return ItemTool.TYPE_SHEARS; + return BlockToolType.SHEARS; } @Override @@ -71,7 +70,7 @@ public Item toItem(boolean addUserData) { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isShears()) { return new Item[]{ toItem(true), diff --git a/src/main/java/cn/nukkit/block/BlockDripstone.java b/src/main/java/cn/nukkit/block/BlockDripstone.java index b456ff555cc..5746474d4d7 100644 --- a/src/main/java/cn/nukkit/block/BlockDripstone.java +++ b/src/main/java/cn/nukkit/block/BlockDripstone.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; @@ -19,18 +20,18 @@ public String getName() { } @Override - public double getHardness() { - return 1.5; + public float getHardness() { + return 1.5f; } @Override - public double getResistance() { + public float getResistance() { return 5; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override @@ -39,7 +40,7 @@ public boolean canHarvestWithHand() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{ toItem(true), diff --git a/src/main/java/cn/nukkit/block/BlockDripstonePointed.java b/src/main/java/cn/nukkit/block/BlockDripstonePointed.java index 2ab65ba6cc3..7b87cdb51a4 100644 --- a/src/main/java/cn/nukkit/block/BlockDripstonePointed.java +++ b/src/main/java/cn/nukkit/block/BlockDripstonePointed.java @@ -2,14 +2,9 @@ import cn.nukkit.Player; import cn.nukkit.entity.Entity; -import cn.nukkit.entity.EntityID; -import cn.nukkit.entity.EntityLiving; import cn.nukkit.entity.item.EntityFallingBlock; import cn.nukkit.event.block.BlockFallEvent; -import cn.nukkit.event.entity.EntityDamageByBlockEvent; -import cn.nukkit.event.entity.EntityDamageEvent.DamageCause; import cn.nukkit.item.Item; -import cn.nukkit.item.ItemTool; import cn.nukkit.level.Level; import cn.nukkit.math.AxisAlignedBB; import cn.nukkit.math.BlockFace; @@ -50,18 +45,18 @@ public String getName() { } @Override - public double getHardness() { - return 1.5; + public float getHardness() { + return 1.5f; } @Override - public double getResistance() { + public float getResistance() { return 15; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockEmerald.java b/src/main/java/cn/nukkit/block/BlockEmerald.java index c0bc0324c92..05df9fd92d0 100644 --- a/src/main/java/cn/nukkit/block/BlockEmerald.java +++ b/src/main/java/cn/nukkit/block/BlockEmerald.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; @@ -24,22 +25,22 @@ public int getId() { } @Override - public double getHardness() { + public float getHardness() { return 5; } @Override - public double getResistance() { + public float getResistance() { return 30; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{ toItem(true) diff --git a/src/main/java/cn/nukkit/block/BlockEnchantingTable.java b/src/main/java/cn/nukkit/block/BlockEnchantingTable.java index 3a6f4e6e1e0..2670f80079c 100644 --- a/src/main/java/cn/nukkit/block/BlockEnchantingTable.java +++ b/src/main/java/cn/nukkit/block/BlockEnchantingTable.java @@ -42,16 +42,16 @@ public int getBlockEntityType() { @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override - public double getHardness() { + public float getHardness() { return 5; } @Override - public double getResistance() { + public float getResistance() { return 6000; } @@ -66,7 +66,7 @@ public boolean canBeActivated() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{ toItem(true) diff --git a/src/main/java/cn/nukkit/block/BlockEndGateway.java b/src/main/java/cn/nukkit/block/BlockEndGateway.java index 4ffa06ce1a5..09cf9f443c9 100644 --- a/src/main/java/cn/nukkit/block/BlockEndGateway.java +++ b/src/main/java/cn/nukkit/block/BlockEndGateway.java @@ -6,7 +6,6 @@ import cn.nukkit.blockentity.BlockEntityEndGateway; import cn.nukkit.blockentity.BlockEntityType; import cn.nukkit.item.Item; -import cn.nukkit.item.ItemBlock; import cn.nukkit.item.Items; import cn.nukkit.math.BlockFace; import cn.nukkit.utils.BlockColor; @@ -47,12 +46,12 @@ public boolean isBreakable(Item item) { } @Override - public double getHardness() { + public float getHardness() { return -1; } @Override - public double getResistance() { + public float getResistance() { return 18000000; } diff --git a/src/main/java/cn/nukkit/block/BlockEndPortal.java b/src/main/java/cn/nukkit/block/BlockEndPortal.java index a7f04789b99..13d2ed9e829 100644 --- a/src/main/java/cn/nukkit/block/BlockEndPortal.java +++ b/src/main/java/cn/nukkit/block/BlockEndPortal.java @@ -6,7 +6,6 @@ import cn.nukkit.blockentity.BlockEntityEndPortal; import cn.nukkit.blockentity.BlockEntityType; import cn.nukkit.item.Item; -import cn.nukkit.item.ItemBlock; import cn.nukkit.item.Items; import cn.nukkit.math.BlockFace; import cn.nukkit.utils.BlockColor; @@ -45,12 +44,12 @@ public boolean isBreakable(Item item) { } @Override - public double getHardness() { + public float getHardness() { return -1; } @Override - public double getResistance() { + public float getResistance() { return 18000000; } diff --git a/src/main/java/cn/nukkit/block/BlockEndPortalFrame.java b/src/main/java/cn/nukkit/block/BlockEndPortalFrame.java index 226861a6f62..23f6780a30c 100644 --- a/src/main/java/cn/nukkit/block/BlockEndPortalFrame.java +++ b/src/main/java/cn/nukkit/block/BlockEndPortalFrame.java @@ -28,12 +28,12 @@ public int getId() { } @Override - public double getResistance() { + public float getResistance() { return 18000000; } @Override - public double getHardness() { + public float getHardness() { return -1; } diff --git a/src/main/java/cn/nukkit/block/BlockEndRod.java b/src/main/java/cn/nukkit/block/BlockEndRod.java index 34f30872358..a943f2cbd4b 100644 --- a/src/main/java/cn/nukkit/block/BlockEndRod.java +++ b/src/main/java/cn/nukkit/block/BlockEndRod.java @@ -2,7 +2,6 @@ import cn.nukkit.Player; import cn.nukkit.item.Item; -import cn.nukkit.item.ItemTool; import cn.nukkit.math.AxisAlignedBB; import cn.nukkit.math.BlockFace; import cn.nukkit.math.SimpleAxisAlignedBB; @@ -37,12 +36,12 @@ public int getId() { } @Override - public double getHardness() { + public float getHardness() { return 0; } @Override - public double getResistance() { + public float getResistance() { return 0; } @@ -51,11 +50,6 @@ public int getLightLevel() { return 14; } - @Override - public int getToolType() { - return ItemTool.TYPE_PICKAXE; - } - @Override protected AxisAlignedBB recalculateBoundingBox() { switch (getBlockFace().getAxis()) { diff --git a/src/main/java/cn/nukkit/block/BlockEndStone.java b/src/main/java/cn/nukkit/block/BlockEndStone.java index 5cc631a50af..192d0306e6e 100644 --- a/src/main/java/cn/nukkit/block/BlockEndStone.java +++ b/src/main/java/cn/nukkit/block/BlockEndStone.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; @@ -24,22 +25,22 @@ public int getId() { } @Override - public double getHardness() { + public float getHardness() { return 3; } @Override - public double getResistance() { + public float getResistance() { return 45; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{ toItem(true) diff --git a/src/main/java/cn/nukkit/block/BlockEnderChest.java b/src/main/java/cn/nukkit/block/BlockEnderChest.java index ba12f06c4b6..f90bac809ca 100644 --- a/src/main/java/cn/nukkit/block/BlockEnderChest.java +++ b/src/main/java/cn/nukkit/block/BlockEnderChest.java @@ -58,18 +58,18 @@ public String getName() { } @Override - public double getHardness() { - return 22.5; + public float getHardness() { + return 22.5f; } @Override - public double getResistance() { + public float getResistance() { return 3000; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override @@ -157,7 +157,7 @@ public boolean onActivate(Item item, BlockFace face, Player player) { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{ Item.get(Item.OBSIDIAN, 0, 8) diff --git a/src/main/java/cn/nukkit/block/BlockFarmland.java b/src/main/java/cn/nukkit/block/BlockFarmland.java index f1b43f37179..cb27eb9b8d7 100644 --- a/src/main/java/cn/nukkit/block/BlockFarmland.java +++ b/src/main/java/cn/nukkit/block/BlockFarmland.java @@ -1,7 +1,6 @@ package cn.nukkit.block; import cn.nukkit.item.Item; -import cn.nukkit.item.ItemTool; import cn.nukkit.level.Level; import cn.nukkit.utils.BlockColor; @@ -30,18 +29,18 @@ public int getId() { } @Override - public double getResistance() { + public float getResistance() { return 3; } @Override - public double getHardness() { - return 0.6; + public float getHardness() { + return 0.6f; } @Override public int getToolType() { - return ItemTool.TYPE_SHOVEL; + return BlockToolType.SHOVEL; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockFence.java b/src/main/java/cn/nukkit/block/BlockFence.java index 6cdd582366c..fb5671932d6 100644 --- a/src/main/java/cn/nukkit/block/BlockFence.java +++ b/src/main/java/cn/nukkit/block/BlockFence.java @@ -1,6 +1,5 @@ package cn.nukkit.block; -import cn.nukkit.item.ItemTool; import cn.nukkit.math.AxisAlignedBB; import cn.nukkit.math.BlockFace; import cn.nukkit.math.SimpleAxisAlignedBB; @@ -44,18 +43,18 @@ public int getId() { } @Override - public double getHardness() { + public float getHardness() { return 2; } @Override - public double getResistance() { + public float getResistance() { return 15; } @Override public int getToolType() { - return ItemTool.TYPE_AXE; + return BlockToolType.AXE; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockFenceGate.java b/src/main/java/cn/nukkit/block/BlockFenceGate.java index f56751c9c95..89eb0dd41c0 100644 --- a/src/main/java/cn/nukkit/block/BlockFenceGate.java +++ b/src/main/java/cn/nukkit/block/BlockFenceGate.java @@ -3,8 +3,8 @@ import cn.nukkit.Player; import cn.nukkit.event.block.DoorToggleEvent; import cn.nukkit.item.Item; -import cn.nukkit.item.ItemTool; import cn.nukkit.level.Level; +import cn.nukkit.math.AxisAlignedBB; import cn.nukkit.math.BlockFace; import cn.nukkit.network.protocol.LevelEventPacket; import cn.nukkit.utils.BlockColor; @@ -38,12 +38,12 @@ public String getName() { } @Override - public double getHardness() { + public float getHardness() { return 2; } @Override - public double getResistance() { + public float getResistance() { return 15; } @@ -54,7 +54,7 @@ public boolean canBeActivated() { @Override public int getToolType() { - return ItemTool.TYPE_AXE; + return BlockToolType.AXE; } private static final double[] offMinX = new double[2]; @@ -75,13 +75,7 @@ public int getToolType() { } private int getOffsetIndex() { - switch (this.getDamage() & DIRECTION_MASK) { - case 0: - case 2: - return 0; - default: - return 1; - } + return getDamage() & 0x1; } @Override @@ -106,7 +100,15 @@ public double getMaxZ() { @Override public boolean place(Item item, Block block, Block target, BlockFace face, double fx, double fy, double fz, Player player) { - this.setDamage(player != null ? player.getDirection().getHorizontalIndex() : 0); + BlockFace dir = BlockFace.SOUTH; + if (player != null) { + dir = player.getDirection(); + } + int meta = dir.getHorizontalIndex(); + if (getSide(dir.rotateY()).isWall() || getSide(dir.rotateYCCW()).isWall()) { + meta |= IN_WALL_BIT; + } + this.setDamage(meta); this.getLevel().setBlock(block, this, true, true); return true; @@ -134,25 +136,22 @@ public BlockColor getColor() { public boolean toggle(Player player) { DoorToggleEvent event = new DoorToggleEvent(this, player); this.getLevel().getServer().getPluginManager().callEvent(event); - if (event.isCancelled()) { return false; } - player = event.getPlayer(); + int meta = getDamage(); int direction; if (player != null) { double yaw = player.yaw; double rotation = (yaw - 90) % 360; - if (rotation < 0) { rotation += 360.0; } - int originDirection = this.getDamage() & 0x01; - + int originDirection = meta & 0x01; if (originDirection == 0) { if (rotation >= 0 && rotation < 180) { direction = 2; @@ -167,26 +166,39 @@ public boolean toggle(Player player) { } } } else { - int originDirection = this.getDamage() & 0x01; - - if (originDirection == 0) { - direction = 0; - } else { - direction = 1; - } + direction = meta & DIRECTION_MASK; } - this.setDamage(direction | ((~this.getDamage()) & OPEN_BIT)); + this.setDamage((meta & IN_WALL_BIT) | ((meta & OPEN_BIT) ^ OPEN_BIT) | direction); this.level.setBlock(this, this, true, false); return true; } public boolean isOpen() { - return (this.getDamage() & OPEN_BIT) > 0; + return (this.getDamage() & OPEN_BIT) != 0; } @Override public int onUpdate(int type) { + if (type == Level.BLOCK_UPDATE_NORMAL) { + int meta = getDamage(); + BlockFace dir = getBlockFace(); + if ((meta & IN_WALL_BIT) != 0) { + if (getSide(dir.rotateY()).isWall() || getSide(dir.rotateYCCW()).isWall()) { + return 0; + } else { + setDamage(meta & ~IN_WALL_BIT); + this.level.setBlock(this, this, true, false); + return Level.BLOCK_UPDATE_NORMAL; + } + } else if (getSide(dir.rotateY()).isWall() || getSide(dir.rotateYCCW()).isWall()) { + this.setDamage(meta | IN_WALL_BIT); + this.level.setBlock(this, this, true, false); + return Level.BLOCK_UPDATE_NORMAL; + } + return 0; + } + if (!this.level.isRedstoneEnabled()) { return 0; } @@ -240,4 +252,17 @@ public int getBurnChance() { public int getBurnAbility() { return 20; } + + @Override + public boolean canPassThrough() { + return isOpen(); + } + + @Override + protected AxisAlignedBB recalculateBoundingBox() { + if (isOpen()) { + return null; + } + return super.recalculateBoundingBox(); + } } diff --git a/src/main/java/cn/nukkit/block/BlockFenceNetherBrick.java b/src/main/java/cn/nukkit/block/BlockFenceNetherBrick.java index e0046af9f49..604cfca4c95 100644 --- a/src/main/java/cn/nukkit/block/BlockFenceNetherBrick.java +++ b/src/main/java/cn/nukkit/block/BlockFenceNetherBrick.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.math.BlockFace; @@ -17,7 +18,7 @@ public BlockFenceNetherBrick() { @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override @@ -31,12 +32,12 @@ public int getId() { } @Override - public double getResistance() { + public float getResistance() { return 30; } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{ toItem(true) diff --git a/src/main/java/cn/nukkit/block/BlockFire.java b/src/main/java/cn/nukkit/block/BlockFire.java index 5e975a05e2a..f670bb30194 100644 --- a/src/main/java/cn/nukkit/block/BlockFire.java +++ b/src/main/java/cn/nukkit/block/BlockFire.java @@ -18,7 +18,6 @@ import cn.nukkit.level.Level; import cn.nukkit.math.AxisAlignedBB; import cn.nukkit.math.BlockFace; -import cn.nukkit.math.Vector3; import cn.nukkit.utils.BlockColor; import javax.annotation.Nullable; @@ -86,7 +85,7 @@ public void onEntityCollide(Entity entity) { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { return new Item[0]; } @@ -102,7 +101,7 @@ public int onUpdate(int type) { } return Level.BLOCK_UPDATE_NORMAL; - } else if (type == Level.BLOCK_UPDATE_SCHEDULED && this.level.gameRules.getBoolean(GameRule.DO_FIRE_TICK)) { + } else if (type == Level.BLOCK_UPDATE_SCHEDULED && (this.level.gameRules.getBoolean(GameRule.DO_FIRE_TICK) || level.isExtinguishFireIgnoreGameRule())) { Block down = down(); boolean forever = down.getId() == Block.NETHERRACK || down.getId() == Block.MAGMA; @@ -139,7 +138,11 @@ public int onUpdate(int type) { this.getLevel().setBlock(this, this, true); } - this.getLevel().scheduleRandomUpdate(this, this.tickRate() + random.nextInt(10)); + if (level.isExtinguishFireIgnoreGameRule()) { + this.getLevel().scheduleUpdate(this, this.tickRate() + random.nextInt(10)); + } else { + this.getLevel().scheduleRandomUpdate(this, this.tickRate() + random.nextInt(10)); + } if (!forever && !this.canNeighborBurn()) { if (!this.isValidBase(this.down()) || meta > 3) { @@ -155,7 +158,7 @@ public int onUpdate(int type) { if (!event.isCancelled()) { level.setBlock(this, event.getNewState(), true); } - } else { + } else if (level.gameRules.getBoolean(GameRule.DO_FIRE_TICK)) { int o = 0; //TODO: decrease the o if the rainfall values are high @@ -177,7 +180,7 @@ public int onUpdate(int type) { k += (y - (this.y + 1)) * 100; } - Block block = this.getLevel().getBlock(new Vector3(x, y, z)); + Block block = this.getLevel().getBlock(x, y, z); int chance = this.getChanceOfNeighborsEncouragingFire(block); if (chance > 0) { diff --git a/src/main/java/cn/nukkit/block/BlockFletchingTable.java b/src/main/java/cn/nukkit/block/BlockFletchingTable.java index 1eed835036e..63797ab180e 100644 --- a/src/main/java/cn/nukkit/block/BlockFletchingTable.java +++ b/src/main/java/cn/nukkit/block/BlockFletchingTable.java @@ -1,6 +1,5 @@ package cn.nukkit.block; -import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; public class BlockFletchingTable extends BlockSolid { @@ -20,17 +19,17 @@ public String getName() { @Override public int getToolType() { - return ItemTool.TYPE_AXE; + return BlockToolType.AXE; } @Override - public double getHardness() { - return 2.5; + public float getHardness() { + return 2.5f; } @Override - public double getResistance() { - return 12.5; + public float getResistance() { + return 12.5f; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockFlowable.java b/src/main/java/cn/nukkit/block/BlockFlowable.java index eaa8a0b74ec..e141c65586d 100644 --- a/src/main/java/cn/nukkit/block/BlockFlowable.java +++ b/src/main/java/cn/nukkit/block/BlockFlowable.java @@ -24,12 +24,12 @@ public boolean canPassThrough() { } @Override - public double getHardness() { + public float getHardness() { return 0; } @Override - public double getResistance() { + public float getResistance() { return 0; } diff --git a/src/main/java/cn/nukkit/block/BlockFlowerPot.java b/src/main/java/cn/nukkit/block/BlockFlowerPot.java index 4f364e02ccd..e272f7385f2 100644 --- a/src/main/java/cn/nukkit/block/BlockFlowerPot.java +++ b/src/main/java/cn/nukkit/block/BlockFlowerPot.java @@ -133,7 +133,7 @@ public boolean onActivate(Item item, BlockFace face, Player player) { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { BlockEntityFlowerPot blockEntity = getBlockEntity(); if (blockEntity != null && blockEntity.hasPlant()) { return new Item[]{ diff --git a/src/main/java/cn/nukkit/block/BlockFrogSpawn.java b/src/main/java/cn/nukkit/block/BlockFrogSpawn.java index 9fa0baed584..2ded39d674d 100644 --- a/src/main/java/cn/nukkit/block/BlockFrogSpawn.java +++ b/src/main/java/cn/nukkit/block/BlockFrogSpawn.java @@ -28,7 +28,7 @@ public String getName() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { return new Item[0]; } diff --git a/src/main/java/cn/nukkit/block/BlockFroglight.java b/src/main/java/cn/nukkit/block/BlockFroglight.java index dacc19b78d7..08ddd0cf34a 100644 --- a/src/main/java/cn/nukkit/block/BlockFroglight.java +++ b/src/main/java/cn/nukkit/block/BlockFroglight.java @@ -6,13 +6,13 @@ protected BlockFroglight(int meta) { } @Override - public double getHardness() { - return 0.3; + public float getHardness() { + return 0.3f; } @Override - public double getResistance() { - return 1.5; + public float getResistance() { + return 1.5f; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockFullNames.java b/src/main/java/cn/nukkit/block/BlockFullNames.java index f1a0062ea1d..cbc1f33e852 100644 --- a/src/main/java/cn/nukkit/block/BlockFullNames.java +++ b/src/main/java/cn/nukkit/block/BlockFullNames.java @@ -9,6 +9,7 @@ public interface BlockFullNames { String COBBLESTONE = "minecraft:" + BlockNames.COBBLESTONE; String OAK_PLANKS = "minecraft:" + BlockNames.OAK_PLANKS; //TODO: 1.20.50 flattening String PLANKS = "minecraft:" + BlockNames.PLANKS; + String OAK_SAPLING = "minecraft:" + BlockNames.OAK_SAPLING; //TODO: 1.20.80 flattening String SAPLING = "minecraft:" + BlockNames.SAPLING; String BEDROCK = "minecraft:" + BlockNames.BEDROCK; String FLOWING_WATER = "minecraft:" + BlockNames.FLOWING_WATER; @@ -45,6 +46,7 @@ public interface BlockFullNames { String WOOL = "minecraft:" + BlockNames.WOOL; String ELEMENT_0 = "minecraft:" + BlockNames.ELEMENT_0; String YELLOW_FLOWER = "minecraft:" + BlockNames.YELLOW_FLOWER; + String POPPY = "minecraft:" + BlockNames.POPPY; //TODO: 1.20.80 flattening String RED_FLOWER = "minecraft:" + BlockNames.RED_FLOWER; String BROWN_MUSHROOM = "minecraft:" + BlockNames.BROWN_MUSHROOM; String RED_MUSHROOM = "minecraft:" + BlockNames.RED_MUSHROOM; @@ -419,7 +421,9 @@ public interface BlockFullNames { String TUBE_CORAL = "minecraft:" + BlockNames.TUBE_CORAL; //TODO: 1.20.0 flattening String CORAL = "minecraft:" + BlockNames.CORAL; String CORAL_BLOCK = "minecraft:" + BlockNames.CORAL_BLOCK; + String TUBE_CORAL_FAN = "minecraft:" + BlockNames.TUBE_CORAL_FAN; //TODO: 1.20.80 flattening String CORAL_FAN = "minecraft:" + BlockNames.CORAL_FAN; + String DEAD_TUBE_CORAL_FAN = "minecraft:" + BlockNames.DEAD_TUBE_CORAL_FAN; //TODO: 1.20.80 flattening String CORAL_FAN_DEAD = "minecraft:" + BlockNames.CORAL_FAN_DEAD; String CORAL_FAN_HANG = "minecraft:" + BlockNames.CORAL_FAN_HANG; String CORAL_FAN_HANG2 = "minecraft:" + BlockNames.CORAL_FAN_HANG2; @@ -1099,4 +1103,27 @@ public interface BlockFullNames { String STRIPPED_JUNGLE_WOOD = "minecraft:" + BlockNames.STRIPPED_JUNGLE_WOOD; String STRIPPED_ACACIA_WOOD = "minecraft:" + BlockNames.STRIPPED_ACACIA_WOOD; String STRIPPED_DARK_OAK_WOOD = "minecraft:" + BlockNames.STRIPPED_DARK_OAK_WOOD; + String SPRUCE_SAPLING = "minecraft:" + BlockNames.SPRUCE_SAPLING; + String BIRCH_SAPLING = "minecraft:" + BlockNames.BIRCH_SAPLING; + String JUNGLE_SAPLING = "minecraft:" + BlockNames.JUNGLE_SAPLING; + String ACACIA_SAPLING = "minecraft:" + BlockNames.ACACIA_SAPLING; + String DARK_OAK_SAPLING = "minecraft:" + BlockNames.DARK_OAK_SAPLING; + String BLUE_ORCHID = "minecraft:" + BlockNames.BLUE_ORCHID; + String ALLIUM = "minecraft:" + BlockNames.ALLIUM; + String AZURE_BLUET = "minecraft:" + BlockNames.AZURE_BLUET; + String RED_TULIP = "minecraft:" + BlockNames.RED_TULIP; + String ORANGE_TULIP = "minecraft:" + BlockNames.ORANGE_TULIP; + String WHITE_TULIP = "minecraft:" + BlockNames.WHITE_TULIP; + String PINK_TULIP = "minecraft:" + BlockNames.PINK_TULIP; + String OXEYE_DAISY = "minecraft:" + BlockNames.OXEYE_DAISY; + String CORNFLOWER = "minecraft:" + BlockNames.CORNFLOWER; + String LILY_OF_THE_VALLEY = "minecraft:" + BlockNames.LILY_OF_THE_VALLEY; + String BRAIN_CORAL_FAN = "minecraft:" + BlockNames.BRAIN_CORAL_FAN; + String BUBBLE_CORAL_FAN = "minecraft:" + BlockNames.BUBBLE_CORAL_FAN; + String FIRE_CORAL_FAN = "minecraft:" + BlockNames.FIRE_CORAL_FAN; + String HORN_CORAL_FAN = "minecraft:" + BlockNames.HORN_CORAL_FAN; + String DEAD_BRAIN_CORAL_FAN = "minecraft:" + BlockNames.DEAD_BRAIN_CORAL_FAN; + String DEAD_BUBBLE_CORAL_FAN = "minecraft:" + BlockNames.DEAD_BUBBLE_CORAL_FAN; + String DEAD_FIRE_CORAL_FAN = "minecraft:" + BlockNames.DEAD_FIRE_CORAL_FAN; + String DEAD_HORN_CORAL_FAN = "minecraft:" + BlockNames.DEAD_HORN_CORAL_FAN; } diff --git a/src/main/java/cn/nukkit/block/BlockFungusStem.java b/src/main/java/cn/nukkit/block/BlockFungusStem.java index e8e5af43039..43486e59c2e 100644 --- a/src/main/java/cn/nukkit/block/BlockFungusStem.java +++ b/src/main/java/cn/nukkit/block/BlockFungusStem.java @@ -2,7 +2,6 @@ import cn.nukkit.Player; import cn.nukkit.item.Item; -import cn.nukkit.item.ItemTool; import cn.nukkit.math.BlockFace; import cn.nukkit.network.protocol.LevelSoundEventPacket; @@ -12,18 +11,18 @@ protected BlockFungusStem(int meta) { } @Override - public double getHardness() { + public float getHardness() { return 2; } @Override - public double getResistance() { + public float getResistance() { return 10; } @Override public int getToolType() { - return ItemTool.TYPE_AXE; + return BlockToolType.AXE; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockFungusStemStripped.java b/src/main/java/cn/nukkit/block/BlockFungusStemStripped.java index 95739376b86..11dcaed2060 100644 --- a/src/main/java/cn/nukkit/block/BlockFungusStemStripped.java +++ b/src/main/java/cn/nukkit/block/BlockFungusStemStripped.java @@ -1,24 +1,22 @@ package cn.nukkit.block; -import cn.nukkit.item.ItemTool; - public abstract class BlockFungusStemStripped extends BlockRotatedPillar { protected BlockFungusStemStripped(int meta) { super(meta); } @Override - public double getHardness() { + public float getHardness() { return 2; } @Override - public double getResistance() { + public float getResistance() { return 10; } @Override public int getToolType() { - return ItemTool.TYPE_AXE; + return BlockToolType.AXE; } } diff --git a/src/main/java/cn/nukkit/block/BlockFurnaceBurning.java b/src/main/java/cn/nukkit/block/BlockFurnaceBurning.java index 98927bceaaf..5b93cf3ff41 100644 --- a/src/main/java/cn/nukkit/block/BlockFurnaceBurning.java +++ b/src/main/java/cn/nukkit/block/BlockFurnaceBurning.java @@ -54,18 +54,18 @@ public boolean canBeActivated() { } @Override - public double getHardness() { - return 3.5; + public float getHardness() { + return 3.5f; } @Override - public double getResistance() { - return 17.5; + public float getResistance() { + return 17.5f; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override @@ -97,7 +97,7 @@ public boolean place(Item item, Block block, Block target, BlockFace face, doubl } @Override - public boolean onBreak(Item item) { + public boolean onBreak(Item item, Player player) { this.getLevel().setBlock(this, Block.get(BlockID.AIR), true, true); return true; } @@ -136,7 +136,7 @@ public Item toItem(boolean addUserData) { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{ this.toItem(true) diff --git a/src/main/java/cn/nukkit/block/BlockGlass.java b/src/main/java/cn/nukkit/block/BlockGlass.java index 39af71f9c0b..04fea7e7734 100644 --- a/src/main/java/cn/nukkit/block/BlockGlass.java +++ b/src/main/java/cn/nukkit/block/BlockGlass.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.utils.BlockColor; @@ -23,17 +24,17 @@ public String getName() { } @Override - public double getResistance() { - return 1.5; + public float getResistance() { + return 1.5f; } @Override - public double getHardness() { - return 0.3; + public float getHardness() { + return 0.3f; } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { return new Item[0]; } diff --git a/src/main/java/cn/nukkit/block/BlockGlassPane.java b/src/main/java/cn/nukkit/block/BlockGlassPane.java index 3f04d2bee2b..07ff3b53574 100644 --- a/src/main/java/cn/nukkit/block/BlockGlassPane.java +++ b/src/main/java/cn/nukkit/block/BlockGlassPane.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.utils.BlockColor; @@ -23,17 +24,17 @@ public int getId() { } @Override - public double getResistance() { - return 1.5; + public float getResistance() { + return 1.5f; } @Override - public double getHardness() { - return 0.3; + public float getHardness() { + return 0.3f; } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { return new Item[0]; } diff --git a/src/main/java/cn/nukkit/block/BlockGlassTinted.java b/src/main/java/cn/nukkit/block/BlockGlassTinted.java index 5e13a4c7e19..0602f3a02d1 100644 --- a/src/main/java/cn/nukkit/block/BlockGlassTinted.java +++ b/src/main/java/cn/nukkit/block/BlockGlassTinted.java @@ -17,13 +17,13 @@ public String getName() { } @Override - public double getHardness() { - return 0.3; + public float getHardness() { + return 0.3f; } @Override - public double getResistance() { - return 1.5; + public float getResistance() { + return 1.5f; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockGlowLichen.java b/src/main/java/cn/nukkit/block/BlockGlowLichen.java index 375fd151f0b..44594bd5fae 100644 --- a/src/main/java/cn/nukkit/block/BlockGlowLichen.java +++ b/src/main/java/cn/nukkit/block/BlockGlowLichen.java @@ -2,8 +2,6 @@ import cn.nukkit.Player; import cn.nukkit.item.Item; -import cn.nukkit.item.ItemTool; -import cn.nukkit.level.particle.BoneMealParticle; import cn.nukkit.math.BlockFace; import cn.nukkit.utils.BlockColor; @@ -27,12 +25,12 @@ public String getName() { } @Override - public double getHardness() { - return 0.2; + public float getHardness() { + return 0.2f; } @Override - public double getResistance() { + public float getResistance() { return 1; } @@ -53,11 +51,11 @@ public int getLightLevel() { @Override public int getToolType() { - return ItemTool.TYPE_AXE; + return BlockToolType.AXE | BlockToolType.SHEARS; } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isShears()) { int count = 0; for (BlockFace face : BlockFace.getValues()) { diff --git a/src/main/java/cn/nukkit/block/BlockGlowstone.java b/src/main/java/cn/nukkit/block/BlockGlowstone.java index 2e5a2cc6a86..77bf2ffe412 100644 --- a/src/main/java/cn/nukkit/block/BlockGlowstone.java +++ b/src/main/java/cn/nukkit/block/BlockGlowstone.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.enchantment.Enchantment; import cn.nukkit.math.Mth; @@ -27,13 +28,13 @@ public int getId() { } @Override - public double getResistance() { - return 1.5; + public float getResistance() { + return 1.5f; } @Override - public double getHardness() { - return 0.3; + public float getHardness() { + return 0.3f; } @Override @@ -42,7 +43,7 @@ public int getLightLevel() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { Random random = ThreadLocalRandom.current(); int count = 2 + random.nextInt(3); diff --git a/src/main/java/cn/nukkit/block/BlockGold.java b/src/main/java/cn/nukkit/block/BlockGold.java index 1820f755197..3f763ec6e63 100644 --- a/src/main/java/cn/nukkit/block/BlockGold.java +++ b/src/main/java/cn/nukkit/block/BlockGold.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; @@ -25,21 +26,21 @@ public String getName() { @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override - public double getHardness() { + public float getHardness() { return 3; } @Override - public double getResistance() { + public float getResistance() { return 30; } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_IRON) { return new Item[]{ toItem(true) diff --git a/src/main/java/cn/nukkit/block/BlockGoldRaw.java b/src/main/java/cn/nukkit/block/BlockGoldRaw.java index a657ed1cb35..10e0f878151 100644 --- a/src/main/java/cn/nukkit/block/BlockGoldRaw.java +++ b/src/main/java/cn/nukkit/block/BlockGoldRaw.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; @@ -19,18 +20,18 @@ public String getName() { } @Override - public double getHardness() { + public float getHardness() { return 5; } @Override - public double getResistance() { + public float getResistance() { return 30; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override @@ -39,7 +40,7 @@ public boolean canHarvestWithHand() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_IRON) { return new Item[]{ toItem(true), diff --git a/src/main/java/cn/nukkit/block/BlockGrass.java b/src/main/java/cn/nukkit/block/BlockGrass.java index cbc9beae424..785485b22d9 100644 --- a/src/main/java/cn/nukkit/block/BlockGrass.java +++ b/src/main/java/cn/nukkit/block/BlockGrass.java @@ -35,12 +35,12 @@ public int getId() { } @Override - public double getHardness() { - return 0.6; + public float getHardness() { + return 0.6f; } @Override - public double getResistance() { + public float getResistance() { return 3; } diff --git a/src/main/java/cn/nukkit/block/BlockGrassPath.java b/src/main/java/cn/nukkit/block/BlockGrassPath.java index 21432d5de69..02a5e44deec 100644 --- a/src/main/java/cn/nukkit/block/BlockGrassPath.java +++ b/src/main/java/cn/nukkit/block/BlockGrassPath.java @@ -2,7 +2,6 @@ import cn.nukkit.Player; import cn.nukkit.item.Item; -import cn.nukkit.item.ItemTool; import cn.nukkit.math.BlockFace; import cn.nukkit.utils.BlockColor; @@ -27,17 +26,17 @@ public String getName() { @Override public int getToolType() { - return ItemTool.TYPE_SHOVEL; + return BlockToolType.SHOVEL; } @Override - public double getHardness() { - return 0.65; + public float getHardness() { + return 0.65f; } @Override - public double getResistance() { - return 3.25; + public float getResistance() { + return 3.25f; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockGravel.java b/src/main/java/cn/nukkit/block/BlockGravel.java index 86b07f4f8b3..eeaf6f7474b 100644 --- a/src/main/java/cn/nukkit/block/BlockGravel.java +++ b/src/main/java/cn/nukkit/block/BlockGravel.java @@ -4,7 +4,6 @@ import cn.nukkit.item.Item; import cn.nukkit.item.ItemDye; import cn.nukkit.item.ItemID; -import cn.nukkit.item.ItemTool; import cn.nukkit.math.BlockFace; import java.util.concurrent.ThreadLocalRandom; @@ -24,18 +23,18 @@ public int getId() { } @Override - public double getHardness() { - return 0.6; + public float getHardness() { + return 0.6f; } @Override - public double getResistance() { + public float getResistance() { return 3; } @Override public int getToolType() { - return ItemTool.TYPE_SHOVEL; + return BlockToolType.SHOVEL; } @Override @@ -44,7 +43,7 @@ public String getName() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (ThreadLocalRandom.current().nextInt(9) == 0) { return new Item[]{ Item.get(Item.FLINT) diff --git a/src/main/java/cn/nukkit/block/BlockGrindstone.java b/src/main/java/cn/nukkit/block/BlockGrindstone.java index ea2e273ebc9..35337d7f7cc 100644 --- a/src/main/java/cn/nukkit/block/BlockGrindstone.java +++ b/src/main/java/cn/nukkit/block/BlockGrindstone.java @@ -42,16 +42,16 @@ public int getId() { @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override - public double getHardness() { + public float getHardness() { return 2; } @Override - public double getResistance() { + public float getResistance() { return 30; } @@ -76,7 +76,7 @@ public boolean canHarvestWithHand() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{ toItem(true) diff --git a/src/main/java/cn/nukkit/block/BlockHangingRoots.java b/src/main/java/cn/nukkit/block/BlockHangingRoots.java index 274d2fa6b4e..bb1967aaa35 100644 --- a/src/main/java/cn/nukkit/block/BlockHangingRoots.java +++ b/src/main/java/cn/nukkit/block/BlockHangingRoots.java @@ -38,11 +38,11 @@ public int getBurnAbility() { @Override public int getToolType() { - return ItemTool.TYPE_SHEARS; + return BlockToolType.SHEARS; } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isShears()) { return new Item[]{ toItem(true), diff --git a/src/main/java/cn/nukkit/block/BlockHayBale.java b/src/main/java/cn/nukkit/block/BlockHayBale.java index 5377cbf0101..8e4502fddac 100644 --- a/src/main/java/cn/nukkit/block/BlockHayBale.java +++ b/src/main/java/cn/nukkit/block/BlockHayBale.java @@ -2,7 +2,6 @@ import cn.nukkit.Player; import cn.nukkit.item.Item; -import cn.nukkit.item.ItemTool; import cn.nukkit.math.BlockFace; import cn.nukkit.utils.BlockColor; import cn.nukkit.utils.Faceable; @@ -41,13 +40,13 @@ public String getName() { } @Override - public double getHardness() { - return 0.5; + public float getHardness() { + return 0.5f; } @Override - public double getResistance() { - return 2.5; + public float getResistance() { + return 2.5f; } @Override @@ -62,7 +61,7 @@ public int getBurnAbility() { @Override public int getToolType() { - return ItemTool.TYPE_HOE; + return BlockToolType.HOE; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockHoney.java b/src/main/java/cn/nukkit/block/BlockHoney.java index 5a720ee4271..338a889ae65 100644 --- a/src/main/java/cn/nukkit/block/BlockHoney.java +++ b/src/main/java/cn/nukkit/block/BlockHoney.java @@ -18,18 +18,18 @@ public int getId() { } @Override - public double getHardness() { + public float getHardness() { return 0; } @Override - public double getResistance() { + public float getResistance() { return 0; } @Override - public double getFrictionFactor() { - return 0.8; + public float getFrictionFactor() { + return 0.8f; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockHoneycomb.java b/src/main/java/cn/nukkit/block/BlockHoneycomb.java index 57d73a9e6ab..78d6b620ff2 100644 --- a/src/main/java/cn/nukkit/block/BlockHoneycomb.java +++ b/src/main/java/cn/nukkit/block/BlockHoneycomb.java @@ -18,12 +18,12 @@ public int getId() { } @Override - public double getHardness() { - return 0.6; + public float getHardness() { + return 0.6f; } @Override - public double getResistance() { + public float getResistance() { return 3; } diff --git a/src/main/java/cn/nukkit/block/BlockHopper.java b/src/main/java/cn/nukkit/block/BlockHopper.java index 5b8174e46ea..f172e424350 100644 --- a/src/main/java/cn/nukkit/block/BlockHopper.java +++ b/src/main/java/cn/nukkit/block/BlockHopper.java @@ -43,12 +43,12 @@ public int getBlockEntityType() { } @Override - public double getHardness() { + public float getHardness() { return 3; } @Override - public double getResistance() { + public float getResistance() { return 24; } @@ -158,11 +158,11 @@ public int onUpdate(int type) { @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{toItem(true)}; } diff --git a/src/main/java/cn/nukkit/block/BlockHugeMushroom.java b/src/main/java/cn/nukkit/block/BlockHugeMushroom.java index 9a5282455ab..e550339d549 100644 --- a/src/main/java/cn/nukkit/block/BlockHugeMushroom.java +++ b/src/main/java/cn/nukkit/block/BlockHugeMushroom.java @@ -1,7 +1,7 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; -import cn.nukkit.item.ItemTool; import java.util.concurrent.ThreadLocalRandom; @@ -11,18 +11,18 @@ protected BlockHugeMushroom(int meta) { } @Override - public double getHardness() { - return 0.2; + public float getHardness() { + return 0.2f; } @Override - public double getResistance() { + public float getResistance() { return 1; } @Override public int getToolType() { - return ItemTool.TYPE_AXE; + return BlockToolType.AXE; } @Override @@ -31,7 +31,7 @@ public boolean canSilkTouch() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { int count = ThreadLocalRandom.current().nextInt(-7, 3); if (count <= 0) { return new Item[0]; diff --git a/src/main/java/cn/nukkit/block/BlockHyphae.java b/src/main/java/cn/nukkit/block/BlockHyphae.java index 2637add036f..46d9d97a24e 100644 --- a/src/main/java/cn/nukkit/block/BlockHyphae.java +++ b/src/main/java/cn/nukkit/block/BlockHyphae.java @@ -2,7 +2,6 @@ import cn.nukkit.Player; import cn.nukkit.item.Item; -import cn.nukkit.item.ItemTool; import cn.nukkit.math.BlockFace; import cn.nukkit.network.protocol.LevelSoundEventPacket; @@ -14,21 +13,21 @@ protected BlockHyphae(int meta) { } @Override - public double getHardness() { + public float getHardness() { if (V1_20_30.isAvailable()) { return 2; } - return 0.3; + return 0.3f; } @Override - public double getResistance() { + public float getResistance() { return 10; } @Override public int getToolType() { - return ItemTool.TYPE_AXE; + return BlockToolType.AXE; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockHyphaeStripped.java b/src/main/java/cn/nukkit/block/BlockHyphaeStripped.java index 0ae1b2672fb..46391b3d3fe 100644 --- a/src/main/java/cn/nukkit/block/BlockHyphaeStripped.java +++ b/src/main/java/cn/nukkit/block/BlockHyphaeStripped.java @@ -1,7 +1,5 @@ package cn.nukkit.block; -import cn.nukkit.item.ItemTool; - import static cn.nukkit.GameVersion.*; public abstract class BlockHyphaeStripped extends BlockRotatedPillar { @@ -10,20 +8,20 @@ protected BlockHyphaeStripped(int meta) { } @Override - public double getHardness() { + public float getHardness() { if (V1_20_30.isAvailable()) { return 2; } - return 0.3; + return 0.3f; } @Override - public double getResistance() { + public float getResistance() { return 10; } @Override public int getToolType() { - return ItemTool.TYPE_AXE; + return BlockToolType.AXE; } } diff --git a/src/main/java/cn/nukkit/block/BlockID.java b/src/main/java/cn/nukkit/block/BlockID.java index 48578403130..4ce0fa81b2e 100644 --- a/src/main/java/cn/nukkit/block/BlockID.java +++ b/src/main/java/cn/nukkit/block/BlockID.java @@ -16,6 +16,7 @@ public interface BlockID { int COBBLESTONE = 4; int OAK_PLANKS = 5; //TODO: 1.20.50: flattening int PLANKS = 5; + int OAK_SAPLING = 6; //TODO: 1.20.80 flattening int SAPLING = 6; int BEDROCK = 7; int FLOWING_WATER = 8; @@ -56,6 +57,7 @@ public interface BlockID { int WOOL = 35; int ELEMENT_0 = 36; int YELLOW_FLOWER = 37; + int POPPY = 38; //TODO: 1.20.80 flattening int RED_FLOWER = 38; int BROWN_MUSHROOM = 39; int RED_MUSHROOM = 40; @@ -446,7 +448,9 @@ public interface BlockID { int TUBE_CORAL = 386; //TODO: 1.20.0: flattening int CORAL = 386; int CORAL_BLOCK = 387; + int TUBE_CORAL_FAN = 388; //TODO: 1.20.80 flattening int CORAL_FAN = 388; + int DEAD_TUBE_CORAL_FAN = 389; //TODO: 1.20.80 flattening int CORAL_FAN_DEAD = 389; int CORAL_FAN_HANG = 390; int CORAL_FAN_HANG2 = 391; @@ -1126,25 +1130,36 @@ public interface BlockID { int STRIPPED_JUNGLE_WOOD = 1077; int STRIPPED_ACACIA_WOOD = 1078; int STRIPPED_DARK_OAK_WOOD = 1079; + int SPRUCE_SAPLING = 1080; + int BIRCH_SAPLING = 1081; + int JUNGLE_SAPLING = 1082; + int ACACIA_SAPLING = 1083; + int DARK_OAK_SAPLING = 1084; + int BLUE_ORCHID = 1085; + int ALLIUM = 1086; + int AZURE_BLUET = 1087; + int RED_TULIP = 1088; + int ORANGE_TULIP = 1089; + int WHITE_TULIP = 1090; + int PINK_TULIP = 1091; + int OXEYE_DAISY = 1092; + int CORNFLOWER = 1093; + int LILY_OF_THE_VALLEY = 1094; + int BRAIN_CORAL_FAN = 1095; + int BUBBLE_CORAL_FAN = 1096; + int FIRE_CORAL_FAN = 1097; + int HORN_CORAL_FAN = 1098; + int DEAD_BRAIN_CORAL_FAN = 1099; + int DEAD_BUBBLE_CORAL_FAN = 1100; + int DEAD_FIRE_CORAL_FAN = 1101; + int DEAD_HORN_CORAL_FAN = 1102; - int UNDEFINED = 1080; + int UNDEFINED = 1103; @Beta int COARSE_DIRT = DIRT; @Beta - int OAK_SAPLING = SAPLING; - @Beta - int SPRUCE_SAPLING = SAPLING; - @Beta - int BIRCH_SAPLING = SAPLING; - @Beta - int JUNGLE_SAPLING = SAPLING; - @Beta - int ACACIA_SAPLING = SAPLING; - @Beta - int DARK_OAK_SAPLING = SAPLING; - @Beta int RED_SAND = SAND; @Beta int CHISELED_SANDSTONE = SANDSTONE; @@ -1157,28 +1172,6 @@ public interface BlockID { @Beta int DANDELION = YELLOW_FLOWER; @Beta - int POPPY = RED_FLOWER; - @Beta - int BLUE_ORCHID = RED_FLOWER; - @Beta - int ALLIUM = RED_FLOWER; - @Beta - int AZURE_BLUET = RED_FLOWER; - @Beta - int RED_TULIP = RED_FLOWER; - @Beta - int ORANGE_TULIP = RED_FLOWER; - @Beta - int WHITE_TULIP = RED_FLOWER; - @Beta - int PINK_TULIP = RED_FLOWER; - @Beta - int OXEYE_DAISY = RED_FLOWER; - @Beta - int CORNFLOWER = RED_FLOWER; - @Beta - int LILY_OF_THE_VALLEY = RED_FLOWER; - @Beta int SANDSTONE_DOUBLE_SLAB = DOUBLE_STONE_SLAB; @Beta int COBBLESTONE_DOUBLE_SLAB = DOUBLE_STONE_SLAB; @@ -1329,26 +1322,6 @@ public interface BlockID { @Beta int DEAD_HORN_CORAL_BLOCK = CORAL_BLOCK; @Beta - int TUBE_CORAL_FAN = CORAL_FAN; - @Beta - int BRAIN_CORAL_FAN = CORAL_FAN; - @Beta - int BUBBLE_CORAL_FAN = CORAL_FAN; - @Beta - int FIRE_CORAL_FAN = CORAL_FAN; - @Beta - int HORN_CORAL_FAN = CORAL_FAN; - @Beta - int DEAD_TUBE_CORAL_FAN = CORAL_FAN_DEAD; - @Beta - int DEAD_BRAIN_CORAL_FAN = CORAL_FAN_DEAD; - @Beta - int DEAD_BUBBLE_CORAL_FAN = CORAL_FAN_DEAD; - @Beta - int DEAD_FIRE_CORAL_FAN = CORAL_FAN_DEAD; - @Beta - int DEAD_HORN_CORAL_FAN = CORAL_FAN_DEAD; - @Beta int TUBE_CORAL_WALL_FAN = CORAL_FAN_HANG; @Beta int BRAIN_CORAL_WALL_FAN = CORAL_FAN_HANG; diff --git a/src/main/java/cn/nukkit/block/BlockIce.java b/src/main/java/cn/nukkit/block/BlockIce.java index 0c845260746..461e21b4be0 100644 --- a/src/main/java/cn/nukkit/block/BlockIce.java +++ b/src/main/java/cn/nukkit/block/BlockIce.java @@ -1,8 +1,9 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.event.block.BlockFadeEvent; import cn.nukkit.item.Item; -import cn.nukkit.item.ItemTool; +import cn.nukkit.item.enchantment.Enchantment; import cn.nukkit.level.Dimension; import cn.nukkit.level.Level; import cn.nukkit.utils.BlockColor; @@ -27,31 +28,31 @@ public String getName() { } @Override - public double getResistance() { - return 2.5; + public float getResistance() { + return 2.5f; } @Override - public double getHardness() { - return 0.5; + public float getHardness() { + return 0.5f; } @Override - public double getFrictionFactor() { - return 0.98; + public float getFrictionFactor() { + return 0.98f; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override - public boolean onBreak(Item item) { - if (this.getLevel().getDimension() != Dimension.NETHER) { + public boolean onBreak(Item item, Player player) { + if (this.getLevel().getDimension() != Dimension.NETHER && (player == null || player.isSurvivalLike()) && !item.hasEnchantment(Enchantment.SILK_TOUCH)) { return this.getLevel().setBlock(this, Block.get(BlockID.WATER), true); } else { - return super.onBreak(item); + return super.onBreak(item, player); } } @@ -71,7 +72,7 @@ public int onUpdate(int type) { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { return new Item[0]; } @@ -84,9 +85,4 @@ public BlockColor getColor() { public boolean canSilkTouch() { return true; } - - @Override - public boolean canHarvestWithHand() { - return false; - } } diff --git a/src/main/java/cn/nukkit/block/BlockIceBlue.java b/src/main/java/cn/nukkit/block/BlockIceBlue.java index 4c8187dcf21..c996c7349d8 100644 --- a/src/main/java/cn/nukkit/block/BlockIceBlue.java +++ b/src/main/java/cn/nukkit/block/BlockIceBlue.java @@ -1,7 +1,7 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; -import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; public class BlockIceBlue extends BlockSolid { @@ -21,22 +21,22 @@ public String getName() { @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override - public double getHardness() { - return 2.8; + public float getHardness() { + return 2.8f; } @Override - public double getResistance() { + public float getResistance() { return 14; } @Override - public double getFrictionFactor() { - return 0.99; + public float getFrictionFactor() { + return 0.99f; } @Override @@ -44,18 +44,13 @@ public BlockColor getColor() { return BlockColor.ICE_BLOCK_COLOR; } - @Override - public boolean canHarvestWithHand() { - return false; - } - @Override public boolean canSilkTouch() { return true; } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { return new Item[0]; } } diff --git a/src/main/java/cn/nukkit/block/BlockIceFrosted.java b/src/main/java/cn/nukkit/block/BlockIceFrosted.java index c39d0931988..76c19e287dc 100644 --- a/src/main/java/cn/nukkit/block/BlockIceFrosted.java +++ b/src/main/java/cn/nukkit/block/BlockIceFrosted.java @@ -30,18 +30,18 @@ public String getName() { } @Override - public double getHardness() { - return 0.5; + public float getHardness() { + return 0.5f; } @Override - public double getResistance() { - return 2.5; + public float getResistance() { + return 2.5f; } @Override - public double getFrictionFactor() { - return 0.98; + public float getFrictionFactor() { + return 0.98f; } @Override @@ -60,14 +60,14 @@ public Item toItem(boolean addUserData) { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { return new Item[0]; } @Override - public boolean onBreak(Item item) { - if (level.getDimension() == Dimension.NETHER) { - return super.onBreak(item); + public boolean onBreak(Item item, Player player) { + if (level.getDimension() == Dimension.NETHER || (player != null && player.isCreative())) { + return super.onBreak(item, player); } return level.setBlock(this, Block.get(BlockID.WATER), true); } diff --git a/src/main/java/cn/nukkit/block/BlockIcePacked.java b/src/main/java/cn/nukkit/block/BlockIcePacked.java index cf47f781f26..5862e15f7d8 100644 --- a/src/main/java/cn/nukkit/block/BlockIcePacked.java +++ b/src/main/java/cn/nukkit/block/BlockIcePacked.java @@ -1,7 +1,7 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; -import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; /** @@ -25,22 +25,22 @@ public String getName() { @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override - public double getHardness() { - return 0.5; + public float getHardness() { + return 0.5f; } @Override - public double getResistance() { - return 2.5; + public float getResistance() { + return 2.5f; } @Override - public double getFrictionFactor() { - return 0.98; + public float getFrictionFactor() { + return 0.98f; } @Override @@ -48,18 +48,13 @@ public BlockColor getColor() { return BlockColor.ICE_BLOCK_COLOR; } - @Override - public boolean canHarvestWithHand() { - return false; - } - @Override public boolean canSilkTouch() { return true; } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { return new Item[0]; } } diff --git a/src/main/java/cn/nukkit/block/BlockInfoUpdate.java b/src/main/java/cn/nukkit/block/BlockInfoUpdate.java index 8db0d27f1f1..ca830f4c70c 100644 --- a/src/main/java/cn/nukkit/block/BlockInfoUpdate.java +++ b/src/main/java/cn/nukkit/block/BlockInfoUpdate.java @@ -18,12 +18,12 @@ public String getName() { } @Override - public double getHardness() { + public float getHardness() { return 1; } @Override - public double getResistance() { + public float getResistance() { return 5; } diff --git a/src/main/java/cn/nukkit/block/BlockInfoUpdate2.java b/src/main/java/cn/nukkit/block/BlockInfoUpdate2.java index 3fb4a845bf3..934ebe00008 100644 --- a/src/main/java/cn/nukkit/block/BlockInfoUpdate2.java +++ b/src/main/java/cn/nukkit/block/BlockInfoUpdate2.java @@ -18,12 +18,12 @@ public String getName() { } @Override - public double getHardness() { + public float getHardness() { return 1; } @Override - public double getResistance() { + public float getResistance() { return 5; } diff --git a/src/main/java/cn/nukkit/block/BlockIron.java b/src/main/java/cn/nukkit/block/BlockIron.java index 10e040519a3..7282d5c9fa0 100644 --- a/src/main/java/cn/nukkit/block/BlockIron.java +++ b/src/main/java/cn/nukkit/block/BlockIron.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; @@ -25,21 +26,21 @@ public String getName() { @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override - public double getHardness() { + public float getHardness() { return 5; } @Override - public double getResistance() { + public float getResistance() { return 30; } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_STONE) { return new Item[]{ toItem(true) diff --git a/src/main/java/cn/nukkit/block/BlockIronBars.java b/src/main/java/cn/nukkit/block/BlockIronBars.java index e22f4b3b835..48f25778211 100644 --- a/src/main/java/cn/nukkit/block/BlockIronBars.java +++ b/src/main/java/cn/nukkit/block/BlockIronBars.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; @@ -24,18 +25,18 @@ public int getId() { } @Override - public double getHardness() { + public float getHardness() { return 5; } @Override - public double getResistance() { + public float getResistance() { return 30; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override @@ -44,7 +45,7 @@ public Item toItem(boolean addUserData) { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{ this.toItem(true) diff --git a/src/main/java/cn/nukkit/block/BlockIronRaw.java b/src/main/java/cn/nukkit/block/BlockIronRaw.java index da3ce3c2295..6b95fb99201 100644 --- a/src/main/java/cn/nukkit/block/BlockIronRaw.java +++ b/src/main/java/cn/nukkit/block/BlockIronRaw.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; @@ -19,18 +20,18 @@ public String getName() { } @Override - public double getHardness() { + public float getHardness() { return 5; } @Override - public double getResistance() { + public float getResistance() { return 30; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override @@ -39,7 +40,7 @@ public boolean canHarvestWithHand() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_STONE) { return new Item[]{ toItem(true), diff --git a/src/main/java/cn/nukkit/block/BlockItemFrame.java b/src/main/java/cn/nukkit/block/BlockItemFrame.java index 00bd746aa32..6840f1a9e25 100644 --- a/src/main/java/cn/nukkit/block/BlockItemFrame.java +++ b/src/main/java/cn/nukkit/block/BlockItemFrame.java @@ -105,14 +105,14 @@ public boolean place(Item item, Block block, Block target, BlockFace face, doubl } @Override - public boolean onBreak(Item item) { + public boolean onBreak(Item item, Player player) { this.getLevel().setBlock(this, Block.get(BlockID.AIR), true, true); this.getLevel().addLevelEvent(this, LevelEventPacket.EVENT_SOUND_ITEM_FRAME_REMOVED); return true; } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { BlockEntityItemFrame itemFrame = getBlockEntity(); if (itemFrame != null && itemFrame.hasItem() && ThreadLocalRandom.current().nextFloat() <= itemFrame.getItemDropChance()) { return new Item[]{ @@ -161,13 +161,13 @@ public int getComparatorInputOverride() { } @Override - public double getHardness() { - return 0.25; + public float getHardness() { + return 0.25f; } @Override - public double getResistance() { - return 1.25; + public float getResistance() { + return 1.25f; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockJigsaw.java b/src/main/java/cn/nukkit/block/BlockJigsaw.java index fc93c19b8f8..e474a24b76b 100644 --- a/src/main/java/cn/nukkit/block/BlockJigsaw.java +++ b/src/main/java/cn/nukkit/block/BlockJigsaw.java @@ -43,12 +43,12 @@ public int getBlockEntityType() { } @Override - public double getHardness() { + public float getHardness() { return -1; } @Override - public double getResistance() { + public float getResistance() { return 18000000; } @@ -132,6 +132,7 @@ public boolean onActivate(Item item, BlockFace face, Player player) { return true; } //TODO: UI + //player.openBlockEditor(getFloorX(), getFloorY(), getFloorZ(), ContainerType.JIGSAW_EDITOR); return true; } diff --git a/src/main/java/cn/nukkit/block/BlockJukebox.java b/src/main/java/cn/nukkit/block/BlockJukebox.java index ef94bad0f95..944e5789520 100644 --- a/src/main/java/cn/nukkit/block/BlockJukebox.java +++ b/src/main/java/cn/nukkit/block/BlockJukebox.java @@ -77,8 +77,8 @@ public boolean place(Item item, Block block, Block target, BlockFace face, doubl } @Override - public boolean onBreak(Item item) { - if (super.onBreak(item)) { + public boolean onBreak(Item item, Player player) { + if (super.onBreak(item, player)) { BlockEntity blockEntity = this.level.getBlockEntity(this); if (blockEntity instanceof BlockEntityJukebox) { @@ -103,15 +103,15 @@ public BlockColor getColor() { } @Override - public double getHardness() { + public float getHardness() { if (V1_20_30.isAvailable()) { return 2; } - return 0.8; + return 0.8f; } @Override - public double getResistance() { + public float getResistance() { return 30; } } diff --git a/src/main/java/cn/nukkit/block/BlockKelp.java b/src/main/java/cn/nukkit/block/BlockKelp.java index e0db14468b2..0a8602d36de 100644 --- a/src/main/java/cn/nukkit/block/BlockKelp.java +++ b/src/main/java/cn/nukkit/block/BlockKelp.java @@ -35,12 +35,12 @@ public int getId() { } @Override - public double getHardness() { + public float getHardness() { return 0; } @Override - public double getResistance() { + public float getResistance() { return 0; } @@ -128,8 +128,8 @@ public boolean onActivate(Item item, BlockFace face, Player player) { } @Override - public boolean onBreak(Item item) { - if (!super.onBreak(item)) { + public boolean onBreak(Item item, Player player) { + if (!super.onBreak(item, player)) { return false; } diff --git a/src/main/java/cn/nukkit/block/BlockLadder.java b/src/main/java/cn/nukkit/block/BlockLadder.java index cdfc34721e1..7481a978ab2 100644 --- a/src/main/java/cn/nukkit/block/BlockLadder.java +++ b/src/main/java/cn/nukkit/block/BlockLadder.java @@ -2,7 +2,6 @@ import cn.nukkit.Player; import cn.nukkit.item.Item; -import cn.nukkit.item.ItemTool; import cn.nukkit.level.Level; import cn.nukkit.math.AxisAlignedBB; import cn.nukkit.math.BlockFace; @@ -59,12 +58,12 @@ public boolean isSolid() { } @Override - public double getHardness() { - return 0.4; + public float getHardness() { + return 0.4f; } @Override - public double getResistance() { + public float getResistance() { return 2; } @@ -166,7 +165,7 @@ public int onUpdate(int type) { @Override public int getToolType() { - return ItemTool.TYPE_AXE; + return BlockToolType.AXE; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockLantern.java b/src/main/java/cn/nukkit/block/BlockLantern.java index 6c1c9b7f96c..216597d420b 100644 --- a/src/main/java/cn/nukkit/block/BlockLantern.java +++ b/src/main/java/cn/nukkit/block/BlockLantern.java @@ -3,7 +3,6 @@ import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemID; -import cn.nukkit.item.ItemTool; import cn.nukkit.level.Level; import cn.nukkit.math.BlockFace; import cn.nukkit.utils.BlockColor; @@ -34,21 +33,21 @@ public String getName() { } @Override - public double getHardness() { + public float getHardness() { if (ENABLE_BLOCK_DESTROY_SPEED_COMPATIBILITY || V1_20_30.isAvailable()) { - return 3.5; + return 3.5f; } return 5; } @Override - public double getResistance() { - return 17.5; + public float getResistance() { + return 17.5f; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockLapis.java b/src/main/java/cn/nukkit/block/BlockLapis.java index f97274e1e58..b37bec666f6 100644 --- a/src/main/java/cn/nukkit/block/BlockLapis.java +++ b/src/main/java/cn/nukkit/block/BlockLapis.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; @@ -26,21 +27,21 @@ public String getName() { @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override - public double getHardness() { + public float getHardness() { return 3; } @Override - public double getResistance() { + public float getResistance() { return 15; } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_STONE) { return new Item[]{ toItem(true) diff --git a/src/main/java/cn/nukkit/block/BlockLeaves.java b/src/main/java/cn/nukkit/block/BlockLeaves.java index 1423e5e257d..2f9df2963ea 100644 --- a/src/main/java/cn/nukkit/block/BlockLeaves.java +++ b/src/main/java/cn/nukkit/block/BlockLeaves.java @@ -4,12 +4,11 @@ import cn.nukkit.Server; import cn.nukkit.event.block.LeavesDecayEvent; import cn.nukkit.item.Item; -import cn.nukkit.item.ItemTool; import cn.nukkit.level.Level; import cn.nukkit.math.BlockFace; import cn.nukkit.utils.BlockColor; import cn.nukkit.utils.Hash; -import it.unimi.dsi.fastutil.longs.LongArraySet; +import it.unimi.dsi.fastutil.longs.LongOpenHashSet; import it.unimi.dsi.fastutil.longs.LongSet; import java.util.concurrent.ThreadLocalRandom; @@ -56,18 +55,18 @@ public int getId() { } @Override - public double getHardness() { - return 0.2; + public float getHardness() { + return 0.2f; } @Override - public double getResistance() { + public float getResistance() { return 1; } @Override public int getToolType() { - return ItemTool.TYPE_SHEARS; + return BlockToolType.HOE | BlockToolType.SHEARS; } @Override @@ -98,7 +97,7 @@ public Item toItem(boolean addUserData) { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isShears()) { return new Item[]{ toItem(true) @@ -127,35 +126,46 @@ public Item[] getDrops(Item item) { @Override public int onUpdate(int type) { - if (type == Level.BLOCK_UPDATE_RANDOM && !isPersistent() && !isCheckDecay()) { + if (type != Level.BLOCK_UPDATE_RANDOM) { + return 0; + } + + if (isPersistent()) { + return 0; + } + + if (!isCheckDecay()) { setCheckDecay(true); getLevel().setBlock(this, this, true, false); - } else if (type == Level.BLOCK_UPDATE_RANDOM && isCheckDecay() && !isPersistent()) { + } else { setDamage(getLeafType()); - int check = 0; + int check = 0; LeavesDecayEvent ev = new LeavesDecayEvent(this); - Server.getInstance().getPluginManager().callEvent(ev); - if (ev.isCancelled() || findLog(this, new LongArraySet(), 0, check)) { + if (ev.isCancelled() || findLog(this, new LongOpenHashSet(), 0, check)) { getLevel().setBlock(this, this, true, false); } else { getLevel().useBreakOn(this); return Level.BLOCK_UPDATE_NORMAL; } } - return 0; + return type; } - private Boolean findLog(Block pos, LongSet visited, Integer distance, Integer check) { + private Boolean findLog(Block pos, LongSet visited, int distance, int check) { return findLog(pos, visited, distance, check, null); } - private Boolean findLog(Block pos, LongSet visited, Integer distance, Integer check, BlockFace fromSide) { + private Boolean findLog(Block pos, LongSet visited, int distance, int check, BlockFace fromSide) { ++check; long index = Hash.hashBlockPos((int) pos.x, (int) pos.y, (int) pos.z); - if (visited.contains(index)) return false; - if (pos.isLog()) return true; + if (visited.contains(index)) { + return false; + } + if (pos.isLog()) { + return true; + } if (pos.isLeaves() && distance <= 6) { visited.add(index); Block down = pos.down(); @@ -165,41 +175,55 @@ private Boolean findLog(Block pos, LongSet visited, Integer distance, Integer ch if (fromSide == null) { //North, East, South, West for (int side = 2; side <= 5; ++side) { - if (this.findLog(pos.getSide(BlockFace.fromIndex(side)), visited, distance + 1, check, BlockFace.fromIndex(side))) + if (this.findLog(pos.getSide(BlockFace.fromIndex(side)), visited, distance + 1, check, BlockFace.fromIndex(side))) { return true; + } } } else { //No more loops switch (fromSide) { case NORTH: - if (this.findLog(pos.getSide(BlockFace.NORTH), visited, distance + 1, check, fromSide)) + if (this.findLog(pos.getSide(BlockFace.NORTH), visited, distance + 1, check, fromSide)) { return true; - if (this.findLog(pos.getSide(BlockFace.WEST), visited, distance + 1, check, fromSide)) + } + if (this.findLog(pos.getSide(BlockFace.WEST), visited, distance + 1, check, fromSide)) { return true; - if (this.findLog(pos.getSide(BlockFace.EAST), visited, distance + 1, check, fromSide)) + } + if (this.findLog(pos.getSide(BlockFace.EAST), visited, distance + 1, check, fromSide)) { return true; + } break; case SOUTH: - if (this.findLog(pos.getSide(BlockFace.SOUTH), visited, distance + 1, check, fromSide)) + if (this.findLog(pos.getSide(BlockFace.SOUTH), visited, distance + 1, check, fromSide)) { return true; - if (this.findLog(pos.getSide(BlockFace.WEST), visited, distance + 1, check, fromSide)) + } + if (this.findLog(pos.getSide(BlockFace.WEST), visited, distance + 1, check, fromSide)) { return true; - if (this.findLog(pos.getSide(BlockFace.EAST), visited, distance + 1, check, fromSide)) + } + if (this.findLog(pos.getSide(BlockFace.EAST), visited, distance + 1, check, fromSide)) { return true; + } break; case WEST: - if (this.findLog(pos.getSide(BlockFace.NORTH), visited, distance + 1, check, fromSide)) + if (this.findLog(pos.getSide(BlockFace.NORTH), visited, distance + 1, check, fromSide)) { return true; - if (this.findLog(pos.getSide(BlockFace.SOUTH), visited, distance + 1, check, fromSide)) + } + if (this.findLog(pos.getSide(BlockFace.SOUTH), visited, distance + 1, check, fromSide)) { return true; - if (this.findLog(pos.getSide(BlockFace.WEST), visited, distance + 1, check, fromSide)) + } + if (this.findLog(pos.getSide(BlockFace.WEST), visited, distance + 1, check, fromSide)) { return true; + } + break; case EAST: - if (this.findLog(pos.getSide(BlockFace.NORTH), visited, distance + 1, check, fromSide)) + if (this.findLog(pos.getSide(BlockFace.NORTH), visited, distance + 1, check, fromSide)) { return true; - if (this.findLog(pos.getSide(BlockFace.SOUTH), visited, distance + 1, check, fromSide)) + } + if (this.findLog(pos.getSide(BlockFace.SOUTH), visited, distance + 1, check, fromSide)) { return true; - if (this.findLog(pos.getSide(BlockFace.EAST), visited, distance + 1, check, fromSide)) + } + if (this.findLog(pos.getSide(BlockFace.EAST), visited, distance + 1, check, fromSide)) { return true; + } break; } } diff --git a/src/main/java/cn/nukkit/block/BlockLectern.java b/src/main/java/cn/nukkit/block/BlockLectern.java index 696372f61fc..cd73450ed1a 100644 --- a/src/main/java/cn/nukkit/block/BlockLectern.java +++ b/src/main/java/cn/nukkit/block/BlockLectern.java @@ -7,11 +7,11 @@ import cn.nukkit.blockentity.BlockEntityType; import cn.nukkit.item.Item; import cn.nukkit.item.ItemBookWritable; -import cn.nukkit.item.ItemTool; import cn.nukkit.level.Level; import cn.nukkit.math.BlockFace; import cn.nukkit.nbt.tag.CompoundTag; import cn.nukkit.network.protocol.LevelSoundEventPacket; +import cn.nukkit.network.protocol.types.ContainerType; import cn.nukkit.utils.BlockColor; import cn.nukkit.utils.Faceable; @@ -48,16 +48,16 @@ public int getBlockEntityType() { } @Override - public double getHardness() { + public float getHardness() { if (V1_20_30.isAvailable()) { - return 2.5; + return 2.5f; } return 2; } @Override - public double getResistance() { - return 12.5; + public float getResistance() { + return 12.5f; } @Override @@ -72,7 +72,7 @@ public int getBurnAbility() { @Override public int getToolType() { - return ItemTool.TYPE_AXE; + return BlockToolType.AXE; } @Override @@ -114,7 +114,7 @@ public Item toItem(boolean addUserData) { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { Item drop = toItem(true); BlockEntityLectern blockEntity = getBlockEntity(); ItemBookWritable book = blockEntity.getBook(); @@ -153,6 +153,7 @@ public boolean onActivate(Item item, BlockFace face, Player player) { } if (blockEntity.getBook() != null) { + player.openBlockEditor(getFloorX(), getFloorY(), getFloorZ(), ContainerType.LECTERN); return true; } @@ -163,6 +164,7 @@ public boolean onActivate(Item item, BlockFace face, Player player) { ItemBookWritable book = (ItemBookWritable) item.clone(); book.setCount(1); blockEntity.setBook(book); + blockEntity.spawnToAll(); level.addLevelSoundEvent(this, LevelSoundEventPacket.SOUND_ITEM_BOOK_PUT); diff --git a/src/main/java/cn/nukkit/block/BlockLever.java b/src/main/java/cn/nukkit/block/BlockLever.java index fdecdfed5c3..60fdcedcbfc 100644 --- a/src/main/java/cn/nukkit/block/BlockLever.java +++ b/src/main/java/cn/nukkit/block/BlockLever.java @@ -67,13 +67,13 @@ public boolean canBeActivated() { } @Override - public double getHardness() { - return 0.5d; + public float getHardness() { + return 0.5f; } @Override - public double getResistance() { - return 2.5d; + public float getResistance() { + return 2.5f; } @Override @@ -82,7 +82,7 @@ public Item toItem(boolean addUserData) { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { return new Item[]{toItem(true)}; } @@ -135,7 +135,7 @@ public boolean place(Item item, Block block, Block target, BlockFace face, doubl } @Override - public boolean onBreak(Item item) { + public boolean onBreak(Item item, Player player) { this.getLevel().setBlock(this, Block.get(BlockID.AIR), true, true); if (isPowerOn()) { diff --git a/src/main/java/cn/nukkit/block/BlockLight.java b/src/main/java/cn/nukkit/block/BlockLight.java index 937ae855768..d43a29741fb 100644 --- a/src/main/java/cn/nukkit/block/BlockLight.java +++ b/src/main/java/cn/nukkit/block/BlockLight.java @@ -28,12 +28,12 @@ public String getName() { } @Override - public double getHardness() { + public float getHardness() { return -1; } @Override - public double getResistance() { + public float getResistance() { return 18000004; } diff --git a/src/main/java/cn/nukkit/block/BlockLightningRod.java b/src/main/java/cn/nukkit/block/BlockLightningRod.java index 80a492b3c6b..62ff354f5dd 100644 --- a/src/main/java/cn/nukkit/block/BlockLightningRod.java +++ b/src/main/java/cn/nukkit/block/BlockLightningRod.java @@ -31,18 +31,18 @@ public String getName() { } @Override - public double getHardness() { + public float getHardness() { return 3; } @Override - public double getResistance() { + public float getResistance() { return 30; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override @@ -51,7 +51,7 @@ public boolean canHarvestWithHand() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_STONE) { return new Item[]{ this.toItem(true), diff --git a/src/main/java/cn/nukkit/block/BlockLiquid.java b/src/main/java/cn/nukkit/block/BlockLiquid.java index 0ebd72188f9..6da9a14ac2d 100644 --- a/src/main/java/cn/nukkit/block/BlockLiquid.java +++ b/src/main/java/cn/nukkit/block/BlockLiquid.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.entity.Entity; import cn.nukkit.event.block.BlockFromToEvent; import cn.nukkit.event.block.LiquidFlowEvent; @@ -53,7 +54,7 @@ protected AxisAlignedBB recalculateBoundingBox() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { return new Item[0]; } @@ -411,12 +412,12 @@ private int calculateFlowCost(int blockX, int blockY, int blockZ, int accumulate } @Override - public double getHardness() { - return 100d; + public float getHardness() { + return 100; } @Override - public double getResistance() { + public float getResistance() { return 500; } diff --git a/src/main/java/cn/nukkit/block/BlockLodestone.java b/src/main/java/cn/nukkit/block/BlockLodestone.java index 91b0ecca53e..12fc56f0589 100644 --- a/src/main/java/cn/nukkit/block/BlockLodestone.java +++ b/src/main/java/cn/nukkit/block/BlockLodestone.java @@ -35,16 +35,16 @@ public int getBlockEntityType() { } @Override - public double getHardness() { + public float getHardness() { if (V1_20_30.isAvailable()) { - return 3.5; + return 3.5f; } return 2; } @Override - public double getResistance() { - return 17.5; + public float getResistance() { + return 17.5f; } @Override @@ -54,11 +54,11 @@ public boolean canHarvestWithHand() { @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{ toItem(true), diff --git a/src/main/java/cn/nukkit/block/BlockLog.java b/src/main/java/cn/nukkit/block/BlockLog.java index ad5b6b9aa4b..57b7e8e4eb3 100644 --- a/src/main/java/cn/nukkit/block/BlockLog.java +++ b/src/main/java/cn/nukkit/block/BlockLog.java @@ -2,7 +2,6 @@ import cn.nukkit.Player; import cn.nukkit.item.Item; -import cn.nukkit.item.ItemTool; import cn.nukkit.math.BlockFace; import cn.nukkit.network.protocol.LevelSoundEventPacket; @@ -12,12 +11,12 @@ protected BlockLog(int meta) { } @Override - public double getHardness() { + public float getHardness() { return 2; } @Override - public double getResistance() { + public float getResistance() { return 10; } @@ -33,7 +32,7 @@ public int getBurnAbility() { @Override public int getToolType() { - return ItemTool.TYPE_AXE; + return BlockToolType.AXE; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockLogStripped.java b/src/main/java/cn/nukkit/block/BlockLogStripped.java index 9a1d3943c26..0dac7ffb3f6 100644 --- a/src/main/java/cn/nukkit/block/BlockLogStripped.java +++ b/src/main/java/cn/nukkit/block/BlockLogStripped.java @@ -1,19 +1,17 @@ package cn.nukkit.block; -import cn.nukkit.item.ItemTool; - public abstract class BlockLogStripped extends BlockRotatedPillar { protected BlockLogStripped(int meta) { super(meta); } @Override - public double getHardness() { + public float getHardness() { return 2; } @Override - public double getResistance() { + public float getResistance() { return 10; } @@ -29,7 +27,7 @@ public int getBurnAbility() { @Override public int getToolType() { - return ItemTool.TYPE_AXE; + return BlockToolType.AXE; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockLoom.java b/src/main/java/cn/nukkit/block/BlockLoom.java index b6e2b47a4e7..470a60eed6f 100644 --- a/src/main/java/cn/nukkit/block/BlockLoom.java +++ b/src/main/java/cn/nukkit/block/BlockLoom.java @@ -3,7 +3,6 @@ import cn.nukkit.Player; import cn.nukkit.inventory.LoomInventory; import cn.nukkit.item.Item; -import cn.nukkit.item.ItemTool; import cn.nukkit.math.BlockFace; import cn.nukkit.utils.BlockColor; import cn.nukkit.utils.Faceable; @@ -32,17 +31,17 @@ public int getId() { @Override public int getToolType() { - return ItemTool.TYPE_AXE; + return BlockToolType.AXE; } @Override - public double getHardness() { - return 2.5; + public float getHardness() { + return 2.5f; } @Override - public double getResistance() { - return 12.5; + public float getResistance() { + return 12.5f; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockMagma.java b/src/main/java/cn/nukkit/block/BlockMagma.java index 21da7da105a..31783c02d97 100644 --- a/src/main/java/cn/nukkit/block/BlockMagma.java +++ b/src/main/java/cn/nukkit/block/BlockMagma.java @@ -30,17 +30,17 @@ public String getName() { @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override - public double getHardness() { - return 0.5; + public float getHardness() { + return 0.5f; } @Override - public double getResistance() { - return 2.5; + public float getResistance() { + return 2.5f; } @Override @@ -49,7 +49,7 @@ public int getLightLevel() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{ toItem(true) diff --git a/src/main/java/cn/nukkit/block/BlockMangrovePropagule.java b/src/main/java/cn/nukkit/block/BlockMangrovePropagule.java index eb2769627b5..dc24ca6643a 100644 --- a/src/main/java/cn/nukkit/block/BlockMangrovePropagule.java +++ b/src/main/java/cn/nukkit/block/BlockMangrovePropagule.java @@ -35,12 +35,12 @@ public String getName() { } @Override - public double getHardness() { + public float getHardness() { return 0; } @Override - public double getResistance() { + public float getResistance() { return 0; } @@ -50,7 +50,7 @@ public Item toItem(boolean addUserData) { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (isHanging() && getStage() < STAGE_FULLY_GROWN) { return new Item[0]; } diff --git a/src/main/java/cn/nukkit/block/BlockMangroveRoots.java b/src/main/java/cn/nukkit/block/BlockMangroveRoots.java index 053907c8eb5..087c04acb78 100644 --- a/src/main/java/cn/nukkit/block/BlockMangroveRoots.java +++ b/src/main/java/cn/nukkit/block/BlockMangroveRoots.java @@ -1,6 +1,5 @@ package cn.nukkit.block; -import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; public class BlockMangroveRoots extends BlockTransparent { @@ -18,13 +17,13 @@ public String getName() { } @Override - public double getHardness() { - return 0.7; + public float getHardness() { + return 0.7f; } @Override - public double getResistance() { - return 3.5; + public float getResistance() { + return 3.5f; } @Override @@ -39,7 +38,7 @@ public int getBurnAbility() { @Override public int getToolType() { - return ItemTool.TYPE_AXE; + return BlockToolType.AXE; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockMangroveRootsMuddy.java b/src/main/java/cn/nukkit/block/BlockMangroveRootsMuddy.java index 123a8d16343..db0303adc01 100644 --- a/src/main/java/cn/nukkit/block/BlockMangroveRootsMuddy.java +++ b/src/main/java/cn/nukkit/block/BlockMangroveRootsMuddy.java @@ -2,7 +2,6 @@ import cn.nukkit.Player; import cn.nukkit.item.Item; -import cn.nukkit.item.ItemTool; import cn.nukkit.math.BlockFace; import cn.nukkit.utils.BlockColor; @@ -28,18 +27,18 @@ public String getName() { } @Override - public double getHardness() { - return 0.7; + public float getHardness() { + return 0.7f; } @Override - public double getResistance() { - return 3.5; + public float getResistance() { + return 3.5f; } @Override public int getToolType() { - return ItemTool.TYPE_SHOVEL; + return BlockToolType.SHOVEL; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockMelon.java b/src/main/java/cn/nukkit/block/BlockMelon.java index 776069281e4..19fdd610aef 100644 --- a/src/main/java/cn/nukkit/block/BlockMelon.java +++ b/src/main/java/cn/nukkit/block/BlockMelon.java @@ -1,7 +1,7 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; -import cn.nukkit.item.ItemTool; import cn.nukkit.item.enchantment.Enchantment; import cn.nukkit.utils.BlockColor; @@ -27,17 +27,17 @@ public String getName() { return "Melon Block"; } - public double getHardness() { + public float getHardness() { return 1; } @Override - public double getResistance() { + public float getResistance() { return 5; } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { Random random = ThreadLocalRandom.current(); int count = 3 + random.nextInt(5); @@ -53,7 +53,7 @@ public Item[] getDrops(Item item) { @Override public int getToolType() { - return ItemTool.TYPE_AXE; + return BlockToolType.AXE; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockMobSpawner.java b/src/main/java/cn/nukkit/block/BlockMobSpawner.java index 057bd189f2c..b645d02b03a 100644 --- a/src/main/java/cn/nukkit/block/BlockMobSpawner.java +++ b/src/main/java/cn/nukkit/block/BlockMobSpawner.java @@ -7,7 +7,6 @@ import cn.nukkit.blockentity.BlockEntityType; import cn.nukkit.item.Item; import cn.nukkit.item.ItemID; -import cn.nukkit.item.ItemTool; import cn.nukkit.math.BlockFace; import cn.nukkit.nbt.tag.CompoundTag; @@ -39,21 +38,21 @@ public int getBlockEntityType() { @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override - public double getHardness() { + public float getHardness() { return 5; } @Override - public double getResistance() { + public float getResistance() { return 25; } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { return new Item[0]; } diff --git a/src/main/java/cn/nukkit/block/BlockMonsterEgg.java b/src/main/java/cn/nukkit/block/BlockMonsterEgg.java index 5945f911051..60a0818202e 100644 --- a/src/main/java/cn/nukkit/block/BlockMonsterEgg.java +++ b/src/main/java/cn/nukkit/block/BlockMonsterEgg.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.item.enchantment.Enchantment; @@ -38,13 +39,13 @@ public int getId() { } @Override - public double getHardness() { - return 0.75; + public float getHardness() { + return 0.75f; } @Override - public double getResistance() { - return 3.75; + public float getResistance() { + return 3.75f; } @Override @@ -53,7 +54,7 @@ public String getName() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN && item.hasEnchantment(Enchantment.SILK_TOUCH)) { switch (getDamage()) { case STONE: @@ -75,12 +76,7 @@ public Item[] getDrops(Item item) { @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; - } - - @Override - public boolean canHarvestWithHand() { - return false; + return BlockToolType.PICKAXE; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockMoss.java b/src/main/java/cn/nukkit/block/BlockMoss.java index ff61684738b..695525b1660 100644 --- a/src/main/java/cn/nukkit/block/BlockMoss.java +++ b/src/main/java/cn/nukkit/block/BlockMoss.java @@ -2,7 +2,6 @@ import cn.nukkit.Player; import cn.nukkit.item.Item; -import cn.nukkit.item.ItemTool; import cn.nukkit.level.particle.BoneMealParticle; import cn.nukkit.math.BlockFace; import cn.nukkit.utils.BlockColor; @@ -22,18 +21,18 @@ public String getName() { } @Override - public double getHardness() { - return 0.1; + public float getHardness() { + return 0.1f; } @Override - public double getResistance() { - return 0.5; + public float getResistance() { + return 0.5f; } @Override public int getToolType() { - return ItemTool.TYPE_SHOVEL; + return BlockToolType.HOE; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockMossStone.java b/src/main/java/cn/nukkit/block/BlockMossStone.java index 76610337b3f..663fe4b6b6f 100644 --- a/src/main/java/cn/nukkit/block/BlockMossStone.java +++ b/src/main/java/cn/nukkit/block/BlockMossStone.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; @@ -23,22 +24,22 @@ public int getId() { } @Override - public double getHardness() { + public float getHardness() { return 2; } @Override - public double getResistance() { + public float getResistance() { return 30; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{ toItem(true) diff --git a/src/main/java/cn/nukkit/block/BlockMoving.java b/src/main/java/cn/nukkit/block/BlockMoving.java index 820a11c1159..495a01c0dca 100644 --- a/src/main/java/cn/nukkit/block/BlockMoving.java +++ b/src/main/java/cn/nukkit/block/BlockMoving.java @@ -55,12 +55,12 @@ public boolean canProvideSupport(BlockFace face, SupportType type) { } @Override - public double getHardness() { + public float getHardness() { return -1; } @Override - public double getResistance() { + public float getResistance() { return 18000000; } } diff --git a/src/main/java/cn/nukkit/block/BlockMud.java b/src/main/java/cn/nukkit/block/BlockMud.java index 318679a4d52..57a47632180 100644 --- a/src/main/java/cn/nukkit/block/BlockMud.java +++ b/src/main/java/cn/nukkit/block/BlockMud.java @@ -1,6 +1,5 @@ package cn.nukkit.block; -import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; public class BlockMud extends BlockSolid { @@ -18,18 +17,18 @@ public String getName() { } @Override - public double getHardness() { - return 0.5; + public float getHardness() { + return 0.5f; } @Override - public double getResistance() { - return 2.5; + public float getResistance() { + return 2.5f; } @Override public int getToolType() { - return ItemTool.TYPE_SHOVEL; + return BlockToolType.SHOVEL; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockMudPacked.java b/src/main/java/cn/nukkit/block/BlockMudPacked.java index ecbf8c6ecf6..1ce8674aa33 100644 --- a/src/main/java/cn/nukkit/block/BlockMudPacked.java +++ b/src/main/java/cn/nukkit/block/BlockMudPacked.java @@ -1,6 +1,5 @@ package cn.nukkit.block; -import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; public class BlockMudPacked extends BlockSolid { @@ -18,18 +17,18 @@ public String getName() { } @Override - public double getHardness() { + public float getHardness() { return 1; } @Override - public double getResistance() { + public float getResistance() { return 15; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockMycelium.java b/src/main/java/cn/nukkit/block/BlockMycelium.java index 00c2c1b879c..86dba18215e 100644 --- a/src/main/java/cn/nukkit/block/BlockMycelium.java +++ b/src/main/java/cn/nukkit/block/BlockMycelium.java @@ -1,9 +1,9 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.Server; import cn.nukkit.event.block.BlockSpreadEvent; import cn.nukkit.item.Item; -import cn.nukkit.item.ItemTool; import cn.nukkit.level.Level; import cn.nukkit.utils.BlockColor; @@ -29,21 +29,21 @@ public int getId() { @Override public int getToolType() { - return ItemTool.TYPE_SHOVEL; + return BlockToolType.SHOVEL; } @Override - public double getHardness() { - return 0.6; + public float getHardness() { + return 0.6f; } @Override - public double getResistance() { + public float getResistance() { return 3; } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { return new Item[]{ Item.get(DIRT) }; diff --git a/src/main/java/cn/nukkit/block/BlockNames.java b/src/main/java/cn/nukkit/block/BlockNames.java index 5f9fc5cc54a..7caa37db928 100644 --- a/src/main/java/cn/nukkit/block/BlockNames.java +++ b/src/main/java/cn/nukkit/block/BlockNames.java @@ -8,6 +8,7 @@ public interface BlockNames { String COBBLESTONE = "cobblestone"; String OAK_PLANKS = "oak_planks"; //TODO: 1.20.50 flattening String PLANKS = "planks"; + String OAK_SAPLING = "oak_sapling"; //TODO: 1.20.80 flattening String SAPLING = "sapling"; String BEDROCK = "bedrock"; String FLOWING_WATER = "flowing_water"; @@ -44,6 +45,7 @@ public interface BlockNames { String WOOL = "wool"; String ELEMENT_0 = "element_0"; String YELLOW_FLOWER = "yellow_flower"; + String POPPY = "poppy"; //TODO: 1.20.80 flattening String RED_FLOWER = "red_flower"; String BROWN_MUSHROOM = "brown_mushroom"; String RED_MUSHROOM = "red_mushroom"; @@ -418,7 +420,9 @@ public interface BlockNames { String TUBE_CORAL = "tube_coral"; //TODO: 1.20.0 flattening String CORAL = "coral"; String CORAL_BLOCK = "coral_block"; + String TUBE_CORAL_FAN = "tube_coral_fan"; //TODO: 1.20.80 flattening String CORAL_FAN = "coral_fan"; + String DEAD_TUBE_CORAL_FAN = "dead_tube_coral_fan"; //TODO: 1.20.80 flattening String CORAL_FAN_DEAD = "coral_fan_dead"; String CORAL_FAN_HANG = "coral_fan_hang"; String CORAL_FAN_HANG2 = "coral_fan_hang2"; @@ -1098,4 +1102,27 @@ public interface BlockNames { String STRIPPED_JUNGLE_WOOD = "stripped_jungle_wood"; String STRIPPED_ACACIA_WOOD = "stripped_acacia_wood"; String STRIPPED_DARK_OAK_WOOD = "stripped_dark_oak_wood"; + String SPRUCE_SAPLING = "spruce_sapling"; + String BIRCH_SAPLING = "birch_sapling"; + String JUNGLE_SAPLING = "jungle_sapling"; + String ACACIA_SAPLING = "acacia_sapling"; + String DARK_OAK_SAPLING = "dark_oak_sapling"; + String BLUE_ORCHID = "blue_orchid"; + String ALLIUM = "allium"; + String AZURE_BLUET = "azure_bluet"; + String RED_TULIP = "red_tulip"; + String ORANGE_TULIP = "orange_tulip"; + String WHITE_TULIP = "white_tulip"; + String PINK_TULIP = "pink_tulip"; + String OXEYE_DAISY = "oxeye_daisy"; + String CORNFLOWER = "cornflower"; + String LILY_OF_THE_VALLEY = "lily_of_the_valley"; + String BRAIN_CORAL_FAN = "brain_coral_fan"; + String BUBBLE_CORAL_FAN = "bubble_coral_fan"; + String FIRE_CORAL_FAN = "fire_coral_fan"; + String HORN_CORAL_FAN = "horn_coral_fan"; + String DEAD_BRAIN_CORAL_FAN = "dead_brain_coral_fan"; + String DEAD_BUBBLE_CORAL_FAN = "dead_bubble_coral_fan"; + String DEAD_FIRE_CORAL_FAN = "dead_fire_coral_fan"; + String DEAD_HORN_CORAL_FAN = "dead_horn_coral_fan"; } diff --git a/src/main/java/cn/nukkit/block/BlockNetherPortal.java b/src/main/java/cn/nukkit/block/BlockNetherPortal.java index 7ac6e1fe486..dd66b70b811 100644 --- a/src/main/java/cn/nukkit/block/BlockNetherPortal.java +++ b/src/main/java/cn/nukkit/block/BlockNetherPortal.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.Items; import cn.nukkit.level.Level; @@ -47,12 +48,12 @@ public boolean isBreakable(Item item) { } @Override - public double getHardness() { + public float getHardness() { return -1; } @Override - public double getResistance() { + public float getResistance() { return 0; } @@ -67,13 +68,13 @@ public Item toItem(boolean addUserData) { } @Override - public boolean onBreak(Item item) { - boolean result = super.onBreak(item); + public boolean onBreak(Item item, Player player) { + boolean result = super.onBreak(item, player); for (BlockFace face : BlockFace.getValues()) { Block b = this.getSide(face); if (b != null) { if (b instanceof BlockNetherPortal) { - result &= b.onBreak(item); + result &= b.onBreak(item, player); } } } diff --git a/src/main/java/cn/nukkit/block/BlockNetherReactor.java b/src/main/java/cn/nukkit/block/BlockNetherReactor.java index a7f4ac70907..c300b21d4b2 100644 --- a/src/main/java/cn/nukkit/block/BlockNetherReactor.java +++ b/src/main/java/cn/nukkit/block/BlockNetherReactor.java @@ -34,22 +34,22 @@ public int getBlockEntityType() { } @Override - public double getResistance() { + public float getResistance() { return 15; } @Override - public double getHardness() { + public float getHardness() { return 3; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{ Item.get(Item.DIAMOND, 0, 3), diff --git a/src/main/java/cn/nukkit/block/BlockNetherSprouts.java b/src/main/java/cn/nukkit/block/BlockNetherSprouts.java index 7b481ee0ee0..61b650afd99 100644 --- a/src/main/java/cn/nukkit/block/BlockNetherSprouts.java +++ b/src/main/java/cn/nukkit/block/BlockNetherSprouts.java @@ -24,7 +24,7 @@ public String getName() { @Override public int getToolType() { - return ItemTool.TYPE_SHEARS; + return BlockToolType.SHEARS; } @Override @@ -60,7 +60,7 @@ public int onUpdate(int type) { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (!item.isShears()) { return new Item[0]; } diff --git a/src/main/java/cn/nukkit/block/BlockNetherVines.java b/src/main/java/cn/nukkit/block/BlockNetherVines.java index 9edb808f248..146368023c6 100644 --- a/src/main/java/cn/nukkit/block/BlockNetherVines.java +++ b/src/main/java/cn/nukkit/block/BlockNetherVines.java @@ -113,7 +113,7 @@ public int onUpdate(int type) { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.getId() != Item.ENCHANTED_BOOK && item.hasEnchantment(Enchantment.SILK_TOUCH) || ThreadLocalRandom.current().nextInt(3) == 0) { return new Item[]{ toItem(true), diff --git a/src/main/java/cn/nukkit/block/BlockNetherWart.java b/src/main/java/cn/nukkit/block/BlockNetherWart.java index 7e78682ab08..e57a3ac09f4 100644 --- a/src/main/java/cn/nukkit/block/BlockNetherWart.java +++ b/src/main/java/cn/nukkit/block/BlockNetherWart.java @@ -81,7 +81,7 @@ public int getId() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (this.getDamage() == 0x03) { return new Item[]{ Item.get(Item.NETHER_WART, 0, ThreadLocalRandom.current().nextInt(2, 5)), diff --git a/src/main/java/cn/nukkit/block/BlockNetherWartBlock.java b/src/main/java/cn/nukkit/block/BlockNetherWartBlock.java index 7ca873bbffa..d575dbfd96a 100644 --- a/src/main/java/cn/nukkit/block/BlockNetherWartBlock.java +++ b/src/main/java/cn/nukkit/block/BlockNetherWartBlock.java @@ -1,7 +1,7 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; -import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; public class BlockNetherWartBlock extends BlockSolid { @@ -20,22 +20,22 @@ public int getId() { } @Override - public double getResistance() { + public float getResistance() { return 5; } @Override - public double getHardness() { + public float getHardness() { return 1; } @Override public int getToolType() { - return ItemTool.TYPE_HOE; + return BlockToolType.HOE; } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { return new Item[]{ toItem(true) }; diff --git a/src/main/java/cn/nukkit/block/BlockNetherite.java b/src/main/java/cn/nukkit/block/BlockNetherite.java index 7a787c0aef6..a4fd9a5609d 100644 --- a/src/main/java/cn/nukkit/block/BlockNetherite.java +++ b/src/main/java/cn/nukkit/block/BlockNetherite.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; @@ -19,18 +20,18 @@ public String getName() { } @Override - public double getHardness() { + public float getHardness() { return 50; } @Override - public double getResistance() { + public float getResistance() { return 6000; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override @@ -39,7 +40,7 @@ public boolean canHarvestWithHand() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_DIAMOND) { return new Item[]{ toItem(true), diff --git a/src/main/java/cn/nukkit/block/BlockNetherrack.java b/src/main/java/cn/nukkit/block/BlockNetherrack.java index d1613bf763e..72edea1bafe 100644 --- a/src/main/java/cn/nukkit/block/BlockNetherrack.java +++ b/src/main/java/cn/nukkit/block/BlockNetherrack.java @@ -24,18 +24,18 @@ public int getId() { } @Override - public double getResistance() { + public float getResistance() { return 2; } @Override - public double getHardness() { - return 0.4; + public float getHardness() { + return 0.4f; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override @@ -44,7 +44,7 @@ public String getName() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{ toItem(true) diff --git a/src/main/java/cn/nukkit/block/BlockNoteblock.java b/src/main/java/cn/nukkit/block/BlockNoteblock.java index 491c44454c9..dea8065a690 100644 --- a/src/main/java/cn/nukkit/block/BlockNoteblock.java +++ b/src/main/java/cn/nukkit/block/BlockNoteblock.java @@ -6,7 +6,6 @@ import cn.nukkit.blockentity.BlockEntityType; import cn.nukkit.blockentity.BlockEntityMusic; import cn.nukkit.item.Item; -import cn.nukkit.item.ItemTool; import cn.nukkit.level.Level; import cn.nukkit.level.sound.SoundEnum; import cn.nukkit.math.BlockFace; @@ -43,17 +42,17 @@ public int getBlockEntityType() { @Override public int getToolType() { - return ItemTool.TYPE_AXE; + return BlockToolType.AXE; } @Override - public double getHardness() { - return 0.8D; + public float getHardness() { + return 0.8f; } @Override - public double getResistance() { - return 4D; + public float getResistance() { + return 4; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockNylium.java b/src/main/java/cn/nukkit/block/BlockNylium.java index 65f797c1c13..e69fca87984 100644 --- a/src/main/java/cn/nukkit/block/BlockNylium.java +++ b/src/main/java/cn/nukkit/block/BlockNylium.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.level.Level; @@ -15,7 +16,7 @@ public boolean canSilkTouch() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{ Item.get(NETHERRACK), diff --git a/src/main/java/cn/nukkit/block/BlockObserver.java b/src/main/java/cn/nukkit/block/BlockObserver.java index 6b25a402a4c..bd8abdbc9c8 100644 --- a/src/main/java/cn/nukkit/block/BlockObserver.java +++ b/src/main/java/cn/nukkit/block/BlockObserver.java @@ -2,7 +2,6 @@ import cn.nukkit.Player; import cn.nukkit.item.Item; -import cn.nukkit.item.ItemTool; import cn.nukkit.math.BlockFace; import cn.nukkit.utils.Faceable; @@ -58,16 +57,16 @@ public boolean canHarvestWithHand() { @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override - public double getHardness() { + public float getHardness() { return 3; } @Override - public double getResistance() { + public float getResistance() { return 15; } diff --git a/src/main/java/cn/nukkit/block/BlockObsidian.java b/src/main/java/cn/nukkit/block/BlockObsidian.java index 3978acc192a..a1f2c913dd4 100644 --- a/src/main/java/cn/nukkit/block/BlockObsidian.java +++ b/src/main/java/cn/nukkit/block/BlockObsidian.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; @@ -25,21 +26,21 @@ public int getId() { @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override - public double getHardness() { + public float getHardness() { return 35; //50 in PC } @Override - public double getResistance() { + public float getResistance() { return 6000; } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_DIAMOND) { return new Item[]{ toItem(true) @@ -50,7 +51,7 @@ public Item[] getDrops(Item item) { } @Override - public boolean onBreak(Item item) { + public boolean onBreak(Item item, Player player) { //destroy the nether portal Block[] nearby = new Block[]{ this.up(), this.down(), @@ -59,10 +60,10 @@ public boolean onBreak(Item item) { }; for (Block aNearby : nearby) { if (aNearby != null) if (aNearby.getId() == PORTAL) { - aNearby.onBreak(item); + aNearby.onBreak(item, player); } } - return super.onBreak(item); + return super.onBreak(item, player); } @Override diff --git a/src/main/java/cn/nukkit/block/BlockObsidianCrying.java b/src/main/java/cn/nukkit/block/BlockObsidianCrying.java index a576ed45b92..f392038b57f 100644 --- a/src/main/java/cn/nukkit/block/BlockObsidianCrying.java +++ b/src/main/java/cn/nukkit/block/BlockObsidianCrying.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; @@ -19,19 +20,19 @@ public String getName() { } @Override - public double getHardness() { + public float getHardness() { // 50 in JE return 35; } @Override - public double getResistance() { + public float getResistance() { return 6000; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override @@ -40,7 +41,7 @@ public boolean canHarvestWithHand() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_DIAMOND) { return new Item[]{ toItem(true) diff --git a/src/main/java/cn/nukkit/block/BlockObsidianGlowing.java b/src/main/java/cn/nukkit/block/BlockObsidianGlowing.java index 1db3a8094dd..88345e7cc69 100644 --- a/src/main/java/cn/nukkit/block/BlockObsidianGlowing.java +++ b/src/main/java/cn/nukkit/block/BlockObsidianGlowing.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; @@ -19,7 +20,7 @@ public int getId() { @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override @@ -28,12 +29,12 @@ public String getName() { } @Override - public double getHardness() { + public float getHardness() { return 10; } @Override - public double getResistance() { + public float getResistance() { return 6000; } @@ -48,7 +49,7 @@ public Item toItem(boolean addUserData) { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() > ItemTool.DIAMOND_PICKAXE) { return new Item[]{ toItem(true) diff --git a/src/main/java/cn/nukkit/block/BlockOreCoal.java b/src/main/java/cn/nukkit/block/BlockOreCoal.java index cb8396e38e2..6dfa421eaa0 100644 --- a/src/main/java/cn/nukkit/block/BlockOreCoal.java +++ b/src/main/java/cn/nukkit/block/BlockOreCoal.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.item.enchantment.Enchantment; @@ -22,18 +23,18 @@ public int getId() { } @Override - public double getHardness() { + public float getHardness() { return 3; } @Override - public double getResistance() { + public float getResistance() { return 15; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override @@ -42,7 +43,7 @@ public String getName() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { int count = 1; Enchantment fortune = item.getEnchantment(Enchantment.FORTUNE); diff --git a/src/main/java/cn/nukkit/block/BlockOreCoalDeepslate.java b/src/main/java/cn/nukkit/block/BlockOreCoalDeepslate.java index 9b88b3cb9b8..ac71c46a267 100644 --- a/src/main/java/cn/nukkit/block/BlockOreCoalDeepslate.java +++ b/src/main/java/cn/nukkit/block/BlockOreCoalDeepslate.java @@ -17,8 +17,8 @@ public String getName() { } @Override - public double getHardness() { - return 4.5; + public float getHardness() { + return 4.5f; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockOreCopper.java b/src/main/java/cn/nukkit/block/BlockOreCopper.java index a0f66f302fc..31945652691 100644 --- a/src/main/java/cn/nukkit/block/BlockOreCopper.java +++ b/src/main/java/cn/nukkit/block/BlockOreCopper.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; @@ -21,18 +22,18 @@ public String getName() { } @Override - public double getHardness() { + public float getHardness() { return 3; } @Override - public double getResistance() { + public float getResistance() { return 15; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override @@ -46,7 +47,7 @@ public boolean canSilkTouch() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_STONE) { return new Item[]{ Item.get(Item.RAW_COPPER, 0, ThreadLocalRandom.current().nextInt(2, 6)), diff --git a/src/main/java/cn/nukkit/block/BlockOreCopperDeepslate.java b/src/main/java/cn/nukkit/block/BlockOreCopperDeepslate.java index 8f8ecc5511c..6691646ec6f 100644 --- a/src/main/java/cn/nukkit/block/BlockOreCopperDeepslate.java +++ b/src/main/java/cn/nukkit/block/BlockOreCopperDeepslate.java @@ -17,8 +17,8 @@ public String getName() { } @Override - public double getHardness() { - return 4.5; + public float getHardness() { + return 4.5f; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockOreDiamond.java b/src/main/java/cn/nukkit/block/BlockOreDiamond.java index 724ef6e585d..c1834df8570 100644 --- a/src/main/java/cn/nukkit/block/BlockOreDiamond.java +++ b/src/main/java/cn/nukkit/block/BlockOreDiamond.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.item.enchantment.Enchantment; @@ -22,18 +23,18 @@ public int getId() { } @Override - public double getHardness() { + public float getHardness() { return 3; } @Override - public double getResistance() { + public float getResistance() { return 15; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override @@ -42,7 +43,7 @@ public String getName() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_IRON) { int count = 1; Enchantment fortune = item.getEnchantment(Enchantment.FORTUNE); diff --git a/src/main/java/cn/nukkit/block/BlockOreDiamondDeepslate.java b/src/main/java/cn/nukkit/block/BlockOreDiamondDeepslate.java index 94db22571cb..ef8f2b49c67 100644 --- a/src/main/java/cn/nukkit/block/BlockOreDiamondDeepslate.java +++ b/src/main/java/cn/nukkit/block/BlockOreDiamondDeepslate.java @@ -17,8 +17,8 @@ public String getName() { } @Override - public double getHardness() { - return 4.5; + public float getHardness() { + return 4.5f; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockOreEmerald.java b/src/main/java/cn/nukkit/block/BlockOreEmerald.java index 6aef1fe71fb..11c7b867329 100644 --- a/src/main/java/cn/nukkit/block/BlockOreEmerald.java +++ b/src/main/java/cn/nukkit/block/BlockOreEmerald.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.item.enchantment.Enchantment; @@ -27,21 +28,21 @@ public int getId() { @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override - public double getHardness() { + public float getHardness() { return 3; } @Override - public double getResistance() { + public float getResistance() { return 15; } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_IRON) { int count = 1; Enchantment fortune = item.getEnchantment(Enchantment.FORTUNE); diff --git a/src/main/java/cn/nukkit/block/BlockOreEmeraldDeepslate.java b/src/main/java/cn/nukkit/block/BlockOreEmeraldDeepslate.java index 0687e7b84f6..d8fc1a5d50c 100644 --- a/src/main/java/cn/nukkit/block/BlockOreEmeraldDeepslate.java +++ b/src/main/java/cn/nukkit/block/BlockOreEmeraldDeepslate.java @@ -17,8 +17,8 @@ public String getName() { } @Override - public double getHardness() { - return 4.5; + public float getHardness() { + return 4.5f; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockOreGold.java b/src/main/java/cn/nukkit/block/BlockOreGold.java index 4d4001f0781..fdbe59305fa 100644 --- a/src/main/java/cn/nukkit/block/BlockOreGold.java +++ b/src/main/java/cn/nukkit/block/BlockOreGold.java @@ -1,6 +1,7 @@ package cn.nukkit.block; import cn.nukkit.GameVersion; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; @@ -19,18 +20,18 @@ public int getId() { } @Override - public double getHardness() { + public float getHardness() { return 3; } @Override - public double getResistance() { + public float getResistance() { return 15; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override @@ -39,7 +40,7 @@ public String getName() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_IRON) { if (GameVersion.V1_17_0.isAvailable()) { return new Item[]{ diff --git a/src/main/java/cn/nukkit/block/BlockOreGoldDeepslate.java b/src/main/java/cn/nukkit/block/BlockOreGoldDeepslate.java index 9d127278b97..ef5d66fed06 100644 --- a/src/main/java/cn/nukkit/block/BlockOreGoldDeepslate.java +++ b/src/main/java/cn/nukkit/block/BlockOreGoldDeepslate.java @@ -17,8 +17,8 @@ public String getName() { } @Override - public double getHardness() { - return 4.5; + public float getHardness() { + return 4.5f; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockOreGoldNether.java b/src/main/java/cn/nukkit/block/BlockOreGoldNether.java index 1df575b89cb..7ba4e5f9e6d 100644 --- a/src/main/java/cn/nukkit/block/BlockOreGoldNether.java +++ b/src/main/java/cn/nukkit/block/BlockOreGoldNether.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; @@ -18,18 +19,18 @@ public String getName() { } @Override - public double getHardness() { + public float getHardness() { return 3; } @Override - public double getResistance() { + public float getResistance() { return 15; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override @@ -43,7 +44,7 @@ public boolean canSilkTouch() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_IRON) { return new Item[]{ Item.get(Item.GOLD_NUGGET, 2, 7), diff --git a/src/main/java/cn/nukkit/block/BlockOreIron.java b/src/main/java/cn/nukkit/block/BlockOreIron.java index ce04764c810..df783a6206f 100644 --- a/src/main/java/cn/nukkit/block/BlockOreIron.java +++ b/src/main/java/cn/nukkit/block/BlockOreIron.java @@ -1,6 +1,7 @@ package cn.nukkit.block; import cn.nukkit.GameVersion; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; @@ -19,18 +20,18 @@ public int getId() { } @Override - public double getHardness() { + public float getHardness() { return 3; } @Override - public double getResistance() { + public float getResistance() { return 15; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override @@ -39,7 +40,7 @@ public String getName() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_STONE) { if (GameVersion.V1_17_0.isAvailable()) { return new Item[]{ diff --git a/src/main/java/cn/nukkit/block/BlockOreIronDeepslate.java b/src/main/java/cn/nukkit/block/BlockOreIronDeepslate.java index 5fb5b96f0eb..19476b8ace9 100644 --- a/src/main/java/cn/nukkit/block/BlockOreIronDeepslate.java +++ b/src/main/java/cn/nukkit/block/BlockOreIronDeepslate.java @@ -17,8 +17,8 @@ public String getName() { } @Override - public double getHardness() { - return 4.5; + public float getHardness() { + return 4.5f; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockOreLapis.java b/src/main/java/cn/nukkit/block/BlockOreLapis.java index f3ab5377a8b..6139f5ac650 100644 --- a/src/main/java/cn/nukkit/block/BlockOreLapis.java +++ b/src/main/java/cn/nukkit/block/BlockOreLapis.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemDye; import cn.nukkit.item.ItemTool; @@ -22,18 +23,18 @@ public int getId() { } @Override - public double getHardness() { + public float getHardness() { return 3; } @Override - public double getResistance() { + public float getResistance() { return 15; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override @@ -42,7 +43,7 @@ public String getName() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_STONE) { ThreadLocalRandom random = ThreadLocalRandom.current(); int count = random.nextInt(4, 10); diff --git a/src/main/java/cn/nukkit/block/BlockOreLapisDeepslate.java b/src/main/java/cn/nukkit/block/BlockOreLapisDeepslate.java index ddb1525806f..9cebc2b3ed8 100644 --- a/src/main/java/cn/nukkit/block/BlockOreLapisDeepslate.java +++ b/src/main/java/cn/nukkit/block/BlockOreLapisDeepslate.java @@ -17,8 +17,8 @@ public String getName() { } @Override - public double getHardness() { - return 4.5; + public float getHardness() { + return 4.5f; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockOreQuartz.java b/src/main/java/cn/nukkit/block/BlockOreQuartz.java index d4cde9b63d1..6a5c794654c 100644 --- a/src/main/java/cn/nukkit/block/BlockOreQuartz.java +++ b/src/main/java/cn/nukkit/block/BlockOreQuartz.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.item.enchantment.Enchantment; @@ -26,22 +27,22 @@ public int getId() { } @Override - public double getHardness() { + public float getHardness() { return 3; } @Override - public double getResistance() { + public float getResistance() { return 15; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { int count = 1; Enchantment fortune = item.getEnchantment(Enchantment.FORTUNE); diff --git a/src/main/java/cn/nukkit/block/BlockOreRedstone.java b/src/main/java/cn/nukkit/block/BlockOreRedstone.java index 35fa8e51ac7..fa99d4b0a7d 100644 --- a/src/main/java/cn/nukkit/block/BlockOreRedstone.java +++ b/src/main/java/cn/nukkit/block/BlockOreRedstone.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.item.enchantment.Enchantment; @@ -23,18 +24,18 @@ public int getId() { } @Override - public double getHardness() { + public float getHardness() { return 3; } @Override - public double getResistance() { + public float getResistance() { return 15; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override @@ -43,7 +44,7 @@ public String getName() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_IRON) { Random random = ThreadLocalRandom.current(); int count = random.nextInt(2) + 4; diff --git a/src/main/java/cn/nukkit/block/BlockOreRedstoneDeepslate.java b/src/main/java/cn/nukkit/block/BlockOreRedstoneDeepslate.java index 6fc05aae7bf..f4173d54506 100644 --- a/src/main/java/cn/nukkit/block/BlockOreRedstoneDeepslate.java +++ b/src/main/java/cn/nukkit/block/BlockOreRedstoneDeepslate.java @@ -17,8 +17,8 @@ public String getName() { } @Override - public double getHardness() { - return 4.5; + public float getHardness() { + return 4.5f; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockOreRedstoneGlowingDeepslate.java b/src/main/java/cn/nukkit/block/BlockOreRedstoneGlowingDeepslate.java index 8c066436b6e..1433f3d3833 100644 --- a/src/main/java/cn/nukkit/block/BlockOreRedstoneGlowingDeepslate.java +++ b/src/main/java/cn/nukkit/block/BlockOreRedstoneGlowingDeepslate.java @@ -17,8 +17,8 @@ public String getName() { } @Override - public double getHardness() { - return 4.5; + public float getHardness() { + return 4.5f; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockPistonBase.java b/src/main/java/cn/nukkit/block/BlockPistonBase.java index c7fcf0de968..d0c0d623327 100644 --- a/src/main/java/cn/nukkit/block/BlockPistonBase.java +++ b/src/main/java/cn/nukkit/block/BlockPistonBase.java @@ -48,16 +48,16 @@ public int getBlockEntityType() { } @Override - public double getResistance() { - return 7.5; + public float getResistance() { + return 7.5f; } @Override - public double getHardness() { + public float getHardness() { if (V1_20_30.isAvailable()) { - return 1.5; + return 1.5f; } - return 0.5; + return 0.5f; } @Override @@ -91,13 +91,13 @@ public boolean place(Item item, Block block, Block target, BlockFace face, doubl } @Override - public boolean onBreak(Item item) { + public boolean onBreak(Item item, Player player) { this.level.setBlock(this, Block.get(BlockID.AIR), true, true); Block block = this.getSide(getBlockFace()); if (block instanceof BlockPistonHead && ((BlockPistonHead) block).getBlockFace() == this.getBlockFace()) { - block.onBreak(item); + block.onBreak(item, player); } return true; } @@ -344,17 +344,21 @@ public class BlocksCalculator { @Override public int indexOf(Object o) { if (o == null) { - for (int i = 0; i < size(); i++) - if (get(i) == null) + for (int i = 0; i < size(); i++) { + if (get(i) == null) { return i; + } + } } else { for (int i = 0; i < size(); i++) { Block block = get(i); if (o instanceof Block) { - if (((Block) o).superEquals(block)) + if (((Block) o).equalsVec(block)) { return i; - } else if (o.equals(block)) + } + } else if (o.equals(block)) { return i; + } } } return -1; @@ -436,7 +440,7 @@ private boolean addBlockLine(Block origin, BlockFace from) { return true; } - if (origin.superEquals(this.pistonPos)) { + if (origin.equalsVec(this.pistonPos)) { return true; } @@ -456,7 +460,7 @@ private boolean addBlockLine(Block origin, BlockFace from) { while (block.getId() == SLIME) { block = origin.getSide(this.moveDirection.getOpposite(), count); - if (block.getId() == AIR || !canPush(block, this.moveDirection, false, extending) || block.superEquals(this.pistonPos)) { + if (block.getId() == AIR || !canPush(block, this.moveDirection, false, extending) || block.equalsVec(this.pistonPos)) { break; } @@ -498,11 +502,11 @@ private boolean addBlockLine(Block origin, BlockFace from) { return true; } - if (nextBlock.getId() == AIR || nextBlock.superEquals(armPos)) { + if (nextBlock.getId() == AIR || nextBlock.equalsVec(armPos)) { return true; } - if (!canPush(nextBlock, this.moveDirection, true, extending) || nextBlock.superEquals(this.pistonPos)) { + if (!canPush(nextBlock, this.moveDirection, true, extending) || nextBlock.equalsVec(this.pistonPos)) { return false; } @@ -574,6 +578,6 @@ public boolean isSolid() { @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } } diff --git a/src/main/java/cn/nukkit/block/BlockPistonHead.java b/src/main/java/cn/nukkit/block/BlockPistonHead.java index 813688f12d9..85a6f38a43e 100644 --- a/src/main/java/cn/nukkit/block/BlockPistonHead.java +++ b/src/main/java/cn/nukkit/block/BlockPistonHead.java @@ -1,7 +1,7 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; -import cn.nukkit.item.ItemTool; import cn.nukkit.item.Items; import cn.nukkit.math.BlockFace; import cn.nukkit.utils.Faceable; @@ -32,30 +32,30 @@ public String getName() { } @Override - public double getResistance() { - return 7.5; + public float getResistance() { + return 7.5f; } @Override - public double getHardness() { + public float getHardness() { if (V1_20_30.isAvailable()) { - return 1.5; + return 1.5f; } - return 0.5; + return 0.5f; } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { return new Item[0]; } @Override - public boolean onBreak(Item item) { + public boolean onBreak(Item item, Player player) { this.level.setBlock(this, Block.get(BlockID.AIR), true, true); Block piston = getSide(getBlockFace().getOpposite()); if (piston instanceof BlockPistonBase && ((BlockPistonBase) piston).getBlockFace() == this.getBlockFace()) { - piston.onBreak(item); + piston.onBreak(item, player); } return true; } @@ -99,6 +99,6 @@ public boolean canProvideSupport(BlockFace face, SupportType type) { @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } } diff --git a/src/main/java/cn/nukkit/block/BlockPlanks.java b/src/main/java/cn/nukkit/block/BlockPlanks.java index fa84b1bb3b5..f5a2653ab48 100644 --- a/src/main/java/cn/nukkit/block/BlockPlanks.java +++ b/src/main/java/cn/nukkit/block/BlockPlanks.java @@ -1,6 +1,5 @@ package cn.nukkit.block; -import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; /** @@ -40,12 +39,12 @@ public int getId() { } @Override - public double getHardness() { + public float getHardness() { return 2; } @Override - public double getResistance() { + public float getResistance() { return 15; } @@ -66,7 +65,7 @@ public String getName() { @Override public int getToolType() { - return ItemTool.TYPE_AXE; + return BlockToolType.AXE; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockPlanksAbstract.java b/src/main/java/cn/nukkit/block/BlockPlanksAbstract.java index 792fc639bcb..268cd1d9784 100644 --- a/src/main/java/cn/nukkit/block/BlockPlanksAbstract.java +++ b/src/main/java/cn/nukkit/block/BlockPlanksAbstract.java @@ -1,15 +1,13 @@ package cn.nukkit.block; -import cn.nukkit.item.ItemTool; - public abstract class BlockPlanksAbstract extends BlockSolid { @Override - public double getHardness() { + public float getHardness() { return 2; } @Override - public double getResistance() { + public float getResistance() { return 15; } @@ -25,6 +23,6 @@ public int getBurnAbility() { @Override public int getToolType() { - return ItemTool.TYPE_AXE; + return BlockToolType.AXE; } } diff --git a/src/main/java/cn/nukkit/block/BlockPotato.java b/src/main/java/cn/nukkit/block/BlockPotato.java index 7a41f3bf406..035c2d84172 100644 --- a/src/main/java/cn/nukkit/block/BlockPotato.java +++ b/src/main/java/cn/nukkit/block/BlockPotato.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import java.util.concurrent.ThreadLocalRandom; @@ -33,7 +34,7 @@ public Item toItem(boolean addUserData) { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (getDamage() >= 0x07) { return new Item[]{ Item.get(Item.POTATO, 0, ThreadLocalRandom.current().nextInt(3) + 1) diff --git a/src/main/java/cn/nukkit/block/BlockPressurePlateBase.java b/src/main/java/cn/nukkit/block/BlockPressurePlateBase.java index a15c95f2e16..1ac9a2016d2 100644 --- a/src/main/java/cn/nukkit/block/BlockPressurePlateBase.java +++ b/src/main/java/cn/nukkit/block/BlockPressurePlateBase.java @@ -37,12 +37,12 @@ public boolean canPassThrough() { } @Override - public double getHardness() { + public float getHardness() { return 0; } @Override - public double getResistance() { + public float getResistance() { return 0; } @@ -201,7 +201,7 @@ protected void updateState(int oldStrength) { } @Override - public boolean onBreak(Item item) { + public boolean onBreak(Item item, Player player) { this.level.setBlock(this, Block.get(BlockID.AIR), true, true); if (this.getRedstonePower() > 0) { diff --git a/src/main/java/cn/nukkit/block/BlockPressurePlateStone.java b/src/main/java/cn/nukkit/block/BlockPressurePlateStone.java index 0b3fe9cdef4..eff24803ee9 100644 --- a/src/main/java/cn/nukkit/block/BlockPressurePlateStone.java +++ b/src/main/java/cn/nukkit/block/BlockPressurePlateStone.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.entity.Entity; import cn.nukkit.entity.EntityLiving; import cn.nukkit.item.Item; @@ -33,22 +34,22 @@ public int getId() { } @Override - public double getHardness() { - return 0.5D; + public float getHardness() { + return 0.5f; } @Override - public double getResistance() { - return 2.5D; + public float getResistance() { + return 2.5f; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{ toItem(true) diff --git a/src/main/java/cn/nukkit/block/BlockPressurePlateWood.java b/src/main/java/cn/nukkit/block/BlockPressurePlateWood.java index 68c0f51d820..33ec3258ce0 100644 --- a/src/main/java/cn/nukkit/block/BlockPressurePlateWood.java +++ b/src/main/java/cn/nukkit/block/BlockPressurePlateWood.java @@ -1,8 +1,8 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.entity.Entity; import cn.nukkit.item.Item; -import cn.nukkit.item.ItemTool; import cn.nukkit.math.AxisAlignedBB; import cn.nukkit.utils.BlockColor; @@ -33,21 +33,21 @@ public int getId() { @Override public int getToolType() { - return ItemTool.TYPE_AXE; + return BlockToolType.AXE; } @Override - public double getHardness() { - return 0.5D; + public float getHardness() { + return 0.5f; } @Override - public double getResistance() { - return 2.5D; + public float getResistance() { + return 2.5f; } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { return new Item[]{ toItem(true) }; diff --git a/src/main/java/cn/nukkit/block/BlockPrismarine.java b/src/main/java/cn/nukkit/block/BlockPrismarine.java index 26e8e6b2fb5..c6c91dfae44 100644 --- a/src/main/java/cn/nukkit/block/BlockPrismarine.java +++ b/src/main/java/cn/nukkit/block/BlockPrismarine.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; @@ -31,18 +32,18 @@ public int getId() { } @Override - public double getHardness() { - return 1.5; + public float getHardness() { + return 1.5f; } @Override - public double getResistance() { + public float getResistance() { return 30; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override @@ -51,7 +52,7 @@ public String getName() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{ toItem(true) diff --git a/src/main/java/cn/nukkit/block/BlockPumpkin.java b/src/main/java/cn/nukkit/block/BlockPumpkin.java index e2dec7eda5d..85dc742cd63 100644 --- a/src/main/java/cn/nukkit/block/BlockPumpkin.java +++ b/src/main/java/cn/nukkit/block/BlockPumpkin.java @@ -2,7 +2,6 @@ import cn.nukkit.Player; import cn.nukkit.item.Item; -import cn.nukkit.item.ItemTool; import cn.nukkit.level.GameRule; import cn.nukkit.math.BlockFace; import cn.nukkit.network.protocol.LevelSoundEventPacket; @@ -33,18 +32,18 @@ public int getId() { } @Override - public double getHardness() { + public float getHardness() { return 1; } @Override - public double getResistance() { + public float getResistance() { return 5; } @Override public int getToolType() { - return ItemTool.TYPE_AXE; + return BlockToolType.AXE; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockPurpur.java b/src/main/java/cn/nukkit/block/BlockPurpur.java index 5e804dbb8ad..6033194b53a 100644 --- a/src/main/java/cn/nukkit/block/BlockPurpur.java +++ b/src/main/java/cn/nukkit/block/BlockPurpur.java @@ -46,18 +46,18 @@ public int getId() { } @Override - public double getHardness() { - return 1.5; + public float getHardness() { + return 1.5f; } @Override - public double getResistance() { + public float getResistance() { return 30; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override @@ -71,7 +71,7 @@ public boolean place(Item item, Block block, Block target, BlockFace face, doubl } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{ toItem(true) diff --git a/src/main/java/cn/nukkit/block/BlockQuartz.java b/src/main/java/cn/nukkit/block/BlockQuartz.java index e417423dad4..f10692947fa 100644 --- a/src/main/java/cn/nukkit/block/BlockQuartz.java +++ b/src/main/java/cn/nukkit/block/BlockQuartz.java @@ -49,12 +49,12 @@ public int getId() { } @Override - public double getHardness() { - return 0.8; + public float getHardness() { + return 0.8f; } @Override - public double getResistance() { + public float getResistance() { return 4; } @@ -74,7 +74,7 @@ public boolean place(Item item, Block block, Block target, BlockFace face, doubl } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{ toItem(true) @@ -91,7 +91,7 @@ public Item toItem(boolean addUserData) { @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockRail.java b/src/main/java/cn/nukkit/block/BlockRail.java index 91b954b3a50..8c6b501f3d5 100644 --- a/src/main/java/cn/nukkit/block/BlockRail.java +++ b/src/main/java/cn/nukkit/block/BlockRail.java @@ -2,7 +2,6 @@ import cn.nukkit.Player; import cn.nukkit.item.Item; -import cn.nukkit.item.ItemTool; import cn.nukkit.level.Level; import cn.nukkit.math.AxisAlignedBB; import cn.nukkit.math.BlockFace; @@ -48,18 +47,18 @@ public int getId() { } @Override - public double getHardness() { - return 0.7; + public float getHardness() { + return 0.7f; } @Override - public double getResistance() { - return 3.5; + public float getResistance() { + return 3.5f; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override @@ -256,7 +255,7 @@ public Item toItem(boolean addUserData) { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { return new Item[]{ Item.get(Item.RAIL, 0, 1) }; diff --git a/src/main/java/cn/nukkit/block/BlockRailActivator.java b/src/main/java/cn/nukkit/block/BlockRailActivator.java index c7e62910de7..78d49088f8e 100644 --- a/src/main/java/cn/nukkit/block/BlockRailActivator.java +++ b/src/main/java/cn/nukkit/block/BlockRailActivator.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.level.Level; import cn.nukkit.math.Vector3; @@ -80,7 +81,7 @@ protected boolean checkSurrounding(Vector3 pos, boolean relative, int power) { int dz = pos.getFloorZ(); BlockRail block; - Block block2 = level.getBlock(new Vector3(dx, dy, dz)); + Block block2 = level.getBlock(dx, dy, dz); if (Rail.isRailBlock(block2)) { block = (BlockRail) block2; @@ -175,17 +176,17 @@ protected boolean canPowered(Vector3 pos, Rail.Orientation state, int power, boo } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { return new Item[]{ Item.get(Item.ACTIVATOR_RAIL, 0, 1) }; } @Override - public double getHardness() { + public float getHardness() { if (V1_20_30.isAvailable()) { - return 0.7; + return 0.7f; } - return 0.5; + return 0.5f; } } diff --git a/src/main/java/cn/nukkit/block/BlockRailDetector.java b/src/main/java/cn/nukkit/block/BlockRailDetector.java index 76da4a69121..55309ad2e03 100644 --- a/src/main/java/cn/nukkit/block/BlockRailDetector.java +++ b/src/main/java/cn/nukkit/block/BlockRailDetector.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.entity.Entity; import cn.nukkit.entity.item.EntityMinecartAbstract; import cn.nukkit.item.Item; @@ -105,7 +106,7 @@ protected void updateState(@Nullable EntityMinecartAbstract minecart) { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { return new Item[]{ Item.get(Item.DETECTOR_RAIL, 0, 1) }; diff --git a/src/main/java/cn/nukkit/block/BlockRailPowered.java b/src/main/java/cn/nukkit/block/BlockRailPowered.java index 5fdafa4bba9..22137259ce5 100644 --- a/src/main/java/cn/nukkit/block/BlockRailPowered.java +++ b/src/main/java/cn/nukkit/block/BlockRailPowered.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.level.Level; import cn.nukkit.math.Vector3; @@ -85,7 +86,7 @@ protected boolean checkSurrounding(Vector3 pos, boolean relative, int power) { int dz = pos.getFloorZ(); // First: get the base block BlockRail block; - Block block2 = level.getBlock(new Vector3(dx, dy, dz)); + Block block2 = level.getBlock(dx, dy, dz); // Second: check if the rail is Powered rail if (Rail.isRailBlock(block2)) { @@ -187,7 +188,7 @@ protected boolean canPowered(Vector3 pos, Rail.Orientation state, int power, boo } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { return new Item[]{ Item.get(Item.GOLDEN_RAIL, 0, 1) }; diff --git a/src/main/java/cn/nukkit/block/BlockRedSandstone.java b/src/main/java/cn/nukkit/block/BlockRedSandstone.java index ff6b13f86e0..d9b0c49978c 100644 --- a/src/main/java/cn/nukkit/block/BlockRedSandstone.java +++ b/src/main/java/cn/nukkit/block/BlockRedSandstone.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; @@ -35,7 +36,7 @@ public String getName() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{ toItem(true) diff --git a/src/main/java/cn/nukkit/block/BlockRedstone.java b/src/main/java/cn/nukkit/block/BlockRedstone.java index 848486770d4..0124fe13de6 100644 --- a/src/main/java/cn/nukkit/block/BlockRedstone.java +++ b/src/main/java/cn/nukkit/block/BlockRedstone.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.math.BlockFace; @@ -25,18 +26,18 @@ public int getId() { } @Override - public double getResistance() { + public float getResistance() { return 30; } @Override - public double getHardness() { + public float getHardness() { return 5; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override @@ -45,7 +46,7 @@ public String getName() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{ toItem(true) diff --git a/src/main/java/cn/nukkit/block/BlockRedstoneDiode.java b/src/main/java/cn/nukkit/block/BlockRedstoneDiode.java index fd308569f44..1396e3d86ba 100644 --- a/src/main/java/cn/nukkit/block/BlockRedstoneDiode.java +++ b/src/main/java/cn/nukkit/block/BlockRedstoneDiode.java @@ -28,12 +28,12 @@ public BlockRedstoneDiode(int meta) { } @Override - public double getHardness() { + public float getHardness() { return 0; } @Override - public double getResistance() { + public float getResistance() { return 0; } @@ -53,7 +53,7 @@ public boolean sticksToPiston() { } @Override - public boolean onBreak(Item item) { + public boolean onBreak(Item item, Player player) { this.level.setBlock(this, Block.get(BlockID.AIR), true, true); if (this.level.isRedstoneEnabled()) { diff --git a/src/main/java/cn/nukkit/block/BlockRedstoneLamp.java b/src/main/java/cn/nukkit/block/BlockRedstoneLamp.java index f7eaf3c906f..14977d3f7af 100644 --- a/src/main/java/cn/nukkit/block/BlockRedstoneLamp.java +++ b/src/main/java/cn/nukkit/block/BlockRedstoneLamp.java @@ -3,7 +3,6 @@ import cn.nukkit.Player; import cn.nukkit.event.redstone.RedstoneUpdateEvent; import cn.nukkit.item.Item; -import cn.nukkit.item.ItemTool; import cn.nukkit.level.Level; import cn.nukkit.math.BlockFace; import cn.nukkit.utils.BlockColor; @@ -27,18 +26,13 @@ public int getId() { } @Override - public double getHardness() { - return 0.3D; + public float getHardness() { + return 0.3f; } @Override - public double getResistance() { - return 1.5D; - } - - @Override - public int getToolType() { - return ItemTool.TYPE_PICKAXE; + public float getResistance() { + return 1.5f; } @Override @@ -73,7 +67,7 @@ public int onUpdate(int type) { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { return new Item[]{ Item.get(REDSTONE_LAMP) }; diff --git a/src/main/java/cn/nukkit/block/BlockRedstoneTorch.java b/src/main/java/cn/nukkit/block/BlockRedstoneTorch.java index 576b5dceaac..8d714b50b7f 100644 --- a/src/main/java/cn/nukkit/block/BlockRedstoneTorch.java +++ b/src/main/java/cn/nukkit/block/BlockRedstoneTorch.java @@ -71,8 +71,8 @@ public int getStrongPower(BlockFace side) { } @Override - public boolean onBreak(Item item) { - super.onBreak(item); + public boolean onBreak(Item item, Player player) { + super.onBreak(item, player); BlockFace face = getBlockFace().getOpposite(); diff --git a/src/main/java/cn/nukkit/block/BlockRedstoneWire.java b/src/main/java/cn/nukkit/block/BlockRedstoneWire.java index 5e2ed6f665e..0d86a878f31 100644 --- a/src/main/java/cn/nukkit/block/BlockRedstoneWire.java +++ b/src/main/java/cn/nukkit/block/BlockRedstoneWire.java @@ -165,7 +165,7 @@ private int getMaxCurrentStrength(Vector3 pos, int maxStrength) { } @Override - public boolean onBreak(Item item) { + public boolean onBreak(Item item, Player player) { this.getLevel().setBlock(this, Block.get(BlockID.AIR), true, true); if (this.level.isRedstoneEnabled()) { diff --git a/src/main/java/cn/nukkit/block/BlockReserved6.java b/src/main/java/cn/nukkit/block/BlockReserved6.java index 8fe355f1c77..e499be91f96 100644 --- a/src/main/java/cn/nukkit/block/BlockReserved6.java +++ b/src/main/java/cn/nukkit/block/BlockReserved6.java @@ -16,12 +16,12 @@ public int getId() { } @Override - public double getHardness() { + public float getHardness() { return 0; } @Override - public double getResistance() { + public float getResistance() { return 0; } } diff --git a/src/main/java/cn/nukkit/block/BlockRespawnAnchor.java b/src/main/java/cn/nukkit/block/BlockRespawnAnchor.java index eff474ee125..324f1417fa9 100644 --- a/src/main/java/cn/nukkit/block/BlockRespawnAnchor.java +++ b/src/main/java/cn/nukkit/block/BlockRespawnAnchor.java @@ -33,18 +33,18 @@ public String getName() { } @Override - public double getHardness() { + public float getHardness() { return 50; } @Override - public double getResistance() { + public float getResistance() { return 6000; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override @@ -58,7 +58,7 @@ public boolean canHarvestWithHand() { // } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_DIAMOND) { return new Item[]{ Item.get(getItemId()), diff --git a/src/main/java/cn/nukkit/block/BlockSand.java b/src/main/java/cn/nukkit/block/BlockSand.java index 97facab7025..25ad0fdf317 100644 --- a/src/main/java/cn/nukkit/block/BlockSand.java +++ b/src/main/java/cn/nukkit/block/BlockSand.java @@ -4,7 +4,6 @@ import cn.nukkit.item.Item; import cn.nukkit.item.ItemDye; import cn.nukkit.item.ItemID; -import cn.nukkit.item.ItemTool; import cn.nukkit.math.BlockFace; import cn.nukkit.utils.BlockColor; @@ -48,18 +47,18 @@ public int getId() { } @Override - public double getHardness() { - return 0.5; + public float getHardness() { + return 0.5f; } @Override - public double getResistance() { - return 2.5; + public float getResistance() { + return 2.5f; } @Override public int getToolType() { - return ItemTool.TYPE_SHOVEL; + return BlockToolType.SHOVEL; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockSandstone.java b/src/main/java/cn/nukkit/block/BlockSandstone.java index 087111a5841..1bf466792de 100644 --- a/src/main/java/cn/nukkit/block/BlockSandstone.java +++ b/src/main/java/cn/nukkit/block/BlockSandstone.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; @@ -35,12 +36,12 @@ public int getId() { } @Override - public double getHardness() { - return 0.8; + public float getHardness() { + return 0.8f; } @Override - public double getResistance() { + public float getResistance() { return 4; } @@ -50,7 +51,7 @@ public String getName() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{ toItem(true) @@ -67,7 +68,7 @@ public Item toItem(boolean addUserData) { @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockScaffolding.java b/src/main/java/cn/nukkit/block/BlockScaffolding.java index 919b945b59e..a906d0e1b0b 100644 --- a/src/main/java/cn/nukkit/block/BlockScaffolding.java +++ b/src/main/java/cn/nukkit/block/BlockScaffolding.java @@ -5,7 +5,6 @@ import cn.nukkit.entity.item.EntityFallingBlock; import cn.nukkit.event.block.BlockFallEvent; import cn.nukkit.item.Item; -import cn.nukkit.item.ItemTool; import cn.nukkit.level.Level; import cn.nukkit.math.AxisAlignedBB; import cn.nukkit.math.BlockFace; @@ -42,15 +41,15 @@ public String getName() { } @Override - public double getHardness() { + public float getHardness() { if (ENABLE_BLOCK_DESTROY_SPEED_COMPATIBILITY || V1_20_30.isAvailable()) { return 0; } - return 0.6; + return 0.6f; } @Override - public double getResistance() { + public float getResistance() { return 0; } @@ -66,7 +65,7 @@ public int getBurnAbility() { @Override public int getToolType() { - return ItemTool.TYPE_AXE; + return BlockToolType.AXE; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockSculk.java b/src/main/java/cn/nukkit/block/BlockSculk.java index 6226320e1c2..e7c2d973871 100644 --- a/src/main/java/cn/nukkit/block/BlockSculk.java +++ b/src/main/java/cn/nukkit/block/BlockSculk.java @@ -1,7 +1,7 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; -import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; import static cn.nukkit.GameVersion.*; @@ -22,21 +22,21 @@ public String getName() { } @Override - public double getHardness() { + public float getHardness() { if (ENABLE_BLOCK_DESTROY_SPEED_COMPATIBILITY || V1_20_30.isAvailable()) { - return 0.2; + return 0.2f; } - return 0.6; + return 0.6f; } @Override - public double getResistance() { + public float getResistance() { return 1; } @Override public int getToolType() { - return ItemTool.TYPE_HOE; + return BlockToolType.HOE; } @Override @@ -45,7 +45,7 @@ public boolean canSilkTouch() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { return new Item[0]; } diff --git a/src/main/java/cn/nukkit/block/BlockSculkCatalyst.java b/src/main/java/cn/nukkit/block/BlockSculkCatalyst.java index 44911df7243..1fe6b2a1c90 100644 --- a/src/main/java/cn/nukkit/block/BlockSculkCatalyst.java +++ b/src/main/java/cn/nukkit/block/BlockSculkCatalyst.java @@ -1,11 +1,11 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.blockentity.BlockEntities; import cn.nukkit.blockentity.BlockEntity; import cn.nukkit.blockentity.BlockEntitySculkCatalyst; import cn.nukkit.blockentity.BlockEntityType; import cn.nukkit.item.Item; -import cn.nukkit.item.ItemTool; import cn.nukkit.nbt.tag.CompoundTag; import cn.nukkit.utils.BlockColor; @@ -38,12 +38,12 @@ public int getBlockEntityType() { } @Override - public double getHardness() { + public float getHardness() { return 3; } @Override - public double getResistance() { + public float getResistance() { return 15; } @@ -54,7 +54,7 @@ public int getLightLevel() { @Override public int getToolType() { - return ItemTool.TYPE_HOE; + return BlockToolType.HOE; } @Override @@ -63,7 +63,7 @@ public boolean canSilkTouch() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { return new Item[0]; } diff --git a/src/main/java/cn/nukkit/block/BlockSculkSensor.java b/src/main/java/cn/nukkit/block/BlockSculkSensor.java index fb02decd2be..0339b84aa5d 100644 --- a/src/main/java/cn/nukkit/block/BlockSculkSensor.java +++ b/src/main/java/cn/nukkit/block/BlockSculkSensor.java @@ -6,7 +6,6 @@ import cn.nukkit.blockentity.BlockEntitySculkSensor; import cn.nukkit.blockentity.BlockEntityType; import cn.nukkit.item.Item; -import cn.nukkit.item.ItemTool; import cn.nukkit.math.BlockFace; import cn.nukkit.nbt.tag.CompoundTag; import cn.nukkit.utils.BlockColor; @@ -40,13 +39,13 @@ public int getBlockEntityType() { } @Override - public double getHardness() { - return 1.5; + public float getHardness() { + return 1.5f; } @Override - public double getResistance() { - return 7.5; + public float getResistance() { + return 7.5f; } @Override @@ -56,7 +55,7 @@ public int getLightLevel() { @Override public int getToolType() { - return ItemTool.TYPE_HOE; + return BlockToolType.HOE; } @Override @@ -65,7 +64,7 @@ public boolean canSilkTouch() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { return new Item[0]; } diff --git a/src/main/java/cn/nukkit/block/BlockSculkShrieker.java b/src/main/java/cn/nukkit/block/BlockSculkShrieker.java index 1eaf01b7c86..6644dc19673 100644 --- a/src/main/java/cn/nukkit/block/BlockSculkShrieker.java +++ b/src/main/java/cn/nukkit/block/BlockSculkShrieker.java @@ -6,7 +6,6 @@ import cn.nukkit.blockentity.BlockEntitySculkShrieker; import cn.nukkit.blockentity.BlockEntityType; import cn.nukkit.item.Item; -import cn.nukkit.item.ItemTool; import cn.nukkit.math.BlockFace; import cn.nukkit.nbt.tag.CompoundTag; import cn.nukkit.utils.BlockColor; @@ -41,18 +40,18 @@ public int getBlockEntityType() { } @Override - public double getHardness() { + public float getHardness() { return 3; } @Override - public double getResistance() { + public float getResistance() { return 15; } @Override public int getToolType() { - return ItemTool.TYPE_HOE; + return BlockToolType.HOE; } @Override @@ -61,7 +60,7 @@ public boolean canSilkTouch() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { return new Item[0]; } diff --git a/src/main/java/cn/nukkit/block/BlockSculkVein.java b/src/main/java/cn/nukkit/block/BlockSculkVein.java index 88e76acf210..adf6ffbba37 100644 --- a/src/main/java/cn/nukkit/block/BlockSculkVein.java +++ b/src/main/java/cn/nukkit/block/BlockSculkVein.java @@ -1,7 +1,7 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; -import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; public class BlockSculkVein extends BlockMultiface { @@ -24,18 +24,18 @@ public String getName() { } @Override - public double getHardness() { - return 0.2; + public float getHardness() { + return 0.2f; } @Override - public double getResistance() { + public float getResistance() { return 1; } @Override public int getToolType() { - return ItemTool.TYPE_HOE; + return BlockToolType.HOE; } @Override @@ -44,7 +44,7 @@ public boolean canSilkTouch() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { return new Item[0]; } diff --git a/src/main/java/cn/nukkit/block/BlockSeaLantern.java b/src/main/java/cn/nukkit/block/BlockSeaLantern.java index 6113b83e47c..fa132a93778 100644 --- a/src/main/java/cn/nukkit/block/BlockSeaLantern.java +++ b/src/main/java/cn/nukkit/block/BlockSeaLantern.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.utils.BlockColor; @@ -21,13 +22,13 @@ public int getId() { } @Override - public double getResistance() { - return 1.5; + public float getResistance() { + return 1.5f; } @Override - public double getHardness() { - return 0.3; + public float getHardness() { + return 0.3f; } @Override @@ -36,7 +37,7 @@ public int getLightLevel() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { return new Item[]{ Item.get(Item.PRISMARINE_CRYSTALS, 0, ThreadLocalRandom.current().nextInt(2, 4)) }; diff --git a/src/main/java/cn/nukkit/block/BlockSeaPickle.java b/src/main/java/cn/nukkit/block/BlockSeaPickle.java index 91e3a49ade1..24a8893a79c 100644 --- a/src/main/java/cn/nukkit/block/BlockSeaPickle.java +++ b/src/main/java/cn/nukkit/block/BlockSeaPickle.java @@ -57,7 +57,7 @@ public Item toItem(boolean addUserData) { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { return new Item[]{ Item.get(getItemId(), 0, getClusterCount()) }; diff --git a/src/main/java/cn/nukkit/block/BlockSeagrass.java b/src/main/java/cn/nukkit/block/BlockSeagrass.java index 108822d5c4d..7f876525c27 100644 --- a/src/main/java/cn/nukkit/block/BlockSeagrass.java +++ b/src/main/java/cn/nukkit/block/BlockSeagrass.java @@ -4,7 +4,6 @@ import cn.nukkit.item.Item; import cn.nukkit.item.ItemDye; import cn.nukkit.item.ItemID; -import cn.nukkit.item.ItemTool; import cn.nukkit.level.Level; import cn.nukkit.level.particle.BoneMealParticle; import cn.nukkit.math.AxisAlignedBB; @@ -39,12 +38,12 @@ public int getId() { } @Override - public double getHardness() { + public float getHardness() { return 0; } @Override - public double getResistance() { + public float getResistance() { return 0; } @@ -65,7 +64,7 @@ public boolean canContainWater() { @Override public int getToolType() { - return ItemTool.TYPE_SHEARS; + return BlockToolType.SHEARS; } @Override @@ -94,7 +93,7 @@ public Item toItem(boolean addUserData) { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (!item.isShears()) { return new Item[0]; } diff --git a/src/main/java/cn/nukkit/block/BlockShroomlight.java b/src/main/java/cn/nukkit/block/BlockShroomlight.java index 94e55813b11..adc7aabb5e4 100644 --- a/src/main/java/cn/nukkit/block/BlockShroomlight.java +++ b/src/main/java/cn/nukkit/block/BlockShroomlight.java @@ -1,6 +1,5 @@ package cn.nukkit.block; -import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; public class BlockShroomlight extends BlockSolid { @@ -18,18 +17,18 @@ public int getId() { } @Override - public double getHardness() { + public float getHardness() { return 1; } @Override - public double getResistance() { + public float getResistance() { return 5; } @Override public int getToolType() { - return ItemTool.TYPE_HOE; + return BlockToolType.HOE; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockSignPost.java b/src/main/java/cn/nukkit/block/BlockSignPost.java index 7a8699c1e4e..e23dd740d6f 100644 --- a/src/main/java/cn/nukkit/block/BlockSignPost.java +++ b/src/main/java/cn/nukkit/block/BlockSignPost.java @@ -9,7 +9,6 @@ import cn.nukkit.event.block.SignGlowEvent; import cn.nukkit.item.Item; import cn.nukkit.item.ItemDye; -import cn.nukkit.item.ItemTool; import cn.nukkit.level.Level; import cn.nukkit.math.AxisAlignedBB; import cn.nukkit.math.BlockFace; @@ -45,12 +44,12 @@ public int getBlockEntityType() { } @Override - public double getHardness() { + public float getHardness() { return 1; } @Override - public double getResistance() { + public float getResistance() { return 5; } @@ -140,7 +139,7 @@ public Item toItem(boolean addUserData) { @Override public int getToolType() { - return ItemTool.TYPE_AXE; + return BlockToolType.AXE; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockSkull.java b/src/main/java/cn/nukkit/block/BlockSkull.java index 186c1200240..520a552062b 100644 --- a/src/main/java/cn/nukkit/block/BlockSkull.java +++ b/src/main/java/cn/nukkit/block/BlockSkull.java @@ -6,7 +6,6 @@ import cn.nukkit.blockentity.BlockEntityType; import cn.nukkit.blockentity.BlockEntitySkull; import cn.nukkit.item.Item; -import cn.nukkit.item.ItemTool; import cn.nukkit.math.AxisAlignedBB; import cn.nukkit.math.BlockFace; import cn.nukkit.math.Mth; @@ -40,12 +39,12 @@ public int getBlockEntityType() { } @Override - public double getHardness() { + public float getHardness() { return 1; } @Override - public double getResistance() { + public float getResistance() { return 5; } @@ -99,7 +98,7 @@ public boolean place(Item item, Block block, Block target, BlockFace face, doubl } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { BlockEntity blockEntity = getLevel().getBlockEntity(this); int dropMeta = 0; if (blockEntity != null) dropMeta = blockEntity.namedTag.getByte("SkullType"); @@ -116,11 +115,6 @@ public Item toItem(boolean addUserData) { return Item.get(Item.SKULL, itemMeta); } - @Override - public int getToolType() { - return ItemTool.TYPE_PICKAXE; - } - @Override public BlockColor getColor() { return BlockColor.AIR_BLOCK_COLOR; @@ -147,6 +141,11 @@ protected AxisAlignedBB recalculateBoundingBox() { return bb; } + @Override + public boolean canPassThrough() { + return false; + } + @Override public boolean canContainWater() { return true; diff --git a/src/main/java/cn/nukkit/block/BlockSlabBlackstone.java b/src/main/java/cn/nukkit/block/BlockSlabBlackstone.java index 80521332b18..953413bcfb6 100644 --- a/src/main/java/cn/nukkit/block/BlockSlabBlackstone.java +++ b/src/main/java/cn/nukkit/block/BlockSlabBlackstone.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; @@ -27,18 +28,18 @@ public String getName() { } @Override - public double getHardness() { - return 1.5; + public float getHardness() { + return 1.5f; } @Override - public double getResistance() { + public float getResistance() { return 30; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override @@ -47,7 +48,7 @@ public boolean canHarvestWithHand() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{ toItem(true), diff --git a/src/main/java/cn/nukkit/block/BlockSlabCopperCut.java b/src/main/java/cn/nukkit/block/BlockSlabCopperCut.java index 4549d06b952..d66e172a33e 100644 --- a/src/main/java/cn/nukkit/block/BlockSlabCopperCut.java +++ b/src/main/java/cn/nukkit/block/BlockSlabCopperCut.java @@ -34,18 +34,18 @@ public String getName() { } @Override - public double getHardness() { + public float getHardness() { return 3; } @Override - public double getResistance() { + public float getResistance() { return 30; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override @@ -54,7 +54,7 @@ public boolean canHarvestWithHand() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_STONE) { return new Item[]{ toItem(true), diff --git a/src/main/java/cn/nukkit/block/BlockSlabDeepslateBrick.java b/src/main/java/cn/nukkit/block/BlockSlabDeepslateBrick.java index 884f62f6ce4..128c33b6f55 100644 --- a/src/main/java/cn/nukkit/block/BlockSlabDeepslateBrick.java +++ b/src/main/java/cn/nukkit/block/BlockSlabDeepslateBrick.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; @@ -27,18 +28,18 @@ public String getName() { } @Override - public double getHardness() { - return 3.5; + public float getHardness() { + return 3.5f; } @Override - public double getResistance() { + public float getResistance() { return 30; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override @@ -47,7 +48,7 @@ public boolean canHarvestWithHand() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{ toItem(true), diff --git a/src/main/java/cn/nukkit/block/BlockSlabDeepslateCobbled.java b/src/main/java/cn/nukkit/block/BlockSlabDeepslateCobbled.java index a1196336145..d8a975618ef 100644 --- a/src/main/java/cn/nukkit/block/BlockSlabDeepslateCobbled.java +++ b/src/main/java/cn/nukkit/block/BlockSlabDeepslateCobbled.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; @@ -27,18 +28,18 @@ public String getName() { } @Override - public double getHardness() { - return 3.5; + public float getHardness() { + return 3.5f; } @Override - public double getResistance() { + public float getResistance() { return 30; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override @@ -47,7 +48,7 @@ public boolean canHarvestWithHand() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{ toItem(true), diff --git a/src/main/java/cn/nukkit/block/BlockSlabDeepslatePolished.java b/src/main/java/cn/nukkit/block/BlockSlabDeepslatePolished.java index bfce1d23bf6..a3e7103c0b9 100644 --- a/src/main/java/cn/nukkit/block/BlockSlabDeepslatePolished.java +++ b/src/main/java/cn/nukkit/block/BlockSlabDeepslatePolished.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; @@ -27,18 +28,18 @@ public String getName() { } @Override - public double getHardness() { - return 3.5; + public float getHardness() { + return 3.5f; } @Override - public double getResistance() { + public float getResistance() { return 30; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override @@ -47,7 +48,7 @@ public boolean canHarvestWithHand() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{ toItem(true), diff --git a/src/main/java/cn/nukkit/block/BlockSlabDeepslateTile.java b/src/main/java/cn/nukkit/block/BlockSlabDeepslateTile.java index 586d14e0458..74b1daf89d0 100644 --- a/src/main/java/cn/nukkit/block/BlockSlabDeepslateTile.java +++ b/src/main/java/cn/nukkit/block/BlockSlabDeepslateTile.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; @@ -27,18 +28,18 @@ public String getName() { } @Override - public double getHardness() { - return 3.5; + public float getHardness() { + return 3.5f; } @Override - public double getResistance() { + public float getResistance() { return 30; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override @@ -47,7 +48,7 @@ public boolean canHarvestWithHand() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{ toItem(true), diff --git a/src/main/java/cn/nukkit/block/BlockSlabMudBrick.java b/src/main/java/cn/nukkit/block/BlockSlabMudBrick.java index 908b270043e..620a27739c4 100644 --- a/src/main/java/cn/nukkit/block/BlockSlabMudBrick.java +++ b/src/main/java/cn/nukkit/block/BlockSlabMudBrick.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; @@ -30,21 +31,21 @@ public String getName() { } @Override - public double getHardness() { + public float getHardness() { if (ENABLE_BLOCK_DESTROY_SPEED_COMPATIBILITY || V1_20_30.isAvailable()) { - return 1.5; + return 1.5f; } return 2; } @Override - public double getResistance() { + public float getResistance() { return 15; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override @@ -53,7 +54,7 @@ public boolean canHarvestWithHand() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{ toItem(true), diff --git a/src/main/java/cn/nukkit/block/BlockSlabStone.java b/src/main/java/cn/nukkit/block/BlockSlabStone.java index fa6f6ce3591..24c0947dae1 100644 --- a/src/main/java/cn/nukkit/block/BlockSlabStone.java +++ b/src/main/java/cn/nukkit/block/BlockSlabStone.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; @@ -47,17 +48,17 @@ public String getName() { } @Override - public double getHardness() { + public float getHardness() { return 2; } @Override - public double getResistance() { + public float getResistance() { return 30; } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{ toItem(true) @@ -69,7 +70,7 @@ public Item[] getDrops(Item item) { @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockSlabWood.java b/src/main/java/cn/nukkit/block/BlockSlabWood.java index 5f426f95d01..eb648063034 100644 --- a/src/main/java/cn/nukkit/block/BlockSlabWood.java +++ b/src/main/java/cn/nukkit/block/BlockSlabWood.java @@ -1,6 +1,5 @@ package cn.nukkit.block; -import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; /** @@ -46,12 +45,12 @@ public int getId() { } @Override - public double getHardness() { + public float getHardness() { return 2; } @Override - public double getResistance() { + public float getResistance() { return 15; } @@ -67,7 +66,7 @@ public int getBurnAbility() { @Override public int getToolType() { - return ItemTool.TYPE_AXE; + return BlockToolType.AXE; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockSlime.java b/src/main/java/cn/nukkit/block/BlockSlime.java index c936257498c..5e9ab9ca8ea 100644 --- a/src/main/java/cn/nukkit/block/BlockSlime.java +++ b/src/main/java/cn/nukkit/block/BlockSlime.java @@ -11,7 +11,7 @@ public BlockSlime() { } @Override - public double getHardness() { + public float getHardness() { return 0; } @@ -26,7 +26,7 @@ public int getId() { } @Override - public double getResistance() { + public float getResistance() { return 0; } diff --git a/src/main/java/cn/nukkit/block/BlockSmithingTable.java b/src/main/java/cn/nukkit/block/BlockSmithingTable.java index cfb59fbde7a..18f5486ab73 100644 --- a/src/main/java/cn/nukkit/block/BlockSmithingTable.java +++ b/src/main/java/cn/nukkit/block/BlockSmithingTable.java @@ -3,7 +3,6 @@ import cn.nukkit.Player; import cn.nukkit.inventory.SmithingTableInventory; import cn.nukkit.item.Item; -import cn.nukkit.item.ItemTool; import cn.nukkit.math.BlockFace; import cn.nukkit.utils.BlockColor; @@ -24,17 +23,17 @@ public int getId() { @Override public int getToolType() { - return ItemTool.TYPE_AXE; + return BlockToolType.AXE; } @Override - public double getHardness() { - return 2.5; + public float getHardness() { + return 2.5f; } @Override - public double getResistance() { - return 12.5; + public float getResistance() { + return 12.5f; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockSmoothStone.java b/src/main/java/cn/nukkit/block/BlockSmoothStone.java index 0640a0bdf98..adbf0932e94 100644 --- a/src/main/java/cn/nukkit/block/BlockSmoothStone.java +++ b/src/main/java/cn/nukkit/block/BlockSmoothStone.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; @@ -22,21 +23,21 @@ public String getName() { } @Override - public double getHardness() { + public float getHardness() { if (V1_20_30.isAvailable()) { return 2; } - return 1.5; + return 1.5f; } @Override - public double getResistance() { + public float getResistance() { return 30; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override @@ -45,7 +46,7 @@ public boolean canHarvestWithHand() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{ toItem(true) diff --git a/src/main/java/cn/nukkit/block/BlockSnow.java b/src/main/java/cn/nukkit/block/BlockSnow.java index 96f73c9438e..7f0fb6fc88f 100644 --- a/src/main/java/cn/nukkit/block/BlockSnow.java +++ b/src/main/java/cn/nukkit/block/BlockSnow.java @@ -22,22 +22,22 @@ public int getId() { } @Override - public double getHardness() { - return 0.2; + public float getHardness() { + return 0.2f; } @Override - public double getResistance() { + public float getResistance() { return 1; } @Override public int getToolType() { - return ItemTool.TYPE_SHOVEL; + return BlockToolType.SHOVEL; } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isShovel() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{ Item.get(Item.SNOWBALL, 0, 4) diff --git a/src/main/java/cn/nukkit/block/BlockSnowLayer.java b/src/main/java/cn/nukkit/block/BlockSnowLayer.java index a40f021033a..4f3de79c1c3 100644 --- a/src/main/java/cn/nukkit/block/BlockSnowLayer.java +++ b/src/main/java/cn/nukkit/block/BlockSnowLayer.java @@ -56,18 +56,18 @@ public int getId() { } @Override - public double getHardness() { - return 0.1; + public float getHardness() { + return 0.1f; } @Override - public double getResistance() { - return 0.5; + public float getResistance() { + return 0.5f; } @Override public int getToolType() { - return ItemTool.TYPE_SHOVEL; + return BlockToolType.SHOVEL; } @Override @@ -145,7 +145,7 @@ public Item pick(boolean addUserData) { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isShovel() && item.getTier() >= ItemTool.TIER_WOODEN) { Item drop = this.toItem(true); int height = this.getDamage() & HEIGHT_MASK; diff --git a/src/main/java/cn/nukkit/block/BlockSnowPowder.java b/src/main/java/cn/nukkit/block/BlockSnowPowder.java index 04044603f3d..b32e68be26c 100644 --- a/src/main/java/cn/nukkit/block/BlockSnowPowder.java +++ b/src/main/java/cn/nukkit/block/BlockSnowPowder.java @@ -34,18 +34,13 @@ public String getName() { } @Override - public double getHardness() { - return 0.25; + public float getHardness() { + return 0.25f; } @Override - public double getResistance() { - return 1.25; - } - - @Override - public boolean canHarvestWithHand() { - return false; + public float getResistance() { + return 1.25f; } @Override @@ -54,7 +49,7 @@ public Item toItem(boolean addUserData) { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { return new Item[0]; } diff --git a/src/main/java/cn/nukkit/block/BlockSoulSand.java b/src/main/java/cn/nukkit/block/BlockSoulSand.java index cc80e45caa1..6d0765120ec 100644 --- a/src/main/java/cn/nukkit/block/BlockSoulSand.java +++ b/src/main/java/cn/nukkit/block/BlockSoulSand.java @@ -2,7 +2,6 @@ import cn.nukkit.Player; import cn.nukkit.item.Item; -import cn.nukkit.item.ItemTool; import cn.nukkit.level.Level; import cn.nukkit.math.BlockFace; import cn.nukkit.utils.BlockColor; @@ -26,18 +25,18 @@ public int getId() { } @Override - public double getHardness() { - return 0.5; + public float getHardness() { + return 0.5f; } @Override - public double getResistance() { - return 2.5; + public float getResistance() { + return 2.5f; } @Override public int getToolType() { - return ItemTool.TYPE_SHOVEL; + return BlockToolType.SHOVEL; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockSoulSoil.java b/src/main/java/cn/nukkit/block/BlockSoulSoil.java index 309b168d2de..74fb9e436d0 100644 --- a/src/main/java/cn/nukkit/block/BlockSoulSoil.java +++ b/src/main/java/cn/nukkit/block/BlockSoulSoil.java @@ -1,6 +1,5 @@ package cn.nukkit.block; -import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; import static cn.nukkit.GameVersion.*; @@ -21,21 +20,21 @@ public String getName() { } @Override - public double getHardness() { + public float getHardness() { if (ENABLE_BLOCK_DESTROY_SPEED_COMPATIBILITY || V1_20_30.isAvailable()) { - return 0.5; + return 0.5f; } return 1; } @Override - public double getResistance() { - return 2.5; + public float getResistance() { + return 2.5f; } @Override public int getToolType() { - return ItemTool.TYPE_SHOVEL; + return BlockToolType.SHOVEL; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockSponge.java b/src/main/java/cn/nukkit/block/BlockSponge.java index b027bf1be56..d425f197c3f 100644 --- a/src/main/java/cn/nukkit/block/BlockSponge.java +++ b/src/main/java/cn/nukkit/block/BlockSponge.java @@ -2,9 +2,7 @@ import cn.nukkit.Player; import cn.nukkit.item.Item; -import cn.nukkit.item.ItemTool; import cn.nukkit.level.Dimension; -import cn.nukkit.level.Level; import cn.nukkit.level.particle.DestroyBlockParticle; import cn.nukkit.math.BlockFace; import cn.nukkit.network.protocol.LevelEventPacket; @@ -40,18 +38,18 @@ public int getId() { } @Override - public double getHardness() { - return 0.6; + public float getHardness() { + return 0.6f; } @Override - public double getResistance() { + public float getResistance() { return 3; } @Override public int getToolType() { - return ItemTool.TYPE_HOE; + return BlockToolType.HOE; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockStairs.java b/src/main/java/cn/nukkit/block/BlockStairs.java index c9e141c8b5b..a6efae782f8 100644 --- a/src/main/java/cn/nukkit/block/BlockStairs.java +++ b/src/main/java/cn/nukkit/block/BlockStairs.java @@ -45,7 +45,7 @@ public boolean place(Item item, Block block, Block target, BlockFace face, doubl } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{ toItem(true) diff --git a/src/main/java/cn/nukkit/block/BlockStairsAndesite.java b/src/main/java/cn/nukkit/block/BlockStairsAndesite.java index 424ef9c3262..8aa11a364c6 100644 --- a/src/main/java/cn/nukkit/block/BlockStairsAndesite.java +++ b/src/main/java/cn/nukkit/block/BlockStairsAndesite.java @@ -1,6 +1,5 @@ package cn.nukkit.block; -import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; import static cn.nukkit.GameVersion.*; @@ -27,21 +26,21 @@ public String getName() { } @Override - public double getHardness() { + public float getHardness() { if (ENABLE_BLOCK_DESTROY_SPEED_COMPATIBILITY || V1_20_30.isAvailable()) { - return 1.5; + return 1.5f; } return 2; } @Override - public double getResistance() { + public float getResistance() { return 30; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockStairsBlackstone.java b/src/main/java/cn/nukkit/block/BlockStairsBlackstone.java index fa009cefc0c..b7b3be98bdb 100644 --- a/src/main/java/cn/nukkit/block/BlockStairsBlackstone.java +++ b/src/main/java/cn/nukkit/block/BlockStairsBlackstone.java @@ -1,6 +1,5 @@ package cn.nukkit.block; -import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; public class BlockStairsBlackstone extends BlockStairs { @@ -23,18 +22,18 @@ public String getName() { } @Override - public double getHardness() { - return 1.5; + public float getHardness() { + return 1.5f; } @Override - public double getResistance() { + public float getResistance() { return 30; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockStairsBrick.java b/src/main/java/cn/nukkit/block/BlockStairsBrick.java index a6ba171bc8e..0dfe5bc20ff 100644 --- a/src/main/java/cn/nukkit/block/BlockStairsBrick.java +++ b/src/main/java/cn/nukkit/block/BlockStairsBrick.java @@ -1,6 +1,5 @@ package cn.nukkit.block; -import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; /** @@ -22,18 +21,18 @@ public int getId() { } @Override - public double getHardness() { + public float getHardness() { return 2; } @Override - public double getResistance() { + public float getResistance() { return 30; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockStairsCobblestone.java b/src/main/java/cn/nukkit/block/BlockStairsCobblestone.java index 7408bf00ed2..2f7ea521909 100644 --- a/src/main/java/cn/nukkit/block/BlockStairsCobblestone.java +++ b/src/main/java/cn/nukkit/block/BlockStairsCobblestone.java @@ -1,6 +1,5 @@ package cn.nukkit.block; -import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; /** @@ -22,18 +21,18 @@ public int getId() { } @Override - public double getHardness() { + public float getHardness() { return 2; } @Override - public double getResistance() { + public float getResistance() { return 30; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockStairsCopperCut.java b/src/main/java/cn/nukkit/block/BlockStairsCopperCut.java index 808fe0c07c5..a8f03ca03ca 100644 --- a/src/main/java/cn/nukkit/block/BlockStairsCopperCut.java +++ b/src/main/java/cn/nukkit/block/BlockStairsCopperCut.java @@ -31,18 +31,18 @@ public String getName() { } @Override - public double getHardness() { + public float getHardness() { return 3; } @Override - public double getResistance() { + public float getResistance() { return 30; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override @@ -51,7 +51,7 @@ public boolean canHarvestWithHand() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_STONE) { return new Item[]{ toItem(true), diff --git a/src/main/java/cn/nukkit/block/BlockStairsDarkPrismarine.java b/src/main/java/cn/nukkit/block/BlockStairsDarkPrismarine.java index 94c753510ed..ea73c1e7914 100644 --- a/src/main/java/cn/nukkit/block/BlockStairsDarkPrismarine.java +++ b/src/main/java/cn/nukkit/block/BlockStairsDarkPrismarine.java @@ -1,6 +1,5 @@ package cn.nukkit.block; -import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; public class BlockStairsDarkPrismarine extends BlockStairs { @@ -24,18 +23,18 @@ public String getName() { } @Override - public double getHardness() { - return 1.5; + public float getHardness() { + return 1.5f; } @Override - public double getResistance() { + public float getResistance() { return 30; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockStairsDeepslateBrick.java b/src/main/java/cn/nukkit/block/BlockStairsDeepslateBrick.java index cacb580d807..519267630ce 100644 --- a/src/main/java/cn/nukkit/block/BlockStairsDeepslateBrick.java +++ b/src/main/java/cn/nukkit/block/BlockStairsDeepslateBrick.java @@ -1,6 +1,5 @@ package cn.nukkit.block; -import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; public class BlockStairsDeepslateBrick extends BlockStairs { @@ -23,18 +22,18 @@ public String getName() { } @Override - public double getHardness() { - return 3.5; + public float getHardness() { + return 3.5f; } @Override - public double getResistance() { + public float getResistance() { return 30; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockStairsDeepslateCobbled.java b/src/main/java/cn/nukkit/block/BlockStairsDeepslateCobbled.java index 3427dfe0741..089df520577 100644 --- a/src/main/java/cn/nukkit/block/BlockStairsDeepslateCobbled.java +++ b/src/main/java/cn/nukkit/block/BlockStairsDeepslateCobbled.java @@ -1,6 +1,5 @@ package cn.nukkit.block; -import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; public class BlockStairsDeepslateCobbled extends BlockStairs { @@ -23,18 +22,18 @@ public String getName() { } @Override - public double getHardness() { - return 3.5; + public float getHardness() { + return 3.5f; } @Override - public double getResistance() { + public float getResistance() { return 30; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockStairsDeepslatePolished.java b/src/main/java/cn/nukkit/block/BlockStairsDeepslatePolished.java index 78a13e7943f..395f6a31c7d 100644 --- a/src/main/java/cn/nukkit/block/BlockStairsDeepslatePolished.java +++ b/src/main/java/cn/nukkit/block/BlockStairsDeepslatePolished.java @@ -1,6 +1,5 @@ package cn.nukkit.block; -import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; public class BlockStairsDeepslatePolished extends BlockStairs { @@ -23,18 +22,18 @@ public String getName() { } @Override - public double getHardness() { - return 3.5; + public float getHardness() { + return 3.5f; } @Override - public double getResistance() { + public float getResistance() { return 30; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockStairsDeepslateTile.java b/src/main/java/cn/nukkit/block/BlockStairsDeepslateTile.java index 6de0f3fac34..c0ace6a7058 100644 --- a/src/main/java/cn/nukkit/block/BlockStairsDeepslateTile.java +++ b/src/main/java/cn/nukkit/block/BlockStairsDeepslateTile.java @@ -1,6 +1,5 @@ package cn.nukkit.block; -import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; public class BlockStairsDeepslateTile extends BlockStairs { @@ -23,18 +22,18 @@ public String getName() { } @Override - public double getHardness() { - return 3.5; + public float getHardness() { + return 3.5f; } @Override - public double getResistance() { + public float getResistance() { return 30; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockStairsDiorite.java b/src/main/java/cn/nukkit/block/BlockStairsDiorite.java index 684fedd9ab6..3ad4052b398 100644 --- a/src/main/java/cn/nukkit/block/BlockStairsDiorite.java +++ b/src/main/java/cn/nukkit/block/BlockStairsDiorite.java @@ -1,6 +1,5 @@ package cn.nukkit.block; -import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; import static cn.nukkit.GameVersion.*; @@ -27,21 +26,21 @@ public String getName() { } @Override - public double getHardness() { + public float getHardness() { if (ENABLE_BLOCK_DESTROY_SPEED_COMPATIBILITY || V1_20_30.isAvailable()) { - return 1.5; + return 1.5f; } return 2; } @Override - public double getResistance() { + public float getResistance() { return 30; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockStairsEndBrick.java b/src/main/java/cn/nukkit/block/BlockStairsEndBrick.java index 084e886d18d..2977b95472c 100644 --- a/src/main/java/cn/nukkit/block/BlockStairsEndBrick.java +++ b/src/main/java/cn/nukkit/block/BlockStairsEndBrick.java @@ -1,6 +1,5 @@ package cn.nukkit.block; -import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; import static cn.nukkit.GameVersion.*; @@ -26,7 +25,7 @@ public String getName() { } @Override - public double getHardness() { + public float getHardness() { if (V1_20_30.isAvailable()) { return 3; } @@ -34,13 +33,13 @@ public double getHardness() { } @Override - public double getResistance() { + public float getResistance() { return 45; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockStairsGranite.java b/src/main/java/cn/nukkit/block/BlockStairsGranite.java index c6459f1b99d..5e3f7c716b7 100644 --- a/src/main/java/cn/nukkit/block/BlockStairsGranite.java +++ b/src/main/java/cn/nukkit/block/BlockStairsGranite.java @@ -1,6 +1,5 @@ package cn.nukkit.block; -import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; import static cn.nukkit.GameVersion.*; @@ -27,21 +26,21 @@ public String getName() { } @Override - public double getHardness() { + public float getHardness() { if (ENABLE_BLOCK_DESTROY_SPEED_COMPATIBILITY || V1_20_30.isAvailable()) { - return 1.5; + return 1.5f; } return 2; } @Override - public double getResistance() { + public float getResistance() { return 30; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockStairsMossyCobblestone.java b/src/main/java/cn/nukkit/block/BlockStairsMossyCobblestone.java index 03bde6e1792..ec15fad4404 100644 --- a/src/main/java/cn/nukkit/block/BlockStairsMossyCobblestone.java +++ b/src/main/java/cn/nukkit/block/BlockStairsMossyCobblestone.java @@ -1,6 +1,5 @@ package cn.nukkit.block; -import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; public class BlockStairsMossyCobblestone extends BlockStairs { @@ -24,18 +23,18 @@ public String getName() { } @Override - public double getHardness() { + public float getHardness() { return 2; } @Override - public double getResistance() { + public float getResistance() { return 30; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockStairsMossyStoneBrick.java b/src/main/java/cn/nukkit/block/BlockStairsMossyStoneBrick.java index 6923d39524f..f428ecb60dd 100644 --- a/src/main/java/cn/nukkit/block/BlockStairsMossyStoneBrick.java +++ b/src/main/java/cn/nukkit/block/BlockStairsMossyStoneBrick.java @@ -1,6 +1,5 @@ package cn.nukkit.block; -import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; import static cn.nukkit.GameVersion.*; @@ -27,21 +26,21 @@ public String getName() { } @Override - public double getHardness() { + public float getHardness() { if (ENABLE_BLOCK_DESTROY_SPEED_COMPATIBILITY || V1_20_30.isAvailable()) { - return 1.5; + return 1.5f; } return 2; } @Override - public double getResistance() { + public float getResistance() { return 30; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockStairsMudBrick.java b/src/main/java/cn/nukkit/block/BlockStairsMudBrick.java index 0a4df40c1a3..3cc523837bd 100644 --- a/src/main/java/cn/nukkit/block/BlockStairsMudBrick.java +++ b/src/main/java/cn/nukkit/block/BlockStairsMudBrick.java @@ -1,6 +1,5 @@ package cn.nukkit.block; -import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; import static cn.nukkit.GameVersion.*; @@ -26,21 +25,21 @@ public String getName() { } @Override - public double getHardness() { + public float getHardness() { if (ENABLE_BLOCK_DESTROY_SPEED_COMPATIBILITY || V1_20_30.isAvailable()) { - return 1.5; + return 1.5f; } return 2; } @Override - public double getResistance() { + public float getResistance() { return 15; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockStairsNetherBrick.java b/src/main/java/cn/nukkit/block/BlockStairsNetherBrick.java index f4115fac2c0..fb544126325 100644 --- a/src/main/java/cn/nukkit/block/BlockStairsNetherBrick.java +++ b/src/main/java/cn/nukkit/block/BlockStairsNetherBrick.java @@ -1,6 +1,5 @@ package cn.nukkit.block; -import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; /** @@ -22,18 +21,18 @@ public int getId() { } @Override - public double getHardness() { + public float getHardness() { return 2; } @Override - public double getResistance() { + public float getResistance() { return 30; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockStairsPolishedAndesite.java b/src/main/java/cn/nukkit/block/BlockStairsPolishedAndesite.java index 1f0c525c574..410ec7fb001 100644 --- a/src/main/java/cn/nukkit/block/BlockStairsPolishedAndesite.java +++ b/src/main/java/cn/nukkit/block/BlockStairsPolishedAndesite.java @@ -1,6 +1,5 @@ package cn.nukkit.block; -import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; import static cn.nukkit.GameVersion.*; @@ -27,21 +26,21 @@ public String getName() { } @Override - public double getHardness() { + public float getHardness() { if (ENABLE_BLOCK_DESTROY_SPEED_COMPATIBILITY || V1_20_30.isAvailable()) { - return 1.5; + return 1.5f; } return 2; } @Override - public double getResistance() { + public float getResistance() { return 30; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockStairsPolishedBlackstone.java b/src/main/java/cn/nukkit/block/BlockStairsPolishedBlackstone.java index df23507f52e..937c763c6e4 100644 --- a/src/main/java/cn/nukkit/block/BlockStairsPolishedBlackstone.java +++ b/src/main/java/cn/nukkit/block/BlockStairsPolishedBlackstone.java @@ -1,6 +1,5 @@ package cn.nukkit.block; -import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; import static cn.nukkit.GameVersion.*; @@ -25,21 +24,21 @@ public String getName() { } @Override - public double getHardness() { + public float getHardness() { if (V1_20_30.isAvailable()) { return 2; } - return 1.5; + return 1.5f; } @Override - public double getResistance() { + public float getResistance() { return 30; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockStairsPolishedBlackstoneBrick.java b/src/main/java/cn/nukkit/block/BlockStairsPolishedBlackstoneBrick.java index 604d8c2cfb9..5b09977b697 100644 --- a/src/main/java/cn/nukkit/block/BlockStairsPolishedBlackstoneBrick.java +++ b/src/main/java/cn/nukkit/block/BlockStairsPolishedBlackstoneBrick.java @@ -1,6 +1,5 @@ package cn.nukkit.block; -import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; public class BlockStairsPolishedBlackstoneBrick extends BlockStairs { @@ -23,18 +22,18 @@ public String getName() { } @Override - public double getHardness() { - return 1.5; + public float getHardness() { + return 1.5f; } @Override - public double getResistance() { + public float getResistance() { return 30; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockStairsPolishedDiorite.java b/src/main/java/cn/nukkit/block/BlockStairsPolishedDiorite.java index 2e9bd1a9be2..1d6e5f1ede1 100644 --- a/src/main/java/cn/nukkit/block/BlockStairsPolishedDiorite.java +++ b/src/main/java/cn/nukkit/block/BlockStairsPolishedDiorite.java @@ -1,6 +1,5 @@ package cn.nukkit.block; -import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; import static cn.nukkit.GameVersion.*; @@ -27,21 +26,21 @@ public String getName() { } @Override - public double getHardness() { + public float getHardness() { if (ENABLE_BLOCK_DESTROY_SPEED_COMPATIBILITY || V1_20_30.isAvailable()) { - return 1.5; + return 1.5f; } return 2; } @Override - public double getResistance() { + public float getResistance() { return 30; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockStairsPolishedGranite.java b/src/main/java/cn/nukkit/block/BlockStairsPolishedGranite.java index 8e15c51a070..16b28e16f93 100644 --- a/src/main/java/cn/nukkit/block/BlockStairsPolishedGranite.java +++ b/src/main/java/cn/nukkit/block/BlockStairsPolishedGranite.java @@ -1,6 +1,5 @@ package cn.nukkit.block; -import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; import static cn.nukkit.GameVersion.*; @@ -27,21 +26,21 @@ public String getName() { } @Override - public double getHardness() { + public float getHardness() { if (ENABLE_BLOCK_DESTROY_SPEED_COMPATIBILITY || V1_20_30.isAvailable()) { - return 1.5; + return 1.5f; } return 2; } @Override - public double getResistance() { + public float getResistance() { return 30; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockStairsPrismarine.java b/src/main/java/cn/nukkit/block/BlockStairsPrismarine.java index bf453f12640..781fdac2177 100644 --- a/src/main/java/cn/nukkit/block/BlockStairsPrismarine.java +++ b/src/main/java/cn/nukkit/block/BlockStairsPrismarine.java @@ -1,6 +1,5 @@ package cn.nukkit.block; -import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; public class BlockStairsPrismarine extends BlockStairs { @@ -24,18 +23,18 @@ public String getName() { } @Override - public double getHardness() { - return 1.5; + public float getHardness() { + return 1.5f; } @Override - public double getResistance() { + public float getResistance() { return 30; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockStairsPrismarineBrick.java b/src/main/java/cn/nukkit/block/BlockStairsPrismarineBrick.java index 107863ff592..752a5c4c488 100644 --- a/src/main/java/cn/nukkit/block/BlockStairsPrismarineBrick.java +++ b/src/main/java/cn/nukkit/block/BlockStairsPrismarineBrick.java @@ -1,6 +1,5 @@ package cn.nukkit.block; -import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; public class BlockStairsPrismarineBrick extends BlockStairs { @@ -24,18 +23,18 @@ public String getName() { } @Override - public double getHardness() { - return 1.5; + public float getHardness() { + return 1.5f; } @Override - public double getResistance() { + public float getResistance() { return 30; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockStairsPurpur.java b/src/main/java/cn/nukkit/block/BlockStairsPurpur.java index 46d4dd53533..bdee0cb880f 100644 --- a/src/main/java/cn/nukkit/block/BlockStairsPurpur.java +++ b/src/main/java/cn/nukkit/block/BlockStairsPurpur.java @@ -1,6 +1,5 @@ package cn.nukkit.block; -import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; public class BlockStairsPurpur extends BlockStairs { @@ -19,18 +18,18 @@ public int getId() { } @Override - public double getHardness() { - return 1.5; + public float getHardness() { + return 1.5f; } @Override - public double getResistance() { + public float getResistance() { return 30; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockStairsQuartz.java b/src/main/java/cn/nukkit/block/BlockStairsQuartz.java index 9482765d3c3..e4661df2873 100644 --- a/src/main/java/cn/nukkit/block/BlockStairsQuartz.java +++ b/src/main/java/cn/nukkit/block/BlockStairsQuartz.java @@ -1,6 +1,5 @@ package cn.nukkit.block; -import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; /** @@ -22,18 +21,18 @@ public int getId() { } @Override - public double getHardness() { - return 0.8; + public float getHardness() { + return 0.8f; } @Override - public double getResistance() { + public float getResistance() { return 4; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockStairsRedNetherBrick.java b/src/main/java/cn/nukkit/block/BlockStairsRedNetherBrick.java index 579c6137fdd..ac0f0c80bbf 100644 --- a/src/main/java/cn/nukkit/block/BlockStairsRedNetherBrick.java +++ b/src/main/java/cn/nukkit/block/BlockStairsRedNetherBrick.java @@ -1,6 +1,5 @@ package cn.nukkit.block; -import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; public class BlockStairsRedNetherBrick extends BlockStairs { @@ -24,18 +23,18 @@ public String getName() { } @Override - public double getHardness() { + public float getHardness() { return 2; } @Override - public double getResistance() { + public float getResistance() { return 30; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockStairsRedSandstone.java b/src/main/java/cn/nukkit/block/BlockStairsRedSandstone.java index 2a8ad193a51..32b5fc6eef2 100644 --- a/src/main/java/cn/nukkit/block/BlockStairsRedSandstone.java +++ b/src/main/java/cn/nukkit/block/BlockStairsRedSandstone.java @@ -1,6 +1,5 @@ package cn.nukkit.block; -import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; /** @@ -22,18 +21,18 @@ public int getId() { } @Override - public double getHardness() { - return 0.8; + public float getHardness() { + return 0.8f; } @Override - public double getResistance() { + public float getResistance() { return 4; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockStairsSandstone.java b/src/main/java/cn/nukkit/block/BlockStairsSandstone.java index 18557d87a85..89c737edb24 100644 --- a/src/main/java/cn/nukkit/block/BlockStairsSandstone.java +++ b/src/main/java/cn/nukkit/block/BlockStairsSandstone.java @@ -1,6 +1,5 @@ package cn.nukkit.block; -import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; /** @@ -22,18 +21,18 @@ public int getId() { } @Override - public double getHardness() { - return 0.8; + public float getHardness() { + return 0.8f; } @Override - public double getResistance() { + public float getResistance() { return 4; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockStairsSmoothQuartz.java b/src/main/java/cn/nukkit/block/BlockStairsSmoothQuartz.java index 0bcd8e56119..d3e2f8f8d45 100644 --- a/src/main/java/cn/nukkit/block/BlockStairsSmoothQuartz.java +++ b/src/main/java/cn/nukkit/block/BlockStairsSmoothQuartz.java @@ -1,6 +1,5 @@ package cn.nukkit.block; -import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; import static cn.nukkit.GameVersion.*; @@ -26,21 +25,21 @@ public String getName() { } @Override - public double getHardness() { + public float getHardness() { if (V1_20_30.isAvailable()) { return 2; } - return 0.8; + return 0.8f; } @Override - public double getResistance() { + public float getResistance() { return 30; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockStairsSmoothRedSandstone.java b/src/main/java/cn/nukkit/block/BlockStairsSmoothRedSandstone.java index 006789a1d22..7f1a9326f96 100644 --- a/src/main/java/cn/nukkit/block/BlockStairsSmoothRedSandstone.java +++ b/src/main/java/cn/nukkit/block/BlockStairsSmoothRedSandstone.java @@ -1,6 +1,5 @@ package cn.nukkit.block; -import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; public class BlockStairsSmoothRedSandstone extends BlockStairs { @@ -24,18 +23,18 @@ public String getName() { } @Override - public double getHardness() { + public float getHardness() { return 2; } @Override - public double getResistance() { + public float getResistance() { return 30; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockStairsSmoothSandstone.java b/src/main/java/cn/nukkit/block/BlockStairsSmoothSandstone.java index a4703d81387..616a90bb399 100644 --- a/src/main/java/cn/nukkit/block/BlockStairsSmoothSandstone.java +++ b/src/main/java/cn/nukkit/block/BlockStairsSmoothSandstone.java @@ -1,6 +1,5 @@ package cn.nukkit.block; -import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; public class BlockStairsSmoothSandstone extends BlockStairs { @@ -24,18 +23,18 @@ public String getName() { } @Override - public double getHardness() { + public float getHardness() { return 2; } @Override - public double getResistance() { + public float getResistance() { return 30; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockStairsStone.java b/src/main/java/cn/nukkit/block/BlockStairsStone.java index 98d9d1aad6e..15fc756d45e 100644 --- a/src/main/java/cn/nukkit/block/BlockStairsStone.java +++ b/src/main/java/cn/nukkit/block/BlockStairsStone.java @@ -1,6 +1,5 @@ package cn.nukkit.block; -import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; public class BlockStairsStone extends BlockStairs { @@ -24,18 +23,18 @@ public String getName() { } @Override - public double getHardness() { + public float getHardness() { return 2; } @Override - public double getResistance() { + public float getResistance() { return 30; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockStairsStoneBrick.java b/src/main/java/cn/nukkit/block/BlockStairsStoneBrick.java index d84255e8295..f3579cc1d8a 100644 --- a/src/main/java/cn/nukkit/block/BlockStairsStoneBrick.java +++ b/src/main/java/cn/nukkit/block/BlockStairsStoneBrick.java @@ -1,7 +1,5 @@ package cn.nukkit.block; -import cn.nukkit.item.ItemTool; - /** * Created on 2015/11/25 by xtypr. * Package cn.nukkit.block in project Nukkit . @@ -22,16 +20,16 @@ public int getId() { @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override - public double getHardness() { - return 1.5; + public float getHardness() { + return 1.5f; } @Override - public double getResistance() { + public float getResistance() { return 30; } diff --git a/src/main/java/cn/nukkit/block/BlockStairsWood.java b/src/main/java/cn/nukkit/block/BlockStairsWood.java index d1db2fdbff4..50775fced20 100644 --- a/src/main/java/cn/nukkit/block/BlockStairsWood.java +++ b/src/main/java/cn/nukkit/block/BlockStairsWood.java @@ -1,7 +1,7 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; -import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; /** @@ -29,16 +29,16 @@ public String getName() { @Override public int getToolType() { - return ItemTool.TYPE_AXE; + return BlockToolType.AXE; } @Override - public double getHardness() { + public float getHardness() { return 2; } @Override - public double getResistance() { + public float getResistance() { return 15; } @@ -58,7 +58,7 @@ public BlockColor getColor() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { return new Item[]{ toItem(true) }; diff --git a/src/main/java/cn/nukkit/block/BlockStemMelon.java b/src/main/java/cn/nukkit/block/BlockStemMelon.java index a2e12001a11..eb75b516f98 100644 --- a/src/main/java/cn/nukkit/block/BlockStemMelon.java +++ b/src/main/java/cn/nukkit/block/BlockStemMelon.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import java.util.concurrent.ThreadLocalRandom; @@ -33,7 +34,7 @@ public Item toItem(boolean addUserData) { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { return new Item[]{ Item.get(Item.MELON_SEEDS, 0, ThreadLocalRandom.current().nextInt(0, 4)) }; diff --git a/src/main/java/cn/nukkit/block/BlockStemPumpkin.java b/src/main/java/cn/nukkit/block/BlockStemPumpkin.java index f22c548b5ca..352f3441148 100644 --- a/src/main/java/cn/nukkit/block/BlockStemPumpkin.java +++ b/src/main/java/cn/nukkit/block/BlockStemPumpkin.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import java.util.concurrent.ThreadLocalRandom; @@ -33,7 +34,7 @@ public Item toItem(boolean addUserData) { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { return new Item[]{ Item.get(Item.PUMPKIN_SEEDS, 0, ThreadLocalRandom.current().nextInt(0, 4)) }; diff --git a/src/main/java/cn/nukkit/block/BlockStone.java b/src/main/java/cn/nukkit/block/BlockStone.java index 728070f10c3..ba8f7feacd2 100644 --- a/src/main/java/cn/nukkit/block/BlockStone.java +++ b/src/main/java/cn/nukkit/block/BlockStone.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; @@ -42,18 +43,18 @@ public int getId() { } @Override - public double getHardness() { - return 1.5; + public float getHardness() { + return 1.5f; } @Override - public double getResistance() { + public float getResistance() { return 30; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override @@ -62,7 +63,7 @@ public String getName() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{ Item.get(this.getDamage() == TYPE_NORMAL ? Item.COBBLESTONE : Item.STONE, this.getDamage(), 1) diff --git a/src/main/java/cn/nukkit/block/BlockStonecutter.java b/src/main/java/cn/nukkit/block/BlockStonecutter.java index ca17a6ed8ab..5ea626aac4c 100644 --- a/src/main/java/cn/nukkit/block/BlockStonecutter.java +++ b/src/main/java/cn/nukkit/block/BlockStonecutter.java @@ -29,18 +29,18 @@ public String getName() { } @Override - public double getHardness() { - return 3.5; + public float getHardness() { + return 3.5f; } @Override - public double getResistance() { - return 17.5; + public float getResistance() { + return 17.5f; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override @@ -49,7 +49,7 @@ public boolean isSolid() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{ this.toItem(true) diff --git a/src/main/java/cn/nukkit/block/BlockStonecutterLegacy.java b/src/main/java/cn/nukkit/block/BlockStonecutterLegacy.java index 782bc0f1b41..8cc01e2ee99 100644 --- a/src/main/java/cn/nukkit/block/BlockStonecutterLegacy.java +++ b/src/main/java/cn/nukkit/block/BlockStonecutterLegacy.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; @@ -21,22 +22,22 @@ public String getName() { } @Override - public double getHardness() { - return 3.5; + public float getHardness() { + return 3.5f; } @Override - public double getResistance() { - return 17.5; + public float getResistance() { + return 17.5f; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{ this.toItem(true) diff --git a/src/main/java/cn/nukkit/block/BlockStructure.java b/src/main/java/cn/nukkit/block/BlockStructure.java index 3c589724930..0c5b4a59125 100644 --- a/src/main/java/cn/nukkit/block/BlockStructure.java +++ b/src/main/java/cn/nukkit/block/BlockStructure.java @@ -45,12 +45,12 @@ public int getBlockEntityType() { } @Override - public double getHardness() { + public float getHardness() { return -1; } @Override - public double getResistance() { + public float getResistance() { return 18000000; } @@ -118,6 +118,7 @@ public boolean onActivate(Item item, BlockFace face, Player player) { return true; } //TODO: UI + //player.openBlockEditor(getFloorX(), getFloorY(), getFloorZ(), ContainerType.STRUCTURE_EDITOR); return true; } diff --git a/src/main/java/cn/nukkit/block/BlockStructureVoid.java b/src/main/java/cn/nukkit/block/BlockStructureVoid.java index c4c6cab59e3..fab0c6e9d00 100644 --- a/src/main/java/cn/nukkit/block/BlockStructureVoid.java +++ b/src/main/java/cn/nukkit/block/BlockStructureVoid.java @@ -28,12 +28,12 @@ public String getName() { } @Override - public double getHardness() { + public float getHardness() { return -1; } @Override - public double getResistance() { + public float getResistance() { return 18000000; } diff --git a/src/main/java/cn/nukkit/block/BlockSugarcane.java b/src/main/java/cn/nukkit/block/BlockSugarcane.java index b8a91e1bc45..c30a010f37b 100644 --- a/src/main/java/cn/nukkit/block/BlockSugarcane.java +++ b/src/main/java/cn/nukkit/block/BlockSugarcane.java @@ -103,8 +103,11 @@ public int onUpdate(int type) { } else if (type == Level.BLOCK_UPDATE_RANDOM) { if (this.down().getId() != BLOCK_REEDS) { if (this.getDamage() == 0x0F) { + int blockX = getFloorX(); + int blockY = getFloorY(); + int blockZ = getFloorZ(); for (int y = 1; y < 3; ++y) { - Block b = this.getLevel().getBlock(new Vector3(this.x, this.y + y, this.z)); + Block b = this.getLevel().getBlock(blockX, blockY + y, blockZ); if (b.getId() == AIR) { BlockGrowEvent ev = new BlockGrowEvent(b, Block.get(BlockID.BLOCK_REEDS)); Server.getInstance().getPluginManager().callEvent(ev); diff --git a/src/main/java/cn/nukkit/block/BlockSweetBerryBush.java b/src/main/java/cn/nukkit/block/BlockSweetBerryBush.java index 277c5fa07f5..cf1f6939951 100644 --- a/src/main/java/cn/nukkit/block/BlockSweetBerryBush.java +++ b/src/main/java/cn/nukkit/block/BlockSweetBerryBush.java @@ -45,11 +45,11 @@ public int getId() { } @Override - public double getHardness() { + public float getHardness() { if (ENABLE_BLOCK_DESTROY_SPEED_COMPATIBILITY || V1_20_30.isAvailable()) { return 0; } - return 0.2; + return 0.2f; } @Override @@ -78,7 +78,7 @@ public Item toItem(boolean addUserData) { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { int meta = getDamage() & 0x7; if (meta <= STAGE_BUSH_NO_BERRIES) { return new Item[0]; diff --git a/src/main/java/cn/nukkit/block/BlockTNT.java b/src/main/java/cn/nukkit/block/BlockTNT.java index 27c590e6839..8bfb7c89fa8 100644 --- a/src/main/java/cn/nukkit/block/BlockTNT.java +++ b/src/main/java/cn/nukkit/block/BlockTNT.java @@ -42,12 +42,12 @@ public int getId() { } @Override - public double getHardness() { + public float getHardness() { return 0; } @Override - public double getResistance() { + public float getResistance() { return 0; } diff --git a/src/main/java/cn/nukkit/block/BlockTallGrass.java b/src/main/java/cn/nukkit/block/BlockTallGrass.java index 63ac0f95f4b..d1dd2889566 100644 --- a/src/main/java/cn/nukkit/block/BlockTallGrass.java +++ b/src/main/java/cn/nukkit/block/BlockTallGrass.java @@ -140,7 +140,7 @@ public boolean onActivate(Item item, BlockFace face, Player player) { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { boolean dropSeeds = ThreadLocalRandom.current().nextInt(10) == 0; if (item.isShears()) { //todo enchantment @@ -167,7 +167,7 @@ public Item[] getDrops(Item item) { @Override public int getToolType() { - return ItemTool.TYPE_SHEARS; + return BlockToolType.SHEARS; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockTarget.java b/src/main/java/cn/nukkit/block/BlockTarget.java index 0af6758c436..0099633ee09 100644 --- a/src/main/java/cn/nukkit/block/BlockTarget.java +++ b/src/main/java/cn/nukkit/block/BlockTarget.java @@ -1,6 +1,5 @@ package cn.nukkit.block; -import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; public class BlockTarget extends BlockSolid { @@ -18,18 +17,18 @@ public String getName() { } @Override - public double getHardness() { - return 0.5; + public float getHardness() { + return 0.5f; } @Override - public double getResistance() { - return 2.5; + public float getResistance() { + return 2.5f; } @Override public int getToolType() { - return ItemTool.TYPE_HOE; + return BlockToolType.HOE; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockTerracotta.java b/src/main/java/cn/nukkit/block/BlockTerracotta.java index 696e49badfa..512159d68fb 100644 --- a/src/main/java/cn/nukkit/block/BlockTerracotta.java +++ b/src/main/java/cn/nukkit/block/BlockTerracotta.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; @@ -34,21 +35,21 @@ public String getName() { @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override - public double getHardness() { - return 1.25; + public float getHardness() { + return 1.25f; } @Override - public double getResistance() { + public float getResistance() { return 21; } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{ toItem(true) diff --git a/src/main/java/cn/nukkit/block/BlockTerracottaGlazed.java b/src/main/java/cn/nukkit/block/BlockTerracottaGlazed.java index 5f168431331..a49dec3be84 100644 --- a/src/main/java/cn/nukkit/block/BlockTerracottaGlazed.java +++ b/src/main/java/cn/nukkit/block/BlockTerracottaGlazed.java @@ -22,22 +22,22 @@ public BlockTerracottaGlazed(int meta) { } @Override - public double getResistance() { + public float getResistance() { return 7; } @Override - public double getHardness() { - return 1.4; + public float getHardness() { + return 1.4f; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { return item.getTier() >= ItemTool.TIER_WOODEN ? new Item[]{this.toItem(true)} : new Item[0]; } diff --git a/src/main/java/cn/nukkit/block/BlockTerracottaStained.java b/src/main/java/cn/nukkit/block/BlockTerracottaStained.java index d19f9f64f43..0ac2fe2e7fd 100644 --- a/src/main/java/cn/nukkit/block/BlockTerracottaStained.java +++ b/src/main/java/cn/nukkit/block/BlockTerracottaStained.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; @@ -35,22 +36,22 @@ public int getId() { } @Override - public double getHardness() { - return 1.25; + public float getHardness() { + return 1.25f; } @Override - public double getResistance() { + public float getResistance() { return 21; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{toItem(true)}; } else { diff --git a/src/main/java/cn/nukkit/block/BlockToolType.java b/src/main/java/cn/nukkit/block/BlockToolType.java new file mode 100644 index 00000000000..ead7290bf45 --- /dev/null +++ b/src/main/java/cn/nukkit/block/BlockToolType.java @@ -0,0 +1,11 @@ +package cn.nukkit.block; + +public interface BlockToolType { + int NONE = 0; + int SWORD = 1 << 0; + int SHOVEL = 1 << 1; + int PICKAXE = 1 << 2; + int AXE = 1 << 3; + int SHEARS = 1 << 4; + int HOE = 1 << 5; +} diff --git a/src/main/java/cn/nukkit/block/BlockTrapdoor.java b/src/main/java/cn/nukkit/block/BlockTrapdoor.java index 3e9c131d982..5203b3e1bfa 100644 --- a/src/main/java/cn/nukkit/block/BlockTrapdoor.java +++ b/src/main/java/cn/nukkit/block/BlockTrapdoor.java @@ -4,7 +4,6 @@ import cn.nukkit.event.block.BlockRedstoneEvent; import cn.nukkit.event.block.DoorToggleEvent; import cn.nukkit.item.Item; -import cn.nukkit.item.ItemTool; import cn.nukkit.level.Level; import cn.nukkit.math.AxisAlignedBB; import cn.nukkit.math.BlockFace; @@ -41,12 +40,12 @@ public String getName() { } @Override - public double getHardness() { + public float getHardness() { return 3; } @Override - public double getResistance() { + public float getResistance() { return 15; } @@ -57,7 +56,7 @@ public boolean canBeActivated() { @Override public int getToolType() { - return ItemTool.TYPE_AXE; + return BlockToolType.AXE; } private static final AxisAlignedBB[] boundingBoxDamage = new AxisAlignedBB[16]; diff --git a/src/main/java/cn/nukkit/block/BlockTrapdoorIron.java b/src/main/java/cn/nukkit/block/BlockTrapdoorIron.java index 7224b6e42ce..e49d8a146e5 100644 --- a/src/main/java/cn/nukkit/block/BlockTrapdoorIron.java +++ b/src/main/java/cn/nukkit/block/BlockTrapdoorIron.java @@ -2,7 +2,6 @@ import cn.nukkit.Player; import cn.nukkit.item.Item; -import cn.nukkit.item.ItemTool; import cn.nukkit.math.BlockFace; import cn.nukkit.utils.BlockColor; @@ -30,18 +29,18 @@ public String getName() { } @Override - public double getHardness() { + public float getHardness() { return 5; } @Override - public double getResistance() { + public float getResistance() { return 25; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockTripWire.java b/src/main/java/cn/nukkit/block/BlockTripWire.java index edbaf89a821..6f0f40e8422 100644 --- a/src/main/java/cn/nukkit/block/BlockTripWire.java +++ b/src/main/java/cn/nukkit/block/BlockTripWire.java @@ -57,12 +57,12 @@ protected AxisAlignedBB recalculateBoundingBox() { } @Override - public double getResistance() { + public float getResistance() { return 0; } @Override - public double getHardness() { + public float getHardness() { return 0; } @@ -198,7 +198,7 @@ public boolean place(Item item, Block block, Block target, BlockFace face, doubl } @Override - public boolean onBreak(Item item) { + public boolean onBreak(Item item, Player player) { if (item.getId() == Item.SHEARS) { this.setDisarmed(true); this.level.setBlock(this, this, true, false); diff --git a/src/main/java/cn/nukkit/block/BlockTripWireHook.java b/src/main/java/cn/nukkit/block/BlockTripWireHook.java index 86875909bdc..961c766a4c4 100644 --- a/src/main/java/cn/nukkit/block/BlockTripWireHook.java +++ b/src/main/java/cn/nukkit/block/BlockTripWireHook.java @@ -35,12 +35,12 @@ public int getId() { } @Override - public double getHardness() { + public float getHardness() { return 0; } @Override - public double getResistance() { + public float getResistance() { return 0; } @@ -108,8 +108,8 @@ public boolean place(Item item, Block block, Block target, BlockFace face, doubl } @Override - public boolean onBreak(Item item) { - super.onBreak(item); + public boolean onBreak(Item item, Player player) { + super.onBreak(item, player); boolean attached = isAttached(); boolean powered = isPowered(); diff --git a/src/main/java/cn/nukkit/block/BlockTuff.java b/src/main/java/cn/nukkit/block/BlockTuff.java index 53749b6c160..c1f7d6962d8 100644 --- a/src/main/java/cn/nukkit/block/BlockTuff.java +++ b/src/main/java/cn/nukkit/block/BlockTuff.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; @@ -19,18 +20,18 @@ public String getName() { } @Override - public double getHardness() { - return 1.5; + public float getHardness() { + return 1.5f; } @Override - public double getResistance() { + public float getResistance() { return 30; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override @@ -39,7 +40,7 @@ public boolean canHarvestWithHand() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{ toItem(true), diff --git a/src/main/java/cn/nukkit/block/BlockTurtleEgg.java b/src/main/java/cn/nukkit/block/BlockTurtleEgg.java index 24bcc21b17b..941e730c677 100644 --- a/src/main/java/cn/nukkit/block/BlockTurtleEgg.java +++ b/src/main/java/cn/nukkit/block/BlockTurtleEgg.java @@ -42,16 +42,16 @@ public String getName() { } @Override - public double getHardness() { + public float getHardness() { if (V1_20_30.isAvailable()) { - return 0.5; + return 0.5f; } - return 0.4; + return 0.4f; } @Override - public double getResistance() { - return 2.5; + public float getResistance() { + return 2.5f; } @Override @@ -110,12 +110,7 @@ public boolean canSilkTouch() { } @Override - public boolean canHarvestWithHand() { - return false; - } - - @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { return new Item[0]; } @@ -125,7 +120,7 @@ public Item toItem(boolean addUserData) { } @Override - public boolean onBreak(Item item) { + public boolean onBreak(Item item, Player player) { level.addLevelSoundEvent(this, LevelSoundEventPacket.SOUND_BLOCK_TURTLE_EGG_BREAK); int count = getEggCount() - 1; diff --git a/src/main/java/cn/nukkit/block/BlockUndyedShulkerBox.java b/src/main/java/cn/nukkit/block/BlockUndyedShulkerBox.java index b02fedeb6f8..e3b5c9d4416 100644 --- a/src/main/java/cn/nukkit/block/BlockUndyedShulkerBox.java +++ b/src/main/java/cn/nukkit/block/BlockUndyedShulkerBox.java @@ -14,7 +14,6 @@ import cn.nukkit.inventory.InventoryHolder; import cn.nukkit.inventory.ShulkerBoxInventory; import cn.nukkit.item.Item; -import cn.nukkit.item.ItemTool; import cn.nukkit.math.BlockFace; import cn.nukkit.nbt.NBTIO; import cn.nukkit.nbt.tag.CompoundTag; @@ -52,15 +51,15 @@ public int getBlockEntityType() { } @Override - public double getHardness() { + public float getHardness() { if (ENABLE_BLOCK_DESTROY_SPEED_COMPATIBILITY || V1_20_30.isAvailable()) { return 2; } - return 2.5; + return 2.5f; } @Override - public double getResistance() { + public float getResistance() { return 10; } @@ -71,7 +70,7 @@ public boolean canBeActivated() { @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override @@ -139,11 +138,6 @@ public boolean place(Item item, Block block, Block target, BlockFace face, doubl return box != null; } - @Override - public boolean canHarvestWithHand() { - return false; - } - @Override public boolean onActivate(Item item, BlockFace face, Player player) { if (player != null) { diff --git a/src/main/java/cn/nukkit/block/BlockUnknown.java b/src/main/java/cn/nukkit/block/BlockUnknown.java index 94ef0764ccf..c17f394f56f 100644 --- a/src/main/java/cn/nukkit/block/BlockUnknown.java +++ b/src/main/java/cn/nukkit/block/BlockUnknown.java @@ -1,5 +1,7 @@ package cn.nukkit.block; +import cn.nukkit.item.Item; + /** * author: MagicDroidX * Nukkit Project @@ -26,4 +28,9 @@ public int getId() { public String getName() { return "Missing"; } + + @Override + public Item toItem() { + return Item.get(Item.AIR); + } } diff --git a/src/main/java/cn/nukkit/block/BlockUnknownBlock.java b/src/main/java/cn/nukkit/block/BlockUnknownBlock.java index 88a906d0f42..71ccff66577 100644 --- a/src/main/java/cn/nukkit/block/BlockUnknownBlock.java +++ b/src/main/java/cn/nukkit/block/BlockUnknownBlock.java @@ -17,12 +17,12 @@ public String getName() { } @Override - public double getHardness() { + public float getHardness() { return 0; } @Override - public double getResistance() { + public float getResistance() { return 0; } diff --git a/src/main/java/cn/nukkit/block/BlockVine.java b/src/main/java/cn/nukkit/block/BlockVine.java index 34145535dc2..a9faa965238 100644 --- a/src/main/java/cn/nukkit/block/BlockVine.java +++ b/src/main/java/cn/nukkit/block/BlockVine.java @@ -5,7 +5,6 @@ import cn.nukkit.event.block.BlockGrowEvent; import cn.nukkit.event.block.BlockSpreadEvent; import cn.nukkit.item.Item; -import cn.nukkit.item.ItemTool; import cn.nukkit.level.Level; import cn.nukkit.math.AxisAlignedBB; import cn.nukkit.math.BlockFace; @@ -39,12 +38,12 @@ public int getId() { } @Override - public double getHardness() { - return 0.2; + public float getHardness() { + return 0.2f; } @Override - public double getResistance() { + public float getResistance() { return 1; } @@ -135,7 +134,7 @@ public boolean place(Item item, Block block, Block target, BlockFace face, doubl } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isShears()) { return new Item[]{ toItem(true) @@ -296,7 +295,7 @@ private static int getMetaFromFace(BlockFace face) { @Override public int getToolType() { - return ItemTool.TYPE_AXE; + return BlockToolType.AXE | BlockToolType.SHEARS; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockWallBlackstone.java b/src/main/java/cn/nukkit/block/BlockWallBlackstone.java index 98d9a92a06a..599731a5140 100644 --- a/src/main/java/cn/nukkit/block/BlockWallBlackstone.java +++ b/src/main/java/cn/nukkit/block/BlockWallBlackstone.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; @@ -24,18 +25,18 @@ public String getName() { } @Override - public double getHardness() { - return 1.5; + public float getHardness() { + return 1.5f; } @Override - public double getResistance() { + public float getResistance() { return 30; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override @@ -44,7 +45,7 @@ public boolean canHarvestWithHand() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{ toItem(true), diff --git a/src/main/java/cn/nukkit/block/BlockWallBlackstoneBrickPolished.java b/src/main/java/cn/nukkit/block/BlockWallBlackstoneBrickPolished.java index 434966490b5..c20e86826b4 100644 --- a/src/main/java/cn/nukkit/block/BlockWallBlackstoneBrickPolished.java +++ b/src/main/java/cn/nukkit/block/BlockWallBlackstoneBrickPolished.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; @@ -24,18 +25,18 @@ public String getName() { } @Override - public double getHardness() { - return 1.5; + public float getHardness() { + return 1.5f; } @Override - public double getResistance() { + public float getResistance() { return 30; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override @@ -44,7 +45,7 @@ public boolean canHarvestWithHand() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{ toItem(true), diff --git a/src/main/java/cn/nukkit/block/BlockWallBlackstonePolished.java b/src/main/java/cn/nukkit/block/BlockWallBlackstonePolished.java index 46132828933..599f50fe563 100644 --- a/src/main/java/cn/nukkit/block/BlockWallBlackstonePolished.java +++ b/src/main/java/cn/nukkit/block/BlockWallBlackstonePolished.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; @@ -26,21 +27,21 @@ public String getName() { } @Override - public double getHardness() { + public float getHardness() { if (V1_20_30.isAvailable()) { return 2; } - return 1.5; + return 1.5f; } @Override - public double getResistance() { + public float getResistance() { return 30; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override @@ -49,7 +50,7 @@ public boolean canHarvestWithHand() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{ toItem(true), diff --git a/src/main/java/cn/nukkit/block/BlockWallCobblestone.java b/src/main/java/cn/nukkit/block/BlockWallCobblestone.java index 238f2a1c98c..cdc94155e9f 100644 --- a/src/main/java/cn/nukkit/block/BlockWallCobblestone.java +++ b/src/main/java/cn/nukkit/block/BlockWallCobblestone.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; @@ -69,18 +70,18 @@ public String getName() { } @Override - public double getHardness() { + public float getHardness() { return 2; } @Override - public double getResistance() { + public float getResistance() { return 30; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override @@ -89,7 +90,7 @@ public boolean canHarvestWithHand() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{ toItem(true), diff --git a/src/main/java/cn/nukkit/block/BlockWallDeepslateBrick.java b/src/main/java/cn/nukkit/block/BlockWallDeepslateBrick.java index 43e08247d47..35184995b89 100644 --- a/src/main/java/cn/nukkit/block/BlockWallDeepslateBrick.java +++ b/src/main/java/cn/nukkit/block/BlockWallDeepslateBrick.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; @@ -24,18 +25,18 @@ public String getName() { } @Override - public double getHardness() { - return 3.5; + public float getHardness() { + return 3.5f; } @Override - public double getResistance() { + public float getResistance() { return 30; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override @@ -44,7 +45,7 @@ public boolean canHarvestWithHand() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{ toItem(true), diff --git a/src/main/java/cn/nukkit/block/BlockWallDeepslateCobbled.java b/src/main/java/cn/nukkit/block/BlockWallDeepslateCobbled.java index 4804cefdc32..151ccb2df6e 100644 --- a/src/main/java/cn/nukkit/block/BlockWallDeepslateCobbled.java +++ b/src/main/java/cn/nukkit/block/BlockWallDeepslateCobbled.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; @@ -24,18 +25,18 @@ public String getName() { } @Override - public double getHardness() { - return 3.5; + public float getHardness() { + return 3.5f; } @Override - public double getResistance() { + public float getResistance() { return 30; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override @@ -44,7 +45,7 @@ public boolean canHarvestWithHand() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{ toItem(true), diff --git a/src/main/java/cn/nukkit/block/BlockWallDeepslatePolished.java b/src/main/java/cn/nukkit/block/BlockWallDeepslatePolished.java index 239e716ed8a..48356871ea2 100644 --- a/src/main/java/cn/nukkit/block/BlockWallDeepslatePolished.java +++ b/src/main/java/cn/nukkit/block/BlockWallDeepslatePolished.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; @@ -24,18 +25,18 @@ public String getName() { } @Override - public double getHardness() { - return 3.5; + public float getHardness() { + return 3.5f; } @Override - public double getResistance() { + public float getResistance() { return 30; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override @@ -44,7 +45,7 @@ public boolean canHarvestWithHand() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{ toItem(true), diff --git a/src/main/java/cn/nukkit/block/BlockWallDeepslateTile.java b/src/main/java/cn/nukkit/block/BlockWallDeepslateTile.java index 61fc9d2153c..d80b3131d34 100644 --- a/src/main/java/cn/nukkit/block/BlockWallDeepslateTile.java +++ b/src/main/java/cn/nukkit/block/BlockWallDeepslateTile.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; @@ -24,18 +25,18 @@ public String getName() { } @Override - public double getHardness() { - return 3.5; + public float getHardness() { + return 3.5f; } @Override - public double getResistance() { + public float getResistance() { return 30; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override @@ -44,7 +45,7 @@ public boolean canHarvestWithHand() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{ toItem(true), diff --git a/src/main/java/cn/nukkit/block/BlockWallMudBrick.java b/src/main/java/cn/nukkit/block/BlockWallMudBrick.java index a03db6b45b1..4f9a88c10ed 100644 --- a/src/main/java/cn/nukkit/block/BlockWallMudBrick.java +++ b/src/main/java/cn/nukkit/block/BlockWallMudBrick.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; @@ -27,21 +28,21 @@ public String getName() { } @Override - public double getHardness() { + public float getHardness() { if (ENABLE_BLOCK_DESTROY_SPEED_COMPATIBILITY || V1_20_30.isAvailable()) { - return 1.5; + return 1.5f; } return 2; } @Override - public double getResistance() { + public float getResistance() { return 15; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override @@ -50,7 +51,7 @@ public boolean canHarvestWithHand() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{ toItem(true), diff --git a/src/main/java/cn/nukkit/block/BlockWeightedPressurePlateHeavy.java b/src/main/java/cn/nukkit/block/BlockWeightedPressurePlateHeavy.java index 5edd1430396..e4bd5a5a97e 100644 --- a/src/main/java/cn/nukkit/block/BlockWeightedPressurePlateHeavy.java +++ b/src/main/java/cn/nukkit/block/BlockWeightedPressurePlateHeavy.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.math.Mth; @@ -31,22 +32,22 @@ public String getName() { } @Override - public double getHardness() { - return 0.5D; + public float getHardness() { + return 0.5f; } @Override - public double getResistance() { - return 2.5D; + public float getResistance() { + return 2.5f; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{ toItem(true) diff --git a/src/main/java/cn/nukkit/block/BlockWeightedPressurePlateLight.java b/src/main/java/cn/nukkit/block/BlockWeightedPressurePlateLight.java index 784cdbae061..f8021063232 100644 --- a/src/main/java/cn/nukkit/block/BlockWeightedPressurePlateLight.java +++ b/src/main/java/cn/nukkit/block/BlockWeightedPressurePlateLight.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; import cn.nukkit.math.Mth; @@ -31,22 +32,22 @@ public String getName() { } @Override - public double getHardness() { - return 0.5D; + public float getHardness() { + return 0.5f; } @Override - public double getResistance() { - return 2.5D; + public float getResistance() { + return 2.5f; } @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{ toItem(true) diff --git a/src/main/java/cn/nukkit/block/BlockWheat.java b/src/main/java/cn/nukkit/block/BlockWheat.java index f0fc41c816b..d17ca065d67 100644 --- a/src/main/java/cn/nukkit/block/BlockWheat.java +++ b/src/main/java/cn/nukkit/block/BlockWheat.java @@ -1,5 +1,6 @@ package cn.nukkit.block; +import cn.nukkit.Player; import cn.nukkit.item.Item; import java.util.concurrent.ThreadLocalRandom; @@ -34,7 +35,7 @@ public Item toItem(boolean addUserData) { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (this.getDamage() >= 0x07) { return new Item[]{ Item.get(Item.WHEAT), diff --git a/src/main/java/cn/nukkit/block/BlockWood.java b/src/main/java/cn/nukkit/block/BlockWood.java index 04e4e17ea3a..f7354b0a603 100644 --- a/src/main/java/cn/nukkit/block/BlockWood.java +++ b/src/main/java/cn/nukkit/block/BlockWood.java @@ -2,7 +2,6 @@ import cn.nukkit.Player; import cn.nukkit.item.Item; -import cn.nukkit.item.ItemTool; import cn.nukkit.math.BlockFace; import cn.nukkit.network.protocol.LevelSoundEventPacket; import cn.nukkit.utils.BlockColor; @@ -52,12 +51,12 @@ public int getId() { } @Override - public double getHardness() { + public float getHardness() { return 2; } @Override - public double getResistance() { + public float getResistance() { return 10; } @@ -91,7 +90,7 @@ public Item toItem(boolean addUserData) { @Override public int getToolType() { - return ItemTool.TYPE_AXE; + return BlockToolType.AXE; } @Override diff --git a/src/main/java/cn/nukkit/block/BlockWoodBark.java b/src/main/java/cn/nukkit/block/BlockWoodBark.java index d66485141cb..c043b54aeb0 100644 --- a/src/main/java/cn/nukkit/block/BlockWoodBark.java +++ b/src/main/java/cn/nukkit/block/BlockWoodBark.java @@ -2,7 +2,6 @@ import cn.nukkit.Player; import cn.nukkit.item.Item; -import cn.nukkit.item.ItemTool; import cn.nukkit.math.BlockFace; import cn.nukkit.network.protocol.LevelSoundEventPacket; import cn.nukkit.utils.BlockColor; @@ -60,16 +59,16 @@ public String getName() { @Override public int getToolType() { - return ItemTool.TYPE_AXE; + return BlockToolType.AXE; } @Override - public double getHardness() { + public float getHardness() { return 2; } @Override - public double getResistance() { + public float getResistance() { return 10; } diff --git a/src/main/java/cn/nukkit/block/BlockWool.java b/src/main/java/cn/nukkit/block/BlockWool.java index ede90427b82..a4005cb93d7 100644 --- a/src/main/java/cn/nukkit/block/BlockWool.java +++ b/src/main/java/cn/nukkit/block/BlockWool.java @@ -1,6 +1,5 @@ package cn.nukkit.block; -import cn.nukkit.item.ItemTool; import cn.nukkit.utils.BlockColor; import cn.nukkit.utils.DyeColor; @@ -34,16 +33,16 @@ public int getId() { @Override public int getToolType() { - return ItemTool.TYPE_SHEARS; + return BlockToolType.SHEARS; } @Override - public double getHardness() { - return 0.8; + public float getHardness() { + return 0.8f; } @Override - public double getResistance() { + public float getResistance() { return 4; } diff --git a/src/main/java/cn/nukkit/block/Blocks.java b/src/main/java/cn/nukkit/block/Blocks.java index 70ef6c424fe..28fbdd00127 100644 --- a/src/main/java/cn/nukkit/block/Blocks.java +++ b/src/main/java/cn/nukkit/block/Blocks.java @@ -834,7 +834,7 @@ private static void registerBlockAliases() { registerBlockAlias(BlockNames.DOUBLE_STONE_BLOCK_SLAB3, BlockNames.DOUBLE_STONE_SLAB, V1_19_0); registerBlockAlias(BlockNames.DOUBLE_STONE_BLOCK_SLAB4, BlockNames.DOUBLE_STONE_SLAB, V1_19_0); -// registerBlockAlias(BlockNames.GRASS_BLOCK, BlockNames.GRASS, V1_20_70); + registerBlockAlias(BlockNames.GRASS_BLOCK, BlockNames.GRASS, V1_20_70); } @SuppressWarnings("deprecation") @@ -873,7 +873,7 @@ private static void registerItemAliases() { registerItemAlias(ItemBlockNames.DOUBLE_STONE_BLOCK_SLAB3, ItemBlockNames.REAL_DOUBLE_STONE_SLAB, V1_19_0); registerItemAlias(ItemBlockNames.DOUBLE_STONE_BLOCK_SLAB4, ItemBlockNames.REAL_DOUBLE_STONE_SLAB, V1_19_0); -// registerItemAlias(ItemBlockNames.GRASS_BLOCK, ItemBlockNames.GRASS, V1_20_70); + registerItemAlias(ItemBlockNames.GRASS_BLOCK, ItemBlockNames.GRASS, V1_20_70); } private static void registerComplexAliases() { @@ -1087,7 +1087,7 @@ private static void registerComplexAliases() { registerComplexAlias(ItemBlockNames.HARD_GREEN_STAINED_GLASS_PANE, HARD_STAINED_GLASS_PANE, DyeColor.GREEN.getWoolData(), V1_20_60); registerComplexAlias(ItemBlockNames.HARD_RED_STAINED_GLASS_PANE, HARD_STAINED_GLASS_PANE, DyeColor.RED.getWoolData(), V1_20_60); registerComplexAlias(ItemBlockNames.HARD_BLACK_STAINED_GLASS_PANE, HARD_STAINED_GLASS_PANE, DyeColor.BLACK.getWoolData(), V1_20_60); -/* + registerComplexAlias(ItemBlockNames.OAK_LEAVES, LEAVES, BlockLeaves.OAK, V1_20_70); registerComplexAlias(ItemBlockNames.SPRUCE_LEAVES, LEAVES, BlockLeaves.SPRUCE, V1_20_70); registerComplexAlias(ItemBlockNames.BIRCH_LEAVES, LEAVES, BlockLeaves.BIRCH, V1_20_70); @@ -1123,6 +1123,37 @@ private static void registerComplexAliases() { registerComplexAlias(ItemBlockNames.STRIPPED_JUNGLE_WOOD, WOOD, BlockWoodBark.STRIPPED_BIT | BlockWoodBark.JUNGLE, V1_20_70); registerComplexAlias(ItemBlockNames.STRIPPED_ACACIA_WOOD, WOOD, BlockWoodBark.STRIPPED_BIT | BlockWoodBark.ACACIA, V1_20_70); registerComplexAlias(ItemBlockNames.STRIPPED_DARK_OAK_WOOD, WOOD, BlockWoodBark.STRIPPED_BIT | BlockWoodBark.DARK_OAK, V1_20_70); +/* + registerComplexAlias(ItemBlockNames.OAK_SAPLING, SAPLING, BlockSapling.OAK, V1_20_80); + registerComplexAlias(ItemBlockNames.SPRUCE_SAPLING, SAPLING, BlockSapling.SPRUCE, V1_20_80); + registerComplexAlias(ItemBlockNames.BIRCH_SAPLING, SAPLING, BlockSapling.BIRCH, V1_20_80); + registerComplexAlias(ItemBlockNames.JUNGLE_SAPLING, SAPLING, BlockSapling.JUNGLE, V1_20_80); + registerComplexAlias(ItemBlockNames.ACACIA_SAPLING, SAPLING, BlockSapling.ACACIA, V1_20_80); + registerComplexAlias(ItemBlockNames.DARK_OAK_SAPLING, SAPLING, BlockSapling.DARK_OAK, V1_20_80); + + registerComplexAlias(ItemBlockNames.TUBE_CORAL_FAN, CORAL_FAN, BlockCoralFan.BLUE, V1_20_80); + registerComplexAlias(ItemBlockNames.BRAIN_CORAL_FAN, CORAL_FAN, BlockCoralFan.PINK, V1_20_80); + registerComplexAlias(ItemBlockNames.BUBBLE_CORAL_FAN, CORAL_FAN, BlockCoralFan.PURPLE, V1_20_80); + registerComplexAlias(ItemBlockNames.FIRE_CORAL_FAN, CORAL_FAN, BlockCoralFan.RED, V1_20_80); + registerComplexAlias(ItemBlockNames.HORN_CORAL_FAN, CORAL_FAN, BlockCoralFan.YELLOW, V1_20_80); + + registerComplexAlias(ItemBlockNames.DEAD_TUBE_CORAL_FAN, CORAL_FAN_DEAD, BlockCoralFanDead.BLUE, V1_20_80); + registerComplexAlias(ItemBlockNames.DEAD_BRAIN_CORAL_FAN, CORAL_FAN_DEAD, BlockCoralFanDead.PINK, V1_20_80); + registerComplexAlias(ItemBlockNames.DEAD_BUBBLE_CORAL_FAN, CORAL_FAN_DEAD, BlockCoralFanDead.PURPLE, V1_20_80); + registerComplexAlias(ItemBlockNames.DEAD_FIRE_CORAL_FAN, CORAL_FAN_DEAD, BlockCoralFanDead.RED, V1_20_80); + registerComplexAlias(ItemBlockNames.DEAD_HORN_CORAL_FAN, CORAL_FAN_DEAD, BlockCoralFanDead.YELLOW, V1_20_80); + + registerComplexAlias(ItemBlockNames.POPPY, RED_FLOWER, BlockFlower.TYPE_POPPY, V1_20_80); + registerComplexAlias(ItemBlockNames.BLUE_ORCHID, RED_FLOWER, BlockFlower.TYPE_BLUE_ORCHID, V1_20_80); + registerComplexAlias(ItemBlockNames.ALLIUM, RED_FLOWER, BlockFlower.TYPE_ALLIUM, V1_20_80); + registerComplexAlias(ItemBlockNames.AZURE_BLUET, RED_FLOWER, BlockFlower.TYPE_AZURE_BLUET, V1_20_80); + registerComplexAlias(ItemBlockNames.RED_TULIP, RED_FLOWER, BlockFlower.TYPE_RED_TULIP, V1_20_80); + registerComplexAlias(ItemBlockNames.ORANGE_TULIP, RED_FLOWER, BlockFlower.TYPE_ORANGE_TULIP, V1_20_80); + registerComplexAlias(ItemBlockNames.WHITE_TULIP, RED_FLOWER, BlockFlower.TYPE_WHITE_TULIP, V1_20_80); + registerComplexAlias(ItemBlockNames.PINK_TULIP, RED_FLOWER, BlockFlower.TYPE_PINK_TULIP, V1_20_80); + registerComplexAlias(ItemBlockNames.OXEYE_DAISY, RED_FLOWER, BlockFlower.TYPE_OXEYE_DAISY, V1_20_80); + registerComplexAlias(ItemBlockNames.CORNFLOWER, RED_FLOWER, BlockFlower.TYPE_CORNFLOWER, V1_20_80); + registerComplexAlias(ItemBlockNames.LILY_OF_THE_VALLEY, RED_FLOWER, BlockFlower.TYPE_LILY_OF_THE_VALLEY, V1_20_80); */ } diff --git a/src/main/java/cn/nukkit/block/CustomBlock.java b/src/main/java/cn/nukkit/block/CustomBlock.java index e0ef07ece01..7ad1fa7d1cf 100644 --- a/src/main/java/cn/nukkit/block/CustomBlock.java +++ b/src/main/java/cn/nukkit/block/CustomBlock.java @@ -15,12 +15,12 @@ public final int getId() { } @Override - public double getHardness() { + public float getHardness() { return 0; } @Override - public double getResistance() { + public float getResistance() { return getHardness() * 5; } diff --git a/src/main/java/cn/nukkit/block/edu/BlockChemicalHeat.java b/src/main/java/cn/nukkit/block/edu/BlockChemicalHeat.java index 85c6adce8b3..04bfbde5248 100644 --- a/src/main/java/cn/nukkit/block/edu/BlockChemicalHeat.java +++ b/src/main/java/cn/nukkit/block/edu/BlockChemicalHeat.java @@ -2,6 +2,7 @@ import cn.nukkit.Player; import cn.nukkit.block.Block; +import cn.nukkit.block.BlockToolType; import cn.nukkit.block.BlockTransparent; import cn.nukkit.item.Item; import cn.nukkit.item.ItemTool; @@ -28,17 +29,17 @@ public int getId() { @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override - public double getHardness() { - return 2.5; + public float getHardness() { + return 2.5f; } @Override - public double getResistance() { - return 12.5; + public float getResistance() { + return 12.5f; } @Override @@ -47,7 +48,7 @@ public boolean canHarvestWithHand() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { if (item.isPickaxe() && item.getTier() >= ItemTool.TIER_WOODEN) { return new Item[]{ toItem(true) diff --git a/src/main/java/cn/nukkit/block/edu/BlockChemistryTable.java b/src/main/java/cn/nukkit/block/edu/BlockChemistryTable.java index 4b28535f5cc..d330b0cc77f 100644 --- a/src/main/java/cn/nukkit/block/edu/BlockChemistryTable.java +++ b/src/main/java/cn/nukkit/block/edu/BlockChemistryTable.java @@ -3,12 +3,12 @@ import cn.nukkit.Player; import cn.nukkit.block.Block; import cn.nukkit.block.BlockSolidMeta; +import cn.nukkit.block.BlockToolType; import cn.nukkit.blockentity.BlockEntities; import cn.nukkit.blockentity.BlockEntity; import cn.nukkit.blockentity.BlockEntityChemistryTable; import cn.nukkit.blockentity.BlockEntityType; import cn.nukkit.item.Item; -import cn.nukkit.item.ItemTool; import cn.nukkit.math.BlockFace; import cn.nukkit.nbt.tag.CompoundTag; @@ -56,17 +56,17 @@ public int getBlockEntityType() { @Override public int getToolType() { - return ItemTool.TYPE_PICKAXE; + return BlockToolType.PICKAXE; } @Override - public double getHardness() { - return 2.5; + public float getHardness() { + return 2.5f; } @Override - public double getResistance() { - return 12.5; + public float getResistance() { + return 12.5f; } @Override diff --git a/src/main/java/cn/nukkit/block/edu/BlockElement.java b/src/main/java/cn/nukkit/block/edu/BlockElement.java index 6a225f02343..a0be8916363 100644 --- a/src/main/java/cn/nukkit/block/edu/BlockElement.java +++ b/src/main/java/cn/nukkit/block/edu/BlockElement.java @@ -11,12 +11,12 @@ protected BlockElement() { } @Override - public double getHardness() { + public float getHardness() { return 0; } @Override - public double getResistance() { + public float getResistance() { return 0; } diff --git a/src/main/java/cn/nukkit/block/edu/BlockGlassHard.java b/src/main/java/cn/nukkit/block/edu/BlockGlassHard.java index 86585c9a8e5..b78eaecab04 100644 --- a/src/main/java/cn/nukkit/block/edu/BlockGlassHard.java +++ b/src/main/java/cn/nukkit/block/edu/BlockGlassHard.java @@ -1,5 +1,6 @@ package cn.nukkit.block.edu; +import cn.nukkit.Player; import cn.nukkit.block.BlockGlass; import cn.nukkit.item.Item; @@ -19,12 +20,12 @@ public String getName() { } @Override - public double getHardness() { + public float getHardness() { return 10; } @Override - public double getResistance() { + public float getResistance() { return 50; } @@ -34,7 +35,7 @@ public boolean canSilkTouch() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { return new Item[]{ this.toItem(true) }; diff --git a/src/main/java/cn/nukkit/block/edu/BlockGlassPaneHard.java b/src/main/java/cn/nukkit/block/edu/BlockGlassPaneHard.java index d27abcb1d1f..bbec92e41b1 100644 --- a/src/main/java/cn/nukkit/block/edu/BlockGlassPaneHard.java +++ b/src/main/java/cn/nukkit/block/edu/BlockGlassPaneHard.java @@ -1,5 +1,6 @@ package cn.nukkit.block.edu; +import cn.nukkit.Player; import cn.nukkit.block.BlockGlassPane; import cn.nukkit.item.Item; @@ -19,12 +20,12 @@ public String getName() { } @Override - public double getHardness() { + public float getHardness() { return 10; } @Override - public double getResistance() { + public float getResistance() { return 50; } @@ -34,7 +35,7 @@ public boolean canSilkTouch() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { return new Item[]{ this.toItem(true) }; diff --git a/src/main/java/cn/nukkit/block/edu/BlockGlassPaneStainedHard.java b/src/main/java/cn/nukkit/block/edu/BlockGlassPaneStainedHard.java index 50a9376f8ae..c715b3993d5 100644 --- a/src/main/java/cn/nukkit/block/edu/BlockGlassPaneStainedHard.java +++ b/src/main/java/cn/nukkit/block/edu/BlockGlassPaneStainedHard.java @@ -1,5 +1,6 @@ package cn.nukkit.block.edu; +import cn.nukkit.Player; import cn.nukkit.block.BlockGlassPaneStained; import cn.nukkit.item.Item; @@ -24,12 +25,12 @@ public String getName() { } @Override - public double getHardness() { + public float getHardness() { return 10; } @Override - public double getResistance() { + public float getResistance() { return 50; } @@ -39,7 +40,7 @@ public boolean canSilkTouch() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { return new Item[]{ this.toItem(true) }; diff --git a/src/main/java/cn/nukkit/block/edu/BlockGlassStainedHard.java b/src/main/java/cn/nukkit/block/edu/BlockGlassStainedHard.java index 7831150de09..e8c2e6387fe 100644 --- a/src/main/java/cn/nukkit/block/edu/BlockGlassStainedHard.java +++ b/src/main/java/cn/nukkit/block/edu/BlockGlassStainedHard.java @@ -1,5 +1,6 @@ package cn.nukkit.block.edu; +import cn.nukkit.Player; import cn.nukkit.block.BlockGlassStained; import cn.nukkit.item.Item; @@ -24,12 +25,12 @@ public String getName() { } @Override - public double getHardness() { + public float getHardness() { return 10; } @Override - public double getResistance() { + public float getResistance() { return 50; } @@ -39,7 +40,7 @@ public boolean canSilkTouch() { } @Override - public Item[] getDrops(Item item) { + public Item[] getDrops(Item item, Player player) { return new Item[]{ this.toItem(true) }; diff --git a/src/main/java/cn/nukkit/blockentity/BlockEntityBeacon.java b/src/main/java/cn/nukkit/blockentity/BlockEntityBeacon.java index b9d67d525f7..f81cada46b5 100644 --- a/src/main/java/cn/nukkit/blockentity/BlockEntityBeacon.java +++ b/src/main/java/cn/nukkit/blockentity/BlockEntityBeacon.java @@ -101,13 +101,14 @@ public boolean onUpdate() { //Calculate vars for beacon power int range = 10 + getPowerLevel() * 10; + int rangeSq = range * range; int duration = 9 + getPowerLevel() * 2; for (Map.Entry entry : players.entrySet()) { Player p = entry.getValue(); //If the player is in range - if (p.distance(this) < range) { + if (p.distanceSquared(this) < rangeSq) { Effect e; if (getPrimaryPower() != 0) { diff --git a/src/main/java/cn/nukkit/blockentity/BlockEntityBed.java b/src/main/java/cn/nukkit/blockentity/BlockEntityBed.java index 583909e5c54..af0e153f49f 100644 --- a/src/main/java/cn/nukkit/blockentity/BlockEntityBed.java +++ b/src/main/java/cn/nukkit/blockentity/BlockEntityBed.java @@ -19,7 +19,7 @@ public BlockEntityBed(FullChunk chunk, CompoundTag nbt) { @Override protected void initBlockEntity() { if (!this.namedTag.contains("color")) { - this.namedTag.putByte("color", 0); + this.namedTag.putByte("color", DyeColor.RED.getWoolData()); } this.color = this.namedTag.getByte("color"); diff --git a/src/main/java/cn/nukkit/command/defaults/ParticleCommand.java b/src/main/java/cn/nukkit/command/defaults/ParticleCommand.java index 539f02d61e1..cafd3386318 100644 --- a/src/main/java/cn/nukkit/command/defaults/ParticleCommand.java +++ b/src/main/java/cn/nukkit/command/defaults/ParticleCommand.java @@ -94,7 +94,17 @@ public boolean execute(CommandSender sender, String commandLabel, String[] args) Particle particle = this.getParticle(name, position, data); if (particle == null) { - position.level.addParticleEffect(position.asVector3f(), args[0], -1, position.level.getDimension().ordinal()); + long eid = -1; + if (args.length > 5) { + try { + eid = Long.parseLong(args[5]); + } catch (Exception ignored) { + } + } + + for (int i = 0; i < count; i++) { + position.level.addParticleEffect(position, args[0], eid, args.length > 6 ? args[6] : null); + } return true; } diff --git a/src/main/java/cn/nukkit/command/defaults/PlaySoundCommand.java b/src/main/java/cn/nukkit/command/defaults/PlaySoundCommand.java index 4b7a241fec4..592e936843e 100644 --- a/src/main/java/cn/nukkit/command/defaults/PlaySoundCommand.java +++ b/src/main/java/cn/nukkit/command/defaults/PlaySoundCommand.java @@ -79,13 +79,14 @@ public boolean execute(CommandSender sender, String commandLabel, String[] args) } double maxDistance = volume > 1 ? volume * 16 : 16; + double maxDistanceSq = maxDistance * maxDistance; List successes = new ObjectArrayList<>(); for (Player player : targets) { String name = player.getName(); PlaySoundPacket packet = new PlaySoundPacket(); - if (position.distance(player) > maxDistance) { + if (position.distanceSquared(player) > maxDistanceSq) { if (minimumVolume <= 0) { sender.sendMessage(String.format(TextFormat.RED + "Player %1$s is too far away to hear the sound", name)); break; diff --git a/src/main/java/cn/nukkit/entity/Entity.java b/src/main/java/cn/nukkit/entity/Entity.java index ce605750fe6..e2b4c745c70 100644 --- a/src/main/java/cn/nukkit/entity/Entity.java +++ b/src/main/java/cn/nukkit/entity/Entity.java @@ -42,6 +42,8 @@ import javax.annotation.Nullable; import java.lang.reflect.Constructor; import java.lang.reflect.Field; +import java.util.Arrays; +import java.util.Collection; import java.util.IdentityHashMap; import java.util.List; import java.util.Map; @@ -72,7 +74,7 @@ public abstract class Entity extends Location implements Metadatable, EntityData protected final Effect[] effects = new Effect[Effect.UNDEFINED]; - protected long id; + protected final long id; protected final EntityMetadata dataProperties = new EntityMetadata() .putLong(DATA_FLAGS, 0) @@ -172,8 +174,12 @@ public float getHeight() { return 0; } + public float getY(float bbh) { + return (float) y + getHeight() * bbh; + } + public float getEyeHeight() { - return this.getHeight() / 2 + 0.1f; + return this.getHeight() * 0.85f; } public float getEyeY() { @@ -213,6 +219,8 @@ protected float getBaseOffset() { } public Entity(FullChunk chunk, CompoundTag nbt) { + this.id = Entity.entityCount++; + if (this instanceof Player) { return; } @@ -280,7 +288,6 @@ protected final void init(FullChunk chunk, CompoundTag nbt) { this.isPlayer = this instanceof Player; this.temporalVector = new Vector3(); - this.id = Entity.entityCount++; this.justCreated = true; this.namedTag = nbt; @@ -591,11 +598,19 @@ public boolean hasEffect() { return false; } + public boolean canBeAffected(int effectId) { + return false; + } + public boolean addEffect(Effect effect) { if (effect == null) { return false; } + if (!canBeAffected(effect.getId())) { + return false; + } + boolean added = effect.add(this); if (!added) { return false; @@ -620,6 +635,10 @@ public boolean addEffect(Effect... effects) { continue; } + if (!canBeAffected(effect.getId())) { + continue; + } + if (!effect.add(this)) { continue; } @@ -1219,7 +1238,7 @@ public float getHealth() { } public boolean isAlive() { - return this.health > 0; + return this.health >= 1; } public boolean setHealth(float health) { @@ -1377,8 +1396,9 @@ public boolean entityBaseTick(int tickDiff) { } return false; } - if (riding != null && !riding.isAlive() && riding instanceof EntityRideable) { - ((EntityRideable) riding).dismountEntity(this); + + if (riding != null && (!riding.isAlive() || riding.isClosed())) { + riding.dismountEntity(this); } updatePassengers(); @@ -1502,7 +1522,7 @@ public void addMotion(double motionX, double motionY, double motionZ) { } public Vector2 getDirectionPlane() { - return (new Vector2((float) (-Mth.cos(Math.toRadians(this.yaw) - Math.PI / 2)), (float) (-Mth.sin(Math.toRadians(this.yaw) - Math.PI / 2)))).normalize(); + return new Vector2(-Mth.cos(Math.toRadians(this.yaw) - Math.PI / 2), -Mth.sin(Math.toRadians(this.yaw) - Math.PI / 2)).normalize(); } public BlockFace getHorizontalFacing() { @@ -1680,6 +1700,11 @@ public boolean isOnFire() { } public void setOnFire(int seconds) { + if (seconds > 0 && (hasEffect(Effect.FIRE_RESISTANCE) || !isAlive())) { + this.fireTicks = 0; + return; + } + int ticks = seconds * 20; if (ticks > this.fireTicks) { this.fireTicks = ticks; @@ -2400,7 +2425,7 @@ public boolean teleport(Location location, PlayerTeleportEvent.TeleportCause cau return false; } - public long getId() { + public final long getId() { return this.id; } @@ -2652,8 +2677,49 @@ public boolean isVanilla() { return true; } + public void lookAt(Vector3 target) { + lookAt(target.getX(), target.getY(), target.getZ()); + } + + public void lookAt(double x, double y, double z) { + double deltaX = x - getX(); + double deltaZ = z - getZ(); + setRotation(Math.toDegrees(Mth.atan2(deltaZ, deltaX)) - 90, -Math.toDegrees(Mth.atan2(y - getEyeY(), Math.sqrt(deltaX * deltaX + deltaZ * deltaZ)))); + } + + public void broadcastEntityEvent(int event) { + broadcastEntityEvent(event, 0); + } + + public void broadcastEntityEvent(int event, Player... players) { + broadcastEntityEvent(event, 0, players); + } + + public void broadcastEntityEvent(int event, Collection players) { + broadcastEntityEvent(event, 0, players); + } + + public void broadcastEntityEvent(int event, int data) { + broadcastEntityEvent(event, data, getViewers().values()); + } + + public void broadcastEntityEvent(int event, int data, Player... players) { + broadcastEntityEvent(event, data, Arrays.asList(players)); + } + + public void broadcastEntityEvent(int event, int data, Collection players) { + EntityEventPacket packet = new EntityEventPacket(); + packet.event = event; + packet.data = data; + packet.eid = getId(); + Server.broadcastPacket(players, packet); + } + @Override public boolean equals(Object obj) { + if (obj == this) { + return true; + } if (obj == null) { return false; } @@ -2661,14 +2727,12 @@ public boolean equals(Object obj) { return false; } Entity other = (Entity) obj; - return this.getId() == other.getId(); + return this.id == other.id; } @Override public int hashCode() { - int hash = 7; - hash = (int) (29 * hash + this.getId()); - return hash; + return Long.hashCode(this.id); } @AllArgsConstructor diff --git a/src/main/java/cn/nukkit/entity/EntityHuman.java b/src/main/java/cn/nukkit/entity/EntityHuman.java index a90ebc1332e..c2f49eeebc1 100644 --- a/src/main/java/cn/nukkit/entity/EntityHuman.java +++ b/src/main/java/cn/nukkit/entity/EntityHuman.java @@ -65,6 +65,11 @@ protected float getBaseOffset() { return 1.8f * 0.9f; } +// @Override +// public float getRidingOffset() { +// return getBaseOffset() - 0.4f; +// } + protected Skin skin; @Override diff --git a/src/main/java/cn/nukkit/entity/EntityLiving.java b/src/main/java/cn/nukkit/entity/EntityLiving.java index 64c6fe4d990..e42e8259c0a 100644 --- a/src/main/java/cn/nukkit/entity/EntityLiving.java +++ b/src/main/java/cn/nukkit/entity/EntityLiving.java @@ -125,6 +125,11 @@ public void collidingWith(Entity ent) { // can override (IronGolem|Bats) ent.applyEntityCollision(this); } + @Override + public boolean canBeAffected(int effectId) { + return !(this instanceof EntitySmite) || effectId != Effect.REGENERATION && effectId != Effect.POISON; + } + protected boolean isInvulnerableTo(EntityDamageEvent source) { return this.invulnerable && source.getCause() != DamageCause.VOID && !(source.getEntity() instanceof Player player && player.isCreativeLike()); } @@ -380,7 +385,7 @@ public boolean entityBaseTick(int tickDiff) { } } - if (!this.hasEffect(Effect.WATER_BREATHING) && !breathing) { + if (!(this instanceof EntitySmite) && !this.hasEffect(Effect.WATER_BREATHING) && !breathing) { if (this instanceof EntityWaterAnimal) { this.setAirTicks(300); } else if (turtleTicks == 0 || turtleTicks == 200) { diff --git a/src/main/java/cn/nukkit/entity/data/ByteEntityData.java b/src/main/java/cn/nukkit/entity/data/ByteEntityData.java index 6765ae5d7a3..a6ecea5d0bc 100644 --- a/src/main/java/cn/nukkit/entity/data/ByteEntityData.java +++ b/src/main/java/cn/nukkit/entity/data/ByteEntityData.java @@ -16,6 +16,10 @@ public ByteEntityData(int id, int data) { this.data = data; } + public ByteEntityData(int id, boolean data) { + this(id, data ? 1 : 0); + } + @Override public Integer getData() { return data; diff --git a/src/main/java/cn/nukkit/entity/data/EntityDataID.java b/src/main/java/cn/nukkit/entity/data/EntityDataID.java index 1d0cec92620..1a52ca2a620 100644 --- a/src/main/java/cn/nukkit/entity/data/EntityDataID.java +++ b/src/main/java/cn/nukkit/entity/data/EntityDataID.java @@ -173,6 +173,10 @@ public interface EntityDataID { */ int DATA_NPC_DATA = 134; //string related to npc component (json) int DATA_NUKKIT_FLAGS = 135; //long CUSTOM HACK!! + /** + * vec3. + * @since 1.20.10 + */ int DATA_COLLISION_BOX = 136; //vec3 int DATA_UNDEFINED = 137; diff --git a/src/main/java/cn/nukkit/entity/data/EntityMetadata.java b/src/main/java/cn/nukkit/entity/data/EntityMetadata.java index d81d593c17a..f9d180e2ea0 100644 --- a/src/main/java/cn/nukkit/entity/data/EntityMetadata.java +++ b/src/main/java/cn/nukkit/entity/data/EntityMetadata.java @@ -167,6 +167,22 @@ public EntityMetadata putString(int id, String value) { return this.put(new StringEntityData(id, value)); } + public EntityMetadata putPosition(int id, BlockVector3 value) { + return this.put(new IntPositionEntityData(id, value)); + } + + public EntityMetadata putPosition(int id, int x, int y, int z) { + return this.put(new IntPositionEntityData(id, x, y, z)); + } + + public EntityMetadata putFloatPosition(int id, Vector3f value) { + return this.put(new Vector3fEntityData(id, value)); + } + + public EntityMetadata putFloatPosition(int id, float x, float y, float z) { + return this.put(new Vector3fEntityData(id, x, y, z)); + } + public Int2ObjectMap getMap() { return new Int2ObjectOpenHashMap<>(map); } diff --git a/src/main/java/cn/nukkit/entity/item/EntityAreaEffectCloud.java b/src/main/java/cn/nukkit/entity/item/EntityAreaEffectCloud.java index 0084e9e2d5e..4ab63b19f98 100644 --- a/src/main/java/cn/nukkit/entity/item/EntityAreaEffectCloud.java +++ b/src/main/java/cn/nukkit/entity/item/EntityAreaEffectCloud.java @@ -287,6 +287,9 @@ public boolean onUpdate(int currentTick) { } break; case Effect.INSTANT_HEALTH: + if (!entity.canBeAffected(effect.getId())) { + break; + } if (entity instanceof EntitySmite) { if (owner != null) { entity.attack(new EntityDamageByEntityEvent(owner, entity, DamageCause.MAGIC, 0.5f * (6 << effect.getAmplifier()))); @@ -298,6 +301,9 @@ public boolean onUpdate(int currentTick) { } break; case Effect.INSTANT_DAMAGE: + if (!entity.canBeAffected(effect.getId())) { + break; + } if (entity instanceof EntitySmite) { entity.heal(new EntityRegainHealthEvent(entity, 0.5f * (4 << effect.getAmplifier()), EntityRegainHealthEvent.CAUSE_MAGIC)); } else if (owner != null) { @@ -519,4 +525,22 @@ public void setOwner(@Nullable Entity owner) { public void setAffectOwner(boolean shouldAffect) { this.affectOwner = shouldAffect; } + + public static void createDragonBreath(CompoundTag namedTag) { +// namedTag.putLong("OwnerId", ownerId); +// setAffectOwner(false); + namedTag.putInt("Duration", 200); + namedTag.putFloat("InitialRadius", 5); + namedTag.putFloat("RadiusOnUse", 0); + namedTag.putInt("ReapplicationDelay", 0); + namedTag.putShort("PotionId", Potion.HARMING); + namedTag.putList("mobEffects", new ListTag<>() + .add(LazyHolder.DRAGON_BREATH_EFFECT.save())); + namedTag.putInt("ParticleColor", 0xffdc00ef); + namedTag.putInt("ParticleId", Particle.DRAGON_BREATH); + } + + private static class LazyHolder { + private static final Effect DRAGON_BREATH_EFFECT = Effect.getEffect(Effect.INSTANT_DAMAGE); + } } diff --git a/src/main/java/cn/nukkit/entity/item/EntityBoat.java b/src/main/java/cn/nukkit/entity/item/EntityBoat.java index e404cb7cae5..30855a5d342 100644 --- a/src/main/java/cn/nukkit/entity/item/EntityBoat.java +++ b/src/main/java/cn/nukkit/entity/item/EntityBoat.java @@ -380,10 +380,19 @@ public boolean dismountEntity(Entity entity, boolean sendLinks) { boolean r = super.dismountEntity(entity, sendLinks); updatePassengers(); + + return r; + } + + @Override + public void onDismountEntity(Entity entity) { + super.onDismountEntity(entity); + entity.setDataProperty(new ByteEntityData(DATA_SEAT_LOCK_PASSENGER_ROTATION, 0)); entity.setDataProperty(new ByteEntityData(DATA_SEAT_ROTATION_OFFSET, 0)); - return r; + setDataProperty(new FloatEntityData(DATA_PADDLE_TIME_LEFT, 0)); + setDataProperty(new FloatEntityData(DATA_PADDLE_TIME_RIGHT, 0)); } @Override @@ -406,7 +415,7 @@ public void onPaddle(AnimatePacket.Action animation, float frameSeconds) { if (frameSeconds > 1000) { frameSeconds -= 1000; - } else if (frameSeconds < 1000) { + } else if (frameSeconds < -1000) { frameSeconds += 1000; } @@ -417,6 +426,9 @@ public void onPaddle(AnimatePacket.Action animation, float frameSeconds) { @Override public void applyEntityCollision(Entity entity) { + if (getPassenger() instanceof Player) { + return; + } if (entity instanceof EntityArmorStand) { return; } @@ -484,7 +496,7 @@ public void saveNBT() { this.namedTag.putByte("woodID", this.woodID); } - public void onInput(double x, double y, double z, double rotation) { + public void onInput(double x, double y, double z, double rotation, double pitch) { this.setPositionAndRotation(this.temporalVector.setComponents(x, y - this.getBaseOffset(), z), rotation, 0); } diff --git a/src/main/java/cn/nukkit/entity/item/EntityBoatChest.java b/src/main/java/cn/nukkit/entity/item/EntityBoatChest.java index 1686e4b72df..1614a0eb005 100644 --- a/src/main/java/cn/nukkit/entity/item/EntityBoatChest.java +++ b/src/main/java/cn/nukkit/entity/item/EntityBoatChest.java @@ -9,6 +9,7 @@ import cn.nukkit.item.Item; import cn.nukkit.level.format.FullChunk; import cn.nukkit.math.Vector3; +import cn.nukkit.math.Vector3f; import cn.nukkit.nbt.NBTIO; import cn.nukkit.nbt.tag.CompoundTag; import cn.nukkit.nbt.tag.ListTag; @@ -115,4 +116,9 @@ public String getInteractButtonText(Player player) { public Inventory getInventory() { return inventory; } + + @Override + public Vector3f getMountedOffset(Entity entity) { + return super.getMountedOffset(entity).add(0.2f, 0, 0); + } } diff --git a/src/main/java/cn/nukkit/entity/item/EntityFishingHook.java b/src/main/java/cn/nukkit/entity/item/EntityFishingHook.java index 0b3f7f521ae..f36ebc5c815 100644 --- a/src/main/java/cn/nukkit/entity/item/EntityFishingHook.java +++ b/src/main/java/cn/nukkit/entity/item/EntityFishingHook.java @@ -150,7 +150,7 @@ public boolean onUpdate(int currentTick) { boolean inWater = false; Vector3 moveVector = new Vector3(this.x + this.motionX, this.y + this.motionY, this.z + this.motionZ); - MovingObjectPosition blockHitResult = level.clip(copyVec(), moveVector, true, 200); + MovingObjectPosition blockHitResult = level.clip(copyVec(), moveVector, true, 200, canPassThroughBarrier()); if (updateGravity) { if (blockHitResult != null) { Vector3 hitPos = blockHitResult.hitVector; diff --git a/src/main/java/cn/nukkit/entity/item/EntityMinecartAbstract.java b/src/main/java/cn/nukkit/entity/item/EntityMinecartAbstract.java index 51509ac68d9..32e8a8d3d6b 100644 --- a/src/main/java/cn/nukkit/entity/item/EntityMinecartAbstract.java +++ b/src/main/java/cn/nukkit/entity/item/EntityMinecartAbstract.java @@ -10,7 +10,6 @@ import cn.nukkit.block.BlockRailDetector; import cn.nukkit.block.BlockRailPowered; import cn.nukkit.entity.Entity; -import cn.nukkit.entity.EntityHuman; import cn.nukkit.entity.EntityLiving; import cn.nukkit.entity.data.ByteEntityData; import cn.nukkit.entity.data.FloatEntityData; @@ -67,8 +66,6 @@ public abstract class EntityMinecartAbstract extends EntityVehicle { private double flyingZ = 0.95; private double maxSpeed = 0.4D; - private static final boolean devs = false; // Avoid maintained features into production - public abstract MinecartType getType(); public abstract boolean isRideable(); @@ -150,7 +147,7 @@ public boolean onUpdate(int currentTick) { --dy; } - Block block = level.getBlock(new Vector3(dx, dy, dz)); + Block block = level.getBlock(dx, dy, dz); // Ensure that the block is a rail if (Rail.isRailBlock(block)) { @@ -308,16 +305,17 @@ public boolean onInteract(Player p, Item item, Vector3 clickedPos) { @Override public void applyEntityCollision(Entity entity) { if (entity != riding && !(entity instanceof Player && ((Player) entity).isSpectator())) { - if (entity instanceof EntityLiving - && !(entity instanceof EntityHuman) - && motionX * motionX + motionZ * motionZ > 0.01D - && passengers.isEmpty() - && entity.riding == null - && blockInside == null) { - if (riding == null && devs) { - mountEntity(entity);// TODO: rewrite (weird riding) + /* //FIXME + if (isRideable() && blockInside == null && riding == null && entity.riding == null && passengers.isEmpty() + && entity instanceof EntityLiving && !(entity instanceof EntityHuman) + && (!(entity instanceof EntityWaterAnimal) || entity.getNetworkId() == EntityID.SQUID || entity.getNetworkId() == EntityID.GLOW_SQUID) + && entity.boundingBox.intersectsWith(boundingBox.grow(0.20000000298023224, -0.1, 0.20000000298023224)) + ) { + if (mountEntity(entity)) { + return; } } + */ if (entity instanceof EntityArmorStand) { return; @@ -601,15 +599,15 @@ private void processMovement(int dx, int dy, int dz, BlockRail block) { motionX += motionX / newMovie * nextMovie; motionZ += motionZ / newMovie * nextMovie; } else if (block.getOrientation() == Orientation.STRAIGHT_NORTH_SOUTH) { - if (level.getBlock(new Vector3(dx - 1, dy, dz)).isNormalBlock()) { + if (level.getBlock(dx - 1, dy, dz).isNormalBlock()) { motionX = 0.02D; - } else if (level.getBlock(new Vector3(dx + 1, dy, dz)).isNormalBlock()) { + } else if (level.getBlock(dx + 1, dy, dz).isNormalBlock()) { motionX = -0.02D; } } else if (block.getOrientation() == Orientation.STRAIGHT_EAST_WEST) { - if (level.getBlock(new Vector3(dx, dy, dz - 1)).isNormalBlock()) { + if (level.getBlock(dx, dy, dz - 1).isNormalBlock()) { motionZ = 0.02D; - } else if (level.getBlock(new Vector3(dx, dy, dz + 1)).isNormalBlock()) { + } else if (level.getBlock(dx, dy, dz + 1).isNormalBlock()) { motionZ = -0.02D; } } @@ -638,7 +636,7 @@ private Vector3 getNextRail(double dx, double dy, double dz) { --checkY; } - Block block = level.getBlock(new Vector3(checkX, checkY, checkZ)); + Block block = level.getBlock(checkX, checkY, checkZ); if (Rail.isRailBlock(block)) { int[][] facing = matrix[((BlockRail) block).getRealMeta()]; @@ -856,8 +854,8 @@ public void setMaximumSpeed(double speed) { @Override protected void onMountEntity(Entity entity) { entity.setDataProperty(new ByteEntityData(DATA_SEAT_LOCK_PASSENGER_ROTATION, 0)); - entity.setDataProperty(new FloatEntityData(DATA_SEAT_LOCK_PASSENGER_ROTATION_DEGREES, 0)); - entity.setDataProperty(new ByteEntityData(DATA_SEAT_ROTATION_OFFSET, 0)); entity.setDataProperty(new FloatEntityData(DATA_SEAT_LOCK_PASSENGER_ROTATION_DEGREES, 181)); + entity.setDataProperty(new ByteEntityData(DATA_SEAT_ROTATION_OFFSET, 0)); + entity.setDataProperty(new FloatEntityData(DATA_SEAT_ROTATION_OFFSET_DEGREES, 0f)); } } diff --git a/src/main/java/cn/nukkit/entity/item/EntityMinecartEmpty.java b/src/main/java/cn/nukkit/entity/item/EntityMinecartEmpty.java index 8d62d47d966..46ba73d1d3e 100644 --- a/src/main/java/cn/nukkit/entity/item/EntityMinecartEmpty.java +++ b/src/main/java/cn/nukkit/entity/item/EntityMinecartEmpty.java @@ -1,10 +1,7 @@ package cn.nukkit.entity.item; import cn.nukkit.Player; -import cn.nukkit.entity.Entity; import cn.nukkit.entity.EntityID; -import cn.nukkit.entity.EntityLiving; -import cn.nukkit.entity.passive.EntityWaterAnimal; import cn.nukkit.event.entity.EntityDamageByBlockEvent; import cn.nukkit.event.entity.EntityDamageEvent.DamageCause; import cn.nukkit.level.format.FullChunk; @@ -52,25 +49,6 @@ protected void activate(int x, int y, int z, boolean flag) { } } - @Override - public boolean onUpdate(int currentTick) { - boolean update = super.onUpdate(currentTick); - - if (this.passengers.isEmpty()) { - for (Entity entity : this.level.getCollidingEntities(this.boundingBox.grow(0.20000000298023224, 0.0D, 0.20000000298023224), this)) { - if (entity.riding != null || !(entity instanceof EntityLiving) || entity instanceof Player || entity instanceof EntityWaterAnimal) { - continue; - } - - this.mountEntity(entity); - update = true; - break; - } - } - - return update; - } - @Override public String getInteractButtonText(Player player) { return this.passengers.isEmpty() ? "action.interact.ride.minecart" : ""; diff --git a/src/main/java/cn/nukkit/entity/item/EntityPotion.java b/src/main/java/cn/nukkit/entity/item/EntityPotion.java index 1cf8262dad9..6ed0d6a08fd 100644 --- a/src/main/java/cn/nukkit/entity/item/EntityPotion.java +++ b/src/main/java/cn/nukkit/entity/item/EntityPotion.java @@ -6,6 +6,7 @@ import cn.nukkit.block.Blocks; import cn.nukkit.entity.Entity; import cn.nukkit.entity.EntityID; +import cn.nukkit.entity.data.LongEntityData; import cn.nukkit.entity.projectile.EntityProjectile; import cn.nukkit.event.potion.PotionCollideEvent; import cn.nukkit.item.Item; @@ -39,6 +40,9 @@ public EntityPotion(FullChunk chunk, CompoundTag nbt) { public EntityPotion(FullChunk chunk, CompoundTag nbt, Entity shootingEntity) { super(chunk, nbt, shootingEntity); + if (shootingEntity != null) { + this.setDataProperty(new LongEntityData(DATA_OWNER_EID, shootingEntity.getId())); + } } @Override @@ -187,7 +191,7 @@ private void splash(Entity collidedWith) { } float d = entity == collidedWith ? 1 : (float) (1 - Math.sqrt(distance) / 4); - potion.applyPotion(entity, item, 0.75f * d, d); + potion.applyPotion(entity, item, Math.min(0.75f, d), d); } } diff --git a/src/main/java/cn/nukkit/entity/item/EntityXPOrb.java b/src/main/java/cn/nukkit/entity/item/EntityXPOrb.java index c0ae7afa4ec..99a9b747ac3 100644 --- a/src/main/java/cn/nukkit/entity/item/EntityXPOrb.java +++ b/src/main/java/cn/nukkit/entity/item/EntityXPOrb.java @@ -140,7 +140,7 @@ public boolean onUpdate(int currentTick) { if (this.closestPlayer == null || this.closestPlayer.distanceSquared(this) > 64.0D) { for (Player p : this.getViewers().values()) { - if (!p.isSpectator() && p.distance(this) <= 8) { + if (!p.isSpectator() && p.distanceSquared(this) <= 8 * 8) { this.closestPlayer = p; break; } diff --git a/src/main/java/cn/nukkit/entity/mob/EntityCaveSpider.java b/src/main/java/cn/nukkit/entity/mob/EntityCaveSpider.java index 5c1d43d1e9f..ea729aec79b 100644 --- a/src/main/java/cn/nukkit/entity/mob/EntityCaveSpider.java +++ b/src/main/java/cn/nukkit/entity/mob/EntityCaveSpider.java @@ -1,11 +1,14 @@ package cn.nukkit.entity.mob; import cn.nukkit.Player; +import cn.nukkit.entity.Entity; import cn.nukkit.entity.EntityArthropod; import cn.nukkit.entity.EntityID; import cn.nukkit.item.Item; import cn.nukkit.level.format.FullChunk; +import cn.nukkit.math.Vector3f; import cn.nukkit.nbt.tag.CompoundTag; +import cn.nukkit.potion.Effect; import java.util.concurrent.ThreadLocalRandom; @@ -64,4 +67,24 @@ public void spawnTo(Player player) { super.spawnTo(player); } + + @Override + public boolean canBeAffected(int effectId) { + if (effectId == Effect.POISON) { + return false; + } + return super.canBeAffected(effectId); + } + + @Override + public Vector3f getMountedOffset(Entity entity) { + switch (entity.getNetworkId()) { + case EntityID.SKELETON: + case EntityID.STRAY: + return new Vector3f(0, 0.3f + entity.getRidingOffset(), -0.1f); + case EntityID.WITHER_SKELETON: + return new Vector3f(0, 0.25f + entity.getRidingOffset(), -0.1f); + } + return new Vector3f(0, 0.3f + entity.getRidingOffset(), 0); + } } diff --git a/src/main/java/cn/nukkit/entity/mob/EntityDrowned.java b/src/main/java/cn/nukkit/entity/mob/EntityDrowned.java index 25b88fe151a..03e360566fe 100644 --- a/src/main/java/cn/nukkit/entity/mob/EntityDrowned.java +++ b/src/main/java/cn/nukkit/entity/mob/EntityDrowned.java @@ -68,6 +68,9 @@ public void spawnTo(Player player) { @Override public float getRidingOffset() { + if (getDataFlag(DATA_FLAG_BABY)) { + return super.getRidingOffset(); + } return -0.5f; } diff --git a/src/main/java/cn/nukkit/entity/mob/EntityEnderDragon.java b/src/main/java/cn/nukkit/entity/mob/EntityEnderDragon.java index ed98aeaaa16..faefa1f632d 100644 --- a/src/main/java/cn/nukkit/entity/mob/EntityEnderDragon.java +++ b/src/main/java/cn/nukkit/entity/mob/EntityEnderDragon.java @@ -81,4 +81,9 @@ protected DataPacket createAddEntityPacket() { return addEntity; } + + @Override + public boolean canBeAffected(int effectId) { + return false; + } } diff --git a/src/main/java/cn/nukkit/entity/mob/EntityEndermite.java b/src/main/java/cn/nukkit/entity/mob/EntityEndermite.java index d6e2ba8b56f..c58c0b6f004 100644 --- a/src/main/java/cn/nukkit/entity/mob/EntityEndermite.java +++ b/src/main/java/cn/nukkit/entity/mob/EntityEndermite.java @@ -53,4 +53,9 @@ public void spawnTo(Player player) { super.spawnTo(player); } + + @Override + public float getRidingOffset() { + return 0.2f; + } } diff --git a/src/main/java/cn/nukkit/entity/mob/EntityHoglin.java b/src/main/java/cn/nukkit/entity/mob/EntityHoglin.java index 657d5a6beeb..50a97e0f279 100644 --- a/src/main/java/cn/nukkit/entity/mob/EntityHoglin.java +++ b/src/main/java/cn/nukkit/entity/mob/EntityHoglin.java @@ -1,9 +1,11 @@ package cn.nukkit.entity.mob; import cn.nukkit.Player; +import cn.nukkit.entity.Entity; import cn.nukkit.entity.EntityID; import cn.nukkit.item.Item; import cn.nukkit.level.format.FullChunk; +import cn.nukkit.math.Vector3f; import cn.nukkit.nbt.tag.CompoundTag; import java.util.concurrent.ThreadLocalRandom; @@ -64,4 +66,11 @@ public Item[] getDrops() { Item.get(Item.LEATHER, 0, random.nextInt(2)), }; } + + @Override + public Vector3f getMountedOffset(Entity entity) { + return new Vector3f(0, 0.9f + entity.getRidingOffset(), -0.3f); +// return new Vector3f(0, 2.4f + entity.getRidingOffset(), -0.3f); //TODO: middle +// return new Vector3f(0, 3.9f + entity.getRidingOffset(), -0.3f); //TODO: top + } } diff --git a/src/main/java/cn/nukkit/entity/mob/EntityHusk.java b/src/main/java/cn/nukkit/entity/mob/EntityHusk.java index 66f9c54000f..b1733f78bff 100644 --- a/src/main/java/cn/nukkit/entity/mob/EntityHusk.java +++ b/src/main/java/cn/nukkit/entity/mob/EntityHusk.java @@ -1,11 +1,13 @@ package cn.nukkit.entity.mob; import cn.nukkit.Player; +import cn.nukkit.entity.Entity; import cn.nukkit.entity.EntityID; import cn.nukkit.entity.EntitySmite; import cn.nukkit.event.entity.EntityDamageByEntityEvent; import cn.nukkit.item.Item; import cn.nukkit.level.format.FullChunk; +import cn.nukkit.math.Vector3f; import cn.nukkit.nbt.tag.CompoundTag; import java.util.concurrent.ThreadLocalRandom; @@ -68,6 +70,9 @@ public void spawnTo(Player player) { @Override public float getRidingOffset() { + if (getDataFlag(DATA_FLAG_BABY)) { + return super.getRidingOffset(); + } return -0.5f; } @@ -83,4 +88,9 @@ protected void onAttackSuccess(EntityDamageByEntityEvent source) { } source.getEntity().setOnFire(2 * difficulty); } + + @Override + public Vector3f getMountedOffset(Entity entity) { + return new Vector3f(0, 1.1f + entity.getRidingOffset(), -0.35f); + } } diff --git a/src/main/java/cn/nukkit/entity/mob/EntityPiglinBrute.java b/src/main/java/cn/nukkit/entity/mob/EntityPiglinBrute.java index 15057efa960..57383b181c2 100644 --- a/src/main/java/cn/nukkit/entity/mob/EntityPiglinBrute.java +++ b/src/main/java/cn/nukkit/entity/mob/EntityPiglinBrute.java @@ -52,6 +52,9 @@ public void spawnTo(Player player) { @Override public float getRidingOffset() { + if (getDataFlag(DATA_FLAG_BABY)) { + return super.getRidingOffset(); + } return -0.5f; } } diff --git a/src/main/java/cn/nukkit/entity/mob/EntityRavager.java b/src/main/java/cn/nukkit/entity/mob/EntityRavager.java index a22e3eb70ba..89f955c6092 100644 --- a/src/main/java/cn/nukkit/entity/mob/EntityRavager.java +++ b/src/main/java/cn/nukkit/entity/mob/EntityRavager.java @@ -1,8 +1,10 @@ package cn.nukkit.entity.mob; import cn.nukkit.Player; +import cn.nukkit.entity.Entity; import cn.nukkit.entity.EntityID; import cn.nukkit.level.format.FullChunk; +import cn.nukkit.math.Vector3f; import cn.nukkit.nbt.tag.CompoundTag; public class EntityRavager extends EntityMob { @@ -49,4 +51,9 @@ public void spawnTo(Player player) { super.spawnTo(player); } + + @Override + public Vector3f getMountedOffset(Entity entity) { + return new Vector3f(0, 2.1f + entity.getRidingOffset(), -0.3f); + } } diff --git a/src/main/java/cn/nukkit/entity/mob/EntitySpider.java b/src/main/java/cn/nukkit/entity/mob/EntitySpider.java index b7a323e90ea..4b4da744351 100644 --- a/src/main/java/cn/nukkit/entity/mob/EntitySpider.java +++ b/src/main/java/cn/nukkit/entity/mob/EntitySpider.java @@ -1,11 +1,14 @@ package cn.nukkit.entity.mob; import cn.nukkit.Player; +import cn.nukkit.entity.Entity; import cn.nukkit.entity.EntityArthropod; import cn.nukkit.entity.EntityID; import cn.nukkit.item.Item; import cn.nukkit.level.format.FullChunk; +import cn.nukkit.math.Vector3f; import cn.nukkit.nbt.tag.CompoundTag; +import cn.nukkit.potion.Effect; import java.util.concurrent.ThreadLocalRandom; @@ -64,4 +67,23 @@ public void spawnTo(Player player) { super.spawnTo(player); } + + @Override + public boolean canBeAffected(int effectId) { + if (effectId == Effect.POISON) { + return false; + } + return super.canBeAffected(effectId); + } + + @Override + public Vector3f getMountedOffset(Entity entity) { + switch (entity.getNetworkId()) { + case EntityID.SKELETON: + case EntityID.STRAY: + case EntityID.WITHER_SKELETON: + return new Vector3f(0, 0.54f + entity.getRidingOffset(), 0); + } + return new Vector3f(0, 0.54f + entity.getRidingOffset(), -0.1f); + } } diff --git a/src/main/java/cn/nukkit/entity/mob/EntityWither.java b/src/main/java/cn/nukkit/entity/mob/EntityWither.java index cdc651d49a1..4e2ad48ac9d 100644 --- a/src/main/java/cn/nukkit/entity/mob/EntityWither.java +++ b/src/main/java/cn/nukkit/entity/mob/EntityWither.java @@ -9,6 +9,7 @@ import cn.nukkit.nbt.tag.CompoundTag; import cn.nukkit.network.protocol.AddEntityPacket; import cn.nukkit.network.protocol.DataPacket; +import cn.nukkit.potion.Effect; /** * @author PikyCZ @@ -90,4 +91,9 @@ public Item[] getDrops() { Item.get(Item.NETHER_STAR), }; } + + @Override + public boolean canBeAffected(int effectId) { + return effectId == Effect.INSTANT_DAMAGE || effectId == Effect.INSTANT_HEALTH; + } } diff --git a/src/main/java/cn/nukkit/entity/mob/EntityWitherSkeleton.java b/src/main/java/cn/nukkit/entity/mob/EntityWitherSkeleton.java index 5c21472fdcc..053f84640ea 100644 --- a/src/main/java/cn/nukkit/entity/mob/EntityWitherSkeleton.java +++ b/src/main/java/cn/nukkit/entity/mob/EntityWitherSkeleton.java @@ -6,6 +6,7 @@ import cn.nukkit.item.Item; import cn.nukkit.level.format.FullChunk; import cn.nukkit.nbt.tag.CompoundTag; +import cn.nukkit.potion.Effect; import java.util.concurrent.ThreadLocalRandom; @@ -70,4 +71,12 @@ public Item[] getDrops() { public float getRidingOffset() { return -0.5f; } + + @Override + public boolean canBeAffected(int effectId) { + if (effectId == Effect.WITHER) { + return false; + } + return super.canBeAffected(effectId); + } } diff --git a/src/main/java/cn/nukkit/entity/mob/EntityZoglin.java b/src/main/java/cn/nukkit/entity/mob/EntityZoglin.java index 02a2bd9d5b3..c26643417e6 100644 --- a/src/main/java/cn/nukkit/entity/mob/EntityZoglin.java +++ b/src/main/java/cn/nukkit/entity/mob/EntityZoglin.java @@ -2,6 +2,7 @@ import cn.nukkit.Player; import cn.nukkit.entity.EntityID; +import cn.nukkit.entity.EntitySmite; import cn.nukkit.item.Item; import cn.nukkit.level.format.FullChunk; import cn.nukkit.nbt.tag.CompoundTag; @@ -11,7 +12,7 @@ /** * @author Erik Miller | EinBexiii */ -public class EntityZoglin extends EntityMob { +public class EntityZoglin extends EntityMob implements EntitySmite { public final static int NETWORK_ID = EntityID.ZOGLIN; @@ -63,9 +64,4 @@ public Item[] getDrops() { Item.get(Item.ROTTEN_FLESH, 0, random.nextInt(1, 4)), }; } - - @Override - public float getRidingOffset() { - return -0.5f; - } } diff --git a/src/main/java/cn/nukkit/entity/mob/EntityZombie.java b/src/main/java/cn/nukkit/entity/mob/EntityZombie.java index 5a1ad430f93..09aa23d25ca 100644 --- a/src/main/java/cn/nukkit/entity/mob/EntityZombie.java +++ b/src/main/java/cn/nukkit/entity/mob/EntityZombie.java @@ -1,11 +1,13 @@ package cn.nukkit.entity.mob; import cn.nukkit.Player; +import cn.nukkit.entity.Entity; import cn.nukkit.entity.EntityID; import cn.nukkit.entity.EntitySmite; import cn.nukkit.event.entity.EntityDamageByEntityEvent; import cn.nukkit.item.Item; import cn.nukkit.level.format.FullChunk; +import cn.nukkit.math.Vector3f; import cn.nukkit.nbt.tag.CompoundTag; import java.util.concurrent.ThreadLocalRandom; @@ -68,6 +70,9 @@ public void spawnTo(Player player) { @Override public float getRidingOffset() { + if (getDataFlag(DATA_FLAG_BABY)) { + return super.getRidingOffset(); + } return -0.5f; } @@ -83,4 +88,9 @@ protected void onAttackSuccess(EntityDamageByEntityEvent source) { } source.getEntity().setOnFire(2 * difficulty); } + + @Override + public Vector3f getMountedOffset(Entity entity) { + return new Vector3f(0, 1.1f + entity.getRidingOffset(), -0.35f); + } } diff --git a/src/main/java/cn/nukkit/entity/mob/EntityZombiePigman.java b/src/main/java/cn/nukkit/entity/mob/EntityZombiePigman.java index 4a3723b5e45..b50cee84f40 100644 --- a/src/main/java/cn/nukkit/entity/mob/EntityZombiePigman.java +++ b/src/main/java/cn/nukkit/entity/mob/EntityZombiePigman.java @@ -1,10 +1,12 @@ package cn.nukkit.entity.mob; import cn.nukkit.Player; +import cn.nukkit.entity.Entity; import cn.nukkit.entity.EntityID; import cn.nukkit.entity.EntitySmite; import cn.nukkit.item.Item; import cn.nukkit.level.format.FullChunk; +import cn.nukkit.math.Vector3f; import cn.nukkit.nbt.tag.CompoundTag; import java.util.concurrent.ThreadLocalRandom; @@ -68,6 +70,14 @@ public Item[] getDrops() { @Override public float getRidingOffset() { + if (getDataFlag(DATA_FLAG_BABY)) { + return super.getRidingOffset(); + } return -0.5f; } + + @Override + public Vector3f getMountedOffset(Entity entity) { + return new Vector3f(0, 1.1f + entity.getRidingOffset(), -0.35f); + } } diff --git a/src/main/java/cn/nukkit/entity/mob/EntityZombieVillager.java b/src/main/java/cn/nukkit/entity/mob/EntityZombieVillager.java index cd8a181e098..531ff80eeaf 100644 --- a/src/main/java/cn/nukkit/entity/mob/EntityZombieVillager.java +++ b/src/main/java/cn/nukkit/entity/mob/EntityZombieVillager.java @@ -1,11 +1,13 @@ package cn.nukkit.entity.mob; import cn.nukkit.Player; +import cn.nukkit.entity.Entity; import cn.nukkit.entity.EntityID; import cn.nukkit.entity.EntitySmite; import cn.nukkit.event.entity.EntityDamageByEntityEvent; import cn.nukkit.item.Item; import cn.nukkit.level.format.FullChunk; +import cn.nukkit.math.Vector3f; import cn.nukkit.nbt.tag.CompoundTag; import java.util.concurrent.ThreadLocalRandom; @@ -65,6 +67,9 @@ public Item[] getDrops() { @Override public float getRidingOffset() { + if (getDataFlag(DATA_FLAG_BABY)) { + return super.getRidingOffset(); + } return -0.5f; } @@ -80,4 +85,9 @@ protected void onAttackSuccess(EntityDamageByEntityEvent source) { } source.getEntity().setOnFire(2 * difficulty); } + + @Override + public Vector3f getMountedOffset(Entity entity) { + return new Vector3f(0, 1.1f + entity.getRidingOffset(), -0.35f); + } } diff --git a/src/main/java/cn/nukkit/entity/mob/EntityZombieVillagerV1.java b/src/main/java/cn/nukkit/entity/mob/EntityZombieVillagerV1.java index 0286adbcb5d..83f16ae0548 100644 --- a/src/main/java/cn/nukkit/entity/mob/EntityZombieVillagerV1.java +++ b/src/main/java/cn/nukkit/entity/mob/EntityZombieVillagerV1.java @@ -1,11 +1,13 @@ package cn.nukkit.entity.mob; import cn.nukkit.Player; +import cn.nukkit.entity.Entity; import cn.nukkit.entity.EntityID; import cn.nukkit.entity.EntitySmite; import cn.nukkit.event.entity.EntityDamageByEntityEvent; import cn.nukkit.item.Item; import cn.nukkit.level.format.FullChunk; +import cn.nukkit.math.Vector3f; import cn.nukkit.nbt.tag.CompoundTag; import java.util.concurrent.ThreadLocalRandom; @@ -68,6 +70,9 @@ public Item[] getDrops() { @Override public float getRidingOffset() { + if (getDataFlag(DATA_FLAG_BABY)) { + return super.getRidingOffset(); + } return -0.5f; } @@ -83,4 +88,9 @@ protected void onAttackSuccess(EntityDamageByEntityEvent source) { } source.getEntity().setOnFire(2 * difficulty); } + + @Override + public Vector3f getMountedOffset(Entity entity) { + return new Vector3f(0, 1.1f + entity.getRidingOffset(), -0.35f); + } } diff --git a/src/main/java/cn/nukkit/entity/passive/EntityAbstractHorse.java b/src/main/java/cn/nukkit/entity/passive/EntityAbstractHorse.java index fce5e6dfe8a..b875da09b20 100644 --- a/src/main/java/cn/nukkit/entity/passive/EntityAbstractHorse.java +++ b/src/main/java/cn/nukkit/entity/passive/EntityAbstractHorse.java @@ -74,7 +74,7 @@ public boolean mountEntity(Entity entity) { boolean mounted = super.mountEntity(entity) && entity.riding != null; if (mounted) { entity.setDataProperty(new ByteEntityData(DATA_SEAT_LOCK_PASSENGER_ROTATION, 0)); - entity.setDataProperty(new FloatEntityData(DATA_SEAT_LOCK_PASSENGER_ROTATION_DEGREES, 0f)); + entity.setDataProperty(new FloatEntityData(DATA_SEAT_LOCK_PASSENGER_ROTATION_DEGREES, 181f)); entity.setDataProperty(new ByteEntityData(DATA_SEAT_ROTATION_OFFSET, 0)); entity.setDataProperty(new FloatEntityData(DATA_SEAT_ROTATION_OFFSET_DEGREES, 0f)); } diff --git a/src/main/java/cn/nukkit/entity/passive/EntityBee.java b/src/main/java/cn/nukkit/entity/passive/EntityBee.java index 2a05ec95365..d543cd0cd71 100644 --- a/src/main/java/cn/nukkit/entity/passive/EntityBee.java +++ b/src/main/java/cn/nukkit/entity/passive/EntityBee.java @@ -1,6 +1,7 @@ package cn.nukkit.entity.passive; import cn.nukkit.Player; +import cn.nukkit.entity.EntityArthropod; import cn.nukkit.entity.EntityID; import cn.nukkit.level.format.FullChunk; import cn.nukkit.nbt.tag.CompoundTag; @@ -9,7 +10,7 @@ * @author Kaooot * @version 1.0 */ -public class EntityBee extends EntityAnimal { +public class EntityBee extends EntityAnimal implements EntityArthropod { public static final int NETWORK_ID = EntityID.BEE; diff --git a/src/main/java/cn/nukkit/entity/passive/EntityCamel.java b/src/main/java/cn/nukkit/entity/passive/EntityCamel.java index bfeedd7ed50..b6a4923037d 100644 --- a/src/main/java/cn/nukkit/entity/passive/EntityCamel.java +++ b/src/main/java/cn/nukkit/entity/passive/EntityCamel.java @@ -1,8 +1,10 @@ package cn.nukkit.entity.passive; import cn.nukkit.Player; +import cn.nukkit.entity.Entity; import cn.nukkit.entity.EntityID; import cn.nukkit.level.format.FullChunk; +import cn.nukkit.math.Vector3f; import cn.nukkit.nbt.tag.CompoundTag; public class EntityCamel extends EntityAnimal { @@ -48,4 +50,14 @@ public void spawnTo(Player player) { super.spawnTo(player); } + + @Override + public Vector3f getMountedOffset(Entity entity) { + if (entity.getNetworkId() == -1) { + return new Vector3f(0, 3.12501f, 0.5f); +// return new Vector3f(0, 3.12501f, -0.5f); //TODO: passenger + } + return new Vector3f(0, 1.905f + entity.getRidingOffset(), 0.5f); +// return new Vector3f(0, 1.905f + entity.getRidingOffset(), -0.5f); //TODO: passenger + } } diff --git a/src/main/java/cn/nukkit/entity/passive/EntityCat.java b/src/main/java/cn/nukkit/entity/passive/EntityCat.java index 4e8ef77807c..519eaa70de9 100644 --- a/src/main/java/cn/nukkit/entity/passive/EntityCat.java +++ b/src/main/java/cn/nukkit/entity/passive/EntityCat.java @@ -1,9 +1,11 @@ package cn.nukkit.entity.passive; import cn.nukkit.Player; +import cn.nukkit.entity.Entity; import cn.nukkit.entity.EntityID; import cn.nukkit.item.Item; import cn.nukkit.level.format.FullChunk; +import cn.nukkit.math.Vector3f; import cn.nukkit.nbt.tag.CompoundTag; import java.util.concurrent.ThreadLocalRandom; @@ -59,4 +61,9 @@ public Item[] getDrops() { Item.get(Item.STRING, 0, random.nextInt(3)), }; } + + @Override + public Vector3f getMountedOffset(Entity entity) { + return new Vector3f(0, 0.35f + entity.getRidingOffset(), 0); + } } diff --git a/src/main/java/cn/nukkit/entity/passive/EntityChicken.java b/src/main/java/cn/nukkit/entity/passive/EntityChicken.java index 13352473904..7b401b705bd 100644 --- a/src/main/java/cn/nukkit/entity/passive/EntityChicken.java +++ b/src/main/java/cn/nukkit/entity/passive/EntityChicken.java @@ -1,9 +1,11 @@ package cn.nukkit.entity.passive; import cn.nukkit.Player; +import cn.nukkit.entity.Entity; import cn.nukkit.entity.EntityID; import cn.nukkit.item.Item; import cn.nukkit.level.format.FullChunk; +import cn.nukkit.math.Vector3f; import cn.nukkit.nbt.tag.CompoundTag; import java.util.concurrent.ThreadLocalRandom; @@ -72,4 +74,9 @@ public void spawnTo(Player player) { super.spawnTo(player); } + + @Override + public Vector3f getMountedOffset(Entity entity) { + return new Vector3f(0, 0.4f + entity.getRidingOffset(), 0); + } } diff --git a/src/main/java/cn/nukkit/entity/passive/EntityCow.java b/src/main/java/cn/nukkit/entity/passive/EntityCow.java index d16b2bb40d6..6947c87c5cb 100644 --- a/src/main/java/cn/nukkit/entity/passive/EntityCow.java +++ b/src/main/java/cn/nukkit/entity/passive/EntityCow.java @@ -1,9 +1,11 @@ package cn.nukkit.entity.passive; import cn.nukkit.Player; +import cn.nukkit.entity.Entity; import cn.nukkit.entity.EntityID; import cn.nukkit.item.Item; import cn.nukkit.level.format.FullChunk; +import cn.nukkit.math.Vector3f; import cn.nukkit.nbt.tag.CompoundTag; import java.util.concurrent.ThreadLocalRandom; @@ -64,4 +66,9 @@ public void spawnTo(Player player) { super.spawnTo(player); } + + @Override + public Vector3f getMountedOffset(Entity entity) { + return new Vector3f(0, 1.105f + entity.getRidingOffset(), 0); + } } diff --git a/src/main/java/cn/nukkit/entity/passive/EntityDonkey.java b/src/main/java/cn/nukkit/entity/passive/EntityDonkey.java index f250aac2b04..2f25cc580f6 100644 --- a/src/main/java/cn/nukkit/entity/passive/EntityDonkey.java +++ b/src/main/java/cn/nukkit/entity/passive/EntityDonkey.java @@ -1,9 +1,11 @@ package cn.nukkit.entity.passive; import cn.nukkit.Player; +import cn.nukkit.entity.Entity; import cn.nukkit.entity.EntityID; import cn.nukkit.item.Item; import cn.nukkit.level.format.FullChunk; +import cn.nukkit.math.Vector3f; import cn.nukkit.nbt.tag.CompoundTag; import java.util.concurrent.ThreadLocalRandom; @@ -62,4 +64,12 @@ public void spawnTo(Player player) { super.spawnTo(player); } + + @Override + public Vector3f getMountedOffset(Entity entity) { + if (entity.getNetworkId() == -1) { + return new Vector3f(0, 2.14501f, -0.2f); + } + return new Vector3f(0, 0.925f + entity.getRidingOffset(), -0.2f); + } } diff --git a/src/main/java/cn/nukkit/entity/passive/EntityHorse.java b/src/main/java/cn/nukkit/entity/passive/EntityHorse.java index 347a0e4aafd..c0937abd603 100644 --- a/src/main/java/cn/nukkit/entity/passive/EntityHorse.java +++ b/src/main/java/cn/nukkit/entity/passive/EntityHorse.java @@ -1,9 +1,11 @@ package cn.nukkit.entity.passive; import cn.nukkit.Player; +import cn.nukkit.entity.Entity; import cn.nukkit.entity.EntityID; import cn.nukkit.item.Item; import cn.nukkit.level.format.FullChunk; +import cn.nukkit.math.Vector3f; import cn.nukkit.nbt.tag.CompoundTag; import java.util.Arrays; @@ -65,4 +67,12 @@ public void spawnTo(Player player) { super.spawnTo(player); } + + @Override + public Vector3f getMountedOffset(Entity entity) { + if (entity.getNetworkId() == -1) { + return new Vector3f(0, 2.3200102f, -0.2f); + } + return new Vector3f(0, 1.1f + entity.getRidingOffset(), -0.2f); + } } diff --git a/src/main/java/cn/nukkit/entity/passive/EntityLlama.java b/src/main/java/cn/nukkit/entity/passive/EntityLlama.java index 270ae834da9..2565bee0e7c 100644 --- a/src/main/java/cn/nukkit/entity/passive/EntityLlama.java +++ b/src/main/java/cn/nukkit/entity/passive/EntityLlama.java @@ -1,9 +1,11 @@ package cn.nukkit.entity.passive; import cn.nukkit.Player; +import cn.nukkit.entity.Entity; import cn.nukkit.entity.EntityID; import cn.nukkit.item.Item; import cn.nukkit.level.format.FullChunk; +import cn.nukkit.math.Vector3f; import cn.nukkit.nbt.tag.CompoundTag; import java.util.concurrent.ThreadLocalRandom; @@ -62,4 +64,12 @@ public Item[] getDrops() { Item.get(Item.LEATHER, 0, ThreadLocalRandom.current().nextInt(3)), }; } + + @Override + public Vector3f getMountedOffset(Entity entity) { + if (entity.getNetworkId() == -1) { + return new Vector3f(0, 2.3900099f, -0.3f); + } + return new Vector3f(0, 1.17f + entity.getRidingOffset(), -0.3f); + } } diff --git a/src/main/java/cn/nukkit/entity/passive/EntityMooshroom.java b/src/main/java/cn/nukkit/entity/passive/EntityMooshroom.java index e906fb7c771..f7b25caab11 100644 --- a/src/main/java/cn/nukkit/entity/passive/EntityMooshroom.java +++ b/src/main/java/cn/nukkit/entity/passive/EntityMooshroom.java @@ -1,9 +1,11 @@ package cn.nukkit.entity.passive; import cn.nukkit.Player; +import cn.nukkit.entity.Entity; import cn.nukkit.entity.EntityID; import cn.nukkit.item.Item; import cn.nukkit.level.format.FullChunk; +import cn.nukkit.math.Vector3f; import cn.nukkit.nbt.tag.CompoundTag; import java.util.concurrent.ThreadLocalRandom; @@ -64,4 +66,9 @@ public void spawnTo(Player player) { super.spawnTo(player); } + + @Override + public Vector3f getMountedOffset(Entity entity) { + return new Vector3f(0, 1.105f + entity.getRidingOffset(), 0); + } } diff --git a/src/main/java/cn/nukkit/entity/passive/EntityMule.java b/src/main/java/cn/nukkit/entity/passive/EntityMule.java index 8394b4459e3..e42ea08c711 100644 --- a/src/main/java/cn/nukkit/entity/passive/EntityMule.java +++ b/src/main/java/cn/nukkit/entity/passive/EntityMule.java @@ -1,9 +1,11 @@ package cn.nukkit.entity.passive; import cn.nukkit.Player; +import cn.nukkit.entity.Entity; import cn.nukkit.entity.EntityID; import cn.nukkit.item.Item; import cn.nukkit.level.format.FullChunk; +import cn.nukkit.math.Vector3f; import cn.nukkit.nbt.tag.CompoundTag; import java.util.concurrent.ThreadLocalRandom; @@ -62,4 +64,12 @@ public void spawnTo(Player player) { super.spawnTo(player); } + + @Override + public Vector3f getMountedOffset(Entity entity) { + if (entity.getNetworkId() == -1) { + return new Vector3f(0, 2.1950102f, -0.2f); + } + return new Vector3f(0, 0.975f + entity.getRidingOffset(), -0.2f); + } } diff --git a/src/main/java/cn/nukkit/entity/passive/EntityOcelot.java b/src/main/java/cn/nukkit/entity/passive/EntityOcelot.java index 1c43f533c57..ead526ce53e 100644 --- a/src/main/java/cn/nukkit/entity/passive/EntityOcelot.java +++ b/src/main/java/cn/nukkit/entity/passive/EntityOcelot.java @@ -1,9 +1,11 @@ package cn.nukkit.entity.passive; import cn.nukkit.Player; +import cn.nukkit.entity.Entity; import cn.nukkit.entity.EntityID; import cn.nukkit.item.Item; import cn.nukkit.level.format.FullChunk; +import cn.nukkit.math.Vector3f; import cn.nukkit.nbt.tag.CompoundTag; /** @@ -59,4 +61,9 @@ public void spawnTo(Player player) { super.spawnTo(player); } + + @Override + public Vector3f getMountedOffset(Entity entity) { + return new Vector3f(0, 0.35f + entity.getRidingOffset(), 0); + } } diff --git a/src/main/java/cn/nukkit/entity/passive/EntityPanda.java b/src/main/java/cn/nukkit/entity/passive/EntityPanda.java index 919c6c249c2..d7076eccc31 100644 --- a/src/main/java/cn/nukkit/entity/passive/EntityPanda.java +++ b/src/main/java/cn/nukkit/entity/passive/EntityPanda.java @@ -2,9 +2,11 @@ import cn.nukkit.Player; import cn.nukkit.block.Block; +import cn.nukkit.entity.Entity; import cn.nukkit.entity.EntityID; import cn.nukkit.item.Item; import cn.nukkit.level.format.FullChunk; +import cn.nukkit.math.Vector3f; import cn.nukkit.nbt.tag.CompoundTag; import java.util.concurrent.ThreadLocalRandom; @@ -60,4 +62,9 @@ public Item[] getDrops() { Item.get(Block.getItemId(Block.BAMBOO), 0, ThreadLocalRandom.current().nextInt(3)), }; } + + @Override + public Vector3f getMountedOffset(Entity entity) { + return new Vector3f(0, 1.105f + entity.getRidingOffset(), 0); + } } diff --git a/src/main/java/cn/nukkit/entity/passive/EntityPig.java b/src/main/java/cn/nukkit/entity/passive/EntityPig.java index 8c627ce91ea..8d90d7386f0 100644 --- a/src/main/java/cn/nukkit/entity/passive/EntityPig.java +++ b/src/main/java/cn/nukkit/entity/passive/EntityPig.java @@ -1,9 +1,11 @@ package cn.nukkit.entity.passive; import cn.nukkit.Player; +import cn.nukkit.entity.Entity; import cn.nukkit.entity.EntityID; import cn.nukkit.item.Item; import cn.nukkit.level.format.FullChunk; +import cn.nukkit.math.Vector3f; import cn.nukkit.nbt.tag.CompoundTag; import java.util.concurrent.ThreadLocalRandom; @@ -70,4 +72,12 @@ public void spawnTo(Player player) { super.spawnTo(player); } + + @Override + public Vector3f getMountedOffset(Entity entity) { + if (entity.getNetworkId() == -1) { + return new Vector3f(0, 1.85001f, 0); + } + return new Vector3f(0, 0.63f + entity.getRidingOffset(), 0); + } } diff --git a/src/main/java/cn/nukkit/entity/passive/EntitySheep.java b/src/main/java/cn/nukkit/entity/passive/EntitySheep.java index 35f6e7b50fa..fc83d783a3f 100644 --- a/src/main/java/cn/nukkit/entity/passive/EntitySheep.java +++ b/src/main/java/cn/nukkit/entity/passive/EntitySheep.java @@ -1,11 +1,13 @@ package cn.nukkit.entity.passive; import cn.nukkit.Player; +import cn.nukkit.entity.Entity; import cn.nukkit.entity.EntityID; import cn.nukkit.entity.data.ByteEntityData; import cn.nukkit.item.Item; import cn.nukkit.item.ItemDye; import cn.nukkit.level.format.FullChunk; +import cn.nukkit.math.Vector3f; import cn.nukkit.nbt.tag.CompoundTag; import cn.nukkit.utils.DyeColor; @@ -143,4 +145,12 @@ public void spawnTo(Player player) { super.spawnTo(player); } + + @Override + public Vector3f getMountedOffset(Entity entity) { + if (sheared) { + return new Vector3f(0, 0.9f + entity.getRidingOffset(), 0); + } + return new Vector3f(0, 0.975f + entity.getRidingOffset(), 0); + } } diff --git a/src/main/java/cn/nukkit/entity/passive/EntitySkeletonHorse.java b/src/main/java/cn/nukkit/entity/passive/EntitySkeletonHorse.java index 1411707434c..8cd36b5f5e5 100644 --- a/src/main/java/cn/nukkit/entity/passive/EntitySkeletonHorse.java +++ b/src/main/java/cn/nukkit/entity/passive/EntitySkeletonHorse.java @@ -1,10 +1,12 @@ package cn.nukkit.entity.passive; import cn.nukkit.Player; +import cn.nukkit.entity.Entity; import cn.nukkit.entity.EntityID; import cn.nukkit.entity.EntitySmite; import cn.nukkit.item.Item; import cn.nukkit.level.format.FullChunk; +import cn.nukkit.math.Vector3f; import cn.nukkit.nbt.tag.CompoundTag; import java.util.concurrent.ThreadLocalRandom; @@ -75,4 +77,12 @@ public void spawnTo(Player player) { super.spawnTo(player); } + + @Override + public Vector3f getMountedOffset(Entity entity) { + if (entity.getNetworkId() == -1) { + return new Vector3f(0, 2.42001f, -0.2f); + } + return new Vector3f(0, 1.2f + entity.getRidingOffset(), -0.2f); + } } diff --git a/src/main/java/cn/nukkit/entity/passive/EntityStrider.java b/src/main/java/cn/nukkit/entity/passive/EntityStrider.java index 4adbab9d1d6..2b2839b5c93 100644 --- a/src/main/java/cn/nukkit/entity/passive/EntityStrider.java +++ b/src/main/java/cn/nukkit/entity/passive/EntityStrider.java @@ -1,9 +1,11 @@ package cn.nukkit.entity.passive; import cn.nukkit.Player; +import cn.nukkit.entity.Entity; import cn.nukkit.entity.EntityID; import cn.nukkit.item.Item; import cn.nukkit.level.format.FullChunk; +import cn.nukkit.math.Vector3f; import cn.nukkit.nbt.tag.CompoundTag; import java.util.concurrent.ThreadLocalRandom; @@ -63,4 +65,15 @@ public Item[] getDrops() { Item.get(Item.STRING, 0, random.nextInt(2, 6)), }; } + + @Override + public Vector3f getMountedOffset(Entity entity) { + switch (entity.getNetworkId()) { + case -1: + return new Vector3f(0, 2.8200102f, -0.2f); + case EntityID.STRIDER: + return new Vector3f(0, 1.6f + entity.getRidingOffset(), 0); + } + return new Vector3f(0, 1.65f + entity.getRidingOffset(), -0.2f); + } } diff --git a/src/main/java/cn/nukkit/entity/passive/EntityTraderLlama.java b/src/main/java/cn/nukkit/entity/passive/EntityTraderLlama.java index 4b575b94d42..ac0c01e4d31 100644 --- a/src/main/java/cn/nukkit/entity/passive/EntityTraderLlama.java +++ b/src/main/java/cn/nukkit/entity/passive/EntityTraderLlama.java @@ -1,9 +1,11 @@ package cn.nukkit.entity.passive; import cn.nukkit.Player; +import cn.nukkit.entity.Entity; import cn.nukkit.entity.EntityID; import cn.nukkit.item.Item; import cn.nukkit.level.format.FullChunk; +import cn.nukkit.math.Vector3f; import cn.nukkit.nbt.tag.CompoundTag; import java.util.concurrent.ThreadLocalRandom; @@ -58,4 +60,12 @@ public Item[] getDrops() { Item.get(Item.LEATHER, 0, ThreadLocalRandom.current().nextInt(3)), }; } + + @Override + public Vector3f getMountedOffset(Entity entity) { + if (entity.getNetworkId() == -1) { + return new Vector3f(0, 2.3900099f, -0.3f); + } + return new Vector3f(0, 1.17f + entity.getRidingOffset(), -0.3f); + } } diff --git a/src/main/java/cn/nukkit/entity/passive/EntityWolf.java b/src/main/java/cn/nukkit/entity/passive/EntityWolf.java index 014dbb12372..7764fac511b 100644 --- a/src/main/java/cn/nukkit/entity/passive/EntityWolf.java +++ b/src/main/java/cn/nukkit/entity/passive/EntityWolf.java @@ -1,9 +1,11 @@ package cn.nukkit.entity.passive; import cn.nukkit.Player; +import cn.nukkit.entity.Entity; import cn.nukkit.entity.EntityID; import cn.nukkit.item.Item; import cn.nukkit.level.format.FullChunk; +import cn.nukkit.math.Vector3f; import cn.nukkit.nbt.tag.CompoundTag; /** @@ -59,4 +61,9 @@ public void spawnTo(Player player) { super.spawnTo(player); } + + @Override + public Vector3f getMountedOffset(Entity entity) { + return new Vector3f(0, 0.675f + entity.getRidingOffset(), -0.1f); + } } diff --git a/src/main/java/cn/nukkit/entity/passive/EntityZombieHorse.java b/src/main/java/cn/nukkit/entity/passive/EntityZombieHorse.java index 26e8fdfa2c3..c39d098079e 100644 --- a/src/main/java/cn/nukkit/entity/passive/EntityZombieHorse.java +++ b/src/main/java/cn/nukkit/entity/passive/EntityZombieHorse.java @@ -1,10 +1,12 @@ package cn.nukkit.entity.passive; import cn.nukkit.Player; +import cn.nukkit.entity.Entity; import cn.nukkit.entity.EntityID; import cn.nukkit.entity.EntitySmite; import cn.nukkit.item.Item; import cn.nukkit.level.format.FullChunk; +import cn.nukkit.math.Vector3f; import cn.nukkit.nbt.tag.CompoundTag; import java.util.Arrays; @@ -66,4 +68,12 @@ public void spawnTo(Player player) { super.spawnTo(player); } + + @Override + public Vector3f getMountedOffset(Entity entity) { + if (entity.getNetworkId() == -1) { + return new Vector3f(0, 2.42001f, -0.2f); + } + return new Vector3f(0, 1.2f + entity.getRidingOffset(), -0.2f); + } } diff --git a/src/main/java/cn/nukkit/entity/projectile/EntityArrow.java b/src/main/java/cn/nukkit/entity/projectile/EntityArrow.java index 9474e78b065..65d67a8db79 100644 --- a/src/main/java/cn/nukkit/entity/projectile/EntityArrow.java +++ b/src/main/java/cn/nukkit/entity/projectile/EntityArrow.java @@ -5,6 +5,7 @@ import cn.nukkit.entity.Entity; import cn.nukkit.entity.EntityID; import cn.nukkit.entity.EntitySmite; +import cn.nukkit.entity.data.LongEntityData; import cn.nukkit.event.entity.EntityDamageByEntityEvent; import cn.nukkit.event.entity.EntityDamageEvent; import cn.nukkit.event.entity.EntityDamageEvent.DamageCause; @@ -72,6 +73,10 @@ public EntityArrow(FullChunk chunk, CompoundTag nbt, Entity shootingEntity) { public EntityArrow(FullChunk chunk, CompoundTag nbt, Entity shootingEntity, boolean critical) { super(chunk, nbt, shootingEntity); + if (shootingEntity != null) { + this.setDataProperty(new LongEntityData(DATA_OWNER_EID, shootingEntity.getId())); +// this.setDataProperty(new LongEntityData(DATA_ARROW_SHOOTER_EID, shootingEntity.getId())); + } this.setCritical(critical); } @@ -208,6 +213,9 @@ protected void postHurt(Entity entity) { case Effect.NO_EFFECT: break; case Effect.INSTANT_HEALTH: + if (!entity.canBeAffected(effect.getId())) { + break; + } if (entity instanceof EntitySmite) { if (shootingEntity != null) { entity.attack(new EntityDamageByEntityEvent(shootingEntity, entity, DamageCause.MAGIC, 0.5f * (6 << effect.getAmplifier()))); @@ -219,6 +227,9 @@ protected void postHurt(Entity entity) { } break; case Effect.INSTANT_DAMAGE: + if (!entity.canBeAffected(effect.getId())) { + break; + } if (entity instanceof EntitySmite) { entity.heal(new EntityRegainHealthEvent(entity, 0.5f * (4 << effect.getAmplifier()), EntityRegainHealthEvent.CAUSE_MAGIC)); } else if (shootingEntity != null) { diff --git a/src/main/java/cn/nukkit/entity/projectile/EntityProjectile.java b/src/main/java/cn/nukkit/entity/projectile/EntityProjectile.java index 0b71ec5bb33..d6f3bc640ff 100644 --- a/src/main/java/cn/nukkit/entity/projectile/EntityProjectile.java +++ b/src/main/java/cn/nukkit/entity/projectile/EntityProjectile.java @@ -4,7 +4,6 @@ import cn.nukkit.block.Block; import cn.nukkit.entity.Entity; import cn.nukkit.entity.EntityLiving; -import cn.nukkit.entity.data.LongEntityData; import cn.nukkit.entity.item.EntityEndCrystal; import cn.nukkit.entity.item.EntityPainting; import cn.nukkit.entity.item.EntityVehicle; @@ -68,9 +67,6 @@ public EntityProjectile(FullChunk chunk, CompoundTag nbt) { public EntityProjectile(FullChunk chunk, CompoundTag nbt, Entity shootingEntity) { super(chunk, nbt); this.shootingEntity = shootingEntity; - if (shootingEntity != null) { - this.setDataProperty(new LongEntityData(DATA_ARROW_SHOOTER_EID, shootingEntity.getId())); - } } public int getResultDamage() { @@ -271,7 +267,7 @@ public boolean onUpdate(int currentTick) { MovingObjectPosition blockHitResult = null; if (!this.isCollided) { - blockHitResult = level.clip(copyVec(), moveVector, false, 200); + blockHitResult = level.clip(copyVec(), moveVector, false, 200, canPassThroughBarrier()); if (blockHitResult != null) { Vector3 hitPos = blockHitResult.hitVector; diff --git a/src/main/java/cn/nukkit/entity/projectile/EntityThrownTrident.java b/src/main/java/cn/nukkit/entity/projectile/EntityThrownTrident.java index 8d9e52f5545..65b47102749 100644 --- a/src/main/java/cn/nukkit/entity/projectile/EntityThrownTrident.java +++ b/src/main/java/cn/nukkit/entity/projectile/EntityThrownTrident.java @@ -3,6 +3,7 @@ import cn.nukkit.Player; import cn.nukkit.entity.Entity; import cn.nukkit.entity.EntityID; +import cn.nukkit.entity.data.LongEntityData; import cn.nukkit.entity.weather.EntityLightning; import cn.nukkit.event.entity.EntityDamageByChildEntityEvent; import cn.nukkit.event.entity.EntityDamageByEntityEvent; @@ -10,6 +11,7 @@ import cn.nukkit.event.entity.EntityDamageEvent.DamageCause; import cn.nukkit.event.entity.ProjectileHitEvent; import cn.nukkit.event.weather.LightningStrikeEvent; +import cn.nukkit.inventory.Inventory; import cn.nukkit.inventory.InventoryHolder; import cn.nukkit.item.Item; import cn.nukkit.item.enchantment.Enchantment; @@ -17,9 +19,12 @@ import cn.nukkit.level.format.FullChunk; import cn.nukkit.nbt.NBTIO; import cn.nukkit.nbt.tag.CompoundTag; +import cn.nukkit.network.protocol.LevelEventPacket; import cn.nukkit.network.protocol.LevelSoundEventPacket; import lombok.Setter; +import java.util.concurrent.ThreadLocalRandom; + /** * Created by PetteriM1 */ @@ -27,12 +32,15 @@ public class EntityThrownTrident extends EntityProjectile { public static final int NETWORK_ID = EntityID.THROWN_TRIDENT; + protected int favoredSlot; protected Item trident; protected int pickupMode; + public boolean alreadyCollided; @Setter protected int loyaltyBackTick = 0; + protected int returnTridentTickCount; @Override public int getNetworkId() { @@ -65,12 +73,17 @@ public EntityThrownTrident(FullChunk chunk, CompoundTag nbt) { public EntityThrownTrident(FullChunk chunk, CompoundTag nbt, Entity shootingEntity) { super(chunk, nbt, shootingEntity); + if (shootingEntity != null) { + this.setDataProperty(new LongEntityData(DATA_OWNER_EID, shootingEntity.getId())); +// this.setDataProperty(new LongEntityData(DATA_ARROW_SHOOTER_EID, shootingEntity.getId())); + } } @Override protected void initEntity() { super.initEntity(); + this.favoredSlot = namedTag.contains("favoredSlot") ? namedTag.getInt("favoredSlot") : -1; this.trident = namedTag.contains("Trident") ? NBTIO.getItemHelper(namedTag.getCompound("Trident")) : Item.get(Item.AIR); this.pickupMode = namedTag.contains("pickup") ? namedTag.getByte("pickup") : PICKUP_ANY; } @@ -79,14 +92,27 @@ protected void initEntity() { public void saveNBT() { super.saveNBT(); + this.namedTag.putInt("favoredSlot", this.favoredSlot); this.namedTag.put("Trident", NBTIO.putItemHelper(this.trident)); this.namedTag.putByte("pickup", this.pickupMode); } + public int getFavoredSlot() { + return favoredSlot; + } + + public void setFavoredSlot(int slot) { + favoredSlot = slot; + } + public Item getItem() { return this.trident != null ? this.trident.clone() : Item.get(Item.AIR); } + public boolean hasLoyalty() { + return trident != null && trident.hasEnchantment(Enchantment.LOYALTY); + } + public void setItem(Item item) { this.trident = item.clone(); if (this.trident != null && this.shootingEntity != null) { @@ -159,6 +185,7 @@ public boolean onCollideWithEntity(Entity entity) { newTrident.pickupMode = this.pickupMode; newTrident.shootingEntity = this.shootingEntity; newTrident.setItem(this.trident); + newTrident.setFavoredSlot(this.favoredSlot); newTrident.spawnToAll(); return true; } @@ -185,12 +212,35 @@ protected boolean shouldBounce() { public boolean onUpdate(int currentTick) { boolean update = super.onUpdate(currentTick); if (this.loyaltyBackTick > 0) { - if (this.isCollided || this.hadCollision || this.alreadyCollided || this.getY() <= 0) { - if (--this.loyaltyBackTick <= 0 || this.getY() <= 0) { + if (this.isCollided || this.hadCollision || this.alreadyCollided || this.getY() <= level.getHeightRange().getMinY()) { + if (returnTridentTickCount++ == 0) { + if (shootingEntity != null) { + shootingEntity.level.addLevelSoundEvent(shootingEntity, LevelSoundEventPacket.SOUND_ITEM_TRIDENT_RETURN); + } + setDataFlag(DATA_FLAG_RETURN_TRIDENT, true); + } + + //TODO: ThrownTrident::returnWithLoyalty animation + + if (--this.loyaltyBackTick <= 0 || this.getY() <= level.getHeightRange().getMinY()) { if (this.shootingEntity instanceof InventoryHolder) { this.close(); - ((InventoryHolder) this.shootingEntity).getInventory().addItem(this.trident); - this.shootingEntity.getLevel().addLevelSoundEvent(this.shootingEntity, LevelSoundEventPacket.SOUND_ITEM_TRIDENT_RETURN); + + if (pickupMode == PICKUP_ANY) { + Inventory inventory = ((InventoryHolder) this.shootingEntity).getInventory(); + if (favoredSlot != -1) { + Item item = inventory.getItem(favoredSlot); + if (item.isNull()) { + inventory.setItem(favoredSlot, trident); + } else { + inventory.addItem(trident); + } + } else { + inventory.addItem(this.trident); + } + } + + this.shootingEntity.getLevel().addLevelEvent(this.shootingEntity, LevelEventPacket.EVENT_SOUND_INFINITY_ARROW_PICKUP, (int) ((ThreadLocalRandom.current().nextGaussian() * 0.7 + 1) * 2 * 1000)); } } } diff --git a/src/main/java/cn/nukkit/event/block/BlockExplodeEvent.java b/src/main/java/cn/nukkit/event/block/BlockExplodeEvent.java index de1ddabe20a..36239751d56 100644 --- a/src/main/java/cn/nukkit/event/block/BlockExplodeEvent.java +++ b/src/main/java/cn/nukkit/event/block/BlockExplodeEvent.java @@ -4,7 +4,7 @@ import cn.nukkit.event.Cancellable; import cn.nukkit.event.HandlerList; -import java.util.List; +import java.util.Collection; /** * Called when a block explodes. @@ -17,11 +17,11 @@ public static HandlerList getHandlers() { return handlers; } - protected final List blocks; + protected final Collection blocks; protected double yield; protected boolean fire; - public BlockExplodeEvent(Block source, List blocks, double yield, boolean fire) { + public BlockExplodeEvent(Block source, Collection blocks, double yield, boolean fire) { super(source); this.blocks = blocks; this.yield = yield; @@ -33,7 +33,7 @@ public BlockExplodeEvent(Block source, List blocks, double yield, boolean * * @return all blown-up blocks */ - public List getBlockList() { + public Collection getBlockList() { return this.blocks; } diff --git a/src/main/java/cn/nukkit/event/entity/EntityDamageByEntityEvent.java b/src/main/java/cn/nukkit/event/entity/EntityDamageByEntityEvent.java index 29472e6bacd..2c43268dbf2 100644 --- a/src/main/java/cn/nukkit/event/entity/EntityDamageByEntityEvent.java +++ b/src/main/java/cn/nukkit/event/entity/EntityDamageByEntityEvent.java @@ -48,7 +48,9 @@ public EntityDamageByEntityEvent(Entity damager, Entity entity, DamageCause caus this.knockBackH = knockBackH; this.knockBackV = knockBackV; this.enchantments = enchantments; - this.addAttackerModifiers(damager); + if (cause == DamageCause.ENTITY_ATTACK) { + this.addAttackerModifiers(damager); + } } protected void addAttackerModifiers(Entity damager) { diff --git a/src/main/java/cn/nukkit/event/entity/EntityExplodeEvent.java b/src/main/java/cn/nukkit/event/entity/EntityExplodeEvent.java index f348404252e..dce397922ae 100644 --- a/src/main/java/cn/nukkit/event/entity/EntityExplodeEvent.java +++ b/src/main/java/cn/nukkit/event/entity/EntityExplodeEvent.java @@ -6,7 +6,7 @@ import cn.nukkit.event.HandlerList; import cn.nukkit.level.Position; -import java.util.List; +import java.util.Collection; /** * author: Angelic47 @@ -21,15 +21,15 @@ public static HandlerList getHandlers() { } protected final Position position; - protected List blocks; + protected Collection blocks; protected double yield; protected boolean fire; - public EntityExplodeEvent(Entity entity, Position position, List blocks, double yield) { + public EntityExplodeEvent(Entity entity, Position position, Collection blocks, double yield) { this(entity, position, blocks, yield, false); } - public EntityExplodeEvent(Entity entity, Position position, List blocks, double yield, boolean fire) { + public EntityExplodeEvent(Entity entity, Position position, Collection blocks, double yield, boolean fire) { this.entity = entity; this.position = position; this.blocks = blocks; @@ -41,11 +41,11 @@ public Position getPosition() { return this.position; } - public List getBlockList() { + public Collection getBlockList() { return this.blocks; } - public void setBlockList(List blocks) { + public void setBlockList(Collection blocks) { this.blocks = blocks; } diff --git a/src/main/java/cn/nukkit/inventory/DoubleChestInventory.java b/src/main/java/cn/nukkit/inventory/DoubleChestInventory.java index 460334b3084..7e2b7872094 100644 --- a/src/main/java/cn/nukkit/inventory/DoubleChestInventory.java +++ b/src/main/java/cn/nukkit/inventory/DoubleChestInventory.java @@ -124,7 +124,7 @@ public void onOpen(Player who) { pk1.eventData = 1; Level level = this.left.getHolder().getLevel(); if (level != null) { - level.addLevelSoundEvent(LevelSoundEventPacket.SOUND_CHEST_OPEN, 1, -1, this.left.getHolder().add(0.5, 0.5, 0.5)); + level.addLevelSoundEvent(this.left.getHolder().blockCenter(), LevelSoundEventPacket.SOUND_CHEST_OPEN); level.addChunkPacket((int) this.left.getHolder().getX() >> 4, (int) this.left.getHolder().getZ() >> 4, pk1); } @@ -137,7 +137,7 @@ public void onOpen(Player who) { level = this.right.getHolder().getLevel(); if (level != null) { - level.addLevelSoundEvent(LevelSoundEventPacket.SOUND_CHEST_OPEN, 1, -1, this.right.getHolder().add(0.5, 0.5, 0.5)); +// level.addLevelSoundEvent(this.right.getHolder().blockCenter(), LevelSoundEventPacket.SOUND_CHEST_OPEN); level.addChunkPacket((int) this.right.getHolder().getX() >> 4, (int) this.right.getHolder().getZ() >> 4, pk2); } } @@ -155,7 +155,7 @@ public void onClose(Player who) { Level level = this.right.getHolder().getLevel(); if (level != null) { - level.addLevelSoundEvent(LevelSoundEventPacket.SOUND_CHEST_CLOSED, 1, -1, this.right.getHolder().add(0.5, 0.5, 0.5)); + level.addLevelSoundEvent(this.right.getHolder().blockCenter(), LevelSoundEventPacket.SOUND_CHEST_CLOSED); level.addChunkPacket((int) this.right.getHolder().getX() >> 4, (int) this.right.getHolder().getZ() >> 4, pk1); } @@ -168,7 +168,7 @@ public void onClose(Player who) { level = this.left.getHolder().getLevel(); if (level != null) { - level.addLevelSoundEvent(LevelSoundEventPacket.SOUND_CHEST_CLOSED, 1, -1, this.left.getHolder().add(0.5, 0.5, 0.5)); +// level.addLevelSoundEvent(this.left.getHolder().blockCenter(), LevelSoundEventPacket.SOUND_CHEST_CLOSED); level.addChunkPacket((int) this.left.getHolder().getX() >> 4, (int) this.left.getHolder().getZ() >> 4, pk2); } } diff --git a/src/main/java/cn/nukkit/inventory/PlayerEnderChestInventory.java b/src/main/java/cn/nukkit/inventory/PlayerEnderChestInventory.java index 7cfb1505ed4..ba82727a06b 100644 --- a/src/main/java/cn/nukkit/inventory/PlayerEnderChestInventory.java +++ b/src/main/java/cn/nukkit/inventory/PlayerEnderChestInventory.java @@ -53,7 +53,7 @@ public void onOpen(Player who) { Level level = this.getHolder().getLevel(); if (level != null) { - level.addLevelSoundEvent(LevelSoundEventPacket.SOUND_ENDERCHEST_OPEN, 1, -1, this.getHolder().add(0.5, 0.5, 0.5)); + level.addLevelSoundEvent(this.getHolder().blockCenter(), LevelSoundEventPacket.SOUND_ENDERCHEST_OPEN); level.addChunkPacket((int) this.getHolder().getX() >> 4, (int) this.getHolder().getZ() >> 4, blockEventPacket); } } @@ -79,7 +79,7 @@ public void onClose(Player who) { Level level = this.getHolder().getLevel(); if (level != null) { - level.addLevelSoundEvent(LevelSoundEventPacket.SOUND_ENDERCHEST_CLOSED, 1, -1, this.getHolder().add(0.5, 0.5, 0.5)); + level.addLevelSoundEvent(this.getHolder().blockCenter(), LevelSoundEventPacket.SOUND_ENDERCHEST_CLOSED); level.addChunkPacket((int) this.getHolder().getX() >> 4, (int) this.getHolder().getZ() >> 4, blockEventPacket); } diff --git a/src/main/java/cn/nukkit/item/Item.java b/src/main/java/cn/nukkit/item/Item.java index e50ad0b66fb..4cdd889675f 100644 --- a/src/main/java/cn/nukkit/item/Item.java +++ b/src/main/java/cn/nukkit/item/Item.java @@ -4,6 +4,7 @@ import cn.nukkit.Server; import cn.nukkit.block.Block; import cn.nukkit.block.BlockID; +import cn.nukkit.block.BlockToolType; import cn.nukkit.entity.Entity; import cn.nukkit.inventory.Fuel; import cn.nukkit.item.enchantment.Enchantment; @@ -1009,6 +1010,10 @@ public boolean isTool() { return false; } + public int getBlockToolType() { + return BlockToolType.NONE; + } + public int getMaxDurability() { return -1; } diff --git a/src/main/java/cn/nukkit/item/ItemAxeDiamond.java b/src/main/java/cn/nukkit/item/ItemAxeDiamond.java index 5d0d2a6972d..28c3719de9f 100644 --- a/src/main/java/cn/nukkit/item/ItemAxeDiamond.java +++ b/src/main/java/cn/nukkit/item/ItemAxeDiamond.java @@ -1,5 +1,7 @@ package cn.nukkit.item; +import cn.nukkit.block.BlockToolType; + /** * author: MagicDroidX * Nukkit Project @@ -28,6 +30,11 @@ public boolean isAxe() { return true; } + @Override + public int getBlockToolType() { + return BlockToolType.AXE; + } + @Override public int getTier() { return ItemTool.TIER_DIAMOND; diff --git a/src/main/java/cn/nukkit/item/ItemAxeGold.java b/src/main/java/cn/nukkit/item/ItemAxeGold.java index 386e78ef172..e89cc5858bc 100644 --- a/src/main/java/cn/nukkit/item/ItemAxeGold.java +++ b/src/main/java/cn/nukkit/item/ItemAxeGold.java @@ -1,5 +1,7 @@ package cn.nukkit.item; +import cn.nukkit.block.BlockToolType; + /** * author: MagicDroidX * Nukkit Project @@ -28,6 +30,11 @@ public boolean isAxe() { return true; } + @Override + public int getBlockToolType() { + return BlockToolType.AXE; + } + @Override public int getTier() { return ItemTool.TIER_GOLD; diff --git a/src/main/java/cn/nukkit/item/ItemAxeIron.java b/src/main/java/cn/nukkit/item/ItemAxeIron.java index c1157ed953b..7138ccc5f1e 100644 --- a/src/main/java/cn/nukkit/item/ItemAxeIron.java +++ b/src/main/java/cn/nukkit/item/ItemAxeIron.java @@ -1,5 +1,7 @@ package cn.nukkit.item; +import cn.nukkit.block.BlockToolType; + /** * author: MagicDroidX * Nukkit Project @@ -28,6 +30,11 @@ public boolean isAxe() { return true; } + @Override + public int getBlockToolType() { + return BlockToolType.AXE; + } + @Override public int getTier() { return ItemTool.TIER_IRON; diff --git a/src/main/java/cn/nukkit/item/ItemAxeNetherite.java b/src/main/java/cn/nukkit/item/ItemAxeNetherite.java index 2aabc46529a..66fe74e7f52 100644 --- a/src/main/java/cn/nukkit/item/ItemAxeNetherite.java +++ b/src/main/java/cn/nukkit/item/ItemAxeNetherite.java @@ -1,5 +1,7 @@ package cn.nukkit.item; +import cn.nukkit.block.BlockToolType; + public class ItemAxeNetherite extends ItemTool { public ItemAxeNetherite() { @@ -19,6 +21,11 @@ public boolean isAxe() { return true; } + @Override + public int getBlockToolType() { + return BlockToolType.AXE; + } + @Override public int getAttackDamage() { return 7; diff --git a/src/main/java/cn/nukkit/item/ItemAxeStone.java b/src/main/java/cn/nukkit/item/ItemAxeStone.java index e3c24b2c959..7ebef3d7977 100644 --- a/src/main/java/cn/nukkit/item/ItemAxeStone.java +++ b/src/main/java/cn/nukkit/item/ItemAxeStone.java @@ -1,5 +1,7 @@ package cn.nukkit.item; +import cn.nukkit.block.BlockToolType; + /** * author: MagicDroidX * Nukkit Project @@ -28,6 +30,11 @@ public boolean isAxe() { return true; } + @Override + public int getBlockToolType() { + return BlockToolType.AXE; + } + @Override public int getTier() { return ItemTool.TIER_STONE; diff --git a/src/main/java/cn/nukkit/item/ItemAxeWood.java b/src/main/java/cn/nukkit/item/ItemAxeWood.java index 78380960555..fdeaf6cd322 100644 --- a/src/main/java/cn/nukkit/item/ItemAxeWood.java +++ b/src/main/java/cn/nukkit/item/ItemAxeWood.java @@ -1,5 +1,7 @@ package cn.nukkit.item; +import cn.nukkit.block.BlockToolType; + /** * author: MagicDroidX * Nukkit Project @@ -28,6 +30,11 @@ public boolean isAxe() { return true; } + @Override + public int getBlockToolType() { + return BlockToolType.AXE; + } + @Override public int getTier() { return ItemTool.TIER_WOODEN; diff --git a/src/main/java/cn/nukkit/item/ItemBlockFullNames.java b/src/main/java/cn/nukkit/item/ItemBlockFullNames.java index 16d6eed2a3b..6c248c4d7a6 100644 --- a/src/main/java/cn/nukkit/item/ItemBlockFullNames.java +++ b/src/main/java/cn/nukkit/item/ItemBlockFullNames.java @@ -9,6 +9,7 @@ public interface ItemBlockFullNames { String COBBLESTONE = "minecraft:" + ItemBlockNames.COBBLESTONE; String OAK_PLANKS = "minecraft:" + ItemBlockNames.OAK_PLANKS; //TODO: 1.20.50 flattening String PLANKS = "minecraft:" + ItemBlockNames.PLANKS; + String OAK_SAPLING = "minecraft:" + ItemBlockNames.OAK_SAPLING; //TODO: 1.20.80 flattening String SAPLING = "minecraft:" + ItemBlockNames.SAPLING; String BEDROCK = "minecraft:" + ItemBlockNames.BEDROCK; String FLOWING_WATER = "minecraft:" + ItemBlockNames.FLOWING_WATER; @@ -45,6 +46,7 @@ public interface ItemBlockFullNames { String WOOL = "minecraft:" + ItemBlockNames.WOOL; String ELEMENT_0 = "minecraft:" + ItemBlockNames.ELEMENT_0; String YELLOW_FLOWER = "minecraft:" + ItemBlockNames.YELLOW_FLOWER; + String POPPY = "minecraft:" + ItemBlockNames.POPPY; //TODO: 1.20.80 flattening String RED_FLOWER = "minecraft:" + ItemBlockNames.RED_FLOWER; String BROWN_MUSHROOM = "minecraft:" + ItemBlockNames.BROWN_MUSHROOM; String RED_MUSHROOM = "minecraft:" + ItemBlockNames.RED_MUSHROOM; @@ -499,7 +501,9 @@ public interface ItemBlockFullNames { String TUBE_CORAL = "minecraft:" + ItemBlockNames.TUBE_CORAL; //TODO: 1.20.0 flattening String CORAL = "minecraft:" + ItemBlockNames.CORAL; String CORAL_BLOCK = "minecraft:" + ItemBlockNames.CORAL_BLOCK; + String TUBE_CORAL_FAN = "minecraft:" + ItemBlockNames.TUBE_CORAL_FAN; //TODO: 1.20.80 flattening String CORAL_FAN = "minecraft:" + ItemBlockNames.CORAL_FAN; + String DEAD_TUBE_CORAL_FAN = "minecraft:" + ItemBlockNames.DEAD_TUBE_CORAL_FAN; //TODO: 1.20.80 flattening String CORAL_FAN_DEAD = "minecraft:" + ItemBlockNames.CORAL_FAN_DEAD; String CORAL_FAN_HANG = "minecraft:" + ItemBlockNames.CORAL_FAN_HANG; String CORAL_FAN_HANG2 = "minecraft:" + ItemBlockNames.CORAL_FAN_HANG2; @@ -1179,4 +1183,27 @@ public interface ItemBlockFullNames { String STRIPPED_JUNGLE_WOOD = "minecraft:" + ItemBlockNames.STRIPPED_JUNGLE_WOOD; String STRIPPED_ACACIA_WOOD = "minecraft:" + ItemBlockNames.STRIPPED_ACACIA_WOOD; String STRIPPED_DARK_OAK_WOOD = "minecraft:" + ItemBlockNames.STRIPPED_DARK_OAK_WOOD; + String SPRUCE_SAPLING = "minecraft:" + ItemBlockNames.SPRUCE_SAPLING; + String BIRCH_SAPLING = "minecraft:" + ItemBlockNames.BIRCH_SAPLING; + String JUNGLE_SAPLING = "minecraft:" + ItemBlockNames.JUNGLE_SAPLING; + String ACACIA_SAPLING = "minecraft:" + ItemBlockNames.ACACIA_SAPLING; + String DARK_OAK_SAPLING = "minecraft:" + ItemBlockNames.DARK_OAK_SAPLING; + String BLUE_ORCHID = "minecraft:" + ItemBlockNames.BLUE_ORCHID; + String ALLIUM = "minecraft:" + ItemBlockNames.ALLIUM; + String AZURE_BLUET = "minecraft:" + ItemBlockNames.AZURE_BLUET; + String RED_TULIP = "minecraft:" + ItemBlockNames.RED_TULIP; + String ORANGE_TULIP = "minecraft:" + ItemBlockNames.ORANGE_TULIP; + String WHITE_TULIP = "minecraft:" + ItemBlockNames.WHITE_TULIP; + String PINK_TULIP = "minecraft:" + ItemBlockNames.PINK_TULIP; + String OXEYE_DAISY = "minecraft:" + ItemBlockNames.OXEYE_DAISY; + String CORNFLOWER = "minecraft:" + ItemBlockNames.CORNFLOWER; + String LILY_OF_THE_VALLEY = "minecraft:" + ItemBlockNames.LILY_OF_THE_VALLEY; + String BRAIN_CORAL_FAN = "minecraft:" + ItemBlockNames.BRAIN_CORAL_FAN; + String BUBBLE_CORAL_FAN = "minecraft:" + ItemBlockNames.BUBBLE_CORAL_FAN; + String FIRE_CORAL_FAN = "minecraft:" + ItemBlockNames.FIRE_CORAL_FAN; + String HORN_CORAL_FAN = "minecraft:" + ItemBlockNames.HORN_CORAL_FAN; + String DEAD_BRAIN_CORAL_FAN = "minecraft:" + ItemBlockNames.DEAD_BRAIN_CORAL_FAN; + String DEAD_BUBBLE_CORAL_FAN = "minecraft:" + ItemBlockNames.DEAD_BUBBLE_CORAL_FAN; + String DEAD_FIRE_CORAL_FAN = "minecraft:" + ItemBlockNames.DEAD_FIRE_CORAL_FAN; + String DEAD_HORN_CORAL_FAN = "minecraft:" + ItemBlockNames.DEAD_HORN_CORAL_FAN; } diff --git a/src/main/java/cn/nukkit/item/ItemBlockID.java b/src/main/java/cn/nukkit/item/ItemBlockID.java index 5375f32cdad..8b40c06959e 100644 --- a/src/main/java/cn/nukkit/item/ItemBlockID.java +++ b/src/main/java/cn/nukkit/item/ItemBlockID.java @@ -16,6 +16,7 @@ public interface ItemBlockID { int COBBLESTONE = 4; int OAK_PLANKS = 5; int PLANKS = 5; + int OAK_SAPLING = 6; int SAPLING = 6; int BEDROCK = 7; int FLOWING_WATER = 8; @@ -56,6 +57,7 @@ public interface ItemBlockID { int WOOL = 35; int ELEMENT_0 = 36; int YELLOW_FLOWER = 37; + int POPPY = 38; int RED_FLOWER = 38; int BROWN_MUSHROOM = 39; int RED_MUSHROOM = 40; @@ -446,7 +448,9 @@ public interface ItemBlockID { int TUBE_CORAL = 0xff - BlockID.TUBE_CORAL; int CORAL = 0xff - BlockID.CORAL; int CORAL_BLOCK = 0xff - BlockID.CORAL_BLOCK; + int TUBE_CORAL_FAN = 0xff - BlockID.TUBE_CORAL_FAN; int CORAL_FAN = 0xff - BlockID.CORAL_FAN; + int DEAD_TUBE_CORAL_FAN = 0xff - BlockID.DEAD_TUBE_CORAL_FAN; int CORAL_FAN_DEAD = 0xff - BlockID.CORAL_FAN_DEAD; int CORAL_FAN_HANG = 0xff - BlockID.CORAL_FAN_HANG; int CORAL_FAN_HANG2 = 0xff - BlockID.CORAL_FAN_HANG2; @@ -1126,6 +1130,29 @@ public interface ItemBlockID { int STRIPPED_JUNGLE_WOOD = 0xff - BlockID.STRIPPED_JUNGLE_WOOD; int STRIPPED_ACACIA_WOOD = 0xff - BlockID.STRIPPED_ACACIA_WOOD; int STRIPPED_DARK_OAK_WOOD = 0xff - BlockID.STRIPPED_DARK_OAK_WOOD; + int SPRUCE_SAPLING = 0xff - BlockID.SPRUCE_SAPLING; + int BIRCH_SAPLING = 0xff - BlockID.BIRCH_SAPLING; + int JUNGLE_SAPLING = 0xff - BlockID.JUNGLE_SAPLING; + int ACACIA_SAPLING = 0xff - BlockID.ACACIA_SAPLING; + int DARK_OAK_SAPLING = 0xff - BlockID.DARK_OAK_SAPLING; + int BLUE_ORCHID = 0xff - BlockID.BLUE_ORCHID; + int ALLIUM = 0xff - BlockID.ALLIUM; + int AZURE_BLUET = 0xff - BlockID.AZURE_BLUET; + int RED_TULIP = 0xff - BlockID.RED_TULIP; + int ORANGE_TULIP = 0xff - BlockID.ORANGE_TULIP; + int WHITE_TULIP = 0xff - BlockID.WHITE_TULIP; + int PINK_TULIP = 0xff - BlockID.PINK_TULIP; + int OXEYE_DAISY = 0xff - BlockID.OXEYE_DAISY; + int CORNFLOWER = 0xff - BlockID.CORNFLOWER; + int LILY_OF_THE_VALLEY = 0xff - BlockID.LILY_OF_THE_VALLEY; + int BRAIN_CORAL_FAN = 0xff - BlockID.BRAIN_CORAL_FAN; + int BUBBLE_CORAL_FAN = 0xff - BlockID.BUBBLE_CORAL_FAN; + int FIRE_CORAL_FAN = 0xff - BlockID.FIRE_CORAL_FAN; + int HORN_CORAL_FAN = 0xff - BlockID.HORN_CORAL_FAN; + int DEAD_BRAIN_CORAL_FAN = 0xff - BlockID.DEAD_BRAIN_CORAL_FAN; + int DEAD_BUBBLE_CORAL_FAN = 0xff - BlockID.DEAD_BUBBLE_CORAL_FAN; + int DEAD_FIRE_CORAL_FAN = 0xff - BlockID.DEAD_FIRE_CORAL_FAN; + int DEAD_HORN_CORAL_FAN = 0xff - BlockID.DEAD_HORN_CORAL_FAN; int UNDEFINED = 0xff - BlockID.UNDEFINED; diff --git a/src/main/java/cn/nukkit/item/ItemBlockNames.java b/src/main/java/cn/nukkit/item/ItemBlockNames.java index 55e660e3f5e..1c8595e5cae 100644 --- a/src/main/java/cn/nukkit/item/ItemBlockNames.java +++ b/src/main/java/cn/nukkit/item/ItemBlockNames.java @@ -8,6 +8,7 @@ public interface ItemBlockNames { String COBBLESTONE = "cobblestone"; String OAK_PLANKS = "oak_planks"; //TODO: 1.20.50 flattening String PLANKS = "planks"; + String OAK_SAPLING = "oak_sapling"; //TODO: 1.20.80 flattening String SAPLING = "sapling"; String BEDROCK = "bedrock"; String FLOWING_WATER = "flowing_water"; @@ -44,6 +45,7 @@ public interface ItemBlockNames { String WOOL = "wool"; String ELEMENT_0 = "element_0"; String YELLOW_FLOWER = "yellow_flower"; + String POPPY = "poppy"; //TODO: 1.20.80 flattening String RED_FLOWER = "red_flower"; String BROWN_MUSHROOM = "brown_mushroom"; String RED_MUSHROOM = "red_mushroom"; @@ -498,7 +500,9 @@ public interface ItemBlockNames { String TUBE_CORAL = "tube_coral"; //TODO: 1.20.0 flattening String CORAL = "coral"; String CORAL_BLOCK = "coral_block"; + String TUBE_CORAL_FAN = "tube_coral_fan"; //TODO: 1.20.80 flattening String CORAL_FAN = "coral_fan"; + String DEAD_TUBE_CORAL_FAN = "dead_tube_coral_fan"; //TODO: 1.20.80 flattening String CORAL_FAN_DEAD = "coral_fan_dead"; String CORAL_FAN_HANG = "coral_fan_hang"; String CORAL_FAN_HANG2 = "coral_fan_hang2"; @@ -1178,4 +1182,27 @@ public interface ItemBlockNames { String STRIPPED_JUNGLE_WOOD = "stripped_jungle_wood"; String STRIPPED_ACACIA_WOOD = "stripped_acacia_wood"; String STRIPPED_DARK_OAK_WOOD = "stripped_dark_oak_wood"; + String SPRUCE_SAPLING = "spruce_sapling"; + String BIRCH_SAPLING = "birch_sapling"; + String JUNGLE_SAPLING = "jungle_sapling"; + String ACACIA_SAPLING = "acacia_sapling"; + String DARK_OAK_SAPLING = "dark_oak_sapling"; + String BLUE_ORCHID = "blue_orchid"; + String ALLIUM = "allium"; + String AZURE_BLUET = "azure_bluet"; + String RED_TULIP = "red_tulip"; + String ORANGE_TULIP = "orange_tulip"; + String WHITE_TULIP = "white_tulip"; + String PINK_TULIP = "pink_tulip"; + String OXEYE_DAISY = "oxeye_daisy"; + String CORNFLOWER = "cornflower"; + String LILY_OF_THE_VALLEY = "lily_of_the_valley"; + String BRAIN_CORAL_FAN = "brain_coral_fan"; + String BUBBLE_CORAL_FAN = "bubble_coral_fan"; + String FIRE_CORAL_FAN = "fire_coral_fan"; + String HORN_CORAL_FAN = "horn_coral_fan"; + String DEAD_BRAIN_CORAL_FAN = "dead_brain_coral_fan"; + String DEAD_BUBBLE_CORAL_FAN = "dead_bubble_coral_fan"; + String DEAD_FIRE_CORAL_FAN = "dead_fire_coral_fan"; + String DEAD_HORN_CORAL_FAN = "dead_horn_coral_fan"; } diff --git a/src/main/java/cn/nukkit/item/ItemHoeDiamond.java b/src/main/java/cn/nukkit/item/ItemHoeDiamond.java index 02a97921238..cfb75c36792 100644 --- a/src/main/java/cn/nukkit/item/ItemHoeDiamond.java +++ b/src/main/java/cn/nukkit/item/ItemHoeDiamond.java @@ -1,5 +1,7 @@ package cn.nukkit.item; +import cn.nukkit.block.BlockToolType; + /** * author: MagicDroidX * Nukkit Project @@ -28,6 +30,11 @@ public boolean isHoe() { return true; } + @Override + public int getBlockToolType() { + return BlockToolType.HOE; + } + @Override public int getTier() { return ItemTool.TIER_DIAMOND; diff --git a/src/main/java/cn/nukkit/item/ItemHoeGold.java b/src/main/java/cn/nukkit/item/ItemHoeGold.java index 0a07d6e5eb5..6de300bdf41 100644 --- a/src/main/java/cn/nukkit/item/ItemHoeGold.java +++ b/src/main/java/cn/nukkit/item/ItemHoeGold.java @@ -1,5 +1,7 @@ package cn.nukkit.item; +import cn.nukkit.block.BlockToolType; + /** * author: MagicDroidX * Nukkit Project @@ -28,6 +30,11 @@ public boolean isHoe() { return true; } + @Override + public int getBlockToolType() { + return BlockToolType.HOE; + } + @Override public int getTier() { return ItemTool.TIER_GOLD; diff --git a/src/main/java/cn/nukkit/item/ItemHoeIron.java b/src/main/java/cn/nukkit/item/ItemHoeIron.java index e0beeb7d1b2..a1087b16123 100644 --- a/src/main/java/cn/nukkit/item/ItemHoeIron.java +++ b/src/main/java/cn/nukkit/item/ItemHoeIron.java @@ -1,5 +1,7 @@ package cn.nukkit.item; +import cn.nukkit.block.BlockToolType; + /** * author: MagicDroidX * Nukkit Project @@ -28,6 +30,11 @@ public boolean isHoe() { return true; } + @Override + public int getBlockToolType() { + return BlockToolType.HOE; + } + @Override public int getTier() { return ItemTool.TIER_IRON; diff --git a/src/main/java/cn/nukkit/item/ItemHoeNetherite.java b/src/main/java/cn/nukkit/item/ItemHoeNetherite.java index 249e88291f7..28f3bdf850a 100644 --- a/src/main/java/cn/nukkit/item/ItemHoeNetherite.java +++ b/src/main/java/cn/nukkit/item/ItemHoeNetherite.java @@ -1,5 +1,7 @@ package cn.nukkit.item; +import cn.nukkit.block.BlockToolType; + public class ItemHoeNetherite extends ItemTool { public ItemHoeNetherite() { @@ -19,6 +21,11 @@ public boolean isHoe() { return true; } + @Override + public int getBlockToolType() { + return BlockToolType.HOE; + } + @Override public int getAttackDamage() { return 6; diff --git a/src/main/java/cn/nukkit/item/ItemHoeStone.java b/src/main/java/cn/nukkit/item/ItemHoeStone.java index 747d9fc030c..26a985901d6 100644 --- a/src/main/java/cn/nukkit/item/ItemHoeStone.java +++ b/src/main/java/cn/nukkit/item/ItemHoeStone.java @@ -1,5 +1,7 @@ package cn.nukkit.item; +import cn.nukkit.block.BlockToolType; + /** * author: MagicDroidX * Nukkit Project @@ -28,6 +30,11 @@ public boolean isHoe() { return true; } + @Override + public int getBlockToolType() { + return BlockToolType.HOE; + } + @Override public int getTier() { return ItemTool.TIER_STONE; diff --git a/src/main/java/cn/nukkit/item/ItemHoeWood.java b/src/main/java/cn/nukkit/item/ItemHoeWood.java index edeaa4a1c18..63a45adb657 100644 --- a/src/main/java/cn/nukkit/item/ItemHoeWood.java +++ b/src/main/java/cn/nukkit/item/ItemHoeWood.java @@ -1,5 +1,7 @@ package cn.nukkit.item; +import cn.nukkit.block.BlockToolType; + /** * author: MagicDroidX * Nukkit Project @@ -28,6 +30,11 @@ public boolean isHoe() { return true; } + @Override + public int getBlockToolType() { + return BlockToolType.HOE; + } + @Override public int getTier() { return ItemTool.TIER_WOODEN; diff --git a/src/main/java/cn/nukkit/item/ItemPickaxeDiamond.java b/src/main/java/cn/nukkit/item/ItemPickaxeDiamond.java index ac7cecf769b..2c0e74a9bf5 100644 --- a/src/main/java/cn/nukkit/item/ItemPickaxeDiamond.java +++ b/src/main/java/cn/nukkit/item/ItemPickaxeDiamond.java @@ -1,5 +1,7 @@ package cn.nukkit.item; +import cn.nukkit.block.BlockToolType; + /** * author: MagicDroidX * Nukkit Project @@ -33,6 +35,11 @@ public int getTier() { return ItemTool.TIER_DIAMOND; } + @Override + public int getBlockToolType() { + return BlockToolType.PICKAXE; + } + @Override public int getAttackDamage() { return 5; diff --git a/src/main/java/cn/nukkit/item/ItemPickaxeGold.java b/src/main/java/cn/nukkit/item/ItemPickaxeGold.java index 3f847ddaf9a..0612a6e812c 100644 --- a/src/main/java/cn/nukkit/item/ItemPickaxeGold.java +++ b/src/main/java/cn/nukkit/item/ItemPickaxeGold.java @@ -1,5 +1,7 @@ package cn.nukkit.item; +import cn.nukkit.block.BlockToolType; + /** * author: MagicDroidX * Nukkit Project @@ -28,6 +30,11 @@ public boolean isPickaxe() { return true; } + @Override + public int getBlockToolType() { + return BlockToolType.PICKAXE; + } + @Override public int getTier() { return ItemTool.TIER_GOLD; diff --git a/src/main/java/cn/nukkit/item/ItemPickaxeIron.java b/src/main/java/cn/nukkit/item/ItemPickaxeIron.java index 62a01a72c06..d3e4a1d6bc3 100644 --- a/src/main/java/cn/nukkit/item/ItemPickaxeIron.java +++ b/src/main/java/cn/nukkit/item/ItemPickaxeIron.java @@ -1,5 +1,7 @@ package cn.nukkit.item; +import cn.nukkit.block.BlockToolType; + /** * author: MagicDroidX * Nukkit Project @@ -28,6 +30,11 @@ public boolean isPickaxe() { return true; } + @Override + public int getBlockToolType() { + return BlockToolType.PICKAXE; + } + @Override public int getTier() { return ItemTool.TIER_IRON; diff --git a/src/main/java/cn/nukkit/item/ItemPickaxeNetherite.java b/src/main/java/cn/nukkit/item/ItemPickaxeNetherite.java index da6ce21fde8..1818e797396 100644 --- a/src/main/java/cn/nukkit/item/ItemPickaxeNetherite.java +++ b/src/main/java/cn/nukkit/item/ItemPickaxeNetherite.java @@ -1,5 +1,7 @@ package cn.nukkit.item; +import cn.nukkit.block.BlockToolType; + public class ItemPickaxeNetherite extends ItemTool { public ItemPickaxeNetherite() { @@ -19,6 +21,11 @@ public boolean isPickaxe() { return true; } + @Override + public int getBlockToolType() { + return BlockToolType.PICKAXE; + } + @Override public int getAttackDamage() { return 6; diff --git a/src/main/java/cn/nukkit/item/ItemPickaxeStone.java b/src/main/java/cn/nukkit/item/ItemPickaxeStone.java index 8bfa75ef14d..294607b9142 100644 --- a/src/main/java/cn/nukkit/item/ItemPickaxeStone.java +++ b/src/main/java/cn/nukkit/item/ItemPickaxeStone.java @@ -1,5 +1,7 @@ package cn.nukkit.item; +import cn.nukkit.block.BlockToolType; + /** * author: MagicDroidX * Nukkit Project @@ -28,6 +30,11 @@ public boolean isPickaxe() { return true; } + @Override + public int getBlockToolType() { + return BlockToolType.PICKAXE; + } + @Override public int getTier() { return ItemTool.TIER_STONE; diff --git a/src/main/java/cn/nukkit/item/ItemPickaxeWood.java b/src/main/java/cn/nukkit/item/ItemPickaxeWood.java index 97fe4125d69..1a12b2cec37 100644 --- a/src/main/java/cn/nukkit/item/ItemPickaxeWood.java +++ b/src/main/java/cn/nukkit/item/ItemPickaxeWood.java @@ -1,5 +1,7 @@ package cn.nukkit.item; +import cn.nukkit.block.BlockToolType; + /** * author: MagicDroidX * Nukkit Project @@ -28,6 +30,11 @@ public boolean isPickaxe() { return true; } + @Override + public int getBlockToolType() { + return BlockToolType.PICKAXE; + } + @Override public int getTier() { return ItemTool.TIER_WOODEN; diff --git a/src/main/java/cn/nukkit/item/ItemShears.java b/src/main/java/cn/nukkit/item/ItemShears.java index e5995dcdfea..d33d6f6b5ce 100644 --- a/src/main/java/cn/nukkit/item/ItemShears.java +++ b/src/main/java/cn/nukkit/item/ItemShears.java @@ -1,6 +1,7 @@ package cn.nukkit.item; import cn.nukkit.block.Block; +import cn.nukkit.block.BlockToolType; /** * author: MagicDroidX @@ -30,6 +31,11 @@ public boolean isShears() { return true; } + @Override + public int getBlockToolType() { + return BlockToolType.SHEARS; + } + @Override public boolean noDamageOnAttack() { return true; diff --git a/src/main/java/cn/nukkit/item/ItemShovelDiamond.java b/src/main/java/cn/nukkit/item/ItemShovelDiamond.java index d4b35b25bcb..dc5948409fa 100644 --- a/src/main/java/cn/nukkit/item/ItemShovelDiamond.java +++ b/src/main/java/cn/nukkit/item/ItemShovelDiamond.java @@ -1,5 +1,7 @@ package cn.nukkit.item; +import cn.nukkit.block.BlockToolType; + /** * author: MagicDroidX * Nukkit Project @@ -28,6 +30,11 @@ public boolean isShovel() { return true; } + @Override + public int getBlockToolType() { + return BlockToolType.SHOVEL; + } + @Override public int getTier() { return ItemTool.TIER_DIAMOND; diff --git a/src/main/java/cn/nukkit/item/ItemShovelGold.java b/src/main/java/cn/nukkit/item/ItemShovelGold.java index c341c16a60a..fdce4551d41 100644 --- a/src/main/java/cn/nukkit/item/ItemShovelGold.java +++ b/src/main/java/cn/nukkit/item/ItemShovelGold.java @@ -1,5 +1,7 @@ package cn.nukkit.item; +import cn.nukkit.block.BlockToolType; + /** * author: MagicDroidX * Nukkit Project @@ -28,6 +30,11 @@ public boolean isShovel() { return true; } + @Override + public int getBlockToolType() { + return BlockToolType.SHOVEL; + } + @Override public int getTier() { return ItemTool.TIER_GOLD; diff --git a/src/main/java/cn/nukkit/item/ItemShovelIron.java b/src/main/java/cn/nukkit/item/ItemShovelIron.java index d0ae0b630d8..88b4ca5aa98 100644 --- a/src/main/java/cn/nukkit/item/ItemShovelIron.java +++ b/src/main/java/cn/nukkit/item/ItemShovelIron.java @@ -1,5 +1,7 @@ package cn.nukkit.item; +import cn.nukkit.block.BlockToolType; + /** * author: MagicDroidX * Nukkit Project @@ -28,6 +30,11 @@ public boolean isShovel() { return true; } + @Override + public int getBlockToolType() { + return BlockToolType.SHOVEL; + } + @Override public int getTier() { return ItemTool.TIER_IRON; diff --git a/src/main/java/cn/nukkit/item/ItemShovelNetherite.java b/src/main/java/cn/nukkit/item/ItemShovelNetherite.java index 5031fcb5998..f6362537030 100644 --- a/src/main/java/cn/nukkit/item/ItemShovelNetherite.java +++ b/src/main/java/cn/nukkit/item/ItemShovelNetherite.java @@ -1,5 +1,7 @@ package cn.nukkit.item; +import cn.nukkit.block.BlockToolType; + public class ItemShovelNetherite extends ItemTool { public ItemShovelNetherite() { @@ -19,6 +21,11 @@ public boolean isShovel() { return true; } + @Override + public int getBlockToolType() { + return BlockToolType.SHOVEL; + } + @Override public int getAttackDamage() { return 5; diff --git a/src/main/java/cn/nukkit/item/ItemShovelStone.java b/src/main/java/cn/nukkit/item/ItemShovelStone.java index f7465c1803d..c0fed144bef 100644 --- a/src/main/java/cn/nukkit/item/ItemShovelStone.java +++ b/src/main/java/cn/nukkit/item/ItemShovelStone.java @@ -1,5 +1,7 @@ package cn.nukkit.item; +import cn.nukkit.block.BlockToolType; + /** * author: MagicDroidX * Nukkit Project @@ -28,6 +30,11 @@ public boolean isShovel() { return true; } + @Override + public int getBlockToolType() { + return BlockToolType.SHOVEL; + } + @Override public int getTier() { return ItemTool.TIER_STONE; diff --git a/src/main/java/cn/nukkit/item/ItemShovelWood.java b/src/main/java/cn/nukkit/item/ItemShovelWood.java index e202dfd4f32..c3a727030c8 100644 --- a/src/main/java/cn/nukkit/item/ItemShovelWood.java +++ b/src/main/java/cn/nukkit/item/ItemShovelWood.java @@ -1,5 +1,7 @@ package cn.nukkit.item; +import cn.nukkit.block.BlockToolType; + /** * author: MagicDroidX * Nukkit Project @@ -28,6 +30,11 @@ public boolean isShovel() { return true; } + @Override + public int getBlockToolType() { + return BlockToolType.SHOVEL; + } + @Override public int getTier() { return ItemTool.TIER_WOODEN; diff --git a/src/main/java/cn/nukkit/item/ItemSpawnEgg.java b/src/main/java/cn/nukkit/item/ItemSpawnEgg.java index 4745719e319..c7a5e7e5be2 100644 --- a/src/main/java/cn/nukkit/item/ItemSpawnEgg.java +++ b/src/main/java/cn/nukkit/item/ItemSpawnEgg.java @@ -27,7 +27,7 @@ public ItemSpawnEgg(Integer meta) { } public ItemSpawnEgg(Integer meta, int count) { - super(SPAWN_EGG, meta, count, "Spawn EntityEgg"); + super(SPAWN_EGG, meta, count, "Spawn Egg"); } @Override diff --git a/src/main/java/cn/nukkit/item/ItemSwordDiamond.java b/src/main/java/cn/nukkit/item/ItemSwordDiamond.java index 11c494b8465..0c812f6918b 100644 --- a/src/main/java/cn/nukkit/item/ItemSwordDiamond.java +++ b/src/main/java/cn/nukkit/item/ItemSwordDiamond.java @@ -1,5 +1,7 @@ package cn.nukkit.item; +import cn.nukkit.block.BlockToolType; + /** * author: MagicDroidX * Nukkit Project @@ -28,6 +30,11 @@ public boolean isSword() { return true; } + @Override + public int getBlockToolType() { + return BlockToolType.SWORD; + } + @Override public int getTier() { return ItemTool.TIER_DIAMOND; diff --git a/src/main/java/cn/nukkit/item/ItemSwordGold.java b/src/main/java/cn/nukkit/item/ItemSwordGold.java index 87f17237e46..c959ed3322a 100644 --- a/src/main/java/cn/nukkit/item/ItemSwordGold.java +++ b/src/main/java/cn/nukkit/item/ItemSwordGold.java @@ -1,5 +1,7 @@ package cn.nukkit.item; +import cn.nukkit.block.BlockToolType; + /** * author: MagicDroidX * Nukkit Project @@ -28,6 +30,11 @@ public boolean isSword() { return true; } + @Override + public int getBlockToolType() { + return BlockToolType.SWORD; + } + @Override public int getTier() { return ItemTool.TIER_GOLD; diff --git a/src/main/java/cn/nukkit/item/ItemSwordIron.java b/src/main/java/cn/nukkit/item/ItemSwordIron.java index 23c326f1a62..8a96503245f 100644 --- a/src/main/java/cn/nukkit/item/ItemSwordIron.java +++ b/src/main/java/cn/nukkit/item/ItemSwordIron.java @@ -1,5 +1,7 @@ package cn.nukkit.item; +import cn.nukkit.block.BlockToolType; + /** * author: MagicDroidX * Nukkit Project @@ -28,6 +30,11 @@ public boolean isSword() { return true; } + @Override + public int getBlockToolType() { + return BlockToolType.SWORD; + } + @Override public int getTier() { return ItemTool.TIER_IRON; diff --git a/src/main/java/cn/nukkit/item/ItemSwordNetherite.java b/src/main/java/cn/nukkit/item/ItemSwordNetherite.java index 06782d80df3..e6ab18e54ae 100644 --- a/src/main/java/cn/nukkit/item/ItemSwordNetherite.java +++ b/src/main/java/cn/nukkit/item/ItemSwordNetherite.java @@ -1,5 +1,7 @@ package cn.nukkit.item; +import cn.nukkit.block.BlockToolType; + public class ItemSwordNetherite extends ItemTool { public ItemSwordNetherite() { @@ -19,6 +21,11 @@ public boolean isSword() { return true; } + @Override + public int getBlockToolType() { + return BlockToolType.SWORD; + } + @Override public int getAttackDamage() { return 8; diff --git a/src/main/java/cn/nukkit/item/ItemSwordStone.java b/src/main/java/cn/nukkit/item/ItemSwordStone.java index f86f4d1c069..8f56f3accc7 100644 --- a/src/main/java/cn/nukkit/item/ItemSwordStone.java +++ b/src/main/java/cn/nukkit/item/ItemSwordStone.java @@ -1,5 +1,7 @@ package cn.nukkit.item; +import cn.nukkit.block.BlockToolType; + /** * author: MagicDroidX * Nukkit Project @@ -28,6 +30,11 @@ public boolean isSword() { return true; } + @Override + public int getBlockToolType() { + return BlockToolType.SWORD; + } + @Override public int getTier() { return ItemTool.TIER_STONE; diff --git a/src/main/java/cn/nukkit/item/ItemSwordWood.java b/src/main/java/cn/nukkit/item/ItemSwordWood.java index 1eac2c3a13e..b391ed116d5 100644 --- a/src/main/java/cn/nukkit/item/ItemSwordWood.java +++ b/src/main/java/cn/nukkit/item/ItemSwordWood.java @@ -1,5 +1,7 @@ package cn.nukkit.item; +import cn.nukkit.block.BlockToolType; + /** * author: MagicDroidX * Nukkit Project @@ -28,6 +30,11 @@ public boolean isSword() { return true; } + @Override + public int getBlockToolType() { + return BlockToolType.SWORD; + } + @Override public int getTier() { return ItemTool.TIER_WOODEN; diff --git a/src/main/java/cn/nukkit/item/ItemTool.java b/src/main/java/cn/nukkit/item/ItemTool.java index e6401990203..b972b34f018 100644 --- a/src/main/java/cn/nukkit/item/ItemTool.java +++ b/src/main/java/cn/nukkit/item/ItemTool.java @@ -1,6 +1,7 @@ package cn.nukkit.item; import cn.nukkit.block.Block; +import cn.nukkit.block.BlockToolType; import cn.nukkit.entity.Entity; import cn.nukkit.item.enchantment.Enchantment; import cn.nukkit.nbt.tag.ByteTag; @@ -20,14 +21,6 @@ public abstract class ItemTool extends Item implements ItemDurable { public static final int TIER_DIAMOND = 5; public static final int TIER_NETHERITE = 6; - public static final int TYPE_NONE = 0; - public static final int TYPE_SWORD = 1; - public static final int TYPE_SHOVEL = 2; - public static final int TYPE_PICKAXE = 3; - public static final int TYPE_AXE = 4; - public static final int TYPE_SHEARS = 5; - public static final int TYPE_HOE = 6; - public static final int DURABILITY_WOODEN = 59; public static final int DURABILITY_GOLD = 32; public static final int DURABILITY_STONE = 131; @@ -75,10 +68,10 @@ public boolean useOn(Block block) { } if (this.additionalDamageOnBreak()) { - if (block.getBreakTime(this) > 0) { + if (block.getHardness() > 0) { this.setDamage(this.getDamage() + 2); } - } else if (this.isShears() || block.getBreakTime(this) > 0) { + } else if (this.isShears() || block.getHardness() > 0) { this.setDamage(this.getDamage() + 1); } return true; @@ -183,6 +176,16 @@ public int getTier() { return ItemTool.TIER_NETHERITE; } + @Override + public int getBlockToolType() { + return BlockToolType.SWORD + | BlockToolType.SHOVEL + | BlockToolType.PICKAXE + | BlockToolType.AXE + | BlockToolType.SHEARS + | BlockToolType.HOE; + } + @Override public boolean isPickaxe() { return true; diff --git a/src/main/java/cn/nukkit/item/ItemTrident.java b/src/main/java/cn/nukkit/item/ItemTrident.java index 6aea4a507d6..6e964346cb3 100644 --- a/src/main/java/cn/nukkit/item/ItemTrident.java +++ b/src/main/java/cn/nukkit/item/ItemTrident.java @@ -70,6 +70,7 @@ public boolean onRelease(Player player, int ticksUsed) { CompoundTag nbt = Entity.getDefaultNBT(player.getEyePosition(), dir, (float) dir.yRotFromDirection(), (float) dir.xRotFromDirection()); EntityThrownTrident trident = new EntityThrownTrident(player.getChunk(), nbt, player); + trident.setFavoredSlot(player.getInventory().getHeldItemIndex()); trident.setItem(this); double p = (double) ticksUsed / 20; @@ -91,13 +92,9 @@ public boolean onRelease(Player player, int ticksUsed) { if (ev.isCancelled()) { entityShootBowEvent.getProjectile().close(); } else { - Enchantment loyaltyEnchant = this.getEnchantment(Enchantment.LOYALTY); - boolean loyalty = loyaltyEnchant != null && loyaltyEnchant.getLevel() > 0; EntityProjectile projectile = entityShootBowEvent.getProjectile(); if (player.isCreative() && projectile instanceof EntityThrownTrident) { ((EntityThrownTrident) projectile).setPickupMode(EntityThrownTrident.PICKUP_CREATIVE); - } else if (loyalty && projectile instanceof EntityThrownTrident) { - ((EntityThrownTrident) projectile).setPickupMode(EntityThrownTrident.PICKUP_NONE); } projectile.spawnToAll(); player.getLevel().addLevelSoundEvent(player, LevelSoundEventPacket.SOUND_ITEM_TRIDENT_THROW); diff --git a/src/main/java/cn/nukkit/item/food/FoodChorusFruit.java b/src/main/java/cn/nukkit/item/food/FoodChorusFruit.java index 283c3c81ee2..f2083b116fd 100644 --- a/src/main/java/cn/nukkit/item/food/FoodChorusFruit.java +++ b/src/main/java/cn/nukkit/item/food/FoodChorusFruit.java @@ -43,13 +43,13 @@ protected boolean onEatenBy(Player player) { if (y < 0) continue; - while (y >= 0 && !level.getBlock(new Vector3(x, y + 1, z)).isSolid()) { + while (y >= 0 && !level.getBlock(x, y + 1, z).isSolid()) { y--; } y++; // Back up to non solid - Block blockUp = level.getBlock(new Vector3(x, y + 1, z)); - Block blockUp2 = level.getBlock(new Vector3(x, y + 2, z)); + Block blockUp = level.getBlock(x, y + 1, z); + Block blockUp2 = level.getBlock(x, y + 2, z); if (blockUp.isSolid() || blockUp instanceof BlockLiquid || blockUp2.isSolid() || blockUp2 instanceof BlockLiquid) { diff --git a/src/main/java/cn/nukkit/level/ChunkPosition.java b/src/main/java/cn/nukkit/level/ChunkPosition.java index 9537e50c95d..e99346f75c1 100644 --- a/src/main/java/cn/nukkit/level/ChunkPosition.java +++ b/src/main/java/cn/nukkit/level/ChunkPosition.java @@ -131,6 +131,10 @@ public String toString() { return "[" + this.x + ", " + this.z + "]"; } + public String toShortString() { + return this.x + "," + this.z; + } + @Override public ChunkPosition clone() { try { diff --git a/src/main/java/cn/nukkit/level/Explosion.java b/src/main/java/cn/nukkit/level/Explosion.java index a981aea1b93..a42a4a8e279 100644 --- a/src/main/java/cn/nukkit/level/Explosion.java +++ b/src/main/java/cn/nukkit/level/Explosion.java @@ -12,7 +12,6 @@ import cn.nukkit.entity.item.EntityXPOrb; import cn.nukkit.event.block.BlockExplodeEvent; import cn.nukkit.event.block.BlockIgniteEvent.BlockIgniteCause; -import cn.nukkit.event.block.BlockUpdateEvent; import cn.nukkit.event.entity.EntityDamageByBlockEvent; import cn.nukkit.event.entity.EntityDamageByEntityEvent; import cn.nukkit.event.entity.EntityDamageEvent; @@ -26,14 +25,16 @@ import cn.nukkit.network.protocol.LevelEventPacket; import cn.nukkit.network.protocol.LevelSoundEventPacket; import cn.nukkit.utils.Hash; -import it.unimi.dsi.fastutil.longs.LongArraySet; +import it.unimi.dsi.fastutil.longs.Long2ObjectMap; +import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap; +import it.unimi.dsi.fastutil.longs.LongOpenHashSet; import it.unimi.dsi.fastutil.longs.LongSet; import it.unimi.dsi.fastutil.objects.ObjectArrayList; -import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet; +import java.util.ArrayList; +import java.util.Collection; import java.util.Collections; import java.util.List; -import java.util.Set; import java.util.concurrent.ThreadLocalRandom; /** @@ -42,14 +43,14 @@ */ public class Explosion { private static final int RAYS = 16; - private static final double STEP_LEN = 0.3; + private static final float STEP_LEN = 0.3f; private final Level level; private final Position source; private final double size; - private List affectedBlocks = new ObjectArrayList<>(); - private final Set affectedAirs = new ObjectOpenHashSet<>(); + private Collection affectedBlocks = new ArrayList<>(); + private final LongSet affectedAirs = new LongOpenHashSet(); private boolean fire; private final Object what; @@ -134,9 +135,9 @@ public boolean explodeA() { } Vector3 vector = new Vector3(0, 0, 0); - Vector3 vBlock = new Vector3(0, 0, 0); ThreadLocalRandom random = ThreadLocalRandom.current(); + Long2ObjectMap affectedBlocks = new Long2ObjectOpenHashMap<>(); int mRays = RAYS - 1; for (int i = 0; i < RAYS; ++i) { for (int j = 0; j < RAYS; ++j) { @@ -153,30 +154,28 @@ public boolean explodeA() { int x = (int) pointerX; int y = (int) pointerY; int z = (int) pointerZ; - vBlock.x = pointerX >= x ? x : x - 1; - vBlock.y = pointerY >= y ? y : y - 1; - vBlock.z = pointerZ >= z ? z : z - 1; - if (!level.getHeightRange().isValidBlockY(vBlock.y)) { + int blockX = pointerX >= x ? x : x - 1; + int blockY = pointerY >= y ? y : y - 1; + int blockZ = pointerZ >= z ? z : z - 1; + if (!level.getHeightRange().isValidBlockY(blockY)) { break; } - Block block = this.level.getBlock(vBlock); + Block block = this.level.getBlock(blockX, blockY, blockZ); if (block.getId() != BlockID.AIR) { - double resistance = block.getResistance(); + float resistance = block.getResistance(); Block extraBlock = this.level.getExtraBlock(block); if (!extraBlock.isAir()) { resistance += extraBlock.getResistance(); } - blastForce -= (resistance / 5 + 0.3d) * STEP_LEN; + blastForce -= (resistance / 5 + 0.3f) * STEP_LEN; if (blastForce > 0) { - if (!this.affectedBlocks.contains(block)) { - this.affectedBlocks.add(block); - } + affectedBlocks.putIfAbsent(Hash.hashBlockPos(blockX, blockY, blockZ), block); } } else { - this.affectedAirs.add(block); + this.affectedAirs.add(Hash.hashBlockPos(blockX, blockY, blockZ)); } pointerX += vector.x; pointerY += vector.y; @@ -186,7 +185,7 @@ public boolean explodeA() { } } } - + this.affectedBlocks.addAll(affectedBlocks.values()); return true; } @@ -197,8 +196,6 @@ public boolean explodeA() { * @return {@code false} if explosion was canceled, otherwise {@code true} */ public boolean explodeB() { - LongSet updateBlocks = new LongArraySet(); - boolean underwater = false; boolean dealDamage = true; double yield = (1d / this.size) * 100d; @@ -375,19 +372,6 @@ public boolean explodeB() { this.level.setExtraBlock(block, Blocks.air(), true, false); this.level.setBlock(block, Blocks.air(), true); - - for (BlockFace side : BlockFace.getValues()) { - Vector3 sideBlock = block.getSide(side); - long index = Hash.hashBlockPos((int) sideBlock.x, (int) sideBlock.y, (int) sideBlock.z); - if (!this.affectedBlocks.contains(sideBlock) && !updateBlocks.contains(index)) { - BlockUpdateEvent ev = new BlockUpdateEvent(this.level.getBlock(sideBlock), 0); - this.level.getServer().getPluginManager().callEvent(ev); - if (!ev.isCancelled()) { - ev.getBlock().onUpdate(Level.BLOCK_UPDATE_NORMAL); - } - updateBlocks.add(index); - } - } } if (this.fire) { @@ -400,12 +384,13 @@ public boolean explodeB() { } for (Block block : this.affectedBlocks) { - if (random.nextInt(3) == 0 && this.level.getBlock(block).isAir()) { + if (random.nextInt(3) == 0 && (block = this.level.getBlock(block)).isAir()) { BlockFire.tryIgnite(block, sourceBlock, sourceEntity, BlockIgniteCause.EXPLOSION); } } - for (Block block : this.affectedAirs) { - if (random.nextInt(3) == 0 && this.level.getBlock(block).isAir()) { + for (long pos : this.affectedAirs) { + Block block; + if (random.nextInt(3) == 0 && (block = this.level.getBlock(Hash.hashBlockPosX(pos), Hash.hashBlockPosY(pos), Hash.hashBlockPosZ(pos))).isAir()) { BlockFire.tryIgnite(block, sourceBlock, sourceEntity, BlockIgniteCause.EXPLOSION); } } diff --git a/src/main/java/cn/nukkit/level/GlobalBlockPaletteInterface.java b/src/main/java/cn/nukkit/level/GlobalBlockPaletteInterface.java index 6117a755b48..d527e2fd4d5 100644 --- a/src/main/java/cn/nukkit/level/GlobalBlockPaletteInterface.java +++ b/src/main/java/cn/nukkit/level/GlobalBlockPaletteInterface.java @@ -53,6 +53,7 @@ enum StaticVersion { V1_20_40(622, false), V1_20_50(630, false), V1_20_60(649, false), + V1_20_70(662, false), ; private static final StaticVersion MINIMUM_AVAILABLE_VERSION = V1_18_30; diff --git a/src/main/java/cn/nukkit/level/Level.java b/src/main/java/cn/nukkit/level/Level.java index e94570b0ef0..1503ad67577 100644 --- a/src/main/java/cn/nukkit/level/Level.java +++ b/src/main/java/cn/nukkit/level/Level.java @@ -8,6 +8,7 @@ import cn.nukkit.block.BlockRedstoneDiode; import cn.nukkit.blockentity.BlockEntity; import cn.nukkit.entity.Entity; +import cn.nukkit.entity.EntityFullNames; import cn.nukkit.entity.item.EntityFirework; import cn.nukkit.entity.item.EntityItem; import cn.nukkit.entity.item.EntityPainting; @@ -57,7 +58,6 @@ import cn.nukkit.network.protocol.*; import cn.nukkit.network.protocol.BatchPacket.Track; import cn.nukkit.plugin.Plugin; -import cn.nukkit.potion.Effect; import cn.nukkit.scheduler.AsyncTask; import cn.nukkit.scheduler.BlockUpdateScheduler; import cn.nukkit.utils.*; @@ -178,6 +178,7 @@ public class Level implements ChunkManager, Metadatable { randomTickBlocks[Block.CAVE_VINES_HEAD_WITH_BERRIES] = true; randomTickBlocks[Block.MANGROVE_LEAVES] = true; randomTickBlocks[Block.MANGROVE_PROPAGULE] = true; + randomTickBlocks[Block.CHORUS_FLOWER] = true; } /** @@ -320,6 +321,7 @@ public Generator initialValue() { public GameRules gameRules; private boolean redstoneEnabled = true; + private boolean extinguishFireIgnoreGameRule; private boolean autoCompaction; @@ -650,17 +652,13 @@ public void addSound(Sound sound) { this.addSound(sound, (Player[]) null); } - public void addSound(Sound sound, Player player) { - this.addSound(sound, new Player[]{player}); - } - - public void addSound(Sound sound, Player[] players) { + public void addSound(Sound sound, Player... players) { DataPacket[] packets = sound.encode(); if (players == null) { if (packets != null) { for (DataPacket packet : packets) { - this.addChunkPacket((int) sound.x >> 4, (int) sound.z >> 4, packet); + this.addChunkPacket(sound.getChunkX(), sound.getChunkZ(), packet); } } } else { @@ -682,6 +680,14 @@ public void addSound(Vector3 pos, SoundEnum sound) { this.addSound(pos, sound, 1, 1, (Player[]) null); } + public void addSound(Vector3 pos, SoundEnum sound, Player... players) { + this.addSound(pos, sound, 1, 1, players); + } + + public void addSound(Vector3 pos, SoundEnum sound, Collection players) { + this.addSound(pos, sound, 1, 1, players); + } + public void addSound(Vector3 pos, SoundEnum sound, float volume, float pitch) { this.addSound(pos, sound, volume, pitch, (Player[]) null); } @@ -691,30 +697,32 @@ public void addSound(Vector3 pos, SoundEnum sound, float volume, float pitch, Co } public void addSound(Vector3 pos, SoundEnum sound, float volume, float pitch, Player... players) { - Preconditions.checkArgument(volume >= 0 && volume <= 1, "Sound volume must be between 0 and 1"); - Preconditions.checkArgument(pitch >= 0, "Sound pitch must be higher than 0"); + this.addSound(pos, sound.getSound(), volume, pitch, players); + } - PlaySoundPacket packet = new PlaySoundPacket(); - packet.name = sound.getSound(); - packet.volume = volume; - packet.pitch = pitch; - packet.x = pos.getFloorX(); - packet.y = pos.getFloorY(); - packet.z = pos.getFloorZ(); + public void addSound(Vector3 pos, String sound) { + this.addSound(pos, sound, 1, 1, (Player[]) null); + } - if (players == null || players.length == 0) { - if (this.players.isEmpty()) { - return; - } - addChunkPacket(pos.getFloorX() >> 4, pos.getFloorZ() >> 4, packet); - } else { - Server.broadcastPacket(players, packet); - } + public void addSound(Vector3 pos, String sound, Collection players) { + this.addSound(pos, sound, 1, 1, players); + } + + public void addSound(Vector3 pos, String sound, Player... players) { + this.addSound(pos, sound, 1, 1, players); + } + + public void addSound(Vector3 pos, String sound, float volume, float pitch) { + this.addSound(pos, sound, volume, pitch, (Player[]) null); + } + + public void addSound(Vector3 pos, String sound, float volume, float pitch, Collection players) { + this.addSound(pos, sound, volume, pitch, players.toArray(new Player[0])); } public void addSound(Vector3 pos, String sound, float volume, float pitch, Player... players) { - Preconditions.checkArgument(volume >= 0 && volume <= 1, "Sound volume must be between 0 and 1"); - Preconditions.checkArgument(pitch >= 0, "Sound pitch must be higher than 0"); + volume = Mth.clamp(volume, 0, 1); + pitch = Math.max(pitch, 0); PlaySoundPacket packet = new PlaySoundPacket(); packet.name = sound; @@ -728,7 +736,8 @@ public void addSound(Vector3 pos, String sound, float volume, float pitch, Playe if (this.players.isEmpty()) { return; } - addChunkPacket(pos.getFloorX() >> 4, pos.getFloorZ() >> 4, packet); + + addChunkPacket(pos.getChunkX(), pos.getChunkZ(), packet); } else { Server.broadcastPacket(players, packet); } @@ -742,6 +751,7 @@ public void addLevelEvent(Vector3 pos, int event, int data) { if (this.players.isEmpty()) { return; } + LevelEventPacket pk = new LevelEventPacket(); pk.evid = event; if (pos != null) { @@ -770,6 +780,7 @@ public void addLevelEvent(Vector3 pos, int event, CompoundTag data) { if (this.players.isEmpty()) { return; } + LevelEventGenericPacket pk = new LevelEventGenericPacket(); pk.eventId = event; pk.tag = data; @@ -781,43 +792,6 @@ public void addLevelEvent(Vector3 pos, int event, CompoundTag data) { } } - public void addLevelSoundEvent(int type, int pitch, int data, Vector3 pos) { - this.addLevelSoundEvent(type, pitch, data, pos, false); - } - - public void addLevelSoundEvent(int type, int pitch, int data, Vector3 pos, boolean isGlobal) { - if (this.players.isEmpty()) { - return; - } - LevelSoundEventPacket pk = new LevelSoundEventPacket(); - pk.sound = type; - pk.pitch = pitch; - pk.extraData = data; - pk.x = (float) pos.x; - pk.y = (float) pos.y; - pk.z = (float) pos.z; - pk.isGlobal = isGlobal; - - this.addChunkPacket(pos.getFloorX() >> 4, pos.getFloorZ() >> 4, pk); - } - - public void addLevelSoundEvent(int type, int pitch, int data, Vector3 pos, Player[] viewers) { - this.addLevelSoundEvent(type, pitch, data, pos, false, viewers); - } - - public void addLevelSoundEvent(int type, int pitch, int data, Vector3 pos, boolean isGlobal, Player[] viewers) { - LevelSoundEventPacket pk = new LevelSoundEventPacket(); - pk.sound = type; - pk.pitch = pitch; - pk.extraData = data; - pk.x = (float) pos.x; - pk.y = (float) pos.y; - pk.z = (float) pos.z; - pk.isGlobal = isGlobal; - - Server.broadcastPacket(viewers, pk); - } - public void addLevelSoundEvent(Vector3 pos, int type) { this.addLevelSoundEvent(pos, type, -1); } @@ -833,11 +807,11 @@ public void addLevelSoundEvent(Vector3 pos, int type, int data) { this.addLevelSoundEvent(pos, type, data, ":", false, false); } - public void addLevelSoundEvent(Vector3 pos, int type, Player[] viewers) { + public void addLevelSoundEvent(Vector3 pos, int type, Player... viewers) { this.addLevelSoundEvent(pos, type, -1, ":", false, false, viewers); } - public void addLevelSoundEvent(Vector3 pos, int type, int data, Player[] viewers) { + public void addLevelSoundEvent(Vector3 pos, int type, int data, Player... viewers) { this.addLevelSoundEvent(pos, type, data, ":", false, false, viewers); } @@ -845,7 +819,7 @@ public void addLevelSoundEvent(Vector3 pos, int type, String identifier) { this.addLevelSoundEvent(pos, type, -1, identifier, false, false); } - public void addLevelSoundEvent(Vector3 pos, int type, String identifier, Player[] viewers) { + public void addLevelSoundEvent(Vector3 pos, int type, String identifier, Player... viewers) { this.addLevelSoundEvent(pos, type, -1, identifier, false, false, viewers); } @@ -853,7 +827,7 @@ public void addLevelSoundEvent(Vector3 pos, int type, String identifier, boolean this.addLevelSoundEvent(pos, type, -1, identifier, isBaby, false); } - public void addLevelSoundEvent(Vector3 pos, int type, String identifier, boolean isBaby, Player[] viewers) { + public void addLevelSoundEvent(Vector3 pos, int type, String identifier, boolean isBaby, Player... viewers) { this.addLevelSoundEvent(pos, type, -1, identifier, isBaby, false, viewers); } @@ -861,7 +835,7 @@ public void addLevelSoundEvent(Vector3 pos, int type, String identifier, boolean this.addLevelSoundEvent(pos, type, -1, identifier, isBaby, isGlobal); } - public void addLevelSoundEvent(Vector3 pos, int type, String identifier, boolean isBaby, boolean isGlobal, Player[] viewers) { + public void addLevelSoundEvent(Vector3 pos, int type, String identifier, boolean isBaby, boolean isGlobal, Player... viewers) { this.addLevelSoundEvent(pos, type, -1, identifier, isBaby, isGlobal, viewers); } @@ -869,7 +843,7 @@ public void addLevelSoundEvent(Vector3 pos, int type, int data, String identifie this.addLevelSoundEvent(pos, type, data, identifier, false, false); } - public void addLevelSoundEvent(Vector3 pos, int type, int data, String identifier, Player[] viewers) { + public void addLevelSoundEvent(Vector3 pos, int type, int data, String identifier, Player... viewers) { this.addLevelSoundEvent(pos, type, data, identifier, false, false, viewers); } @@ -877,15 +851,15 @@ public void addLevelSoundEvent(Vector3 pos, int type, int data, String identifie this.addLevelSoundEvent(pos, type, data, identifier, isBaby, false); } - public void addLevelSoundEvent(Vector3 pos, int type, int data, String identifier, boolean isBaby, Player[] viewers) { + public void addLevelSoundEvent(Vector3 pos, int type, int data, String identifier, boolean isBaby, Player... viewers) { this.addLevelSoundEvent(pos, type, data, identifier, isBaby, false, viewers); } public void addLevelSoundEvent(Vector3 pos, int type, int data, String identifier, boolean isBaby, boolean isGlobal) { - this.addLevelSoundEvent(pos, type, data, identifier, isBaby, isGlobal, null); + this.addLevelSoundEvent(pos, type, data, identifier, isBaby, isGlobal, (Player[]) null); } - public void addLevelSoundEvent(Vector3 pos, int type, int data, String identifier, boolean isBaby, boolean isGlobal, Player[] viewers) { + public void addLevelSoundEvent(Vector3 pos, int type, int data, String identifier, boolean isBaby, boolean isGlobal, Player... viewers) { LevelSoundEventPacket pk = new LevelSoundEventPacket(); pk.sound = type; pk.extraData = data; @@ -896,8 +870,9 @@ public void addLevelSoundEvent(Vector3 pos, int type, int data, String identifie pk.isGlobal = isGlobal; pk.isBabyMob = isBaby; - if (viewers == null || viewers.length == 0) this.addChunkPacket(pos.getFloorX() >> 4, pos.getFloorZ() >> 4, pk); - else { + if (viewers == null || viewers.length == 0) { + this.addChunkPacket(pos.getChunkX(), pos.getChunkZ(), pk); + } else { Server.broadcastPacket(viewers, pk); } } @@ -906,20 +881,17 @@ public void addParticle(Particle particle) { this.addParticle(particle, (Player[]) null); } - public void addParticle(Particle particle, Player player) { - this.addParticle(particle, new Player[]{player}); - } - - public void addParticle(Particle particle, Player[] players) { + public void addParticle(Particle particle, Player... players) { DataPacket[] packets = particle.encode(); if (players == null || players.length == 0) { if (this.players.isEmpty()) { return; } + if (packets != null) { for (DataPacket packet : packets) { - this.addChunkPacket((int) particle.x >> 4, (int) particle.z >> 4, packet); + this.addChunkPacket(particle.getChunkX(), particle.getChunkZ(), packet); } } } else { @@ -937,36 +909,42 @@ public void addParticle(Particle particle, Collection players) { this.addParticle(particle, players.toArray(new Player[0])); } - public void addParticleEffect(Vector3 pos, ParticleEffect particleEffect) { - this.addParticleEffect(pos, particleEffect, -1, this.getDimension().ordinal(), (Player[]) null); + public void addParticleEffect(Vector3 pos, ParticleEffect particleEffect, Player... players) { + this.addParticleEffect(pos, particleEffect, -1, null, players); + } + + public void addParticleEffect(Vector3 pos, ParticleEffect particleEffect, long uniqueEntityId, Player... players) { + this.addParticleEffect(pos, particleEffect, uniqueEntityId, null, players); } - public void addParticleEffect(Vector3 pos, ParticleEffect particleEffect, long uniqueEntityId) { - this.addParticleEffect(pos, particleEffect, uniqueEntityId, this.getDimension().ordinal(), (Player[]) null); + public void addParticleEffect(Vector3 pos, ParticleEffect particleEffect, @Nullable String molangVariables, Player... players) { + this.addParticleEffect(pos, particleEffect, -1, molangVariables, players); } - public void addParticleEffect(Vector3 pos, ParticleEffect particleEffect, long uniqueEntityId, int dimensionId) { - this.addParticleEffect(pos, particleEffect, uniqueEntityId, dimensionId, (Player[]) null); + public void addParticleEffect(Vector3 pos, ParticleEffect particleEffect, long uniqueEntityId, @Nullable String molangVariables, Player... players) { + this.addParticleEffect(pos, particleEffect.getIdentifier(), uniqueEntityId, molangVariables, players); } - public void addParticleEffect(Vector3 pos, ParticleEffect particleEffect, long uniqueEntityId, int dimensionId, Collection players) { - this.addParticleEffect(pos, particleEffect, uniqueEntityId, dimensionId, players.toArray(new Player[0])); + public void addParticleEffect(Vector3 pos, String identifier, Player... players) { + this.addParticleEffect(pos, identifier, -1, null, players); } - public void addParticleEffect(Vector3 pos, ParticleEffect particleEffect, long uniqueEntityId, int dimensionId, Player... players) { - this.addParticleEffect(pos.asVector3f(), particleEffect.getIdentifier(), uniqueEntityId, dimensionId, players); + public void addParticleEffect(Vector3 pos, String identifier, long uniqueEntityId, Player... players) { + this.addParticleEffect(pos, identifier, uniqueEntityId, null, players); } - public void addParticleEffect(Vector3f pos, String identifier, long uniqueEntityId, int dimensionId, Player... players) { - this.addParticleEffect(pos, identifier, uniqueEntityId, dimensionId, null, players); + public void addParticleEffect(Vector3 pos, String identifier, @Nullable String molangVariables, Player... players) { + this.addParticleEffect(pos, identifier, -1, molangVariables, players); } - public void addParticleEffect(Vector3f pos, String identifier, long uniqueEntityId, int dimensionId, String molangVariables, Player... players) { + public void addParticleEffect(Vector3 pos, String identifier, long uniqueEntityId, @Nullable String molangVariables, Player... players) { if (players == null || players.length == 0) { players = this.getChunkPlayers(pos.getChunkX(), pos.getChunkZ()).values().toArray(new Player[0]); } + + Vector3f vec = pos.asVector3f(); for (Player player : players) { - player.spawnParticleEffect(pos, identifier, uniqueEntityId, molangVariables); + player.spawnParticleEffect(vec, identifier, uniqueEntityId, molangVariables); } } @@ -1332,8 +1310,8 @@ private void performThunder(long index, FullChunk chunk) { bolt.setEffect(false); } - this.addLevelSoundEvent(LevelSoundEventPacket.SOUND_THUNDER, EntityLightning.NETWORK_ID, -1, vector, false); - this.addLevelSoundEvent(LevelSoundEventPacket.SOUND_EXPLODE, EntityLightning.NETWORK_ID, -1, vector, false); + this.addLevelSoundEvent(vector, LevelSoundEventPacket.SOUND_THUNDER, EntityFullNames.LIGHTNING_BOLT); + this.addLevelSoundEvent(vector, LevelSoundEventPacket.SOUND_EXPLODE, EntityFullNames.LIGHTNING_BOLT); } } @@ -1849,6 +1827,14 @@ public boolean isFullBlock(Vector3 pos) { */ @Nullable public MovingObjectPosition clip(Vector3 a, Vector3 b, boolean liquid, int maxDistance) { + return clip(a, b, liquid, maxDistance, false); + } + + /** + * @return block hit result + */ + @Nullable + public MovingObjectPosition clip(Vector3 a, Vector3 b, boolean liquid, int maxDistance, boolean ignoreBarrier) { int xBlock0 = Mth.floor(a.x); int yBlock0 = Mth.floor(a.y); int zBlock0 = Mth.floor(a.z); @@ -1857,24 +1843,29 @@ public MovingObjectPosition clip(Vector3 a, Vector3 b, boolean liquid, int maxDi int zBlock1 = Mth.floor(b.z); MovingObjectPosition hitResult; - Block block; - Block extraBlock; if (liquid) { - extraBlock = getExtraBlock(xBlock0, yBlock0, zBlock0, false); + Block extraBlock = getExtraBlock(xBlock0, yBlock0, zBlock0, false); if (extraBlock.isLiquid()) { hitResult = extraBlock.clip(a, b, extraBlock::getCollisionBoundingBox); } else if (!extraBlock.isAir()) { hitResult = extraBlock.calculateIntercept(a, b); } else { - block = getBlock(xBlock0, yBlock0, zBlock0, false); + Block block = getBlock(xBlock0, yBlock0, zBlock0, false); if (block.isLiquid()) { hitResult = block.clip(a, b, block::getCollisionBoundingBox); + } else if (ignoreBarrier && block.is(Block.BARRIER)) { + hitResult = null; } else { hitResult = block.calculateIntercept(a, b); } } } else { - hitResult = getBlock(xBlock0, yBlock0, zBlock0, false).calculateIntercept(a, b); + Block block = getBlock(xBlock0, yBlock0, zBlock0, false); + if (ignoreBarrier && block.is(Block.BARRIER)) { + hitResult = null; + } else { + hitResult = block.calculateIntercept(a, b); + } } if (hitResult != null) { return hitResult; @@ -1969,21 +1960,24 @@ public MovingObjectPosition clip(Vector3 a, Vector3 b, boolean liquid, int maxDi } if (liquid) { - extraBlock = getExtraBlock(xBlock0, yBlock0, zBlock0, false); + Block extraBlock = getExtraBlock(xBlock0, yBlock0, zBlock0, false); if (extraBlock.isLiquid()) { hitResult = extraBlock.clip(a, b, extraBlock::getCollisionBoundingBox); } else if (!extraBlock.isAir()) { hitResult = extraBlock.calculateIntercept(a, b); } else { - block = getBlock(xBlock0, yBlock0, zBlock0, false); + Block block = getBlock(xBlock0, yBlock0, zBlock0, false); if (block.isLiquid()) { hitResult = block.clip(a, b, block::getCollisionBoundingBox); - } else { + } else if (!ignoreBarrier || !block.is(Block.BARRIER)) { hitResult = block.calculateIntercept(a, b); } } } else { - hitResult = getBlock(xBlock0, yBlock0, zBlock0, false).calculateIntercept(a, b); + Block block = getBlock(xBlock0, yBlock0, zBlock0, false); + if (!ignoreBarrier || !block.is(Block.BARRIER)) { + hitResult = block.calculateIntercept(a, b); + } } if (hitResult != null) { return hitResult; @@ -2681,43 +2675,24 @@ public Item useBreakOn(Vector3 vector, @Nullable BlockFace face, @Nullable Item } } - double breakTime = target.getBreakTime(item, player); - // this in - // block - // class + float breakTime = player.isCreative() ? 0 : target.getBreakTime(item, player); - if (player.isCreative() && breakTime > 0.15) { - breakTime = 0.15; + if (breakTime > 0) { + breakTime -= 0.15f; // 3 ticks } - Effect haste = player.getEffect(Effect.HASTE); - if (haste != null) { - breakTime *= 1 - (0.2 * (haste.getAmplifier() + 1)); - } - - Effect miningFatigue = player.getEffect(Effect.MINING_FATIGUE); - if (miningFatigue != null) { - breakTime *= 1 - (0.3 * (miningFatigue.getAmplifier() + 1)); - } - - Enchantment eff = !isEnchantedBook ? item.getEnchantment(Enchantment.EFFICIENCY) : null; - if (eff != null && eff.getLevel() > 0) { - breakTime *= 1 - (0.3 * eff.getLevel()); - } - - breakTime -= 0.15; - Item[] eventDrops; if (!player.isSurvival()) { eventDrops = new Item[0]; } else if (isSilkTouch && target.canSilkTouch()) { eventDrops = new Item[]{target.getSilkTouchResource()}; } else { - eventDrops = target.getDrops(item); + eventDrops = target.getDrops(item, player); } + long now = System.currentTimeMillis(); BlockBreakEvent ev = new BlockBreakEvent(player, target, face, item, eventDrops, player.isCreative(), - (player.lastBreak + breakTime * 1000) > System.currentTimeMillis()); + (player.lastBreak + breakTime * 1000) > now); if (player.isSurvival() && !target.isBreakable(item)) { ev.setCancelled(); @@ -2732,7 +2707,7 @@ public Item useBreakOn(Vector3 vector, @Nullable BlockFace face, @Nullable Item return null; } - player.lastBreak = System.currentTimeMillis(); + player.lastBreak = now; drops = ev.getDrops(); dropExp = ev.getDropExp(); @@ -2757,7 +2732,7 @@ public Item useBreakOn(Vector3 vector, @Nullable BlockFace face, @Nullable Item this.updateComparatorOutputLevel(target); } - target.onBreak(item); + target.onBreak(item, player); Block newBlock = getBlock(target); Block extra = getExtraBlock(target); @@ -3511,7 +3486,7 @@ public int getHighestBlockAt(int x, int z) { public BlockColor getMapColorAt(int x, int z) { int y = getHighestBlockAt(x, z); while (y > 1) { - Block block = getBlock(new Vector3(x, y, z)); + Block block = getBlock(x, y, z); BlockColor blockColor = block.getColor(); if (blockColor.getAlpha() == 0x00) { y--; @@ -4898,6 +4873,14 @@ public void setRedstoneEnabled(boolean redstoneEnabled) { this.redstoneEnabled = redstoneEnabled; } + public boolean isExtinguishFireIgnoreGameRule() { + return this.extinguishFireIgnoreGameRule; + } + + public void setExtinguishFireIgnoreGameRule(boolean ignore) { + this.extinguishFireIgnoreGameRule = ignore; + } + public static BatchPacket getChunkCacheFromData(int x, int z, int subChunkCount, byte[] payload) { return getChunkCacheFromData(x, z, subChunkCount, 0, payload); } diff --git a/src/main/java/cn/nukkit/level/Location.java b/src/main/java/cn/nukkit/level/Location.java index da63cb669a5..be03868c482 100644 --- a/src/main/java/cn/nukkit/level/Location.java +++ b/src/main/java/cn/nukkit/level/Location.java @@ -187,8 +187,9 @@ public Location abs() { public Vector3 getDirectionVector() { double pitch = ((getPitch() + 90) * Math.PI) / 180; double yaw = ((getYaw() + 90) * Math.PI) / 180; - double x = Mth.sin(pitch) * Mth.cos(yaw); - double z = Mth.sin(pitch) * Mth.sin(yaw); + double sp = Mth.sin(pitch); + double x = sp * Mth.cos(yaw); + double z = sp * Mth.sin(yaw); double y = Mth.cos(pitch); return new Vector3(x, y, z).normalize(); } diff --git a/src/main/java/cn/nukkit/level/format/FullChunk.java b/src/main/java/cn/nukkit/level/format/FullChunk.java index c9f9c6caba4..b825dd6363d 100644 --- a/src/main/java/cn/nukkit/level/format/FullChunk.java +++ b/src/main/java/cn/nukkit/level/format/FullChunk.java @@ -233,10 +233,13 @@ default void fixBlocks() { } default void fixBlocks(boolean fixWalls, boolean fixBlockLayers, boolean fixBlockEntities) { - fixBlocks(fixWalls, fixBlockLayers, fixBlockEntities, false); + fixBlocks(fixWalls, fixBlockLayers, fixBlockEntities, false, false, false); } - default void fixBlocks(boolean fixWalls, boolean fixBlockLayers, boolean fixBlockEntities, boolean emptyContainers) { + /** + * @param replaceInvisibleBedrock replace invisible bedrock with barrier + */ + default void fixBlocks(boolean fixWalls, boolean fixBlockLayers, boolean fixBlockEntities, boolean emptyContainers, boolean persistentLeaves, boolean replaceInvisibleBedrock) { } default boolean fixInvalidBiome() { diff --git a/src/main/java/cn/nukkit/level/format/generic/BaseFullChunk.java b/src/main/java/cn/nukkit/level/format/generic/BaseFullChunk.java index d4ba465342b..c44bf7d5192 100644 --- a/src/main/java/cn/nukkit/level/format/generic/BaseFullChunk.java +++ b/src/main/java/cn/nukkit/level/format/generic/BaseFullChunk.java @@ -3,6 +3,7 @@ import cn.nukkit.Player; import cn.nukkit.block.Block; import cn.nukkit.block.BlockID; +import cn.nukkit.block.BlockLeaves; import cn.nukkit.block.BlockWall; import cn.nukkit.blockentity.BlockEntities; import cn.nukkit.blockentity.BlockEntity; @@ -633,7 +634,7 @@ private void removeInvalidBlockEntities(Level level) { } @Override - public void fixBlocks(boolean fixWalls, boolean fixBlockLayers, boolean fixBlockEntities, boolean emptyContainers) { + public void fixBlocks(boolean fixWalls, boolean fixBlockLayers, boolean fixBlockEntities, boolean emptyContainers, boolean persistentLeaves, boolean replaceInvisibleBedrock) { boolean blockEntityOp = fixBlockEntities || emptyContainers; Level level = provider.getLevel(); @@ -684,6 +685,22 @@ public void fixBlocks(boolean fixWalls, boolean fixBlockLayers, boolean fixBlock } } + if (replaceInvisibleBedrock && block.is(Block.INVISIBLE_BEDROCK)) { + this.setBlock(0, x, worldY, z, Block.BARRIER); + continue; + } + + if (persistentLeaves && block instanceof BlockLeaves leaves) { + int oldMeta = block.getDamage(); + leaves.setPersistent(true); + leaves.setCheckDecay(false); + int newMeta = block.getDamage(); + if (oldMeta != newMeta) { + this.setBlock(0, x, worldY, z, block.getId(), newMeta); + } + continue; + } + if (fixWalls && block instanceof BlockWall wall) { int oldMeta = block.getDamage(); wall.recalculateConnections(); diff --git a/src/main/java/cn/nukkit/math/BlockVector3.java b/src/main/java/cn/nukkit/math/BlockVector3.java index f923ad5788f..d2bf226a394 100644 --- a/src/main/java/cn/nukkit/math/BlockVector3.java +++ b/src/main/java/cn/nukkit/math/BlockVector3.java @@ -20,6 +20,24 @@ public BlockVector3(int x, int y, int z) { public BlockVector3() { } + public BlockVector3(BlockVector3 vec) { + this.x = vec.x; + this.y = vec.y; + this.z = vec.z; + } + + public BlockVector3(Vector3f vec) { + this.x = vec.getFloorX(); + this.y = vec.getFloorY(); + this.z = vec.getFloorZ(); + } + + public BlockVector3(Vector3 vec) { + this.x = vec.getFloorX(); + this.y = vec.getFloorY(); + this.z = vec.getFloorZ(); + } + public BlockVector3 setComponents(int x, int y, int z) { this.x = x; this.y = y; @@ -27,6 +45,27 @@ public BlockVector3 setComponents(int x, int y, int z) { return this; } + public BlockVector3 setComponents(BlockVector3 other) { + this.x = other.x; + this.y = other.y; + this.z = other.z; + return this; + } + + public BlockVector3 setComponents(Vector3f other) { + this.x = other.getFloorX(); + this.y = other.getFloorY(); + this.z = other.getFloorZ(); + return this; + } + + public BlockVector3 setComponents(Vector3 other) { + this.x = other.getFloorX(); + this.y = other.getFloorY(); + this.z = other.getFloorZ(); + return this; + } + public int getX() { return this.x; } @@ -184,11 +223,19 @@ public BlockVector3 west(int step) { } public double distance(Vector3 pos) { - return Math.sqrt(this.distanceSquared(pos)); + return distance(pos.x, pos.y, pos.z); } public double distance(BlockVector3 pos) { - return Math.sqrt(this.distanceSquared(pos)); + return distance(pos.x, pos.y, pos.z); + } + + public double distance(double x, double y, double z) { + return Math.sqrt(this.distanceSquared(x, y, z)); + } + + public double distance(int x, int y, int z) { + return Math.sqrt(this.distanceSquared(x, y, z)); } public double distanceSquared(Vector3 pos) { @@ -206,6 +253,13 @@ public double distanceSquared(double x, double y, double z) { return xDiff * xDiff + yDiff * yDiff + zDiff * zDiff; } + public int distanceSquared(int x, int y, int z) { + int xDiff = this.x - x; + int yDiff = this.y - y; + int zDiff = this.z - z; + return xDiff * xDiff + yDiff * yDiff + zDiff * zDiff; + } + public int distanceManhattan(Vector3 pos) { return distanceManhattan(pos.getFloorX(), pos.getFloorY(), pos.getFloorZ()); } @@ -218,6 +272,54 @@ public int distanceManhattan(int x, int y, int z) { return Math.abs(x - this.x) + Math.abs(y - this.y) + Math.abs(z - this.z); } + public double distance2(Vector3 pos) { + return distance2(pos.x, pos.z); + } + + public double distance2(BlockVector3 pos) { + return distance2(pos.x, pos.z); + } + + public double distance2(double x, double z) { + return Math.sqrt(this.distanceSquared2(x, z)); + } + + public double distance2(int x, int z) { + return Math.sqrt(this.distanceSquared2(x, z)); + } + + public double distanceSquared2(Vector3 pos) { + return distanceSquared2(pos.x, pos.z); + } + + public double distanceSquared2(BlockVector3 pos) { + return distanceSquared2(pos.x, pos.z); + } + + public double distanceSquared2(double x, double z) { + double xDiff = this.x - x; + double zDiff = this.z - z; + return xDiff * xDiff + zDiff * zDiff; + } + + public int distanceSquared2(int x, int z) { + int xDiff = this.x - x; + int zDiff = this.z - z; + return xDiff * xDiff + zDiff * zDiff; + } + + public int distanceManhattan2(Vector3 pos) { + return distanceManhattan2(pos.getFloorX(), pos.getFloorZ()); + } + + public int distanceManhattan2(BlockVector3 pos) { + return distanceManhattan2(pos.x, pos.z); + } + + public int distanceManhattan2(int x, int z) { + return Math.abs(x - this.x) + Math.abs(z - this.z); + } + public double length() { return Math.sqrt(this.lengthSquared()); } @@ -235,7 +337,19 @@ public int horizontalDistanceSquared() { } public int dot(BlockVector3 v) { - return this.x * v.x + this.y * v.y + this.z * v.z; + return this.dot(v.x, v.y, v.z); + } + + public int dot(int x, int y, int z) { + return this.x * x + this.y * y + this.z * z; + } + + public int dot2(BlockVector3 v) { + return this.dot2(v.x, v.z); + } + + public int dot2(int x, int z) { + return this.x * x + this.z * z; } public BlockVector3 cross(BlockVector3 v) { @@ -314,7 +428,6 @@ public double angleSigned(BlockVector3 to, BlockVector3 axis) { @Override public boolean equals(Object o) { - if (o == null) return false; if (o == this) return true; if (!(o instanceof BlockVector3)) return false; @@ -337,15 +450,15 @@ public final int hashCode() { return (x ^ (z << 12)) ^ (y << 24); } - public int rawHashCode() { - return super.hashCode(); - } - @Override public String toString() { return "BlockVector3(x=" + this.x + ",y=" + this.y + ",z=" + this.z + ")"; } + public String toShortString() { + return this.x + "," + this.y + "," + this.z; + } + public String debugText() { return "(" + x + "," + y + "," + z + ")"; } diff --git a/src/main/java/cn/nukkit/math/Mth.java b/src/main/java/cn/nukkit/math/Mth.java index ff6c58500cb..130e93c001c 100644 --- a/src/main/java/cn/nukkit/math/Mth.java +++ b/src/main/java/cn/nukkit/math/Mth.java @@ -13,6 +13,7 @@ public final class Mth { public static final float EPSILON = 1.0E-5f; public static final float EPSILON_NORMAL_SQRT = 1.0E-15f; public static final float SQRT_OF_TWO = (float) Math.sqrt(2); + public static final float SQRT_OF_THREE = (float) Math.sqrt(3); private static final double LOG_OF_TWO = Math.log(2); private static final float[] SIN = new float[65536]; diff --git a/src/main/java/cn/nukkit/math/SimpleAxisAlignedBB.java b/src/main/java/cn/nukkit/math/SimpleAxisAlignedBB.java index b0c03c91ad7..c04b89cb982 100644 --- a/src/main/java/cn/nukkit/math/SimpleAxisAlignedBB.java +++ b/src/main/java/cn/nukkit/math/SimpleAxisAlignedBB.java @@ -36,6 +36,10 @@ public String toString() { return "AxisAlignedBB(" + this.getMinX() + ", " + this.getMinY() + ", " + this.getMinZ() + ", " + this.getMaxX() + ", " + this.getMaxY() + ", " + this.getMaxZ() + ")"; } + public String toShortString() { + return this.getMinX() + "," + this.getMinY() + "," + this.getMinZ() + "," + this.getMaxX() + "," + this.getMaxY() + "," + this.getMaxZ(); + } + public String debugText() { return "(" + NukkitMath.round(getMinX(), 2) + "," + NukkitMath.round(getMinY(), 2) + "," + NukkitMath.round(getMinZ(), 2) + "," + NukkitMath.round(getMaxX(), 2) + "," + NukkitMath.round(getMaxY(), 2) + "," + NukkitMath.round(getMaxZ(), 2) + ")"; } @@ -101,7 +105,38 @@ public void setMaxZ(double maxZ) { } @Override - public AxisAlignedBB clone() { - return new SimpleAxisAlignedBB(minX, minY, minZ, maxX, maxY, maxZ); + public SimpleAxisAlignedBB clone() { + try { + return (SimpleAxisAlignedBB) super.clone(); + } catch (CloneNotSupportedException e) { + return null; + } + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (!(obj instanceof SimpleAxisAlignedBB that)) { + return false; + } + return Double.compare(that.minX, this.minX) == 0 + && Double.compare(that.minY, this.minY) == 0 + && Double.compare(that.minZ, this.minZ) == 0 + && Double.compare(that.maxX, this.maxX) == 0 + && Double.compare(that.maxY, this.maxY) == 0 + && Double.compare(that.maxZ, this.maxZ) == 0; + } + + @Override + public int hashCode() { + int hash = Double.hashCode(this.minX); + hash = 31 * hash + Double.hashCode(this.minY); + hash = 31 * hash + Double.hashCode(this.minZ); + hash = 31 * hash + Double.hashCode(this.maxX); + hash = 31 * hash + Double.hashCode(this.maxY); + hash = 31 * hash + Double.hashCode(this.maxZ); + return hash; } } diff --git a/src/main/java/cn/nukkit/math/Vector2.java b/src/main/java/cn/nukkit/math/Vector2.java index 12e143e48d3..ef009aeb69d 100644 --- a/src/main/java/cn/nukkit/math/Vector2.java +++ b/src/main/java/cn/nukkit/math/Vector2.java @@ -1,12 +1,10 @@ package cn.nukkit.math; -import java.util.Objects; - /** * author: MagicDroidX * Nukkit Project */ -public class Vector2 { +public class Vector2 implements Cloneable { public static final Vector2 ZERO = new Vector2(0, 0); public final double x; @@ -97,10 +95,6 @@ public Vector2 divide(Vector2 vec) { return new Vector2(this.x / vec.getX(), this.y / vec.getY()); } - public double distance(double x) { - return this.distance(x, 0); - } - public double distance(double x, double y) { return Math.sqrt(this.distanceSquared(x, y)); } @@ -109,10 +103,6 @@ public double distance(Vector2 vector) { return Math.sqrt(this.distanceSquared(vector.getX(), vector.getY())); } - public double distanceSquared(double x) { - return this.distanceSquared(x, 0); - } - public double distanceSquared(double x, double y) { double xDiff = this.x - x; double yDiff = this.y - y; @@ -148,10 +138,39 @@ public String toString() { return "Vector2(x=" + this.x + ",y=" + this.y + ")"; } + public String toShortString() { + return this.x + "," + this.y; + } + public String debugText() { return "(" + NukkitMath.round(x, 2) + "," + NukkitMath.round(y, 2) + ")"; } + public final Vector2 copyVec() { + return new Vector2(x, y); + } + + public final boolean equalsVec(Vector2 vec) { + if (vec == null) { + return false; + } + return Double.compare(vec.x, this.x) == 0 + && Double.compare(vec.y, this.y) == 0; + } + + public Vector2f asVector2f() { + return new Vector2f((float) this.x, (float) this.y); + } + + @Override + public Vector2 clone() { + try { + return (Vector2) super.clone(); + } catch (CloneNotSupportedException e) { + return null; + } + } + @Override public boolean equals(Object o) { if (this == o) return true; @@ -163,6 +182,8 @@ public boolean equals(Object o) { @Override public int hashCode() { - return Objects.hash(x, y); + int hash = Double.hashCode(this.x); + hash = 31 * hash + Double.hashCode(this.y); + return hash; } } \ No newline at end of file diff --git a/src/main/java/cn/nukkit/math/Vector2f.java b/src/main/java/cn/nukkit/math/Vector2f.java index 905b90761ba..79c655a97a8 100644 --- a/src/main/java/cn/nukkit/math/Vector2f.java +++ b/src/main/java/cn/nukkit/math/Vector2f.java @@ -4,7 +4,7 @@ * author: MagicDroidX * Nukkit Project */ -public class Vector2f { +public class Vector2f implements Cloneable { public static final Vector2f ZERO = new Vector2f(0, 0); public final float x; @@ -95,10 +95,6 @@ public Vector2f divide(Vector2f vec) { return new Vector2f(this.x / vec.getX(), this.y / vec.getY()); } - public double distance(float x) { - return this.distance(x, 0); - } - public double distance(float x, float y) { return Math.sqrt(this.distanceSquared(x, y)); } @@ -107,10 +103,6 @@ public double distance(Vector2f vector) { return Math.sqrt(this.distanceSquared(vector.getX(), vector.getY())); } - public double distanceSquared(float x) { - return this.distanceSquared(x, 0); - } - public double distanceSquared(float x, float y) { double xDiff = this.x - x; double yDiff = this.y - y; @@ -146,7 +138,56 @@ public String toString() { return "Vector2(x=" + this.x + ",y=" + this.y + ")"; } + public String toShortString() { + return this.x + "," + this.y; + } + public String debugText() { return "(" + NukkitMath.round(x, 2) + "," + NukkitMath.round(y, 2) + ")"; } + + public final Vector2f copyVec() { + return new Vector2f(x, y); + } + + public final boolean equalsVec(Vector2f vec) { + if (vec == null) { + return false; + } + return Float.compare(vec.x, this.x) == 0 + && Float.compare(vec.y, this.y) == 0; + } + + public Vector2 asVector2() { + return new Vector2(this.x, this.y); + } + + @Override + public Vector2f clone() { + try { + return (Vector2f) super.clone(); + } catch (CloneNotSupportedException e) { + return null; + } + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null || getClass() != obj.getClass()) { + return false; + } + Vector2f that = (Vector2f) obj; + return Float.compare(that.x, x) == 0 + && Float.compare(that.y, y) == 0; + } + + @Override + public int hashCode() { + int hash = Float.hashCode(this.x); + hash = 31 * hash + Float.hashCode(this.y); + return hash; + } } \ No newline at end of file diff --git a/src/main/java/cn/nukkit/math/Vector3.java b/src/main/java/cn/nukkit/math/Vector3.java index edeea259613..f5faa4e110e 100644 --- a/src/main/java/cn/nukkit/math/Vector3.java +++ b/src/main/java/cn/nukkit/math/Vector3.java @@ -28,6 +28,24 @@ public Vector3(double x, double y, double z) { this.z = z; } + public Vector3(Vector3 vec) { + this.x = vec.x; + this.y = vec.y; + this.z = vec.z; + } + + public Vector3(Vector3f vec) { + this.x = vec.x; + this.y = vec.y; + this.z = vec.z; + } + + public Vector3(BlockVector3 vec) { + this.x = vec.x; + this.y = vec.y; + this.z = vec.z; + } + public double getX() { return this.x; } @@ -217,14 +235,15 @@ public final Vector3 westVec() { } public double distance(Vector3 pos) { - return Math.sqrt(this.distanceSquared(pos)); + return distance(pos.x, pos.y, pos.z); + } + + public double distance(double x, double y, double z) { + return Math.sqrt(this.distanceSquared(x, y, z)); } public double distanceSquared(Vector3 pos) { - double x = this.x - pos.x; - double y = this.y - pos.y; - double z = this.z - pos.z; - return x * x + y * y + z * z; + return distanceSquared(pos.x, pos.y, pos.z); } public double distanceSquared(double x, double y, double z) { @@ -242,6 +261,40 @@ public int distanceManhattan(int x, int y, int z) { return Math.abs(x - getFloorX()) + Math.abs(y - getFloorY()) + Math.abs(z - getFloorZ()); } + public double distance2(Vector3 pos) { + return distance2(pos.x, pos.z); + } + + public double distance2(double x, double z) { + return Math.sqrt(this.distanceSquared2(x, z)); + } + + public double distance2(Vector2 pos) { + return distance2(pos.x, pos.y); + } + + public double distanceSquared2(Vector3 pos) { + return distanceSquared2(pos.getFloorX(), pos.getFloorZ()); + } + + public double distanceSquared2(double x, double z) { + double xDiff = this.x - x; + double zDiff = this.z - z; + return xDiff * xDiff + zDiff * zDiff; + } + + public double distanceSquared2(Vector2 pos) { + return distanceSquared2(pos.getFloorX(), pos.getFloorY()); + } + + public int distanceManhattan2(Vector3 pos) { + return distanceManhattan2(pos.getFloorX(), pos.getFloorZ()); + } + + public int distanceManhattan2(int x, int z) { + return Math.abs(x - getFloorX()) + Math.abs(z - getFloorZ()); + } + public double maxPlainDistance() { return this.maxPlainDistance(0, 0); } @@ -287,7 +340,23 @@ public Vector3 normalize() { } public double dot(Vector3 v) { - return this.x * v.x + this.y * v.y + this.z * v.z; + return this.dot(v.x, v.y, v.z); + } + + public double dot(double x, double y, double z) { + return this.x * x + this.y * y + this.z * z; + } + + public double dot2(Vector3 v) { + return this.dot2(v.x, v.z); + } + + public double dot2(double x, double z) { + return this.x * x + this.z * z; + } + + public double dot2(Vector2 v) { + return this.dot2(v.x, v.y); } public Vector3 cross(Vector3 v) { @@ -450,6 +519,20 @@ public Vector3 setComponents(Vector3 other) { return this; } + public Vector3 setComponents(Vector3f other) { + this.x = other.x; + this.y = other.y; + this.z = other.z; + return this; + } + + public Vector3 setComponents(BlockVector3 other) { + this.x = other.x; + this.y = other.y; + this.z = other.z; + return this; + } + public Vector3 xz() { return new Vector3(this.x, 0, this.z); } @@ -500,35 +583,45 @@ public String toString() { return "Vector3(x=" + this.x + ",y=" + this.y + ",z=" + this.z + ")"; } + public String toShortString() { + return this.x + "," + this.y + "," + this.z; + } + public String debugText() { return "(" + NukkitMath.round(x, 2) + "," + NukkitMath.round(y, 2) + "," + NukkitMath.round(z, 2) + ")"; } @Override public boolean equals(Object obj) { + if (obj == this) { + return true; + } if (!(obj instanceof Vector3)) { return false; } Vector3 other = (Vector3) obj; - return this.x == other.x && this.y == other.y && this.z == other.z; + return Double.compare(other.x, this.x) == 0 + && Double.compare(other.y, this.y) == 0 + && Double.compare(other.z, this.z) == 0; } public final boolean equalsVec(Vector3 vec) { if (vec == null) { return false; } - return this.x == vec.x && this.y == vec.y && this.z == vec.z; + return Double.compare(vec.x, this.x) == 0 + && Double.compare(vec.y, this.y) == 0 + && Double.compare(vec.z, this.z) == 0; } @Override public int hashCode() { - return ((int) x ^ ((int) z << 12)) ^ ((int) y << 24); - } - - public int rawHashCode() { - return super.hashCode(); + int hash = Double.hashCode(this.x); + hash = 31 * hash + Double.hashCode(this.y); + hash = 31 * hash + Double.hashCode(this.z); + return hash; } @Override diff --git a/src/main/java/cn/nukkit/math/Vector3f.java b/src/main/java/cn/nukkit/math/Vector3f.java index 328d44c8f2b..bb14637adc6 100644 --- a/src/main/java/cn/nukkit/math/Vector3f.java +++ b/src/main/java/cn/nukkit/math/Vector3f.java @@ -23,6 +23,24 @@ public Vector3f(float x, float y, float z) { this.z = z; } + public Vector3f(Vector3f vec) { + this.x = vec.x; + this.y = vec.y; + this.z = vec.z; + } + + public Vector3f(Vector3 vec) { + this.x = (float) vec.x; + this.y = (float) vec.y; + this.z = (float) vec.z; + } + + public Vector3f(BlockVector3 vec) { + this.x = vec.x; + this.y = vec.y; + this.z = vec.z; + } + public float getX() { return this.x; } @@ -180,7 +198,11 @@ public Vector3f west(int step) { } public double distance(Vector3f pos) { - return Math.sqrt(this.distanceSquared(pos)); + return distance(pos.x, pos.y, pos.z); + } + + public double distance(float x, float y, float z) { + return Math.sqrt(this.distanceSquared(x, y, z)); } public float distanceSquared(Vector3f pos) { @@ -205,6 +227,40 @@ public int distanceManhattan(int x, int y, int z) { return Math.abs(x - getFloorX()) + Math.abs(y - getFloorY()) + Math.abs(z - getFloorZ()); } + public double distance2(Vector3f pos) { + return distance2(pos.x, pos.z); + } + + public double distance2(float x, float z) { + return Math.sqrt(this.distanceSquared2(x, z)); + } + + public double distance2(Vector2f pos) { + return distance2(pos.x, pos.y); + } + + public float distanceSquared2(Vector3f pos) { + return distanceSquared2(pos.getFloorX(), pos.getFloorZ()); + } + + public float distanceSquared2(float x, float z) { + float xDiff = this.x - x; + float zDiff = this.z - z; + return xDiff * xDiff + zDiff * zDiff; + } + + public float distanceSquared2(Vector2f pos) { + return distanceSquared2(pos.getFloorX(), pos.getFloorY()); + } + + public int distanceManhattan2(Vector3f pos) { + return distanceManhattan2(pos.getFloorX(), pos.getFloorZ()); + } + + public int distanceManhattan2(int x, int z) { + return Math.abs(x - getFloorX()) + Math.abs(z - getFloorZ()); + } + public float maxPlainDistance() { return this.maxPlainDistance(0, 0); } @@ -250,7 +306,23 @@ public Vector3f normalize() { } public float dot(Vector3f v) { - return this.x * v.x + this.y * v.y + this.z * v.z; + return this.dot(v.x, v.y, v.z); + } + + public float dot(float x, float y, float z) { + return this.x * x + this.y * y + this.z * z; + } + + public float dot2(Vector3f v) { + return this.dot2(v.x, v.z); + } + + public float dot2(float x, float z) { + return this.x * x + this.z * z; + } + + public float dot2(Vector2f v) { + return this.dot2(v.x, v.y); } public Vector3f cross(Vector3f v) { @@ -401,6 +473,20 @@ public Vector3f setComponents(Vector3f other) { return this; } + public Vector3f setComponents(Vector3 other) { + this.x = (float) other.x; + this.y = (float) other.y; + this.z = (float) other.z; + return this; + } + + public Vector3f setComponents(BlockVector3 other) { + this.x = other.x; + this.y = other.y; + this.z = other.z; + return this; + } + public Vector3f xz() { return new Vector3f(this.x, 0, this.z); } @@ -451,30 +537,45 @@ public String toString() { return "Vector3(x=" + this.x + ",y=" + this.y + ",z=" + this.z + ")"; } + public String toShortString() { + return this.x + "," + this.y + "," + this.z; + } + public String debugText() { return "(" + NukkitMath.round(x, 2) + "," + NukkitMath.round(y, 2) + "," + NukkitMath.round(z, 2) + ")"; } @Override public boolean equals(Object obj) { + if (obj == this) { + return true; + } if (!(obj instanceof Vector3f)) { return false; } Vector3f other = (Vector3f) obj; - return this.x == other.x && this.y == other.y && this.z == other.z; + return Float.compare(other.x, this.x) == 0 + && Float.compare(other.y, this.y) == 0 + && Float.compare(other.z, this.z) == 0; } public final boolean equalsVec(Vector3f vec) { if (vec == null) { return false; } - return this.x == vec.x && this.y == vec.y && this.z == vec.z; + return Float.compare(vec.x, this.x) == 0 + && Float.compare(vec.y, this.y) == 0 + && Float.compare(vec.z, this.z) == 0; } - public int rawHashCode() { - return super.hashCode(); + @Override + public int hashCode() { + int hash = Float.hashCode(this.x); + hash = 31 * hash + Float.hashCode(this.y); + hash = 31 * hash + Float.hashCode(this.z); + return hash; } @Override diff --git a/src/main/java/cn/nukkit/network/protocol/LevelEventPacket.java b/src/main/java/cn/nukkit/network/protocol/LevelEventPacket.java index 7c9b99ca264..122dd63d933 100644 --- a/src/main/java/cn/nukkit/network/protocol/LevelEventPacket.java +++ b/src/main/java/cn/nukkit/network/protocol/LevelEventPacket.java @@ -131,10 +131,11 @@ public class LevelEventPacket extends DataPacket { public static final int EVENT_PARTICLE_PUNCH_BLOCK_WEST = 3607; public static final int EVENT_PARTICLE_PUNCH_BLOCK_EAST = 3608; public static final int EVENT_PARTICLE_SHOOT_WHITE_SMOKE = 3609; - public static final int EVENT_PARTICLE_WIND_EXPLOSION = 3610; + public static final int EVENT_PARTICLE_BREEZE_WIND_EXPLOSION = 3610; public static final int EVENT_PARTICLE_TRAIL_SPAWNER_DETECTION = 3611; public static final int EVENT_PARTICLE_TRAIL_SPAWNER_SPAWNING = 3612; public static final int EVENT_PARTICLE_TRAIL_SPAWNER_EJECTING = 3613; + public static final int EVENT_PARTICLE_WIND_EXPLOSION = 3614; public static final int EVENT_SET_DATA = 4000; @@ -142,6 +143,9 @@ public class LevelEventPacket extends DataPacket { public static final int EVENT_SLEEPING_PLAYERS = 9801; public static final int EVENT_JUMP_PREVENTED = 9810; + public static final int EVENT_ANIMATION_VAULT_ACTIVATE= 9811; + public static final int EVENT_ANIMATION_VAULT_DEACTIVATE = 9812; + public static final int EVENT_ANIMATION_VAULT_EJECT_ITEM = 9813; public static final int EVENT_ADD_PARTICLE_MASK = 0x4000; diff --git a/src/main/java/cn/nukkit/network/protocol/ProtocolInfo.java b/src/main/java/cn/nukkit/network/protocol/ProtocolInfo.java index 0a1e2e4e27c..5144130cf9b 100644 --- a/src/main/java/cn/nukkit/network/protocol/ProtocolInfo.java +++ b/src/main/java/cn/nukkit/network/protocol/ProtocolInfo.java @@ -88,7 +88,7 @@ public interface ProtocolInfo { int MAP_INFO_REQUEST_PACKET = 0x44; // 68 s int REQUEST_CHUNK_RADIUS_PACKET = 0x45; // 69 s int CHUNK_RADIUS_UPDATED_PACKET = 0x46; // 70 c - int ITEM_FRAME_DROP_ITEM_PACKET = 0x47; // 71 s D + int ITEM_FRAME_DROP_ITEM_PACKET = 0x47; // 71 s d int GAME_RULES_CHANGED_PACKET = 0x48; // 72 c int CAMERA_PACKET = 0x49; // 73 c int BOSS_EVENT_PACKET = 0x4a; // 74 cs @@ -180,7 +180,7 @@ public interface ProtocolInfo { int PLAYER_FOG_PACKET = 0xa0; // 160 c int CORRECT_PLAYER_MOVE_PREDICTION_PACKET = 0xa1; // 161 c int ITEM_COMPONENT_PACKET = 0xa2; // 162 c - int FILTER_TEXT_PACKET = 0xa3; // 163 cs + int FILTER_TEXT_PACKET = 0xa3; // 163 cs d int CLIENTBOUND_DEBUG_RENDERER_PACKET = 0xa4; // 164 c int SYNC_ACTOR_PROPERTY_PACKET = 0xa5; // 165 c int ADD_VOLUME_ENTITY_PACKET = 0xa6; // 166 c diff --git a/src/main/java/cn/nukkit/potion/Potion.java b/src/main/java/cn/nukkit/potion/Potion.java index eda270dfbe0..3f891797ea4 100644 --- a/src/main/java/cn/nukkit/potion/Potion.java +++ b/src/main/java/cn/nukkit/potion/Potion.java @@ -109,6 +109,9 @@ public void applyPotion(Entity entity, Item potionItem, float durationScale, flo for (Effect effect : applyEffects) { switch (effect.getId()) { case Effect.INSTANT_HEALTH: + if (!entity.canBeAffected(effect.getId())) { + break; + } if (entity instanceof EntitySmite) { entity.attack(new EntityDamageEvent(entity, DamageCause.MAGIC, instantScale * (6 << effect.getAmplifier()))); } else { @@ -116,6 +119,9 @@ public void applyPotion(Entity entity, Item potionItem, float durationScale, flo } break; case Effect.INSTANT_DAMAGE: + if (!entity.canBeAffected(effect.getId())) { + break; + } if (entity instanceof EntitySmite) { entity.heal(new EntityRegainHealthEvent(entity, instantScale * (4 << effect.getAmplifier()), EntityRegainHealthEvent.CAUSE_MAGIC)); } else { diff --git a/src/main/java/cn/nukkit/utils/BlockColor.java b/src/main/java/cn/nukkit/utils/BlockColor.java index 045d74b6bde..928cf1a3b4e 100644 --- a/src/main/java/cn/nukkit/utils/BlockColor.java +++ b/src/main/java/cn/nukkit/utils/BlockColor.java @@ -99,4 +99,16 @@ public BlockColor(int rgb) { public BlockColor(int r, int g, int b) { super(r, g, b); } + + public static int getRGB(int r, int g, int b) { + return ((r & 0xff) << 16) | ((g & 0xff) << 8) | (b & 0xff); + } + + public static int getARGB(int r, int g, int b) { + return getARGB(r, g, b, 0xff); + } + + public static int getARGB(int r, int g, int b, int a) { + return ((a & 0xff) << 24) | ((r & 0xff) << 16) | ((g & 0xff) << 8) | (b & 0xff); + } } diff --git a/src/main/java/cn/nukkit/utils/BlockIterator.java b/src/main/java/cn/nukkit/utils/BlockIterator.java index 115949ea0d8..f4415770569 100644 --- a/src/main/java/cn/nukkit/utils/BlockIterator.java +++ b/src/main/java/cn/nukkit/utils/BlockIterator.java @@ -7,13 +7,15 @@ import cn.nukkit.math.Vector3; import java.util.Iterator; +import java.util.NoSuchElementException; /** - * author: MagicDroidX + * This class performs ray tracing and iterates along blocks on a line. + * + * @author MagicDroidX * Nukkit Project */ public class BlockIterator implements Iterator { - private final Level level; private final int maxDistance; private static final int gridSize = 1 << 24; @@ -23,7 +25,6 @@ public class BlockIterator implements Iterator { private final Block[] blockQueue; private int currentBlock; - private Block currentBlockObject = null; private int currentDistance; private final int maxDistanceInt; @@ -37,8 +38,21 @@ public class BlockIterator implements Iterator { private BlockFace secondFace; private BlockFace thirdFace; + /** + * Constructs the BlockIterator. + *

+ * This considers all blocks as 1x1x1 in size. + * + * @param level The level to use for tracing + * @param start A Vector giving the initial location for the trace + * @param direction A Vector pointing in the direction for the trace + * @param yOffset The trace begins vertically offset from the start vector by this value + * @param maxDistance This is the maximum distance in blocks for the trace. + * Setting this value above 140 may lead to problems with unloaded chunks. + * A value of 0 indicates no limit + * + */ public BlockIterator(Level level, Vector3 start, Vector3 direction, double yOffset, int maxDistance) { - this.level = level; this.maxDistance = maxDistance; this.blockQueue = new Block[3]; @@ -56,7 +70,7 @@ public BlockIterator(Level level, Vector3 start, Vector3 direction, double yOffs double thirdPosition = 0; Vector3 pos = new Vector3(startClone.x, startClone.y, startClone.z); - Block startBlock = this.level.getBlock(new Vector3(Mth.floor(pos.x), Mth.floor(pos.y), Mth.floor(pos.z))); + Block startBlock = level.getBlock(Mth.floor(pos.x), Mth.floor(pos.y), Mth.floor(pos.z)); if (this.getXLength(direction) > mainDirection) { this.mainFace = this.getXFace(direction); @@ -98,10 +112,15 @@ public BlockIterator(Level level, Vector3 start, Vector3 direction, double yOffs thirdPosition = this.getYPosition(direction, startClone, startBlock); } - double d = mainPosition / mainDirection; + // trace line backwards to find intercept with plane perpendicular to the main axis + + double d = mainPosition / mainDirection; // how far to hit face behind double secondd = secondPosition - secondDirection * d; double thirdd = thirdPosition - thirdDirection * d; + // Guarantee that the ray will pass though the start block. + // It is possible that it would miss due to rounding + // This should only move the ray by 1 grid position this.secondError = Mth.floor(secondd * gridSize); this.secondStep = (int) Math.round(secondDirection / mainDirection * gridSize); this.thirdError = Mth.floor(thirdd * gridSize); @@ -127,11 +146,11 @@ public BlockIterator(Level level, Vector3 start, Vector3 direction, double yOffs lastBlock = lastBlock.getSide(this.thirdFace.getOpposite()); } + // This means that when the variables are positive, it means that the coord=1 boundary has been crossed this.secondError -= gridSize; this.thirdError -= gridSize; this.blockQueue[0] = lastBlock; - this.currentBlock = -1; this.scan(); @@ -154,7 +173,7 @@ public BlockIterator(Level level, Vector3 start, Vector3 direction, double yOffs } private boolean blockEquals(Block a, Block b) { - return a.x == b.x && a.y == b.y && a.z == b.z; + return a.getFloorX() == b.getFloorX() && a.getFloorY() == b.getFloorY() && a.getFloorZ() == b.getFloorZ(); } private BlockFace getXFace(Vector3 direction) { @@ -186,35 +205,47 @@ private double getPosition(double direction, double position, double blockPositi } private double getXPosition(Vector3 direction, Vector3 position, Block block) { - return this.getPosition(direction.x, position.x, block.x); + return this.getPosition(direction.x, position.x, block.getFloorX()); } private double getYPosition(Vector3 direction, Vector3 position, Block block) { - return this.getPosition(direction.y, position.y, block.y); + return this.getPosition(direction.y, position.y, block.getFloorY()); } private double getZPosition(Vector3 direction, Vector3 position, Block block) { - return this.getPosition(direction.z, position.z, block.z); + return this.getPosition(direction.z, position.z, block.getFloorZ()); } + /** + * Returns the next Block in the trace + * + * @return the next Block in the trace + */ @Override - public Block next() { + public Block next() throws NoSuchElementException { this.scan(); if (this.currentBlock <= -1) { - throw new IndexOutOfBoundsException(); + throw new NoSuchElementException(); } else { - this.currentBlockObject = this.blockQueue[this.currentBlock--]; + return this.blockQueue[this.currentBlock--]; } - return this.currentBlockObject; } + /** + * Returns true if the iteration has more elements + */ @Override public boolean hasNext() { this.scan(); return this.currentBlock != -1; } + @Override + public void remove() { + throw new UnsupportedOperationException("[BlockIterator] doesn't support block removal"); + } + private void scan() { if (this.currentBlock >= 0) { return; diff --git a/src/main/resources/block_properties_table.json b/src/main/resources/block_properties_table.json index 9e76cc049c5..212f2bb7a4f 100644 --- a/src/main/resources/block_properties_table.json +++ b/src/main/resources/block_properties_table.json @@ -41109,5 +41109,56 @@ "renderLayer": 3, "shouldRandomTick": false, "thickness": 0.0 + }, + + // Removed block + { + "MaterialType": 4, + "_id": 465, + "_isLavaFlammable": false, + "_isPumpkin": 0, + "_isUnknownBlock": 0, + "_isWater": 0, + "_mBurnOdds": 0, + "_mDestroySpeed": 2.0, + "_mExplosionResistance": 10.0, + "_mFlameOdds": 0, + "_mFriction": 0.6000000238418579, + "_mIsVanilla": true, + "_mLightBlock": 14, + "_mLightEmission": 15, + "_mMapColor": "#ff707070", + "_mMapColor0-R": 0.43921568989753723, + "_mMapColor1-G": 0.43921568989753723, + "_mMapColor2-B": 0.43921568989753723, + "_mMapColor3-A": 1.0, + "_mMapColorARGB": -9408400, + "_mMinRequiredBaseGameVersion": "0.0.0", + "_notLava": 1, + "_unknown560_288": 0, + "_unknown560_336": 0, + "_unused560_292": 0, + "blockEntityType": 16, + "blockItemId": -210, + "burnOdds": 0, + "canBeOriginalSurface": false, + "canContainLiquid": true, + "canHurtAndBreakItem": true, + "canInstatick": true, + "creativeCategory": 4, + "explosionResistance": 10.0, + "flameOdds": 0, + "hardness": 2.0, + "hasBlockEntity": true, + "identifier": "minecraft:lava_cauldron", + "isLavaFlammable": false, + "isMotionBlockingBlock": false, + "isSolid": false, + "isSolidBlockingBlock": false, + "isVanilla": true, + "isWaterBlocking": true, + "renderLayer": 3, + "shouldRandomTick": false, + "thickness": 0.0 } ] diff --git a/src/main/resources/vanilla_texts/en_US.lang b/src/main/resources/vanilla_texts/en_US.lang index 683dc4e0aa7..1a25f6be220 100644 --- a/src/main/resources/vanilla_texts/en_US.lang +++ b/src/main/resources/vanilla_texts/en_US.lang @@ -194,6 +194,7 @@ accessibility.text.equals=Equals accessibility.text.unsupported=Unknown Character accessibility.toast=Notification ## This is the name of the popup that appears when a player gets a notification for a game invite or achievement unlocked +accessibility.gametip=Tip ## This is the name of the popup that appears when a player is shown a game tip accessibility.worldTemplates.help=Help @@ -926,6 +927,15 @@ commands.gamerule.type.nocheatsenabled=Game rule '%1$s' can only be used if chea commands.gamerule.nopermission=Only server owners can change '%1$s' commands.gamerule.norule=No game rule called '%1$s' is available commands.gamerule.success=Game rule %1$s has been updated to %2$s +commands.gametips.description=Enable or disable the game tips on this device +commands.gametips.enabled=Game tips are now enabled +commands.gametips.disabled=Game tips are now disabled +commands.gametips-off.description=Disable game tips on this device +commands.gametips-off.success=Game tips are now disabled +commands.gametips-on.description=Enable game tips on this device +commands.gametips-on.success=Game tips are now enabled +commands.gametips-reset.description=Reset game tips on this device +commands.gametips-reset.success=Game tips are now reset commands.generic.async.initiated='%1$s' command started (async step %2$d) commands.generic.boolean.invalid='%1$s' is not true or false commands.generic.chunk.notFound=Specified chunk not found @@ -2094,7 +2104,7 @@ realmsCreateScreen.offerNotAvailable.content=Your device lost connection to the realmsCreateScreen.extendRealms.content=You have extended your Realms subscription as long as possible. You cannot add this additional time right now. Try again later. realmsCreateScreen.twoUsers=2 Players realmsCreateScreen.tenUsers=10 Players -realmsCreateScreen.viewTOS=To view the terms and conditions for Minecraft Realms, please visit https://aka.ms/minecraftrealmsterms in any web browser. +realmsCreateScreen.viewTOS=To view the terms and conditions for Minecraft Realms, please visit https://www.minecraft.net/eula in any web browser. realmsCreateScreen.viewPrivacyPolicyText=To view the privacy policy for Minecraft Realms, please visit https://aka.ms/mcprivacy in any web browser. realmsCreateScreen.waitingPurchase=Purchase in progress! This shouldn't take long. realmsCreateScreen.paymentFailed.title=Payment service @@ -2447,6 +2457,28 @@ date.short_november=Nov date.short_december=Dec date.formatted=%s %d %d date.formatted_alt=%d %s %d +date.full_january=January +date.full_february=February +date.full_march=March +date.full_april=April +date.full_may=May +date.full_june=June +date.full_july=July +date.full_august=August +date.full_september=September +date.full_october=October +date.full_november=November +date.full_december=December + +date.daysAbbreviated3Char=%sd ## It needs to be abbreviated with no more than 3 characters +date.hoursAbbreviated3Char=%shr ## It needs to be abbreviated with no more than 3 characters +date.minutesAbbreviated3Char=%smin ## It needs to be abbreviated with no more than 3 characters +date.secondsAbbreviated3Char=%ssec ## It needs to be abbreviated with no more than 3 characters +date.daysAbbreviated1Char=%sd ## It needs to be abbreviated with no more than 1 characters +date.hoursAbbreviated1Char=%sh ## It needs to be abbreviated with no more than 1 characters +date.minutesAbbreviated1Char=%sm ## It needs to be abbreviated with no more than 1 characters +date.secondsAbbreviated1Char=%ss ## It needs to be abbreviated with no more than 1 characters +date.timeLeft=%s left dayOneExperience.carousel.title=Welcome to New Minecraft! dayOneExperience.carousel.welcome_text=There's a lot of exciting new stuff in this new version of Minecraft! Check out the Marketplace, create a Realm, and play online with Cross-Platform friends! @@ -2978,6 +3010,14 @@ feed.daysAgo=%dd ago feed.hoursAgo=%dh ago feed.minutesAgo=%dm ago feed.now=Just now +feed.narrationDayAgo=Posted one day ago ### This social media post was posted one day ago +feed.narrationDaysAgo=Posted %d days ago ### This social media post was posted x days ago +feed.narrationHourAgo=Posted one hour ago ### This social media post was posted one hour ago +feed.narrationHoursAgo=Posted %d hours ago ### This social media post was posted x hours ago +feed.narrationMinuteAgo=Posted one minute ago ### This social media post was posted one minute ago +feed.narrationMinutesAgo=Posted %d minutes ago ### This social media post was posted x minutes ago +feed.narrationNow=Posted just now ### This social media post was posted just now +feed.narrationDate=Posted on %s %d, %d ### This social media post was posted on 'month day, year' ex. Posted on March 12, 2023 feed.whatup=What are you up to? feed.upload=Your screenshot is being uploaded... feed.manage=Manage Feed @@ -3047,10 +3087,12 @@ gameTip.breakBlock.mouse=Hold left click to break blocks gameTip.breakBlock.touch=Tap and hold to break blocks gameTip.breakBlock.touch.classic=Tap and hold to break blocks gameTip.breakBlock.controller=Tap and hold to break blocks +gameTip.breakBlock.touch.crosshair=Tap and hold :tip_virtual_button_action_attack_or_destroy:[LINEBREAK]to break blocks ### {StrContains='LINEBREAK'} -gameTip.placeBlock.mouse=Click to place block +gameTip.placeBlock.mouse=Right click to place block gameTip.placeBlock.touch=Tap to place block gameTip.placeBlock.controller=Click on the ground to place block +gameTip.placeBlock.touch.crosshair=Tap :tip_virtual_button_action_build_or_use: to place block gameTip.openInventorySurvival.mouse=Open your inventory[LINEBREAK]Press :_input_key.inventory: ### {StrContains='LINEBREAK'} gameTip.openInventorySurvival.touch=Open inventory to see crafting recipes @@ -3176,6 +3218,8 @@ gui.editor.copyProject.failedMessage=We could not create a copy of this project. gui.edu.exitGameWarningCaption=Minecraft Education ## Use Minecraft 教育版 in zh_CN translation gui.edu.exitGameWarningMessage=Exit Minecraft Education? ## Use 离开 Minecraft 教育版? in zh_CN translation +gui.edu.exitGameWarningCaptionPreview=Minecraft Education Preview +gui.edu.exitGameWarningMessagePreview=Exit Minecraft Education Preview? updateScreen.update=Update updateScreen.updateRequired=Update Required @@ -5028,84 +5072,84 @@ item.hopper_minecart.name=Minecart with Hopper item.tnt_minecart.name=Minecart with TNT item.pitcher_pod.name=Pitcher Pod item.torchflower_seeds.name=Torchflower Seeds -item.spawn_egg.entity.agent.name=Spawn Agent -item.spawn_egg.entity.axolotl.name=Spawn Axolotl -item.spawn_egg.entity.bee.name=Spawn Bee -item.spawn_egg.entity.hoglin.name=Spawn Hoglin -item.spawn_egg.entity.cat.name=Spawn Cat -item.spawn_egg.entity.chicken.name=Spawn Chicken -item.spawn_egg.entity.cow.name=Spawn Cow -item.spawn_egg.entity.cod.name=Spawn Cod -item.spawn_egg.entity.ender_dragon.name=Spawn Ender Dragon -item.spawn_egg.entity.goat.name=Spawn Goat -item.spawn_egg.entity.pufferfish.name=Spawn Pufferfish -item.spawn_egg.entity.salmon.name=Spawn Salmon -item.spawn_egg.entity.tropicalfish.name=Spawn Tropical Fish -item.spawn_egg.entity.pig.name=Spawn Pig -item.spawn_egg.entity.sheep.name=Spawn Sheep -item.spawn_egg.entity.npc.name=Spawn NPC +item.spawn_egg.entity.agent.name=Agent Spawn Egg +item.spawn_egg.entity.axolotl.name=Axolotl Spawn Egg +item.spawn_egg.entity.bee.name=Bee Spawn Egg +item.spawn_egg.entity.hoglin.name=Hoglin Spawn Egg +item.spawn_egg.entity.cat.name=Cat Spawn Egg +item.spawn_egg.entity.chicken.name=Chicken Spawn Egg +item.spawn_egg.entity.cow.name=Cow Spawn Egg +item.spawn_egg.entity.cod.name=Cod Spawn Egg +item.spawn_egg.entity.ender_dragon.name=Ender Dragon Spawn Egg +item.spawn_egg.entity.goat.name=Goat Spawn Egg +item.spawn_egg.entity.pufferfish.name=Pufferfish Spawn Egg +item.spawn_egg.entity.salmon.name=Salmon Spawn Egg +item.spawn_egg.entity.tropicalfish.name=Tropical Fish Spawn Egg +item.spawn_egg.entity.pig.name=Pig Spawn Egg +item.spawn_egg.entity.sheep.name=Sheep Spawn Egg +item.spawn_egg.entity.npc.name=NPC Spawn Egg item.spawn_egg.entity.npc.failed=You need Creative + Operator to spawn an NPC -item.spawn_egg.entity.wolf.name=Spawn Wolf -item.spawn_egg.entity.villager.name=Spawn Villager -item.spawn_egg.entity.villager_v2.name=Spawn Villager -item.spawn_egg.entity.vindicator.name=Spawn Vindicator -item.spawn_egg.entity.mooshroom.name=Spawn Mooshroom -item.spawn_egg.entity.squid.name=Spawn Squid -item.spawn_egg.entity.glow_squid.name=Spawn Glow Squid -item.spawn_egg.entity.rabbit.name=Spawn Rabbit -item.spawn_egg.entity.bat.name=Spawn Bat -item.spawn_egg.entity.ravager.name=Spawn Ravager -item.spawn_egg.entity.iron_golem.name=Spawn Iron Golem -item.spawn_egg.entity.snow_golem.name=Spawn Snow Golem -item.spawn_egg.entity.ocelot.name=Spawn Ocelot -item.spawn_egg.entity.parrot.name=Spawn Parrot -item.spawn_egg.entity.horse.name=Spawn Horse -item.spawn_egg.entity.llama.name=Spawn Llama -item.spawn_egg.entity.trader_llama.name=Spawn Trader Llama -item.spawn_egg.entity.polar_bear.name=Spawn Polar Bear -item.spawn_egg.entity.donkey.name=Spawn Donkey -item.spawn_egg.entity.mule.name=Spawn Mule -item.spawn_egg.entity.skeleton_horse.name=Spawn Skeleton Horse -item.spawn_egg.entity.zombie_horse.name=Spawn Zombie Horse -item.spawn_egg.entity.zombie.name=Spawn Zombie -item.spawn_egg.entity.drowned.name=Spawn Drowned -item.spawn_egg.entity.creeper.name=Spawn Creeper -item.spawn_egg.entity.skeleton.name=Spawn Skeleton -item.spawn_egg.entity.spider.name=Spawn Spider -item.spawn_egg.entity.zombie_pigman.name=Spawn Zombified Piglin -item.spawn_egg.entity.strider.name=Spawn Strider -item.spawn_egg.entity.slime.name=Spawn Slime -item.spawn_egg.entity.enderman.name=Spawn Enderman -item.spawn_egg.entity.silverfish.name=Spawn Silverfish -item.spawn_egg.entity.cave_spider.name=Spawn Cave Spider -item.spawn_egg.entity.ghast.name=Spawn Ghast -item.spawn_egg.entity.magma_cube.name=Spawn Magma Cube -item.spawn_egg.entity.blaze.name=Spawn Blaze -item.spawn_egg.entity.zombie_villager.name=Spawn Zombie Villager -item.spawn_egg.entity.zombie_villager_v2.name=Spawn Zombie Villager -item.spawn_egg.entity.witch.name=Spawn Witch -item.spawn_egg.entity.stray.name=Spawn Stray -item.spawn_egg.entity.husk.name=Spawn Husk -item.spawn_egg.entity.wither_skeleton.name=Spawn Wither Skeleton -item.spawn_egg.entity.guardian.name=Spawn Guardian -item.spawn_egg.entity.elder_guardian.name=Spawn Elder Guardian -item.spawn_egg.entity.shulker.name=Spawn Shulker -item.spawn_egg.entity.endermite.name=Spawn Endermite -item.spawn_egg.entity.evocation_illager.name=Spawn Evoker -item.spawn_egg.entity.vex.name=Spawn Vex -item.spawn_egg.entity.turtle.name=Spawn Sea Turtle -item.spawn_egg.entity.dolphin.name=Spawn Dolphin -item.spawn_egg.entity.phantom.name=Spawn Phantom -item.spawn_egg.entity.panda.name=Spawn Panda -item.spawn_egg.entity.pillager.name=Spawn Pillager -item.spawn_egg.entity.piglin_brute.name=Spawn Piglin Brute -item.spawn_egg.entity.piglin.name=Spawn Piglin -item.spawn_egg.entity.fox.name=Spawn Fox -item.spawn_egg.entity.unknown.name=Spawn -item.spawn_egg.entity.wandering_trader.name=Spawn Wandering Trader -item.spawn_egg.entity.wither.name=Spawn Wither -item.spawn_egg.entity.zoglin.name=Spawn Zoglin -item.spawn_egg.entity.sniffer.name=Spawn Sniffer +item.spawn_egg.entity.wolf.name=Wolf Spawn Egg +item.spawn_egg.entity.villager.name=Villager Spawn Egg +item.spawn_egg.entity.villager_v2.name=Villager Spawn Egg +item.spawn_egg.entity.vindicator.name=Vindicator Spawn Egg +item.spawn_egg.entity.mooshroom.name=Mooshroom Spawn Egg +item.spawn_egg.entity.squid.name=Squid Spawn Egg +item.spawn_egg.entity.glow_squid.name=Glow Squid Spawn Egg +item.spawn_egg.entity.rabbit.name=Rabbit Spawn Egg +item.spawn_egg.entity.bat.name=Bat Spawn Egg +item.spawn_egg.entity.ravager.name=Ravager Spawn Egg +item.spawn_egg.entity.iron_golem.name=Iron Golem Spawn Egg +item.spawn_egg.entity.snow_golem.name=Snow Golem Spawn Egg +item.spawn_egg.entity.ocelot.name=Ocelot Spawn Egg +item.spawn_egg.entity.parrot.name=Parrot Spawn Egg +item.spawn_egg.entity.horse.name=Horse Spawn Egg +item.spawn_egg.entity.llama.name=Llama Spawn Egg +item.spawn_egg.entity.trader_llama.name=Trader Llama Spawn Egg +item.spawn_egg.entity.polar_bear.name=Polar Bear Spawn Egg +item.spawn_egg.entity.donkey.name=Donkey Spawn Egg +item.spawn_egg.entity.mule.name=Mule Spawn Egg +item.spawn_egg.entity.skeleton_horse.name=Skeleton Horse Spawn Egg +item.spawn_egg.entity.zombie_horse.name=Zombie Horse Spawn Egg +item.spawn_egg.entity.zombie.name=Zombie Spawn Egg +item.spawn_egg.entity.drowned.name=Drowned Spawn Egg +item.spawn_egg.entity.creeper.name=Creeper Spawn Egg +item.spawn_egg.entity.skeleton.name=Skeleton Spawn Egg +item.spawn_egg.entity.spider.name=Spider Spawn Egg +item.spawn_egg.entity.zombie_pigman.name=Zombified Piglin Spawn Egg +item.spawn_egg.entity.strider.name=Strider Spawn Egg +item.spawn_egg.entity.slime.name=Slime Spawn Egg +item.spawn_egg.entity.enderman.name=Enderman Spawn Egg +item.spawn_egg.entity.silverfish.name=Silverfish Spawn Egg +item.spawn_egg.entity.cave_spider.name=Cave Spider Spawn Egg +item.spawn_egg.entity.ghast.name=Ghast Spawn Egg +item.spawn_egg.entity.magma_cube.name=Magma Cube Spawn Egg +item.spawn_egg.entity.blaze.name=Blaze Spawn Egg +item.spawn_egg.entity.zombie_villager.name=Zombie Villager Spawn Egg +item.spawn_egg.entity.zombie_villager_v2.name=Zombie Villager Spawn Egg +item.spawn_egg.entity.witch.name=Witch Spawn Egg +item.spawn_egg.entity.stray.name=Stray Spawn Egg +item.spawn_egg.entity.husk.name=Husk Spawn Egg +item.spawn_egg.entity.wither_skeleton.name=Wither Skeleton Spawn Egg +item.spawn_egg.entity.guardian.name=Guardian Spawn Egg +item.spawn_egg.entity.elder_guardian.name=Elder Guardian Spawn Egg +item.spawn_egg.entity.shulker.name=Shulker Spawn Egg +item.spawn_egg.entity.endermite.name=Endermite Spawn Egg +item.spawn_egg.entity.evocation_illager.name=Evoker Spawn Egg +item.spawn_egg.entity.vex.name=Vex Spawn Egg +item.spawn_egg.entity.turtle.name=Sea Turtle Spawn Egg +item.spawn_egg.entity.dolphin.name=Dolphin Spawn Egg +item.spawn_egg.entity.phantom.name=Phantom Spawn Egg +item.spawn_egg.entity.panda.name=Panda Spawn Egg +item.spawn_egg.entity.pillager.name=Pillager Spawn Egg +item.spawn_egg.entity.piglin_brute.name=Piglin Brute Spawn Egg +item.spawn_egg.entity.piglin.name=Piglin Spawn Egg +item.spawn_egg.entity.fox.name=Fox Spawn Egg +item.spawn_egg.entity.unknown.name=Spawn Egg +item.spawn_egg.entity.wandering_trader.name=Wandering Trader Spawn Egg +item.spawn_egg.entity.wither.name=Wither Spawn Egg +item.spawn_egg.entity.zoglin.name=Zoglin Spawn Egg +item.spawn_egg.entity.sniffer.name=Sniffer Spawn Egg item.trident.name=Trident item.mushroom_stew.name=Mushroom Stew item.muttonCooked.name=Cooked Mutton @@ -5887,13 +5931,15 @@ options.delete_account.confirm.button=Delete options.dev_game_tip=Gameplay Tips options.dev_ad_show_debug_panel=Show EDU Sign In Debug Panel options.dev_ad_token_refresh_threshold=EDU Sign In Token Refresh Threshold Seconds -options.dev_ad_edu_max_token_refresh=EDU Max Token Refresh (Minutes) +options.dev_ad_edu_max_signin_token_refresh=EDU Max Sign In Token Refresh (Minutes) +options.dev_ad_edu_max_graph_token_refresh=EDU Max Graph Token Refresh (Minutes) options.dev_side_by_side_comparison_rate=Side By Side Comparison Rate options.dev_playfab_token_refresh_threshold=Playfab Token Refresh Threshold Minutes options.dev_assertions_debug_break=Assertions break in the debugger options.dev_assertions_show_dialog=Assertions show a modal dialog options.dev_force_trial_mode=Force enable Trial Mode options.dev_eduDemo=Edu Demo (Requires re-sign-in) +options.dev_eduCloudDownload=Cloud Download options.remote_imgui_toggle=Remote Imgui Enabled options.dev_enableDebugUI=Enable Debug UI options.dev_createRealmWithoutPurchase=Create realm without purchase @@ -6004,17 +6050,17 @@ options.dev_realmsEndpoint=Realms Endpoint options.dev_realmsEndpointPayment=Realms Endpoint Payment options.dev_realmsRelyingParty=Realms Relying Party options.dev_realmsRelyingPartyPayment=Realms Relying Party Payment -options.dev_realms_stories=Enable Realms Stories (requires restart) +options.dev_realms_stories=Enable Realms Stories options.dev_overrideXboxEnvironmentWindows=Override Xbox Sandbox (OS controlled on Windows) options.dev_overrideXboxEnvironment=Override Xbox Sandbox (requires restart) options.dev_xboxEnvironment=Xbox Sandbox Environment (requires restart) options.dev_xbox_environment.retail=Retail options.dev_xbox_environment.dev=Dev -options.dev_xbox_environment.dev_achievement=Dev Achievement +options.dev_xbox_environment.dev_achievement=Dev achievement options.dev_experimentalTreatment=Override Experimental Treatments options.dev_sandboxRetail=Xforge Sandbox: Retail options.dev_sandboxDev=Xforge Sandbox: Dev -options.dev_sandboxDevAchievement=Xforge Sandbox: Dev Achievement +options.dev_sandboxDevAchievement=Xforge Sandbox: Dev achievement options.dev_displayTreatmentsPanel=Display Treatments options.dev_currentTreatmentsTitle=Current Treatments options.dev_unusedTreatmentsTitle=Unused Treatments @@ -6120,8 +6166,8 @@ options.fov.toggle=FOV Can Be Altered By Gameplay options.licenses=Licenses options.licensed_content=Licensed Content options.networkSettings=Network Settings -options.ecoMode=Eco Mode ###Eco Mode refers to an ecological friendly mode {MaxLength=‘20’} -options.enableEcoMode=Enable Eco Mode ###Eco Mode refers to an ecological friendly mode {MaxLength=‘30’} +options.ecoMode=Experimental Power-Saving Features ### {MaxLength=‘40’} +options.enableEcoMode=Lower framerate when controller is disconnected ### {MaxLength=‘55’} options.font_license=Font License options.font_license_body=%1 options.livingRoomFOV=Living Room FOV @@ -6211,6 +6257,7 @@ options.sneakOption.toggle=Tap button once to sneak options.sneakOption.hold=Hold down button to sneak options.splitscreenInterfaceOpacity=Splitscreen HUD Opacity options.textBackgroundOpacity=Text Background Opacity +options.actionBarTextBackgroundOpacity=Action Bar Background Opacity options.hidepaperdoll=Hide Paper Doll options.showautosaveicon=Show Autosave Icon options.hold=Hold @@ -6419,7 +6466,7 @@ options.viewSubscriptions.loadingSubscriptionsFailed=Failed loading subscription options.viewSubscriptions.purchasedPlatformDiffers=This was bought in the %s you must use that device to manage it. options.viewSubscriptions.prereleaseMessage=Please go to the full version of Minecraft to manage your subscriptions. options.viewSubscriptions.mySubscriptions=My Subscriptions -options.viewSubscriptions.noActiveSubscriptions=You Have No Active Subscriptions +options.viewSubscriptions.noActiveSubscriptions=You have no active subscriptions options.viewSubscriptions.signIn=Sign in options.viewSubscriptions.buyAnAdditionalRealm=Buy An Additional Realm options.viewSubscriptions.realmsPlusSubscriptionForRealm=Realms plus subscription for realm %s. @@ -6460,6 +6507,9 @@ options.deferred.upscaling=Upscaling options.terrainShadowsEnable=Terrain Shadows options.superFancyWaterEnable=Super Fancy Water options.onlyTrustedSkinsAllowed=Only Allow Trusted Skins +options.restartTutorial=Restart Tutorial +options.tutorial=Tutorial +options.tutorialHint=Hints to get going with the basics of Minecraft options.autoUpdateEnabled=Auto Update Unlocked Packs options.autoUpdateMode=Auto Update Unlocked Packs @@ -6472,7 +6522,7 @@ options.cellularDataWarningLabel=Playing over mobile networks may incur addition options.openFeedbackPage=Leaving to Feedback Site options.openFeedbackPage.message=Your default browser will open to show the Minecraft Feedback Site. options.openFeedbackPage.continue=Continue to Feedback Site -options.turnOffAchievements=Turn Off Achievements? +options.turnOffAchievements=Turn off achievements? options.turnOffAchievements.message=Achievements are only available in worlds set to survival mode with cheats off. If you continue, no one will earn achievements while playing in this world ever again even if you switch back before playing. options.achievementsDisabled=Achievements cannot be earned in this world. options.achievementsDisabled.onLoad=If you start playing with these settings, achievements will no longer be earnable in this world. @@ -6562,6 +6612,9 @@ options.shadowQuality.low=Low options.shadowQuality.medium=Medium options.shadowQuality.high=High options.shadowQuality.ultra=Ultra +options.pointLightShadowEnabled=Point Light Shadows Enabled +options.pointLightShadowDisabled=Point Light Shadows Disabled +options.pointLightShadow.tooltip=Shadows cast by torches, lanterns, and other small light sources; only enabled on higher shadow quality settings on some devices. options.pointLightLODingQuality=Point Light Quality options.pointLightLODingQuality.low=Low options.pointLightLODingQuality.medium=Medium @@ -6719,6 +6772,7 @@ hudScreen.controlCustomization.hintSaved=Saved hudScreen.controlCustomization.tooltip=Load a world to customize controls hudScreen.controlCustomization.tooltip.notouch=Use a touch device to customize controls hudScreen.controlCustomization.tooltip.alreadycustomizing=There is already a touch control customization screen open +hudScreen.controlCustomization.tooltip.alive=Player needs to be alive to customize controls. playscreen.fileSize.MB=MB playscreen.fileSize.GB=GB @@ -7006,6 +7060,7 @@ progressScreen.title.connectingRealms=Connecting to Realm progressScreen.title.copyingWorld=World Copy progressScreen.title.deleteStorageAreaContent=Clearing Storage Cache progressScreen.title.loadingSplitScreenAppearances=Loading Splitscreen Appearances +progressScreen.title.modifiedWorldWarning=Modified World progressScreen.message.appearanceLoaded=Appearance Loaded progressScreen.message.appearanceLoadWaitTimeMet=Appearance is taking a long time to load. Proceeding with world generation... progressScreen.message.deleteStorageAreaContent=This may take a few minutes. @@ -7027,6 +7082,8 @@ progressScreen.message.storageProviderSyncError=Failed to sync user data. progressScreen.message.waitingForStoreProducts=This may take a few moments progressScreen.message.allDone=All Done! progressScreen.message.letsGo=Let's Go! +progressScreen.message.letsGoCreative=Create +progressScreen.message.letsGoSurvival=Survive progressScreen.message.failed=Failed progressScreen.message.failedNoNetwork=Failed: No Network Connection progressScreen.message.downloadingWorld=Downloading World @@ -7052,6 +7109,7 @@ progressScreen.message.directoryDepthError=This world can't be opened because of progressScreen.message.forbiddenContent=You do not own one or more of the applied packs progressScreen.message.loadingSplitScreenAppearances=Loading splitscreen appearances... progressScreen.message.finishedLoadingSplitScreenAppearances=Finished loading splitscreen appearances. +progressScreen.message.modifiedWorldWarning=This world may not look or behave in the same way as non-modified worlds and you can't earn achievements. progressScreen.dialog.title.resourcePack=Download Resource Packs? progressScreen.dialog.title.behaviorAndResourcePack=Download World Behavior & Resource Packs? progressScreen.dialog.title.onlyBehavior=Download World Behavior Packs? @@ -7103,6 +7161,8 @@ raid.expiry=A raid has expired raid.victory=Victory raid.defeat=Defeat +realmsStories.realmEvents.outOfGameMessage=There was a Realm Event. Check out the Story Feed in Minecraft to see what happened. + recipeBook.setting.full=Full recipeBook.setting.discover=Discover recipeBook.setting.off=Off @@ -7272,14 +7332,14 @@ itemGroup.name.sculk=Sculk effect.darkness=Darkness entity.frog.name=Frog entity.tadpole.name=Tadpole -item.spawn_egg.entity.warden.name=Spawn Warden +item.spawn_egg.entity.warden.name=Warden Spawn Egg entity.warden.name=Warden entity.allay.name=Allay -item.spawn_egg.entity.allay.name=Spawn Allay +item.spawn_egg.entity.allay.name=Allay Spawn Egg action.interact.allay=Give item to Allay item.bucketTadpole.name=Bucket of Tadpole -item.spawn_egg.entity.frog.name=Spawn Frog -item.spawn_egg.entity.tadpole.name=Spawn Tadpole +item.spawn_egg.entity.frog.name=Frog Spawn Egg +item.spawn_egg.entity.tadpole.name=Tadpole Spawn Egg tile.frog_spawn.name=Frogspawn tile.pearlescent_froglight.name=Pearlescent Froglight tile.verdant_froglight.name=Verdant Froglight @@ -7404,7 +7464,7 @@ item.smithing_template.name=Smithing Template item.smithing_template.netherite_upgrade.applies_to=Diamond Equipment item.smithing_template.netherite_upgrade.ingredients=Netherite Ingot item.snort_pottery_sherd.name=Snort Pottery Sherd -item.spawn_egg.entity.camel.name=Spawn Camel +item.spawn_egg.entity.camel.name=Camel Spawn Egg item.spruce_hanging_sign.name=Spruce Hanging Sign item.warped_hanging_sign.name=Warped Hanging Sign itemGroup.name.hanging_sign=Hanging Signs @@ -7511,11 +7571,11 @@ storageManager.multiselect=Multiselect storageManager.miscellaneous=Miscellaneous storageManager.groupType=Type -storageManager.groupPack=Add-on +storageManager.groupPack=Add-On storageManager.shareTitle=Export Resources storageManager.mcpack=Minecraft Pack -storageManager.mcaddon=Minecraft Addon +storageManager.mcaddon=Minecraft Add-On storageManager.mcworld=Minecraft World raycasting.purchase.error=We have detected that your device does not meet the system requirements to run this pack so you are unable to download this pack. You can review the minimum system requirements below: %s+ GPU: Hardware ray tracing capable GPU such as NVIDIA GeForce RTX 2060 or better. See our FAQ on minecraft.net for more details. %s+ RAM: 8GB or better %s+ CPU: Intel Core i5 or equivalent ##the %s will be turned into linebreaks. Don't reorder. @@ -7712,6 +7772,7 @@ selectTemplate.delete.confirm=Delete World Template? selectTemplate.delete=Delete selectTemplate.myTemplates=My World Templates selectTemplate.realmsPlus=Featured Realms Plus Templates +selectTemplate.marketplacePass=Featured Marketplace Pass Templates ### {StrContains="Marketplace Pass"} selectTemplate.importedTemplates=Imported Templates selectTemplate.download=Download selectTemplate.noTemplates=There are no world templates on this device. @@ -7897,7 +7958,7 @@ store.realmsPlus.buyNow.viewPrivacyPolicy=PRIVACY POLICY store.realmsPlus.buyNow.title=Start your Realms Plus Subscription store.realmsPlus.startTrial.description=Your Realm and 150+ marketplace packs will be immediately available. Up to 10 players can play at one time, and they get access to the worlds in your Realm for free! Your first month will be free, and you'll be billed %s/month afterwards and can cancel at any time. store.realmsPlus.startTrial.description.contentSub=Your Realm and the 150+ marketplace packs included in Marketplace Pass will be immediately available. Up to 10 players can play at one time, and they get access to the worlds in your Realm for free! Your first month will be free, and you'll be billed %s/month afterwards and can cancel at any time. -store.realmsPlus.noTrial.description=Your Realm and 150+ marketplace packs will be immediately available. Up to 10 players can play at one time, and they get access to the worlds in your Realm for free! Your subscription will be available for 30 days at the price of %s:minecoin:. +store.realmsPlus.noTrial.description=Your Realm and 150+ marketplace packs will be immediately available. Up to 10 players can play at one time, and they get access to the worlds in your Realm for free! Your subscription will be available for 30 days at the price of :minecoin:%s. store.realmsPlus.noTrial.description.contentSub=Your Realm and the 150+ marketplace packs included in Marketplace Pass will be immediately available. Up to 10 players can play at one time, and they get access to the worlds in your Realm for free! Your subscription will be available for 30 days at the price of %s:minecoin:. store.realmsPlus.noTrial.description.iap=Your Realm and 150+ marketplace packs will be immediately available. Up to 10 players can play at one time, and they get access to the worlds in your Realm for free! You’ll be billed %s/month and you can cancel your subscription to stop future charges by accessing subscriptions settings. store.realmsPlus.noTrial.description.iap.contentSub=Your Realm and the 150+ marketplace packs included in Marketplace Pass will be immediately available. Up to 10 players can play at one time, and they get access to the worlds in your Realm for free! You’ll be billed %s/month and you can cancel your subscription to stop future charges by accessing subscriptions settings. @@ -7919,16 +7980,11 @@ store.realmsPlus.landing.info1.line1=Your own personal Realm server: a persisten store.realmsPlus.landing.info1.line2=Friends play on your Realm for free store.realmsPlus.landing.info1.line3=Jump from console to mobile to PC - play your Realm on any device with the Minecraft Marketplace -store.realmsPlus.landing.info2.line1=Free access to a catalog of 150+ Marketplace packs -store.realmsPlus.landing.info2.line1.contentSub=Includes Marketplace Pass -store.realmsPlus.landing.info2.line2=Worlds on your Realm include free secure backups -store.realmsPlus.landing.info2.line3=Your First 30 Days Will be Free -store.realmsPlus.landing.info2.line4=Subscribe now for %s/month - store.realmsPlus.landing.info2.catalog=Free access to a catalog of 150+ Marketplace packs store.realmsPlus.landing.info2.contentSub=Includes Marketplace Pass store.realmsPlus.landing.info2.backups=Worlds on your Realm include free secure backups -store.realmsPlus.landing.info2.trial=Your First 30 Days Will be Free +store.realmsPlus.landing.info2.renews=Subscription renews automatically each month until canceled +store.realmsPlus.landing.info2.cancel=Cancel on the Subscriptions page of Minecraft Settings store.realmsPlus.landing.info2.subscribe=Subscribe now for %s/month store.realmsPlus.landing.info2.recentlyAdded=Recently added store.realmsPlus.landing.info2.persona=Free Character Creator items - redeem a new set each month! @@ -8025,6 +8081,9 @@ store.csb.landing.info.line1=Dive into story-driven adventures by downloading an store.csb.landing.info.line2=Change the look of blocks, biomes, and even your favorite Minecraft mobs store.csb.landing.info.line3=Expand your in-game wardrobe store.csb.landing.info.line4=Claim a new set of time-limited Character Creator items each month, which are yours to keep forever +store.csb.landing.info.line5=Subscription renews automatically each month until canceled +store.csb.landing.info.line6=Cancel on the Subscriptions page of Minecraft Settings +store.csb.landing.info.line7=Subscribe now for %s/month store.csb.landing.beta=Beta store.csb.landing.preview=Preview @@ -8048,7 +8107,6 @@ store.csb.faq.question8=Can I use my Marketplace Pass content on any device? ### store.csb.faq.answer8=If you purchase Marketplace Pass, you can access all the packs from any device with a compatible version of Minecraft: Bedrock Edition with Minecraft Marketplace (sold separately) if you’re signed into your Minecraft account. Not supported on Amazon Kindle Fire or Minecraft Java Edition. ### {StrContains="Marketplace Pass"} store.csb.faq.question9=Can I play Marketplace Pass Content if I have joined the Minecraft Beta on Windows or XBOX? ### {StrContains="Marketplace Pass"} store.csb.faq.answer9=You will be able to see content in your subscription if you are already subscribed, but you will not be able to subscribe to Marketplace Pass from the Preview/BETA build. ### {StrContains="Marketplace Pass"} -store.csb.faq.bottom1=CAN'T FIND WHAT YOU'RE LOOKING FOR? store.csb.faq.bottom2=Visit our help site store.csb.contentPacks.worldDescription=Play mini-games, themed worlds, and more! @@ -8085,7 +8143,7 @@ store.csb.upsell.rightBullet.3=Includes ## Precedes the term Marketplace Pass i store.csb.upsell.learnMore=Learn more store.csb.upsell.price=%s/Month -store.csb.upsell.firstPeriodFree=Free 30 day trial!* +store.csb.upsell.firstPeriodFree=Free 30 day trial! store.csb.upsell.realmsPlus=§dREALMS PLUS @@ -8114,7 +8172,7 @@ store.inventory.button.subscriptions=Subscriptions store.free=Free store.redeem=Get -store.view_achievement=View Achievement +store.view_achievement=View achievement store.incompatible=Incompatible store.incompatibleOnDevice=Incompatible on Device store.itemIsIncompatible=This item is not compatible with your device. @@ -8208,12 +8266,6 @@ store.createdBy=By %s store.seeMoreBy=See more by %s store.seeMoreBy.multiCreatorBundle=See More by Bundle Creators store.fetchingItem=Connecting to Marketplace... - -store.timer.daysAbbreviated=%sd ## This is to let player know how many days are left in a sale. It needs to be abbreviated with no more than 3 characters -store.timer.hoursAbbreviated=%shr ## This is to let player know how many days are left in a sale. It needs to be abbreviated with no more than 3 characters -store.timer.minutesAbbreviated=%smin ## This is to let player know how many days are left in a sale. It needs to be abbreviated with no more than 3 characters -store.timer.secondsAbbreviated=%ssec ## This is to let player know how many days are left in a sale. It needs to be abbreviated with no more than 3 characters -store.timer.left=%s left store.startMenu.sale=Sale! @@ -8234,10 +8286,13 @@ store.mashup.count.texturePack=1 Texture Pack store.mashup.count.texturePacks=%s Texture Packs #number of texture packs store.mashup.count.world=1 World store.mashup.count.worlds=%s Worlds #number of worlds -store.mashup.count.addonPack=1 Addon -store.mashup.count.addonPacks=%s Addons #number of addons +store.mashup.count.addonPack=1 Add-On +store.mashup.count.addonPacks=%s Add-Ons #number of addons -store.addon.activateAddonPack=Activate Addon Pack! +store.addon.activateAddonPack=Activate Add-On! +store.addon.choseWorldPopupTitle=Where to add? +store.addon.choseWorldPopupExisting=Existing +store.addon.choseWorldPopupNew=New store.mashup.bundle=Bundle store.mashup.bundle.multipleCreators=Multiple Creators @@ -8298,7 +8353,7 @@ store.ratings.signIn.description1=Tell the creator and the community about your store.ratings.signIn.description2=Before we can let you rate an item, you will need to sign in with a Microsoft Account. store.purchase.success.realMoney1=You just unlocked: %s for %s -store.purchase.success.realMoney2=+%s:minecoin: +store.purchase.success.realMoney2=+:minecoin:%s store.purchase.signIn=Expand your game with tons of great content. store.purchase.signInPart2=Sign in with a Microsoft Account to start using the Marketplace! store.purchase.realmoney.disclaimer=*Buys %s Minecoins for %s and redeems this pack for %s Minecoins leaving %s left over. @@ -8467,7 +8522,7 @@ store.search.filter.skinPacks=Skins store.search.filter.texturePacks=Textures store.search.filter.title=Filters store.search.filter.worldTemplates=Worlds -store.search.filter.addOns=Add-ons +store.search.filter.addOns=Add-Ons store.search.filter.installed_state=Installed State store.search.filter.installed=Installed store.search.filter.notInstalled=Not Installed @@ -9652,12 +9707,12 @@ trial.tabbed_upsell.buttonAlternate=Unlock Minecraft Full Game trial.tabbed_upsell.minecraft.title=MINECRAFT trial.tabbed_upsell.minecraft.description=Endlessly explore your own unique worlds and construct anything you can imagine - from the simplest of homes to the grandest of castles! Play Creative mode to build wonders with unlimited resources. Or mine in Survival mode, crafting weapons and armor to fend off dangerous mobs and survive the nights. Plus, play with friends online! Unlock the full game today! trial.tabbed_upsell.xbl.title=MICROSOFT ACCOUNT -trial.tabbed_upsell.xbl.description=With the full Minecraft experience you get Creative mode, Achievements, and more, plus with a Microsoft Account you can meet others in the Minecraft community! Join your friends' worlds, make new friends on Servers, and sync your Marketplace purchases to everywhere you play Minecraft. +trial.tabbed_upsell.xbl.description=With the full Minecraft experience you get Creative mode, achievements, and more, plus with a Microsoft Account you can meet others in the Minecraft community! Join your friends' worlds, make new friends on Servers, and sync your Marketplace purchases to everywhere you play Minecraft. trial.tabbed_upsell.xbl.description.line2=*(in versions with Marketplace) trial.tabbed_upsell.achievements.title=ACHIEVEMENTS -trial.tabbed_upsell.achievements.description=In addition to the full Minecraft experience with Creative mode, Multiplayer, and more, you'll earn Achievements and a Gamerscore to mark your Minecraft progress and show your Microsoft Account friends your accomplishments. Get the full game to start earning them! +trial.tabbed_upsell.achievements.description=In addition to the full Minecraft experience with Creative mode, Multiplayer, and more, you'll earn achievements and a Gamerscore to mark your Minecraft progress and show your Microsoft Account friends your accomplishments. Get the full game to start earning them! trial.tabbed_upsell.multiplayer.title=MULTIPLAYER -trial.tabbed_upsell.multiplayer.description=The full Minecraft experience lets you enjoy Creative mode, Achievements and Multiplayer with your friends across Minecraft devices! Play with friends on console, PC and mobile to create, explore and survive together. Unlock the full Minecraft experience today! +trial.tabbed_upsell.multiplayer.description=The full Minecraft experience lets you enjoy Creative mode, achievements and Multiplayer with your friends across Minecraft devices! Play with friends on console, PC and mobile to create, explore and survive together. Unlock the full Minecraft experience today! trial.tabbed_upsell.server.title=SERVERS trial.tabbed_upsell.server.description=Servers offer some of the most creative ways to enjoy Minecraft! Play great mini-games, meet the Minecraft community and make new friends. Unlock the full Minecraft experience to try Servers today! trial.tabbed_upsell.store.title=STORE @@ -9665,7 +9720,7 @@ trial.tabbed_upsell.store.description=Get access to Minecraft Marketplace, our i trial.tabbed_upsell.creative.title=CREATIVE trial.tabbed_upsell.creative.description=Buy Minecraft and get Creative mode! Access the entire inventory - the only limit to what you can build is your imagination! Fly around your world, make your dream home out of anything and everything, or just blow up a mountain with unlimited TNT! trial.tabbed_upsell.addon.title=ADD-ONS -trial.tabbed_upsell.addon.description=Want to make wolves act like bunnies? Turn all the trees into cotton candy? You can alter everything in the full Minecraft experience with add-ons! Plus get access to Multiplayer, Creative mode, Achievements and more! Buy Minecraft now for full access! +trial.tabbed_upsell.addon.description=Want to make wolves act like bunnies? Turn all the trees into cotton candy? You can alter everything in the full Minecraft experience with add-ons! Plus get access to Multiplayer, Creative mode, achievements and more! Buy Minecraft now for full access! trial.tabbed_upsell.seeds.title=SEEDS trial.tabbed_upsell.seeds.description=Unlock the full Minecraft experience and get access to Seeds! Seeds help you discover new biomes - survive on ice plains, ascend extreme hills, or trek across deserts. Start with unique templates or explore random new worlds! Access Seeds, Creative mode, Multiplayer and more by buying Minecraft today! @@ -9675,14 +9730,14 @@ trial.thanks_for_testing.button=Take me to the FAQ! trial.thanks_for_testing.minecraft.title=MINECRAFT TRIAL trial.thanks_for_testing.minecraft.description=Thank you for downloading the Minecraft Trial for Chromebook! Your playtesting will provide invaluable data for bug fixes and technical troubleshooting. Uncover a bug? Report it at bugs.mojang.com! Other questions? Check out our FAQ. trial.thanks_for_testing.xbl.title=MICROSOFT ACCOUNT -trial.thanks_for_testing.xbl.description=With the full Minecraft experience, you get Creative mode, Achievements, and more, plus with a Microsoft Account you can meet others in the Minecraft community! You’ll be able to join friends’ worlds, make new friends on Servers, and sync your Marketplace purchases to everywhere you play Minecraft. +trial.thanks_for_testing.xbl.description=With the full Minecraft experience, you get Creative mode, achievements, and more, plus with a Microsoft Account you can meet others in the Minecraft community! You’ll be able to join friends’ worlds, make new friends on Servers, and sync your Marketplace purchases to everywhere you play Minecraft. trial.thanks_for_testing.xbl.description.line2=*(in versions with Marketplace) -trial.thanks_for_testing.achievements.description=In addition to the full Minecraft experience with Creative mode, Multiplayer, and more, you'll earn Achievements and a Gamerscore to mark your Minecraft progress and show your Microsoft Account friends your accomplishments. -trial.thanks_for_testing.multiplayer.description=The full Minecraft experience lets you enjoy Creative mode, Achievements and Multiplayer with your friends across Minecraft devices! Play with friends on console, PC and mobile to create, explore and survive together. +trial.thanks_for_testing.achievements.description=In addition to the full Minecraft experience with Creative mode, Multiplayer, and more, you'll earn achievements and a Gamerscore to mark your Minecraft progress and show your Microsoft Account friends your accomplishments. +trial.thanks_for_testing.multiplayer.description=The full Minecraft experience lets you enjoy Creative mode, achievements and Multiplayer with your friends across Minecraft devices! Play with friends on console, PC and mobile to create, explore and survive together. trial.thanks_for_testing.server.description=As a part of the full Minecraft experience, Servers offer some of the most creative ways to enjoy Minecraft! Play great mini-games, meet the Minecraft community and make new friends. trial.thanks_for_testing.store.description=The full game allows access to Minecraft Marketplace, our in-game store. Switch up your look with new skins, change your world, or explore incredible new maps from the best community creators! trial.thanks_for_testing.creative.description=A beloved part of the full Minecraft experience: Creative mode! Access the entire inventory - the only limit to what you can build is your imagination! Fly around your world, make your dream home out of anything and everything, or just blow up a mountain with unlimited TNT! -trial.thanks_for_testing.addon.description=Want to make wolves act like bunnies? Turn all the trees into cotton candy? You can alter everything in the full Minecraft experience with add-ons! Plus get access to Multiplayer, Creative mode, Achievements and more! +trial.thanks_for_testing.addon.description=Want to make wolves act like bunnies? Turn all the trees into cotton candy? You can alter everything in the full Minecraft experience with add-ons! Plus get access to Multiplayer, Creative mode, achievements and more! trial.thanks_for_testing.seeds.description=The full Minecraft experience unlocks access to Seeds! Seeds help you discover new biomes - survive on ice plains, ascend extreme hills, or trek across deserts. Start with unique templates or explore random new worlds! trial.tabbed_upsell.navleft=Navigate Tab Left @@ -9779,10 +9834,6 @@ xbox.signinquestion=Sign In? xbox.notnow=Not Now xbox.signingin=Signing in with your Microsoft Account... xbox.signingin.offline=Signing in -xbox.firstsignin.line1=Welcome to Minecraft! Use a Microsoft Account to start connecting with the Minecraft community, where PCs, consoles, phones, and tablets can all play together. And the best part? -xbox.firstsignin.line2=It's FREE! -xbox.firstsignin.line3=Don't have an account? Create one now to earn achievements and join Realms and Servers! -xbox.firstsignin.line3.norealmsOrServers=Don't have an account? Create one now to earn achievements and play with your cross-platform friends! xbox.failedsignin.body=We could not sign you into your Microsoft Account. Access to Realms, Profiles, and your Marketplace items will be limited. Please try again later. xbox.failedsignin.error=Error Code: xbox.failedsignin.moreInfo=More Info @@ -9812,6 +9863,8 @@ xbox.disconectionscreen.notSignedIn=Sign in with your Microsoft Account to play xbox.disconectionscreen.multiplayerNotAllowed=This Microsoft Account does not have permission to join multiplayer games. xbox.disconectionscreen.accessDenied=You must be friends with someone in this game in order to join. +xbox.addfriendsscreen.shareProfile=Add me as a friend in Minecraft! + xbox.friendfinder.enterGamertag=Enter Gamertag xbox.friendfinder.findFriends=Find Friends by Gamertag xbox.friendfinder.searchingForGamertag=Searching @@ -9885,13 +9938,15 @@ xbox.report.quittingEarly=Quitting early xbox.report.unsportingBehavior=Unsporting behavior xbox.report.voiceCommunication=Voice communication +xbox.statistics.timePlayed=Time played +xbox.statistics.blocksBroken=Blocks broken +xbox.statistics.distanceTravelled=Distance travelled +xbox.statistics.mobsDefeated=Mobs defeated + ## Player safety toast messages safety.muted.title=You've been temporarily muted in chat. safety.muted.message=Remember to follow the Minecraft Community Standards. -safety.reportCap=Looks like you've been busy reporting other players. Thank you for helping us make Minecraft a safe and welcoming place. Keep in mind, filing false reports is against our Community Standards. -safety.reportFriend=%s is a friend of yours. Are you sure you want to report them? Filing false reports is against our Community Standards. -safety.reportFriend.title=Report %s safety.bannedSkin.title=Skin Not Allowed In Multiplayer safety.bannedSkin.button=Learn More safety.bannedSkin.continue=Continue with default skin @@ -10200,6 +10255,12 @@ lategameTips.27=Diorite, you either love it or hate it. tips.realms.1=Take a screenshot using the Game menu. tips.realms.2=A Realm is always online, so you and your friends can play here whenever you want. +tips.realms.3=Keep up to date with what's going on in your Realm by checking the Story Feed in Realms Stories. +tips.realms.4=Share your great moments with the other players on this Realm by adding a story to the Story Feed. +tips.realms.5=Check the Timeline in Realms Stories to find out when others are playing. +tips.realms.6=Access Realms Stories from the game menu while playing on the Realm. +tips.realms.7=Get to know your Realm's community on the Members tab in Realms Stories. +tips.realms.8=Use Realms Stories to get social, keep up with your friends' progress, and organize playtime. splitscreen.joinPrompt=Join as Player %s splitscreen.unavailable.toastHeader=Split Screen Is Unavailable @@ -10408,8 +10469,8 @@ dr.header.featured_skins=Featured Skins dr.header.previewAppearance=Preview Appearance dr.header.colorPicker=Color Picker dr.achievement.achievement_locked.not_signed_in=This item is unlocked through completing an achievement. -dr.achievement.achievement_locked.signed_in=This item is unlocked by completing the %s Achievement. -dr.achievement.achievement_unlocked=This item was unlocked by completing the %s Achievement. +dr.achievement.achievement_locked.signed_in=This item is unlocked by completing the %s achievement. +dr.achievement.achievement_unlocked=This item was unlocked by completing the %s achievement. dr.achievement.challenge_locked=This item is unlocked by completing a challenge from Minecraft Earth. dr.achievement.challenge_unlocked=This item was unlocked by completing a challenge from Minecraft Earth. dr.arm_size_label_text=Arm Size