├── .editorconfig ├── .gitattributes ├── .github └── workflows │ └── gradle.yml ├── .gitignore ├── .travis.yml ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── ChangeLog.txt ├── LICENSE ├── README.md ├── build.gradle ├── chunky ├── .gitignore ├── build.gradle ├── res │ ├── chunky-cfg.svg │ ├── chunky-icon.svg │ └── chunky.svg └── src │ ├── java │ ├── .gitattributes │ └── se │ │ └── llbit │ │ ├── chunky │ │ ├── Plugin.java │ │ ├── block │ │ │ ├── AbstractModelBlock.java │ │ │ ├── Block.java │ │ │ ├── BlockFace.java │ │ │ ├── BlockProvider.java │ │ │ ├── BlockSpec.java │ │ │ ├── FinalizationState.java │ │ │ ├── FixedTopBottomRotatableTexturedBlock.java │ │ │ ├── MinecraftBlock.java │ │ │ ├── MinecraftBlockProvider.java │ │ │ ├── MinecraftBlockTranslucent.java │ │ │ ├── ModelBlock.java │ │ │ ├── OctreeFinalizationState.java │ │ │ ├── SolidNonOpaqueBlock.java │ │ │ ├── TexturedBlock.java │ │ │ ├── TopBottomOrientedTexturedBlock.java │ │ │ ├── UntintedLeaves.java │ │ │ ├── legacy │ │ │ │ ├── LegacyBlockUtils.java │ │ │ │ ├── LegacyBlocks.java │ │ │ │ ├── LegacyBlocksFinalizer.java │ │ │ │ ├── LegacyMinecraftBlockProvider.java │ │ │ │ ├── UnfinalizedLegacyBlock.java │ │ │ │ └── blocks │ │ │ │ │ ├── LegacyBanner.java │ │ │ │ │ ├── LegacyBed.java │ │ │ │ │ ├── LegacyChest.java │ │ │ │ │ ├── LegacyChorusPlant.java │ │ │ │ │ ├── LegacyCobblestoneWall.java │ │ │ │ │ ├── LegacyDoorPart.java │ │ │ │ │ ├── LegacyFence.java │ │ │ │ │ ├── LegacyFenceGate.java │ │ │ │ │ ├── LegacyFire.java │ │ │ │ │ ├── LegacyFlowerPot.java │ │ │ │ │ ├── LegacyGlassPane.java │ │ │ │ │ ├── LegacyIronBars.java │ │ │ │ │ ├── LegacyLargeFlower.java │ │ │ │ │ ├── LegacyMelonStem.java │ │ │ │ │ ├── LegacyNetherPortal.java │ │ │ │ │ ├── LegacyPumpkinStem.java │ │ │ │ │ ├── LegacyRedstoneWire.java │ │ │ │ │ ├── LegacySkull.java │ │ │ │ │ ├── LegacySnowCoverableBlock.java │ │ │ │ │ ├── LegacyStairs.java │ │ │ │ │ ├── LegacyTripwire.java │ │ │ │ │ ├── LegacyVine.java │ │ │ │ │ └── LegacyWallBanner.java │ │ │ └── minecraft │ │ │ │ ├── Air.java │ │ │ │ ├── AmethystCluster.java │ │ │ │ ├── Anvil.java │ │ │ │ ├── AttachedStem.java │ │ │ │ ├── Azalea.java │ │ │ │ ├── Bamboo.java │ │ │ │ ├── Banner.java │ │ │ │ ├── Barrel.java │ │ │ │ ├── Beacon.java │ │ │ │ ├── Bed.java │ │ │ │ ├── Beetroots.java │ │ │ │ ├── Bell.java │ │ │ │ ├── BigDripleaf.java │ │ │ │ ├── BigDripleafStem.java │ │ │ │ ├── BlastFurnace.java │ │ │ │ ├── BrewingStand.java │ │ │ │ ├── Button.java │ │ │ │ ├── Cactus.java │ │ │ │ ├── Cake.java │ │ │ │ ├── CakeWithCandle.java │ │ │ │ ├── CalibratedSculkSensor.java │ │ │ │ ├── Campfire.java │ │ │ │ ├── Candle.java │ │ │ │ ├── Carpet.java │ │ │ │ ├── Carrots.java │ │ │ │ ├── Cauldron.java │ │ │ │ ├── CaveVines.java │ │ │ │ ├── Chain.java │ │ │ │ ├── ChainCommandBlock.java │ │ │ │ ├── Chest.java │ │ │ │ ├── ChiseledBookshelf.java │ │ │ │ ├── ChorusFlower.java │ │ │ │ ├── ChorusPlant.java │ │ │ │ ├── Cocoa.java │ │ │ │ ├── CommandBlock.java │ │ │ │ ├── Comparator.java │ │ │ │ ├── Composter.java │ │ │ │ ├── Conduit.java │ │ │ │ ├── CopperBulb.java │ │ │ │ ├── CoralFan.java │ │ │ │ ├── Crafter.java │ │ │ │ ├── CreakingHeart.java │ │ │ │ ├── DaylightDetector.java │ │ │ │ ├── DecoratedPot.java │ │ │ │ ├── Dispenser.java │ │ │ │ ├── Door.java │ │ │ │ ├── DragonEgg.java │ │ │ │ ├── Dropper.java │ │ │ │ ├── EnchantingTable.java │ │ │ │ ├── EndPortal.java │ │ │ │ ├── EndPortalFrame.java │ │ │ │ ├── EndRod.java │ │ │ │ ├── EnderChest.java │ │ │ │ ├── Farmland.java │ │ │ │ ├── Fence.java │ │ │ │ ├── FenceGate.java │ │ │ │ ├── Fern.java │ │ │ │ ├── Fire.java │ │ │ │ ├── FlowerPot.java │ │ │ │ ├── Frogspawn.java │ │ │ │ ├── FrostedIce.java │ │ │ │ ├── Furnace.java │ │ │ │ ├── Glass.java │ │ │ │ ├── GlassPane.java │ │ │ │ ├── GlazedTerracotta.java │ │ │ │ ├── GlowLichen.java │ │ │ │ ├── Grass.java │ │ │ │ ├── GrassBlock.java │ │ │ │ ├── GrassPath.java │ │ │ │ ├── Grindstone.java │ │ │ │ ├── HangingSign.java │ │ │ │ ├── Head.java │ │ │ │ ├── HeavyCore.java │ │ │ │ ├── Honey.java │ │ │ │ ├── Hopper.java │ │ │ │ ├── IronBars.java │ │ │ │ ├── JigsawBlock.java │ │ │ │ ├── Ladder.java │ │ │ │ ├── Lantern.java │ │ │ │ ├── LargeFern.java │ │ │ │ ├── Lava.java │ │ │ │ ├── LavaCauldron.java │ │ │ │ ├── Leaves.java │ │ │ │ ├── Lectern.java │ │ │ │ ├── Lever.java │ │ │ │ ├── LightBlock.java │ │ │ │ ├── LightningRod.java │ │ │ │ ├── LilyPad.java │ │ │ │ ├── Log.java │ │ │ │ ├── MangrovePropagule.java │ │ │ │ ├── MangroveRoots.java │ │ │ │ ├── NetherPortal.java │ │ │ │ ├── NetherWart.java │ │ │ │ ├── Observer.java │ │ │ │ ├── OpenEyeblossom.java │ │ │ │ ├── OrientableTrapdoor.java │ │ │ │ ├── PaleMossCarpet.java │ │ │ │ ├── PinkPetals.java │ │ │ │ ├── Piston.java │ │ │ │ ├── PistonHead.java │ │ │ │ ├── PitcherCrop.java │ │ │ │ ├── PitcherPlant.java │ │ │ │ ├── PointedDripstone.java │ │ │ │ ├── Potatoes.java │ │ │ │ ├── PowderSnowCauldron.java │ │ │ │ ├── PressurePlate.java │ │ │ │ ├── Rail.java │ │ │ │ ├── RedstoneLamp.java │ │ │ │ ├── RedstoneTorch.java │ │ │ │ ├── RedstoneWallTorch.java │ │ │ │ ├── RedstoneWire.java │ │ │ │ ├── Repeater.java │ │ │ │ ├── RepeatingCommandBlock.java │ │ │ │ ├── ResinClump.java │ │ │ │ ├── RespawnAnchor.java │ │ │ │ ├── Scaffolding.java │ │ │ │ ├── SculkCatalyst.java │ │ │ │ ├── SculkSensor.java │ │ │ │ ├── SculkShrieker.java │ │ │ │ ├── SculkVein.java │ │ │ │ ├── SeaPickle.java │ │ │ │ ├── ShulkerBox.java │ │ │ │ ├── Sign.java │ │ │ │ ├── Slab.java │ │ │ │ ├── Slime.java │ │ │ │ ├── SmallDripleaf.java │ │ │ │ ├── Smoker.java │ │ │ │ ├── SnifferEgg.java │ │ │ │ ├── Snow.java │ │ │ │ ├── SoulFire.java │ │ │ │ ├── SporeBlossom.java │ │ │ │ ├── SpriteBlock.java │ │ │ │ ├── Stairs.java │ │ │ │ ├── Stem.java │ │ │ │ ├── Stonecutter.java │ │ │ │ ├── SugarCane.java │ │ │ │ ├── Sunflower.java │ │ │ │ ├── SweetBerryBush.java │ │ │ │ ├── TallGrass.java │ │ │ │ ├── TintedGlass.java │ │ │ │ ├── Torch.java │ │ │ │ ├── TorchflowerCrop.java │ │ │ │ ├── Trapdoor.java │ │ │ │ ├── TrialSpawner.java │ │ │ │ ├── Tripwire.java │ │ │ │ ├── TripwireHook.java │ │ │ │ ├── TurtleEgg.java │ │ │ │ ├── UnknownBlock.java │ │ │ │ ├── Vault.java │ │ │ │ ├── Vine.java │ │ │ │ ├── Wall.java │ │ │ │ ├── WallBanner.java │ │ │ │ ├── WallCoralFan.java │ │ │ │ ├── WallHangingSign.java │ │ │ │ ├── WallHead.java │ │ │ │ ├── WallSign.java │ │ │ │ ├── WallTorch.java │ │ │ │ ├── Water.java │ │ │ │ └── Wheat.java │ │ ├── chunk │ │ │ ├── BlockPalette.java │ │ │ ├── ChunkData.java │ │ │ ├── ChunkLoadingException.java │ │ │ ├── EmptyChunkData.java │ │ │ ├── GenericChunkData.java │ │ │ ├── SimpleChunkData.java │ │ │ ├── TagBlockBuilder.java │ │ │ └── biome │ │ │ │ ├── BiomeData.java │ │ │ │ ├── BiomeData2d.java │ │ │ │ ├── BiomeDataFactory.java │ │ │ │ ├── GenericQuartBiomeData3d.java │ │ │ │ ├── QuartBiomeData3d.java │ │ │ │ └── UnknownBiomeData.java │ │ ├── entity │ │ │ ├── ArmorStand.java │ │ │ ├── Armored.java │ │ │ ├── BannerDesign.java │ │ │ ├── BeaconBeam.java │ │ │ ├── Book.java │ │ │ ├── CalibratedSculkSensorAmethyst.java │ │ │ ├── Campfire.java │ │ │ ├── CoralFanEntity.java │ │ │ ├── Entity.java │ │ │ ├── FlameParticles.java │ │ │ ├── Geared.java │ │ │ ├── HangingSignEntity.java │ │ │ ├── HeadEntity.java │ │ │ ├── Lectern.java │ │ │ ├── LilyPadEntity.java │ │ │ ├── PaintingEntity.java │ │ │ ├── PlayerEntity.java │ │ │ ├── Poseable.java │ │ │ ├── SignEntity.java │ │ │ ├── SkullEntity.java │ │ │ ├── SporeBlossom.java │ │ │ ├── StandingBanner.java │ │ │ ├── UVMapHelper.java │ │ │ ├── WallBanner.java │ │ │ ├── WallCoralFanEntity.java │ │ │ ├── WallHangingSignEntity.java │ │ │ └── WallSignEntity.java │ │ ├── main │ │ │ ├── Chunky.java │ │ │ ├── ChunkyOptions.java │ │ │ ├── CommandLineOptions.java │ │ │ ├── HeadlessErrorTrackingLogger.java │ │ │ ├── Version.java │ │ │ └── ZipExportJob.java │ │ ├── map │ │ │ ├── AbstractLayer.java │ │ │ ├── BiomeLayer.java │ │ │ ├── BitmapLayer.java │ │ │ ├── IconLayer.java │ │ │ ├── MapBuffer.java │ │ │ ├── MapTile.java │ │ │ ├── MapView.java │ │ │ ├── SurfaceLayer.java │ │ │ └── WorldMapLoader.java │ │ ├── model │ │ │ ├── AABBModel.java │ │ │ ├── AnimatedQuadModel.java │ │ │ ├── BlockModel.java │ │ │ ├── DirectionalBlockModel.java │ │ │ ├── FixedTopBottomRotatableTexturedBlockModel.java │ │ │ ├── GrassTintedSpriteModel.java │ │ │ ├── Model.java │ │ │ ├── QuadModel.java │ │ │ ├── RotatableBlockModel.java │ │ │ ├── TexturedBlockModel.java │ │ │ ├── Tint.java │ │ │ ├── TopBottomOrientedTexturedBlockModel.java │ │ │ └── minecraft │ │ │ │ ├── AnvilModel.java │ │ │ │ ├── AttachedStemModel.java │ │ │ │ ├── AzaleaModel.java │ │ │ │ ├── BambooModel.java │ │ │ │ ├── BarrelModel.java │ │ │ │ ├── BeaconModel.java │ │ │ │ ├── BedModel.java │ │ │ │ ├── BellModel.java │ │ │ │ ├── BigDripleafModel.java │ │ │ │ ├── BigDripleafStemModel.java │ │ │ │ ├── BrewingStandModel.java │ │ │ │ ├── ButtonModel.java │ │ │ │ ├── CactusModel.java │ │ │ │ ├── CakeModel.java │ │ │ │ ├── CakeWithCandleModel.java │ │ │ │ ├── CalibratedSculkSensorModel.java │ │ │ │ ├── CandleModel.java │ │ │ │ ├── CarpetModel.java │ │ │ │ ├── CauldronModel.java │ │ │ │ ├── ChainModel.java │ │ │ │ ├── ChestModel.java │ │ │ │ ├── ChorusFlowerModel.java │ │ │ │ ├── ChorusPlantModel.java │ │ │ │ ├── CocoaPlantModel.java │ │ │ │ ├── CocoaPlantModel119.java │ │ │ │ ├── ComparatorModel.java │ │ │ │ ├── ComparatorModel1212.java │ │ │ │ ├── ComposterModel.java │ │ │ │ ├── ConduitModel.java │ │ │ │ ├── CropsModel.java │ │ │ │ ├── DaylightSensorModel.java │ │ │ │ ├── DecoratedPotModel.java │ │ │ │ ├── DispenserModel.java │ │ │ │ ├── DoorModel.java │ │ │ │ ├── DragonEggModel.java │ │ │ │ ├── EnchantmentTableModel.java │ │ │ │ ├── EndPortalFrameModel.java │ │ │ │ ├── EndPortalModel.java │ │ │ │ ├── EndRodModel.java │ │ │ │ ├── FenceGateModel.java │ │ │ │ ├── FenceModel.java │ │ │ │ ├── FireModel.java │ │ │ │ ├── FlowerPotModel.java │ │ │ │ ├── Flowerbed.java │ │ │ │ ├── FrogspawnModel.java │ │ │ │ ├── GlassPaneModel.java │ │ │ │ ├── GlowLichenModel.java │ │ │ │ ├── GrassBlockModel.java │ │ │ │ ├── GrassPathModel.java │ │ │ │ ├── GrindstoneModel.java │ │ │ │ ├── HeavyCoreModel.java │ │ │ │ ├── HoneyBlockModel.java │ │ │ │ ├── HopperModel.java │ │ │ │ ├── IronBarsModel.java │ │ │ │ ├── JigsawModel.java │ │ │ │ ├── LadderModel.java │ │ │ │ ├── LanternModel.java │ │ │ │ ├── LeafModel.java │ │ │ │ ├── LeverModel.java │ │ │ │ ├── LightBlockModel.java │ │ │ │ ├── LightningRodModel.java │ │ │ │ ├── LogModel.java │ │ │ │ ├── MangrovePropaguleModel.java │ │ │ │ ├── MangroveRootsModel.java │ │ │ │ ├── NetherPortalModel.java │ │ │ │ ├── ObserverModel.java │ │ │ │ ├── OpenEyeblossomModel.java │ │ │ │ ├── OrientableTrapdoorModel.java │ │ │ │ ├── PaleMossCarpetModel.java │ │ │ │ ├── PistonExtensionModel.java │ │ │ │ ├── PistonModel.java │ │ │ │ ├── PitcherCropBottomModel.java │ │ │ │ ├── PitcherCropTopModel.java │ │ │ │ ├── PitcherPlantBottomModel.java │ │ │ │ ├── PitcherPlantTopModel.java │ │ │ │ ├── PressurePlateModel.java │ │ │ │ ├── RailModel.java │ │ │ │ ├── RedstoneRepeaterModel.java │ │ │ │ ├── RedstoneRepeaterModel1212.java │ │ │ │ ├── RedstoneTorchModel.java │ │ │ │ ├── RedstoneWallTorchModel.java │ │ │ │ ├── RedstoneWireModel.java │ │ │ │ ├── ResinClumpModel.java │ │ │ │ ├── ScaffoldingModel.java │ │ │ │ ├── SculkSensorModel.java │ │ │ │ ├── SculkShriekerModel.java │ │ │ │ ├── SculkVeinModel.java │ │ │ │ ├── SeaPickleModel.java │ │ │ │ ├── SlabModel.java │ │ │ │ ├── SlimeBlockModel.java │ │ │ │ ├── SmallDripleafModel.java │ │ │ │ ├── SnifferEggModel.java │ │ │ │ ├── SnowModel.java │ │ │ │ ├── SporeBlossomModel.java │ │ │ │ ├── SpriteModel.java │ │ │ │ ├── StairModel.java │ │ │ │ ├── StemModel.java │ │ │ │ ├── StonecutterModel.java │ │ │ │ ├── SunFlowerModel.java │ │ │ │ ├── TerracottaModel.java │ │ │ │ ├── TorchModel.java │ │ │ │ ├── TrapdoorModel.java │ │ │ │ ├── TrialSpawnerModel.java │ │ │ │ ├── TripwireHookModel.java │ │ │ │ ├── TripwireModel.java │ │ │ │ ├── TurtleEggModel.java │ │ │ │ ├── VaultModel.java │ │ │ │ ├── VineModel.java │ │ │ │ ├── WallModel.java │ │ │ │ └── WaterModel.java │ │ ├── plugin │ │ │ ├── ContextMenuTransformer.java │ │ │ ├── PluginApi.java │ │ │ ├── TabTransformer.java │ │ │ ├── loader │ │ │ │ ├── JarPluginLoader.java │ │ │ │ ├── PluginLoader.java │ │ │ │ ├── PluginManager.java │ │ │ │ └── ResolvedPlugin.java │ │ │ └── manifest │ │ │ │ ├── PluginDependency.java │ │ │ │ └── PluginManifest.java │ │ ├── renderer │ │ │ ├── ApertureShape.java │ │ │ ├── CameraViewListener.java │ │ │ ├── ChunkViewListener.java │ │ │ ├── ConsoleProgressListener.java │ │ │ ├── DefaultRenderManager.java │ │ │ ├── EmitterSamplingStrategy.java │ │ │ ├── PathTracingRenderer.java │ │ │ ├── Postprocess.java │ │ │ ├── PreviewRenderer.java │ │ │ ├── RayTracerFactory.java │ │ │ ├── Refreshable.java │ │ │ ├── RenderContext.java │ │ │ ├── RenderContextFactory.java │ │ │ ├── RenderController.java │ │ │ ├── RenderManager.java │ │ │ ├── RenderManagerFactory.java │ │ │ ├── RenderMode.java │ │ │ ├── RenderStatus.java │ │ │ ├── RenderStatusListener.java │ │ │ ├── RenderWorkerPool.java │ │ │ ├── Renderer.java │ │ │ ├── Repaintable.java │ │ │ ├── ResetReason.java │ │ │ ├── SceneIOProvider.java │ │ │ ├── SceneProvider.java │ │ │ ├── SceneStatusListener.java │ │ │ ├── SnapshotControl.java │ │ │ ├── SunSamplingStrategy.java │ │ │ ├── TileBasedRenderer.java │ │ │ ├── WaterShadingStrategy.java │ │ │ ├── WorkerState.java │ │ │ ├── export │ │ │ │ ├── PfmExportFormat.java │ │ │ │ ├── PictureExportFormat.java │ │ │ │ ├── PictureExportFormats.java │ │ │ │ ├── PngExportFormat.java │ │ │ │ └── Tiff32ExportFormat.java │ │ │ ├── postprocessing │ │ │ │ ├── ACESFilmicFilter.java │ │ │ │ ├── GammaCorrectionFilter.java │ │ │ │ ├── HableToneMappingFilter.java │ │ │ │ ├── NoneFilter.java │ │ │ │ ├── PixelPostProcessingFilter.java │ │ │ │ ├── PostProcessingFilter.java │ │ │ │ ├── PostProcessingFilters.java │ │ │ │ ├── PreviewFilter.java │ │ │ │ ├── SimplePixelPostProcessingFilter.java │ │ │ │ ├── Tonemap1Filter.java │ │ │ │ └── UE4ToneMappingFilter.java │ │ │ ├── projection │ │ │ │ ├── ApertureProjector.java │ │ │ │ ├── FisheyeProjector.java │ │ │ │ ├── ForwardDisplacementProjector.java │ │ │ │ ├── PanoramicProjector.java │ │ │ │ ├── PanoramicSlotProjector.java │ │ │ │ ├── ParallelProjector.java │ │ │ │ ├── PinholeProjector.java │ │ │ │ ├── ProjectionMode.java │ │ │ │ ├── Projector.java │ │ │ │ ├── ShiftProjector.java │ │ │ │ ├── SphericalApertureProjector.java │ │ │ │ ├── StereographicProjector.java │ │ │ │ └── stereo │ │ │ │ │ ├── ODSSinglePerspectiveProjector.java │ │ │ │ │ ├── ODSVerticalStackedProjector.java │ │ │ │ │ └── OmniDirectionalStereoProjector.java │ │ │ ├── renderdump │ │ │ │ ├── AbstractDumpFormat.java │ │ │ │ ├── ClassicDumpFormat.java │ │ │ │ ├── DumpFormat.java │ │ │ │ ├── FloatingPointCompressorDumpFormat.java │ │ │ │ ├── GzipDumpFormat.java │ │ │ │ ├── HuffmanDumpFormat.java │ │ │ │ ├── PixelConsumer.java │ │ │ │ ├── RenderDump.java │ │ │ │ └── UncompressedDumpFormat.java │ │ │ └── scene │ │ │ │ ├── AlphaBuffer.java │ │ │ │ ├── AsynchronousSceneManager.java │ │ │ │ ├── Camera.java │ │ │ │ ├── CameraPreset.java │ │ │ │ ├── CanvasConfig.java │ │ │ │ ├── ChunkFinalizer.java │ │ │ │ ├── EntityLoadingPreferences.java │ │ │ │ ├── Fog.java │ │ │ │ ├── FogLayer.java │ │ │ │ ├── FogMode.java │ │ │ │ ├── LegacyWaterShader.java │ │ │ │ ├── OctreeFinalizer.java │ │ │ │ ├── PathTracer.java │ │ │ │ ├── PlayerModel.java │ │ │ │ ├── PreviewRayTracer.java │ │ │ │ ├── RayTracer.java │ │ │ │ ├── RenderResetHandler.java │ │ │ │ ├── Scene.java │ │ │ │ ├── SceneEntities.java │ │ │ │ ├── SceneFactory.java │ │ │ │ ├── SceneManager.java │ │ │ │ ├── SimplexWaterShader.java │ │ │ │ ├── StillWaterShader.java │ │ │ │ ├── SynchronousSceneManager.java │ │ │ │ ├── WaterShader.java │ │ │ │ ├── biome │ │ │ │ ├── BiomeBlendingUtility.java │ │ │ │ ├── BiomeStructure.java │ │ │ │ ├── ChunkBiomeBlendingHelper.java │ │ │ │ ├── Trivial2dBiomeStructure.java │ │ │ │ ├── Trivial3dBiomeStructure.java │ │ │ │ └── worldtexture │ │ │ │ │ ├── ChunkTexture.java │ │ │ │ │ ├── ChunkTexture3d.java │ │ │ │ │ ├── WorldTexture2dBiomeStructure.java │ │ │ │ │ └── WorldTexture3dBiomeStructure.java │ │ │ │ └── sky │ │ │ │ ├── NishitaSky.java │ │ │ │ ├── PreethamSky.java │ │ │ │ ├── SimulatedSky.java │ │ │ │ ├── Sky.java │ │ │ │ ├── SkyCache.java │ │ │ │ └── Sun.java │ │ ├── resources │ │ │ ├── AbstractHdriTexture.java │ │ │ ├── AnimatedTexture.java │ │ │ ├── BinaryBitmapImage.java │ │ │ ├── BitmapImage.java │ │ │ ├── ChiseledBookshelfTexture.java │ │ │ ├── DataPackUtil.java │ │ │ ├── EntityTexture.java │ │ │ ├── HDRTexture.java │ │ │ ├── LayeredResourcePacks.java │ │ │ ├── OctreeFileFormat.java │ │ │ ├── PFMTexture.java │ │ │ ├── PalettizedBitmapImage.java │ │ │ ├── PlayerTexture.java │ │ │ ├── ResourcePackBannerPatternLoader.java │ │ │ ├── ResourcePackBiomeLoader.java │ │ │ ├── ResourcePackLoader.java │ │ │ ├── ResourcePackPaintingLoader.java │ │ │ ├── ResourcePackTextureLoader.java │ │ │ ├── ShulkerTexture.java │ │ │ ├── SignTexture.java │ │ │ ├── SolidColorTexture.java │ │ │ ├── Texture.java │ │ │ ├── TextureCache.java │ │ │ ├── TexturePackLoader.java │ │ │ └── texturepack │ │ │ │ ├── AllTextures.java │ │ │ │ ├── AlternateTextures.java │ │ │ │ ├── AnimatedTextureLoader.java │ │ │ │ ├── AsciiFontTextureLoader.java │ │ │ │ ├── BedTextureAdapter.java │ │ │ │ ├── ChestTexture.java │ │ │ │ ├── CloudsTexture.java │ │ │ │ ├── ColoredTexture.java │ │ │ │ ├── ConditionalTextures.java │ │ │ │ ├── EntityTextureLoader.java │ │ │ │ ├── FoliageColorTexture.java │ │ │ │ ├── FontTexture.java │ │ │ │ ├── GrassColorTexture.java │ │ │ │ ├── IndexedTexture.java │ │ │ │ ├── JsonFontTextureLoader.java │ │ │ │ ├── LargeChestTexture.java │ │ │ │ ├── LayeredTextureLoader.java │ │ │ │ ├── PaintingBackTexture.java │ │ │ │ ├── PaintingTexture.java │ │ │ │ ├── PaintingTextureAdapter.java │ │ │ │ ├── PlayerTextureLoader.java │ │ │ │ ├── RotatedTextureLoader.java │ │ │ │ ├── ShulkerTextureLoader.java │ │ │ │ ├── SimpleTexture.java │ │ │ │ ├── SplitLargeChestTexture.java │ │ │ │ ├── TextureFormatError.java │ │ │ │ ├── TextureLoader.java │ │ │ │ └── TexturePath.java │ │ ├── ui │ │ │ ├── ChunkMap.java │ │ │ ├── ChunkyFx.java │ │ │ ├── HyperlinkMenuItem.java │ │ │ ├── Icons.java │ │ │ ├── ProgressTracker.java │ │ │ ├── RenderCanvasFx.java │ │ │ ├── TableSortConfigSerializer.java │ │ │ ├── UILogReceiver.java │ │ │ ├── controller │ │ │ │ ├── ChunkyFxController.java │ │ │ │ ├── CreditsController.java │ │ │ │ ├── RenderControlsFxController.java │ │ │ │ ├── ResourcePackChooserController.java │ │ │ │ ├── SceneChooserController.java │ │ │ │ └── WorldChooserController.java │ │ │ ├── dialogs │ │ │ │ ├── ChunkyErrorDialog.java │ │ │ │ ├── Credits.java │ │ │ │ ├── Poser.java │ │ │ │ ├── ResourcePackChooser.java │ │ │ │ ├── SceneChooser.java │ │ │ │ ├── SelectChunksInRadiusDialog.java │ │ │ │ ├── SettingsExport.java │ │ │ │ ├── ShutdownAlert.java │ │ │ │ ├── ValidatingTextInputDialog.java │ │ │ │ └── WorldChooser.java │ │ │ ├── elements │ │ │ │ ├── AngleAdjuster.java │ │ │ │ ├── GradientEditor.java │ │ │ │ ├── SizeInput.java │ │ │ │ └── TextFieldLabelWrapper.java │ │ │ └── render │ │ │ │ ├── RenderControlsTab.java │ │ │ │ ├── RenderControlsTabTransformer.java │ │ │ │ ├── settings │ │ │ │ ├── LayeredFogSettings.java │ │ │ │ ├── SkyboxSettings.java │ │ │ │ ├── SkymapSettings.java │ │ │ │ └── UniformFogSettings.java │ │ │ │ └── tabs │ │ │ │ ├── AdvancedTab.java │ │ │ │ ├── CameraTab.java │ │ │ │ ├── EntitiesTab.java │ │ │ │ ├── GeneralTab.java │ │ │ │ ├── HelpTab.java │ │ │ │ ├── LightingTab.java │ │ │ │ ├── MaterialsTab.java │ │ │ │ ├── PostprocessingTab.java │ │ │ │ ├── SkyTab.java │ │ │ │ ├── TexturesTab.java │ │ │ │ └── WaterTab.java │ │ └── world │ │ │ ├── BlockData.java │ │ │ ├── Chunk.java │ │ │ ├── ChunkDataSource.java │ │ │ ├── ChunkHeightmap.java │ │ │ ├── ChunkPosition.java │ │ │ ├── ChunkSelectionListener.java │ │ │ ├── ChunkSelectionTracker.java │ │ │ ├── ChunkTopographyUpdater.java │ │ │ ├── ChunkVersion.java │ │ │ ├── ChunkView.java │ │ │ ├── Clouds.java │ │ │ ├── CubicDimension.java │ │ │ ├── Dimension.java │ │ │ ├── EmptyChunk.java │ │ │ ├── EmptyDimension.java │ │ │ ├── EmptyRegionChunk.java │ │ │ ├── EmptyWorld.java │ │ │ ├── ExtraMaterials.java │ │ │ ├── Heightmap.java │ │ │ ├── Icon.java │ │ │ ├── ImposterCubicChunk.java │ │ │ ├── Material.java │ │ │ ├── MaterialStore.java │ │ │ ├── PlayerEntityData.java │ │ │ ├── RegionPosition.java │ │ │ ├── SkymapTexture.java │ │ │ ├── World.java │ │ │ ├── WorldScanner.java │ │ │ ├── biome │ │ │ ├── ArrayBiomePalette.java │ │ │ ├── Biome.java │ │ │ ├── BiomeBuilder.java │ │ │ ├── BiomePalette.java │ │ │ ├── Biomes.java │ │ │ └── MapBiomePalette.java │ │ │ ├── listeners │ │ │ ├── ChunkDeletionListener.java │ │ │ ├── ChunkTopographyListener.java │ │ │ └── ChunkUpdateListener.java │ │ │ ├── material │ │ │ ├── BeaconBeamMaterial.java │ │ │ ├── CloudMaterial.java │ │ │ ├── LilyPadMaterial.java │ │ │ └── TextureMaterial.java │ │ │ ├── model │ │ │ ├── Cube.java │ │ │ ├── CubeModel.java │ │ │ ├── Face.java │ │ │ └── JsonModel.java │ │ │ └── region │ │ │ ├── ChunkReadException.java │ │ │ ├── EmptyRegion.java │ │ │ ├── ImposterCubicRegion.java │ │ │ ├── MCRegion.java │ │ │ ├── MCRegionChangeWatcher.java │ │ │ ├── Region.java │ │ │ ├── RegionChangeWatcher.java │ │ │ ├── RegionParser.java │ │ │ └── RegionQueue.java │ │ ├── fxutil │ │ ├── ColumnsBoxBuilder.java │ │ ├── Dialogs.java │ │ ├── FxImageUtil.java │ │ └── GroupedChangeListener.java │ │ ├── imageformats │ │ ├── pfm │ │ │ └── PfmFileWriter.java │ │ ├── png │ │ │ ├── CrcOutputStream.java │ │ │ ├── IDAT.java │ │ │ ├── IEND.java │ │ │ ├── IHDR.java │ │ │ ├── ITXT.java │ │ │ ├── PngChunk.java │ │ │ └── PngFileWriter.java │ │ └── tiff │ │ │ ├── BasicIFD.java │ │ │ ├── CompressionType.java │ │ │ ├── FinalizableBFCOutputStream.java │ │ │ ├── IFDTag.java │ │ │ ├── ImageFileDirectory.java │ │ │ └── TiffFileWriter.java │ │ ├── math │ │ ├── AABB.java │ │ ├── BigPackedOctree.java │ │ ├── ColorUtil.java │ │ ├── Constants.java │ │ ├── Grid.java │ │ ├── Intersectable.java │ │ ├── Matrix3.java │ │ ├── NodeBasedOctree.java │ │ ├── Octree.java │ │ ├── OctreeVisitor.java │ │ ├── PackedOctree.java │ │ ├── Quad.java │ │ ├── Ray.java │ │ ├── SimplexNoise.java │ │ ├── Transform.java │ │ ├── Triangle.java │ │ ├── Vector2.java │ │ ├── Vector3.java │ │ ├── Vector3i.java │ │ ├── Vector4.java │ │ ├── bvh │ │ │ ├── BVH.java │ │ │ ├── BinaryBVH.java │ │ │ ├── MidpointBVH.java │ │ │ ├── SahBVH.java │ │ │ └── SahMaBVH.java │ │ ├── primitive │ │ │ ├── Box.java │ │ │ ├── MutableAABB.java │ │ │ ├── Primitive.java │ │ │ └── TexturedTriangle.java │ │ └── structures │ │ │ ├── Position2IntStructure.java │ │ │ ├── Position2ReferenceStructure.java │ │ │ ├── Position2d2IntPackedArray.java │ │ │ ├── Position2d2ReferencePackedArrayStructure.java │ │ │ ├── Position3d2IntPackedArray.java │ │ │ └── Position3d2ReferencePackedArrayStructure.java │ │ ├── resources │ │ └── ImageLoader.java │ │ └── util │ │ ├── BitBuffer.java │ │ ├── Configurable.java │ │ ├── ImageTools.java │ │ ├── JsonSerializable.java │ │ ├── JsonUtil.java │ │ ├── MinecraftPRNG.java │ │ ├── MinecraftText.java │ │ ├── NbtUtil.java │ │ ├── ProgressListener.java │ │ ├── Registerable.java │ │ ├── RingBuffer.java │ │ ├── TaskTracker.java │ │ ├── UuidUtil.java │ │ ├── annotation │ │ ├── NotNull.java │ │ └── Nullable.java │ │ ├── interner │ │ ├── Interner.java │ │ ├── StrongInterner.java │ │ └── WeakInterner.java │ │ ├── io │ │ ├── BufferedFileChannelOutputStream.java │ │ ├── IsolatedOutputStream.java │ │ ├── PositionalInputStream.java │ │ ├── PositionalOutputStream.java │ │ ├── RepositionableMeasurableDataOutput.java │ │ └── ZipExport.java │ │ └── mojangapi │ │ ├── MinecraftProfile.java │ │ ├── MinecraftSkin.java │ │ └── MojangApi.java │ ├── res │ ├── chunky-icon.png │ ├── icons │ │ ├── 1_12.png │ │ ├── 1_13.png │ │ ├── advanced.png │ │ ├── bed.png │ │ ├── cactus.png │ │ ├── cake.png │ │ ├── camera.png │ │ ├── cauldron.png │ │ ├── chunky.png │ │ ├── clear.png │ │ ├── clock.png │ │ ├── colors.png │ │ ├── disk.png │ │ ├── dragon-egg.png │ │ ├── eye.png │ │ ├── face.png │ │ ├── face_t.png │ │ ├── failed.png │ │ ├── fence.png │ │ ├── gear.png │ │ ├── home.png │ │ ├── home_t.png │ │ ├── iron-door.png │ │ ├── iso-ne.png │ │ ├── iso-nw.png │ │ ├── iso-se.png │ │ ├── iso-sw.png │ │ ├── jack-o-lantern.png │ │ ├── jukebox.png │ │ ├── key.png │ │ ├── lens.png │ │ ├── lever.png │ │ ├── light.png │ │ ├── load.png │ │ ├── lock.png │ │ ├── magnify.png │ │ ├── map-selected.png │ │ ├── map.png │ │ ├── minus.png │ │ ├── note-block.png │ │ ├── pause.png │ │ ├── pencil.png │ │ ├── photo.png │ │ ├── play.png │ │ ├── player.png │ │ ├── plus.png │ │ ├── pumpkin.png │ │ ├── question.png │ │ ├── redstone-torch-on.png │ │ ├── reload.png │ │ ├── save.png │ │ ├── scale.png │ │ ├── sign-post.png │ │ ├── sky.png │ │ ├── skybox-back.png │ │ ├── skybox-down.png │ │ ├── skybox-front.png │ │ ├── skybox-left.png │ │ ├── skybox-right.png │ │ ├── skybox-up.png │ │ ├── stone-brick-stairs.png │ │ ├── stone-button.png │ │ ├── stone-pressure-plate.png │ │ ├── stone-stairs.png │ │ ├── stop.png │ │ ├── sun.png │ │ ├── unknown.png │ │ ├── wall-sign.png │ │ ├── water.png │ │ ├── wheat.png │ │ ├── wooden-door.png │ │ ├── wooden-pressure-plate.png │ │ ├── wooden-stairs.png │ │ └── wrench.png │ ├── se │ │ └── llbit │ │ │ └── chunky │ │ │ ├── main │ │ │ └── Version.properties │ │ │ ├── renderer │ │ │ └── projection │ │ │ │ ├── gaussian-aperture.png │ │ │ │ ├── hexagon-aperture.png │ │ │ │ ├── pentagon-aperture.png │ │ │ │ └── star-aperture.png │ │ │ └── ui │ │ │ ├── Chunky.fxml │ │ │ ├── chunky.png │ │ │ ├── dialogs │ │ │ ├── Credits.fxml │ │ │ ├── ErrorDialog.fxml │ │ │ ├── Poser.fxml │ │ │ ├── ResourcePackChooser.fxml │ │ │ ├── SceneChooser.fxml │ │ │ ├── WarningDialog.fxml │ │ │ └── WorldChooser.fxml │ │ │ ├── elements │ │ │ ├── GradientEditor.fxml │ │ │ ├── jog_wheel.png │ │ │ └── jog_wheel_dimple.png │ │ │ └── render │ │ │ ├── settings │ │ │ ├── LayeredFogSettings.fxml │ │ │ ├── SkyboxSettings.fxml │ │ │ ├── SkymapSettings.fxml │ │ │ └── UniformFogSettings.fxml │ │ │ └── tabs │ │ │ ├── AdvancedTab.fxml │ │ │ ├── CameraTab.fxml │ │ │ ├── EntitiesTab.fxml │ │ │ ├── GeneralTab.fxml │ │ │ ├── HelpTab.fxml │ │ │ ├── LightingTab.fxml │ │ │ ├── PostprocessingTab.fxml │ │ │ ├── SkyTab.fxml │ │ │ ├── TexturesTab.fxml │ │ │ └── WaterTab.fxml │ ├── style.css │ └── textures │ │ ├── air.png │ │ ├── bedrock.png │ │ ├── bookshelf.png │ │ ├── bricks.png │ │ ├── brown-mushroom.png │ │ ├── chest.png │ │ ├── clay.png │ │ ├── coal-ore.png │ │ ├── cobblestone.png │ │ ├── cobweb.png │ │ ├── dead-bush.png │ │ ├── diamond-block.png │ │ ├── diamond-ore.png │ │ ├── dirt.png │ │ ├── dispenser.png │ │ ├── double-stone-slab.png │ │ ├── east.png │ │ ├── end-portal.png │ │ ├── end-stone.png │ │ ├── fire.png │ │ ├── furnace-lit.png │ │ ├── furnace.png │ │ ├── glass.png │ │ ├── glowstone.png │ │ ├── gold-block.png │ │ ├── gold-ore.png │ │ ├── grass-side-saturated.png │ │ ├── grass.png │ │ ├── gravel.png │ │ ├── ice.png │ │ ├── iron-bars.png │ │ ├── iron-block.png │ │ ├── iron-ore.png │ │ ├── ladder.png │ │ ├── lapis-lazuli-block.png │ │ ├── lapis-lazuli-ore.png │ │ ├── lava.png │ │ ├── leaves.png │ │ ├── lily-pad.png │ │ ├── melon.png │ │ ├── minecart-track.png │ │ ├── moss-stone.png │ │ ├── nether-portal.png │ │ ├── netherrack.png │ │ ├── north.png │ │ ├── obsidian.png │ │ ├── piston-extension.png │ │ ├── piston.png │ │ ├── red-mushroom.png │ │ ├── redstone-lamp-off.png │ │ ├── redstone-lamp-on.png │ │ ├── redstone-ore.png │ │ ├── redstone-repeater-off.png │ │ ├── redstone-repeater-on.png │ │ ├── redstone-torch-off.png │ │ ├── redstone-torch-on.png │ │ ├── redstone-wire-off-intersect.png │ │ ├── rose.png │ │ ├── sand.png │ │ ├── sandstone.png │ │ ├── sapling.png │ │ ├── snow.png │ │ ├── soil.png │ │ ├── soul-sand.png │ │ ├── south.png │ │ ├── spawner.png │ │ ├── sponge.png │ │ ├── stone-bricks.png │ │ ├── stone-slab.png │ │ ├── stone.png │ │ ├── sugar-canes.png │ │ ├── tall-grass.png │ │ ├── tnt.png │ │ ├── torch.png │ │ ├── trapdoor.png │ │ ├── unknown.png │ │ ├── vines.png │ │ ├── water-height.png │ │ ├── water.png │ │ ├── west.png │ │ ├── wood-top.png │ │ ├── wood.png │ │ ├── wooden-planks.png │ │ ├── wool.png │ │ ├── workbench.png │ │ └── yellow-flower.png │ └── test │ └── se │ └── llbit │ ├── chunky │ ├── block │ │ └── SkullTextureTest.java │ ├── chunk │ │ └── BlockPaletteTest.java │ ├── entity │ │ └── MarshallingTest.java │ ├── main │ │ ├── OptionHandlerTest.java │ │ └── PluginApiTest.java │ ├── nbt │ │ └── NBTTest.java │ ├── plugin │ │ └── PluginManagerTest.java │ ├── renderer │ │ ├── BlankRenderTest.java │ │ ├── MockSceneProvider.java │ │ ├── renderdump │ │ │ └── RenderDumpTest.java │ │ └── scene │ │ │ ├── SceneManagerTest.java │ │ │ └── SceneTest.java │ └── resources │ │ └── AnimatedTextureTest.java │ ├── fxutil │ └── GroupedChangeListenerTest.java │ ├── log │ └── LogTest.java │ ├── math │ ├── ColorUtilTest.java │ ├── MutableAABBTest.java │ ├── OctreeTest.java │ └── QuickMathTest.java │ ├── testutil │ └── TestUtils.java │ └── util │ ├── RingBufferTest.java │ └── WeakInternerTest.java ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── launcher ├── .gitignore ├── build.gradle ├── src │ └── se │ │ └── llbit │ │ └── chunky │ │ └── launcher │ │ ├── ChunkyDeployer.java │ │ ├── ChunkyLauncher.java │ │ ├── ConsoleLogger.java │ │ ├── ConsoleUpdater.java │ │ ├── Dialogs.java │ │ ├── DownloadStatus.java │ │ ├── JavaFxDownloads.java │ │ ├── JavaFxInstaller.java │ │ ├── JavaFxLocator.java │ │ ├── JreUtil.java │ │ ├── LaunchMode.java │ │ ├── LauncherInfo.java │ │ ├── LauncherInfoChecker.java │ │ ├── Logger.java │ │ ├── UpdateChecker.java │ │ ├── UpdateListener.java │ │ ├── VersionInfo.java │ │ └── ui │ │ ├── ChunkyLauncher.fxml │ │ ├── ChunkyLauncherController.java │ │ ├── ChunkyLauncherFx.java │ │ ├── DebugConsole.java │ │ ├── FirstTimeSetupDialog.java │ │ ├── LaunchErrorDialog.java │ │ ├── LauncherUpdateDialog.fxml │ │ ├── LauncherUpdateDialog.java │ │ ├── LauncherUpdateDialogController.java │ │ ├── PluginManager.fxml │ │ ├── PluginManager.java │ │ ├── PluginManagerController.java │ │ ├── UpdateDialog.fxml │ │ ├── UpdateDialog.java │ │ ├── UpdateDialogController.java │ │ ├── cached.png │ │ ├── chunky-cfg.png │ │ ├── failed.png │ │ └── refresh.png └── test │ └── se │ └── llbit │ └── chunky │ └── launcher │ └── ChunkyLauncherCliParseTest.java ├── lib ├── .gitignore ├── build.gradle └── src │ └── se │ └── llbit │ ├── chunky │ ├── HelpCopyright.java │ ├── JsonSettings.java │ ├── PersistentSettings.java │ ├── cli │ │ └── CliUtil.java │ ├── launcher │ │ ├── LauncherSettings.java │ │ └── ReleaseChannel.java │ ├── renderer │ │ └── RenderConstants.java │ ├── resources │ │ ├── MinecraftFinder.java │ │ └── SettingsDirectory.java │ └── ui │ │ ├── Adjuster.java │ │ ├── DoubleAdjuster.java │ │ ├── DoubleTextField.java │ │ ├── IntegerAdjuster.java │ │ ├── IntegerTextField.java │ │ ├── NumericTextField.java │ │ ├── PositiveIntegerAdjuster.java │ │ ├── SliderAdjuster.java │ │ └── ValidatingNumberStringConverter.java │ ├── fxutil │ ├── CustomizedListCellFactory.java │ └── WindowPosition.java │ ├── log │ ├── BufferingConsoleReceiver.java │ ├── ConsoleReceiver.java │ ├── Level.java │ ├── Log.java │ └── Receiver.java │ ├── math │ ├── ObservableSize2D.java │ ├── QuickMath.java │ ├── Size2D.java │ └── WritableSize2D.java │ └── util │ ├── Mutable.java │ ├── OSDetector.java │ ├── Pair.java │ └── Util.java ├── licenses ├── APACHE-2.0.txt ├── commons-math.txt ├── fast-util.txt ├── gson.txt ├── lz4-java.txt ├── lz4.txt └── semver4j.txt ├── misc ├── animate.py └── logo.png ├── releasetools ├── .gitignore ├── build.gradle └── src │ └── releasetools │ └── ReleaseBuilder.java ├── settings.gradle └── upload-snapshot.sh /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | end_of_line = lf 6 | indent_size = 2 7 | indent_style = space 8 | insert_final_newline = false 9 | max_line_length = 120 10 | tab_width = 2 11 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | *.properties eol=lf 2 | *.java eol=lf 3 | *.txt eol=crlf 4 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Eclipse files. 2 | /.metadata 3 | /.recommenders 4 | .settings 5 | .project 6 | .classpath 7 | 8 | # Vim swap and undo files. 9 | *.swp 10 | *.*~ 11 | 12 | # Benchmarking & testing. 13 | /bench/x* 14 | /test 15 | /local 16 | 17 | # Build tool files. 18 | /.gradle/ 19 | 20 | # Release artifacts. 21 | /lpcache/ 22 | /bin/ 23 | /latest.json 24 | /snapshot.json 25 | /snapshot 26 | /credentials.json 27 | /credentials.gpg 28 | /build/ 29 | /Chunky.nsi 30 | /release_notes-*.txt 31 | /chunky.jar 32 | 33 | 34 | # IntelliJ IDEA Project files. 35 | .idea/* 36 | *.eml 37 | *.iml 38 | /*.ipr 39 | /*.iws 40 | /out/ 41 | /chunky/out/ 42 | /lib/out/ 43 | /releasetools/out/ 44 | /launcher/out/ 45 | 46 | # Render snapshots from testing. 47 | /*.png 48 | 49 | # Private files. 50 | /TODO 51 | .DS_Store 52 | /tools/appbundler-*.jar 53 | 54 | # Python virtual environment. 55 | /venv/ 56 | requirements.txt 57 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: java 2 | 3 | jdk: 4 | - oraclejdk8 5 | 6 | addons: 7 | apt: 8 | packages: 9 | - oracle-java8-installer 10 | 11 | # TODO Drop this when jdk 11 is supported 12 | # oraclejdk8 isn't available on more recent distributions 13 | dist: trusty 14 | 15 | after_success: 16 | - bash <(curl -s https://codecov.io/bash) 17 | -------------------------------------------------------------------------------- /chunky/.gitignore: -------------------------------------------------------------------------------- 1 | /bin/ 2 | /build/ 3 | /src/gen-res/ 4 | -------------------------------------------------------------------------------- /chunky/src/java/.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto 2 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/block/FixedTopBottomRotatableTexturedBlock.java: -------------------------------------------------------------------------------- 1 | package se.llbit.chunky.block; 2 | 3 | import se.llbit.chunky.model.FixedTopBottomRotatableTexturedBlockModel; 4 | import se.llbit.chunky.resources.Texture; 5 | 6 | /** 7 | * A textured block that can have one of four orientations but have a fixed top and bottom that does NOT rotate. 8 | * E.g. chiseled bookshelves. 9 | * If the top and bottom should rotate with the rest of the block, use TopBottomOrientedTexturedBlock. 10 | */ 11 | public class FixedTopBottomRotatableTexturedBlock extends AbstractModelBlock { 12 | public FixedTopBottomRotatableTexturedBlock(String name, String facing, Texture front, Texture side, Texture top) { 13 | this(name, facing, front, side, side, side, top, top); 14 | } 15 | 16 | public FixedTopBottomRotatableTexturedBlock(String name, String facing, Texture front, Texture side, Texture top, Texture bottom) { 17 | this(name, facing, front, side, side, side, top, bottom); 18 | } 19 | 20 | public FixedTopBottomRotatableTexturedBlock(String name, String facing, Texture front, Texture south, Texture east, Texture west, Texture top, Texture bottom) { 21 | super(name, front); 22 | this.model = new FixedTopBottomRotatableTexturedBlockModel(facing, front, south, east, west, top, bottom); 23 | solid = true; 24 | opaque = true; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/block/MinecraftBlock.java: -------------------------------------------------------------------------------- 1 | package se.llbit.chunky.block; 2 | 3 | import se.llbit.chunky.resources.Texture; 4 | import se.llbit.chunky.world.Material; 5 | 6 | /** 7 | * A simple opaque block with a single texture. 8 | */ 9 | public class MinecraftBlock extends Block { 10 | public static final Material STONE = new MinecraftBlock("stone", Texture.stone); 11 | 12 | public MinecraftBlock(String name, Texture texture) { 13 | super("minecraft:" + name, texture); 14 | opaque = true; 15 | solid = true; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/block/MinecraftBlockTranslucent.java: -------------------------------------------------------------------------------- 1 | package se.llbit.chunky.block; 2 | 3 | import se.llbit.chunky.resources.Texture; 4 | 5 | /** 6 | * Non-opaque block. 7 | */ 8 | public class MinecraftBlockTranslucent extends MinecraftBlock { 9 | public MinecraftBlockTranslucent(String name, Texture texture) { 10 | super(name, texture); 11 | opaque = false; 12 | solid = false; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/block/ModelBlock.java: -------------------------------------------------------------------------------- 1 | package se.llbit.chunky.block; 2 | 3 | import se.llbit.chunky.model.BlockModel; 4 | import se.llbit.chunky.plugin.PluginApi; 5 | import se.llbit.chunky.renderer.scene.Scene; 6 | import se.llbit.math.Ray; 7 | 8 | @PluginApi 9 | public interface ModelBlock { 10 | 11 | @PluginApi 12 | BlockModel getModel(); 13 | 14 | default boolean intersect(Ray ray, Scene scene) { 15 | return getModel().intersect(ray, scene); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/block/SolidNonOpaqueBlock.java: -------------------------------------------------------------------------------- 1 | package se.llbit.chunky.block; 2 | 3 | import se.llbit.chunky.resources.Texture; 4 | 5 | public class SolidNonOpaqueBlock extends Block { 6 | 7 | public SolidNonOpaqueBlock(String name, Texture texture) { 8 | super(name, texture); 9 | solid = true; 10 | opaque = false; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/block/TexturedBlock.java: -------------------------------------------------------------------------------- 1 | package se.llbit.chunky.block; 2 | 3 | import se.llbit.chunky.model.TexturedBlockModel; 4 | import se.llbit.chunky.resources.Texture; 5 | 6 | public class TexturedBlock extends AbstractModelBlock { 7 | 8 | public TexturedBlock(String name, Texture side, Texture topBottom) { 9 | this(name, side, side, side, side, topBottom, topBottom); 10 | } 11 | 12 | public TexturedBlock(String name, Texture side, Texture top, Texture bottom) { 13 | this(name, side, side, side, side, top, bottom); 14 | } 15 | 16 | public TexturedBlock(String name, 17 | Texture north, Texture south, Texture east, Texture west, 18 | Texture top, Texture bottom) { 19 | super(name, north); 20 | this.model = new TexturedBlockModel(north, east, south, west, top, bottom); 21 | opaque = true; 22 | solid = true; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/block/TopBottomOrientedTexturedBlock.java: -------------------------------------------------------------------------------- 1 | package se.llbit.chunky.block; 2 | 3 | import se.llbit.chunky.model.TopBottomOrientedTexturedBlockModel; 4 | import se.llbit.chunky.resources.Texture; 5 | 6 | /** 7 | * A textured block that can have one of four orientations but have a fixed top and bottom that rotates, too. 8 | * E.g. furnaces, pumpkins, looms. 9 | * If the top and bottom should NOT rotate with the rest of the block, use FixedTopBottomRotatableTexturedBlock. 10 | */ 11 | public class TopBottomOrientedTexturedBlock extends AbstractModelBlock { 12 | public TopBottomOrientedTexturedBlock(String name, String facing, Texture front, Texture side, Texture top) { 13 | this(name, facing, front, side, side, side, top, top); 14 | } 15 | 16 | public TopBottomOrientedTexturedBlock(String name, String facing, Texture front, Texture side, Texture top, Texture bottom) { 17 | this(name, facing, front, side, side, side, top, bottom); 18 | } 19 | 20 | public TopBottomOrientedTexturedBlock(String name, String facing, Texture front, Texture south, Texture east, Texture west, Texture top, Texture bottom) { 21 | super(name, front); 22 | this.model = new TopBottomOrientedTexturedBlockModel(facing, front, south, east, west, top, bottom); 23 | solid = true; 24 | opaque = true; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/block/UntintedLeaves.java: -------------------------------------------------------------------------------- 1 | package se.llbit.chunky.block; 2 | 3 | import se.llbit.chunky.resources.Texture; 4 | 5 | public class UntintedLeaves extends MinecraftBlockTranslucent { 6 | public UntintedLeaves(String name, Texture texture) { 7 | super(name, texture); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/block/legacy/blocks/LegacyMelonStem.java: -------------------------------------------------------------------------------- 1 | package se.llbit.chunky.block.legacy.blocks; 2 | 3 | import se.llbit.chunky.block.BlockFace; 4 | import se.llbit.chunky.block.FinalizationState; 5 | import se.llbit.chunky.block.legacy.LegacyBlocks; 6 | import se.llbit.chunky.block.legacy.UnfinalizedLegacyBlock; 7 | import se.llbit.nbt.CompoundTag; 8 | 9 | public class LegacyMelonStem extends UnfinalizedLegacyBlock { 10 | 11 | private static final BlockFace[] sides = new BlockFace[]{ 12 | BlockFace.WEST, BlockFace.EAST, BlockFace.NORTH, BlockFace.SOUTH 13 | }; 14 | 15 | public LegacyMelonStem(String name, CompoundTag tag) { 16 | super(name, tag); 17 | } 18 | 19 | @Override 20 | public void finalizeBlock(FinalizationState state) { 21 | // melon stem points to adjacent melon 22 | for (BlockFace side : sides) { 23 | if (state.getMaterial(side).name.equals("minecraft:melon")) { 24 | state.replaceCurrentBlock( 25 | LegacyBlocks.stringTag( 26 | LegacyBlocks.createTag("attached_melon_stem"), "facing", side.getName() 27 | )); 28 | return; 29 | } 30 | } 31 | 32 | // otherwise just unwrap the block 33 | state.replaceCurrentBlock(tag); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/block/legacy/blocks/LegacyPumpkinStem.java: -------------------------------------------------------------------------------- 1 | package se.llbit.chunky.block.legacy.blocks; 2 | 3 | import se.llbit.chunky.block.BlockFace; 4 | import se.llbit.chunky.block.FinalizationState; 5 | import se.llbit.chunky.block.legacy.LegacyBlocks; 6 | import se.llbit.chunky.block.legacy.UnfinalizedLegacyBlock; 7 | import se.llbit.nbt.CompoundTag; 8 | 9 | public class LegacyPumpkinStem extends UnfinalizedLegacyBlock { 10 | 11 | private static final BlockFace[] sides = new BlockFace[]{ 12 | BlockFace.WEST, BlockFace.EAST, BlockFace.NORTH, BlockFace.SOUTH 13 | }; 14 | 15 | public LegacyPumpkinStem(String name, CompoundTag tag) { 16 | super(name, tag); 17 | } 18 | 19 | @Override 20 | public void finalizeBlock(FinalizationState state) { 21 | // pumpkin stem points to adjacent pumpkin or carved pumpkin (but not jack-o-lantern) 22 | for (BlockFace side : sides) { 23 | if (state.getMaterial(side).name.endsWith("pumpkin")) { 24 | state.replaceCurrentBlock( 25 | LegacyBlocks.stringTag( 26 | LegacyBlocks.createTag("attached_pumpkin_stem"), "facing", side.getName() 27 | )); 28 | return; 29 | } 30 | } 31 | 32 | // otherwise just unwrap the block 33 | state.replaceCurrentBlock(tag); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/block/legacy/blocks/LegacyVine.java: -------------------------------------------------------------------------------- 1 | package se.llbit.chunky.block.legacy.blocks; 2 | 3 | import se.llbit.chunky.block.FinalizationState; 4 | import se.llbit.chunky.block.legacy.LegacyBlocks; 5 | import se.llbit.chunky.block.legacy.UnfinalizedLegacyBlock; 6 | import se.llbit.chunky.world.Material; 7 | import se.llbit.nbt.CompoundTag; 8 | 9 | public class LegacyVine extends UnfinalizedLegacyBlock { 10 | 11 | public LegacyVine(String name, CompoundTag tag) { 12 | super(name, tag); 13 | } 14 | 15 | @Override 16 | public void finalizeBlock(FinalizationState state) { 17 | // vines have an "up" part if the block above is solid 18 | if (state.getY() < state.getYMax() - 1) { 19 | Material above = state.getMaterial(0, 1, 0); 20 | if (above.solid) { 21 | state.replaceCurrentBlock( 22 | LegacyBlocks.vineTag(LegacyBlocks.createTag("vine"), data, true)); 23 | return; 24 | } 25 | } 26 | 27 | // otherwise just unwrap the block 28 | state.replaceCurrentBlock(tag); 29 | } 30 | 31 | @Override 32 | public boolean isBiomeDependant() { 33 | return true; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/block/minecraft/Air.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 Chunky contributors 3 | * 4 | * This file is part of Chunky. 5 | * 6 | * Chunky is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Chunky is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * You should have received a copy of the GNU General Public License 16 | * along with Chunky. If not, see . 17 | */ 18 | 19 | package se.llbit.chunky.block.minecraft; 20 | 21 | import se.llbit.chunky.block.MinecraftBlock; 22 | import se.llbit.chunky.resources.Texture; 23 | 24 | public class Air extends MinecraftBlock { 25 | public static final Air INSTANCE = new Air(); 26 | 27 | private Air() { 28 | super("air", Texture.air); 29 | solid = false; 30 | opaque = false; 31 | invisible = true; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/block/minecraft/AmethystCluster.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 Chunky contributors 3 | * 4 | * This file is part of Chunky. 5 | * 6 | * Chunky is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Chunky is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * You should have received a copy of the GNU General Public License 16 | * along with Chunky. If not, see . 17 | */ 18 | 19 | package se.llbit.chunky.block.minecraft; 20 | 21 | import se.llbit.chunky.resources.Texture; 22 | 23 | public class AmethystCluster extends SpriteBlock { 24 | 25 | private final boolean lit; 26 | 27 | public AmethystCluster(String name, Texture texture, String facing, boolean lit) { 28 | super(name, texture, facing); 29 | this.lit = lit; 30 | } 31 | 32 | public boolean isLit() { 33 | return lit; 34 | } 35 | 36 | @Override 37 | public String description() { 38 | return "facing=" + facing + ", lit=" + lit; 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/block/minecraft/Azalea.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 Chunky contributors 3 | * 4 | * This file is part of Chunky. 5 | * 6 | * Chunky is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Chunky is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * You should have received a copy of the GNU General Public License 16 | * along with Chunky. If not, see . 17 | */ 18 | 19 | package se.llbit.chunky.block.minecraft; 20 | 21 | import se.llbit.chunky.block.AbstractModelBlock; 22 | import se.llbit.chunky.model.minecraft.AzaleaModel; 23 | import se.llbit.chunky.resources.Texture; 24 | 25 | public class Azalea extends AbstractModelBlock { 26 | 27 | public Azalea(String name, Texture top, Texture side) { 28 | super(name, top); 29 | solid = false; 30 | model = new AzaleaModel(top, side); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/block/minecraft/Cactus.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 Chunky contributors 3 | * 4 | * This file is part of Chunky. 5 | * 6 | * Chunky is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Chunky is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * You should have received a copy of the GNU General Public License 16 | * along with Chunky. If not, see . 17 | */ 18 | 19 | package se.llbit.chunky.block.minecraft; 20 | 21 | import se.llbit.chunky.block.AbstractModelBlock; 22 | import se.llbit.chunky.model.minecraft.CactusModel; 23 | import se.llbit.chunky.resources.Texture; 24 | 25 | public class Cactus extends AbstractModelBlock { 26 | 27 | public Cactus() { 28 | super("cactus", Texture.cactusSide); 29 | localIntersect = true; 30 | opaque = false; 31 | this.model = new CactusModel(); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/block/minecraft/Cake.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 Chunky contributors 3 | * 4 | * This file is part of Chunky. 5 | * 6 | * Chunky is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Chunky is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * You should have received a copy of the GNU General Public License 16 | * along with Chunky. If not, see . 17 | */ 18 | 19 | package se.llbit.chunky.block.minecraft; 20 | 21 | import se.llbit.chunky.block.AbstractModelBlock; 22 | import se.llbit.chunky.model.minecraft.CakeModel; 23 | import se.llbit.chunky.resources.Texture; 24 | 25 | public class Cake extends AbstractModelBlock { 26 | 27 | private final int bites; 28 | 29 | public Cake(int bites) { 30 | super("cake", Texture.cakeTop); 31 | this.model = new CakeModel(bites); 32 | this.bites = bites; 33 | } 34 | 35 | @Override 36 | public String description() { 37 | return "bites=" + bites; 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/block/minecraft/Carpet.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 Chunky contributors 3 | * 4 | * This file is part of Chunky. 5 | * 6 | * Chunky is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Chunky is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * You should have received a copy of the GNU General Public License 16 | * along with Chunky. If not, see . 17 | */ 18 | 19 | package se.llbit.chunky.block.minecraft; 20 | 21 | import se.llbit.chunky.block.AbstractModelBlock; 22 | import se.llbit.chunky.model.minecraft.CarpetModel; 23 | import se.llbit.chunky.resources.Texture; 24 | 25 | public class Carpet extends AbstractModelBlock { 26 | 27 | public Carpet(String name, Texture texture) { 28 | super(name, texture); 29 | solid = false; 30 | this.model = new CarpetModel(texture); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/block/minecraft/Conduit.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 Chunky contributors 3 | * 4 | * This file is part of Chunky. 5 | * 6 | * Chunky is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Chunky is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * You should have received a copy of the GNU General Public License 16 | * along with Chunky. If not, see . 17 | */ 18 | 19 | package se.llbit.chunky.block.minecraft; 20 | 21 | import se.llbit.chunky.block.AbstractModelBlock; 22 | import se.llbit.chunky.model.minecraft.ConduitModel; 23 | import se.llbit.chunky.resources.Texture; 24 | 25 | public class Conduit extends AbstractModelBlock { 26 | 27 | public Conduit() { 28 | super("conduit", Texture.conduit); 29 | model = new ConduitModel(); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/block/minecraft/CreakingHeart.java: -------------------------------------------------------------------------------- 1 | package se.llbit.chunky.block.minecraft; 2 | 3 | import se.llbit.chunky.block.AbstractModelBlock; 4 | import se.llbit.chunky.model.minecraft.LogModel; 5 | import se.llbit.chunky.resources.Texture; 6 | 7 | public class CreakingHeart extends AbstractModelBlock { 8 | private final String description; 9 | 10 | public CreakingHeart(String name, String axis, boolean active) { 11 | super(name, Texture.creakingHeartTop); 12 | this.model = new LogModel( 13 | axis, 14 | active ? Texture.creakingHeartActive : Texture.creakingHeart, 15 | active ? Texture.creakingHeartTopActive : Texture.creakingHeartTop 16 | ); 17 | this.description = String.format("active=%s, axis=%s", active, axis); 18 | } 19 | 20 | @Override 21 | public String description() { 22 | return description; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/block/minecraft/DragonEgg.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 Chunky contributors 3 | * 4 | * This file is part of Chunky. 5 | * 6 | * Chunky is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Chunky is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * You should have received a copy of the GNU General Public License 16 | * along with Chunky. If not, see . 17 | */ 18 | 19 | package se.llbit.chunky.block.minecraft; 20 | 21 | import se.llbit.chunky.block.AbstractModelBlock; 22 | import se.llbit.chunky.model.minecraft.DragonEggModel; 23 | import se.llbit.chunky.resources.Texture; 24 | 25 | public class DragonEgg extends AbstractModelBlock { 26 | 27 | public DragonEgg() { 28 | super("dragon_egg", Texture.dragonEgg); 29 | model = new DragonEggModel(); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/block/minecraft/Dropper.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 Chunky contributors 3 | * 4 | * This file is part of Chunky. 5 | * 6 | * Chunky is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Chunky is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * You should have received a copy of the GNU General Public License 16 | * along with Chunky. If not, see . 17 | */ 18 | 19 | package se.llbit.chunky.block.minecraft; 20 | 21 | import se.llbit.chunky.resources.Texture; 22 | 23 | public class Dropper extends Dispenser { 24 | 25 | public Dropper(String facing) { 26 | super("dropper", facing, Texture.dropperFront, Texture.dropperFrontVertical, 27 | Texture.furnaceSide, Texture.furnaceTop); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/block/minecraft/EndPortal.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 Chunky contributors 3 | * 4 | * This file is part of Chunky. 5 | * 6 | * Chunky is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Chunky is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * You should have received a copy of the GNU General Public License 16 | * along with Chunky. If not, see . 17 | */ 18 | 19 | package se.llbit.chunky.block.minecraft; 20 | 21 | import se.llbit.chunky.block.AbstractModelBlock; 22 | import se.llbit.chunky.model.minecraft.EndPortalModel; 23 | import se.llbit.chunky.resources.Texture; 24 | 25 | public class EndPortal extends AbstractModelBlock { 26 | 27 | public EndPortal() { 28 | super("end_portal", Texture.endPortal); 29 | model = new EndPortalModel(); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/block/minecraft/Fern.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 Chunky contributors 3 | * 4 | * This file is part of Chunky. 5 | * 6 | * Chunky is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Chunky is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * You should have received a copy of the GNU General Public License 16 | * along with Chunky. If not, see . 17 | */ 18 | 19 | package se.llbit.chunky.block.minecraft; 20 | 21 | import se.llbit.chunky.block.AbstractModelBlock; 22 | import se.llbit.chunky.model.GrassTintedSpriteModel; 23 | import se.llbit.chunky.resources.Texture; 24 | 25 | public class Fern extends AbstractModelBlock { 26 | 27 | public Fern() { 28 | super("fern", Texture.fern); 29 | solid = false; 30 | model = new GrassTintedSpriteModel(Texture.fern); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/block/minecraft/Fire.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 Chunky contributors 3 | * 4 | * This file is part of Chunky. 5 | * 6 | * Chunky is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Chunky is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * You should have received a copy of the GNU General Public License 16 | * along with Chunky. If not, see . 17 | */ 18 | 19 | package se.llbit.chunky.block.minecraft; 20 | 21 | import se.llbit.chunky.block.AbstractModelBlock; 22 | import se.llbit.chunky.model.minecraft.FireModel; 23 | import se.llbit.chunky.resources.Texture; 24 | 25 | public class Fire extends AbstractModelBlock { 26 | 27 | public Fire() { 28 | super("fire", Texture.fire); 29 | model = new FireModel(Texture.fireLayer0, Texture.fireLayer1); 30 | solid = false; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/block/minecraft/FlowerPot.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 Chunky contributors 3 | * 4 | * This file is part of Chunky. 5 | * 6 | * Chunky is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Chunky is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * You should have received a copy of the GNU General Public License 16 | * along with Chunky. If not, see . 17 | */ 18 | 19 | package se.llbit.chunky.block.minecraft; 20 | 21 | import se.llbit.chunky.block.AbstractModelBlock; 22 | import se.llbit.chunky.model.minecraft.FlowerPotModel; 23 | import se.llbit.chunky.resources.Texture; 24 | 25 | public class FlowerPot extends AbstractModelBlock { 26 | public FlowerPot(String name, FlowerPotModel.Kind kind) { 27 | super(name, Texture.flowerPot); 28 | this.model = FlowerPotModel.forKind(kind); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/block/minecraft/Frogspawn.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 Chunky contributors 3 | * 4 | * This file is part of Chunky. 5 | * 6 | * Chunky is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Chunky is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * You should have received a copy of the GNU General Public License 16 | * along with Chunky. If not, see . 17 | */ 18 | 19 | package se.llbit.chunky.block.minecraft; 20 | 21 | import se.llbit.chunky.block.AbstractModelBlock; 22 | import se.llbit.chunky.model.minecraft.FrogspawnModel; 23 | import se.llbit.chunky.resources.Texture; 24 | 25 | public class Frogspawn extends AbstractModelBlock { 26 | public Frogspawn() { 27 | super("frogspawn", Texture.frogspawn); 28 | this.model = new FrogspawnModel(); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/block/minecraft/Glass.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 Chunky contributors 3 | * 4 | * This file is part of Chunky. 5 | * 6 | * Chunky is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Chunky is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * You should have received a copy of the GNU General Public License 16 | * along with Chunky. If not, see . 17 | */ 18 | 19 | package se.llbit.chunky.block.minecraft; 20 | 21 | import se.llbit.chunky.block.MinecraftBlockTranslucent; 22 | import se.llbit.chunky.resources.Texture; 23 | import se.llbit.chunky.world.Material; 24 | 25 | public class Glass extends MinecraftBlockTranslucent { 26 | public Glass(String name, Texture texture) { 27 | super(name, texture); 28 | ior = 1.52f; 29 | } 30 | 31 | @Override 32 | public boolean isSameMaterial(Material other) { 33 | return other instanceof Glass && other.name.equals(this.name); // same name means same color 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/block/minecraft/Grass.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 Chunky contributors 3 | * 4 | * This file is part of Chunky. 5 | * 6 | * Chunky is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Chunky is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * You should have received a copy of the GNU General Public License 16 | * along with Chunky. If not, see . 17 | */ 18 | 19 | package se.llbit.chunky.block.minecraft; 20 | 21 | import se.llbit.chunky.block.AbstractModelBlock; 22 | import se.llbit.chunky.model.GrassTintedSpriteModel; 23 | import se.llbit.chunky.resources.Texture; 24 | 25 | public class Grass extends AbstractModelBlock { 26 | 27 | public Grass() { 28 | super("short_grass", Texture.tallGrass); 29 | solid = false; 30 | model = new GrassTintedSpriteModel(texture); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/block/minecraft/GrassBlock.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 Chunky contributors 3 | * 4 | * This file is part of Chunky. 5 | * 6 | * Chunky is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Chunky is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * You should have received a copy of the GNU General Public License 16 | * along with Chunky. If not, see . 17 | */ 18 | 19 | package se.llbit.chunky.block.minecraft; 20 | 21 | import se.llbit.chunky.block.AbstractModelBlock; 22 | import se.llbit.chunky.model.minecraft.GrassBlockModel; 23 | import se.llbit.chunky.resources.Texture; 24 | 25 | public class GrassBlock extends AbstractModelBlock { 26 | 27 | public GrassBlock() { 28 | super("grass_block", Texture.grassTop); 29 | model = new GrassBlockModel(); 30 | opaque = true; 31 | solid = true; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/block/minecraft/GrassPath.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 Chunky contributors 3 | * 4 | * This file is part of Chunky. 5 | * 6 | * Chunky is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Chunky is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * You should have received a copy of the GNU General Public License 16 | * along with Chunky. If not, see . 17 | */ 18 | 19 | package se.llbit.chunky.block.minecraft; 20 | 21 | import se.llbit.chunky.block.AbstractModelBlock; 22 | import se.llbit.chunky.model.minecraft.GrassPathModel; 23 | import se.llbit.chunky.resources.Texture; 24 | 25 | public class GrassPath extends AbstractModelBlock { 26 | 27 | public GrassPath() { 28 | super("grass_path", Texture.grassPathTop); 29 | model = new GrassPathModel(); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/block/minecraft/HeavyCore.java: -------------------------------------------------------------------------------- 1 | package se.llbit.chunky.block.minecraft; 2 | 3 | import se.llbit.chunky.block.AbstractModelBlock; 4 | import se.llbit.chunky.model.minecraft.HeavyCoreModel; 5 | import se.llbit.chunky.resources.Texture; 6 | 7 | public class HeavyCore extends AbstractModelBlock { 8 | public HeavyCore() { 9 | super("heavy_core", Texture.heavyCore); 10 | this.model = new HeavyCoreModel(); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/block/minecraft/LargeFern.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 Chunky contributors 3 | * 4 | * This file is part of Chunky. 5 | * 6 | * Chunky is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Chunky is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * You should have received a copy of the GNU General Public License 16 | * along with Chunky. If not, see . 17 | */ 18 | 19 | package se.llbit.chunky.block.minecraft; 20 | 21 | import se.llbit.chunky.block.AbstractModelBlock; 22 | import se.llbit.chunky.model.GrassTintedSpriteModel; 23 | import se.llbit.chunky.resources.Texture; 24 | 25 | public class LargeFern extends AbstractModelBlock { 26 | 27 | public LargeFern(String half) { 28 | super("large_fern", 29 | half.equals("upper") 30 | ? Texture.largeFernTop 31 | : Texture.largeFernBottom); 32 | solid = false; 33 | model = new GrassTintedSpriteModel(texture); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/block/minecraft/MangroveRoots.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 Chunky contributors 3 | * 4 | * This file is part of Chunky. 5 | * 6 | * Chunky is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Chunky is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * You should have received a copy of the GNU General Public License 16 | * along with Chunky. If not, see . 17 | */ 18 | 19 | package se.llbit.chunky.block.minecraft; 20 | 21 | import se.llbit.chunky.block.AbstractModelBlock; 22 | import se.llbit.chunky.model.minecraft.MangroveRootsModel; 23 | import se.llbit.chunky.resources.Texture; 24 | 25 | public class MangroveRoots extends AbstractModelBlock { 26 | public MangroveRoots() { 27 | super("mangrove_roots", Texture.mangroveRootsTop); 28 | this.model = new MangroveRootsModel(); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/block/minecraft/OpenEyeblossom.java: -------------------------------------------------------------------------------- 1 | package se.llbit.chunky.block.minecraft; 2 | 3 | import se.llbit.chunky.block.AbstractModelBlock; 4 | import se.llbit.chunky.model.minecraft.OpenEyeblossomModel; 5 | import se.llbit.chunky.resources.Texture; 6 | import se.llbit.chunky.world.Material; 7 | import se.llbit.chunky.world.material.TextureMaterial; 8 | 9 | public class OpenEyeblossom extends AbstractModelBlock { 10 | public static final Material emissiveMaterial = new TextureMaterial(Texture.openEyeblossomEmissive); 11 | 12 | public OpenEyeblossom() { 13 | super("open_eyeblossom", Texture.openEyeblossom); 14 | model = new OpenEyeblossomModel(); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/block/minecraft/PaleMossCarpet.java: -------------------------------------------------------------------------------- 1 | package se.llbit.chunky.block.minecraft; 2 | 3 | import se.llbit.chunky.block.AbstractModelBlock; 4 | import se.llbit.chunky.model.minecraft.PaleMossCarpetModel; 5 | import se.llbit.chunky.resources.Texture; 6 | 7 | public class PaleMossCarpet extends AbstractModelBlock { 8 | private final String description; 9 | 10 | public PaleMossCarpet(String name, boolean bottom, String north, String east, String south, String west) { 11 | super(name, Texture.paleMossCarpet); 12 | this.model = new PaleMossCarpetModel(bottom, north, east, south, west); 13 | this.description = String.format("bottom=%s, north=%s, east=%s, south=%s, west=%s", bottom, north, east, south, west); 14 | } 15 | 16 | @Override 17 | public String description() { 18 | return description; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/block/minecraft/PowderSnowCauldron.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 Chunky contributors 3 | * 4 | * This file is part of Chunky. 5 | * 6 | * Chunky is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Chunky is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * You should have received a copy of the GNU General Public License 16 | * along with Chunky. If not, see . 17 | */ 18 | 19 | package se.llbit.chunky.block.minecraft; 20 | 21 | import se.llbit.chunky.model.minecraft.CauldronModel; 22 | import se.llbit.chunky.renderer.scene.Scene; 23 | import se.llbit.chunky.resources.Texture; 24 | import se.llbit.math.Ray; 25 | 26 | public class PowderSnowCauldron extends Cauldron { 27 | 28 | public PowderSnowCauldron(int level) { 29 | super("powder_snow_cauldron", level); 30 | } 31 | 32 | @Override 33 | public boolean intersect(Ray ray, Scene scene) { 34 | return CauldronModel.intersect(ray, getLevel(), Texture.powderSnow); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/block/minecraft/PressurePlate.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 Chunky contributors 3 | * 4 | * This file is part of Chunky. 5 | * 6 | * Chunky is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Chunky is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * You should have received a copy of the GNU General Public License 16 | * along with Chunky. If not, see . 17 | */ 18 | 19 | package se.llbit.chunky.block.minecraft; 20 | 21 | import se.llbit.chunky.block.AbstractModelBlock; 22 | import se.llbit.chunky.model.minecraft.PressurePlateModel; 23 | import se.llbit.chunky.resources.Texture; 24 | 25 | public class PressurePlate extends AbstractModelBlock { 26 | 27 | public PressurePlate(String name, Texture texture) { 28 | super(name, texture); 29 | model = new PressurePlateModel(texture); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/block/minecraft/RedstoneLamp.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 Chunky contributors 3 | * 4 | * This file is part of Chunky. 5 | * 6 | * Chunky is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Chunky is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * You should have received a copy of the GNU General Public License 16 | * along with Chunky. If not, see . 17 | */ 18 | 19 | package se.llbit.chunky.block.minecraft; 20 | 21 | import se.llbit.chunky.block.MinecraftBlock; 22 | import se.llbit.chunky.resources.Texture; 23 | 24 | public class RedstoneLamp extends MinecraftBlock { 25 | private final boolean lit; 26 | 27 | public RedstoneLamp(boolean lit) { 28 | super("redstone_lamp", lit ? Texture.redstoneLampOn : Texture.redstoneLampOff); 29 | this.lit = lit; 30 | } 31 | 32 | public boolean isLit() { 33 | return lit; 34 | } 35 | 36 | @Override public String description() { 37 | return "lit=" + lit; 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/block/minecraft/ResinClump.java: -------------------------------------------------------------------------------- 1 | package se.llbit.chunky.block.minecraft; 2 | 3 | import se.llbit.chunky.block.AbstractModelBlock; 4 | import se.llbit.chunky.model.minecraft.ResinClumpModel; 5 | import se.llbit.chunky.resources.Texture; 6 | 7 | public class ResinClump extends AbstractModelBlock { 8 | private final String description; 9 | 10 | public ResinClump(boolean north, boolean south, boolean east, boolean west, boolean up, 11 | boolean down) { 12 | super("resin_clump", Texture.resinClump); 13 | this.description = String.format("north=%s, south=%s, east=%s, west=%s, up=%s, down=%s", 14 | north, south, east, west, up, down); 15 | this.model = new ResinClumpModel(north, south, east, west, up, down); 16 | } 17 | 18 | @Override 19 | public String description() { 20 | return description; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/block/minecraft/SoulFire.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 Chunky contributors 3 | * 4 | * This file is part of Chunky. 5 | * 6 | * Chunky is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Chunky is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * You should have received a copy of the GNU General Public License 16 | * along with Chunky. If not, see . 17 | */ 18 | 19 | package se.llbit.chunky.block.minecraft; 20 | 21 | import se.llbit.chunky.block.AbstractModelBlock; 22 | import se.llbit.chunky.model.minecraft.FireModel; 23 | import se.llbit.chunky.resources.Texture; 24 | 25 | public class SoulFire extends AbstractModelBlock { 26 | 27 | public SoulFire() { 28 | super("soul_fire", Texture.soulFire); 29 | solid = false; 30 | model = new FireModel(Texture.soulFireLayer0, Texture.soulFireLayer1); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/block/minecraft/SugarCane.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 Chunky contributors 3 | * 4 | * This file is part of Chunky. 5 | * 6 | * Chunky is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Chunky is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * You should have received a copy of the GNU General Public License 16 | * along with Chunky. If not, see . 17 | */ 18 | 19 | package se.llbit.chunky.block.minecraft; 20 | 21 | import se.llbit.chunky.block.AbstractModelBlock; 22 | import se.llbit.chunky.model.GrassTintedSpriteModel; 23 | import se.llbit.chunky.resources.Texture; 24 | 25 | public class SugarCane extends AbstractModelBlock { 26 | public SugarCane() { 27 | super("sugar_cane", Texture.sugarCane); 28 | solid = false; 29 | model = new GrassTintedSpriteModel(Texture.sugarCane); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/block/minecraft/TallGrass.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 Chunky contributors 3 | * 4 | * This file is part of Chunky. 5 | * 6 | * Chunky is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Chunky is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * You should have received a copy of the GNU General Public License 16 | * along with Chunky. If not, see . 17 | */ 18 | 19 | package se.llbit.chunky.block.minecraft; 20 | 21 | import se.llbit.chunky.block.AbstractModelBlock; 22 | import se.llbit.chunky.model.GrassTintedSpriteModel; 23 | import se.llbit.chunky.resources.Texture; 24 | 25 | public class TallGrass extends AbstractModelBlock { 26 | 27 | public TallGrass(String half) { 28 | super("tall_grass", 29 | half.equals("upper") 30 | ? Texture.doubleTallGrassTop 31 | : Texture.doubleTallGrassBottom); 32 | solid = false; 33 | model = new GrassTintedSpriteModel(texture); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/block/minecraft/TintedGlass.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 Chunky contributors 3 | * 4 | * This file is part of Chunky. 5 | * 6 | * Chunky is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Chunky is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * You should have received a copy of the GNU General Public License 16 | * along with Chunky. If not, see . 17 | */ 18 | 19 | package se.llbit.chunky.block.minecraft; 20 | 21 | import se.llbit.chunky.block.MinecraftBlockTranslucent; 22 | import se.llbit.chunky.resources.Texture; 23 | 24 | public class TintedGlass extends MinecraftBlockTranslucent { 25 | 26 | public TintedGlass() { 27 | super("tinted_glass", Texture.tintedGlass); 28 | ior = 1.52f; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/block/minecraft/Torch.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 Chunky contributors 3 | * 4 | * This file is part of Chunky. 5 | * 6 | * Chunky is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Chunky is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * You should have received a copy of the GNU General Public License 16 | * along with Chunky. If not, see . 17 | */ 18 | 19 | package se.llbit.chunky.block.minecraft; 20 | 21 | import se.llbit.chunky.block.AbstractModelBlock; 22 | import se.llbit.chunky.model.minecraft.TorchModel; 23 | import se.llbit.chunky.resources.Texture; 24 | 25 | /** 26 | * A standing torch (on ground). 27 | */ 28 | public class Torch extends AbstractModelBlock { 29 | 30 | public Torch(String name, Texture texture) { 31 | super(name, texture); 32 | solid = false; 33 | model = new TorchModel(texture, "none"); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/block/minecraft/TorchflowerCrop.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2023 Chunky contributors 3 | * 4 | * This file is part of Chunky. 5 | * 6 | * Chunky is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Chunky is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * You should have received a copy of the GNU General Public License 16 | * along with Chunky. If not, see . 17 | */ 18 | 19 | package se.llbit.chunky.block.minecraft; 20 | 21 | import se.llbit.chunky.resources.Texture; 22 | 23 | public class TorchflowerCrop extends SpriteBlock { 24 | public TorchflowerCrop(int age) { 25 | super("torchflower_crop", getTextureByAge(age)); 26 | } 27 | 28 | protected static Texture getTextureByAge(int age) { 29 | switch (age) { 30 | case 1: 31 | return Texture.torchflowerCropStage1; 32 | case 0: 33 | default: 34 | return Texture.torchflowerCropStage0; 35 | } 36 | } 37 | } 38 | 39 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/block/minecraft/TrialSpawner.java: -------------------------------------------------------------------------------- 1 | package se.llbit.chunky.block.minecraft; 2 | 3 | import se.llbit.chunky.block.AbstractModelBlock; 4 | import se.llbit.chunky.model.minecraft.TrialSpawnerModel; 5 | 6 | public class TrialSpawner extends AbstractModelBlock { 7 | private final String description; 8 | 9 | public TrialSpawner(boolean ominous, String trialSpawnerState) { 10 | super("trial_spawner", TrialSpawnerModel.getTopTexture(ominous, trialSpawnerState)); 11 | this.description = "ominous=" + ominous + ", trial_spawner_state=" + trialSpawnerState; 12 | this.model = new TrialSpawnerModel(ominous, trialSpawnerState); 13 | } 14 | 15 | @Override 16 | public String description() { 17 | return description; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/block/minecraft/Vault.java: -------------------------------------------------------------------------------- 1 | package se.llbit.chunky.block.minecraft; 2 | 3 | import se.llbit.chunky.block.AbstractModelBlock; 4 | import se.llbit.chunky.model.minecraft.VaultModel; 5 | 6 | public class Vault extends AbstractModelBlock { 7 | private final String description; 8 | 9 | public Vault(String facing, boolean ominous, String vaultState) { 10 | super("vault", VaultModel.getTopTexture(ominous, vaultState)); 11 | this.description = "facing=" + facing + ", ominous=" + ominous + ", vault_state=" + vaultState; 12 | this.model = new VaultModel(facing, ominous, vaultState); 13 | } 14 | 15 | @Override 16 | public String description() { 17 | return description; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/chunk/ChunkLoadingException.java: -------------------------------------------------------------------------------- 1 | package se.llbit.chunky.chunk; 2 | 3 | public class ChunkLoadingException extends Exception { 4 | public ChunkLoadingException(String message) { 5 | super(message); 6 | } 7 | public ChunkLoadingException(String message, Throwable cause) { 8 | super(message, cause); 9 | } 10 | } -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/chunk/TagBlockBuilder.java: -------------------------------------------------------------------------------- 1 | package se.llbit.chunky.chunk; 2 | 3 | import se.llbit.chunky.block.Block; 4 | import se.llbit.nbt.Tag; 5 | 6 | /** Callback for constructing blocks from tag block specifications. */ 7 | public interface TagBlockBuilder { 8 | Block buildBlock(Tag tag); 9 | } 10 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/chunk/biome/BiomeData.java: -------------------------------------------------------------------------------- 1 | package se.llbit.chunky.chunk.biome; 2 | 3 | import se.llbit.chunky.world.Chunk; 4 | 5 | /** 6 | * Interface designed to allow for any biome data structure behind it 7 | * 8 | * Implementations expected to handle x/z values from 0-15 9 | * Implementations expected to gracefully handle ANY y values, though it does not need to support all values 10 | * 11 | * If a given y coordinate is outside of supported bounds, the implementation should return 0 12 | */ 13 | public interface BiomeData { 14 | int QUART = 4; 15 | int QUART_BITS = 0x7; 16 | 17 | int SECTION_DIAMETER_IN_QUARTS = Chunk.X_MAX / QUART; 18 | 19 | /** 20 | * All coordinates must be chunk local block coordinates. 21 | * x & z 0 - 15 22 | */ 23 | int getBiome(int chunkLocalX, int chunkLocalY, int chunkLocalZ); 24 | 25 | /** 26 | * All coordinates must be chunk local block coordinates. 27 | * x & z 0 - 15 28 | */ 29 | void setBiomeAt(int chunkLocalX, int chunkLocalY, int chunkLocalZ, int biome); 30 | 31 | /** 32 | * Reset the internal data to the initial state 33 | */ 34 | void clear(); 35 | } 36 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/chunk/biome/UnknownBiomeData.java: -------------------------------------------------------------------------------- 1 | package se.llbit.chunky.chunk.biome; 2 | 3 | import se.llbit.chunky.world.biome.BiomePalette; 4 | import se.llbit.chunky.world.biome.Biomes; 5 | 6 | public final class UnknownBiomeData implements BiomeData { 7 | /** 8 | * Singleton instance 9 | */ 10 | public static final BiomeData INSTANCE = new UnknownBiomeData(0); 11 | 12 | private final int unknownPaletteId; 13 | 14 | private UnknownBiomeData(int unknownPaletteId) { 15 | this.unknownPaletteId = unknownPaletteId; 16 | } 17 | 18 | public static BiomeData instanceFor(BiomePalette biomePalette) { 19 | if(biomePalette.size() == 0) { 20 | biomePalette.put(Biomes.unknown); 21 | return UnknownBiomeData.INSTANCE; 22 | } else { 23 | return new UnknownBiomeData(biomePalette.put(Biomes.unknown)); 24 | } 25 | } 26 | 27 | @Override 28 | public int getBiome(int chunkLocalX, int chunkLocalY, int chunkLocalZ) { 29 | return unknownPaletteId; 30 | } 31 | 32 | @Override 33 | public void setBiomeAt(int chunkLocalX, int chunkLocalY, int chunkLocalZ, int biome) { } 34 | 35 | @Override 36 | public void clear() { } 37 | } 38 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/entity/Armored.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2017 Jesper Öqvist 3 | * 4 | * This file is part of Chunky. 5 | * 6 | * Chunky is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Chunky is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * You should have received a copy of the GNU General Public License 16 | * along with Chunky. If not, see . 17 | */ 18 | package se.llbit.chunky.entity; 19 | 20 | import se.llbit.json.JsonObject; 21 | 22 | /** 23 | * API describing an entity that can wear armor. 24 | */ 25 | public interface Armored { 26 | JsonObject getArmor(); 27 | } 28 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/entity/Geared.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2017 Jesper Öqvist 3 | * 4 | * This file is part of Chunky. 5 | * 6 | * Chunky is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Chunky is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * You should have received a copy of the GNU General Public License 16 | * along with Chunky. If not, see . 17 | */ 18 | package se.llbit.chunky.entity; 19 | 20 | import se.llbit.json.JsonObject; 21 | 22 | /** 23 | * Interface for entities that can equip armor and hold items. 24 | */ 25 | public interface Geared { 26 | 27 | /** 28 | * @return an array of the names of gear slots for this entity. 29 | */ 30 | String[] gearSlots(); 31 | 32 | JsonObject getGear(); 33 | 34 | /** 35 | * Get the pose for one body part. 36 | */ 37 | default JsonObject getGear(String slot) { 38 | return getGear().get(slot).object(); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/model/BlockModel.java: -------------------------------------------------------------------------------- 1 | package se.llbit.chunky.model; 2 | 3 | import se.llbit.chunky.plugin.PluginApi; 4 | import se.llbit.chunky.renderer.scene.Scene; 5 | import se.llbit.math.Ray; 6 | import se.llbit.math.Vector3; 7 | 8 | import java.util.List; 9 | import java.util.Random; 10 | 11 | @PluginApi 12 | public interface BlockModel { 13 | 14 | boolean intersect(Ray ray, Scene scene); 15 | 16 | int faceCount(); 17 | 18 | void sample(int face, Vector3 loc, Random rand); 19 | 20 | double faceSurfaceArea(int face); 21 | 22 | boolean isBiomeDependant(); 23 | } 24 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/model/GrassTintedSpriteModel.java: -------------------------------------------------------------------------------- 1 | /* Copyright (c) 2012 Jesper Öqvist 2 | * 3 | * This file is part of Chunky. 4 | * 5 | * Chunky is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * Chunky is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * You should have received a copy of the GNU General Public License 15 | * along with Chunky. If not, see . 16 | */ 17 | package se.llbit.chunky.model; 18 | 19 | import se.llbit.chunky.model.minecraft.SpriteModel; 20 | import se.llbit.chunky.resources.Texture; 21 | 22 | public class GrassTintedSpriteModel extends SpriteModel { 23 | 24 | private static final Tint[] tinting = new Tint[]{ 25 | Tint.BIOME_GRASS, Tint.BIOME_GRASS, Tint.BIOME_GRASS, Tint.BIOME_GRASS 26 | }; 27 | 28 | public GrassTintedSpriteModel(Texture texture) { 29 | super(texture); 30 | } 31 | 32 | @Override 33 | public Tint[] getTints() { 34 | return tinting; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/plugin/ContextMenuTransformer.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2022 Chunky contributors 3 | * 4 | * This file is part of Chunky. 5 | * 6 | * Chunky is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Chunky is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * You should have received a copy of the GNU General Public License 16 | * along with Chunky. If not, see . 17 | */ 18 | 19 | package se.llbit.chunky.plugin; 20 | 21 | import javafx.scene.control.ContextMenu; 22 | 23 | import java.util.function.Consumer; 24 | 25 | @FunctionalInterface 26 | public interface ContextMenuTransformer extends Consumer { 27 | } 28 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/plugin/PluginApi.java: -------------------------------------------------------------------------------- 1 | /* Copyright (c) 2021 Chunky contributors 2 | * 3 | * This file is part of Chunky. 4 | * 5 | * Chunky is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * Chunky is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * You should have received a copy of the GNU General Public License 15 | * along with Chunky. If not, see . 16 | */ 17 | 18 | package se.llbit.chunky.plugin; 19 | 20 | /** Mark something that is only used by plugins. Check before removing/modifying anything marked with this. */ 21 | public @interface PluginApi { 22 | } 23 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/plugin/TabTransformer.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2017 Jesper Öqvist 3 | * 4 | * This file is part of Chunky. 5 | * 6 | * Chunky is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Chunky is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * You should have received a copy of the GNU General Public License 16 | * along with Chunky. If not, see . 17 | */ 18 | package se.llbit.chunky.plugin; 19 | 20 | import javafx.scene.control.Tab; 21 | 22 | import java.util.Collection; 23 | import java.util.function.Function; 24 | 25 | /** 26 | * Interface for plugins to transform the tabs of the main Chunky window. 27 | */ 28 | public interface TabTransformer extends Function, Collection> { 29 | } 30 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/plugin/loader/PluginLoader.java: -------------------------------------------------------------------------------- 1 | package se.llbit.chunky.plugin.loader; 2 | 3 | import se.llbit.chunky.Plugin; 4 | import se.llbit.chunky.plugin.PluginApi; 5 | import se.llbit.chunky.plugin.manifest.PluginManifest; 6 | 7 | import java.util.function.BiConsumer; 8 | 9 | @PluginApi 10 | public interface PluginLoader { 11 | /** 12 | * Load the plugin specified in the manifest 13 | * @param onLoad The consumer to call with the loaded plugin 14 | * @param pluginManifest The plugin to load. 15 | */ 16 | @PluginApi 17 | void load(BiConsumer onLoad, PluginManifest pluginManifest); 18 | } 19 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/plugin/manifest/PluginDependency.java: -------------------------------------------------------------------------------- 1 | package se.llbit.chunky.plugin.manifest; 2 | 3 | import org.apache.maven.artifact.versioning.VersionRange; 4 | 5 | /** 6 | * An unresolved plugin dependency within a plugin manifest. 7 | */ 8 | public class PluginDependency { 9 | public final String name; 10 | public final VersionRange version; 11 | 12 | public PluginDependency(String name, VersionRange version) { 13 | this.name = name; 14 | this.version = version; 15 | } 16 | 17 | @Override 18 | public String toString() { 19 | return name + ":" + version; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/renderer/ApertureShape.java: -------------------------------------------------------------------------------- 1 | /* Copyright (c) 2022 Chunky contributors 2 | * 3 | * This file is part of Chunky. 4 | * 5 | * Chunky is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * Chunky is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * You should have received a copy of the GNU General Public License 15 | * along with Chunky. If not, see . 16 | */ 17 | package se.llbit.chunky.renderer; 18 | 19 | public enum ApertureShape { 20 | CIRCLE, 21 | HEXAGON("hexagon-aperture.png"), 22 | PENTAGON("pentagon-aperture.png"), 23 | STAR("star-aperture.png"), 24 | GAUSSIAN("gaussian-aperture.png"), 25 | CUSTOM; 26 | 27 | private final String resourceName; 28 | 29 | ApertureShape() { 30 | resourceName = null; 31 | } 32 | 33 | ApertureShape(String resourceName) { 34 | this.resourceName = resourceName; 35 | } 36 | 37 | public String getResourceName() { 38 | return resourceName; 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/renderer/CameraViewListener.java: -------------------------------------------------------------------------------- 1 | /* Copyright (c) 2019 Jesper Öqvist 2 | * 3 | * This file is part of Chunky. 4 | * 5 | * Chunky is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * Chunky is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * You should have received a copy of the GNU General Public License 15 | * along with Chunky. If not, see . 16 | */ 17 | package se.llbit.chunky.renderer; 18 | 19 | /** Interface for listening to view changes for the current 3D camera. */ 20 | public interface CameraViewListener { 21 | /** Callback for when the camera view has changed. */ 22 | void cameraViewUpdated(); 23 | } 24 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/renderer/ChunkViewListener.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016 Jesper Öqvist 3 | * 4 | * This file is part of Chunky. 5 | * 6 | * Chunky is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Chunky is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * You should have received a copy of the GNU General Public License 16 | * along with Chunky. If not, see . 17 | */ 18 | package se.llbit.chunky.renderer; 19 | 20 | import se.llbit.chunky.world.ChunkView; 21 | 22 | /** 23 | * Interface for listening to 2D world map view changes. 24 | */ 25 | public interface ChunkViewListener { 26 | /** 27 | * Callback for when the view has changed (moved or scaled). 28 | */ 29 | void viewUpdated(ChunkView view); 30 | } 31 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/renderer/EmitterSamplingStrategy.java: -------------------------------------------------------------------------------- 1 | package se.llbit.chunky.renderer; 2 | 3 | import se.llbit.util.Registerable; 4 | 5 | public enum EmitterSamplingStrategy implements Registerable { 6 | NONE("None", "No emitter sampling."), 7 | ONE("One", "Sample a single face."), 8 | ONE_BLOCK("One Block", "Sample all the faces on a single emitter block."), 9 | ALL("All", "Sample all faces on all emitter blocks."); 10 | 11 | private final String name; 12 | private final String description; 13 | 14 | EmitterSamplingStrategy(String name, String description) { 15 | this.name = name; 16 | this.description = description; 17 | } 18 | 19 | @Override 20 | public String getName() { 21 | return name; 22 | } 23 | 24 | @Override 25 | public String getDescription() { 26 | return description; 27 | } 28 | 29 | @Override 30 | public String getId() { 31 | return this.name(); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/renderer/RayTracerFactory.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016 Jesper Öqvist 3 | * 4 | * This file is part of Chunky. 5 | * 6 | * Chunky is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Chunky is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * You should have received a copy of the GNU General Public License 16 | * along with Chunky. If not, see . 17 | */ 18 | package se.llbit.chunky.renderer; 19 | 20 | import se.llbit.chunky.renderer.scene.RayTracer; 21 | 22 | public interface RayTracerFactory { 23 | RayTracer newRayTracer(); 24 | } 25 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/renderer/Refreshable.java: -------------------------------------------------------------------------------- 1 | /* Copyright (c) 2012 Jesper Öqvist 2 | * 3 | * This file is part of Chunky. 4 | * 5 | * Chunky is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * Chunky is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * You should have received a copy of the GNU General Public License 15 | * along with Chunky. If not, see . 16 | */ 17 | package se.llbit.chunky.renderer; 18 | 19 | /** 20 | * Refreshable interface. 21 | * 22 | * @author Jesper Öqvist 23 | */ 24 | public interface Refreshable { 25 | /** 26 | * Refresh the refreshable object. 27 | */ 28 | void refresh(); 29 | } 30 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/renderer/RenderContextFactory.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016 Jesper Öqvist 3 | * 4 | * This file is part of Chunky. 5 | * 6 | * Chunky is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Chunky is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * You should have received a copy of the GNU General Public License 16 | * along with Chunky. If not, see . 17 | */ 18 | package se.llbit.chunky.renderer; 19 | 20 | import se.llbit.chunky.main.Chunky; 21 | import se.llbit.chunky.main.ChunkyOptions; 22 | 23 | public interface RenderContextFactory { 24 | RenderContext newRenderContext(Chunky chunky); 25 | } 26 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/renderer/RenderManagerFactory.java: -------------------------------------------------------------------------------- 1 | /* Copyright (c) 2016-2021 Jesper Öqvist 2 | * Copyright (c) 2016-2021 Chunky contributors 3 | * 4 | * This file is part of Chunky. 5 | * 6 | * Chunky is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Chunky is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * You should have received a copy of the GNU General Public License 16 | * along with Chunky. If not, see . 17 | */ 18 | package se.llbit.chunky.renderer; 19 | 20 | public interface RenderManagerFactory { 21 | RenderManager newRenderManager(RenderContext context, boolean headless); 22 | } 23 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/renderer/RenderMode.java: -------------------------------------------------------------------------------- 1 | /* Copyright (c) 2016 Jesper Öqvist 2 | * 3 | * This file is part of Chunky. 4 | * 5 | * Chunky is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * Chunky is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * You should have received a copy of the GNU General Public License 15 | * along with Chunky. If not, see . 16 | */ 17 | package se.llbit.chunky.renderer; 18 | 19 | public enum RenderMode { 20 | PREVIEW, 21 | RENDERING, 22 | PAUSED, 23 | } 24 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/renderer/RenderStatus.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016 Jesper Öqvist 3 | * 4 | * This file is part of Chunky. 5 | * 6 | * Chunky is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Chunky is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * You should have received a copy of the GNU General Public License 16 | * along with Chunky. If not, see . 17 | */ 18 | package se.llbit.chunky.renderer; 19 | 20 | public class RenderStatus { 21 | 22 | private final long renderTime; 23 | private final int spp; 24 | 25 | public RenderStatus(long time, int spp) { 26 | this.renderTime = time; 27 | this.spp = spp; 28 | } 29 | 30 | /** 31 | * @return the total render time in milliseconds. 32 | */ 33 | public long getRenderTime() { 34 | return renderTime; 35 | } 36 | 37 | /** 38 | * @return the current samples per pixel. 39 | */ 40 | public int getSpp() { 41 | return spp; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/renderer/Repaintable.java: -------------------------------------------------------------------------------- 1 | /* Copyright (c) 2012-2016 Jesper Öqvist 2 | * 3 | * This file is part of Chunky. 4 | * 5 | * Chunky is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * Chunky is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * You should have received a copy of the GNU General Public License 15 | * along with Chunky. If not, see . 16 | */ 17 | package se.llbit.chunky.renderer; 18 | 19 | /** 20 | * Interface for render canvas which displays a rendered image. 21 | * 22 | * @author Jesper Öqvist 23 | */ 24 | public interface Repaintable { 25 | /** 26 | * Trigger a repaint of the canvas. 27 | * 28 | * The canvas will try to repaint itself when feasible. 29 | */ 30 | void repaint(); 31 | } 32 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/renderer/SceneStatusListener.java: -------------------------------------------------------------------------------- 1 | /* Copyright (c) 2015 Jesper Öqvist 2 | * 3 | * This file is part of Chunky. 4 | * 5 | * Chunky is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * Chunky is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * You should have received a copy of the GNU General Public License 15 | * along with Chunky. If not, see . 16 | */ 17 | package se.llbit.chunky.renderer; 18 | 19 | public interface SceneStatusListener { 20 | void sceneStatus(String status); 21 | } 22 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/renderer/WorkerState.java: -------------------------------------------------------------------------------- 1 | /* Copyright (c) 2014 Jesper Öqvist 2 | * 3 | * This file is part of Chunky. 4 | * 5 | * Chunky is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * Chunky is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * You should have received a copy of the GNU General Public License 15 | * along with Chunky. If not, see . 16 | */ 17 | package se.llbit.chunky.renderer; 18 | 19 | import se.llbit.math.Ray; 20 | import se.llbit.math.Vector4; 21 | 22 | import java.util.Random; 23 | 24 | /** 25 | * State for a render worker. 26 | */ 27 | public class WorkerState { 28 | public Ray ray; 29 | public Vector4 attenuation = new Vector4(); 30 | public Random random; 31 | } 32 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/renderer/postprocessing/ACESFilmicFilter.java: -------------------------------------------------------------------------------- 1 | package se.llbit.chunky.renderer.postprocessing; 2 | 3 | import org.apache.commons.math3.util.FastMath; 4 | import se.llbit.chunky.renderer.scene.Scene; 5 | import se.llbit.math.QuickMath; 6 | 7 | /** 8 | * Implementation of ACES filmic tone mapping 9 | * @link https://knarkowicz.wordpress.com/2016/01/06/aces-filmic-tone-mapping-curve/ 10 | */ 11 | public class ACESFilmicFilter extends SimplePixelPostProcessingFilter { 12 | private static final float aces_a = 2.51f; 13 | private static final float aces_b = 0.03f; 14 | private static final float aces_c = 2.43f; 15 | private static final float aces_d = 0.59f; 16 | private static final float aces_e = 0.14f; 17 | 18 | @Override 19 | public void processPixel(double[] pixel) { 20 | for(int i = 0; i < 3; ++i) { 21 | pixel[i] = QuickMath.max(QuickMath.min((pixel[i] * (aces_a * pixel[i] + aces_b)) / (pixel[i] * (aces_c * pixel[i] + aces_d) + aces_e), 1), 0); 22 | pixel[i] = FastMath.pow(pixel[i], 1 / Scene.DEFAULT_GAMMA); 23 | } 24 | } 25 | 26 | @Override 27 | public String getName() { 28 | return "ACES filmic tone mapping"; 29 | } 30 | 31 | @Override 32 | public String getId() { 33 | return "TONEMAP2"; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/renderer/postprocessing/GammaCorrectionFilter.java: -------------------------------------------------------------------------------- 1 | package se.llbit.chunky.renderer.postprocessing; 2 | 3 | import org.apache.commons.math3.util.FastMath; 4 | import se.llbit.chunky.renderer.scene.Scene; 5 | 6 | public class GammaCorrectionFilter extends SimplePixelPostProcessingFilter { 7 | @Override 8 | public void processPixel(double[] pixel) { 9 | for(int i = 0; i < 3; ++i) { 10 | pixel[i] = FastMath.pow(pixel[i], 1 / Scene.DEFAULT_GAMMA); 11 | } 12 | } 13 | 14 | @Override 15 | public String getName() { 16 | return "Gamma correction"; 17 | } 18 | 19 | @Override 20 | public String getId() { 21 | return "GAMMA"; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/renderer/postprocessing/NoneFilter.java: -------------------------------------------------------------------------------- 1 | package se.llbit.chunky.renderer.postprocessing; 2 | 3 | public class NoneFilter extends SimplePixelPostProcessingFilter { 4 | @Override 5 | public void processPixel(double[] pixel) { 6 | } 7 | 8 | @Override 9 | public String getName() { 10 | return "None"; 11 | } 12 | 13 | @Override 14 | public String getId() { 15 | return "NONE"; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/renderer/postprocessing/PixelPostProcessingFilter.java: -------------------------------------------------------------------------------- 1 | package se.llbit.chunky.renderer.postprocessing; 2 | 3 | import se.llbit.chunky.plugin.PluginApi; 4 | 5 | /** 6 | * Post-processing filter that supports processing one pixel at a time. 7 | */ 8 | @PluginApi 9 | public interface PixelPostProcessingFilter extends PostProcessingFilter { 10 | /** 11 | * Post process a single pixel 12 | * @param width The width of the image 13 | * @param height The height of the image 14 | * @param input The input linear image as double array 15 | * @param x The x position of the pixel to process 16 | * @param y The y position of the pixel to process 17 | * @param exposure The exposure value 18 | * @param output The output buffer for the processed pixel 19 | */ 20 | void processPixel(int width, int height, double[] input, int x, int y, double exposure, double[] output); 21 | } 22 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/renderer/postprocessing/PreviewFilter.java: -------------------------------------------------------------------------------- 1 | package se.llbit.chunky.renderer.postprocessing; 2 | 3 | import org.apache.commons.math3.util.FastMath; 4 | 5 | public class PreviewFilter extends SimplePixelPostProcessingFilter { 6 | public static final PreviewFilter INSTANCE = new PreviewFilter(); 7 | 8 | @Override 9 | public void processPixel(double[] pixel) { 10 | for(int i = 0; i < 3; ++i) { 11 | pixel[i] = FastMath.sqrt(pixel[i]); 12 | } 13 | } 14 | 15 | @Override 16 | public String getName() { 17 | return null; 18 | } 19 | 20 | @Override 21 | public String getId() { 22 | return null; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/renderer/postprocessing/Tonemap1Filter.java: -------------------------------------------------------------------------------- 1 | package se.llbit.chunky.renderer.postprocessing; 2 | 3 | import se.llbit.math.QuickMath; 4 | 5 | /** 6 | * Implementation of the tone mapping operator from Jim Hejl and Richard Burgess-Dawson 7 | * @link http://filmicworlds.com/blog/filmic-tonemapping-operators/ 8 | */ 9 | public class Tonemap1Filter extends SimplePixelPostProcessingFilter { 10 | @Override 11 | public void processPixel(double[] pixel) { 12 | for(int i = 0; i < 3; ++i) { 13 | pixel[i] = QuickMath.max(0, pixel[i] - 0.004); 14 | pixel[i] = (pixel[i] * (6.2 * pixel[i] + .5)) / (pixel[i] * (6.2 * pixel[i] + 1.7) + 0.06); 15 | } 16 | } 17 | 18 | @Override 19 | public String getName() { 20 | return "Tonemap operator 1"; 21 | } 22 | 23 | @Override 24 | public String getId() { 25 | return "TONEMAP1"; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/renderer/projection/ShiftProjector.java: -------------------------------------------------------------------------------- 1 | package se.llbit.chunky.renderer.projection; 2 | 3 | import java.util.Random; 4 | import se.llbit.math.Vector3; 5 | 6 | public class ShiftProjector implements Projector { 7 | private final Projector wrapped; 8 | private final double shiftX; 9 | private final double shiftY; 10 | 11 | public ShiftProjector(Projector wrapped, double shiftX, double shiftY) { 12 | this.wrapped = wrapped; 13 | this.shiftX = shiftX; 14 | this.shiftY = shiftY; 15 | } 16 | 17 | @Override 18 | public void apply(double x, double y, Random random, Vector3 pos, Vector3 direction) { 19 | wrapped.apply(x + shiftX, y - shiftY, random, pos, direction); 20 | } 21 | 22 | @Override 23 | public void apply(double x, double y, Vector3 pos, Vector3 direction) { 24 | wrapped.apply(x + shiftX, y - shiftY, pos, direction); 25 | } 26 | 27 | @Override 28 | public double getMinRecommendedFoV() { 29 | return wrapped.getMinRecommendedFoV(); 30 | } 31 | 32 | @Override 33 | public double getMaxRecommendedFoV() { 34 | return wrapped.getMaxRecommendedFoV(); 35 | } 36 | 37 | @Override 38 | public double getDefaultFoV() { 39 | return wrapped.getDefaultFoV(); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/renderer/renderdump/PixelConsumer.java: -------------------------------------------------------------------------------- 1 | /* Copyright (c) 2021 Chunky contributors 2 | * 3 | * This file is part of Chunky. 4 | * 5 | * Chunky is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * Chunky is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * You should have received a copy of the GNU General Public License 15 | * along with Chunky. If not, see . 16 | */ 17 | package se.llbit.chunky.renderer.renderdump; 18 | 19 | @FunctionalInterface 20 | public interface PixelConsumer { 21 | /** 22 | * @param pixelIndex Index of pixel between 0 and canvas.width*canvas.height (* 3 for index in sampleBuffer) 23 | * @param r Red pixel value 24 | * @param g Green pixel value 25 | * @param b Blue pixel value 26 | */ 27 | void consume(int pixelIndex, double r, double g, double b); 28 | } 29 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/renderer/scene/ChunkFinalizer.java: -------------------------------------------------------------------------------- 1 | package se.llbit.chunky.renderer.scene; 2 | 3 | public class ChunkFinalizer { 4 | } 5 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/renderer/scene/FogLayer.java: -------------------------------------------------------------------------------- 1 | package se.llbit.chunky.renderer.scene; 2 | 3 | public final class FogLayer { 4 | public static final double DEFAULT_Y = 62; 5 | public static final double DEFAULT_BREADTH = 5; 6 | public static final double DEFAULT_DENSITY = 1; 7 | public double yMin, y, yWithOrigin, breadth, breadthInv, density; 8 | 9 | public FogLayer(double y, double breadth, double density, Scene scene) { 10 | this(y, breadth, density, scene.yMin); 11 | } 12 | 13 | public FogLayer(Scene scene) { 14 | this(DEFAULT_Y, DEFAULT_BREADTH, DEFAULT_DENSITY, scene.yMin); 15 | } 16 | 17 | private FogLayer(double y, double breadth, double density, double yMin) { 18 | this.yMin = yMin; 19 | setY(y); 20 | setBreadth(breadth); 21 | setDensity(density); 22 | } 23 | 24 | public void setY(double y) { 25 | this.y = y; 26 | this.yWithOrigin = y - yMin; 27 | } 28 | 29 | public void setBreadth(double breadth) { 30 | this.breadth = breadth; 31 | this.breadthInv = 1 / breadth; 32 | } 33 | 34 | public void setDensity(double density) { 35 | this.density = density; 36 | } 37 | 38 | public FogLayer clone() { 39 | return new FogLayer(y, breadth, density, yMin); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/renderer/scene/FogMode.java: -------------------------------------------------------------------------------- 1 | package se.llbit.chunky.renderer.scene; 2 | 3 | public enum FogMode { 4 | NONE, UNIFORM, LAYERED; 5 | 6 | public static FogMode get(String name) { 7 | try { 8 | return valueOf(name); 9 | } catch (IllegalArgumentException e) { 10 | return NONE; 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/renderer/scene/PlayerModel.java: -------------------------------------------------------------------------------- 1 | /* Copyright (c) 2015 Jesper Öqvist 2 | * 3 | * This file is part of Chunky. 4 | * 5 | * Chunky is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * Chunky is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * You should have received a copy of the GNU General Public License 15 | * along with Chunky. If not, see . 16 | */ 17 | package se.llbit.chunky.renderer.scene; 18 | 19 | public enum PlayerModel { 20 | STEVE { 21 | @Override public String toString() { 22 | return "Steve"; 23 | } 24 | }, 25 | ALEX { 26 | @Override public String toString() { 27 | return "Alex"; 28 | } 29 | }; 30 | 31 | public static final PlayerModel DEFAULT = STEVE; 32 | 33 | public static PlayerModel get(String name) { 34 | for (PlayerModel mode : values()) { 35 | if (mode.name().equals(name)) { 36 | return mode; 37 | } 38 | } 39 | return DEFAULT; 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/renderer/scene/RayTracer.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016 Jesper Öqvist 3 | * 4 | * This file is part of Chunky. 5 | * 6 | * Chunky is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Chunky is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * You should have received a copy of the GNU General Public License 16 | * along with Chunky. If not, see . 17 | */ 18 | package se.llbit.chunky.renderer.scene; 19 | 20 | import se.llbit.chunky.renderer.WorkerState; 21 | 22 | /** 23 | * Interface for stateless ray tracers. 24 | * Plugins that want to modify how the scene is rendered should 25 | * implement this interface and call {@code Chunky.setRayTracerFactory(Plugin::new)}. 26 | * 27 | *

The worker and scene state is passed to the ray tracer during rendering. 28 | */ 29 | public interface RayTracer { 30 | void trace(Scene scene, WorkerState state); 31 | } 32 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/renderer/scene/RenderResetHandler.java: -------------------------------------------------------------------------------- 1 | /* Copyright (c) 2016 Jesper Öqvist 2 | * 3 | * This file is part of Chunky. 4 | * 5 | * Chunky is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * Chunky is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * You should have received a copy of the GNU General Public License 15 | * along with Chunky. If not, see . 16 | */ 17 | package se.llbit.chunky.renderer.scene; 18 | 19 | /** 20 | * Functional interface for handling render reset requests. 21 | */ 22 | public interface RenderResetHandler { 23 | boolean allowSceneRefresh(); 24 | } 25 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/renderer/scene/WaterShader.java: -------------------------------------------------------------------------------- 1 | /* Copyright (c) 2012-2021 Chunky contributors 2 | * 3 | * This file is part of Chunky. 4 | * 5 | * Chunky is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * Chunky is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * You should have received a copy of the GNU General Public License 15 | * along with Chunky. If not, see . 16 | */ 17 | package se.llbit.chunky.renderer.scene; 18 | 19 | import se.llbit.json.JsonObject; 20 | import se.llbit.math.Ray; 21 | 22 | public interface WaterShader { 23 | void doWaterShading(Ray ray, double animationTime); 24 | 25 | WaterShader clone(); 26 | void save(JsonObject json); 27 | void load(JsonObject json); 28 | } 29 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/resources/ShulkerTexture.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016 Jesper Öqvist 3 | * 4 | * This file is part of Chunky. 5 | * 6 | * Chunky is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Chunky is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * You should have received a copy of the GNU General Public License 16 | * along with Chunky. If not, see . 17 | */ 18 | package se.llbit.chunky.resources; 19 | 20 | public class ShulkerTexture { 21 | public Texture side = new Texture(); 22 | public Texture top = new Texture(); 23 | public Texture bottom = new Texture(); 24 | } 25 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/resources/SolidColorTexture.java: -------------------------------------------------------------------------------- 1 | /* Copyright (c) 2019 Jesper Öqvist 2 | * 3 | * This file is part of Chunky. 4 | * 5 | * Chunky is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * Chunky is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * You should have received a copy of the GNU General Public License 15 | * along with Chunky. If not, see . 16 | */ 17 | package se.llbit.chunky.resources; 18 | 19 | import se.llbit.math.ColorUtil; 20 | import se.llbit.math.Vector4; 21 | 22 | public class SolidColorTexture extends Texture { 23 | 24 | private final Vector4 color; 25 | 26 | public SolidColorTexture(Vector4 color) { 27 | this.color = color; 28 | this.avgColor = ColorUtil.getArgb(color); 29 | } 30 | 31 | @Override public void getColor(double u, double v, Vector4 c) { 32 | c.set(color); 33 | } 34 | 35 | } 36 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/resources/texturepack/TextureFormatError.java: -------------------------------------------------------------------------------- 1 | /* Copyright (c) 2013 Jesper Öqvist 2 | * 3 | * This file is part of Chunky. 4 | * 5 | * Chunky is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * Chunky is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * You should have received a copy of the GNU General Public License 15 | * along with Chunky. If not, see . 16 | */ 17 | package se.llbit.chunky.resources.texturepack; 18 | 19 | /** 20 | * @author Jesper Öqvist 21 | */ 22 | public class TextureFormatError extends Exception { 23 | public TextureFormatError(String message) { 24 | super(message); 25 | } 26 | 27 | @Override public String getMessage() { 28 | return "Texture format error: " + super.getMessage(); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/resources/texturepack/TexturePath.java: -------------------------------------------------------------------------------- 1 | package se.llbit.chunky.resources.texturepack; 2 | 3 | import java.lang.annotation.Retention; 4 | import java.lang.annotation.RetentionPolicy; 5 | 6 | @Retention(RetentionPolicy.RUNTIME) 7 | public @interface TexturePath { 8 | String value(); 9 | } 10 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/ui/HyperlinkMenuItem.java: -------------------------------------------------------------------------------- 1 | package se.llbit.chunky.ui; 2 | 3 | import javafx.scene.control.MenuItem; 4 | 5 | public class HyperlinkMenuItem extends MenuItem { 6 | 7 | private String link; 8 | 9 | public HyperlinkMenuItem() { 10 | setOnAction(e -> { 11 | ChunkyFx.openUrl(link); 12 | }); 13 | } 14 | 15 | public String getLink() { 16 | return link; 17 | } 18 | 19 | public void setLink(String link) { 20 | this.link = link; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/ui/render/RenderControlsTabTransformer.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016 Jesper Öqvist 3 | * 4 | * This file is part of Chunky. 5 | * 6 | * Chunky is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Chunky is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * You should have received a copy of the GNU General Public License 16 | * along with Chunky. If not, see . 17 | */ 18 | package se.llbit.chunky.ui.render; 19 | 20 | import java.util.Collection; 21 | import java.util.function.Function; 22 | 23 | /** 24 | * Interface for plugins to transform the tabs in the Render Controls dialog. 25 | */ 26 | @FunctionalInterface 27 | public interface RenderControlsTabTransformer extends 28 | Function, Collection> { 29 | } 30 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/world/ChunkSelectionListener.java: -------------------------------------------------------------------------------- 1 | /* Copyright (c) 2016 Jesper Öqvist 2 | * 3 | * This file is part of Chunky. 4 | * 5 | * Chunky is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * Chunky is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * You should have received a copy of the GNU General Public License 15 | * along with Chunky. If not, see . 16 | */ 17 | package se.llbit.chunky.world; 18 | 19 | public interface ChunkSelectionListener { 20 | void chunkSelectionChanged(); 21 | } 22 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/world/ChunkVersion.java: -------------------------------------------------------------------------------- 1 | package se.llbit.chunky.world; 2 | 3 | public enum ChunkVersion { 4 | /** 5 | * Unknown chunk version 6 | */ 7 | UNKNOWN, 8 | /** 9 | * Pre-flattening chunk (1.12 or older). 10 | */ 11 | PRE_FLATTENING, 12 | /** 13 | * Post-flattening chunk (1.13 or later). 14 | */ 15 | POST_FLATTENING 16 | } 17 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/world/EmptyDimension.java: -------------------------------------------------------------------------------- 1 | package se.llbit.chunky.world; 2 | 3 | import java.util.Collections; 4 | 5 | public class EmptyDimension extends Dimension { 6 | public static final EmptyDimension INSTANCE = new EmptyDimension(); 7 | 8 | private EmptyDimension() { 9 | super(EmptyWorld.INSTANCE, 0, null, Collections.emptySet(), -1); 10 | } 11 | 12 | @Override public String toString() { 13 | return "[empty dimension]"; 14 | } 15 | 16 | } -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/world/MaterialStore.java: -------------------------------------------------------------------------------- 1 | /* Copyright (c) 2019 Jesper Öqvist 2 | * 3 | * This file is part of Chunky. 4 | * 5 | * Chunky is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * Chunky is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * You should have received a copy of the GNU General Public License 15 | * along with Chunky. If not, see . 16 | */ 17 | package se.llbit.chunky.world; 18 | 19 | import java.util.Collection; 20 | import java.util.HashSet; 21 | import java.util.LinkedHashMap; 22 | import java.util.Map; 23 | import se.llbit.chunky.block.Block; 24 | 25 | // TODO: introduce block tags 26 | public class MaterialStore { 27 | public static final Map> collections = new LinkedHashMap<>(); 28 | public static final Collection blockIds = new HashSet<>(); 29 | } 30 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/world/biome/BiomePalette.java: -------------------------------------------------------------------------------- 1 | package se.llbit.chunky.world.biome; 2 | 3 | public interface BiomePalette { 4 | Biome get(int id); 5 | 6 | int put(Biome biome); 7 | 8 | int size(); 9 | } 10 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/world/listeners/ChunkDeletionListener.java: -------------------------------------------------------------------------------- 1 | /* Copyright (c) 2012 Jesper Öqvist 2 | * 3 | * This file is part of Chunky. 4 | * 5 | * Chunky is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * Chunky is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * You should have received a copy of the GNU General Public License 15 | * along with Chunky. If not, see . 16 | */ 17 | package se.llbit.chunky.world.listeners; 18 | 19 | import se.llbit.chunky.world.ChunkPosition; 20 | 21 | public interface ChunkDeletionListener { 22 | void chunkDeleted(ChunkPosition chunk); 23 | } 24 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/world/listeners/ChunkTopographyListener.java: -------------------------------------------------------------------------------- 1 | /* Copyright (c) 2014 Jesper Öqvist 2 | * 3 | * This file is part of Chunky. 4 | * 5 | * Chunky is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * Chunky is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * You should have received a copy of the GNU General Public License 15 | * along with Chunky. If not, see . 16 | */ 17 | package se.llbit.chunky.world.listeners; 18 | 19 | import se.llbit.chunky.world.Chunk; 20 | 21 | public interface ChunkTopographyListener { 22 | void chunksTopographyUpdated(Chunk chunk); 23 | } 24 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/world/material/CloudMaterial.java: -------------------------------------------------------------------------------- 1 | /* Copyright (c) 2019 Jesper Öqvist 2 | * 3 | * This file is part of Chunky. 4 | * 5 | * Chunky is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * Chunky is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * You should have received a copy of the GNU General Public License 15 | * along with Chunky. If not, see . 16 | */ 17 | package se.llbit.chunky.world.material; 18 | 19 | import se.llbit.chunky.resources.Texture; 20 | import se.llbit.chunky.world.Material; 21 | 22 | public class CloudMaterial extends Material { 23 | public static final CloudMaterial INSTANCE = new CloudMaterial(); 24 | public static float[] color = {1, 1, 1, 1}; 25 | 26 | private CloudMaterial() { 27 | super("cloud", Texture.air); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/world/material/TextureMaterial.java: -------------------------------------------------------------------------------- 1 | /* Copyright (c) 2015 Jesper Öqvist 2 | * 3 | * This file is part of Chunky. 4 | * 5 | * Chunky is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * Chunky is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * You should have received a copy of the GNU General Public License 15 | * along with Chunky. If not, see . 16 | */ 17 | package se.llbit.chunky.world.material; 18 | 19 | import se.llbit.chunky.resources.Texture; 20 | import se.llbit.chunky.world.Material; 21 | 22 | public class TextureMaterial extends Material { 23 | 24 | public TextureMaterial(Texture texture) { 25 | super("texture", texture); 26 | 27 | if (texture == null) { 28 | throw new NullPointerException("Texture material may not have a null texture."); 29 | } 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/chunky/world/region/ChunkReadException.java: -------------------------------------------------------------------------------- 1 | package se.llbit.chunky.world.region; 2 | 3 | import se.llbit.chunky.world.ChunkPosition; 4 | 5 | import java.io.IOException; 6 | 7 | public class ChunkReadException extends IOException { 8 | private final ChunkPosition chunkPosition; 9 | 10 | public ChunkReadException( 11 | ChunkPosition chunkPosition, 12 | String message 13 | ) { 14 | this(chunkPosition, message, null); 15 | } 16 | 17 | public ChunkReadException( 18 | ChunkPosition chunkPosition, 19 | Throwable cause 20 | ) { 21 | this(chunkPosition, null, cause); 22 | } 23 | 24 | public ChunkReadException( 25 | ChunkPosition chunkPosition, 26 | String message, 27 | Throwable cause 28 | ) { 29 | super(message, cause); 30 | this.chunkPosition = chunkPosition; 31 | } 32 | 33 | public ChunkPosition getChunkPosition() { 34 | return chunkPosition; 35 | } 36 | 37 | @Override 38 | public String toString() { 39 | return (getMessage() == null) 40 | ? String.format( 41 | "Failed to read chunk %s", 42 | chunkPosition 43 | ) 44 | : String.format( 45 | "Failed to read chunk %s - %s", 46 | chunkPosition, 47 | getMessage() 48 | ); 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/fxutil/FxImageUtil.java: -------------------------------------------------------------------------------- 1 | package se.llbit.fxutil; 2 | 3 | import javafx.scene.image.Image; 4 | import javafx.scene.image.PixelFormat; 5 | import javafx.scene.image.WritableImage; 6 | import se.llbit.chunky.resources.BitmapImage; 7 | 8 | public class FxImageUtil { 9 | 10 | /** 11 | * @return a JavaFX version of a BitmapImage. 12 | */ 13 | public static Image toFxImage(BitmapImage image) { 14 | WritableImage fxImage = new WritableImage(image.width, image.height); 15 | fxImage.getPixelWriter().setPixels(0, 0, image.width, image.height, 16 | PixelFormat.getIntArgbInstance(), image.data, 0, image.width); 17 | return fxImage; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/imageformats/png/IDAT.java: -------------------------------------------------------------------------------- 1 | /* Copyright (c) 2012 Jesper Öqvist 2 | * 3 | * This file is part of Chunky. 4 | * 5 | * Chunky is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * Chunky is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * You should have received a copy of the GNU General Public License 15 | * along with Chunky. If not, see . 16 | */ 17 | package se.llbit.imageformats.png; 18 | 19 | /** 20 | * PNG IDAT chunk constants. 21 | * 22 | * @author Jesper Öqvist 23 | */ 24 | public interface IDAT { 25 | 26 | /** PNG chunk type ID. */ 27 | int CHUNK_TYPE = 0x49444154; 28 | 29 | /** The filter type for no filter. */ 30 | int FILTER_TYPE_NONE = 0; 31 | } 32 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/imageformats/tiff/CompressionType.java: -------------------------------------------------------------------------------- 1 | package se.llbit.imageformats.tiff; 2 | 3 | import java.io.DataOutputStream; 4 | import java.io.IOException; 5 | import java.util.zip.Deflater; 6 | import java.util.zip.DeflaterOutputStream; 7 | 8 | public enum CompressionType { 9 | NONE(0x0001), 10 | DEFLATE(0x80B2); 11 | 12 | final short id; 13 | 14 | CompressionType(int id) { 15 | this.id = (short) id; 16 | } 17 | 18 | void writePixelData( 19 | FinalizableBFCOutputStream out, 20 | ImageFileDirectory.PixelDataWriter writer 21 | ) throws IOException { 22 | switch (this) { 23 | case NONE: 24 | writer.writePixelData(out); 25 | out.flush(); 26 | break; 27 | 28 | case DEFLATE: 29 | Deflater deflater = new Deflater(Deflater.BEST_COMPRESSION, false); 30 | DeflaterOutputStream deflOut = new DeflaterOutputStream(out, deflater, 16 * 1024, true); 31 | writer.writePixelData(new DataOutputStream(deflOut)); 32 | deflOut.finish(); 33 | deflater.end(); 34 | break; 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/math/Constants.java: -------------------------------------------------------------------------------- 1 | /* Copyright (c) 2014 Jesper Öqvist 2 | * 3 | * This file is part of Chunky. 4 | * 5 | * Chunky is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * Chunky is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * You should have received a copy of the GNU General Public License 15 | * along with Chunky. If not, see . 16 | */ 17 | package se.llbit.math; 18 | 19 | public class Constants { 20 | public static final double HALF_PI = Math.PI / 2; 21 | // TODO INV_TAU 22 | public static final double TAU = Math.PI * 2; 23 | public static final double SQRT_HALF = Math.sqrt(0.5); 24 | public static final double INV_SQRT_HALF = 1 / Math.sqrt(0.5); 25 | } 26 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/math/Intersectable.java: -------------------------------------------------------------------------------- 1 | /* Copyright (c) 2014-2021 Jesper Öqvist 2 | * Copyright (c) 2014-2021 Chunky contributors 3 | * 4 | * This file is part of Chunky. 5 | * 6 | * Chunky is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Chunky is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * You should have received a copy of the GNU General Public License 16 | * along with Chunky. If not, see . 17 | */ 18 | package se.llbit.math; 19 | 20 | /** 21 | * Anything which can intersect a ray in space. 22 | */ 23 | public interface Intersectable { 24 | /** 25 | * Find closest intersection between the ray and this. 26 | * 27 | * @return {@code true} if there exists any intersection 28 | */ 29 | boolean closestIntersection(Ray ray); 30 | } 31 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/math/OctreeVisitor.java: -------------------------------------------------------------------------------- 1 | /* Copyright (c) 2014 Jesper Öqvist 2 | * 3 | * This file is part of Chunky. 4 | * 5 | * Chunky is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * Chunky is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * You should have received a copy of the GNU General Public License 15 | * along with Chunky. If not, see . 16 | */ 17 | package se.llbit.math; 18 | 19 | /** 20 | * Visitor interface for Octrees. 21 | * 22 | * @author Jesper Öqvist 23 | */ 24 | public interface OctreeVisitor { 25 | /** 26 | * This is called once for each leaf nod in the octree 27 | * 28 | * @param data the data of the octree node 29 | * @param x x prefix 30 | * @param y y prefix 31 | * @param z z prefix 32 | * @param size the bit size of the leaf node 33 | */ 34 | void visit(int data, int x, int y, int z, int size); 35 | } 36 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/math/primitive/Primitive.java: -------------------------------------------------------------------------------- 1 | /* Copyright (c) 2014 Jesper Öqvist 2 | * 3 | * This file is part of Chunky. 4 | * 5 | * Chunky is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * Chunky is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * You should have received a copy of the GNU General Public License 15 | * along with Chunky. If not, see . 16 | */ 17 | package se.llbit.math.primitive; 18 | 19 | import se.llbit.math.AABB; 20 | import se.llbit.math.Ray; 21 | 22 | /** 23 | * An intersectable primitive piece of geometry 24 | * 25 | * @author Jesper Öqvist 26 | */ 27 | public interface Primitive { 28 | 29 | /** 30 | * Intersect the ray with this geometry. 31 | * 32 | * @return {@code true} if there was an intersection 33 | */ 34 | boolean intersect(Ray ray); 35 | 36 | /** 37 | * @return axis-aligned bounding box for the primitive 38 | */ 39 | AABB bounds(); 40 | } 41 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/math/structures/Position2IntStructure.java: -------------------------------------------------------------------------------- 1 | package se.llbit.math.structures; 2 | 3 | public interface Position2IntStructure { 4 | /** 5 | * @param x World X. 6 | * @param y World Y. 7 | * @param z World Z. 8 | */ 9 | void set(int x, int y, int z, int data); 10 | 11 | /** 12 | * @param x World X. 13 | * @param y World Y. 14 | * @param z World Z. 15 | */ 16 | int get(int x, int y, int z); 17 | } 18 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/math/structures/Position2ReferenceStructure.java: -------------------------------------------------------------------------------- 1 | package se.llbit.math.structures; 2 | 3 | public interface Position2ReferenceStructure { 4 | void set(int x, int y, int z, T data); 5 | 6 | T get(int x, int y, int z); 7 | } 8 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/math/structures/Position2d2IntPackedArray.java: -------------------------------------------------------------------------------- 1 | package se.llbit.math.structures; 2 | 3 | import it.unimi.dsi.fastutil.longs.Long2ReferenceMap; 4 | import it.unimi.dsi.fastutil.longs.Long2ReferenceOpenHashMap; 5 | 6 | public class Position2d2IntPackedArray implements Position2IntStructure { 7 | 8 | protected final Long2ReferenceMap structure = new Long2ReferenceOpenHashMap<>(); 9 | 10 | private long packedSectionPos(int cx, int cz) { 11 | return (cz & 0xFFFFFFFFL) | (cx & 0xFFFFFFFFL) << 32; 12 | } 13 | 14 | private int packedIndex(int x, int y, int z) { 15 | x &= 0xf; 16 | z &= 0xf; 17 | return x + 16 * z; 18 | } 19 | 20 | @Override 21 | public void set(int x, int y, int z, int data) { 22 | int cx = x >> 4; 23 | int cz = z >> 4; 24 | long sp = packedSectionPos(cx, cz); 25 | this.structure.computeIfAbsent(sp, sectionPos -> new int[16 * 16])[packedIndex(x, y, z)] = data; 26 | } 27 | 28 | @Override 29 | public int get(int x, int y, int z) { 30 | int cx = x >> 4; 31 | int cz = z >> 4; 32 | long sp = packedSectionPos(cx, cz); 33 | int[] ints = this.structure.get(sp); 34 | if(ints == null) { 35 | return 0; 36 | } 37 | return ints[packedIndex(x, y ,z)]; 38 | } 39 | } -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/math/structures/Position2d2ReferencePackedArrayStructure.java: -------------------------------------------------------------------------------- 1 | package se.llbit.math.structures; 2 | 3 | import it.unimi.dsi.fastutil.longs.Long2ReferenceMap; 4 | import it.unimi.dsi.fastutil.longs.Long2ReferenceOpenHashMap; 5 | 6 | public class Position2d2ReferencePackedArrayStructure implements Position2ReferenceStructure { 7 | 8 | protected final Long2ReferenceMap map = new Long2ReferenceOpenHashMap<>(); 9 | 10 | private long packedSectionPos(int cx, int cz) { 11 | return (cz & 0xFFFFFFFFL) | (cx & 0xFFFFFFFFL) << 32; 12 | } 13 | 14 | private int packedIndex(int x, int y, int z) { 15 | x &= 0xf; 16 | z &= 0xf; 17 | return x + 16 * z; 18 | } 19 | 20 | @Override 21 | public void set(int x, int y, int z, T data) { 22 | int cx = x >> 4; 23 | int cz = z >> 4; 24 | long sp = packedSectionPos(cx, cz); 25 | this.map.computeIfAbsent(sp, sectionPos -> (T[]) new Object[16 * 16])[packedIndex(x, y, z)] = data; 26 | } 27 | 28 | @Override 29 | public T get(int x, int y, int z) { 30 | int cx = x >> 4; 31 | int cz = z >> 4; 32 | long sp = packedSectionPos(cx, cz); 33 | T[] tArray = this.map.get(sp); 34 | if(tArray == null) { 35 | return null; 36 | } 37 | T t = tArray[packedIndex(x, y, z)]; 38 | return t; 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/util/Configurable.java: -------------------------------------------------------------------------------- 1 | package se.llbit.util; 2 | 3 | import se.llbit.json.JsonObject; 4 | 5 | /** 6 | * This interface specifies an object that can be configured by the user. 7 | * This would be, for example, a post processing method. 8 | */ 9 | public interface Configurable { 10 | /** 11 | * Load the configuration from the given JSON object that may have been created by {@link #storeConfiguration(JsonObject)} 12 | * but may as well have been created by external tools. 13 | * 14 | * @param json Source object 15 | */ 16 | void loadConfiguration(JsonObject json); 17 | 18 | /** 19 | * Store the configuration in the given JSON object such that it can be loaded later with {@link #loadConfiguration(JsonObject)}. 20 | * 21 | * @param json Destination object 22 | */ 23 | void storeConfiguration(JsonObject json); 24 | 25 | /** 26 | * Restore the default configuration. 27 | */ 28 | void reset(); 29 | } 30 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/util/JsonSerializable.java: -------------------------------------------------------------------------------- 1 | /* Copyright (c) 2013 Jesper Öqvist 2 | * 3 | * This file is part of Chunky. 4 | * 5 | * Chunky is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * Chunky is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * You should have received a copy of the GNU General Public License 15 | * along with Chunky. If not, see . 16 | */ 17 | package se.llbit.util; 18 | 19 | import se.llbit.json.JsonObject; 20 | 21 | /** 22 | * Classes implementing this interface can be serialized to JSON. 23 | * 24 | * @author Jesper Öqvist 25 | */ 26 | public interface JsonSerializable { 27 | /** 28 | * Serialize this object to a JSON object. 29 | * 30 | * @return JSON object 31 | */ 32 | JsonObject toJson(); 33 | } 34 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/util/MinecraftPRNG.java: -------------------------------------------------------------------------------- 1 | /* Copyright (c) 2019 Jesper Öqvist 2 | * 3 | * This file is part of Chunky. 4 | * 5 | * Chunky is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * Chunky is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * You should have received a copy of the GNU General Public License 15 | * along with Chunky. If not, see . 16 | */ 17 | package se.llbit.util; 18 | 19 | /** 20 | * Pseudo-random number generator matching that used in Minecraft 21 | * for lilypad rotations. 22 | */ 23 | public class MinecraftPRNG { 24 | /** 25 | * Get a random number based on a 3D world position. 26 | */ 27 | public static long rand(long x, long y, long z) { 28 | long pr = (x * 3129871L) ^ (z * 116129781L) ^ y; 29 | return pr * pr * 42317861L + pr * 11L; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/util/MinecraftText.java: -------------------------------------------------------------------------------- 1 | package se.llbit.util; 2 | 3 | public class MinecraftText { 4 | public static String removeFormatChars(String input) { 5 | return input.replaceAll("\\u00c2?§[0-9a-fklmnor]", ""); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/util/Registerable.java: -------------------------------------------------------------------------------- 1 | package se.llbit.util; 2 | 3 | /** 4 | * This interface specifies a Registerable object that can be switched by the user. 5 | * This would be, for example, different Octree implementations. 6 | */ 7 | public interface Registerable { 8 | enum DeprecationStatus { 9 | /** 10 | * Not deprecated. 11 | */ 12 | ACTIVE, 13 | /** 14 | * Deprecated. Use is discouraged but not hidden. 15 | */ 16 | DEPRECATED, 17 | /** 18 | * Deprecated. This option should be hidden. 19 | */ 20 | HIDDEN, 21 | } 22 | 23 | /** 24 | * Get the pretty name of this object. 25 | * For example, "Chunky Path Tracer". 26 | */ 27 | String getName(); 28 | 29 | /** 30 | * Get the description of this object. 31 | * For example, "A photorealistic Path Tracing renderer." 32 | */ 33 | String getDescription(); 34 | 35 | /** 36 | * Get the unique identifier of this object. 37 | * For example, "PathTracingRenderer". 38 | */ 39 | String getId(); 40 | 41 | /** 42 | * Get the deprecation status of this object. 43 | */ 44 | default DeprecationStatus getDeprecationStatus() { 45 | return DeprecationStatus.ACTIVE; 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/util/UuidUtil.java: -------------------------------------------------------------------------------- 1 | package se.llbit.util; 2 | 3 | import java.util.UUID; 4 | 5 | public class UuidUtil { 6 | /** 7 | * Converts four integers (ordered from MSB to LSB) to a UUID. 8 | * 9 | * @param ints Four integers, ordered from MSB to LSB 10 | * @return UUID 11 | */ 12 | public static UUID intsToUuid(int[] ints) { 13 | return new UUID( 14 | ((long) ints[0]) << 32 | ((long) ints[1] & 0xFFFFFFFFL), 15 | ((long) ints[2]) << 32 | ((long) ints[3] & 0xFFFFFFFFL) 16 | ); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/util/annotation/NotNull.java: -------------------------------------------------------------------------------- 1 | package se.llbit.util.annotation; 2 | 3 | /** 4 | * Indicates that the annotated element must not be null. 5 | */ 6 | public @interface NotNull { 7 | } 8 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/util/annotation/Nullable.java: -------------------------------------------------------------------------------- 1 | package se.llbit.util.annotation; 2 | 3 | /** 4 | * Indicates that the annotated element may be null. 5 | */ 6 | public @interface Nullable { 7 | } 8 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/util/io/IsolatedOutputStream.java: -------------------------------------------------------------------------------- 1 | package se.llbit.util.io; 2 | 3 | import java.io.FilterOutputStream; 4 | import java.io.IOException; 5 | import java.io.OutputStream; 6 | 7 | /** 8 | * Output stream that has no state and does not propagate the close. 9 | */ 10 | public class IsolatedOutputStream extends FilterOutputStream { 11 | public IsolatedOutputStream(OutputStream out) { 12 | super(out); 13 | } 14 | 15 | @Override 16 | public void close() throws IOException { 17 | out.flush(); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/util/io/RepositionableMeasurableDataOutput.java: -------------------------------------------------------------------------------- 1 | package se.llbit.util.io; 2 | 3 | import it.unimi.dsi.fastutil.io.MeasurableStream; 4 | import it.unimi.dsi.fastutil.io.RepositionableStream; 5 | 6 | import java.io.DataOutput; 7 | import java.io.IOException; 8 | 9 | /** 10 | * A repositionable {@link DataOutput} stream whose size can be measured. 11 | */ 12 | public interface RepositionableMeasurableDataOutput 13 | extends RepositionableStream, MeasurableStream, DataOutput { 14 | 15 | /** 16 | * Skips n bytes (should be equivalent to writing n 0x00 bytes). 17 | */ 18 | void skip(int byteCount) throws IOException; 19 | } 20 | -------------------------------------------------------------------------------- /chunky/src/java/se/llbit/util/mojangapi/MinecraftProfile.java: -------------------------------------------------------------------------------- 1 | package se.llbit.util.mojangapi; 2 | 3 | import com.google.gson.annotations.SerializedName; 4 | 5 | import java.util.Optional; 6 | 7 | public class MinecraftProfile { 8 | public String id; 9 | public String name; 10 | public Property[] properties; 11 | 12 | public Optional getSkin() { 13 | return getProperty("textures").flatMap(MinecraftSkin::getSkinFromEncodedTextures); 14 | } 15 | 16 | public Optional getProperty(String name) { 17 | if (properties != null) { 18 | for (Property property : properties) { 19 | if (name.equals(property.name)) { 20 | return Optional.of(property.value); 21 | } 22 | } 23 | } 24 | return Optional.empty(); 25 | } 26 | 27 | public static class Property { 28 | public String name; 29 | public String value; 30 | } 31 | 32 | public static class Textures { 33 | @SerializedName("SKIN") 34 | public SkinUrl skin; 35 | 36 | @SerializedName("CAPE") 37 | public CapeUrl cape; 38 | 39 | public static class SkinUrl { 40 | public String url; 41 | 42 | public Metadata metadata; 43 | 44 | public static class Metadata { 45 | public String model; 46 | } 47 | } 48 | 49 | public static class CapeUrl { 50 | public String url; 51 | } 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /chunky/src/res/chunky-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chunky-dev/chunky/91149909322b3ee2cc09e118eb3cb41c3db5518a/chunky/src/res/chunky-icon.png -------------------------------------------------------------------------------- /chunky/src/res/icons/1_12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chunky-dev/chunky/91149909322b3ee2cc09e118eb3cb41c3db5518a/chunky/src/res/icons/1_12.png -------------------------------------------------------------------------------- /chunky/src/res/icons/1_13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chunky-dev/chunky/91149909322b3ee2cc09e118eb3cb41c3db5518a/chunky/src/res/icons/1_13.png -------------------------------------------------------------------------------- /chunky/src/res/icons/advanced.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chunky-dev/chunky/91149909322b3ee2cc09e118eb3cb41c3db5518a/chunky/src/res/icons/advanced.png -------------------------------------------------------------------------------- /chunky/src/res/icons/bed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chunky-dev/chunky/91149909322b3ee2cc09e118eb3cb41c3db5518a/chunky/src/res/icons/bed.png -------------------------------------------------------------------------------- /chunky/src/res/icons/cactus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chunky-dev/chunky/91149909322b3ee2cc09e118eb3cb41c3db5518a/chunky/src/res/icons/cactus.png -------------------------------------------------------------------------------- /chunky/src/res/icons/cake.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chunky-dev/chunky/91149909322b3ee2cc09e118eb3cb41c3db5518a/chunky/src/res/icons/cake.png -------------------------------------------------------------------------------- /chunky/src/res/icons/camera.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chunky-dev/chunky/91149909322b3ee2cc09e118eb3cb41c3db5518a/chunky/src/res/icons/camera.png -------------------------------------------------------------------------------- /chunky/src/res/icons/cauldron.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chunky-dev/chunky/91149909322b3ee2cc09e118eb3cb41c3db5518a/chunky/src/res/icons/cauldron.png -------------------------------------------------------------------------------- /chunky/src/res/icons/chunky.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chunky-dev/chunky/91149909322b3ee2cc09e118eb3cb41c3db5518a/chunky/src/res/icons/chunky.png -------------------------------------------------------------------------------- /chunky/src/res/icons/clear.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chunky-dev/chunky/91149909322b3ee2cc09e118eb3cb41c3db5518a/chunky/src/res/icons/clear.png -------------------------------------------------------------------------------- /chunky/src/res/icons/clock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chunky-dev/chunky/91149909322b3ee2cc09e118eb3cb41c3db5518a/chunky/src/res/icons/clock.png -------------------------------------------------------------------------------- /chunky/src/res/icons/colors.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chunky-dev/chunky/91149909322b3ee2cc09e118eb3cb41c3db5518a/chunky/src/res/icons/colors.png -------------------------------------------------------------------------------- /chunky/src/res/icons/disk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chunky-dev/chunky/91149909322b3ee2cc09e118eb3cb41c3db5518a/chunky/src/res/icons/disk.png -------------------------------------------------------------------------------- /chunky/src/res/icons/dragon-egg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chunky-dev/chunky/91149909322b3ee2cc09e118eb3cb41c3db5518a/chunky/src/res/icons/dragon-egg.png -------------------------------------------------------------------------------- /chunky/src/res/icons/eye.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chunky-dev/chunky/91149909322b3ee2cc09e118eb3cb41c3db5518a/chunky/src/res/icons/eye.png -------------------------------------------------------------------------------- /chunky/src/res/icons/face.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chunky-dev/chunky/91149909322b3ee2cc09e118eb3cb41c3db5518a/chunky/src/res/icons/face.png -------------------------------------------------------------------------------- /chunky/src/res/icons/face_t.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chunky-dev/chunky/91149909322b3ee2cc09e118eb3cb41c3db5518a/chunky/src/res/icons/face_t.png -------------------------------------------------------------------------------- /chunky/src/res/icons/failed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chunky-dev/chunky/91149909322b3ee2cc09e118eb3cb41c3db5518a/chunky/src/res/icons/failed.png -------------------------------------------------------------------------------- /chunky/src/res/icons/fence.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chunky-dev/chunky/91149909322b3ee2cc09e118eb3cb41c3db5518a/chunky/src/res/icons/fence.png -------------------------------------------------------------------------------- /chunky/src/res/icons/gear.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chunky-dev/chunky/91149909322b3ee2cc09e118eb3cb41c3db5518a/chunky/src/res/icons/gear.png -------------------------------------------------------------------------------- /chunky/src/res/icons/home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chunky-dev/chunky/91149909322b3ee2cc09e118eb3cb41c3db5518a/chunky/src/res/icons/home.png -------------------------------------------------------------------------------- /chunky/src/res/icons/home_t.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chunky-dev/chunky/91149909322b3ee2cc09e118eb3cb41c3db5518a/chunky/src/res/icons/home_t.png -------------------------------------------------------------------------------- /chunky/src/res/icons/iron-door.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chunky-dev/chunky/91149909322b3ee2cc09e118eb3cb41c3db5518a/chunky/src/res/icons/iron-door.png -------------------------------------------------------------------------------- /chunky/src/res/icons/iso-ne.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chunky-dev/chunky/91149909322b3ee2cc09e118eb3cb41c3db5518a/chunky/src/res/icons/iso-ne.png -------------------------------------------------------------------------------- /chunky/src/res/icons/iso-nw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chunky-dev/chunky/91149909322b3ee2cc09e118eb3cb41c3db5518a/chunky/src/res/icons/iso-nw.png -------------------------------------------------------------------------------- /chunky/src/res/icons/iso-se.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chunky-dev/chunky/91149909322b3ee2cc09e118eb3cb41c3db5518a/chunky/src/res/icons/iso-se.png -------------------------------------------------------------------------------- /chunky/src/res/icons/iso-sw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chunky-dev/chunky/91149909322b3ee2cc09e118eb3cb41c3db5518a/chunky/src/res/icons/iso-sw.png -------------------------------------------------------------------------------- /chunky/src/res/icons/jack-o-lantern.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chunky-dev/chunky/91149909322b3ee2cc09e118eb3cb41c3db5518a/chunky/src/res/icons/jack-o-lantern.png -------------------------------------------------------------------------------- /chunky/src/res/icons/jukebox.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chunky-dev/chunky/91149909322b3ee2cc09e118eb3cb41c3db5518a/chunky/src/res/icons/jukebox.png -------------------------------------------------------------------------------- /chunky/src/res/icons/key.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chunky-dev/chunky/91149909322b3ee2cc09e118eb3cb41c3db5518a/chunky/src/res/icons/key.png -------------------------------------------------------------------------------- /chunky/src/res/icons/lens.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chunky-dev/chunky/91149909322b3ee2cc09e118eb3cb41c3db5518a/chunky/src/res/icons/lens.png -------------------------------------------------------------------------------- /chunky/src/res/icons/lever.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chunky-dev/chunky/91149909322b3ee2cc09e118eb3cb41c3db5518a/chunky/src/res/icons/lever.png -------------------------------------------------------------------------------- /chunky/src/res/icons/light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chunky-dev/chunky/91149909322b3ee2cc09e118eb3cb41c3db5518a/chunky/src/res/icons/light.png -------------------------------------------------------------------------------- /chunky/src/res/icons/load.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chunky-dev/chunky/91149909322b3ee2cc09e118eb3cb41c3db5518a/chunky/src/res/icons/load.png -------------------------------------------------------------------------------- /chunky/src/res/icons/lock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chunky-dev/chunky/91149909322b3ee2cc09e118eb3cb41c3db5518a/chunky/src/res/icons/lock.png -------------------------------------------------------------------------------- /chunky/src/res/icons/magnify.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chunky-dev/chunky/91149909322b3ee2cc09e118eb3cb41c3db5518a/chunky/src/res/icons/magnify.png -------------------------------------------------------------------------------- /chunky/src/res/icons/map-selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chunky-dev/chunky/91149909322b3ee2cc09e118eb3cb41c3db5518a/chunky/src/res/icons/map-selected.png -------------------------------------------------------------------------------- /chunky/src/res/icons/map.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chunky-dev/chunky/91149909322b3ee2cc09e118eb3cb41c3db5518a/chunky/src/res/icons/map.png -------------------------------------------------------------------------------- /chunky/src/res/icons/minus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chunky-dev/chunky/91149909322b3ee2cc09e118eb3cb41c3db5518a/chunky/src/res/icons/minus.png -------------------------------------------------------------------------------- /chunky/src/res/icons/note-block.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chunky-dev/chunky/91149909322b3ee2cc09e118eb3cb41c3db5518a/chunky/src/res/icons/note-block.png -------------------------------------------------------------------------------- /chunky/src/res/icons/pause.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chunky-dev/chunky/91149909322b3ee2cc09e118eb3cb41c3db5518a/chunky/src/res/icons/pause.png -------------------------------------------------------------------------------- /chunky/src/res/icons/pencil.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chunky-dev/chunky/91149909322b3ee2cc09e118eb3cb41c3db5518a/chunky/src/res/icons/pencil.png -------------------------------------------------------------------------------- /chunky/src/res/icons/photo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chunky-dev/chunky/91149909322b3ee2cc09e118eb3cb41c3db5518a/chunky/src/res/icons/photo.png -------------------------------------------------------------------------------- /chunky/src/res/icons/play.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chunky-dev/chunky/91149909322b3ee2cc09e118eb3cb41c3db5518a/chunky/src/res/icons/play.png -------------------------------------------------------------------------------- /chunky/src/res/icons/player.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chunky-dev/chunky/91149909322b3ee2cc09e118eb3cb41c3db5518a/chunky/src/res/icons/player.png -------------------------------------------------------------------------------- /chunky/src/res/icons/plus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chunky-dev/chunky/91149909322b3ee2cc09e118eb3cb41c3db5518a/chunky/src/res/icons/plus.png -------------------------------------------------------------------------------- /chunky/src/res/icons/pumpkin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chunky-dev/chunky/91149909322b3ee2cc09e118eb3cb41c3db5518a/chunky/src/res/icons/pumpkin.png -------------------------------------------------------------------------------- /chunky/src/res/icons/question.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chunky-dev/chunky/91149909322b3ee2cc09e118eb3cb41c3db5518a/chunky/src/res/icons/question.png -------------------------------------------------------------------------------- /chunky/src/res/icons/redstone-torch-on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chunky-dev/chunky/91149909322b3ee2cc09e118eb3cb41c3db5518a/chunky/src/res/icons/redstone-torch-on.png -------------------------------------------------------------------------------- /chunky/src/res/icons/reload.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chunky-dev/chunky/91149909322b3ee2cc09e118eb3cb41c3db5518a/chunky/src/res/icons/reload.png -------------------------------------------------------------------------------- /chunky/src/res/icons/save.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chunky-dev/chunky/91149909322b3ee2cc09e118eb3cb41c3db5518a/chunky/src/res/icons/save.png -------------------------------------------------------------------------------- /chunky/src/res/icons/scale.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chunky-dev/chunky/91149909322b3ee2cc09e118eb3cb41c3db5518a/chunky/src/res/icons/scale.png -------------------------------------------------------------------------------- /chunky/src/res/icons/sign-post.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chunky-dev/chunky/91149909322b3ee2cc09e118eb3cb41c3db5518a/chunky/src/res/icons/sign-post.png -------------------------------------------------------------------------------- /chunky/src/res/icons/sky.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chunky-dev/chunky/91149909322b3ee2cc09e118eb3cb41c3db5518a/chunky/src/res/icons/sky.png -------------------------------------------------------------------------------- /chunky/src/res/icons/skybox-back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chunky-dev/chunky/91149909322b3ee2cc09e118eb3cb41c3db5518a/chunky/src/res/icons/skybox-back.png -------------------------------------------------------------------------------- /chunky/src/res/icons/skybox-down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chunky-dev/chunky/91149909322b3ee2cc09e118eb3cb41c3db5518a/chunky/src/res/icons/skybox-down.png -------------------------------------------------------------------------------- /chunky/src/res/icons/skybox-front.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chunky-dev/chunky/91149909322b3ee2cc09e118eb3cb41c3db5518a/chunky/src/res/icons/skybox-front.png -------------------------------------------------------------------------------- /chunky/src/res/icons/skybox-left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chunky-dev/chunky/91149909322b3ee2cc09e118eb3cb41c3db5518a/chunky/src/res/icons/skybox-left.png -------------------------------------------------------------------------------- /chunky/src/res/icons/skybox-right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chunky-dev/chunky/91149909322b3ee2cc09e118eb3cb41c3db5518a/chunky/src/res/icons/skybox-right.png -------------------------------------------------------------------------------- /chunky/src/res/icons/skybox-up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chunky-dev/chunky/91149909322b3ee2cc09e118eb3cb41c3db5518a/chunky/src/res/icons/skybox-up.png -------------------------------------------------------------------------------- /chunky/src/res/icons/stone-brick-stairs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chunky-dev/chunky/91149909322b3ee2cc09e118eb3cb41c3db5518a/chunky/src/res/icons/stone-brick-stairs.png -------------------------------------------------------------------------------- /chunky/src/res/icons/stone-button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chunky-dev/chunky/91149909322b3ee2cc09e118eb3cb41c3db5518a/chunky/src/res/icons/stone-button.png -------------------------------------------------------------------------------- /chunky/src/res/icons/stone-pressure-plate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chunky-dev/chunky/91149909322b3ee2cc09e118eb3cb41c3db5518a/chunky/src/res/icons/stone-pressure-plate.png -------------------------------------------------------------------------------- /chunky/src/res/icons/stone-stairs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chunky-dev/chunky/91149909322b3ee2cc09e118eb3cb41c3db5518a/chunky/src/res/icons/stone-stairs.png -------------------------------------------------------------------------------- /chunky/src/res/icons/stop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chunky-dev/chunky/91149909322b3ee2cc09e118eb3cb41c3db5518a/chunky/src/res/icons/stop.png -------------------------------------------------------------------------------- /chunky/src/res/icons/sun.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chunky-dev/chunky/91149909322b3ee2cc09e118eb3cb41c3db5518a/chunky/src/res/icons/sun.png -------------------------------------------------------------------------------- /chunky/src/res/icons/unknown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chunky-dev/chunky/91149909322b3ee2cc09e118eb3cb41c3db5518a/chunky/src/res/icons/unknown.png -------------------------------------------------------------------------------- /chunky/src/res/icons/wall-sign.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chunky-dev/chunky/91149909322b3ee2cc09e118eb3cb41c3db5518a/chunky/src/res/icons/wall-sign.png -------------------------------------------------------------------------------- /chunky/src/res/icons/water.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chunky-dev/chunky/91149909322b3ee2cc09e118eb3cb41c3db5518a/chunky/src/res/icons/water.png -------------------------------------------------------------------------------- /chunky/src/res/icons/wheat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chunky-dev/chunky/91149909322b3ee2cc09e118eb3cb41c3db5518a/chunky/src/res/icons/wheat.png -------------------------------------------------------------------------------- /chunky/src/res/icons/wooden-door.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chunky-dev/chunky/91149909322b3ee2cc09e118eb3cb41c3db5518a/chunky/src/res/icons/wooden-door.png -------------------------------------------------------------------------------- /chunky/src/res/icons/wooden-pressure-plate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chunky-dev/chunky/91149909322b3ee2cc09e118eb3cb41c3db5518a/chunky/src/res/icons/wooden-pressure-plate.png -------------------------------------------------------------------------------- /chunky/src/res/icons/wooden-stairs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chunky-dev/chunky/91149909322b3ee2cc09e118eb3cb41c3db5518a/chunky/src/res/icons/wooden-stairs.png -------------------------------------------------------------------------------- /chunky/src/res/icons/wrench.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chunky-dev/chunky/91149909322b3ee2cc09e118eb3cb41c3db5518a/chunky/src/res/icons/wrench.png -------------------------------------------------------------------------------- /chunky/src/res/se/llbit/chunky/main/Version.properties: -------------------------------------------------------------------------------- 1 | # 2021-12-12 03:37:09Z 2 | version=2.5.0 3 | -------------------------------------------------------------------------------- /chunky/src/res/se/llbit/chunky/renderer/projection/gaussian-aperture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chunky-dev/chunky/91149909322b3ee2cc09e118eb3cb41c3db5518a/chunky/src/res/se/llbit/chunky/renderer/projection/gaussian-aperture.png -------------------------------------------------------------------------------- /chunky/src/res/se/llbit/chunky/renderer/projection/hexagon-aperture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chunky-dev/chunky/91149909322b3ee2cc09e118eb3cb41c3db5518a/chunky/src/res/se/llbit/chunky/renderer/projection/hexagon-aperture.png -------------------------------------------------------------------------------- /chunky/src/res/se/llbit/chunky/renderer/projection/pentagon-aperture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chunky-dev/chunky/91149909322b3ee2cc09e118eb3cb41c3db5518a/chunky/src/res/se/llbit/chunky/renderer/projection/pentagon-aperture.png -------------------------------------------------------------------------------- /chunky/src/res/se/llbit/chunky/renderer/projection/star-aperture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chunky-dev/chunky/91149909322b3ee2cc09e118eb3cb41c3db5518a/chunky/src/res/se/llbit/chunky/renderer/projection/star-aperture.png -------------------------------------------------------------------------------- /chunky/src/res/se/llbit/chunky/ui/chunky.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chunky-dev/chunky/91149909322b3ee2cc09e118eb3cb41c3db5518a/chunky/src/res/se/llbit/chunky/ui/chunky.png -------------------------------------------------------------------------------- /chunky/src/res/se/llbit/chunky/ui/dialogs/ErrorDialog.fxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 14 | 15 |

16 | 17 |
18 | 19 | 20 |