From 6829761ab7096f2b9c5455dc81b9961e7f399cf8 Mon Sep 17 00:00:00 2001 From: Motschen Date: Tue, 8 Dec 2020 16:34:11 +0100 Subject: [PATCH] 4.0.0 - First commit to github --- .gitignore | 5 + build.gradle | 9 +- build/loom-cache/midnight-hats-1.0.2.jar | Bin 40008 -> 0 bytes build/loom-cache/midnight-hats-2.0.1.jar | Bin 0 -> 49881 bytes .../mixin-map-1.16.4-1.16.4+build.6-v2.0.tiny | 1 + gradle.properties | 18 +- .../motschen/decorative/DecorativeClient.java | 15 +- .../motschen/decorative/DecorativeMain.java | 16 + .../decorative/block/AcaciaChoppingLog.java | 42 --- .../decorative/block/BirchChoppingLog.java | 42 --- .../{OakChoppingLog.java => ChoppingLog.java} | 8 +- .../decorative/block/DarkOakChoppingLog.java | 42 --- .../decorative/block/DigitalClock.java | 74 ++++ .../decorative/block/JungleChoppingLog.java | 42 --- .../decorative/block/OldTelevision.java | 4 +- .../decorative/block/SmokeDetector.java | 47 +++ .../decorative/block/SpruceChoppingLog.java | 42 --- .../motschen/decorative/block/Television.java | 4 +- .../motschen/decorative/block/WallClock.java | 73 ++++ ...ntity.java => ChoppingLogBlockEntity.java} | 6 +- .../DarkOakChoppingLogBlockEntity.java | 61 ---- ...tity.java => DigitalClockBlockEntity.java} | 55 +-- .../JungleChoppingLogBlockEntity.java | 61 ---- .../blockentity/PoolSprinklerBlockEntity.java | 27 +- .../blockentity/ShowerHeadBlockEntity.java | 27 +- .../blockentity/SmokeDetectorBlockEntity.java | 47 +++ .../SpruceChoppingLogBlockEntity.java | 61 ---- ...kEntity.java => WallClockBlockEntity.java} | 58 +-- .../AcaciaChoppingLogBlockEntityRenderer.java | 52 --- .../BirchChoppingLogBlockEntityRenderer.java | 52 --- ...va => ChoppingLogBlockEntityRenderer.java} | 10 +- ...DarkOakChoppingLogBlockEntityRenderer.java | 52 --- .../block/render/DigitalClockRenderer.java | 86 +++++ .../JungleChoppingLogBlockEntityRenderer.java | 52 --- .../SpruceChoppingLogBlockEntityRenderer.java | 52 --- .../block/render/WallClockRenderer.java | 83 +++++ .../decorative/config/DecorativeConfig.java | 11 + .../decorative/config/ModMenuIntegration.java | 16 + .../decorative/init/BlockEntities.java | 21 +- .../motschen/decorative/init/Clocks.java | 63 ++++ .../decorative/init/LogsWithAxes.java | 12 +- .../decorative/item/BathTireItem.java | 4 +- .../sound/DecorativeSoundEvents.java | 1 + .../decorative/world/OreFeatures.java | 2 +- .../blockstates/black_digital_clock.json | 8 + .../blockstates/blue_digital_clock.json | 8 + .../blockstates/brown_digital_clock.json | 8 + .../blockstates/cyan_digital_clock.json | 8 + .../blockstates/gray_digital_clock.json | 8 + .../blockstates/green_digital_clock.json | 8 + .../blockstates/light_blue_digital_clock.json | 8 + .../blockstates/light_gray_digital_clock.json | 8 + .../blockstates/lime_digital_clock.json | 8 + .../blockstates/magenta_digital_clock.json | 8 + .../blockstates/orange_digital_clock.json | 8 + .../blockstates/pink_digital_clock.json | 8 + .../blockstates/purple_digital_clock.json | 8 + .../blockstates/red_digital_clock.json | 8 + .../blockstates/smoke_detector.json | 6 + .../decorative/blockstates/wall_clock.json | 8 + .../blockstates/white_digital_clock.json | 8 + .../blockstates/yellow_digital_clock.json | 8 + .../materialmaps/block/black_double_lamp.json | 10 + .../materialmaps/block/black_lamp.json | 10 + .../materialmaps/block/blue_double_lamp.json | 10 + .../materialmaps/block/blue_lamp.json | 10 + .../materialmaps/block/brown_double_lamp.json | 10 + .../materialmaps/block/brown_lamp.json | 10 + .../materialmaps/block/christmas_lights.json | 14 + .../materialmaps/block/cyan_double_lamp.json | 10 + .../materialmaps/block/cyan_lamp.json | 10 + .../materialmaps/block/gray_double_lamp.json | 10 + .../materialmaps/block/gray_lamp.json | 10 + .../materialmaps/block/green_double_lamp.json | 10 + .../materialmaps/block/green_lamp.json | 10 + .../block/light_blue_double_lamp.json | 10 + .../materialmaps/block/light_blue_lamp.json | 10 + .../block/light_gray_double_lamp.json | 10 + .../materialmaps/block/light_gray_lamp.json | 10 + .../materialmaps/block/lime_double_lamp.json | 10 + .../materialmaps/block/lime_lamp.json | 10 + .../block/magenta_double_lamp.json | 10 + .../materialmaps/block/magenta_lamp.json | 10 + .../materialmaps/block/old_television.json | 26 ++ .../block/orange_double_lamp.json | 10 + .../materialmaps/block/orange_lamp.json | 10 + .../materialmaps/block/pink_double_lamp.json | 10 + .../materialmaps/block/pink_lamp.json | 10 + .../block/purple_double_lamp.json | 10 + .../materialmaps/block/purple_lamp.json | 10 + .../materialmaps/block/red_double_lamp.json | 10 + .../materialmaps/block/red_lamp.json | 10 + .../materialmaps/block/television.json | 22 ++ .../materialmaps/block/white_double_lamp.json | 10 + .../materialmaps/block/white_lamp.json | 10 + .../block/yellow_double_lamp.json | 10 + .../materialmaps/block/yellow_lamp.json | 10 + .../digital_clock_blockentity.json | 12 + .../models/block/black_digital_clock.json | 6 + .../models/block/blue_digital_clock.json | 6 + .../models/block/brown_digital_clock.json | 6 + .../models/block/cyan_digital_clock.json | 6 + .../models/block/digital_clock.json | 126 +++++++ .../models/block/gray_digital_clock.json | 6 + .../models/block/green_digital_clock.json | 6 + .../block/light_blue_digital_clock.json | 6 + .../block/light_gray_digital_clock.json | 6 + .../models/block/lime_digital_clock.json | 6 + .../models/block/magenta_digital_clock.json | 6 + .../models/block/orange_digital_clock.json | 6 + .../models/block/pink_digital_clock.json | 6 + .../models/block/purple_digital_clock.json | 6 + .../models/block/red_digital_clock.json | 6 + .../models/block/smoke_detector_off.json | 111 ++++++ .../models/block/smoke_detector_on.json | 6 + .../decorative/models/block/wall_clock.json | 330 ++++++++++++++++++ .../models/block/white_digital_clock.json | 6 + .../models/block/yellow_digital_clock.json | 6 + .../models/item/black_digital_clock.json | 6 + .../models/item/blue_digital_clock.json | 6 + .../models/item/brown_digital_clock.json | 6 + .../models/item/cyan_digital_clock.json | 6 + .../models/item/gray_digital_clock.json | 6 + .../models/item/green_digital_clock.json | 6 + .../models/item/light_blue_digital_clock.json | 6 + .../models/item/light_gray_digital_clock.json | 6 + .../models/item/lime_digital_clock.json | 6 + .../models/item/magenta_digital_clock.json | 6 + .../models/item/orange_digital_clock.json | 6 + .../models/item/pink_digital_clock.json | 6 + .../models/item/purple_digital_clock.json | 6 + .../models/item/red_digital_clock.json | 6 + .../models/item/smoke_detector.json | 3 + .../decorative/models/item/wall_clock.json | 3 + .../models/item/white_digital_clock.json | 6 + .../models/item/yellow_digital_clock.json | 6 + .../resources/assets/decorative/sounds.json | 10 +- .../sounds/block/smoke_detector_beep.ogg | Bin 0 -> 49616 bytes .../textures/block/alarm_light_off.png | Bin 0 -> 139 bytes .../textures/block/alarm_light_on.png | Bin 0 -> 154 bytes .../textures/block/alarm_light_on.png.mcmeta | 5 + .../decorative/textures/block/clock.png | Bin 0 -> 720 bytes src/main/resources/fabric.mod.json | 3 + 143 files changed, 2012 insertions(+), 769 deletions(-) delete mode 100644 build/loom-cache/midnight-hats-1.0.2.jar create mode 100644 build/loom-cache/midnight-hats-2.0.1.jar create mode 100644 build/loom-cache/mixin-map-1.16.4-1.16.4+build.6-v2.0.tiny delete mode 100644 src/main/java/eu/midnightdust/motschen/decorative/block/AcaciaChoppingLog.java delete mode 100644 src/main/java/eu/midnightdust/motschen/decorative/block/BirchChoppingLog.java rename src/main/java/eu/midnightdust/motschen/decorative/block/{OakChoppingLog.java => ChoppingLog.java} (83%) delete mode 100644 src/main/java/eu/midnightdust/motschen/decorative/block/DarkOakChoppingLog.java create mode 100644 src/main/java/eu/midnightdust/motschen/decorative/block/DigitalClock.java delete mode 100644 src/main/java/eu/midnightdust/motschen/decorative/block/JungleChoppingLog.java create mode 100644 src/main/java/eu/midnightdust/motschen/decorative/block/SmokeDetector.java delete mode 100644 src/main/java/eu/midnightdust/motschen/decorative/block/SpruceChoppingLog.java create mode 100644 src/main/java/eu/midnightdust/motschen/decorative/block/WallClock.java rename src/main/java/eu/midnightdust/motschen/decorative/block/blockentity/{OakChoppingLogBlockEntity.java => ChoppingLogBlockEntity.java} (89%) delete mode 100644 src/main/java/eu/midnightdust/motschen/decorative/block/blockentity/DarkOakChoppingLogBlockEntity.java rename src/main/java/eu/midnightdust/motschen/decorative/block/blockentity/{AcaciaChoppingLogBlockEntity.java => DigitalClockBlockEntity.java} (60%) delete mode 100644 src/main/java/eu/midnightdust/motschen/decorative/block/blockentity/JungleChoppingLogBlockEntity.java create mode 100644 src/main/java/eu/midnightdust/motschen/decorative/block/blockentity/SmokeDetectorBlockEntity.java delete mode 100644 src/main/java/eu/midnightdust/motschen/decorative/block/blockentity/SpruceChoppingLogBlockEntity.java rename src/main/java/eu/midnightdust/motschen/decorative/block/blockentity/{BirchChoppingLogBlockEntity.java => WallClockBlockEntity.java} (54%) delete mode 100644 src/main/java/eu/midnightdust/motschen/decorative/block/render/AcaciaChoppingLogBlockEntityRenderer.java delete mode 100644 src/main/java/eu/midnightdust/motschen/decorative/block/render/BirchChoppingLogBlockEntityRenderer.java rename src/main/java/eu/midnightdust/motschen/decorative/block/render/{OakChoppingLogBlockEntityRenderer.java => ChoppingLogBlockEntityRenderer.java} (74%) delete mode 100644 src/main/java/eu/midnightdust/motschen/decorative/block/render/DarkOakChoppingLogBlockEntityRenderer.java create mode 100644 src/main/java/eu/midnightdust/motschen/decorative/block/render/DigitalClockRenderer.java delete mode 100644 src/main/java/eu/midnightdust/motschen/decorative/block/render/JungleChoppingLogBlockEntityRenderer.java delete mode 100644 src/main/java/eu/midnightdust/motschen/decorative/block/render/SpruceChoppingLogBlockEntityRenderer.java create mode 100644 src/main/java/eu/midnightdust/motschen/decorative/block/render/WallClockRenderer.java create mode 100644 src/main/java/eu/midnightdust/motschen/decorative/config/DecorativeConfig.java create mode 100644 src/main/java/eu/midnightdust/motschen/decorative/config/ModMenuIntegration.java create mode 100644 src/main/java/eu/midnightdust/motschen/decorative/init/Clocks.java create mode 100644 src/main/resources/assets/decorative/blockstates/black_digital_clock.json create mode 100644 src/main/resources/assets/decorative/blockstates/blue_digital_clock.json create mode 100644 src/main/resources/assets/decorative/blockstates/brown_digital_clock.json create mode 100644 src/main/resources/assets/decorative/blockstates/cyan_digital_clock.json create mode 100644 src/main/resources/assets/decorative/blockstates/gray_digital_clock.json create mode 100644 src/main/resources/assets/decorative/blockstates/green_digital_clock.json create mode 100644 src/main/resources/assets/decorative/blockstates/light_blue_digital_clock.json create mode 100644 src/main/resources/assets/decorative/blockstates/light_gray_digital_clock.json create mode 100644 src/main/resources/assets/decorative/blockstates/lime_digital_clock.json create mode 100644 src/main/resources/assets/decorative/blockstates/magenta_digital_clock.json create mode 100644 src/main/resources/assets/decorative/blockstates/orange_digital_clock.json create mode 100644 src/main/resources/assets/decorative/blockstates/pink_digital_clock.json create mode 100644 src/main/resources/assets/decorative/blockstates/purple_digital_clock.json create mode 100644 src/main/resources/assets/decorative/blockstates/red_digital_clock.json create mode 100644 src/main/resources/assets/decorative/blockstates/smoke_detector.json create mode 100644 src/main/resources/assets/decorative/blockstates/wall_clock.json create mode 100644 src/main/resources/assets/decorative/blockstates/white_digital_clock.json create mode 100644 src/main/resources/assets/decorative/blockstates/yellow_digital_clock.json create mode 100644 src/main/resources/assets/decorative/materialmaps/block/black_double_lamp.json create mode 100644 src/main/resources/assets/decorative/materialmaps/block/black_lamp.json create mode 100644 src/main/resources/assets/decorative/materialmaps/block/blue_double_lamp.json create mode 100644 src/main/resources/assets/decorative/materialmaps/block/blue_lamp.json create mode 100644 src/main/resources/assets/decorative/materialmaps/block/brown_double_lamp.json create mode 100644 src/main/resources/assets/decorative/materialmaps/block/brown_lamp.json create mode 100644 src/main/resources/assets/decorative/materialmaps/block/christmas_lights.json create mode 100644 src/main/resources/assets/decorative/materialmaps/block/cyan_double_lamp.json create mode 100644 src/main/resources/assets/decorative/materialmaps/block/cyan_lamp.json create mode 100644 src/main/resources/assets/decorative/materialmaps/block/gray_double_lamp.json create mode 100644 src/main/resources/assets/decorative/materialmaps/block/gray_lamp.json create mode 100644 src/main/resources/assets/decorative/materialmaps/block/green_double_lamp.json create mode 100644 src/main/resources/assets/decorative/materialmaps/block/green_lamp.json create mode 100644 src/main/resources/assets/decorative/materialmaps/block/light_blue_double_lamp.json create mode 100644 src/main/resources/assets/decorative/materialmaps/block/light_blue_lamp.json create mode 100644 src/main/resources/assets/decorative/materialmaps/block/light_gray_double_lamp.json create mode 100644 src/main/resources/assets/decorative/materialmaps/block/light_gray_lamp.json create mode 100644 src/main/resources/assets/decorative/materialmaps/block/lime_double_lamp.json create mode 100644 src/main/resources/assets/decorative/materialmaps/block/lime_lamp.json create mode 100644 src/main/resources/assets/decorative/materialmaps/block/magenta_double_lamp.json create mode 100644 src/main/resources/assets/decorative/materialmaps/block/magenta_lamp.json create mode 100644 src/main/resources/assets/decorative/materialmaps/block/old_television.json create mode 100644 src/main/resources/assets/decorative/materialmaps/block/orange_double_lamp.json create mode 100644 src/main/resources/assets/decorative/materialmaps/block/orange_lamp.json create mode 100644 src/main/resources/assets/decorative/materialmaps/block/pink_double_lamp.json create mode 100644 src/main/resources/assets/decorative/materialmaps/block/pink_lamp.json create mode 100644 src/main/resources/assets/decorative/materialmaps/block/purple_double_lamp.json create mode 100644 src/main/resources/assets/decorative/materialmaps/block/purple_lamp.json create mode 100644 src/main/resources/assets/decorative/materialmaps/block/red_double_lamp.json create mode 100644 src/main/resources/assets/decorative/materialmaps/block/red_lamp.json create mode 100644 src/main/resources/assets/decorative/materialmaps/block/television.json create mode 100644 src/main/resources/assets/decorative/materialmaps/block/white_double_lamp.json create mode 100644 src/main/resources/assets/decorative/materialmaps/block/white_lamp.json create mode 100644 src/main/resources/assets/decorative/materialmaps/block/yellow_double_lamp.json create mode 100644 src/main/resources/assets/decorative/materialmaps/block/yellow_lamp.json create mode 100644 src/main/resources/assets/decorative/materialmaps/block_entity/digital_clock_blockentity.json create mode 100644 src/main/resources/assets/decorative/models/block/black_digital_clock.json create mode 100644 src/main/resources/assets/decorative/models/block/blue_digital_clock.json create mode 100644 src/main/resources/assets/decorative/models/block/brown_digital_clock.json create mode 100644 src/main/resources/assets/decorative/models/block/cyan_digital_clock.json create mode 100644 src/main/resources/assets/decorative/models/block/digital_clock.json create mode 100644 src/main/resources/assets/decorative/models/block/gray_digital_clock.json create mode 100644 src/main/resources/assets/decorative/models/block/green_digital_clock.json create mode 100644 src/main/resources/assets/decorative/models/block/light_blue_digital_clock.json create mode 100644 src/main/resources/assets/decorative/models/block/light_gray_digital_clock.json create mode 100644 src/main/resources/assets/decorative/models/block/lime_digital_clock.json create mode 100644 src/main/resources/assets/decorative/models/block/magenta_digital_clock.json create mode 100644 src/main/resources/assets/decorative/models/block/orange_digital_clock.json create mode 100644 src/main/resources/assets/decorative/models/block/pink_digital_clock.json create mode 100644 src/main/resources/assets/decorative/models/block/purple_digital_clock.json create mode 100644 src/main/resources/assets/decorative/models/block/red_digital_clock.json create mode 100644 src/main/resources/assets/decorative/models/block/smoke_detector_off.json create mode 100644 src/main/resources/assets/decorative/models/block/smoke_detector_on.json create mode 100644 src/main/resources/assets/decorative/models/block/wall_clock.json create mode 100644 src/main/resources/assets/decorative/models/block/white_digital_clock.json create mode 100644 src/main/resources/assets/decorative/models/block/yellow_digital_clock.json create mode 100644 src/main/resources/assets/decorative/models/item/black_digital_clock.json create mode 100644 src/main/resources/assets/decorative/models/item/blue_digital_clock.json create mode 100644 src/main/resources/assets/decorative/models/item/brown_digital_clock.json create mode 100644 src/main/resources/assets/decorative/models/item/cyan_digital_clock.json create mode 100644 src/main/resources/assets/decorative/models/item/gray_digital_clock.json create mode 100644 src/main/resources/assets/decorative/models/item/green_digital_clock.json create mode 100644 src/main/resources/assets/decorative/models/item/light_blue_digital_clock.json create mode 100644 src/main/resources/assets/decorative/models/item/light_gray_digital_clock.json create mode 100644 src/main/resources/assets/decorative/models/item/lime_digital_clock.json create mode 100644 src/main/resources/assets/decorative/models/item/magenta_digital_clock.json create mode 100644 src/main/resources/assets/decorative/models/item/orange_digital_clock.json create mode 100644 src/main/resources/assets/decorative/models/item/pink_digital_clock.json create mode 100644 src/main/resources/assets/decorative/models/item/purple_digital_clock.json create mode 100644 src/main/resources/assets/decorative/models/item/red_digital_clock.json create mode 100644 src/main/resources/assets/decorative/models/item/smoke_detector.json create mode 100644 src/main/resources/assets/decorative/models/item/wall_clock.json create mode 100644 src/main/resources/assets/decorative/models/item/white_digital_clock.json create mode 100644 src/main/resources/assets/decorative/models/item/yellow_digital_clock.json create mode 100644 src/main/resources/assets/decorative/sounds/block/smoke_detector_beep.ogg create mode 100644 src/main/resources/assets/decorative/textures/block/alarm_light_off.png create mode 100644 src/main/resources/assets/decorative/textures/block/alarm_light_on.png create mode 100644 src/main/resources/assets/decorative/textures/block/alarm_light_on.png.mcmeta create mode 100644 src/main/resources/assets/decorative/textures/block/clock.png diff --git a/.gitignore b/.gitignore index d6cf9c1..e5d8d28 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,11 @@ # gradle .gradle/ +build/classes/ +build/generated/ +build/libs/ +build/resources/ +build/tmp/ out/ classes/ diff --git a/build.gradle b/build.gradle index c8a7337..247a3cb 100644 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,5 @@ plugins { - id 'fabric-loom' version '0.4-SNAPSHOT' + id 'fabric-loom' version '0.5-SNAPSHOT' id 'maven-publish' } @@ -14,6 +14,7 @@ minecraft { } repositories { + maven { url = 'https://raw.githubusercontent.com/Devan-Kerman/Devan-Repo/master/'} maven { url "https://jitpack.io" } maven { url "https://maven.blamejared.com" } } @@ -28,8 +29,10 @@ dependencies { modCompile "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}" modCompile("vazkii.patchouli:Patchouli:${project.patchouli_version}") - // PSA: Some older mods, compiled on Loom 0.2.1, might have outdated Maven POMs. - // You may need to force-disable transitiveness on them. + + modImplementation ("me.sargunvohra.mcmods:autoconfig1u:${project.auto_config_version}") + modImplementation ("me.shedaniel.cloth:config-2:${project.cloth_config_version}") + modImplementation ("io.github.prospector:modmenu:${project.mod_menu_version}") modImplementation "eu.midnightdust:midnight-hats:${midnighthats_version}" include "eu.midnightdust:midnight-hats:${midnighthats_version}" diff --git a/build/loom-cache/midnight-hats-1.0.2.jar b/build/loom-cache/midnight-hats-1.0.2.jar deleted file mode 100644 index 1668bd6eb30fad30ee391ca309b43bf5959ef50c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40008 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%0AwE5Q| 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 eaQa)%UNi=LefodELA8|t diff --git a/build/loom-cache/midnight-hats-2.0.1.jar b/build/loom-cache/midnight-hats-2.0.1.jar new file mode 100644 index 0000000000000000000000000000000000000000..d712a553c9619e9b1fa5da7dda0b1506694d44f4 GIT binary patch literal 49881 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 D?#yah literal 0 HcmV?d00001 diff --git a/build/loom-cache/mixin-map-1.16.4-1.16.4+build.6-v2.0.tiny b/build/loom-cache/mixin-map-1.16.4-1.16.4+build.6-v2.0.tiny new file mode 100644 index 0000000..afd84f3 --- /dev/null +++ b/build/loom-cache/mixin-map-1.16.4-1.16.4+build.6-v2.0.tiny @@ -0,0 +1 @@ +v1 named intermediary diff --git a/gradle.properties b/gradle.properties index 304d987..245e5f7 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,19 +1,23 @@ # Done to increase the memory available to gradle. -org.gradle.jvmargs=-Xmx1G +org.gradle.jvmargs=-Xmx2G # Fabric Properties # check these on https://fabricmc.net/use - minecraft_version=1.16.2 - yarn_mappings=1.16.2+build.6 - loader_version=0.9.1+build.205 + minecraft_version=1.16.4 + yarn_mappings=1.16.4+build.6 + loader_version=0.10.6+build.214 # Mod Properties - mod_version = 3.0.0 + mod_version = 4.0.0-dev maven_group = eu.midnightdust.motschen archives_base_name = decorative # Dependencies # currently not on the main fabric site, check on the maven: https://maven.fabricmc.net/net/fabricmc/fabric-api/fabric-api - fabric_version=0.17.2+build.396-1.16 + fabric_version=0.25.1+build.416-1.16 patchouli_version=1.16-40-FABRIC - midnighthats_version=1.0.2 + midnighthats_version=2.0.1 + + auto_config_version = 3.2.0-unstable + cloth_config_version = 4.7.0-unstable + mod_menu_version = 1.14.6+build.31 diff --git a/src/main/java/eu/midnightdust/motschen/decorative/DecorativeClient.java b/src/main/java/eu/midnightdust/motschen/decorative/DecorativeClient.java index 9f9d6cf..3fea594 100644 --- a/src/main/java/eu/midnightdust/motschen/decorative/DecorativeClient.java +++ b/src/main/java/eu/midnightdust/motschen/decorative/DecorativeClient.java @@ -8,6 +8,7 @@ import eu.midnightdust.motschen.decorative.init.Pool; import eu.midnightdust.motschen.decorative.init.Signs; import net.fabricmc.api.ClientModInitializer; import net.fabricmc.fabric.api.blockrenderlayer.v1.BlockRenderLayerMap; +import net.fabricmc.fabric.api.client.model.ModelLoadingRegistry; import net.fabricmc.fabric.api.client.rendereregistry.v1.BlockEntityRendererRegistry; import net.fabricmc.fabric.api.client.rendereregistry.v1.EntityRendererRegistry; import net.fabricmc.fabric.api.client.rendering.v1.ColorProviderRegistry; @@ -15,6 +16,10 @@ import net.minecraft.block.Block; import net.minecraft.block.Blocks; import net.minecraft.client.color.block.BlockColorProvider; import net.minecraft.client.render.RenderLayer; +import net.minecraft.client.render.model.UnbakedModel; +import net.minecraft.command.argument.ItemEnchantmentArgumentType; + +import java.util.function.Supplier; public class DecorativeClient implements ClientModInitializer { @@ -64,17 +69,15 @@ public class DecorativeClient implements ClientModInitializer { BlockRenderLayerMap.INSTANCE.putBlocks(RenderLayer.getCutout(),DecorativeMain.ChristmasTree); BlockRenderLayerMap.INSTANCE.putBlocks(RenderLayer.getCutout(),DecorativeMain.CeilingFan); BlockRenderLayerMap.INSTANCE.putBlocks(RenderLayer.getCutout(),DecorativeMain.SlidingDoor); + BlockRenderLayerMap.INSTANCE.putBlocks(RenderLayer.getCutout(),DecorativeMain.WallClock); BlockRenderLayerMap.INSTANCE.putBlocks(RenderLayer.getTranslucent(),DecorativeMain.BirdBath); BlockEntityRendererRegistry.INSTANCE.register(BlockEntities.CeilingFanBlockEntity, CeilingFanRenderer::new); - BlockEntityRendererRegistry.INSTANCE.register(BlockEntities.OakChoppingLogBlockEntity, OakChoppingLogBlockEntityRenderer::new); - BlockEntityRendererRegistry.INSTANCE.register(BlockEntities.SpruceChoppingLogBlockEntity, SpruceChoppingLogBlockEntityRenderer::new); - BlockEntityRendererRegistry.INSTANCE.register(BlockEntities.BirchChoppingLogBlockEntity, BirchChoppingLogBlockEntityRenderer::new); - BlockEntityRendererRegistry.INSTANCE.register(BlockEntities.AcaciaChoppingLogBlockEntity, AcaciaChoppingLogBlockEntityRenderer::new); - BlockEntityRendererRegistry.INSTANCE.register(BlockEntities.JungleChoppingLogBlockEntity, JungleChoppingLogBlockEntityRenderer::new); - BlockEntityRendererRegistry.INSTANCE.register(BlockEntities.DarkOakChoppingLogBlockEntity, DarkOakChoppingLogBlockEntityRenderer::new); + BlockEntityRendererRegistry.INSTANCE.register(BlockEntities.ChoppingLogBlockEntity, ChoppingLogBlockEntityRenderer::new); + BlockEntityRendererRegistry.INSTANCE.register(BlockEntities.WallClockBlockEntity, WallClockRenderer::new); + BlockEntityRendererRegistry.INSTANCE.register(BlockEntities.DigitalClockBlockEntity, DigitalClockRenderer::new); } public void registerBlockColor(Block block, Block templateBlock) { ColorProviderRegistry.BLOCK.register((type, pos, world, layer) -> { diff --git a/src/main/java/eu/midnightdust/motschen/decorative/DecorativeMain.java b/src/main/java/eu/midnightdust/motschen/decorative/DecorativeMain.java index 5e9b168..719c947 100644 --- a/src/main/java/eu/midnightdust/motschen/decorative/DecorativeMain.java +++ b/src/main/java/eu/midnightdust/motschen/decorative/DecorativeMain.java @@ -5,9 +5,13 @@ import eu.midnightdust.motschen.decorative.blockstates.CeilingFanStage; import eu.midnightdust.motschen.decorative.blockstates.Part; import eu.midnightdust.motschen.decorative.blockstates.PoolShape; import eu.midnightdust.motschen.decorative.blockstates.Program; +import eu.midnightdust.motschen.decorative.config.DecorativeConfig; import eu.midnightdust.motschen.decorative.init.*; +import eu.midnightdust.motschen.decorative.sound.DecorativeSoundEvents; import eu.midnightdust.motschen.decorative.world.OreFeatureInjector; import eu.midnightdust.motschen.decorative.world.OreFeatures; +import me.sargunvohra.mcmods.autoconfig1u.AutoConfig; +import me.sargunvohra.mcmods.autoconfig1u.serializer.JanksonConfigSerializer; import net.fabricmc.api.ModInitializer; import net.fabricmc.fabric.api.client.itemgroup.FabricItemGroupBuilder; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; @@ -20,6 +24,7 @@ import net.minecraft.util.registry.Registry; public class DecorativeMain implements ModInitializer { public static final String MOD_ID = "decorative"; + public static DecorativeConfig DECORATIVE_CONFIG; public static final ItemGroup IndoorGroup = FabricItemGroupBuilder.build(new Identifier(MOD_ID, "indoor"), () -> new ItemStack(DecorativeMain.Television)); public static final ItemGroup TrafficGroup = FabricItemGroupBuilder.build(new Identifier(MOD_ID, "traffic"), () -> new ItemStack(DecorativeMain.TrafficCone)); @@ -47,9 +52,14 @@ public class DecorativeMain implements ModInitializer { public static Block ChristmasTree = new ChristmasTree(); public static Block ChristmasLights = new ChristmasLights(); public static Block ShowerHead = new ShowerHead(); + public static Block WallClock = new WallClock(); + public static Block SmokeDetector = new SmokeDetector(); @Override public void onInitialize() { + AutoConfig.register(DecorativeConfig.class, JanksonConfigSerializer::new); + DECORATIVE_CONFIG = AutoConfig.getConfigHolder(DecorativeConfig.class).getConfig(); + BlockEntities.init(); // Traffic // Registry.register(Registry.BLOCK, new Identifier(MOD_ID,"rocky_asphalt"), RockyAsphalt); @@ -81,6 +91,8 @@ public class DecorativeMain implements ModInitializer { //Furniture// Registry.register(Registry.BLOCK, new Identifier(MOD_ID,"kitchen_tiles"), KitchenTiles); Registry.register(Registry.ITEM, new Identifier(MOD_ID,"kitchen_tiles"), new BlockItem(KitchenTiles, new Item.Settings().group(DecorativeMain.IndoorGroup))); + Registry.register(Registry.BLOCK, new Identifier(MOD_ID,"wall_clock"), WallClock); + Registry.register(Registry.ITEM, new Identifier(MOD_ID,"wall_clock"), new BlockItem(WallClock, new Item.Settings().group(DecorativeMain.IndoorGroup))); Registry.register(Registry.BLOCK, new Identifier(MOD_ID,"television"), Television); Registry.register(Registry.ITEM, new Identifier(MOD_ID,"television"), new BlockItem(Television, new Item.Settings().group(DecorativeMain.IndoorGroup))); Registry.register(Registry.BLOCK, new Identifier(MOD_ID,"old_television"), OldTelevision); @@ -95,10 +107,14 @@ public class DecorativeMain implements ModInitializer { Registry.register(Registry.ITEM, new Identifier(MOD_ID,"christmas_tree"), new BlockItem(ChristmasTree, new Item.Settings().group(DecorativeMain.IndoorGroup))); Registry.register(Registry.BLOCK, new Identifier(MOD_ID,"christmas_lights"), ChristmasLights); Registry.register(Registry.ITEM, new Identifier(MOD_ID,"christmas_lights"), new BlockItem(ChristmasLights, new Item.Settings().group(DecorativeMain.IndoorGroup))); + Registry.register(Registry.BLOCK, new Identifier(MOD_ID,"smoke_detector"), SmokeDetector); + Registry.register(Registry.ITEM, new Identifier(MOD_ID,"smoke_detector"), new BlockItem(SmokeDetector, new Item.Settings().group(DecorativeMain.IndoorGroup))); Lamps.init(); DoubleLamps.init(); + Clocks.init(); OreFeatures.init(); OreFeatureInjector.init(); + new DecorativeSoundEvents(); } } diff --git a/src/main/java/eu/midnightdust/motschen/decorative/block/AcaciaChoppingLog.java b/src/main/java/eu/midnightdust/motschen/decorative/block/AcaciaChoppingLog.java deleted file mode 100644 index 5d18ff9..0000000 --- a/src/main/java/eu/midnightdust/motschen/decorative/block/AcaciaChoppingLog.java +++ /dev/null @@ -1,42 +0,0 @@ -package eu.midnightdust.motschen.decorative.block; - -import eu.midnightdust.motschen.decorative.block.blockentity.AcaciaChoppingLogBlockEntity; -import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; -import net.minecraft.block.*; -import net.minecraft.block.entity.BlockEntity; -import net.minecraft.item.ItemPlacementContext; -import net.minecraft.sound.BlockSoundGroup; -import net.minecraft.state.StateManager; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Direction; -import net.minecraft.world.BlockView; -import net.minecraft.world.WorldView; - -public class AcaciaChoppingLog extends HorizontalFacingBlock implements BlockEntityProvider { - - public AcaciaChoppingLog() { - super(FabricBlockSettings.copy(Blocks.OAK_PLANKS).nonOpaque().sounds(BlockSoundGroup.WOOD)); - this.setDefaultState(this.stateManager.getDefaultState().with(FACING, Direction.NORTH)); - } - - @Override - public BlockState getPlacementState(ItemPlacementContext itemPlacementContext) { - return super.getPlacementState(itemPlacementContext) - .with(FACING, itemPlacementContext.getPlayerFacing().getOpposite()); - } - - @Override - protected void appendProperties(StateManager.Builder builder) { - builder.add(FACING); - } - - public boolean canPlaceAt(BlockState state, WorldView worldView, BlockPos pos) { - return !worldView.isAir(pos.down()); - } - - @Override - public BlockEntity createBlockEntity(BlockView view) { - return new AcaciaChoppingLogBlockEntity(); - } - -} diff --git a/src/main/java/eu/midnightdust/motschen/decorative/block/BirchChoppingLog.java b/src/main/java/eu/midnightdust/motschen/decorative/block/BirchChoppingLog.java deleted file mode 100644 index 23479bf..0000000 --- a/src/main/java/eu/midnightdust/motschen/decorative/block/BirchChoppingLog.java +++ /dev/null @@ -1,42 +0,0 @@ -package eu.midnightdust.motschen.decorative.block; - -import eu.midnightdust.motschen.decorative.block.blockentity.BirchChoppingLogBlockEntity; -import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; -import net.minecraft.block.*; -import net.minecraft.block.entity.BlockEntity; -import net.minecraft.item.ItemPlacementContext; -import net.minecraft.sound.BlockSoundGroup; -import net.minecraft.state.StateManager; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Direction; -import net.minecraft.world.BlockView; -import net.minecraft.world.WorldView; - -public class BirchChoppingLog extends HorizontalFacingBlock implements BlockEntityProvider { - - public BirchChoppingLog() { - super(FabricBlockSettings.copy(Blocks.OAK_PLANKS).nonOpaque().sounds(BlockSoundGroup.WOOD)); - this.setDefaultState(this.stateManager.getDefaultState().with(FACING, Direction.NORTH)); - } - - @Override - public BlockState getPlacementState(ItemPlacementContext itemPlacementContext) { - return super.getPlacementState(itemPlacementContext) - .with(FACING, itemPlacementContext.getPlayerFacing().getOpposite()); - } - - @Override - protected void appendProperties(StateManager.Builder builder) { - builder.add(FACING); - } - - public boolean canPlaceAt(BlockState state, WorldView worldView, BlockPos pos) { - return !worldView.isAir(pos.down()); - } - - @Override - public BlockEntity createBlockEntity(BlockView view) { - return new BirchChoppingLogBlockEntity(); - } - -} diff --git a/src/main/java/eu/midnightdust/motschen/decorative/block/OakChoppingLog.java b/src/main/java/eu/midnightdust/motschen/decorative/block/ChoppingLog.java similarity index 83% rename from src/main/java/eu/midnightdust/motschen/decorative/block/OakChoppingLog.java rename to src/main/java/eu/midnightdust/motschen/decorative/block/ChoppingLog.java index 41874e1..2e0b51d 100644 --- a/src/main/java/eu/midnightdust/motschen/decorative/block/OakChoppingLog.java +++ b/src/main/java/eu/midnightdust/motschen/decorative/block/ChoppingLog.java @@ -1,6 +1,6 @@ package eu.midnightdust.motschen.decorative.block; -import eu.midnightdust.motschen.decorative.block.blockentity.OakChoppingLogBlockEntity; +import eu.midnightdust.motschen.decorative.block.blockentity.ChoppingLogBlockEntity; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.block.*; import net.minecraft.block.entity.BlockEntity; @@ -12,9 +12,9 @@ import net.minecraft.util.math.Direction; import net.minecraft.world.BlockView; import net.minecraft.world.WorldView; -public class OakChoppingLog extends HorizontalFacingBlock implements BlockEntityProvider { +public class ChoppingLog extends HorizontalFacingBlock implements BlockEntityProvider { - public OakChoppingLog() { + public ChoppingLog() { super(FabricBlockSettings.copy(Blocks.OAK_PLANKS).nonOpaque().sounds(BlockSoundGroup.WOOD)); this.setDefaultState(this.stateManager.getDefaultState().with(FACING, Direction.NORTH)); } @@ -36,7 +36,7 @@ public class OakChoppingLog extends HorizontalFacingBlock implements BlockEntity @Override public BlockEntity createBlockEntity(BlockView view) { - return new OakChoppingLogBlockEntity(); + return new ChoppingLogBlockEntity(); } } diff --git a/src/main/java/eu/midnightdust/motschen/decorative/block/DarkOakChoppingLog.java b/src/main/java/eu/midnightdust/motschen/decorative/block/DarkOakChoppingLog.java deleted file mode 100644 index 5f045d4..0000000 --- a/src/main/java/eu/midnightdust/motschen/decorative/block/DarkOakChoppingLog.java +++ /dev/null @@ -1,42 +0,0 @@ -package eu.midnightdust.motschen.decorative.block; - -import eu.midnightdust.motschen.decorative.block.blockentity.DarkOakChoppingLogBlockEntity; -import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; -import net.minecraft.block.*; -import net.minecraft.block.entity.BlockEntity; -import net.minecraft.item.ItemPlacementContext; -import net.minecraft.sound.BlockSoundGroup; -import net.minecraft.state.StateManager; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Direction; -import net.minecraft.world.BlockView; -import net.minecraft.world.WorldView; - -public class DarkOakChoppingLog extends HorizontalFacingBlock implements BlockEntityProvider { - - public DarkOakChoppingLog() { - super(FabricBlockSettings.copy(Blocks.OAK_PLANKS).nonOpaque().sounds(BlockSoundGroup.WOOD)); - this.setDefaultState(this.stateManager.getDefaultState().with(FACING, Direction.NORTH)); - } - - @Override - public BlockState getPlacementState(ItemPlacementContext itemPlacementContext) { - return super.getPlacementState(itemPlacementContext) - .with(FACING, itemPlacementContext.getPlayerFacing().getOpposite()); - } - - @Override - protected void appendProperties(StateManager.Builder builder) { - builder.add(FACING); - } - - public boolean canPlaceAt(BlockState state, WorldView worldView, BlockPos pos) { - return !worldView.isAir(pos.down()); - } - - @Override - public BlockEntity createBlockEntity(BlockView view) { - return new DarkOakChoppingLogBlockEntity(); - } - -} diff --git a/src/main/java/eu/midnightdust/motschen/decorative/block/DigitalClock.java b/src/main/java/eu/midnightdust/motschen/decorative/block/DigitalClock.java new file mode 100644 index 0000000..329237a --- /dev/null +++ b/src/main/java/eu/midnightdust/motschen/decorative/block/DigitalClock.java @@ -0,0 +1,74 @@ +package eu.midnightdust.motschen.decorative.block; + +import eu.midnightdust.motschen.decorative.block.blockentity.DigitalClockBlockEntity; +import eu.midnightdust.motschen.decorative.block.blockentity.WallClockBlockEntity; +import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; +import net.minecraft.block.*; +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.item.ItemPlacementContext; +import net.minecraft.sound.BlockSoundGroup; +import net.minecraft.state.StateManager; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Direction; +import net.minecraft.util.shape.VoxelShape; +import net.minecraft.util.shape.VoxelShapes; +import net.minecraft.world.BlockView; + +public class DigitalClock extends HorizontalFacingBlock implements BlockEntityProvider { + private static final VoxelShape NORTH_SHAPE; + private static final VoxelShape EAST_SHAPE; + private static final VoxelShape SOUTH_SHAPE; + private static final VoxelShape WEST_SHAPE; + + public DigitalClock() { + super(FabricBlockSettings.copy(Blocks.SMOOTH_QUARTZ).nonOpaque().sounds(BlockSoundGroup.STONE)); + this.setDefaultState(this.stateManager.getDefaultState().with(FACING, Direction.NORTH)); + } + + @Override + public BlockEntity createBlockEntity(BlockView view) { + return new DigitalClockBlockEntity(); + } + + @Override + protected void appendProperties(StateManager.Builder builder) { + builder.add(FACING); + } + + @Override + public BlockState getPlacementState(ItemPlacementContext itemPlacementContext) { + return super.getPlacementState(itemPlacementContext) + .with(FACING, itemPlacementContext.getPlayerFacing().getOpposite()); + } + + @Override + public VoxelShape getOutlineShape(BlockState state, BlockView view, BlockPos pos, ShapeContext context) { + switch (state.get(FACING)) { + case NORTH: return NORTH_SHAPE; + case EAST: return EAST_SHAPE; + case SOUTH: return SOUTH_SHAPE; + case WEST: return WEST_SHAPE; + default: return super.getOutlineShape(state, view, pos, context); + } + } + static { + VoxelShape shape = createCuboidShape(1, 0, 5, 15, 8, 13); + + NORTH_SHAPE = shape; + WEST_SHAPE = rotate(Direction.EAST, Direction.NORTH, shape); + EAST_SHAPE = rotate(Direction.EAST, Direction.SOUTH, shape); + SOUTH_SHAPE = rotate(Direction.EAST, Direction.WEST, shape); + } + private static VoxelShape rotate(Direction from, Direction to, VoxelShape shape) { + VoxelShape[] buffer = new VoxelShape[]{ shape, VoxelShapes.empty() }; + + int times = (to.getHorizontal() - from.getHorizontal() + 4) % 4; + for (int i = 0; i < times; i++) { + buffer[0].forEachBox((minX, minY, minZ, maxX, maxY, maxZ) -> buffer[1] = VoxelShapes.union(buffer[1], VoxelShapes.cuboid(1-maxZ, minY, minX, 1-minZ, maxY, maxX))); + buffer[0] = buffer[1]; + buffer[1] = VoxelShapes.empty(); + } + + return buffer[0]; + } +} diff --git a/src/main/java/eu/midnightdust/motschen/decorative/block/JungleChoppingLog.java b/src/main/java/eu/midnightdust/motschen/decorative/block/JungleChoppingLog.java deleted file mode 100644 index 7bdd30e..0000000 --- a/src/main/java/eu/midnightdust/motschen/decorative/block/JungleChoppingLog.java +++ /dev/null @@ -1,42 +0,0 @@ -package eu.midnightdust.motschen.decorative.block; - -import eu.midnightdust.motschen.decorative.block.blockentity.JungleChoppingLogBlockEntity; -import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; -import net.minecraft.block.*; -import net.minecraft.block.entity.BlockEntity; -import net.minecraft.item.ItemPlacementContext; -import net.minecraft.sound.BlockSoundGroup; -import net.minecraft.state.StateManager; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Direction; -import net.minecraft.world.BlockView; -import net.minecraft.world.WorldView; - -public class JungleChoppingLog extends HorizontalFacingBlock implements BlockEntityProvider { - - public JungleChoppingLog() { - super(FabricBlockSettings.copy(Blocks.OAK_PLANKS).nonOpaque().sounds(BlockSoundGroup.WOOD)); - this.setDefaultState(this.stateManager.getDefaultState().with(FACING, Direction.NORTH)); - } - - @Override - public BlockState getPlacementState(ItemPlacementContext itemPlacementContext) { - return super.getPlacementState(itemPlacementContext) - .with(FACING, itemPlacementContext.getPlayerFacing().getOpposite()); - } - - @Override - protected void appendProperties(StateManager.Builder builder) { - builder.add(FACING); - } - - public boolean canPlaceAt(BlockState state, WorldView worldView, BlockPos pos) { - return !worldView.isAir(pos.down()); - } - - @Override - public BlockEntity createBlockEntity(BlockView view) { - return new JungleChoppingLogBlockEntity(); - } - -} diff --git a/src/main/java/eu/midnightdust/motschen/decorative/block/OldTelevision.java b/src/main/java/eu/midnightdust/motschen/decorative/block/OldTelevision.java index 734e7db..8179e1e 100644 --- a/src/main/java/eu/midnightdust/motschen/decorative/block/OldTelevision.java +++ b/src/main/java/eu/midnightdust/motschen/decorative/block/OldTelevision.java @@ -33,7 +33,7 @@ public class OldTelevision extends HorizontalFacingBlock { private static final EnumProperty PROGRAM = DecorativeMain.PROGRAM; public OldTelevision() { - super(FabricBlockSettings.copy(Blocks.BLACK_CONCRETE).nonOpaque().sounds(BlockSoundGroup.STONE).lightLevel(createLightLevelFromBlockState(15))); + super(FabricBlockSettings.copy(Blocks.BLACK_CONCRETE).nonOpaque().sounds(BlockSoundGroup.STONE).luminance(createLightLevelFromBlockState())); this.setDefaultState(this.stateManager.getDefaultState().with(FACING, Direction.NORTH).with(PROGRAM, Program.OFF)); } @@ -104,7 +104,7 @@ public class OldTelevision extends HorizontalFacingBlock { return !worldView.isAir(pos.down()); } - private static ToIntFunction createLightLevelFromBlockState(int litLevel) { + private static ToIntFunction createLightLevelFromBlockState() { return (blockState) -> { if (blockState.get(PROGRAM) == Program.OFF) { return 0; diff --git a/src/main/java/eu/midnightdust/motschen/decorative/block/SmokeDetector.java b/src/main/java/eu/midnightdust/motschen/decorative/block/SmokeDetector.java new file mode 100644 index 0000000..8d1fa1b --- /dev/null +++ b/src/main/java/eu/midnightdust/motschen/decorative/block/SmokeDetector.java @@ -0,0 +1,47 @@ +package eu.midnightdust.motschen.decorative.block; + +import eu.midnightdust.motschen.decorative.block.blockentity.SmokeDetectorBlockEntity; +import eu.midnightdust.motschen.decorative.block.blockentity.WallClockBlockEntity; +import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; +import net.minecraft.block.*; +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.item.ItemPlacementContext; +import net.minecraft.sound.BlockSoundGroup; +import net.minecraft.state.StateManager; +import net.minecraft.state.property.BooleanProperty; +import net.minecraft.state.property.Property; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Direction; +import net.minecraft.util.shape.VoxelShape; +import net.minecraft.util.shape.VoxelShapes; +import net.minecraft.world.BlockView; + +public class SmokeDetector extends HorizontalFacingBlock implements BlockEntityProvider { + private static final VoxelShape SHAPE; + public static final BooleanProperty ACTIVE = BooleanProperty.of("active"); + + public SmokeDetector() { + super(FabricBlockSettings.copy(Blocks.SMOOTH_QUARTZ).nonOpaque().sounds(BlockSoundGroup.STONE)); + this.setDefaultState(this.stateManager.getDefaultState().with(ACTIVE, false)); + } + + @Override + public BlockEntity createBlockEntity(BlockView view) { + return new SmokeDetectorBlockEntity(); + } + + @Override + protected void appendProperties(StateManager.Builder builder) { + builder.add(ACTIVE); + } + + @Override + public VoxelShape getOutlineShape(BlockState state, BlockView view, BlockPos pos, ShapeContext context) { + return SHAPE; + } + static { + VoxelShape shape = createCuboidShape(4, 14, 4, 12, 16, 12); + + SHAPE = shape; + } +} diff --git a/src/main/java/eu/midnightdust/motschen/decorative/block/SpruceChoppingLog.java b/src/main/java/eu/midnightdust/motschen/decorative/block/SpruceChoppingLog.java deleted file mode 100644 index 7e5d20c..0000000 --- a/src/main/java/eu/midnightdust/motschen/decorative/block/SpruceChoppingLog.java +++ /dev/null @@ -1,42 +0,0 @@ -package eu.midnightdust.motschen.decorative.block; - -import eu.midnightdust.motschen.decorative.block.blockentity.SpruceChoppingLogBlockEntity; -import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; -import net.minecraft.block.*; -import net.minecraft.block.entity.BlockEntity; -import net.minecraft.item.ItemPlacementContext; -import net.minecraft.sound.BlockSoundGroup; -import net.minecraft.state.StateManager; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Direction; -import net.minecraft.world.BlockView; -import net.minecraft.world.WorldView; - -public class SpruceChoppingLog extends HorizontalFacingBlock implements BlockEntityProvider { - - public SpruceChoppingLog() { - super(FabricBlockSettings.copy(Blocks.OAK_PLANKS).nonOpaque().sounds(BlockSoundGroup.WOOD)); - this.setDefaultState(this.stateManager.getDefaultState().with(FACING, Direction.NORTH)); - } - - @Override - public BlockState getPlacementState(ItemPlacementContext itemPlacementContext) { - return super.getPlacementState(itemPlacementContext) - .with(FACING, itemPlacementContext.getPlayerFacing().getOpposite()); - } - - @Override - protected void appendProperties(StateManager.Builder builder) { - builder.add(FACING); - } - - public boolean canPlaceAt(BlockState state, WorldView worldView, BlockPos pos) { - return !worldView.isAir(pos.down()); - } - - @Override - public BlockEntity createBlockEntity(BlockView view) { - return new SpruceChoppingLogBlockEntity(); - } - -} diff --git a/src/main/java/eu/midnightdust/motschen/decorative/block/Television.java b/src/main/java/eu/midnightdust/motschen/decorative/block/Television.java index 28047e9..61b35aa 100644 --- a/src/main/java/eu/midnightdust/motschen/decorative/block/Television.java +++ b/src/main/java/eu/midnightdust/motschen/decorative/block/Television.java @@ -34,7 +34,7 @@ public class Television extends HorizontalFacingBlock { private static final EnumProperty PROGRAM = DecorativeMain.PROGRAM; public Television() { - super(FabricBlockSettings.copy(Blocks.BLACK_CONCRETE).nonOpaque().sounds(BlockSoundGroup.STONE).lightLevel(createLightLevelFromBlockState(15))); + super(FabricBlockSettings.copy(Blocks.BLACK_CONCRETE).nonOpaque().sounds(BlockSoundGroup.STONE).luminance(createLightLevelFromBlockState())); this.setDefaultState(this.stateManager.getDefaultState().with(FACING, Direction.NORTH).with(PROGRAM, Program.OFF)); } @@ -105,7 +105,7 @@ public class Television extends HorizontalFacingBlock { return !worldView.isAir(pos.down()); } - private static ToIntFunction createLightLevelFromBlockState(int litLevel) { + private static ToIntFunction createLightLevelFromBlockState() { return (blockState) -> { if (blockState.get(PROGRAM) == Program.OFF) { return 0; diff --git a/src/main/java/eu/midnightdust/motschen/decorative/block/WallClock.java b/src/main/java/eu/midnightdust/motschen/decorative/block/WallClock.java new file mode 100644 index 0000000..7ba02f9 --- /dev/null +++ b/src/main/java/eu/midnightdust/motschen/decorative/block/WallClock.java @@ -0,0 +1,73 @@ +package eu.midnightdust.motschen.decorative.block; + +import eu.midnightdust.motschen.decorative.block.blockentity.WallClockBlockEntity; +import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; +import net.minecraft.block.*; +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.item.ItemPlacementContext; +import net.minecraft.sound.BlockSoundGroup; +import net.minecraft.state.StateManager; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Direction; +import net.minecraft.util.shape.VoxelShape; +import net.minecraft.util.shape.VoxelShapes; +import net.minecraft.world.BlockView; + +public class WallClock extends HorizontalFacingBlock implements BlockEntityProvider { + private static final VoxelShape NORTH_SHAPE; + private static final VoxelShape EAST_SHAPE; + private static final VoxelShape SOUTH_SHAPE; + private static final VoxelShape WEST_SHAPE; + + public WallClock() { + super(FabricBlockSettings.copy(Blocks.SMOOTH_QUARTZ).nonOpaque().sounds(BlockSoundGroup.STONE)); + this.setDefaultState(this.stateManager.getDefaultState().with(FACING, Direction.NORTH)); + } + + @Override + public BlockEntity createBlockEntity(BlockView view) { + return new WallClockBlockEntity(); + } + + @Override + protected void appendProperties(StateManager.Builder builder) { + builder.add(FACING); + } + + @Override + public BlockState getPlacementState(ItemPlacementContext itemPlacementContext) { + return super.getPlacementState(itemPlacementContext) + .with(FACING, itemPlacementContext.getPlayerFacing().getOpposite()); + } + + @Override + public VoxelShape getOutlineShape(BlockState state, BlockView view, BlockPos pos, ShapeContext context) { + switch (state.get(FACING)) { + case NORTH: return NORTH_SHAPE; + case EAST: return EAST_SHAPE; + case SOUTH: return SOUTH_SHAPE; + case WEST: return WEST_SHAPE; + default: return super.getOutlineShape(state, view, pos, context); + } + } + static { + VoxelShape shape = createCuboidShape(0, 0, 15, 16, 16, 16); + + NORTH_SHAPE = shape; + WEST_SHAPE = rotate(Direction.EAST, Direction.NORTH, shape); + EAST_SHAPE = rotate(Direction.EAST, Direction.SOUTH, shape); + SOUTH_SHAPE = rotate(Direction.EAST, Direction.WEST, shape); + } + private static VoxelShape rotate(Direction from, Direction to, VoxelShape shape) { + VoxelShape[] buffer = new VoxelShape[]{ shape, VoxelShapes.empty() }; + + int times = (to.getHorizontal() - from.getHorizontal() + 4) % 4; + for (int i = 0; i < times; i++) { + buffer[0].forEachBox((minX, minY, minZ, maxX, maxY, maxZ) -> buffer[1] = VoxelShapes.union(buffer[1], VoxelShapes.cuboid(1-maxZ, minY, minX, 1-minZ, maxY, maxX))); + buffer[0] = buffer[1]; + buffer[1] = VoxelShapes.empty(); + } + + return buffer[0]; + } +} diff --git a/src/main/java/eu/midnightdust/motschen/decorative/block/blockentity/OakChoppingLogBlockEntity.java b/src/main/java/eu/midnightdust/motschen/decorative/block/blockentity/ChoppingLogBlockEntity.java similarity index 89% rename from src/main/java/eu/midnightdust/motschen/decorative/block/blockentity/OakChoppingLogBlockEntity.java rename to src/main/java/eu/midnightdust/motschen/decorative/block/blockentity/ChoppingLogBlockEntity.java index ff37c58..09fb809 100644 --- a/src/main/java/eu/midnightdust/motschen/decorative/block/blockentity/OakChoppingLogBlockEntity.java +++ b/src/main/java/eu/midnightdust/motschen/decorative/block/blockentity/ChoppingLogBlockEntity.java @@ -8,13 +8,13 @@ import net.minecraft.util.Tickable; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Direction; -public class OakChoppingLogBlockEntity extends BlockEntity implements Tickable { +public class ChoppingLogBlockEntity extends BlockEntity implements Tickable { private int facing; private double axe_x; private double axe_z; - public OakChoppingLogBlockEntity() { - super(BlockEntities.OakChoppingLogBlockEntity); + public ChoppingLogBlockEntity() { + super(BlockEntities.ChoppingLogBlockEntity); } @Override diff --git a/src/main/java/eu/midnightdust/motschen/decorative/block/blockentity/DarkOakChoppingLogBlockEntity.java b/src/main/java/eu/midnightdust/motschen/decorative/block/blockentity/DarkOakChoppingLogBlockEntity.java deleted file mode 100644 index e157fd3..0000000 --- a/src/main/java/eu/midnightdust/motschen/decorative/block/blockentity/DarkOakChoppingLogBlockEntity.java +++ /dev/null @@ -1,61 +0,0 @@ -package eu.midnightdust.motschen.decorative.block.blockentity; - -import eu.midnightdust.motschen.decorative.init.BlockEntities; -import net.minecraft.block.BlockState; -import net.minecraft.block.HorizontalFacingBlock; -import net.minecraft.block.entity.BlockEntity; -import net.minecraft.util.Tickable; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Direction; - -public class DarkOakChoppingLogBlockEntity extends BlockEntity implements Tickable { - private int facing; - private double axe_x; - private double axe_z; - - public DarkOakChoppingLogBlockEntity() { - super(BlockEntities.DarkOakChoppingLogBlockEntity); - } - - @Override - public void tick() { - - BlockPos pos = this.pos; - BlockState state = this.world.getBlockState(pos); - - if (world != null && state.get(HorizontalFacingBlock.FACING) == Direction.EAST) { - facing = 180; - axe_x = 0.2D; - axe_z = 0.5D; - return; - } - if (world != null && state.get(HorizontalFacingBlock.FACING) == Direction.SOUTH) { - facing = 90; - axe_x = 0.5D; - axe_z = 0.2D; - return; - } - if (world != null && state.get(HorizontalFacingBlock.FACING) == Direction.WEST) { - facing = 0; - axe_x = 0.8D; - axe_z = 0.5D; - return; - } - else { - facing = 270; - axe_x = 0.5D; - axe_z = 0.8D; - return; - } - } - - public int getFacing() { - return facing; - } - public double getAxeX() { - return axe_x; - } - public double getAxeZ() { - return axe_z; - } -} diff --git a/src/main/java/eu/midnightdust/motschen/decorative/block/blockentity/AcaciaChoppingLogBlockEntity.java b/src/main/java/eu/midnightdust/motschen/decorative/block/blockentity/DigitalClockBlockEntity.java similarity index 60% rename from src/main/java/eu/midnightdust/motschen/decorative/block/blockentity/AcaciaChoppingLogBlockEntity.java rename to src/main/java/eu/midnightdust/motschen/decorative/block/blockentity/DigitalClockBlockEntity.java index 8458c97..8dccd98 100644 --- a/src/main/java/eu/midnightdust/motschen/decorative/block/blockentity/AcaciaChoppingLogBlockEntity.java +++ b/src/main/java/eu/midnightdust/motschen/decorative/block/blockentity/DigitalClockBlockEntity.java @@ -4,58 +4,67 @@ import eu.midnightdust.motschen.decorative.init.BlockEntities; import net.minecraft.block.BlockState; import net.minecraft.block.HorizontalFacingBlock; import net.minecraft.block.entity.BlockEntity; +import net.minecraft.sound.SoundCategory; +import net.minecraft.sound.SoundEvents; import net.minecraft.util.Tickable; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Direction; -public class AcaciaChoppingLogBlockEntity extends BlockEntity implements Tickable { - private int facing; - private double axe_x; - private double axe_z; +import java.time.LocalTime; - public AcaciaChoppingLogBlockEntity() { - super(BlockEntities.AcaciaChoppingLogBlockEntity); +public class DigitalClockBlockEntity extends BlockEntity implements Tickable { + private int facing; + private double x; + private double z; + private int second; + + public DigitalClockBlockEntity() { + super(BlockEntities.DigitalClockBlockEntity); } @Override public void tick() { + if (LocalTime.now().getSecond() != second) { + second = LocalTime.now().getSecond(); + } BlockPos pos = this.pos; BlockState state = this.world.getBlockState(pos); + if (world != null && state.get(HorizontalFacingBlock.FACING) == Direction.EAST) { - facing = 180; - axe_x = 0.2D; - axe_z = 0.5D; + facing = 270; + x = 0.626; + z = 0.825; return; } if (world != null && state.get(HorizontalFacingBlock.FACING) == Direction.SOUTH) { - facing = 90; - axe_x = 0.5D; - axe_z = 0.2D; + facing = 180; + x = 0.175; + z = 0.626; return; } if (world != null && state.get(HorizontalFacingBlock.FACING) == Direction.WEST) { - facing = 0; - axe_x = 0.8D; - axe_z = 0.5D; + facing = 90; + x = 0.374; + z = 0.175; return; } else { - facing = 270; - axe_x = 0.5D; - axe_z = 0.8D; + facing = 0; + x = 0.825; + z = 0.374; return; } - } + } public int getFacing() { return facing; } - public double getAxeX() { - return axe_x; + public double getX() { + return x; } - public double getAxeZ() { - return axe_z; + public double getZ() { + return z; } } diff --git a/src/main/java/eu/midnightdust/motschen/decorative/block/blockentity/JungleChoppingLogBlockEntity.java b/src/main/java/eu/midnightdust/motschen/decorative/block/blockentity/JungleChoppingLogBlockEntity.java deleted file mode 100644 index 603c612..0000000 --- a/src/main/java/eu/midnightdust/motschen/decorative/block/blockentity/JungleChoppingLogBlockEntity.java +++ /dev/null @@ -1,61 +0,0 @@ -package eu.midnightdust.motschen.decorative.block.blockentity; - -import eu.midnightdust.motschen.decorative.init.BlockEntities; -import net.minecraft.block.BlockState; -import net.minecraft.block.HorizontalFacingBlock; -import net.minecraft.block.entity.BlockEntity; -import net.minecraft.util.Tickable; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Direction; - -public class JungleChoppingLogBlockEntity extends BlockEntity implements Tickable { - private int facing; - private double axe_x; - private double axe_z; - - public JungleChoppingLogBlockEntity() { - super(BlockEntities.JungleChoppingLogBlockEntity); - } - - @Override - public void tick() { - - BlockPos pos = this.pos; - BlockState state = this.world.getBlockState(pos); - - if (world != null && state.get(HorizontalFacingBlock.FACING) == Direction.EAST) { - facing = 180; - axe_x = 0.2D; - axe_z = 0.5D; - return; - } - if (world != null && state.get(HorizontalFacingBlock.FACING) == Direction.SOUTH) { - facing = 90; - axe_x = 0.5D; - axe_z = 0.2D; - return; - } - if (world != null && state.get(HorizontalFacingBlock.FACING) == Direction.WEST) { - facing = 0; - axe_x = 0.8D; - axe_z = 0.5D; - return; - } - else { - facing = 270; - axe_x = 0.5D; - axe_z = 0.8D; - return; - } - } - - public int getFacing() { - return facing; - } - public double getAxeX() { - return axe_x; - } - public double getAxeZ() { - return axe_z; - } -} diff --git a/src/main/java/eu/midnightdust/motschen/decorative/block/blockentity/PoolSprinklerBlockEntity.java b/src/main/java/eu/midnightdust/motschen/decorative/block/blockentity/PoolSprinklerBlockEntity.java index bc7022c..66869a5 100644 --- a/src/main/java/eu/midnightdust/motschen/decorative/block/blockentity/PoolSprinklerBlockEntity.java +++ b/src/main/java/eu/midnightdust/motschen/decorative/block/blockentity/PoolSprinklerBlockEntity.java @@ -18,14 +18,25 @@ public class PoolSprinklerBlockEntity extends BlockEntity implements Tickable { @Override public void tick() { BlockPos pos = this.pos; - BlockState state = this.world.getBlockState(pos); - if (world != null && state.get(PoolSprinkler.POWERED) == true) { - switch (state.get(PoolSprinkler.FACING)) { - case NORTH: world.addParticle(ParticleTypes.DRIPPING_WATER,pos.getX()+0.5,pos.getY()+0.5,pos.getZ()-0.34,1,1,1); return; - case EAST: world.addParticle(ParticleTypes.DRIPPING_WATER,pos.getX()+1.34,pos.getY()+0.5,pos.getZ()+0.5,1,1,1); return; - case SOUTH: world.addParticle(ParticleTypes.DRIPPING_WATER,pos.getX()+0.5,pos.getY()+0.5,pos.getZ()+1.34,1,1,1); return; - case WEST: world.addParticle(ParticleTypes.DRIPPING_WATER,pos.getX()-0.34,pos.getY()+0.5,pos.getZ()+0.5,1,1,1); return; - default: return; + if (world != null) { + BlockState state = this.world.getBlockState(pos); + if (state.get(PoolSprinkler.POWERED)) { + switch (state.get(PoolSprinkler.FACING)) { + case NORTH: + world.addParticle(ParticleTypes.DRIPPING_WATER, pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() - 0.34, 1, 1, 1); + return; + case EAST: + world.addParticle(ParticleTypes.DRIPPING_WATER, pos.getX() + 1.34, pos.getY() + 0.5, pos.getZ() + 0.5, 1, 1, 1); + return; + case SOUTH: + world.addParticle(ParticleTypes.DRIPPING_WATER, pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 1.34, 1, 1, 1); + return; + case WEST: + world.addParticle(ParticleTypes.DRIPPING_WATER, pos.getX() - 0.34, pos.getY() + 0.5, pos.getZ() + 0.5, 1, 1, 1); + return; + default: + return; + } } } } diff --git a/src/main/java/eu/midnightdust/motschen/decorative/block/blockentity/ShowerHeadBlockEntity.java b/src/main/java/eu/midnightdust/motschen/decorative/block/blockentity/ShowerHeadBlockEntity.java index 5a06de4..f16bd68 100644 --- a/src/main/java/eu/midnightdust/motschen/decorative/block/blockentity/ShowerHeadBlockEntity.java +++ b/src/main/java/eu/midnightdust/motschen/decorative/block/blockentity/ShowerHeadBlockEntity.java @@ -18,14 +18,25 @@ public class ShowerHeadBlockEntity extends BlockEntity implements Tickable { @Override public void tick() { BlockPos pos = this.pos; - BlockState state = this.world.getBlockState(pos); - if (world != null && state.get(PoolSprinkler.POWERED) == true) { - switch (state.get(PoolSprinkler.FACING)) { - case NORTH: world.addParticle(ParticleTypes.DRIPPING_WATER,pos.getX()+0.5,pos.getY()+0.5,pos.getZ()+0.625,1,1,1); return; - case EAST: world.addParticle(ParticleTypes.DRIPPING_WATER,pos.getX()+0.375,pos.getY()+0.5,pos.getZ()+0.5,1,1,1); return; - case SOUTH: world.addParticle(ParticleTypes.DRIPPING_WATER,pos.getX()+0.5,pos.getY()+0.5,pos.getZ()+0.375,1,1,1); return; - case WEST: world.addParticle(ParticleTypes.DRIPPING_WATER,pos.getX()+0.625,pos.getY()+0.5,pos.getZ()+0.5,1,1,1); return; - default: return; + if (world != null) { + BlockState state = this.world.getBlockState(pos); + if (state.get(PoolSprinkler.POWERED) == true) { + switch (state.get(PoolSprinkler.FACING)) { + case NORTH: + world.addParticle(ParticleTypes.DRIPPING_WATER, pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.625, 1, 1, 1); + return; + case EAST: + world.addParticle(ParticleTypes.DRIPPING_WATER, pos.getX() + 0.375, pos.getY() + 0.5, pos.getZ() + 0.5, 1, 1, 1); + return; + case SOUTH: + world.addParticle(ParticleTypes.DRIPPING_WATER, pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.375, 1, 1, 1); + return; + case WEST: + world.addParticle(ParticleTypes.DRIPPING_WATER, pos.getX() + 0.625, pos.getY() + 0.5, pos.getZ() + 0.5, 1, 1, 1); + return; + default: + return; + } } } } diff --git a/src/main/java/eu/midnightdust/motschen/decorative/block/blockentity/SmokeDetectorBlockEntity.java b/src/main/java/eu/midnightdust/motschen/decorative/block/blockentity/SmokeDetectorBlockEntity.java new file mode 100644 index 0000000..48d9860 --- /dev/null +++ b/src/main/java/eu/midnightdust/motschen/decorative/block/blockentity/SmokeDetectorBlockEntity.java @@ -0,0 +1,47 @@ +package eu.midnightdust.motschen.decorative.block.blockentity; + +import eu.midnightdust.motschen.decorative.DecorativeMain; +import eu.midnightdust.motschen.decorative.block.SmokeDetector; +import eu.midnightdust.motschen.decorative.init.BlockEntities; +import eu.midnightdust.motschen.decorative.sound.DecorativeSoundEvents; +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.sound.SoundCategory; +import net.minecraft.sound.SoundEvents; +import net.minecraft.tag.BlockTags; +import net.minecraft.util.Tickable; +import net.minecraft.util.math.BlockPos; + +import java.time.LocalTime; + +public class SmokeDetectorBlockEntity extends BlockEntity implements Tickable { + private int second; + private int sound = 0; + + public SmokeDetectorBlockEntity() { + super(BlockEntities.SmokeDetectorBlockEntity); + } + + public boolean isInFireRange() { + return this.world.getBlockState(this.pos.down()).isIn(BlockTags.FIRE); + } + + @Override + public void tick() { + if (LocalTime.now().getSecond() != second) { + second = LocalTime.now().getSecond(); + + if (this.isInFireRange()) { + world.setBlockState(pos, DecorativeMain.SmokeDetector.getDefaultState().with(SmokeDetector.ACTIVE, true)); + + sound = sound + 1; + if (sound > 3) {sound = 0;} + if (sound == 0) { + world.playSound(null, pos, DecorativeSoundEvents.SMOKE_DETECTOR_BEEP, SoundCategory.BLOCKS, 1f, 1f); + } + } + else if (this.world.getBlockState(pos).get(SmokeDetector.ACTIVE).equals(true)) { + world.setBlockState(pos, DecorativeMain.SmokeDetector.getDefaultState().with(SmokeDetector.ACTIVE, false)); + } + } + } +} diff --git a/src/main/java/eu/midnightdust/motschen/decorative/block/blockentity/SpruceChoppingLogBlockEntity.java b/src/main/java/eu/midnightdust/motschen/decorative/block/blockentity/SpruceChoppingLogBlockEntity.java deleted file mode 100644 index 886bbb6..0000000 --- a/src/main/java/eu/midnightdust/motschen/decorative/block/blockentity/SpruceChoppingLogBlockEntity.java +++ /dev/null @@ -1,61 +0,0 @@ -package eu.midnightdust.motschen.decorative.block.blockentity; - -import eu.midnightdust.motschen.decorative.init.BlockEntities; -import net.minecraft.block.BlockState; -import net.minecraft.block.HorizontalFacingBlock; -import net.minecraft.block.entity.BlockEntity; -import net.minecraft.util.Tickable; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Direction; - -public class SpruceChoppingLogBlockEntity extends BlockEntity implements Tickable { - private int facing; - private double axe_x; - private double axe_z; - - public SpruceChoppingLogBlockEntity() { - super(BlockEntities.SpruceChoppingLogBlockEntity); - } - - @Override - public void tick() { - - BlockPos pos = this.pos; - BlockState state = this.world.getBlockState(pos); - - if (world != null && state.get(HorizontalFacingBlock.FACING) == Direction.EAST) { - facing = 180; - axe_x = 0.2D; - axe_z = 0.5D; - return; - } - if (world != null && state.get(HorizontalFacingBlock.FACING) == Direction.SOUTH) { - facing = 90; - axe_x = 0.5D; - axe_z = 0.2D; - return; - } - if (world != null && state.get(HorizontalFacingBlock.FACING) == Direction.WEST) { - facing = 0; - axe_x = 0.8D; - axe_z = 0.5D; - return; - } - else { - facing = 270; - axe_x = 0.5D; - axe_z = 0.8D; - return; - } - } - - public int getFacing() { - return facing; - } - public double getAxeX() { - return axe_x; - } - public double getAxeZ() { - return axe_z; - } -} diff --git a/src/main/java/eu/midnightdust/motschen/decorative/block/blockentity/BirchChoppingLogBlockEntity.java b/src/main/java/eu/midnightdust/motschen/decorative/block/blockentity/WallClockBlockEntity.java similarity index 54% rename from src/main/java/eu/midnightdust/motschen/decorative/block/blockentity/BirchChoppingLogBlockEntity.java rename to src/main/java/eu/midnightdust/motschen/decorative/block/blockentity/WallClockBlockEntity.java index 5e7f09c..0e59035 100644 --- a/src/main/java/eu/midnightdust/motschen/decorative/block/blockentity/BirchChoppingLogBlockEntity.java +++ b/src/main/java/eu/midnightdust/motschen/decorative/block/blockentity/WallClockBlockEntity.java @@ -1,61 +1,73 @@ package eu.midnightdust.motschen.decorative.block.blockentity; import eu.midnightdust.motschen.decorative.init.BlockEntities; +import eu.midnightdust.motschen.decorative.sound.DecorativeSoundEvents; import net.minecraft.block.BlockState; import net.minecraft.block.HorizontalFacingBlock; import net.minecraft.block.entity.BlockEntity; +import net.minecraft.sound.SoundCategory; +import net.minecraft.sound.SoundEvents; +import net.minecraft.state.property.Properties; import net.minecraft.util.Tickable; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Direction; -public class BirchChoppingLogBlockEntity extends BlockEntity implements Tickable { - private int facing; - private double axe_x; - private double axe_z; +import java.time.LocalTime; - public BirchChoppingLogBlockEntity() { - super(BlockEntities.BirchChoppingLogBlockEntity); +public class WallClockBlockEntity extends BlockEntity implements Tickable { + private int facing; + private double x; + private double z; + private int second; + + public WallClockBlockEntity() { + super(BlockEntities.WallClockBlockEntity); } @Override public void tick() { + if (LocalTime.now().getSecond() != second) { + second = LocalTime.now().getSecond(); + world.playSound(null, pos, SoundEvents.BLOCK_WOODEN_BUTTON_CLICK_ON, SoundCategory.BLOCKS, 0.004f, 1f); + } BlockPos pos = this.pos; BlockState state = this.world.getBlockState(pos); + if (world != null && state.get(HorizontalFacingBlock.FACING) == Direction.EAST) { - facing = 180; - axe_x = 0.2D; - axe_z = 0.5D; + facing = 270; + x = 0.05; + z = 0.5; return; } if (world != null && state.get(HorizontalFacingBlock.FACING) == Direction.SOUTH) { - facing = 90; - axe_x = 0.5D; - axe_z = 0.2D; + facing = 180; + x = 0.5; + z = 0.05; return; } if (world != null && state.get(HorizontalFacingBlock.FACING) == Direction.WEST) { - facing = 0; - axe_x = 0.8D; - axe_z = 0.5D; + facing = 90; + x = 0.95; + z = 0.5; return; } else { - facing = 270; - axe_x = 0.5D; - axe_z = 0.8D; + facing = 0; + x = 0.5; + z = 0.95; return; } - } + } public int getFacing() { return facing; } - public double getAxeX() { - return axe_x; + public double getX() { + return x; } - public double getAxeZ() { - return axe_z; + public double getZ() { + return z; } } diff --git a/src/main/java/eu/midnightdust/motschen/decorative/block/render/AcaciaChoppingLogBlockEntityRenderer.java b/src/main/java/eu/midnightdust/motschen/decorative/block/render/AcaciaChoppingLogBlockEntityRenderer.java deleted file mode 100644 index d4fc94c..0000000 --- a/src/main/java/eu/midnightdust/motschen/decorative/block/render/AcaciaChoppingLogBlockEntityRenderer.java +++ /dev/null @@ -1,52 +0,0 @@ -package eu.midnightdust.motschen.decorative.block.render; - -import eu.midnightdust.motschen.decorative.block.blockentity.AcaciaChoppingLogBlockEntity; -import net.fabricmc.api.EnvType; -import net.fabricmc.api.Environment; -import net.minecraft.block.BlockState; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.render.VertexConsumerProvider; -import net.minecraft.client.render.WorldRenderer; -import net.minecraft.client.render.block.entity.BlockEntityRenderDispatcher; -import net.minecraft.client.render.block.entity.BlockEntityRenderer; -import net.minecraft.client.render.model.json.ModelTransformation; -import net.minecraft.client.util.math.MatrixStack; -import net.minecraft.client.util.math.Vector3f; -import net.minecraft.item.ItemStack; -import net.minecraft.item.Items; -import net.minecraft.util.math.BlockPos; - -@Environment(EnvType.CLIENT) -public class AcaciaChoppingLogBlockEntityRenderer extends BlockEntityRenderer { - - public AcaciaChoppingLogBlockEntityRenderer(BlockEntityRenderDispatcher blockEntityRenderDispatcher) { - super(blockEntityRenderDispatcher); - } - - @Override - public boolean rendersOutsideBoundingBox(AcaciaChoppingLogBlockEntity blockEntity) { - return true; - } - - - @Override - public void render(AcaciaChoppingLogBlockEntity blockEntity, float tickDelta, MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, int overlay) { - BlockPos pos = blockEntity.getPos(); - BlockState state = blockEntity.getWorld().getBlockState(pos); - - matrices.push(); - int lightAbove = WorldRenderer.getLightmapCoordinates(blockEntity.getWorld(), blockEntity.getPos().up()); - - matrices.translate(blockEntity.getAxeX(), 1.5D, blockEntity.getAxeZ()); - matrices.scale(2.5f,2.5f,2.5f); - - matrices.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(blockEntity.getFacing())); - - matrices.multiply(Vector3f.POSITIVE_Z.getDegreesQuaternion(160)); - MinecraftClient.getInstance().getItemRenderer().renderItem(new ItemStack(Items.IRON_AXE), - ModelTransformation.Mode.GROUND, lightAbove, overlay, matrices, vertexConsumers); - - - matrices.pop(); - } -} diff --git a/src/main/java/eu/midnightdust/motschen/decorative/block/render/BirchChoppingLogBlockEntityRenderer.java b/src/main/java/eu/midnightdust/motschen/decorative/block/render/BirchChoppingLogBlockEntityRenderer.java deleted file mode 100644 index f996252..0000000 --- a/src/main/java/eu/midnightdust/motschen/decorative/block/render/BirchChoppingLogBlockEntityRenderer.java +++ /dev/null @@ -1,52 +0,0 @@ -package eu.midnightdust.motschen.decorative.block.render; - -import eu.midnightdust.motschen.decorative.block.blockentity.BirchChoppingLogBlockEntity; -import net.fabricmc.api.EnvType; -import net.fabricmc.api.Environment; -import net.minecraft.block.BlockState; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.render.VertexConsumerProvider; -import net.minecraft.client.render.WorldRenderer; -import net.minecraft.client.render.block.entity.BlockEntityRenderDispatcher; -import net.minecraft.client.render.block.entity.BlockEntityRenderer; -import net.minecraft.client.render.model.json.ModelTransformation; -import net.minecraft.client.util.math.MatrixStack; -import net.minecraft.client.util.math.Vector3f; -import net.minecraft.item.ItemStack; -import net.minecraft.item.Items; -import net.minecraft.util.math.BlockPos; - -@Environment(EnvType.CLIENT) -public class BirchChoppingLogBlockEntityRenderer extends BlockEntityRenderer { - - public BirchChoppingLogBlockEntityRenderer(BlockEntityRenderDispatcher blockEntityRenderDispatcher) { - super(blockEntityRenderDispatcher); - } - - @Override - public boolean rendersOutsideBoundingBox(BirchChoppingLogBlockEntity blockEntity) { - return true; - } - - - @Override - public void render(BirchChoppingLogBlockEntity blockEntity, float tickDelta, MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, int overlay) { - BlockPos pos = blockEntity.getPos(); - BlockState state = blockEntity.getWorld().getBlockState(pos); - - matrices.push(); - int lightAbove = WorldRenderer.getLightmapCoordinates(blockEntity.getWorld(), blockEntity.getPos().up()); - - matrices.translate(blockEntity.getAxeX(), 1.5D, blockEntity.getAxeZ()); - matrices.scale(2.5f,2.5f,2.5f); - - matrices.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(blockEntity.getFacing())); - - matrices.multiply(Vector3f.POSITIVE_Z.getDegreesQuaternion(160)); - MinecraftClient.getInstance().getItemRenderer().renderItem(new ItemStack(Items.IRON_AXE), - ModelTransformation.Mode.GROUND, lightAbove, overlay, matrices, vertexConsumers); - - - matrices.pop(); - } -} diff --git a/src/main/java/eu/midnightdust/motschen/decorative/block/render/OakChoppingLogBlockEntityRenderer.java b/src/main/java/eu/midnightdust/motschen/decorative/block/render/ChoppingLogBlockEntityRenderer.java similarity index 74% rename from src/main/java/eu/midnightdust/motschen/decorative/block/render/OakChoppingLogBlockEntityRenderer.java rename to src/main/java/eu/midnightdust/motschen/decorative/block/render/ChoppingLogBlockEntityRenderer.java index ffdbb99..173c757 100644 --- a/src/main/java/eu/midnightdust/motschen/decorative/block/render/OakChoppingLogBlockEntityRenderer.java +++ b/src/main/java/eu/midnightdust/motschen/decorative/block/render/ChoppingLogBlockEntityRenderer.java @@ -1,6 +1,6 @@ package eu.midnightdust.motschen.decorative.block.render; -import eu.midnightdust.motschen.decorative.block.blockentity.OakChoppingLogBlockEntity; +import eu.midnightdust.motschen.decorative.block.blockentity.ChoppingLogBlockEntity; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.block.BlockState; @@ -16,20 +16,20 @@ import net.minecraft.item.Items; import net.minecraft.util.math.BlockPos; @Environment(EnvType.CLIENT) -public class OakChoppingLogBlockEntityRenderer extends BlockEntityRenderer { +public class ChoppingLogBlockEntityRenderer extends BlockEntityRenderer { - public OakChoppingLogBlockEntityRenderer(BlockEntityRenderDispatcher blockEntityRenderDispatcher) { + public ChoppingLogBlockEntityRenderer(BlockEntityRenderDispatcher blockEntityRenderDispatcher) { super(blockEntityRenderDispatcher); } @Override - public boolean rendersOutsideBoundingBox(OakChoppingLogBlockEntity blockEntity) { + public boolean rendersOutsideBoundingBox(ChoppingLogBlockEntity blockEntity) { return true; } @Override - public void render(OakChoppingLogBlockEntity blockEntity, float tickDelta, MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, int overlay) { + public void render(ChoppingLogBlockEntity blockEntity, float tickDelta, MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, int overlay) { BlockPos pos = blockEntity.getPos(); BlockState state = blockEntity.getWorld().getBlockState(pos); diff --git a/src/main/java/eu/midnightdust/motschen/decorative/block/render/DarkOakChoppingLogBlockEntityRenderer.java b/src/main/java/eu/midnightdust/motschen/decorative/block/render/DarkOakChoppingLogBlockEntityRenderer.java deleted file mode 100644 index fac8214..0000000 --- a/src/main/java/eu/midnightdust/motschen/decorative/block/render/DarkOakChoppingLogBlockEntityRenderer.java +++ /dev/null @@ -1,52 +0,0 @@ -package eu.midnightdust.motschen.decorative.block.render; - -import eu.midnightdust.motschen.decorative.block.blockentity.DarkOakChoppingLogBlockEntity; -import net.fabricmc.api.EnvType; -import net.fabricmc.api.Environment; -import net.minecraft.block.BlockState; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.render.VertexConsumerProvider; -import net.minecraft.client.render.WorldRenderer; -import net.minecraft.client.render.block.entity.BlockEntityRenderDispatcher; -import net.minecraft.client.render.block.entity.BlockEntityRenderer; -import net.minecraft.client.render.model.json.ModelTransformation; -import net.minecraft.client.util.math.MatrixStack; -import net.minecraft.client.util.math.Vector3f; -import net.minecraft.item.ItemStack; -import net.minecraft.item.Items; -import net.minecraft.util.math.BlockPos; - -@Environment(EnvType.CLIENT) -public class DarkOakChoppingLogBlockEntityRenderer extends BlockEntityRenderer { - - public DarkOakChoppingLogBlockEntityRenderer(BlockEntityRenderDispatcher blockEntityRenderDispatcher) { - super(blockEntityRenderDispatcher); - } - - @Override - public boolean rendersOutsideBoundingBox(DarkOakChoppingLogBlockEntity blockEntity) { - return true; - } - - - @Override - public void render(DarkOakChoppingLogBlockEntity blockEntity, float tickDelta, MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, int overlay) { - BlockPos pos = blockEntity.getPos(); - BlockState state = blockEntity.getWorld().getBlockState(pos); - - matrices.push(); - int lightAbove = WorldRenderer.getLightmapCoordinates(blockEntity.getWorld(), blockEntity.getPos().up()); - - matrices.translate(blockEntity.getAxeX(), 1.5D, blockEntity.getAxeZ()); - matrices.scale(2.5f,2.5f,2.5f); - - matrices.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(blockEntity.getFacing())); - - matrices.multiply(Vector3f.POSITIVE_Z.getDegreesQuaternion(160)); - MinecraftClient.getInstance().getItemRenderer().renderItem(new ItemStack(Items.IRON_AXE), - ModelTransformation.Mode.GROUND, lightAbove, overlay, matrices, vertexConsumers); - - - matrices.pop(); - } -} diff --git a/src/main/java/eu/midnightdust/motschen/decorative/block/render/DigitalClockRenderer.java b/src/main/java/eu/midnightdust/motschen/decorative/block/render/DigitalClockRenderer.java new file mode 100644 index 0000000..aaef5dc --- /dev/null +++ b/src/main/java/eu/midnightdust/motschen/decorative/block/render/DigitalClockRenderer.java @@ -0,0 +1,86 @@ +package eu.midnightdust.motschen.decorative.block.render; + +import eu.midnightdust.motschen.decorative.DecorativeMain; +import eu.midnightdust.motschen.decorative.block.blockentity.DigitalClockBlockEntity; +import eu.midnightdust.motschen.decorative.block.blockentity.WallClockBlockEntity; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; +import net.minecraft.client.font.TextRenderer; +import net.minecraft.client.model.ModelPart; +import net.minecraft.client.render.*; +import net.minecraft.client.render.block.entity.BlockEntityRenderDispatcher; +import net.minecraft.client.render.block.entity.BlockEntityRenderer; +import net.minecraft.client.render.block.entity.SignBlockEntityRenderer; +import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.client.util.math.Vector3f; +import net.minecraft.util.Identifier; + +import java.text.SimpleDateFormat; +import java.time.LocalTime; +import java.util.SimpleTimeZone; +import java.util.TimeZone; + +@Environment(EnvType.CLIENT) +public class DigitalClockRenderer extends BlockEntityRenderer { + + public DigitalClockRenderer(BlockEntityRenderDispatcher blockEntityRenderDispatcher) { + super(blockEntityRenderDispatcher); + } + + private int getHour12hFormat() { + int hour; + hour = LocalTime.now().getHour(); + if (hour > 12) { + hour = hour - 12; + } + return hour; + } + private String getTime() { + String hour; + String minute; + + // Hour + if (DecorativeMain.DECORATIVE_CONFIG.use12hTime) { + if (getHour12hFormat() <= 9) { + hour = "0" + getHour12hFormat(); + } else { + hour = "" + getHour12hFormat(); + } + } + else { + if (LocalTime.now().getHour() <= 9) { + hour = "0" + LocalTime.now().getHour(); + } else { + hour = "" + LocalTime.now().getHour(); + } + } + + // Minute + if (LocalTime.now().getMinute() <= 9) { + minute = "0" + LocalTime.now().getMinute(); + } + else { + minute = "" + LocalTime.now().getMinute(); + } + + String time = hour +":"+ minute; + return time; + } + + + @Override + public void render(DigitalClockBlockEntity blockEntity, float tickDelta, MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, int overlay) { + matrices.push(); + int lightAtBlock1 = WorldRenderer.getLightmapCoordinates(blockEntity.getWorld(), blockEntity.getPos()); + + TextRenderer textRenderer = dispatcher.getTextRenderer(); + + matrices.translate(blockEntity.getX(),0.35,blockEntity.getZ()); + matrices.scale(0.025f, 0.025f, 0.025f); + matrices.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(blockEntity.getFacing())); + matrices.multiply(Vector3f.POSITIVE_Z.getDegreesQuaternion(180)); + textRenderer.draw(getTime(), 0, 0, 16382457, false, matrices.peek().getModel(), vertexConsumers, false, 0, lightAtBlock1); + + matrices.pop(); + } +} \ No newline at end of file diff --git a/src/main/java/eu/midnightdust/motschen/decorative/block/render/JungleChoppingLogBlockEntityRenderer.java b/src/main/java/eu/midnightdust/motschen/decorative/block/render/JungleChoppingLogBlockEntityRenderer.java deleted file mode 100644 index d23360b..0000000 --- a/src/main/java/eu/midnightdust/motschen/decorative/block/render/JungleChoppingLogBlockEntityRenderer.java +++ /dev/null @@ -1,52 +0,0 @@ -package eu.midnightdust.motschen.decorative.block.render; - -import eu.midnightdust.motschen.decorative.block.blockentity.JungleChoppingLogBlockEntity; -import net.fabricmc.api.EnvType; -import net.fabricmc.api.Environment; -import net.minecraft.block.BlockState; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.render.VertexConsumerProvider; -import net.minecraft.client.render.WorldRenderer; -import net.minecraft.client.render.block.entity.BlockEntityRenderDispatcher; -import net.minecraft.client.render.block.entity.BlockEntityRenderer; -import net.minecraft.client.render.model.json.ModelTransformation; -import net.minecraft.client.util.math.MatrixStack; -import net.minecraft.client.util.math.Vector3f; -import net.minecraft.item.ItemStack; -import net.minecraft.item.Items; -import net.minecraft.util.math.BlockPos; - -@Environment(EnvType.CLIENT) -public class JungleChoppingLogBlockEntityRenderer extends BlockEntityRenderer { - - public JungleChoppingLogBlockEntityRenderer(BlockEntityRenderDispatcher blockEntityRenderDispatcher) { - super(blockEntityRenderDispatcher); - } - - @Override - public boolean rendersOutsideBoundingBox(JungleChoppingLogBlockEntity blockEntity) { - return true; - } - - - @Override - public void render(JungleChoppingLogBlockEntity blockEntity, float tickDelta, MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, int overlay) { - BlockPos pos = blockEntity.getPos(); - BlockState state = blockEntity.getWorld().getBlockState(pos); - - matrices.push(); - int lightAbove = WorldRenderer.getLightmapCoordinates(blockEntity.getWorld(), blockEntity.getPos().up()); - - matrices.translate(blockEntity.getAxeX(), 1.5D, blockEntity.getAxeZ()); - matrices.scale(2.5f,2.5f,2.5f); - - matrices.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(blockEntity.getFacing())); - - matrices.multiply(Vector3f.POSITIVE_Z.getDegreesQuaternion(160)); - MinecraftClient.getInstance().getItemRenderer().renderItem(new ItemStack(Items.IRON_AXE), - ModelTransformation.Mode.GROUND, lightAbove, overlay, matrices, vertexConsumers); - - - matrices.pop(); - } -} diff --git a/src/main/java/eu/midnightdust/motschen/decorative/block/render/SpruceChoppingLogBlockEntityRenderer.java b/src/main/java/eu/midnightdust/motschen/decorative/block/render/SpruceChoppingLogBlockEntityRenderer.java deleted file mode 100644 index 86e439b..0000000 --- a/src/main/java/eu/midnightdust/motschen/decorative/block/render/SpruceChoppingLogBlockEntityRenderer.java +++ /dev/null @@ -1,52 +0,0 @@ -package eu.midnightdust.motschen.decorative.block.render; - -import eu.midnightdust.motschen.decorative.block.blockentity.SpruceChoppingLogBlockEntity; -import net.fabricmc.api.EnvType; -import net.fabricmc.api.Environment; -import net.minecraft.block.BlockState; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.render.VertexConsumerProvider; -import net.minecraft.client.render.WorldRenderer; -import net.minecraft.client.render.block.entity.BlockEntityRenderDispatcher; -import net.minecraft.client.render.block.entity.BlockEntityRenderer; -import net.minecraft.client.render.model.json.ModelTransformation; -import net.minecraft.client.util.math.MatrixStack; -import net.minecraft.client.util.math.Vector3f; -import net.minecraft.item.ItemStack; -import net.minecraft.item.Items; -import net.minecraft.util.math.BlockPos; - -@Environment(EnvType.CLIENT) -public class SpruceChoppingLogBlockEntityRenderer extends BlockEntityRenderer { - - public SpruceChoppingLogBlockEntityRenderer(BlockEntityRenderDispatcher blockEntityRenderDispatcher) { - super(blockEntityRenderDispatcher); - } - - @Override - public boolean rendersOutsideBoundingBox(SpruceChoppingLogBlockEntity blockEntity) { - return true; - } - - - @Override - public void render(SpruceChoppingLogBlockEntity blockEntity, float tickDelta, MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, int overlay) { - BlockPos pos = blockEntity.getPos(); - BlockState state = blockEntity.getWorld().getBlockState(pos); - - matrices.push(); - int lightAbove = WorldRenderer.getLightmapCoordinates(blockEntity.getWorld(), blockEntity.getPos().up()); - - matrices.translate(blockEntity.getAxeX(), 1.5D, blockEntity.getAxeZ()); - matrices.scale(2.5f,2.5f,2.5f); - - matrices.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(blockEntity.getFacing())); - - matrices.multiply(Vector3f.POSITIVE_Z.getDegreesQuaternion(160)); - MinecraftClient.getInstance().getItemRenderer().renderItem(new ItemStack(Items.IRON_AXE), - ModelTransformation.Mode.GROUND, lightAbove, overlay, matrices, vertexConsumers); - - - matrices.pop(); - } -} diff --git a/src/main/java/eu/midnightdust/motschen/decorative/block/render/WallClockRenderer.java b/src/main/java/eu/midnightdust/motschen/decorative/block/render/WallClockRenderer.java new file mode 100644 index 0000000..64d4885 --- /dev/null +++ b/src/main/java/eu/midnightdust/motschen/decorative/block/render/WallClockRenderer.java @@ -0,0 +1,83 @@ +package eu.midnightdust.motschen.decorative.block.render; + +import eu.midnightdust.motschen.decorative.block.blockentity.WallClockBlockEntity; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; +import net.minecraft.client.model.ModelPart; +import net.minecraft.client.render.*; +import net.minecraft.client.render.block.entity.BlockEntityRenderDispatcher; +import net.minecraft.client.render.block.entity.BlockEntityRenderer; +import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.client.util.math.Vector3f; +import net.minecraft.util.Identifier; + +import java.time.LocalTime; + +@Environment(EnvType.CLIENT) +public class WallClockRenderer extends BlockEntityRenderer { + private final ModelPart blades; + private final ModelPart seconds; + private final ModelPart minutes; + private final ModelPart hours; + + public WallClockRenderer(BlockEntityRenderDispatcher blockEntityRenderDispatcher) { + super(blockEntityRenderDispatcher); + blades = new ModelPart(16, 16, 0, 0); + blades.setPivot(0.0F, 0.0F, 0.0F); + + seconds = new ModelPart(16, 16, 8, 0); + seconds.addCuboid(-0.175F, 0.0F, 0.0F, 0.25F, 7.0F, 0.2F, 0.0F); + blades.addChild(seconds); + + minutes = new ModelPart(16, 16, 0, 0); + minutes.addCuboid(-0.25F, 0.0F, 0.0F, 0.5F, 6.0F, 0.2F, 0.0F); + blades.addChild(minutes); + + hours = new ModelPart(16, 16, 0, 0); + hours.addCuboid(-0.25F, 0.0F, 0.0F, 0.5F, 4.0F, 0.2F, 0.0F); + blades.addChild(hours); + } + + private int getHour12hFormat() { + int hour; + hour = LocalTime.now().getHour(); + if (hour >= 12) { + hour = hour - 12; + } + return hour; + } + + + @Override + public void render(WallClockBlockEntity blockEntity, float tickDelta, MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, int overlay) { + + int lightAtBlock = WorldRenderer.getLightmapCoordinates(blockEntity.getWorld(), blockEntity.getPos()); + + matrices.push(); + VertexConsumer redVertex = vertexConsumers.getBuffer(RenderLayer.getEntityCutoutNoCull(new Identifier("textures/block/red_concrete.png"))); + int lightAtBlock1 = WorldRenderer.getLightmapCoordinates(blockEntity.getWorld(), blockEntity.getPos()); + matrices.translate(blockEntity.getX(),0.5,blockEntity.getZ()); + matrices.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(blockEntity.getFacing())); + matrices.multiply(Vector3f.POSITIVE_Z.getDegreesQuaternion(LocalTime.now().getSecond() * 6)); + seconds.render(matrices, redVertex, lightAtBlock1, OverlayTexture.DEFAULT_UV, 1.0F, 1.0F, 1.0F, 1.0F); + matrices.pop(); + + matrices.push(); + VertexConsumer blackVertex = vertexConsumers.getBuffer(RenderLayer.getEntityCutoutNoCull(new Identifier("textures/block/black_concrete.png"))); + int lightAtBlock2 = WorldRenderer.getLightmapCoordinates(blockEntity.getWorld(), blockEntity.getPos()); + matrices.translate(blockEntity.getX(),0.5,blockEntity.getZ()); + matrices.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(blockEntity.getFacing())); + matrices.multiply(Vector3f.POSITIVE_Z.getDegreesQuaternion(LocalTime.now().getMinute() * 6)); + minutes.render(matrices, blackVertex, lightAtBlock2, OverlayTexture.DEFAULT_UV, 1.0F, 1.0F, 1.0F, 1.0F); + matrices.pop(); + + matrices.push(); + VertexConsumer blackVertex2 = vertexConsumers.getBuffer(RenderLayer.getEntityCutoutNoCull(new Identifier("textures/block/black_concrete.png"))); + int lightAtBlock3 = WorldRenderer.getLightmapCoordinates(blockEntity.getWorld(), blockEntity.getPos()); + matrices.translate(blockEntity.getX(),0.5,blockEntity.getZ()); + matrices.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(blockEntity.getFacing())); + matrices.multiply(Vector3f.POSITIVE_Z.getDegreesQuaternion(getHour12hFormat() * 30)); + hours.render(matrices, blackVertex2, lightAtBlock3, OverlayTexture.DEFAULT_UV, 1.0F, 1.0F, 1.0F, 1.0F); + matrices.pop(); + } +} diff --git a/src/main/java/eu/midnightdust/motschen/decorative/config/DecorativeConfig.java b/src/main/java/eu/midnightdust/motschen/decorative/config/DecorativeConfig.java new file mode 100644 index 0000000..6b7c24f --- /dev/null +++ b/src/main/java/eu/midnightdust/motschen/decorative/config/DecorativeConfig.java @@ -0,0 +1,11 @@ +package eu.midnightdust.motschen.decorative.config; + +import me.sargunvohra.mcmods.autoconfig1u.ConfigData; +import me.sargunvohra.mcmods.autoconfig1u.annotation.Config; +import me.sargunvohra.mcmods.autoconfig1u.shadowed.blue.endless.jankson.Comment; + +@Config(name = "decorative") +public class DecorativeConfig implements ConfigData { + @Comment(value = "Use 12h Time") + public boolean use12hTime = true; +} diff --git a/src/main/java/eu/midnightdust/motschen/decorative/config/ModMenuIntegration.java b/src/main/java/eu/midnightdust/motschen/decorative/config/ModMenuIntegration.java new file mode 100644 index 0000000..31098c5 --- /dev/null +++ b/src/main/java/eu/midnightdust/motschen/decorative/config/ModMenuIntegration.java @@ -0,0 +1,16 @@ +package eu.midnightdust.motschen.decorative.config; + +import io.github.prospector.modmenu.api.ConfigScreenFactory; +import io.github.prospector.modmenu.api.ModMenuApi; +import me.sargunvohra.mcmods.autoconfig1u.AutoConfig; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; + +@Environment(EnvType.CLIENT) +public class ModMenuIntegration implements ModMenuApi { + + @Override + public ConfigScreenFactory getModConfigScreenFactory() { + return parent -> AutoConfig.getConfigScreen(DecorativeConfig.class, parent).get(); + } +} \ No newline at end of file diff --git a/src/main/java/eu/midnightdust/motschen/decorative/init/BlockEntities.java b/src/main/java/eu/midnightdust/motschen/decorative/init/BlockEntities.java index 33c61fc..470f48c 100644 --- a/src/main/java/eu/midnightdust/motschen/decorative/init/BlockEntities.java +++ b/src/main/java/eu/midnightdust/motschen/decorative/init/BlockEntities.java @@ -2,6 +2,7 @@ package eu.midnightdust.motschen.decorative.init; import eu.midnightdust.motschen.decorative.DecorativeMain; import eu.midnightdust.motschen.decorative.block.blockentity.*; +import net.minecraft.block.Blocks; import net.minecraft.block.entity.BlockEntityType; import net.minecraft.util.Identifier; import net.minecraft.util.registry.Registry; @@ -11,22 +12,18 @@ public class BlockEntities { public static BlockEntityType PoolSprinklerBlockEntity; public static BlockEntityType ShowerHeadBlockEntity; public static BlockEntityType CeilingFanBlockEntity; - public static BlockEntityType OakChoppingLogBlockEntity; - public static BlockEntityType SpruceChoppingLogBlockEntity; - public static BlockEntityType BirchChoppingLogBlockEntity; - public static BlockEntityType AcaciaChoppingLogBlockEntity; - public static BlockEntityType JungleChoppingLogBlockEntity; - public static BlockEntityType DarkOakChoppingLogBlockEntity; + public static BlockEntityType ChoppingLogBlockEntity; + public static BlockEntityType WallClockBlockEntity; + public static BlockEntityType DigitalClockBlockEntity; + public static BlockEntityType SmokeDetectorBlockEntity; public static void init() { PoolSprinklerBlockEntity = Registry.register(Registry.BLOCK_ENTITY_TYPE, new Identifier(DecorativeMain.MOD_ID,"pool_sprinkler_blockentity"), BlockEntityType.Builder.create(PoolSprinklerBlockEntity::new, Pool.PoolSprinkler).build(null)); ShowerHeadBlockEntity = Registry.register(Registry.BLOCK_ENTITY_TYPE, new Identifier(DecorativeMain.MOD_ID,"shower_head_blockentity"), BlockEntityType.Builder.create(ShowerHeadBlockEntity::new, DecorativeMain.ShowerHead).build(null)); CeilingFanBlockEntity = Registry.register(Registry.BLOCK_ENTITY_TYPE, new Identifier(DecorativeMain.MOD_ID,"ceiling_fan_blockentity"), BlockEntityType.Builder.create(CeilingFanBlockEntity::new, DecorativeMain.CeilingFan).build(null)); - OakChoppingLogBlockEntity = Registry.register(Registry.BLOCK_ENTITY_TYPE, new Identifier(DecorativeMain.MOD_ID,"oak_chopping_log_blockentity"), BlockEntityType.Builder.create(OakChoppingLogBlockEntity::new, LogsWithAxes.OakChoppingLog).build(null)); - SpruceChoppingLogBlockEntity = Registry.register(Registry.BLOCK_ENTITY_TYPE, new Identifier(DecorativeMain.MOD_ID,"spruce_chopping_log_blockentity"), BlockEntityType.Builder.create(SpruceChoppingLogBlockEntity::new, LogsWithAxes.SpruceChoppingLog).build(null)); - BirchChoppingLogBlockEntity = Registry.register(Registry.BLOCK_ENTITY_TYPE, new Identifier(DecorativeMain.MOD_ID,"birch_chopping_log_blockentity"), BlockEntityType.Builder.create(BirchChoppingLogBlockEntity::new, LogsWithAxes.BirchChoppingLog).build(null)); - AcaciaChoppingLogBlockEntity = Registry.register(Registry.BLOCK_ENTITY_TYPE, new Identifier(DecorativeMain.MOD_ID,"acacia_chopping_log_blockentity"), BlockEntityType.Builder.create(AcaciaChoppingLogBlockEntity::new, LogsWithAxes.AcaciaChoppingLog).build(null)); - JungleChoppingLogBlockEntity = Registry.register(Registry.BLOCK_ENTITY_TYPE, new Identifier(DecorativeMain.MOD_ID,"jungle_chopping_log_blockentity"), BlockEntityType.Builder.create(JungleChoppingLogBlockEntity::new, LogsWithAxes.JungleChoppingLog).build(null)); - DarkOakChoppingLogBlockEntity = Registry.register(Registry.BLOCK_ENTITY_TYPE, new Identifier(DecorativeMain.MOD_ID,"dark_oak_chopping_log_blockentity"), BlockEntityType.Builder.create(DarkOakChoppingLogBlockEntity::new, LogsWithAxes.DarkOakChoppingLog).build(null)); + ChoppingLogBlockEntity = Registry.register(Registry.BLOCK_ENTITY_TYPE, new Identifier(DecorativeMain.MOD_ID,"chopping_log_blockentity"), BlockEntityType.Builder.create(ChoppingLogBlockEntity::new, LogsWithAxes.OakChoppingLog, LogsWithAxes.BirchChoppingLog, LogsWithAxes.AcaciaChoppingLog, LogsWithAxes.DarkOakChoppingLog, LogsWithAxes.JungleChoppingLog, LogsWithAxes.SpruceChoppingLog).build(null)); + WallClockBlockEntity = Registry.register(Registry.BLOCK_ENTITY_TYPE, new Identifier(DecorativeMain.MOD_ID,"wall_clock_blockentity"), BlockEntityType.Builder.create(WallClockBlockEntity::new, DecorativeMain.WallClock).build(null)); + DigitalClockBlockEntity = Registry.register(Registry.BLOCK_ENTITY_TYPE, new Identifier(DecorativeMain.MOD_ID,"digital_clock_blockentity"), BlockEntityType.Builder.create(DigitalClockBlockEntity::new, Clocks.RedDigitalClock, Clocks.BlackDigitalClock, Clocks.BlueDigitalClock, Clocks.BrownDigitalClock, Clocks.CyanDigitalClock, Clocks.GrayDigitalClock, Clocks.GreenDigitalClock, Clocks.LightBlueDigitalClock, Clocks.LightGrayDigitalClock, Clocks.LimeDigitalClock, Clocks.MagentaDigitalClock, Clocks.OrangeDigitalClock, Clocks.PinkDigitalClock, Clocks.PurpleDigitalClock, Clocks.WhiteDigitalClock, Clocks.YellowDigitalClock).build(null)); + SmokeDetectorBlockEntity = Registry.register(Registry.BLOCK_ENTITY_TYPE, new Identifier(DecorativeMain.MOD_ID,"smoke_detector_blockentity"), BlockEntityType.Builder.create(SmokeDetectorBlockEntity::new, DecorativeMain.SmokeDetector).build(null)); } } diff --git a/src/main/java/eu/midnightdust/motschen/decorative/init/Clocks.java b/src/main/java/eu/midnightdust/motschen/decorative/init/Clocks.java new file mode 100644 index 0000000..67e3cf3 --- /dev/null +++ b/src/main/java/eu/midnightdust/motschen/decorative/init/Clocks.java @@ -0,0 +1,63 @@ +package eu.midnightdust.motschen.decorative.init; + +import eu.midnightdust.motschen.decorative.DecorativeMain; +import eu.midnightdust.motschen.decorative.block.DigitalClock; +import net.minecraft.block.Block; +import net.minecraft.item.BlockItem; +import net.minecraft.item.Item; +import net.minecraft.util.Identifier; +import net.minecraft.util.registry.Registry; + +public class Clocks { + public static Block WhiteDigitalClock = new DigitalClock(); + public static Block OrangeDigitalClock = new DigitalClock(); + public static Block MagentaDigitalClock = new DigitalClock(); + public static Block LightBlueDigitalClock = new DigitalClock(); + public static Block YellowDigitalClock = new DigitalClock(); + public static Block LimeDigitalClock = new DigitalClock(); + public static Block PinkDigitalClock = new DigitalClock(); + public static Block GrayDigitalClock = new DigitalClock(); + public static Block LightGrayDigitalClock = new DigitalClock(); + public static Block CyanDigitalClock = new DigitalClock(); + public static Block PurpleDigitalClock = new DigitalClock(); + public static Block BlueDigitalClock = new DigitalClock(); + public static Block BrownDigitalClock = new DigitalClock(); + public static Block GreenDigitalClock = new DigitalClock(); + public static Block RedDigitalClock = new DigitalClock(); + public static Block BlackDigitalClock = new DigitalClock(); + + public static void init() { + Registry.register(Registry.BLOCK, new Identifier(DecorativeMain.MOD_ID,"white_digital_clock"), WhiteDigitalClock); + Registry.register(Registry.ITEM, new Identifier(DecorativeMain.MOD_ID,"white_digital_clock"), new BlockItem(WhiteDigitalClock, new Item.Settings().group(DecorativeMain.IndoorGroup))); + Registry.register(Registry.BLOCK, new Identifier(DecorativeMain.MOD_ID,"orange_digital_clock"), OrangeDigitalClock); + Registry.register(Registry.ITEM, new Identifier(DecorativeMain.MOD_ID,"orange_digital_clock"), new BlockItem(OrangeDigitalClock, new Item.Settings().group(DecorativeMain.IndoorGroup))); + Registry.register(Registry.BLOCK, new Identifier(DecorativeMain.MOD_ID,"magenta_digital_clock"), MagentaDigitalClock); + Registry.register(Registry.ITEM, new Identifier(DecorativeMain.MOD_ID,"magenta_digital_clock"), new BlockItem(MagentaDigitalClock, new Item.Settings().group(DecorativeMain.IndoorGroup))); + Registry.register(Registry.BLOCK, new Identifier(DecorativeMain.MOD_ID,"light_blue_digital_clock"), LightBlueDigitalClock); + Registry.register(Registry.ITEM, new Identifier(DecorativeMain.MOD_ID,"light_blue_digital_clock"), new BlockItem(LightBlueDigitalClock, new Item.Settings().group(DecorativeMain.IndoorGroup))); + Registry.register(Registry.BLOCK, new Identifier(DecorativeMain.MOD_ID,"yellow_digital_clock"), YellowDigitalClock); + Registry.register(Registry.ITEM, new Identifier(DecorativeMain.MOD_ID,"yellow_digital_clock"), new BlockItem(YellowDigitalClock, new Item.Settings().group(DecorativeMain.IndoorGroup))); + Registry.register(Registry.BLOCK, new Identifier(DecorativeMain.MOD_ID,"lime_digital_clock"), LimeDigitalClock); + Registry.register(Registry.ITEM, new Identifier(DecorativeMain.MOD_ID,"lime_digital_clock"), new BlockItem(LimeDigitalClock, new Item.Settings().group(DecorativeMain.IndoorGroup))); + Registry.register(Registry.BLOCK, new Identifier(DecorativeMain.MOD_ID,"pink_digital_clock"), PinkDigitalClock); + Registry.register(Registry.ITEM, new Identifier(DecorativeMain.MOD_ID,"pink_digital_clock"), new BlockItem(PinkDigitalClock, new Item.Settings().group(DecorativeMain.IndoorGroup))); + Registry.register(Registry.BLOCK, new Identifier(DecorativeMain.MOD_ID,"gray_digital_clock"), GrayDigitalClock); + Registry.register(Registry.ITEM, new Identifier(DecorativeMain.MOD_ID,"gray_digital_clock"), new BlockItem(GrayDigitalClock, new Item.Settings().group(DecorativeMain.IndoorGroup))); + Registry.register(Registry.BLOCK, new Identifier(DecorativeMain.MOD_ID,"light_gray_digital_clock"), LightGrayDigitalClock); + Registry.register(Registry.ITEM, new Identifier(DecorativeMain.MOD_ID,"light_gray_digital_clock"), new BlockItem(LightGrayDigitalClock, new Item.Settings().group(DecorativeMain.IndoorGroup))); + Registry.register(Registry.BLOCK, new Identifier(DecorativeMain.MOD_ID,"cyan_digital_clock"), CyanDigitalClock); + Registry.register(Registry.ITEM, new Identifier(DecorativeMain.MOD_ID,"cyan_digital_clock"), new BlockItem(CyanDigitalClock, new Item.Settings().group(DecorativeMain.IndoorGroup))); + Registry.register(Registry.BLOCK, new Identifier(DecorativeMain.MOD_ID,"purple_digital_clock"), PurpleDigitalClock); + Registry.register(Registry.ITEM, new Identifier(DecorativeMain.MOD_ID,"purple_digital_clock"), new BlockItem(PurpleDigitalClock, new Item.Settings().group(DecorativeMain.IndoorGroup))); + Registry.register(Registry.BLOCK, new Identifier(DecorativeMain.MOD_ID,"blue_digital_clock"), BlueDigitalClock); + Registry.register(Registry.ITEM, new Identifier(DecorativeMain.MOD_ID,"blue_digital_clock"), new BlockItem(BlueDigitalClock, new Item.Settings().group(DecorativeMain.IndoorGroup))); + Registry.register(Registry.BLOCK, new Identifier(DecorativeMain.MOD_ID,"brown_digital_clock"), BrownDigitalClock); + Registry.register(Registry.ITEM, new Identifier(DecorativeMain.MOD_ID,"brown_digital_clock"), new BlockItem(BrownDigitalClock, new Item.Settings().group(DecorativeMain.IndoorGroup))); + Registry.register(Registry.BLOCK, new Identifier(DecorativeMain.MOD_ID,"green_digital_clock"), GreenDigitalClock); + Registry.register(Registry.ITEM, new Identifier(DecorativeMain.MOD_ID,"green_digital_clock"), new BlockItem(GreenDigitalClock, new Item.Settings().group(DecorativeMain.IndoorGroup))); + Registry.register(Registry.BLOCK, new Identifier(DecorativeMain.MOD_ID,"red_digital_clock"), RedDigitalClock); + Registry.register(Registry.ITEM, new Identifier(DecorativeMain.MOD_ID,"red_digital_clock"), new BlockItem(RedDigitalClock, new Item.Settings().group(DecorativeMain.IndoorGroup))); + Registry.register(Registry.BLOCK, new Identifier(DecorativeMain.MOD_ID,"black_digital_clock"), BlackDigitalClock); + Registry.register(Registry.ITEM, new Identifier(DecorativeMain.MOD_ID,"black_digital_clock"), new BlockItem(BlackDigitalClock, new Item.Settings().group(DecorativeMain.IndoorGroup))); + } +} diff --git a/src/main/java/eu/midnightdust/motschen/decorative/init/LogsWithAxes.java b/src/main/java/eu/midnightdust/motschen/decorative/init/LogsWithAxes.java index dea8fa7..ac49918 100644 --- a/src/main/java/eu/midnightdust/motschen/decorative/init/LogsWithAxes.java +++ b/src/main/java/eu/midnightdust/motschen/decorative/init/LogsWithAxes.java @@ -9,12 +9,12 @@ import net.minecraft.util.Identifier; import net.minecraft.util.registry.Registry; public class LogsWithAxes { - public static Block OakChoppingLog = new OakChoppingLog(); - public static Block SpruceChoppingLog = new SpruceChoppingLog(); - public static Block BirchChoppingLog = new BirchChoppingLog(); - public static Block AcaciaChoppingLog = new AcaciaChoppingLog(); - public static Block JungleChoppingLog = new JungleChoppingLog(); - public static Block DarkOakChoppingLog = new DarkOakChoppingLog(); + public static Block OakChoppingLog = new ChoppingLog(); + public static Block SpruceChoppingLog = new ChoppingLog(); + public static Block BirchChoppingLog = new ChoppingLog(); + public static Block AcaciaChoppingLog = new ChoppingLog(); + public static Block JungleChoppingLog = new ChoppingLog(); + public static Block DarkOakChoppingLog = new ChoppingLog(); public static void init() { Registry.register(Registry.BLOCK, new Identifier(DecorativeMain.MOD_ID,"oak_log_with_axe"), OakChoppingLog); diff --git a/src/main/java/eu/midnightdust/motschen/decorative/item/BathTireItem.java b/src/main/java/eu/midnightdust/motschen/decorative/item/BathTireItem.java index 16e8498..10eac34 100644 --- a/src/main/java/eu/midnightdust/motschen/decorative/item/BathTireItem.java +++ b/src/main/java/eu/midnightdust/motschen/decorative/item/BathTireItem.java @@ -16,7 +16,7 @@ import net.minecraft.util.TypedActionResult; import net.minecraft.util.hit.BlockHitResult; import net.minecraft.util.hit.HitResult; import net.minecraft.util.math.BlockPos; -import net.minecraft.world.RayTraceContext; +import net.minecraft.world.RaycastContext; import net.minecraft.world.World; public class BathTireItem extends Item { @@ -31,7 +31,7 @@ public class BathTireItem extends Item { public TypedActionResult use(World world, PlayerEntity user, Hand hand) { ItemStack itemStack = user.getStackInHand(hand); - HitResult hitResult = rayTrace(world, user, RayTraceContext.FluidHandling.SOURCE_ONLY); + HitResult hitResult = raycast(world, user, RaycastContext.FluidHandling.SOURCE_ONLY); if (hitResult.getType() != HitResult.Type.BLOCK) { return TypedActionResult.pass(itemStack); } else if (world.isClient) { diff --git a/src/main/java/eu/midnightdust/motschen/decorative/sound/DecorativeSoundEvents.java b/src/main/java/eu/midnightdust/motschen/decorative/sound/DecorativeSoundEvents.java index dbdbbd8..b07a7a4 100644 --- a/src/main/java/eu/midnightdust/motschen/decorative/sound/DecorativeSoundEvents.java +++ b/src/main/java/eu/midnightdust/motschen/decorative/sound/DecorativeSoundEvents.java @@ -6,6 +6,7 @@ import net.minecraft.util.registry.Registry; public class DecorativeSoundEvents { public static final SoundEvent CEILINGFAN_AMBIENT = register("decorative:ceiling_fan.ambient"); + public static final SoundEvent SMOKE_DETECTOR_BEEP = register("decorative:smoke_detector.beep"); private static SoundEvent register(String id) { return Registry.register(Registry.SOUND_EVENT, id, new SoundEvent(new Identifier(id))); diff --git a/src/main/java/eu/midnightdust/motschen/decorative/world/OreFeatures.java b/src/main/java/eu/midnightdust/motschen/decorative/world/OreFeatures.java index a1fac42..bd528fa 100644 --- a/src/main/java/eu/midnightdust/motschen/decorative/world/OreFeatures.java +++ b/src/main/java/eu/midnightdust/motschen/decorative/world/OreFeatures.java @@ -9,7 +9,7 @@ import net.minecraft.world.gen.feature.Feature; import net.minecraft.world.gen.feature.OreFeatureConfig; public class OreFeatures { - public static final ConfiguredFeature ROCKY_ASPHALT_FEATURE = Feature.ORE.configure(new OreFeatureConfig(OreFeatureConfig.Rules.BASE_STONE_OVERWORLD, DecorativeMain.RockyAsphalt.getDefaultState(), 7)).method_30377(200).spreadHorizontally().repeat(20); + public static final ConfiguredFeature ROCKY_ASPHALT_FEATURE = Feature.ORE.configure(new OreFeatureConfig(OreFeatureConfig.Rules.BASE_STONE_OVERWORLD, DecorativeMain.RockyAsphalt.getDefaultState(), 7)).applyChance(200).spreadHorizontally().repeat(20); public static void init() { Registry.register(BuiltinRegistries.CONFIGURED_FEATURE, new Identifier(DecorativeMain.MOD_ID, "rocky_asphalt"), ROCKY_ASPHALT_FEATURE); diff --git a/src/main/resources/assets/decorative/blockstates/black_digital_clock.json b/src/main/resources/assets/decorative/blockstates/black_digital_clock.json new file mode 100644 index 0000000..1c5a1c4 --- /dev/null +++ b/src/main/resources/assets/decorative/blockstates/black_digital_clock.json @@ -0,0 +1,8 @@ +{ + "variants": { + "facing=south": { "model": "decorative:block/black_digital_clock", "y": 180 }, + "facing=west": { "model": "decorative:block/black_digital_clock", "y": 270 }, + "facing=north": { "model": "decorative:block/black_digital_clock" }, + "facing=east": { "model": "decorative:block/black_digital_clock", "y": 90 } + } +} diff --git a/src/main/resources/assets/decorative/blockstates/blue_digital_clock.json b/src/main/resources/assets/decorative/blockstates/blue_digital_clock.json new file mode 100644 index 0000000..c8fabda --- /dev/null +++ b/src/main/resources/assets/decorative/blockstates/blue_digital_clock.json @@ -0,0 +1,8 @@ +{ + "variants": { + "facing=south": { "model": "decorative:block/blue_digital_clock", "y": 180 }, + "facing=west": { "model": "decorative:block/blue_digital_clock", "y": 270 }, + "facing=north": { "model": "decorative:block/blue_digital_clock" }, + "facing=east": { "model": "decorative:block/blue_digital_clock", "y": 90 } + } +} diff --git a/src/main/resources/assets/decorative/blockstates/brown_digital_clock.json b/src/main/resources/assets/decorative/blockstates/brown_digital_clock.json new file mode 100644 index 0000000..cd559df --- /dev/null +++ b/src/main/resources/assets/decorative/blockstates/brown_digital_clock.json @@ -0,0 +1,8 @@ +{ + "variants": { + "facing=south": { "model": "decorative:block/brown_digital_clock", "y": 180 }, + "facing=west": { "model": "decorative:block/brown_digital_clock", "y": 270 }, + "facing=north": { "model": "decorative:block/brown_digital_clock" }, + "facing=east": { "model": "decorative:block/brown_digital_clock", "y": 90 } + } +} diff --git a/src/main/resources/assets/decorative/blockstates/cyan_digital_clock.json b/src/main/resources/assets/decorative/blockstates/cyan_digital_clock.json new file mode 100644 index 0000000..33dd05e --- /dev/null +++ b/src/main/resources/assets/decorative/blockstates/cyan_digital_clock.json @@ -0,0 +1,8 @@ +{ + "variants": { + "facing=south": { "model": "decorative:block/cyan_digital_clock", "y": 180 }, + "facing=west": { "model": "decorative:block/cyan_digital_clock", "y": 270 }, + "facing=north": { "model": "decorative:block/cyan_digital_clock" }, + "facing=east": { "model": "decorative:block/cyan_digital_clock", "y": 90 } + } +} diff --git a/src/main/resources/assets/decorative/blockstates/gray_digital_clock.json b/src/main/resources/assets/decorative/blockstates/gray_digital_clock.json new file mode 100644 index 0000000..239daef --- /dev/null +++ b/src/main/resources/assets/decorative/blockstates/gray_digital_clock.json @@ -0,0 +1,8 @@ +{ + "variants": { + "facing=south": { "model": "decorative:block/gray_digital_clock", "y": 180 }, + "facing=west": { "model": "decorative:block/gray_digital_clock", "y": 270 }, + "facing=north": { "model": "decorative:block/gray_digital_clock" }, + "facing=east": { "model": "decorative:block/gray_digital_clock", "y": 90 } + } +} diff --git a/src/main/resources/assets/decorative/blockstates/green_digital_clock.json b/src/main/resources/assets/decorative/blockstates/green_digital_clock.json new file mode 100644 index 0000000..f7094a5 --- /dev/null +++ b/src/main/resources/assets/decorative/blockstates/green_digital_clock.json @@ -0,0 +1,8 @@ +{ + "variants": { + "facing=south": { "model": "decorative:block/green_digital_clock", "y": 180 }, + "facing=west": { "model": "decorative:block/green_digital_clock", "y": 270 }, + "facing=north": { "model": "decorative:block/green_digital_clock" }, + "facing=east": { "model": "decorative:block/green_digital_clock", "y": 90 } + } +} diff --git a/src/main/resources/assets/decorative/blockstates/light_blue_digital_clock.json b/src/main/resources/assets/decorative/blockstates/light_blue_digital_clock.json new file mode 100644 index 0000000..6e1f731 --- /dev/null +++ b/src/main/resources/assets/decorative/blockstates/light_blue_digital_clock.json @@ -0,0 +1,8 @@ +{ + "variants": { + "facing=south": { "model": "decorative:block/light_blue_digital_clock", "y": 180 }, + "facing=west": { "model": "decorative:block/light_blue_digital_clock", "y": 270 }, + "facing=north": { "model": "decorative:block/light_blue_digital_clock" }, + "facing=east": { "model": "decorative:block/light_blue_digital_clock", "y": 90 } + } +} diff --git a/src/main/resources/assets/decorative/blockstates/light_gray_digital_clock.json b/src/main/resources/assets/decorative/blockstates/light_gray_digital_clock.json new file mode 100644 index 0000000..4a3321a --- /dev/null +++ b/src/main/resources/assets/decorative/blockstates/light_gray_digital_clock.json @@ -0,0 +1,8 @@ +{ + "variants": { + "facing=south": { "model": "decorative:block/light_gray_digital_clock", "y": 180 }, + "facing=west": { "model": "decorative:block/light_gray_digital_clock", "y": 270 }, + "facing=north": { "model": "decorative:block/light_gray_digital_clock" }, + "facing=east": { "model": "decorative:block/light_gray_digital_clock", "y": 90 } + } +} diff --git a/src/main/resources/assets/decorative/blockstates/lime_digital_clock.json b/src/main/resources/assets/decorative/blockstates/lime_digital_clock.json new file mode 100644 index 0000000..62bd9a3 --- /dev/null +++ b/src/main/resources/assets/decorative/blockstates/lime_digital_clock.json @@ -0,0 +1,8 @@ +{ + "variants": { + "facing=south": { "model": "decorative:block/lime_digital_clock", "y": 180 }, + "facing=west": { "model": "decorative:block/lime_digital_clock", "y": 270 }, + "facing=north": { "model": "decorative:block/lime_digital_clock" }, + "facing=east": { "model": "decorative:block/lime_digital_clock", "y": 90 } + } +} diff --git a/src/main/resources/assets/decorative/blockstates/magenta_digital_clock.json b/src/main/resources/assets/decorative/blockstates/magenta_digital_clock.json new file mode 100644 index 0000000..7a600a5 --- /dev/null +++ b/src/main/resources/assets/decorative/blockstates/magenta_digital_clock.json @@ -0,0 +1,8 @@ +{ + "variants": { + "facing=south": { "model": "decorative:block/magenta_digital_clock", "y": 180 }, + "facing=west": { "model": "decorative:block/magenta_digital_clock", "y": 270 }, + "facing=north": { "model": "decorative:block/magenta_digital_clock" }, + "facing=east": { "model": "decorative:block/magenta_digital_clock", "y": 90 } + } +} diff --git a/src/main/resources/assets/decorative/blockstates/orange_digital_clock.json b/src/main/resources/assets/decorative/blockstates/orange_digital_clock.json new file mode 100644 index 0000000..ae6eee0 --- /dev/null +++ b/src/main/resources/assets/decorative/blockstates/orange_digital_clock.json @@ -0,0 +1,8 @@ +{ + "variants": { + "facing=south": { "model": "decorative:block/orange_digital_clock", "y": 180 }, + "facing=west": { "model": "decorative:block/orange_digital_clock", "y": 270 }, + "facing=north": { "model": "decorative:block/orange_digital_clock" }, + "facing=east": { "model": "decorative:block/orange_digital_clock", "y": 90 } + } +} diff --git a/src/main/resources/assets/decorative/blockstates/pink_digital_clock.json b/src/main/resources/assets/decorative/blockstates/pink_digital_clock.json new file mode 100644 index 0000000..9c01b7c --- /dev/null +++ b/src/main/resources/assets/decorative/blockstates/pink_digital_clock.json @@ -0,0 +1,8 @@ +{ + "variants": { + "facing=south": { "model": "decorative:block/pink_digital_clock", "y": 180 }, + "facing=west": { "model": "decorative:block/pink_digital_clock", "y": 270 }, + "facing=north": { "model": "decorative:block/pink_digital_clock" }, + "facing=east": { "model": "decorative:block/pink_digital_clock", "y": 90 } + } +} diff --git a/src/main/resources/assets/decorative/blockstates/purple_digital_clock.json b/src/main/resources/assets/decorative/blockstates/purple_digital_clock.json new file mode 100644 index 0000000..df40d38 --- /dev/null +++ b/src/main/resources/assets/decorative/blockstates/purple_digital_clock.json @@ -0,0 +1,8 @@ +{ + "variants": { + "facing=south": { "model": "decorative:block/purple_digital_clock", "y": 180 }, + "facing=west": { "model": "decorative:block/purple_digital_clock", "y": 270 }, + "facing=north": { "model": "decorative:block/purple_digital_clock" }, + "facing=east": { "model": "decorative:block/purple_digital_clock", "y": 90 } + } +} diff --git a/src/main/resources/assets/decorative/blockstates/red_digital_clock.json b/src/main/resources/assets/decorative/blockstates/red_digital_clock.json new file mode 100644 index 0000000..b6a3e55 --- /dev/null +++ b/src/main/resources/assets/decorative/blockstates/red_digital_clock.json @@ -0,0 +1,8 @@ +{ + "variants": { + "facing=south": { "model": "decorative:block/red_digital_clock", "y": 180 }, + "facing=west": { "model": "decorative:block/red_digital_clock", "y": 270 }, + "facing=north": { "model": "decorative:block/red_digital_clock" }, + "facing=east": { "model": "decorative:block/red_digital_clock", "y": 90 } + } +} diff --git a/src/main/resources/assets/decorative/blockstates/smoke_detector.json b/src/main/resources/assets/decorative/blockstates/smoke_detector.json new file mode 100644 index 0000000..f2fdd8d --- /dev/null +++ b/src/main/resources/assets/decorative/blockstates/smoke_detector.json @@ -0,0 +1,6 @@ +{ + "variants": { + "active=true": { "model": "decorative:block/smoke_detector_on" }, + "active=false": { "model": "decorative:block/smoke_detector_off" } + } +} diff --git a/src/main/resources/assets/decorative/blockstates/wall_clock.json b/src/main/resources/assets/decorative/blockstates/wall_clock.json new file mode 100644 index 0000000..8ac145c --- /dev/null +++ b/src/main/resources/assets/decorative/blockstates/wall_clock.json @@ -0,0 +1,8 @@ +{ + "variants": { + "facing=south": { "model": "decorative:block/wall_clock", "y": 180 }, + "facing=west": { "model": "decorative:block/wall_clock", "y": 270 }, + "facing=north": { "model": "decorative:block/wall_clock" }, + "facing=east": { "model": "decorative:block/wall_clock", "y": 90 } + } +} diff --git a/src/main/resources/assets/decorative/blockstates/white_digital_clock.json b/src/main/resources/assets/decorative/blockstates/white_digital_clock.json new file mode 100644 index 0000000..8d30cc1 --- /dev/null +++ b/src/main/resources/assets/decorative/blockstates/white_digital_clock.json @@ -0,0 +1,8 @@ +{ + "variants": { + "facing=south": { "model": "decorative:block/white_digital_clock", "y": 180 }, + "facing=west": { "model": "decorative:block/white_digital_clock", "y": 270 }, + "facing=north": { "model": "decorative:block/white_digital_clock" }, + "facing=east": { "model": "decorative:block/white_digital_clock", "y": 90 } + } +} diff --git a/src/main/resources/assets/decorative/blockstates/yellow_digital_clock.json b/src/main/resources/assets/decorative/blockstates/yellow_digital_clock.json new file mode 100644 index 0000000..78600c9 --- /dev/null +++ b/src/main/resources/assets/decorative/blockstates/yellow_digital_clock.json @@ -0,0 +1,8 @@ +{ + "variants": { + "facing=south": { "model": "decorative:block/yellow_digital_clock", "y": 180 }, + "facing=west": { "model": "decorative:block/yellow_digital_clock", "y": 270 }, + "facing=north": { "model": "decorative:block/yellow_digital_clock" }, + "facing=east": { "model": "decorative:block/yellow_digital_clock", "y": 90 } + } +} diff --git a/src/main/resources/assets/decorative/materialmaps/block/black_double_lamp.json b/src/main/resources/assets/decorative/materialmaps/block/black_double_lamp.json new file mode 100644 index 0000000..7cec135 --- /dev/null +++ b/src/main/resources/assets/decorative/materialmaps/block/black_double_lamp.json @@ -0,0 +1,10 @@ +{ + "defaultMap": { + "spriteMap": [ + { + "sprite": "minecraft:block/redstone_lamp_on", + "material": "canvas:warm_glow" + } + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decorative/materialmaps/block/black_lamp.json b/src/main/resources/assets/decorative/materialmaps/block/black_lamp.json new file mode 100644 index 0000000..7cec135 --- /dev/null +++ b/src/main/resources/assets/decorative/materialmaps/block/black_lamp.json @@ -0,0 +1,10 @@ +{ + "defaultMap": { + "spriteMap": [ + { + "sprite": "minecraft:block/redstone_lamp_on", + "material": "canvas:warm_glow" + } + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decorative/materialmaps/block/blue_double_lamp.json b/src/main/resources/assets/decorative/materialmaps/block/blue_double_lamp.json new file mode 100644 index 0000000..7cec135 --- /dev/null +++ b/src/main/resources/assets/decorative/materialmaps/block/blue_double_lamp.json @@ -0,0 +1,10 @@ +{ + "defaultMap": { + "spriteMap": [ + { + "sprite": "minecraft:block/redstone_lamp_on", + "material": "canvas:warm_glow" + } + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decorative/materialmaps/block/blue_lamp.json b/src/main/resources/assets/decorative/materialmaps/block/blue_lamp.json new file mode 100644 index 0000000..7cec135 --- /dev/null +++ b/src/main/resources/assets/decorative/materialmaps/block/blue_lamp.json @@ -0,0 +1,10 @@ +{ + "defaultMap": { + "spriteMap": [ + { + "sprite": "minecraft:block/redstone_lamp_on", + "material": "canvas:warm_glow" + } + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decorative/materialmaps/block/brown_double_lamp.json b/src/main/resources/assets/decorative/materialmaps/block/brown_double_lamp.json new file mode 100644 index 0000000..7cec135 --- /dev/null +++ b/src/main/resources/assets/decorative/materialmaps/block/brown_double_lamp.json @@ -0,0 +1,10 @@ +{ + "defaultMap": { + "spriteMap": [ + { + "sprite": "minecraft:block/redstone_lamp_on", + "material": "canvas:warm_glow" + } + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decorative/materialmaps/block/brown_lamp.json b/src/main/resources/assets/decorative/materialmaps/block/brown_lamp.json new file mode 100644 index 0000000..7cec135 --- /dev/null +++ b/src/main/resources/assets/decorative/materialmaps/block/brown_lamp.json @@ -0,0 +1,10 @@ +{ + "defaultMap": { + "spriteMap": [ + { + "sprite": "minecraft:block/redstone_lamp_on", + "material": "canvas:warm_glow" + } + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decorative/materialmaps/block/christmas_lights.json b/src/main/resources/assets/decorative/materialmaps/block/christmas_lights.json new file mode 100644 index 0000000..26d17e2 --- /dev/null +++ b/src/main/resources/assets/decorative/materialmaps/block/christmas_lights.json @@ -0,0 +1,14 @@ +{ + "defaultMap": { + "spriteMap": [ + { + "sprite": "decorative:block/red_lamp", + "material": "canvas:emissive_no_diffuse" + }, + { + "sprite": "decorative:block/green_lamp", + "material": "canvas:emissive_no_diffuse" + } + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decorative/materialmaps/block/cyan_double_lamp.json b/src/main/resources/assets/decorative/materialmaps/block/cyan_double_lamp.json new file mode 100644 index 0000000..7cec135 --- /dev/null +++ b/src/main/resources/assets/decorative/materialmaps/block/cyan_double_lamp.json @@ -0,0 +1,10 @@ +{ + "defaultMap": { + "spriteMap": [ + { + "sprite": "minecraft:block/redstone_lamp_on", + "material": "canvas:warm_glow" + } + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decorative/materialmaps/block/cyan_lamp.json b/src/main/resources/assets/decorative/materialmaps/block/cyan_lamp.json new file mode 100644 index 0000000..7cec135 --- /dev/null +++ b/src/main/resources/assets/decorative/materialmaps/block/cyan_lamp.json @@ -0,0 +1,10 @@ +{ + "defaultMap": { + "spriteMap": [ + { + "sprite": "minecraft:block/redstone_lamp_on", + "material": "canvas:warm_glow" + } + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decorative/materialmaps/block/gray_double_lamp.json b/src/main/resources/assets/decorative/materialmaps/block/gray_double_lamp.json new file mode 100644 index 0000000..7cec135 --- /dev/null +++ b/src/main/resources/assets/decorative/materialmaps/block/gray_double_lamp.json @@ -0,0 +1,10 @@ +{ + "defaultMap": { + "spriteMap": [ + { + "sprite": "minecraft:block/redstone_lamp_on", + "material": "canvas:warm_glow" + } + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decorative/materialmaps/block/gray_lamp.json b/src/main/resources/assets/decorative/materialmaps/block/gray_lamp.json new file mode 100644 index 0000000..7cec135 --- /dev/null +++ b/src/main/resources/assets/decorative/materialmaps/block/gray_lamp.json @@ -0,0 +1,10 @@ +{ + "defaultMap": { + "spriteMap": [ + { + "sprite": "minecraft:block/redstone_lamp_on", + "material": "canvas:warm_glow" + } + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decorative/materialmaps/block/green_double_lamp.json b/src/main/resources/assets/decorative/materialmaps/block/green_double_lamp.json new file mode 100644 index 0000000..7cec135 --- /dev/null +++ b/src/main/resources/assets/decorative/materialmaps/block/green_double_lamp.json @@ -0,0 +1,10 @@ +{ + "defaultMap": { + "spriteMap": [ + { + "sprite": "minecraft:block/redstone_lamp_on", + "material": "canvas:warm_glow" + } + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decorative/materialmaps/block/green_lamp.json b/src/main/resources/assets/decorative/materialmaps/block/green_lamp.json new file mode 100644 index 0000000..7cec135 --- /dev/null +++ b/src/main/resources/assets/decorative/materialmaps/block/green_lamp.json @@ -0,0 +1,10 @@ +{ + "defaultMap": { + "spriteMap": [ + { + "sprite": "minecraft:block/redstone_lamp_on", + "material": "canvas:warm_glow" + } + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decorative/materialmaps/block/light_blue_double_lamp.json b/src/main/resources/assets/decorative/materialmaps/block/light_blue_double_lamp.json new file mode 100644 index 0000000..7cec135 --- /dev/null +++ b/src/main/resources/assets/decorative/materialmaps/block/light_blue_double_lamp.json @@ -0,0 +1,10 @@ +{ + "defaultMap": { + "spriteMap": [ + { + "sprite": "minecraft:block/redstone_lamp_on", + "material": "canvas:warm_glow" + } + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decorative/materialmaps/block/light_blue_lamp.json b/src/main/resources/assets/decorative/materialmaps/block/light_blue_lamp.json new file mode 100644 index 0000000..7cec135 --- /dev/null +++ b/src/main/resources/assets/decorative/materialmaps/block/light_blue_lamp.json @@ -0,0 +1,10 @@ +{ + "defaultMap": { + "spriteMap": [ + { + "sprite": "minecraft:block/redstone_lamp_on", + "material": "canvas:warm_glow" + } + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decorative/materialmaps/block/light_gray_double_lamp.json b/src/main/resources/assets/decorative/materialmaps/block/light_gray_double_lamp.json new file mode 100644 index 0000000..7cec135 --- /dev/null +++ b/src/main/resources/assets/decorative/materialmaps/block/light_gray_double_lamp.json @@ -0,0 +1,10 @@ +{ + "defaultMap": { + "spriteMap": [ + { + "sprite": "minecraft:block/redstone_lamp_on", + "material": "canvas:warm_glow" + } + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decorative/materialmaps/block/light_gray_lamp.json b/src/main/resources/assets/decorative/materialmaps/block/light_gray_lamp.json new file mode 100644 index 0000000..7cec135 --- /dev/null +++ b/src/main/resources/assets/decorative/materialmaps/block/light_gray_lamp.json @@ -0,0 +1,10 @@ +{ + "defaultMap": { + "spriteMap": [ + { + "sprite": "minecraft:block/redstone_lamp_on", + "material": "canvas:warm_glow" + } + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decorative/materialmaps/block/lime_double_lamp.json b/src/main/resources/assets/decorative/materialmaps/block/lime_double_lamp.json new file mode 100644 index 0000000..7cec135 --- /dev/null +++ b/src/main/resources/assets/decorative/materialmaps/block/lime_double_lamp.json @@ -0,0 +1,10 @@ +{ + "defaultMap": { + "spriteMap": [ + { + "sprite": "minecraft:block/redstone_lamp_on", + "material": "canvas:warm_glow" + } + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decorative/materialmaps/block/lime_lamp.json b/src/main/resources/assets/decorative/materialmaps/block/lime_lamp.json new file mode 100644 index 0000000..7cec135 --- /dev/null +++ b/src/main/resources/assets/decorative/materialmaps/block/lime_lamp.json @@ -0,0 +1,10 @@ +{ + "defaultMap": { + "spriteMap": [ + { + "sprite": "minecraft:block/redstone_lamp_on", + "material": "canvas:warm_glow" + } + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decorative/materialmaps/block/magenta_double_lamp.json b/src/main/resources/assets/decorative/materialmaps/block/magenta_double_lamp.json new file mode 100644 index 0000000..7cec135 --- /dev/null +++ b/src/main/resources/assets/decorative/materialmaps/block/magenta_double_lamp.json @@ -0,0 +1,10 @@ +{ + "defaultMap": { + "spriteMap": [ + { + "sprite": "minecraft:block/redstone_lamp_on", + "material": "canvas:warm_glow" + } + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decorative/materialmaps/block/magenta_lamp.json b/src/main/resources/assets/decorative/materialmaps/block/magenta_lamp.json new file mode 100644 index 0000000..7cec135 --- /dev/null +++ b/src/main/resources/assets/decorative/materialmaps/block/magenta_lamp.json @@ -0,0 +1,10 @@ +{ + "defaultMap": { + "spriteMap": [ + { + "sprite": "minecraft:block/redstone_lamp_on", + "material": "canvas:warm_glow" + } + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decorative/materialmaps/block/old_television.json b/src/main/resources/assets/decorative/materialmaps/block/old_television.json new file mode 100644 index 0000000..3eebe20 --- /dev/null +++ b/src/main/resources/assets/decorative/materialmaps/block/old_television.json @@ -0,0 +1,26 @@ +{ + "defaultMap": { + "spriteMap": [ + { + "sprite": "decorative:tv/nyancat", + "material": "canvas:emissive_no_diffuse" + }, + { + "sprite": "decorative:tv/creeper", + "material": "canvas:emissive_no_diffuse" + }, + { + "sprite": "decorative:tv/woodys", + "material": "canvas:emissive_no_diffuse" + }, + { + "sprite": "decorative:tv/tater", + "material": "canvas:emissive_no_diffuse" + }, + { + "sprite": "minecraft:block/lime_terracotta", + "material": "canvas:emissive_no_diffuse" + } + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decorative/materialmaps/block/orange_double_lamp.json b/src/main/resources/assets/decorative/materialmaps/block/orange_double_lamp.json new file mode 100644 index 0000000..7cec135 --- /dev/null +++ b/src/main/resources/assets/decorative/materialmaps/block/orange_double_lamp.json @@ -0,0 +1,10 @@ +{ + "defaultMap": { + "spriteMap": [ + { + "sprite": "minecraft:block/redstone_lamp_on", + "material": "canvas:warm_glow" + } + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decorative/materialmaps/block/orange_lamp.json b/src/main/resources/assets/decorative/materialmaps/block/orange_lamp.json new file mode 100644 index 0000000..7cec135 --- /dev/null +++ b/src/main/resources/assets/decorative/materialmaps/block/orange_lamp.json @@ -0,0 +1,10 @@ +{ + "defaultMap": { + "spriteMap": [ + { + "sprite": "minecraft:block/redstone_lamp_on", + "material": "canvas:warm_glow" + } + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decorative/materialmaps/block/pink_double_lamp.json b/src/main/resources/assets/decorative/materialmaps/block/pink_double_lamp.json new file mode 100644 index 0000000..7cec135 --- /dev/null +++ b/src/main/resources/assets/decorative/materialmaps/block/pink_double_lamp.json @@ -0,0 +1,10 @@ +{ + "defaultMap": { + "spriteMap": [ + { + "sprite": "minecraft:block/redstone_lamp_on", + "material": "canvas:warm_glow" + } + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decorative/materialmaps/block/pink_lamp.json b/src/main/resources/assets/decorative/materialmaps/block/pink_lamp.json new file mode 100644 index 0000000..7cec135 --- /dev/null +++ b/src/main/resources/assets/decorative/materialmaps/block/pink_lamp.json @@ -0,0 +1,10 @@ +{ + "defaultMap": { + "spriteMap": [ + { + "sprite": "minecraft:block/redstone_lamp_on", + "material": "canvas:warm_glow" + } + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decorative/materialmaps/block/purple_double_lamp.json b/src/main/resources/assets/decorative/materialmaps/block/purple_double_lamp.json new file mode 100644 index 0000000..7cec135 --- /dev/null +++ b/src/main/resources/assets/decorative/materialmaps/block/purple_double_lamp.json @@ -0,0 +1,10 @@ +{ + "defaultMap": { + "spriteMap": [ + { + "sprite": "minecraft:block/redstone_lamp_on", + "material": "canvas:warm_glow" + } + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decorative/materialmaps/block/purple_lamp.json b/src/main/resources/assets/decorative/materialmaps/block/purple_lamp.json new file mode 100644 index 0000000..7cec135 --- /dev/null +++ b/src/main/resources/assets/decorative/materialmaps/block/purple_lamp.json @@ -0,0 +1,10 @@ +{ + "defaultMap": { + "spriteMap": [ + { + "sprite": "minecraft:block/redstone_lamp_on", + "material": "canvas:warm_glow" + } + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decorative/materialmaps/block/red_double_lamp.json b/src/main/resources/assets/decorative/materialmaps/block/red_double_lamp.json new file mode 100644 index 0000000..7cec135 --- /dev/null +++ b/src/main/resources/assets/decorative/materialmaps/block/red_double_lamp.json @@ -0,0 +1,10 @@ +{ + "defaultMap": { + "spriteMap": [ + { + "sprite": "minecraft:block/redstone_lamp_on", + "material": "canvas:warm_glow" + } + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decorative/materialmaps/block/red_lamp.json b/src/main/resources/assets/decorative/materialmaps/block/red_lamp.json new file mode 100644 index 0000000..7cec135 --- /dev/null +++ b/src/main/resources/assets/decorative/materialmaps/block/red_lamp.json @@ -0,0 +1,10 @@ +{ + "defaultMap": { + "spriteMap": [ + { + "sprite": "minecraft:block/redstone_lamp_on", + "material": "canvas:warm_glow" + } + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decorative/materialmaps/block/television.json b/src/main/resources/assets/decorative/materialmaps/block/television.json new file mode 100644 index 0000000..ebc2eff --- /dev/null +++ b/src/main/resources/assets/decorative/materialmaps/block/television.json @@ -0,0 +1,22 @@ +{ + "defaultMap": { + "spriteMap": [ + { + "sprite": "decorative:tv/nyancat", + "material": "canvas:emissive_no_diffuse" + }, + { + "sprite": "decorative:tv/creeper", + "material": "canvas:emissive_no_diffuse" + }, + { + "sprite": "decorative:tv/woodys", + "material": "canvas:emissive_no_diffuse" + }, + { + "sprite": "decorative:tv/tater", + "material": "canvas:emissive_no_diffuse" + } + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decorative/materialmaps/block/white_double_lamp.json b/src/main/resources/assets/decorative/materialmaps/block/white_double_lamp.json new file mode 100644 index 0000000..7cec135 --- /dev/null +++ b/src/main/resources/assets/decorative/materialmaps/block/white_double_lamp.json @@ -0,0 +1,10 @@ +{ + "defaultMap": { + "spriteMap": [ + { + "sprite": "minecraft:block/redstone_lamp_on", + "material": "canvas:warm_glow" + } + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decorative/materialmaps/block/white_lamp.json b/src/main/resources/assets/decorative/materialmaps/block/white_lamp.json new file mode 100644 index 0000000..7cec135 --- /dev/null +++ b/src/main/resources/assets/decorative/materialmaps/block/white_lamp.json @@ -0,0 +1,10 @@ +{ + "defaultMap": { + "spriteMap": [ + { + "sprite": "minecraft:block/redstone_lamp_on", + "material": "canvas:warm_glow" + } + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decorative/materialmaps/block/yellow_double_lamp.json b/src/main/resources/assets/decorative/materialmaps/block/yellow_double_lamp.json new file mode 100644 index 0000000..7cec135 --- /dev/null +++ b/src/main/resources/assets/decorative/materialmaps/block/yellow_double_lamp.json @@ -0,0 +1,10 @@ +{ + "defaultMap": { + "spriteMap": [ + { + "sprite": "minecraft:block/redstone_lamp_on", + "material": "canvas:warm_glow" + } + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decorative/materialmaps/block/yellow_lamp.json b/src/main/resources/assets/decorative/materialmaps/block/yellow_lamp.json new file mode 100644 index 0000000..7cec135 --- /dev/null +++ b/src/main/resources/assets/decorative/materialmaps/block/yellow_lamp.json @@ -0,0 +1,10 @@ +{ + "defaultMap": { + "spriteMap": [ + { + "sprite": "minecraft:block/redstone_lamp_on", + "material": "canvas:warm_glow" + } + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decorative/materialmaps/block_entity/digital_clock_blockentity.json b/src/main/resources/assets/decorative/materialmaps/block_entity/digital_clock_blockentity.json new file mode 100644 index 0000000..81b4faf --- /dev/null +++ b/src/main/resources/assets/decorative/materialmaps/block_entity/digital_clock_blockentity.json @@ -0,0 +1,12 @@ +{ + "map": [ + { + "predicate": { + "materialPredicate": { + "renderLayerName": "text" + } + }, + "material": "canvas:emissive_transform" + } + ] +} diff --git a/src/main/resources/assets/decorative/models/block/black_digital_clock.json b/src/main/resources/assets/decorative/models/block/black_digital_clock.json new file mode 100644 index 0000000..0349d02 --- /dev/null +++ b/src/main/resources/assets/decorative/models/block/black_digital_clock.json @@ -0,0 +1,6 @@ +{ + "parent": "decorative:block/digital_clock", + "textures": { + "2": "block/black_concrete" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decorative/models/block/blue_digital_clock.json b/src/main/resources/assets/decorative/models/block/blue_digital_clock.json new file mode 100644 index 0000000..6ae5555 --- /dev/null +++ b/src/main/resources/assets/decorative/models/block/blue_digital_clock.json @@ -0,0 +1,6 @@ +{ + "parent": "decorative:block/digital_clock", + "textures": { + "2": "block/blue_concrete" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decorative/models/block/brown_digital_clock.json b/src/main/resources/assets/decorative/models/block/brown_digital_clock.json new file mode 100644 index 0000000..c214a7e --- /dev/null +++ b/src/main/resources/assets/decorative/models/block/brown_digital_clock.json @@ -0,0 +1,6 @@ +{ + "parent": "decorative:block/digital_clock", + "textures": { + "2": "block/brown_concrete" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decorative/models/block/cyan_digital_clock.json b/src/main/resources/assets/decorative/models/block/cyan_digital_clock.json new file mode 100644 index 0000000..ae779fb --- /dev/null +++ b/src/main/resources/assets/decorative/models/block/cyan_digital_clock.json @@ -0,0 +1,6 @@ +{ + "parent": "decorative:block/digital_clock", + "textures": { + "2": "block/cyan_concrete" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decorative/models/block/digital_clock.json b/src/main/resources/assets/decorative/models/block/digital_clock.json new file mode 100644 index 0000000..0e8b081 --- /dev/null +++ b/src/main/resources/assets/decorative/models/block/digital_clock.json @@ -0,0 +1,126 @@ +{ + "credit": "made by Motschen", + "parent": "block/block", + "ambientocclusion": false, + "textures": { + "0": "block/black_concrete", + "1": "block/gray_concrete", + "2": "block/lime_concrete", + "particle": "block/black_concrete" + }, + "elements": [ + { + "from": [2, 0, 5], + "to": [14, 1, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 18]}, + "faces": { + "north": {"uv": [0, 0, 12, 1], "texture": "#2"}, + "east": {"uv": [0, 0, 7, 1], "texture": "#2"}, + "south": {"uv": [0, 0, 12, 1], "texture": "#2"}, + "west": {"uv": [0, 0, 7, 1], "texture": "#2"}, + "up": {"uv": [0, 0, 12, 7], "texture": "#2"}, + "down": {"uv": [0, 0, 12, 7], "texture": "#2"} + } + }, + { + "from": [2, 7, 5], + "to": [14, 8, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 15, 18]}, + "faces": { + "north": {"uv": [0, 0, 12, 1], "texture": "#2"}, + "east": {"uv": [0, 0, 7, 1], "texture": "#2"}, + "south": {"uv": [0, 0, 12, 1], "texture": "#2"}, + "west": {"uv": [0, 0, 7, 1], "texture": "#2"}, + "up": {"uv": [0, 0, 12, 7], "texture": "#2"}, + "down": {"uv": [0, 0, 12, 7], "texture": "#2"} + } + }, + { + "from": [1, 1, 5], + "to": [2, 7, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [9, 9, 19]}, + "faces": { + "north": {"uv": [0, 0, 1, 6], "texture": "#2"}, + "east": {"uv": [0, 0, 7, 6], "texture": "#2"}, + "south": {"uv": [0, 0, 1, 6], "texture": "#2"}, + "west": {"uv": [0, 0, 7, 6], "texture": "#2"}, + "up": {"uv": [0, 0, 1, 7], "texture": "#2"}, + "down": {"uv": [0, 0, 1, 7], "texture": "#2"} + } + }, + { + "from": [14, 1, 5], + "to": [15, 7, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [22, 9, 19]}, + "faces": { + "north": {"uv": [0, 0, 1, 6], "texture": "#2"}, + "east": {"uv": [0, 0, 7, 6], "texture": "#2"}, + "south": {"uv": [0, 0, 1, 6], "texture": "#2"}, + "west": {"uv": [0, 0, 7, 6], "texture": "#2"}, + "up": {"uv": [0, 0, 1, 7], "texture": "#2"}, + "down": {"uv": [0, 0, 1, 7], "texture": "#2"} + } + }, + { + "from": [-5.75, 3.2, 5.01], + "to": [-4.75, 4.6, 11.99], + "rotation": {"angle": 45, "axis": "z", "origin": [2, 11, 13]}, + "faces": { + "north": {"uv": [0, 0, 1, 1.4], "texture": "#2"}, + "east": {"uv": [0, 0, 6.98, 1.4], "texture": "#2"}, + "south": {"uv": [0, 0, 1, 1.4], "texture": "#2"}, + "west": {"uv": [0, 0, 6.98, 1.4], "texture": "#2"}, + "up": {"uv": [0, 0, 1, 6.98], "texture": "#2"}, + "down": {"uv": [0, 0, 1, 6.98], "texture": "#2"} + } + }, + { + "from": [4.2, 13.75, 5.01], + "to": [5.6, 14.75, 11.99], + "rotation": {"angle": 45, "axis": "z", "origin": [12, 7, 13]}, + "faces": { + "north": {"uv": [0, 0, 1, 1.4], "rotation": 270, "texture": "#2"}, + "east": {"uv": [0, 0, 1, 6.98], "rotation": 90, "texture": "#2"}, + "south": {"uv": [0, 0, 1, 1.4], "rotation": 90, "texture": "#2"}, + "west": {"uv": [0, 0, 1, 6.98], "rotation": 90, "texture": "#2"}, + "up": {"uv": [0, 0, 6.98, 1.4], "rotation": 90, "texture": "#2"}, + "down": {"uv": [0, 0, 6.98, 1.4], "rotation": 90, "texture": "#2"} + } + }, + { + "from": [6.2, 3.75, 5.01], + "to": [7.6, 4.75, 11.99], + "rotation": {"angle": -45, "axis": "z", "origin": [14, -3, 13]}, + "faces": { + "north": {"uv": [0, 0, 1, 1.4], "rotation": 270, "texture": "#2"}, + "east": {"uv": [0, 0, 1, 6.98], "rotation": 90, "texture": "#2"}, + "south": {"uv": [0, 0, 1, 1.4], "rotation": 90, "texture": "#2"}, + "west": {"uv": [0, 0, 1, 6.98], "rotation": 90, "texture": "#2"}, + "up": {"uv": [0, 0, 6.98, 1.4], "rotation": 90, "texture": "#2"}, + "down": {"uv": [0, 0, 6.98, 1.4], "rotation": 90, "texture": "#2"} + } + }, + { + "from": [10.75, 7.4, 5.01], + "to": [11.75, 8.8, 11.99], + "rotation": {"angle": -45, "axis": "z", "origin": [4, 1, 13]}, + "faces": { + "north": {"uv": [0, 0, 1, 1.4], "rotation": 180, "texture": "#2"}, + "east": {"uv": [0, 0, 6.98, 1.4], "rotation": 180, "texture": "#2"}, + "south": {"uv": [0, 0, 1, 1.4], "rotation": 180, "texture": "#2"}, + "west": {"uv": [0, 0, 6.98, 1.4], "rotation": 180, "texture": "#2"}, + "up": {"uv": [0, 0, 1, 6.98], "rotation": 180, "texture": "#2"}, + "down": {"uv": [0, 0, 1, 6.98], "rotation": 180, "texture": "#2"} + } + }, + { + "from": [2, 1, 6], + "to": [14, 7, 11.5], + "rotation": {"angle": 0, "axis": "y", "origin": [10, 9, 14]}, + "faces": { + "north": {"uv": [0, 0, 12, 6], "texture": "#0"}, + "south": {"uv": [0, 0, 12, 6], "texture": "#1"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/decorative/models/block/gray_digital_clock.json b/src/main/resources/assets/decorative/models/block/gray_digital_clock.json new file mode 100644 index 0000000..676e4f8 --- /dev/null +++ b/src/main/resources/assets/decorative/models/block/gray_digital_clock.json @@ -0,0 +1,6 @@ +{ + "parent": "decorative:block/digital_clock", + "textures": { + "2": "block/gray_concrete" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decorative/models/block/green_digital_clock.json b/src/main/resources/assets/decorative/models/block/green_digital_clock.json new file mode 100644 index 0000000..c3d1b20 --- /dev/null +++ b/src/main/resources/assets/decorative/models/block/green_digital_clock.json @@ -0,0 +1,6 @@ +{ + "parent": "decorative:block/digital_clock", + "textures": { + "2": "block/green_concrete" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decorative/models/block/light_blue_digital_clock.json b/src/main/resources/assets/decorative/models/block/light_blue_digital_clock.json new file mode 100644 index 0000000..4e5ca74 --- /dev/null +++ b/src/main/resources/assets/decorative/models/block/light_blue_digital_clock.json @@ -0,0 +1,6 @@ +{ + "parent": "decorative:block/digital_clock", + "textures": { + "2": "block/light_blue_concrete" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decorative/models/block/light_gray_digital_clock.json b/src/main/resources/assets/decorative/models/block/light_gray_digital_clock.json new file mode 100644 index 0000000..9f1a943 --- /dev/null +++ b/src/main/resources/assets/decorative/models/block/light_gray_digital_clock.json @@ -0,0 +1,6 @@ +{ + "parent": "decorative:block/digital_clock", + "textures": { + "2": "block/light_gray_concrete" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decorative/models/block/lime_digital_clock.json b/src/main/resources/assets/decorative/models/block/lime_digital_clock.json new file mode 100644 index 0000000..f4d382e --- /dev/null +++ b/src/main/resources/assets/decorative/models/block/lime_digital_clock.json @@ -0,0 +1,6 @@ +{ + "parent": "decorative:block/digital_clock", + "textures": { + "2": "block/lime_concrete" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decorative/models/block/magenta_digital_clock.json b/src/main/resources/assets/decorative/models/block/magenta_digital_clock.json new file mode 100644 index 0000000..09564a9 --- /dev/null +++ b/src/main/resources/assets/decorative/models/block/magenta_digital_clock.json @@ -0,0 +1,6 @@ +{ + "parent": "decorative:block/digital_clock", + "textures": { + "2": "block/magenta_concrete" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decorative/models/block/orange_digital_clock.json b/src/main/resources/assets/decorative/models/block/orange_digital_clock.json new file mode 100644 index 0000000..232f5b6 --- /dev/null +++ b/src/main/resources/assets/decorative/models/block/orange_digital_clock.json @@ -0,0 +1,6 @@ +{ + "parent": "decorative:block/digital_clock", + "textures": { + "2": "block/orange_concrete" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decorative/models/block/pink_digital_clock.json b/src/main/resources/assets/decorative/models/block/pink_digital_clock.json new file mode 100644 index 0000000..d2375b5 --- /dev/null +++ b/src/main/resources/assets/decorative/models/block/pink_digital_clock.json @@ -0,0 +1,6 @@ +{ + "parent": "decorative:block/digital_clock", + "textures": { + "2": "block/pink_concrete" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decorative/models/block/purple_digital_clock.json b/src/main/resources/assets/decorative/models/block/purple_digital_clock.json new file mode 100644 index 0000000..2f96183 --- /dev/null +++ b/src/main/resources/assets/decorative/models/block/purple_digital_clock.json @@ -0,0 +1,6 @@ +{ + "parent": "decorative:block/digital_clock", + "textures": { + "2": "block/purple_concrete" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decorative/models/block/red_digital_clock.json b/src/main/resources/assets/decorative/models/block/red_digital_clock.json new file mode 100644 index 0000000..ee78d05 --- /dev/null +++ b/src/main/resources/assets/decorative/models/block/red_digital_clock.json @@ -0,0 +1,6 @@ +{ + "parent": "decorative:block/digital_clock", + "textures": { + "2": "block/red_concrete" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decorative/models/block/smoke_detector_off.json b/src/main/resources/assets/decorative/models/block/smoke_detector_off.json new file mode 100644 index 0000000..b05c4c4 --- /dev/null +++ b/src/main/resources/assets/decorative/models/block/smoke_detector_off.json @@ -0,0 +1,111 @@ +{ + "credit": "made by Motschen", + "parent": "block/block", + "ambientocclusion": false, + "textures": { + "0": "block/white_concrete", + "2": "block/gray_concrete", + "3": "decorative:block/alarm_light_off", + "particle": "block/white_concrete" + }, + "elements": [ + { + "from": [5, 14, 4], + "to": [11, 16, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [14, 23, 14]}, + "faces": { + "north": {"uv": [0, 0, 6, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 8, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 6, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 8, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 6, 8], "texture": "#0"}, + "down": {"uv": [0, 0, 6, 8], "texture": "#0"} + } + }, + { + "from": [4, 14.001, 5], + "to": [12, 16.001, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [14, 23, 14]}, + "faces": { + "north": {"uv": [0, 0, 8, 2], "texture": "#0"}, + "east": {"uv": [0, 0, 6, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 8, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 6, 2], "texture": "#0"}, + "up": {"uv": [0, 0, 8, 6], "texture": "#0"}, + "down": {"uv": [0, 0, 8, 6], "texture": "#0"} + } + }, + { + "from": [5.5, 13.75, 5.5], + "to": [6.5, 14.75, 6.5], + "rotation": {"angle": 0, "axis": "y", "origin": [13, 21, 13]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#3"} + } + }, + { + "from": [7, 13.9, 9], + "to": [11, 14.9, 9.25], + "rotation": {"angle": 0, "axis": "y", "origin": [16, 21, 17]}, + "faces": { + "north": {"uv": [0, 0, 4, 1], "texture": "#2"}, + "east": {"uv": [0, 0, 0.25, 1], "texture": "#2"}, + "south": {"uv": [0, 0, 4, 1], "texture": "#2"}, + "west": {"uv": [0, 0, 0.25, 1], "texture": "#2"}, + "down": {"uv": [0, 0, 4, 0.25], "texture": "#2"} + } + }, + { + "from": [7.5, 13.9, 8.2], + "to": [10.5, 14.9, 8.45], + "rotation": {"angle": 0, "axis": "y", "origin": [16, 21, 16]}, + "faces": { + "north": {"uv": [0, 0, 3, 1], "texture": "#2"}, + "east": {"uv": [0, 0, 0.25, 1], "texture": "#2"}, + "south": {"uv": [0, 0, 3, 1], "texture": "#2"}, + "west": {"uv": [0, 0, 0.25, 1], "texture": "#2"}, + "down": {"uv": [0, 0, 3, 0.25], "texture": "#2"} + } + }, + { + "from": [7.5, 13.9, 9.8], + "to": [10.5, 14.9, 10.05], + "rotation": {"angle": 0, "axis": "y", "origin": [16, 21, 17]}, + "faces": { + "north": {"uv": [0, 0, 3, 1], "texture": "#2"}, + "east": {"uv": [0, 0, 0.25, 1], "texture": "#2"}, + "south": {"uv": [0, 0, 3, 1], "texture": "#2"}, + "west": {"uv": [0, 0, 0.25, 1], "texture": "#2"}, + "down": {"uv": [0, 0, 3, 0.25], "texture": "#2"} + } + }, + { + "from": [8, 13.9, 10.6], + "to": [10, 14.9, 10.85], + "rotation": {"angle": 0, "axis": "y", "origin": [16, 21, 18]}, + "faces": { + "north": {"uv": [0, 0, 2, 1], "texture": "#2"}, + "east": {"uv": [0, 0, 0.25, 1], "texture": "#2"}, + "south": {"uv": [0, 0, 2, 1], "texture": "#2"}, + "west": {"uv": [0, 0, 0.25, 1], "texture": "#2"}, + "down": {"uv": [0, 0, 2, 0.25], "texture": "#2"} + } + }, + { + "from": [8, 13.9, 7.4], + "to": [10, 14.9, 7.65], + "rotation": {"angle": 0, "axis": "y", "origin": [16, 21, 15]}, + "faces": { + "north": {"uv": [0, 0, 2, 1], "texture": "#2"}, + "east": {"uv": [0, 0, 0.25, 1], "texture": "#2"}, + "south": {"uv": [0, 0, 2, 1], "texture": "#2"}, + "west": {"uv": [0, 0, 0.25, 1], "texture": "#2"}, + "down": {"uv": [0, 0, 2, 0.25], "texture": "#2"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/decorative/models/block/smoke_detector_on.json b/src/main/resources/assets/decorative/models/block/smoke_detector_on.json new file mode 100644 index 0000000..a221481 --- /dev/null +++ b/src/main/resources/assets/decorative/models/block/smoke_detector_on.json @@ -0,0 +1,6 @@ +{ + "parent": "decorative:block/smoke_detector_off", + "textures": { + "3": "decorative:block/alarm_light_on" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decorative/models/block/wall_clock.json b/src/main/resources/assets/decorative/models/block/wall_clock.json new file mode 100644 index 0000000..fe74301 --- /dev/null +++ b/src/main/resources/assets/decorative/models/block/wall_clock.json @@ -0,0 +1,330 @@ +{ + "credit": "made by Motschen", + "parent": "block/block", + "textures": { + "0": "block/cyan_terracotta", + "1": "block/quartz_block_bottom", + "2": "block/coal_block", + "3": "decorative:block/clock", + "particle": "block/quartz_block_bottom" + }, + "elements": [ + { + "from": [4, 0, 15], + "to": [12, 1, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [19, 8, 23]}, + "faces": { + "north": {"uv": [0, 0, 8, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 8, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 8, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 8, 1], "texture": "#0"} + } + }, + { + "from": [4.6, -3.05, 15], + "to": [6.6, -2.05, 16], + "rotation": {"angle": -22.5, "axis": "z", "origin": [13, 5, 23]}, + "faces": { + "north": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 2, 1], "texture": "#0"} + } + }, + { + "from": [4.2, -6.53, 15], + "to": [6.2, -5.53, 16], + "rotation": {"angle": -45, "axis": "z", "origin": [13, 2, 23]}, + "faces": { + "north": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 2, 1], "texture": "#0"} + } + }, + { + "from": [2.75, 5.85, 15], + "to": [3.75, 7.85, 16], + "rotation": {"angle": 22.5, "axis": "z", "origin": [11, -1, 23]}, + "faces": { + "north": {"uv": [0, 0, 2, 1], "rotation": 270, "texture": "#0"}, + "east": {"uv": [0, 0, 2, 1], "rotation": 90, "texture": "#0"}, + "south": {"uv": [0, 0, 2, 1], "rotation": 90, "texture": "#0"}, + "west": {"uv": [0, 0, 2, 1], "rotation": 90, "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "rotation": 90, "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "rotation": 90, "texture": "#0"} + } + }, + { + "from": [4, 15, 15], + "to": [12, 16, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [19, 23, 23]}, + "faces": { + "north": {"uv": [0, 0, 8, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 8, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 8, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 8, 1], "texture": "#0"} + } + }, + { + "from": [0, 4, 15], + "to": [1, 12, 16], + "rotation": {"angle": 0, "axis": "z", "origin": [-7, 19, 23]}, + "faces": { + "north": {"uv": [0, 0, 8, 1], "rotation": 90, "texture": "#0"}, + "east": {"uv": [0, 0, 8, 1], "rotation": 270, "texture": "#0"}, + "south": {"uv": [0, 0, 8, 1], "rotation": 270, "texture": "#0"}, + "west": {"uv": [0, 0, 8, 1], "rotation": 270, "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "rotation": 270, "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "rotation": 270, "texture": "#0"} + } + }, + { + "from": [5.85, 12.25, 15], + "to": [7.85, 13.25, 16], + "rotation": {"angle": 22.5, "axis": "z", "origin": [-1, 5, 23]}, + "faces": { + "north": {"uv": [0, 0, 2, 1], "rotation": 180, "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "rotation": 180, "texture": "#0"}, + "south": {"uv": [0, 0, 2, 1], "rotation": 180, "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "rotation": 180, "texture": "#0"}, + "up": {"uv": [0, 0, 2, 1], "rotation": 180, "texture": "#0"}, + "down": {"uv": [0, 0, 2, 1], "rotation": 180, "texture": "#0"} + } + }, + { + "from": [-6.53, 9.8, 15], + "to": [-5.53, 11.8, 16], + "rotation": {"angle": -45, "axis": "z", "origin": [2, 3, 23]}, + "faces": { + "north": {"uv": [0, 0, 2, 1], "rotation": 270, "texture": "#0"}, + "east": {"uv": [0, 0, 2, 1], "rotation": 90, "texture": "#0"}, + "south": {"uv": [0, 0, 2, 1], "rotation": 90, "texture": "#0"}, + "west": {"uv": [0, 0, 2, 1], "rotation": 90, "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "rotation": 90, "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "rotation": 90, "texture": "#0"} + } + }, + { + "from": [-3.05, 9.4, 15], + "to": [-2.05, 11.4, 16], + "rotation": {"angle": -22.5, "axis": "z", "origin": [5, 3, 23]}, + "faces": { + "north": {"uv": [0, 0, 2, 1], "rotation": 270, "texture": "#0"}, + "east": {"uv": [0, 0, 2, 1], "rotation": 90, "texture": "#0"}, + "south": {"uv": [0, 0, 2, 1], "rotation": 90, "texture": "#0"}, + "west": {"uv": [0, 0, 2, 1], "rotation": 90, "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "rotation": 90, "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "rotation": 90, "texture": "#0"} + } + }, + { + "from": [15, 4, 15], + "to": [16, 12, 16], + "rotation": {"angle": 0, "axis": "z", "origin": [8, 19, 23]}, + "faces": { + "north": {"uv": [0, 0, 8, 1], "rotation": 90, "texture": "#0"}, + "east": {"uv": [0, 0, 8, 1], "rotation": 270, "texture": "#0"}, + "south": {"uv": [0, 0, 8, 1], "rotation": 270, "texture": "#0"}, + "west": {"uv": [0, 0, 8, 1], "rotation": 270, "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "rotation": 270, "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "rotation": 270, "texture": "#0"} + } + }, + { + "from": [9.4, 18.05, 15], + "to": [11.4, 19.05, 16], + "rotation": {"angle": -22.5, "axis": "z", "origin": [3, 11, 23]}, + "faces": { + "north": {"uv": [0, 0, 2, 1], "rotation": 180, "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "rotation": 180, "texture": "#0"}, + "south": {"uv": [0, 0, 2, 1], "rotation": 180, "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "rotation": 180, "texture": "#0"}, + "up": {"uv": [0, 0, 2, 1], "rotation": 180, "texture": "#0"}, + "down": {"uv": [0, 0, 2, 1], "rotation": 180, "texture": "#0"} + } + }, + { + "from": [9.8, 21.53, 15], + "to": [11.8, 22.53, 16], + "rotation": {"angle": -45, "axis": "z", "origin": [3, 14, 23]}, + "faces": { + "north": {"uv": [0, 0, 2, 1], "rotation": 180, "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "rotation": 180, "texture": "#0"}, + "south": {"uv": [0, 0, 2, 1], "rotation": 180, "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "rotation": 180, "texture": "#0"}, + "up": {"uv": [0, 0, 2, 1], "rotation": 180, "texture": "#0"}, + "down": {"uv": [0, 0, 2, 1], "rotation": 180, "texture": "#0"} + } + }, + { + "from": [12.25, 8.15, 15], + "to": [13.25, 10.15, 16], + "rotation": {"angle": 22.5, "axis": "z", "origin": [5, 17, 23]}, + "faces": { + "north": {"uv": [0, 0, 2, 1], "rotation": 90, "texture": "#0"}, + "east": {"uv": [0, 0, 2, 1], "rotation": 270, "texture": "#0"}, + "south": {"uv": [0, 0, 2, 1], "rotation": 270, "texture": "#0"}, + "west": {"uv": [0, 0, 2, 1], "rotation": 270, "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "rotation": 270, "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "rotation": 270, "texture": "#0"} + } + }, + { + "from": [18.05, 4.6, 15], + "to": [19.05, 6.6, 16], + "rotation": {"angle": -22.5, "axis": "z", "origin": [11, 13, 23]}, + "faces": { + "north": {"uv": [0, 0, 2, 1], "rotation": 90, "texture": "#0"}, + "east": {"uv": [0, 0, 2, 1], "rotation": 270, "texture": "#0"}, + "south": {"uv": [0, 0, 2, 1], "rotation": 270, "texture": "#0"}, + "west": {"uv": [0, 0, 2, 1], "rotation": 270, "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "rotation": 270, "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "rotation": 270, "texture": "#0"} + } + }, + { + "from": [21.53, 4.2, 15], + "to": [22.53, 6.2, 16], + "rotation": {"angle": -45, "axis": "z", "origin": [14, 13, 23]}, + "faces": { + "north": {"uv": [0, 0, 2, 1], "rotation": 90, "texture": "#0"}, + "east": {"uv": [0, 0, 2, 1], "rotation": 270, "texture": "#0"}, + "south": {"uv": [0, 0, 2, 1], "rotation": 270, "texture": "#0"}, + "west": {"uv": [0, 0, 2, 1], "rotation": 270, "texture": "#0"}, + "up": {"uv": [0, 0, 1, 1], "rotation": 270, "texture": "#0"}, + "down": {"uv": [0, 0, 1, 1], "rotation": 270, "texture": "#0"} + } + }, + { + "from": [8.15, 2.75, 15], + "to": [10.15, 3.75, 16], + "rotation": {"angle": 22.5, "axis": "z", "origin": [17, 11, 23]}, + "faces": { + "north": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "south": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 1], "texture": "#0"}, + "down": {"uv": [0, 0, 2, 1], "texture": "#0"} + } + }, + { + "from": [2.25, 1, 15.65], + "to": [13.75, 2, 15.95], + "rotation": {"angle": 0, "axis": "y", "origin": [12, 9, 23]}, + "faces": { + "north": {"uv": [0, 13, 11.5, 14], "texture": "#1"}, + "south": {"uv": [0, 13, 11.5, 14], "texture": "#1"} + } + }, + { + "from": [2.25, 14, 15.65], + "to": [13.75, 15, 15.95], + "rotation": {"angle": 0, "axis": "y", "origin": [12, 22, 23]}, + "faces": { + "north": {"uv": [0, 0, 11.5, 1], "texture": "#1"}, + "south": {"uv": [0, 0, 11.5, 1], "texture": "#1"} + } + }, + { + "from": [1.25, 2, 15.65], + "to": [14.75, 3, 15.95], + "rotation": {"angle": 0, "axis": "y", "origin": [13, 10, 23]}, + "faces": { + "north": {"uv": [0, 12, 13.5, 13], "texture": "#1"}, + "south": {"uv": [0, 12, 13.5, 13], "texture": "#1"} + } + }, + { + "from": [1.25, 13, 15.65], + "to": [14.75, 14, 15.95], + "rotation": {"angle": 0, "axis": "y", "origin": [13, 21, 23]}, + "faces": { + "north": {"uv": [0, 1, 13.5, 2], "texture": "#1"}, + "south": {"uv": [0, 1, 13.5, 2], "texture": "#1"} + } + }, + { + "from": [0.5, 3, 15.65], + "to": [15, 13, 15.95], + "rotation": {"angle": 0, "axis": "y", "origin": [14, 11, 23]}, + "faces": { + "north": {"uv": [0, 2, 14.5, 12], "texture": "#1"}, + "south": {"uv": [0, 2, 14.5, 12], "texture": "#1"} + } + }, + { + "from": [7.5, 7.5, 15.3], + "to": [8.5, 8.5, 15.8], + "rotation": {"angle": 0, "axis": "y", "origin": [15, 16, 23]}, + "faces": { + "north": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "east": {"uv": [0, 0, 0.5, 1], "texture": "#2"}, + "south": {"uv": [0, 0, 1, 1], "texture": "#2"}, + "west": {"uv": [0, 0, 0.5, 1], "texture": "#2"}, + "up": {"uv": [0, 0, 1, 0.5], "texture": "#2"}, + "down": {"uv": [0, 0, 1, 0.5], "texture": "#2"} + } + }, + { + "from": [1, 1, 15.6], + "to": [15, 15, 15.7], + "rotation": {"angle": 0, "axis": "y", "origin": [22, 9, 23]}, + "faces": { + "north": {"uv": [0, 0, 16, 16], "texture": "#3"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [-4, -180, 0], + "translation": [0, 1.5, 1.75], + "scale": [0.25, 0.25, 0.25] + }, + "thirdperson_lefthand": { + "rotation": [-4, -180, 0], + "translation": [0, 1.5, 1.75], + "scale": [0.25, 0.25, 0.25] + }, + "firstperson_righthand": { + "rotation": [0, 150, 0], + "translation": [2.25, 1.75, 0], + "scale": [0.5, 0.5, 0.5] + }, + "firstperson_lefthand": { + "rotation": [0, 150, 0], + "translation": [2.25, 1.75, 0], + "scale": [0.5, 0.5, 0.5] + }, + "ground": { + "translation": [0, 0, -4], + "scale": [0.5, 0.5, 0.5] + }, + "gui": { + "rotation": [20, 157, 0], + "translation": [-2, -2, 0], + "scale": [0.75, 0.75, 0.75] + }, + "head": { + "translation": [0, 0, -14.25] + }, + "fixed": { + "translation": [0, 0, -7.75] + } + }, + "groups": [ + { + "name": "frame", + "origin": [8, 8, 8], + "children": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15] + }, 16, 17, 18, 19, 20, 21, 22] +} \ No newline at end of file diff --git a/src/main/resources/assets/decorative/models/block/white_digital_clock.json b/src/main/resources/assets/decorative/models/block/white_digital_clock.json new file mode 100644 index 0000000..c673b47 --- /dev/null +++ b/src/main/resources/assets/decorative/models/block/white_digital_clock.json @@ -0,0 +1,6 @@ +{ + "parent": "decorative:block/digital_clock", + "textures": { + "2": "block/white_concrete" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decorative/models/block/yellow_digital_clock.json b/src/main/resources/assets/decorative/models/block/yellow_digital_clock.json new file mode 100644 index 0000000..fb53cf9 --- /dev/null +++ b/src/main/resources/assets/decorative/models/block/yellow_digital_clock.json @@ -0,0 +1,6 @@ +{ + "parent": "decorative:block/digital_clock", + "textures": { + "2": "block/yellow_concrete" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decorative/models/item/black_digital_clock.json b/src/main/resources/assets/decorative/models/item/black_digital_clock.json new file mode 100644 index 0000000..0349d02 --- /dev/null +++ b/src/main/resources/assets/decorative/models/item/black_digital_clock.json @@ -0,0 +1,6 @@ +{ + "parent": "decorative:block/digital_clock", + "textures": { + "2": "block/black_concrete" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decorative/models/item/blue_digital_clock.json b/src/main/resources/assets/decorative/models/item/blue_digital_clock.json new file mode 100644 index 0000000..6ae5555 --- /dev/null +++ b/src/main/resources/assets/decorative/models/item/blue_digital_clock.json @@ -0,0 +1,6 @@ +{ + "parent": "decorative:block/digital_clock", + "textures": { + "2": "block/blue_concrete" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decorative/models/item/brown_digital_clock.json b/src/main/resources/assets/decorative/models/item/brown_digital_clock.json new file mode 100644 index 0000000..c214a7e --- /dev/null +++ b/src/main/resources/assets/decorative/models/item/brown_digital_clock.json @@ -0,0 +1,6 @@ +{ + "parent": "decorative:block/digital_clock", + "textures": { + "2": "block/brown_concrete" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decorative/models/item/cyan_digital_clock.json b/src/main/resources/assets/decorative/models/item/cyan_digital_clock.json new file mode 100644 index 0000000..ae779fb --- /dev/null +++ b/src/main/resources/assets/decorative/models/item/cyan_digital_clock.json @@ -0,0 +1,6 @@ +{ + "parent": "decorative:block/digital_clock", + "textures": { + "2": "block/cyan_concrete" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decorative/models/item/gray_digital_clock.json b/src/main/resources/assets/decorative/models/item/gray_digital_clock.json new file mode 100644 index 0000000..676e4f8 --- /dev/null +++ b/src/main/resources/assets/decorative/models/item/gray_digital_clock.json @@ -0,0 +1,6 @@ +{ + "parent": "decorative:block/digital_clock", + "textures": { + "2": "block/gray_concrete" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decorative/models/item/green_digital_clock.json b/src/main/resources/assets/decorative/models/item/green_digital_clock.json new file mode 100644 index 0000000..c3d1b20 --- /dev/null +++ b/src/main/resources/assets/decorative/models/item/green_digital_clock.json @@ -0,0 +1,6 @@ +{ + "parent": "decorative:block/digital_clock", + "textures": { + "2": "block/green_concrete" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decorative/models/item/light_blue_digital_clock.json b/src/main/resources/assets/decorative/models/item/light_blue_digital_clock.json new file mode 100644 index 0000000..4e5ca74 --- /dev/null +++ b/src/main/resources/assets/decorative/models/item/light_blue_digital_clock.json @@ -0,0 +1,6 @@ +{ + "parent": "decorative:block/digital_clock", + "textures": { + "2": "block/light_blue_concrete" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decorative/models/item/light_gray_digital_clock.json b/src/main/resources/assets/decorative/models/item/light_gray_digital_clock.json new file mode 100644 index 0000000..9f1a943 --- /dev/null +++ b/src/main/resources/assets/decorative/models/item/light_gray_digital_clock.json @@ -0,0 +1,6 @@ +{ + "parent": "decorative:block/digital_clock", + "textures": { + "2": "block/light_gray_concrete" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decorative/models/item/lime_digital_clock.json b/src/main/resources/assets/decorative/models/item/lime_digital_clock.json new file mode 100644 index 0000000..f4d382e --- /dev/null +++ b/src/main/resources/assets/decorative/models/item/lime_digital_clock.json @@ -0,0 +1,6 @@ +{ + "parent": "decorative:block/digital_clock", + "textures": { + "2": "block/lime_concrete" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decorative/models/item/magenta_digital_clock.json b/src/main/resources/assets/decorative/models/item/magenta_digital_clock.json new file mode 100644 index 0000000..09564a9 --- /dev/null +++ b/src/main/resources/assets/decorative/models/item/magenta_digital_clock.json @@ -0,0 +1,6 @@ +{ + "parent": "decorative:block/digital_clock", + "textures": { + "2": "block/magenta_concrete" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decorative/models/item/orange_digital_clock.json b/src/main/resources/assets/decorative/models/item/orange_digital_clock.json new file mode 100644 index 0000000..232f5b6 --- /dev/null +++ b/src/main/resources/assets/decorative/models/item/orange_digital_clock.json @@ -0,0 +1,6 @@ +{ + "parent": "decorative:block/digital_clock", + "textures": { + "2": "block/orange_concrete" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decorative/models/item/pink_digital_clock.json b/src/main/resources/assets/decorative/models/item/pink_digital_clock.json new file mode 100644 index 0000000..d2375b5 --- /dev/null +++ b/src/main/resources/assets/decorative/models/item/pink_digital_clock.json @@ -0,0 +1,6 @@ +{ + "parent": "decorative:block/digital_clock", + "textures": { + "2": "block/pink_concrete" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decorative/models/item/purple_digital_clock.json b/src/main/resources/assets/decorative/models/item/purple_digital_clock.json new file mode 100644 index 0000000..2f96183 --- /dev/null +++ b/src/main/resources/assets/decorative/models/item/purple_digital_clock.json @@ -0,0 +1,6 @@ +{ + "parent": "decorative:block/digital_clock", + "textures": { + "2": "block/purple_concrete" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decorative/models/item/red_digital_clock.json b/src/main/resources/assets/decorative/models/item/red_digital_clock.json new file mode 100644 index 0000000..ee78d05 --- /dev/null +++ b/src/main/resources/assets/decorative/models/item/red_digital_clock.json @@ -0,0 +1,6 @@ +{ + "parent": "decorative:block/digital_clock", + "textures": { + "2": "block/red_concrete" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decorative/models/item/smoke_detector.json b/src/main/resources/assets/decorative/models/item/smoke_detector.json new file mode 100644 index 0000000..9aa8518 --- /dev/null +++ b/src/main/resources/assets/decorative/models/item/smoke_detector.json @@ -0,0 +1,3 @@ +{ + "parent": "decorative:block/smoke_detector_off" +} \ No newline at end of file diff --git a/src/main/resources/assets/decorative/models/item/wall_clock.json b/src/main/resources/assets/decorative/models/item/wall_clock.json new file mode 100644 index 0000000..fc987f8 --- /dev/null +++ b/src/main/resources/assets/decorative/models/item/wall_clock.json @@ -0,0 +1,3 @@ +{ + "parent": "decorative:block/wall_clock" +} \ No newline at end of file diff --git a/src/main/resources/assets/decorative/models/item/white_digital_clock.json b/src/main/resources/assets/decorative/models/item/white_digital_clock.json new file mode 100644 index 0000000..c673b47 --- /dev/null +++ b/src/main/resources/assets/decorative/models/item/white_digital_clock.json @@ -0,0 +1,6 @@ +{ + "parent": "decorative:block/digital_clock", + "textures": { + "2": "block/white_concrete" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decorative/models/item/yellow_digital_clock.json b/src/main/resources/assets/decorative/models/item/yellow_digital_clock.json new file mode 100644 index 0000000..fb53cf9 --- /dev/null +++ b/src/main/resources/assets/decorative/models/item/yellow_digital_clock.json @@ -0,0 +1,6 @@ +{ + "parent": "decorative:block/digital_clock", + "textures": { + "2": "block/yellow_concrete" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decorative/sounds.json b/src/main/resources/assets/decorative/sounds.json index 888e4f7..9bf9a5c 100644 --- a/src/main/resources/assets/decorative/sounds.json +++ b/src/main/resources/assets/decorative/sounds.json @@ -1,10 +1,18 @@ { -"ceiling_fan.ambient": { + "ceiling_fan.ambient": { "sounds": [ { "name": "decorative:block/ceiling_fan_ambient", "stream": false } ] + }, + "smoke_detector.beep": { + "sounds": [ + { + "name": "decorative:block/smoke_detector_beep", + "stream": false + } + ] } } \ No newline at end of file diff --git a/src/main/resources/assets/decorative/sounds/block/smoke_detector_beep.ogg b/src/main/resources/assets/decorative/sounds/block/smoke_detector_beep.ogg new file mode 100644 index 0000000000000000000000000000000000000000..ab825ed0f72171776b661829181ad53547a68115 GIT binary patch literal 49616 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.r5+HE{!Jx|ot0UjG0ilqhf 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decorative/textures/block/alarm_light_on.png b/src/main/resources/assets/decorative/textures/block/alarm_light_on.png new file mode 100644 index 0000000000000000000000000000000000000000..193bfd521e3330af6496c44c89fa866f612998c8 GIT binary patch literal 154 zcmeAS@N?(olHy`uVBq!ia0vp^0zj<5!2~3yyw0Buq!^2X+?^QKos)S9a~60+7BevL9ROj*tZSW|KtX*^7sn6_|KyknGfp^gB{W@fX%6H)(g4H^ tx3Uv#m{SF~-BL7qvlQ5PYI%8h7}lmR<;u>uR|(Y0;OXk;vd$@?2>{4nC*uGB literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/decorative/textures/block/alarm_light_on.png.mcmeta b/src/main/resources/assets/decorative/textures/block/alarm_light_on.png.mcmeta new file mode 100644 index 0000000..034019f --- /dev/null +++ b/src/main/resources/assets/decorative/textures/block/alarm_light_on.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 3 + } +} \ No newline at end of file diff --git a/src/main/resources/assets/decorative/textures/block/clock.png b/src/main/resources/assets/decorative/textures/block/clock.png new file mode 100644 index 0000000000000000000000000000000000000000..15c0b36b0bde4ff2fe83ffc0849a69a7982b6b8e GIT binary patch literal 720 zcmV;>0x$iEP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGizyJUazyWI3i3tDz0%b`=K~#8N?U&tB z#2^fXxBlGh`@gDsS$mW?8H6T*0Bz|v!vJmx$swV2S=aS3GcTc^mLUQx%kr0Y81s2= zx(g5m|GAYQ%5WQw5n;$3fM5}HnEsph#3cjx=~++G8obrMM702C4jxnszyr_(LqYJK z8s>Xg#M0t&2f%r9j*na5ZGXsX@JLi=KrVGPr(``%zL!@PR0~i;>vGXBeF-!ZAXgeC zc-o3l3BVn|SmO{BZ)g`F{&h02m8HGc{`oi;eBs zCwc_0U3a-l&=NejlmOP?0ak=z8eU5b3qjgO)LSEsrJV%2+7yT3~Yj3^7Q zJ?|0-{j}TygnnAG0^pJveZzaP7fVur?ctAbyS|@Y1o)3w&{DDFGT^yA{JQmTzti&) z4l+yjHOSQ>Be8;#@t#P&;rEok;&(u9;TcKAB3^=L4<0duVG=O|t^kRUI?O2q*yH{X z3jMU)0))N_dSirX7rgdVU4ne0_$I|~soS*|d;4pA69tHkj1E`}{6sJLddWM$a!6tZ z08$ei{q%Y88X-ghVj~uHN5Bt@*z@;tC4gY5(fsF!3}OZVuBv44NVt?h4Ibsvy5#OJ z!O**-NfEPf!_n?KA8WL?G0{pHv`lH0!z?Loz`7TnrDoWPJ)(0kp)Y=M_u| z!%6@_Q;P-Z$^9WTq69#TdM;s@07qf^5|~_o$KxA$b>Bt!O`=x-0000