├── .github └── workflows │ ├── build.yml │ └── release.yml ├── .gitignore ├── LICENSE ├── README.md ├── build.gradle ├── gradle.properties ├── gradle ├── teacon-forge.gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── settings.gradle └── src ├── generated └── resources │ ├── .cache │ ├── 1c8d01f8cd2191257d77ab787455ba8ba26c485f │ ├── 1f2b24e6872eb1803ba8c2f87e01af7090ccf645 │ ├── 35b25fbf923137bc0e9eb514b635bbc3f8d068d3 │ └── 86465dcd1331b21a960f3496f736ce9922bfa9ba │ ├── assets │ ├── minecraft │ │ └── atlases │ │ │ └── blocks.json │ └── powertool │ │ ├── blockstates │ │ ├── black_distant_horizon_cheating_block.json │ │ ├── blue_distant_horizon_cheating_block.json │ │ ├── brown_distant_horizon_cheating_block.json │ │ ├── cosmetic_barrel.json │ │ ├── cosmetic_beacon.json │ │ ├── cosmetic_beehive.json │ │ ├── cosmetic_blast_furnace.json │ │ ├── cosmetic_brain_coral_block.json │ │ ├── cosmetic_bubble_coral_block.json │ │ ├── cosmetic_cartography_table.json │ │ ├── cosmetic_crafting_table.json │ │ ├── cosmetic_enchanting_table.json │ │ ├── cosmetic_fire_coral_block.json │ │ ├── cosmetic_fletching_table.json │ │ ├── cosmetic_furnace.json │ │ ├── cosmetic_gravel.json │ │ ├── cosmetic_horn_coral_block.json │ │ ├── cosmetic_red_sand.json │ │ ├── cosmetic_redstone_block.json │ │ ├── cosmetic_sand.json │ │ ├── cosmetic_smithing_table.json │ │ ├── cosmetic_smoker.json │ │ ├── cosmetic_stonecutter.json │ │ ├── cosmetic_tube_coral_block.json │ │ ├── cyan_distant_horizon_cheating_block.json │ │ ├── gray_distant_horizon_cheating_block.json │ │ ├── gray_trash_can.json │ │ ├── green_distant_horizon_cheating_block.json │ │ ├── green_trash_can.json │ │ ├── green_trash_can_cap.json │ │ ├── light_blue_distant_horizon_cheating_block.json │ │ ├── light_gray_distant_horizon_cheating_block.json │ │ ├── lime_distant_horizon_cheating_block.json │ │ ├── magenta_distant_horizon_cheating_block.json │ │ ├── orange_distant_horizon_cheating_block.json │ │ ├── pink_distant_horizon_cheating_block.json │ │ ├── purple_distant_horizon_cheating_block.json │ │ ├── red_distant_horizon_cheating_block.json │ │ ├── temple.json │ │ ├── white_distant_horizon_cheating_block.json │ │ ├── white_trash_can.json │ │ ├── white_trash_can_cap.json │ │ └── yellow_distant_horizon_cheating_block.json │ │ └── models │ │ ├── block │ │ ├── black_distant_horizon_cheating_block.json │ │ ├── blue_distant_horizon_cheating_block.json │ │ ├── brown_distant_horizon_cheating_block.json │ │ ├── cosmetic_beacon.json │ │ ├── cyan_distant_horizon_cheating_block.json │ │ ├── gray_distant_horizon_cheating_block.json │ │ ├── green_distant_horizon_cheating_block.json │ │ ├── light_blue_distant_horizon_cheating_block.json │ │ ├── light_gray_distant_horizon_cheating_block.json │ │ ├── lime_distant_horizon_cheating_block.json │ │ ├── magenta_distant_horizon_cheating_block.json │ │ ├── orange_distant_horizon_cheating_block.json │ │ ├── pink_distant_horizon_cheating_block.json │ │ ├── purple_distant_horizon_cheating_block.json │ │ ├── red_distant_horizon_cheating_block.json │ │ ├── white_distant_horizon_cheating_block.json │ │ └── yellow_distant_horizon_cheating_block.json │ │ └── item │ │ ├── black_distant_horizon_cheating_block.json │ │ ├── blue_distant_horizon_cheating_block.json │ │ ├── brown_distant_horizon_cheating_block.json │ │ ├── cosmetic_barrel.json │ │ ├── cosmetic_beacon.json │ │ ├── cosmetic_beehive.json │ │ ├── cosmetic_blast_furnace.json │ │ ├── cosmetic_brain_coral_block.json │ │ ├── cosmetic_bubble_coral_block.json │ │ ├── cosmetic_cartography_table.json │ │ ├── cosmetic_crafting_table.json │ │ ├── cosmetic_enchanting_table.json │ │ ├── cosmetic_fire_coral_block.json │ │ ├── cosmetic_fletching_table.json │ │ ├── cosmetic_furnace.json │ │ ├── cosmetic_gravel.json │ │ ├── cosmetic_horn_coral_block.json │ │ ├── cosmetic_red_sand.json │ │ ├── cosmetic_redstone_block.json │ │ ├── cosmetic_sand.json │ │ ├── cosmetic_smithing_table.json │ │ ├── cosmetic_smoker.json │ │ ├── cosmetic_stonecutter.json │ │ ├── cosmetic_tube_coral_block.json │ │ ├── cyan_distant_horizon_cheating_block.json │ │ ├── delayer.json │ │ ├── gray_distant_horizon_cheating_block.json │ │ ├── gray_trash_can.json │ │ ├── green_distant_horizon_cheating_block.json │ │ ├── green_trash_can.json │ │ ├── green_trash_can_cap.json │ │ ├── light_blue_distant_horizon_cheating_block.json │ │ ├── light_gray_distant_horizon_cheating_block.json │ │ ├── lime_distant_horizon_cheating_block.json │ │ ├── magenta_distant_horizon_cheating_block.json │ │ ├── orange_distant_horizon_cheating_block.json │ │ ├── pink_distant_horizon_cheating_block.json │ │ ├── purple_distant_horizon_cheating_block.json │ │ ├── red_distant_horizon_cheating_block.json │ │ ├── temple.json │ │ ├── white_distant_horizon_cheating_block.json │ │ ├── white_trash_can.json │ │ ├── white_trash_can_cap.json │ │ └── yellow_distant_horizon_cheating_block.json │ └── data │ ├── minecraft │ └── tags │ │ └── block │ │ ├── dragon_immune.json │ │ └── wither_immune.json │ └── powertool │ └── tags │ ├── block │ ├── command_block.json │ └── repeating_command_block.json │ └── item │ └── tonk.json └── main ├── java └── org │ └── teacon │ └── powertool │ ├── PowerTool.java │ ├── PowerToolConfig.java │ ├── PowerToolEvents.java │ ├── PowerToolSoundEvents.java │ ├── attachment │ └── PowerToolAttachments.java │ ├── block │ ├── BezierCurveBlock.java │ ├── DistantHorizonCheatingBlock.java │ ├── ICosmeticBlock.java │ ├── ItemDisplayBlock.java │ ├── ItemSupplierBlock.java │ ├── PeriodicCommandBlock.java │ ├── PowerSupplyBlock.java │ ├── PowerToolBlocks.java │ ├── RedStoneDelayBlock.java │ ├── RegisterBlock.java │ ├── SafeBlock.java │ ├── SlimItemSupplierBlock.java │ ├── TempleBlock.java │ ├── TimeObserverBlock.java │ ├── TrashCanBlock.java │ ├── TrashCanWithContainer.java │ ├── cosmetical │ │ ├── CosmeticBarrel.java │ │ ├── CosmeticBeehive.java │ │ ├── CosmeticCampfireBlock.java │ │ ├── CosmeticDirectionalBlock.java │ │ ├── CosmeticFurnace.java │ │ ├── CosmeticHopper.java │ │ ├── CosmeticHorizontalDirectionalBlock.java │ │ ├── CosmeticSimpleBlock.java │ │ ├── CosmeticTrapdoor.java │ │ └── CosmeticWaterloggedBlock.java │ ├── entity │ │ ├── BaseHolographicSignBlockEntity.java │ │ ├── BezierCurveBlockEntity.java │ │ ├── CommonHolographicSignBlockEntity.java │ │ ├── IClientUpdateBlockEntity.java │ │ ├── ItemDisplayBlockEntity.java │ │ ├── ItemSupplierBlockEntity.java │ │ ├── LinkHolographicSignBlockEntity.java │ │ ├── PeriodicCommandBlockEntity.java │ │ ├── PowerSupplyBlockEntity.java │ │ ├── RawJsonHolographicSignBlockEntity.java │ │ ├── RedStoneDelayBlockEntity.java │ │ ├── RegisterBlockEntity.java │ │ ├── SafeBlockEntity.java │ │ ├── TempleBlockEntity.java │ │ ├── TimeObserverBlockEntity.java │ │ └── TrashCanWithContainerBlockEntity.java │ └── holo_sign │ │ ├── HoloSignBEFlag.java │ │ ├── HolographicSignBlock.java │ │ └── SignType.java │ ├── bridge │ └── PeriodCommandBlockBridge.java │ ├── client │ ├── AccessControlClient.java │ ├── CachedModeClient.java │ ├── ClientEvents.java │ ├── anvilcraft │ │ └── rendering │ │ │ ├── CacheableBERenderingPipeline.java │ │ │ ├── CachedRegion.java │ │ │ └── FullyBufferedBufferSource.java │ ├── eyelib │ │ └── render │ │ │ └── sections │ │ │ ├── BlockEntitySectionGeometryRenderer.java │ │ │ ├── QuadLighterVertexConsumer.java │ │ │ ├── SectionGeometryBlockEntityRenderDispatcher.java │ │ │ └── SectionGeometryGameEvents.java │ ├── gui │ │ ├── BezierCurveBlockScreen.java │ │ ├── ExamineHoloGlassScreen.java │ │ ├── PeriodicCommandBlockEditScreen.java │ │ ├── PowerSupplyScreen.java │ │ ├── RedStoneDelayerScreen.java │ │ ├── RegisterScreen.java │ │ ├── SetCommandScreen.java │ │ ├── TextureExtractorScreen.java │ │ ├── TrashCanWithContainerScreen.java │ │ ├── holo_sign │ │ │ ├── BaseHolographicSignEditingScreen.java │ │ │ ├── CommonHolographicSignEditingScreen.java │ │ │ ├── LinkHolographicSignEditingScreen.java │ │ │ └── RawJsonHolographicSignEditingScreen.java │ │ ├── observers │ │ │ ├── GameTimeCycleObserverScreen.java │ │ │ ├── RealTimeCycleObserverScreen.java │ │ │ └── RealTimeObserverScreen.java │ │ └── widget │ │ │ ├── BlockEntityList.java │ │ │ ├── ButtonWithHighlight.java │ │ │ ├── DelayCommandList.java │ │ │ ├── EntryListWidget.java │ │ │ ├── InvisibleButton.java │ │ │ ├── JsonComponentList.java │ │ │ ├── ObjectInputBox.java │ │ │ ├── TextureAtlasSpriteList.java │ │ │ └── Vector3fList.java │ ├── overlay │ │ ├── AdaptiveDebugChart.java │ │ ├── ClientDebugCharts.java │ │ ├── ClientOverlays.java │ │ └── MartingCarOverlay.java │ └── renders │ │ ├── BezierCurveBlockRenderer.java │ │ ├── ItemDisplayBlockEntityRenderer.java │ │ ├── ItemSupplierBlockEntityRenderer.java │ │ ├── OutLineRender.java │ │ ├── TempleRenderer.java │ │ ├── entity │ │ ├── FenceKnotRenderer.java │ │ ├── MartingCarEntityRenderer.java │ │ └── model │ │ │ └── MartingCarEntityModel.java │ │ └── holo_sign │ │ ├── HolographicSignBlockEntityRenderer.java │ │ ├── LinkHolographicSignBlockEntityRenderer.java │ │ └── RawJsonHolographicSignBlockEntityRenderer.java │ ├── command │ ├── AccelerateCommand.java │ ├── FlyCommand.java │ └── PowerToolCommands.java │ ├── compat │ └── top │ │ ├── PowerToolTOPProvider.java │ │ └── TOPCompatibility.java │ ├── datagen │ ├── DataGenerators.java │ ├── ModBlockModelProvider.java │ ├── PowerToolBlockTagsProvider.java │ ├── PowerToolItemTagsProvider.java │ └── SpriteProvider.java │ ├── entity │ ├── AutoVanishBoat.java │ ├── AutoVanishMinecart.java │ ├── FenceKnotEntity.java │ ├── MartingCarEntity.java │ └── PowerToolEntities.java │ ├── item │ ├── AccessControlToolItem.java │ ├── AutoVanishBoatItem.java │ ├── AutoVanishMinecartItem.java │ ├── ClapItem.java │ ├── CommandRune.java │ ├── ExamineHoloGlass.java │ ├── IRedStoneStuff.java │ ├── IScreenProviderItem.java │ ├── MartingCarItem.java │ ├── PowerToolDataComponents.java │ ├── PowerToolItems.java │ ├── TextureExtractor.java │ ├── TonkItem.java │ └── TransparentBrushItem.java │ ├── menu │ ├── PowerSupplyMenu.java │ ├── PowerToolMenus.java │ ├── RegisterMenu.java │ ├── TextureExtractorMenu.java │ └── TrashCanWithContainerMenu.java │ ├── mixin │ ├── CommandBlockMixin.java │ ├── CommandSourceStackMixin.java │ ├── CommandsMixin.java │ ├── MixinArmorStand.java │ ├── MixinEntity.java │ ├── MixinItemFrame.java │ ├── MixinThrownEgg.java │ ├── ServerGamePacketListenerImplMixin.java │ ├── ServerPlayerMixin.java │ ├── client │ │ ├── ClientRecipeBookMixin.java │ │ ├── DebugScreenOverlayMixin.java │ │ ├── GameModeSwitcherScreenMixin.java │ │ ├── KeyboardHandlerMixin.java │ │ ├── LevelRendererMixin.java │ │ ├── MinecraftMixin.java │ │ ├── PlayerMixin.java │ │ ├── SectionRenderDispatcherMixin.java │ │ └── compat │ │ │ ├── EmbeddiumWorldRenderMixin.java │ │ │ └── SodiumWorldRenderMixin.java │ └── fixes │ │ └── PlayerTextureManagerMixin.java │ ├── motd │ └── MotDHandler.java │ ├── network │ ├── PowerToolNetwork.java │ ├── attachment │ │ └── Permission.java │ ├── client │ │ ├── OpenBlockScreen.java │ │ ├── OpenHolographicSignEditor.java │ │ ├── OpenItemScreen.java │ │ ├── RecordDebugData.java │ │ ├── UpdateCachedModeChunkDataPacket.java │ │ ├── UpdateDisplayChunkDataPacket.java │ │ ├── UpdateOpenMenuSourcePacket.java │ │ ├── UpdatePermissionPacket.java │ │ ├── UpdatePlayerMovement.java │ │ └── UpdateStaticModeChunkDataPacket.java │ └── server │ │ ├── SetCommandBlockPacket.java │ │ ├── UpdateBlockEntityData.java │ │ ├── UpdateItemStackData.java │ │ └── UpdatePowerSupplyData.java │ └── utils │ ├── CodecUtils.java │ ├── DelayServerExecutor.java │ ├── MathUtils.java │ ├── VanillaUtils.java │ ├── math │ ├── BezierCurve3f.java │ └── Line3f.java │ └── time │ ├── DailyCycleTimeSection.java │ ├── ITimeSection.java │ ├── InWorldDailyCycleTimeSection.java │ └── TimestampTimeSection.java └── resources ├── META-INF ├── accesstransformer.cfg └── neoforge.mods.toml ├── assets └── powertool │ ├── blockstates │ ├── command_block.json │ ├── cosmetic_acacia_trapdoor.json │ ├── cosmetic_bamboo_trapdoor.json │ ├── cosmetic_birch_trapdoor.json │ ├── cosmetic_campfire.json │ ├── cosmetic_cherry_trapdoor.json │ ├── cosmetic_crimson_trapdoor.json │ ├── cosmetic_dark_oak_trapdoor.json │ ├── cosmetic_hopper.json │ ├── cosmetic_iron_trapdoor.json │ ├── cosmetic_jungle_trapdoor.json │ ├── cosmetic_mangrove_trapdoor.json │ ├── cosmetic_oak_trapdoor.json │ ├── cosmetic_soul_campfire.json │ ├── cosmetic_spruce_trapdoor.json │ ├── cosmetic_warped_trapdoor.json │ ├── delayer.json │ ├── glow_item_display.json │ ├── gorgeous_register.json │ ├── gorgeous_safe.json │ ├── holographic_sign.json │ ├── item_display.json │ ├── item_supplier.json │ ├── mechanical_register.json │ ├── mechanical_safe.json │ ├── observer_gametime_cyl.json │ ├── observer_realtime.json │ ├── observer_realtime_cyl.json │ ├── power_supply.json │ ├── register.json │ ├── safe.json │ ├── slim_item_supplier.json │ ├── tech_register.json │ ├── tech_safe.json │ └── trash_can.json │ ├── lang │ ├── en_us.json │ └── zh_cn.json │ ├── models │ ├── block │ │ ├── black_trash_can.json │ │ ├── campfire.json │ │ ├── campfire_off.json │ │ ├── command_block.json │ │ ├── command_block_conditional.json │ │ ├── cosmetic_acacia_trapdoor_bottom.json │ │ ├── cosmetic_acacia_trapdoor_open.json │ │ ├── cosmetic_acacia_trapdoor_top.json │ │ ├── cosmetic_bamboo_trapdoor_bottom.json │ │ ├── cosmetic_bamboo_trapdoor_open.json │ │ ├── cosmetic_bamboo_trapdoor_top.json │ │ ├── cosmetic_birch_trapdoor_bottom.json │ │ ├── cosmetic_birch_trapdoor_open.json │ │ ├── cosmetic_birch_trapdoor_top.json │ │ ├── cosmetic_cherry_trapdoor_bottom.json │ │ ├── cosmetic_cherry_trapdoor_open.json │ │ ├── cosmetic_cherry_trapdoor_top.json │ │ ├── cosmetic_crimson_trapdoor_bottom.json │ │ ├── cosmetic_crimson_trapdoor_open.json │ │ ├── cosmetic_crimson_trapdoor_top.json │ │ ├── cosmetic_dark_oak_trapdoor_bottom.json │ │ ├── cosmetic_dark_oak_trapdoor_open.json │ │ ├── cosmetic_dark_oak_trapdoor_top.json │ │ ├── cosmetic_iron_trapdoor_bottom.json │ │ ├── cosmetic_iron_trapdoor_open.json │ │ ├── cosmetic_iron_trapdoor_top.json │ │ ├── cosmetic_jungle_trapdoor_bottom.json │ │ ├── cosmetic_jungle_trapdoor_open.json │ │ ├── cosmetic_jungle_trapdoor_top.json │ │ ├── cosmetic_mangrove_trapdoor_bottom.json │ │ ├── cosmetic_mangrove_trapdoor_open.json │ │ ├── cosmetic_mangrove_trapdoor_top.json │ │ ├── cosmetic_oak_trapdoor_bottom.json │ │ ├── cosmetic_oak_trapdoor_open.json │ │ ├── cosmetic_oak_trapdoor_top.json │ │ ├── cosmetic_spruce_trapdoor_bottom.json │ │ ├── cosmetic_spruce_trapdoor_open.json │ │ ├── cosmetic_spruce_trapdoor_top.json │ │ ├── cosmetic_warped_trapdoor_bottom.json │ │ ├── cosmetic_warped_trapdoor_open.json │ │ ├── cosmetic_warped_trapdoor_top.json │ │ ├── delayer.json │ │ ├── delayer_on.json │ │ ├── empty.json │ │ ├── glow_item_display.json │ │ ├── gorgeous_safe.json │ │ ├── gorgeous_token_acceptor.json │ │ ├── gray_trash_can.json │ │ ├── green_trash_can.json │ │ ├── green_trash_can_cap_bottom.json │ │ ├── green_trash_can_cap_open.json │ │ ├── green_trash_can_cap_top.json │ │ ├── item_display.json │ │ ├── item_supplier.json │ │ ├── mechanical_safe.json │ │ ├── mechanical_token_acceptor.json │ │ ├── observer_gametime_cyl.json │ │ ├── observer_gametime_cyl_on.json │ │ ├── observer_realtime.json │ │ ├── observer_realtime_cyl.json │ │ ├── observer_realtime_cyl_on.json │ │ ├── observer_realtime_on.json │ │ ├── plain_safe.json │ │ ├── plain_token_acceptor.json │ │ ├── power_supply.json │ │ ├── slim_item_supplier.json │ │ ├── soul_campfire.json │ │ ├── tech_safe.json │ │ ├── tech_token_acceptor.json │ │ ├── temple.json │ │ ├── white_trash_can.json │ │ ├── white_trash_can_cap_bottom.json │ │ ├── white_trash_can_cap_open.json │ │ └── white_trash_can_cap_top.json │ └── item │ │ ├── auto_vanish_acacia_boat.json │ │ ├── auto_vanish_bamboo_raft.json │ │ ├── auto_vanish_birch_boat.json │ │ ├── auto_vanish_cherry_boat.json │ │ ├── auto_vanish_dark_oak_boat.json │ │ ├── auto_vanish_jungle_boat.json │ │ ├── auto_vanish_mangrove_boat.json │ │ ├── auto_vanish_minecart.json │ │ ├── auto_vanish_oak_boat.json │ │ ├── auto_vanish_spruce_boat.json │ │ ├── bezier_curve_block.json │ │ ├── cached_mode_tool.json │ │ ├── clap.json │ │ ├── clap_but_angry.json │ │ ├── clap_but_sad.json │ │ ├── command_block.json │ │ ├── command_rune.json │ │ ├── command_wand.json │ │ ├── cosmetic_acacia_trapdoor.json │ │ ├── cosmetic_bamboo_trapdoor.json │ │ ├── cosmetic_birch_trapdoor.json │ │ ├── cosmetic_campfire.json │ │ ├── cosmetic_cherry_trapdoor.json │ │ ├── cosmetic_crimson_trapdoor.json │ │ ├── cosmetic_dark_oak_trapdoor.json │ │ ├── cosmetic_hopper.json │ │ ├── cosmetic_iron_trapdoor.json │ │ ├── cosmetic_jungle_trapdoor.json │ │ ├── cosmetic_mangrove_trapdoor.json │ │ ├── cosmetic_oak_trapdoor.json │ │ ├── cosmetic_soul_campfire.json │ │ ├── cosmetic_spruce_trapdoor.json │ │ ├── cosmetic_warped_trapdoor.json │ │ ├── display_mode_tool.json │ │ ├── examine_holo_glass.bbmodel │ │ ├── examine_holo_glass.json │ │ ├── examine_holo_glass.json.disabled │ │ ├── extra_thick_tonk.json │ │ ├── glow_item_display.json │ │ ├── gorgeous_register.json │ │ ├── gorgeous_safe.json │ │ ├── holographic_sign.json │ │ ├── item_display.json │ │ ├── item_supplier.json │ │ ├── link_holographic_sign.json │ │ ├── marting_car.json │ │ ├── marting_car_blue.json │ │ ├── marting_car_green.json │ │ ├── marting_car_red.json │ │ ├── mechanical_register.json │ │ ├── mechanical_safe.json │ │ ├── observer_gametime_cyl.json │ │ ├── observer_realtime.json │ │ ├── observer_realtime_cyl.json │ │ ├── power_supply.json │ │ ├── raw_json_holographic_sign.json │ │ ├── register.json │ │ ├── safe.json │ │ ├── slim_item_supplier.json │ │ ├── static_mode_tool.json │ │ ├── tech_register.json │ │ ├── tech_safe.json │ │ ├── texture_extractor.json │ │ ├── thick_tonk.json │ │ ├── tonk.json │ │ ├── transparent_brush.json │ │ ├── trash_can.json │ │ └── useless_stick.json │ ├── sounds.json │ ├── sounds │ └── item │ │ └── clap.ogg │ └── textures │ ├── block │ ├── black_trash_can.bbmodel │ ├── black_trash_can.png │ ├── command_block_activator.png │ ├── command_block_back.png │ ├── command_block_back.png.mcmeta │ ├── command_block_conditional.png │ ├── command_block_conditional.png.mcmeta │ ├── command_block_front.png │ ├── command_block_front.png.mcmeta │ ├── command_block_side.png │ ├── command_block_side.png.mcmeta │ ├── delayer_back.png │ ├── delayer_back_on.png │ ├── delayer_front.png │ ├── delayer_side.png │ ├── gorgeous_safe.bbmodel │ ├── gorgeous_safe.png │ ├── gorgeous_token_acceptor.bbmodel │ ├── gorgeous_token_acceptor.png │ ├── gray_trash_can.bbmodel │ ├── gray_trash_can.png │ ├── green_trash_can.bbmodel │ ├── green_trash_can.png │ ├── green_trash_can_cap.bbmodel │ ├── green_trash_can_cap.png │ ├── item_supplier.png │ ├── item_supplier_side_slim.png │ ├── item_supplier_tag.png │ ├── item_supplier_tag.png.mcmeta │ ├── item_supplier_top.png │ ├── item_supplier_top_slim.png │ ├── mechanical_safe.bbmodel │ ├── mechanical_safe.png │ ├── mechanical_token_acceptor.bbmodel │ ├── mechanical_token_acceptor.png │ ├── observer_gametime_cyl_back.png │ ├── observer_gametime_cyl_back_on.png │ ├── observer_gametime_cyl_front.png │ ├── observer_gametime_cyl_side.png │ ├── observer_gametime_cyl_top.png │ ├── observer_realtime_back.png │ ├── observer_realtime_back_on.png │ ├── observer_realtime_cyl_top.png │ ├── observer_realtime_front.png │ ├── observer_realtime_side.png │ ├── observer_realtime_top.png │ ├── plain_safe.bbmodel │ ├── plain_safe.png │ ├── plain_token_acceptor.bbmodel │ ├── plain_token_acceptor.png │ ├── power_supply_bottom.png │ ├── power_supply_side.png │ ├── power_supply_top.png │ ├── tech_safe.bbmodel │ ├── tech_safe.png │ ├── tech_token_acceptor.bbmodel │ ├── tech_token_acceptor.png │ ├── temple.png │ ├── timing_command_block_back.png │ ├── timing_command_block_back.png.mcmeta │ ├── timing_command_block_conditional.png │ ├── timing_command_block_conditional.png.mcmeta │ ├── timing_command_block_front.png │ ├── timing_command_block_front.png.mcmeta │ ├── timing_command_block_side.png │ ├── timing_command_block_side.png.mcmeta │ ├── transparent_command_block_back.png │ ├── transparent_command_block_back.png.mcmeta │ ├── transparent_command_block_conditional.png │ ├── transparent_command_block_conditional.png.mcmeta │ ├── transparent_command_block_front.png │ ├── transparent_command_block_front.png.mcmeta │ ├── transparent_command_block_side.png │ ├── transparent_command_block_side.png.mcmeta │ ├── white_trash_can.bbmodel │ ├── white_trash_can.png │ ├── white_trash_can_cap.bbmodel │ └── white_trash_can_cap.png │ ├── entity │ ├── marting_blue.png │ ├── marting_green.png │ └── marting_red.png │ ├── gui │ ├── power_supply.png │ ├── register.png │ ├── sprites │ │ ├── delayer_button_descending_edge.png │ │ ├── delayer_button_ignore.png │ │ ├── delayer_button_reset.png │ │ ├── delayer_button_rising_edge.png │ │ ├── local_time.png │ │ ├── sky_color.png │ │ ├── slider.png │ │ └── utc_time.png │ ├── texture_extractor.png │ └── trash_can.png │ └── item │ ├── bezier_curve_tool.png │ ├── cached_mode_tool.png │ ├── clap.png │ ├── clap_but_angry.png │ ├── clap_but_sad.png │ ├── command_rune.png │ ├── display_mode_tool.png │ ├── examine_holo_glass.png │ ├── holographic_hyperlink.png │ ├── holographic_json.png │ ├── holographic_sign.png │ ├── marting_blue.png │ ├── marting_green.png │ ├── marting_red.png │ ├── static_mode_tool.png │ ├── texture_extractor.png │ ├── tonk.png │ ├── tonk_extrathick.png │ ├── tonk_thick.png │ ├── transparent_brush.png │ ├── trash_can.png │ └── useless_stick.png ├── data ├── minecraft │ └── tags │ │ └── blocks │ │ └── campfires.json └── powertool │ └── tags │ └── entity_types │ └── item.json ├── pack.mcmeta └── powertool.mixins.json /.github/workflows/build.yml: -------------------------------------------------------------------------------- 1 | name: test-build 2 | on: 3 | push: 4 | paths: 5 | - 'src/**' 6 | - 'build.gradle' 7 | jobs: 8 | build: 9 | runs-on: ubuntu-22.04 10 | steps: 11 | - name: Checkout 12 | uses: actions/checkout@v4 13 | - name: Setup Java 17 14 | uses: actions/setup-java@v4 15 | with: 16 | distribution: 'temurin' 17 | java-version: '17' 18 | - name: Apply Cache 19 | uses: actions/cache@v4 20 | with: 21 | path: | 22 | ~/.gradle/caches 23 | ~/.gradle/wrapper 24 | key: $${{ runner.os }}-gradle 25 | - name: Get Short Identifier 26 | uses: benjlevesque/short-sha@v3.0 27 | id: short-sha 28 | - name: Build 29 | id: build 30 | env: 31 | VERSION_IDENTIFIER: SNAPSHOT+${{ steps.short-sha.outputs.sha }} 32 | run: ./gradlew :build :githubActionOutput --stacktrace 33 | - name: GitHub Action Artifact 34 | uses: actions/upload-artifact@v4 35 | with: 36 | name: ${{ steps.build.outputs.artifact_name }} 37 | path: ${{ steps.build.outputs.artifact_path }} -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # eclipse 2 | bin 3 | *.launch 4 | .settings 5 | .metadata 6 | .classpath 7 | .project 8 | 9 | # idea 10 | out 11 | *.ipr 12 | *.iws 13 | *.iml 14 | .idea 15 | 16 | # gradle 17 | build 18 | .gradle 19 | 20 | # other 21 | eclipse 22 | run 23 | runs 24 | run-data 25 | 26 | repo 27 | src/main/resources/assets/powertool/textures/item/holographics.psd 28 | src/main/resources/assets/powertool/textures/gui/item_supplier.psd 29 | src/main/resources/assets/powertool/textures/block/command_block_activator.psd 30 | src/main/resources/assets/powertool/textures/gui/trash_can.psd 31 | src/main/resources/assets/powertool/textures/item/command_shard.psd 32 | src/main/resources/assets/powertool/textures/item/tonk.psd 33 | src/main/resources/assets/powertool/textures/item/examine_holo_glass.psd 34 | src/main/resources/assets/powertool/textures/block/observer_time_back.psd 35 | src/main/resources/assets/powertool/textures/block/observer_time_back_on.psd 36 | src/main/resources/assets/powertool/textures/block/observer_time_front.psd 37 | src/main/resources/assets/powertool/textures/block/observer_time_side.psd 38 | src/main/resources/assets/powertool/textures/block/observer_time_top.psd 39 | src/main/resources/assets/powertool/textures/gui/timezone_icon.psd 40 | src/main/resources/assets/powertool/textures/gui/register.psd 41 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # PowerTool 2 | 3 | 一堆 Minecraft 内的线上展会可能会用到的小玩意。 4 | 5 | Gadgets that online convention organizers may find useful when holding conventions inside Minecraft. 6 | 7 | ## 特性列表 8 | 9 | - 周期循环命令方块儿:按一定频率(周期)循环执行命令的命令方块。 10 | - 垃圾桶:外观和原版堆肥桶一致,但丢入其中的物品会立即消失。 11 | - 电源:提供任意数量的 FE 能量输出。 12 | - 供货箱:创造模式下可设定其中的内容物,非创造模式下可以取出。 13 | - 漏斗(装饰品):外观和原版漏斗一致的方块,但没有任何实际功能,也没有方块实体。和原版漏斗一样可以朝四个方向旋转。 14 | - 营火(装饰品):外观和营火一致的方块,但没有任何实际功能,也没有方块实体。不能当作烟雾信号源使用。 15 | - 灵魂营火(装饰品):外观和灵魂营火一致的方块,但没有任何实际功能,也没有方块实体。不能当作烟雾信号源使用。 16 | - 全息投影告示牌:和空气类似的方块,但能像告示牌一样显示文字,可以选择一定朝向玩家或者面向垂直于y轴的特定方向。创造模式下右击可打开编辑界面。 17 | - 看起来没用的木棍:没有任何功能的物品,外观和原版木棍一致,但有附魔的特效。 18 | - MoTD:玩家进入游戏后会收到一条聊天消息,消息内容可自定义。 19 | - 栅栏绳结:原版拴绳现在可以将两根栅栏拴在一起。 20 | - 更多没有方块实体的“装饰”方块 21 | - 物品展示框和荧光物品展示框(但是方块版本):可以旋转其中物品,支持红石比较器检测,支持隐藏框体。极难破坏。 22 | - 透明刷:右键可直接将方块模式的展示框变为透明。 23 | - 加速玩家:使用 `/accelerate` 命令改变玩家速度(或者使用 `/bathappy` 别名,让森林蝙蝠快乐)。 24 | - `/accelerate ` 25 | - `/accelerate multiply ` 26 | - 展示模式工具:在方块上使用后该方块打开的gui将无法在非创造模式下进行任何操作,仅能查看。 27 | - 未完待续 To be continued 28 | 29 | ## 鸣谢 30 | 31 | - `src/main/resources/assets/powertool/sound/item/clap.ogg` 32 | 出自 [https://freesound.org/people/mikaelfernstrom/sounds/68727/](https://freesound.org/people/mikaelfernstrom/sounds/68727/), 33 | 在 CC-BY 4.0 许可证下发布,有修改。 34 | - 全息投影告示牌的部分代码改编自 [ModFest 团队维护的 GlowCase 模组](https://github.com/ModFest/glowcase),该模组代码在 CC0-1.0 许可证下发布。 35 | - 部分渲染使用了[eyelib-sg-only](https://github.com/Argon4W/eyelib-sg-only)的部分代码,该模组代码在 MIT 许可证下发布. -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip 4 | networkTimeout=10000 5 | validateDistributionUrl=true 6 | zipStoreBase=GRADLE_USER_HOME 7 | zipStorePath=wrapper/dists 8 | -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | pluginManagement { 2 | repositories { 3 | mavenLocal() 4 | gradlePluginPortal() 5 | maven { url = 'https://maven.neoforged.net/releases' } 6 | } 7 | } 8 | 9 | plugins { 10 | id 'org.gradle.toolchains.foojay-resolver-convention' version '0.8.0' 11 | } 12 | -------------------------------------------------------------------------------- /src/generated/resources/.cache/1c8d01f8cd2191257d77ab787455ba8ba26c485f: -------------------------------------------------------------------------------- 1 | // 1.21.1 2024-09-30T17:47:44.8102831 atlases generator for powertool 2 | 571775307b668db38d4836571fad28d4d48558d1 assets/minecraft/atlases/blocks.json 3 | -------------------------------------------------------------------------------- /src/generated/resources/.cache/1f2b24e6872eb1803ba8c2f87e01af7090ccf645: -------------------------------------------------------------------------------- 1 | // 1.21.1 2024-09-24T17:13:47.3050452 Tags for minecraft:item mod id powertool 2 | 642a3fec95b11b251f1b890c2568a72adb9420fa data/powertool/tags/item/tonk.json 3 | -------------------------------------------------------------------------------- /src/generated/resources/.cache/35b25fbf923137bc0e9eb514b635bbc3f8d068d3: -------------------------------------------------------------------------------- 1 | // 1.21.1 2024-09-24T17:13:47.3070451 Tags for minecraft:block mod id powertool 2 | 38dfae216b5dfc4bded03a5ab1d88646866621ef data/minecraft/tags/block/dragon_immune.json 3 | 38dfae216b5dfc4bded03a5ab1d88646866621ef data/minecraft/tags/block/wither_immune.json 4 | d92293d44806b5026effc3ef39db0c27287b3f2a data/powertool/tags/block/command_block.json 5 | 55c955f4d4074f03345b667c276b8ff9715a24b3 data/powertool/tags/block/repeating_command_block.json 6 | -------------------------------------------------------------------------------- /src/generated/resources/assets/minecraft/atlases/blocks.json: -------------------------------------------------------------------------------- 1 | { 2 | "sources": [] 3 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/blockstates/black_distant_horizon_cheating_block.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "": { 4 | "model": "powertool:block/black_distant_horizon_cheating_block" 5 | } 6 | } 7 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/blockstates/blue_distant_horizon_cheating_block.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "": { 4 | "model": "powertool:block/blue_distant_horizon_cheating_block" 5 | } 6 | } 7 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/blockstates/brown_distant_horizon_cheating_block.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "": { 4 | "model": "powertool:block/brown_distant_horizon_cheating_block" 5 | } 6 | } 7 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/blockstates/cosmetic_barrel.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "facing=down": { 4 | "model": "minecraft:block/barrel", 5 | "x": 180 6 | }, 7 | "facing=east": { 8 | "model": "minecraft:block/barrel", 9 | "x": 90, 10 | "y": 90 11 | }, 12 | "facing=north": { 13 | "model": "minecraft:block/barrel", 14 | "x": 90 15 | }, 16 | "facing=south": { 17 | "model": "minecraft:block/barrel", 18 | "x": 90, 19 | "y": 180 20 | }, 21 | "facing=up": { 22 | "model": "minecraft:block/barrel" 23 | }, 24 | "facing=west": { 25 | "model": "minecraft:block/barrel", 26 | "x": 90, 27 | "y": 270 28 | } 29 | } 30 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/blockstates/cosmetic_beacon.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "": { 4 | "model": "powertool:block/cosmetic_beacon" 5 | } 6 | } 7 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/blockstates/cosmetic_beehive.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "facing=east": { 4 | "model": "minecraft:block/beehive", 5 | "y": 90 6 | }, 7 | "facing=north": { 8 | "model": "minecraft:block/beehive" 9 | }, 10 | "facing=south": { 11 | "model": "minecraft:block/beehive", 12 | "y": 180 13 | }, 14 | "facing=west": { 15 | "model": "minecraft:block/beehive", 16 | "y": 270 17 | } 18 | } 19 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/blockstates/cosmetic_blast_furnace.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "facing=east,lit=false": { 4 | "model": "minecraft:block/blast_furnace", 5 | "y": 450 6 | }, 7 | "facing=east,lit=true": { 8 | "model": "minecraft:block/blast_furnace_on", 9 | "y": 450 10 | }, 11 | "facing=north,lit=false": { 12 | "model": "minecraft:block/blast_furnace", 13 | "y": 360 14 | }, 15 | "facing=north,lit=true": { 16 | "model": "minecraft:block/blast_furnace_on", 17 | "y": 360 18 | }, 19 | "facing=south,lit=false": { 20 | "model": "minecraft:block/blast_furnace", 21 | "y": 180 22 | }, 23 | "facing=south,lit=true": { 24 | "model": "minecraft:block/blast_furnace_on", 25 | "y": 180 26 | }, 27 | "facing=west,lit=false": { 28 | "model": "minecraft:block/blast_furnace", 29 | "y": 270 30 | }, 31 | "facing=west,lit=true": { 32 | "model": "minecraft:block/blast_furnace_on", 33 | "y": 270 34 | } 35 | } 36 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/blockstates/cosmetic_brain_coral_block.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "": { 4 | "model": "minecraft:block/brain_coral_block" 5 | } 6 | } 7 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/blockstates/cosmetic_bubble_coral_block.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "": { 4 | "model": "minecraft:block/bubble_coral_block" 5 | } 6 | } 7 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/blockstates/cosmetic_cartography_table.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "": { 4 | "model": "minecraft:block/cartography_table" 5 | } 6 | } 7 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/blockstates/cosmetic_crafting_table.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "": { 4 | "model": "minecraft:block/crafting_table" 5 | } 6 | } 7 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/blockstates/cosmetic_enchanting_table.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "": { 4 | "model": "minecraft:block/enchanting_table" 5 | } 6 | } 7 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/blockstates/cosmetic_fire_coral_block.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "": { 4 | "model": "minecraft:block/fire_coral_block" 5 | } 6 | } 7 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/blockstates/cosmetic_fletching_table.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "": { 4 | "model": "minecraft:block/fletching_table" 5 | } 6 | } 7 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/blockstates/cosmetic_furnace.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "facing=east,lit=false": { 4 | "model": "minecraft:block/furnace", 5 | "y": 450 6 | }, 7 | "facing=east,lit=true": { 8 | "model": "minecraft:block/furnace_on", 9 | "y": 450 10 | }, 11 | "facing=north,lit=false": { 12 | "model": "minecraft:block/furnace", 13 | "y": 360 14 | }, 15 | "facing=north,lit=true": { 16 | "model": "minecraft:block/furnace_on", 17 | "y": 360 18 | }, 19 | "facing=south,lit=false": { 20 | "model": "minecraft:block/furnace", 21 | "y": 180 22 | }, 23 | "facing=south,lit=true": { 24 | "model": "minecraft:block/furnace_on", 25 | "y": 180 26 | }, 27 | "facing=west,lit=false": { 28 | "model": "minecraft:block/furnace", 29 | "y": 270 30 | }, 31 | "facing=west,lit=true": { 32 | "model": "minecraft:block/furnace_on", 33 | "y": 270 34 | } 35 | } 36 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/blockstates/cosmetic_gravel.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "": { 4 | "model": "minecraft:block/gravel" 5 | } 6 | } 7 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/blockstates/cosmetic_horn_coral_block.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "": { 4 | "model": "minecraft:block/horn_coral_block" 5 | } 6 | } 7 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/blockstates/cosmetic_red_sand.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "": { 4 | "model": "minecraft:block/red_sand" 5 | } 6 | } 7 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/blockstates/cosmetic_redstone_block.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "": { 4 | "model": "minecraft:block/redstone_block" 5 | } 6 | } 7 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/blockstates/cosmetic_sand.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "": { 4 | "model": "minecraft:block/sand" 5 | } 6 | } 7 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/blockstates/cosmetic_smithing_table.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "": { 4 | "model": "minecraft:block/smithing_table" 5 | } 6 | } 7 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/blockstates/cosmetic_smoker.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "facing=east,lit=false": { 4 | "model": "minecraft:block/smoker", 5 | "y": 450 6 | }, 7 | "facing=east,lit=true": { 8 | "model": "minecraft:block/smoker_on", 9 | "y": 450 10 | }, 11 | "facing=north,lit=false": { 12 | "model": "minecraft:block/smoker", 13 | "y": 360 14 | }, 15 | "facing=north,lit=true": { 16 | "model": "minecraft:block/smoker_on", 17 | "y": 360 18 | }, 19 | "facing=south,lit=false": { 20 | "model": "minecraft:block/smoker", 21 | "y": 180 22 | }, 23 | "facing=south,lit=true": { 24 | "model": "minecraft:block/smoker_on", 25 | "y": 180 26 | }, 27 | "facing=west,lit=false": { 28 | "model": "minecraft:block/smoker", 29 | "y": 270 30 | }, 31 | "facing=west,lit=true": { 32 | "model": "minecraft:block/smoker_on", 33 | "y": 270 34 | } 35 | } 36 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/blockstates/cosmetic_stonecutter.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "facing=east": { 4 | "model": "minecraft:block/stonecutter", 5 | "y": 90 6 | }, 7 | "facing=north": { 8 | "model": "minecraft:block/stonecutter" 9 | }, 10 | "facing=south": { 11 | "model": "minecraft:block/stonecutter", 12 | "y": 180 13 | }, 14 | "facing=west": { 15 | "model": "minecraft:block/stonecutter", 16 | "y": 270 17 | } 18 | } 19 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/blockstates/cosmetic_tube_coral_block.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "": { 4 | "model": "minecraft:block/tube_coral_block" 5 | } 6 | } 7 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/blockstates/cyan_distant_horizon_cheating_block.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "": { 4 | "model": "powertool:block/cyan_distant_horizon_cheating_block" 5 | } 6 | } 7 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/blockstates/gray_distant_horizon_cheating_block.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "": { 4 | "model": "powertool:block/gray_distant_horizon_cheating_block" 5 | } 6 | } 7 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/blockstates/green_distant_horizon_cheating_block.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "": { 4 | "model": "powertool:block/green_distant_horizon_cheating_block" 5 | } 6 | } 7 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/blockstates/light_blue_distant_horizon_cheating_block.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "": { 4 | "model": "powertool:block/light_blue_distant_horizon_cheating_block" 5 | } 6 | } 7 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/blockstates/light_gray_distant_horizon_cheating_block.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "": { 4 | "model": "powertool:block/light_gray_distant_horizon_cheating_block" 5 | } 6 | } 7 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/blockstates/lime_distant_horizon_cheating_block.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "": { 4 | "model": "powertool:block/lime_distant_horizon_cheating_block" 5 | } 6 | } 7 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/blockstates/magenta_distant_horizon_cheating_block.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "": { 4 | "model": "powertool:block/magenta_distant_horizon_cheating_block" 5 | } 6 | } 7 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/blockstates/orange_distant_horizon_cheating_block.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "": { 4 | "model": "powertool:block/orange_distant_horizon_cheating_block" 5 | } 6 | } 7 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/blockstates/pink_distant_horizon_cheating_block.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "": { 4 | "model": "powertool:block/pink_distant_horizon_cheating_block" 5 | } 6 | } 7 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/blockstates/purple_distant_horizon_cheating_block.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "": { 4 | "model": "powertool:block/purple_distant_horizon_cheating_block" 5 | } 6 | } 7 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/blockstates/red_distant_horizon_cheating_block.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "": { 4 | "model": "powertool:block/red_distant_horizon_cheating_block" 5 | } 6 | } 7 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/blockstates/temple.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "facing=east,waterlogged=false": { 4 | "model": "powertool:block/temple", 5 | "y": 90 6 | }, 7 | "facing=east,waterlogged=true": { 8 | "model": "powertool:block/temple", 9 | "y": 90 10 | }, 11 | "facing=north,waterlogged=false": { 12 | "model": "powertool:block/temple" 13 | }, 14 | "facing=north,waterlogged=true": { 15 | "model": "powertool:block/temple" 16 | }, 17 | "facing=south,waterlogged=false": { 18 | "model": "powertool:block/temple", 19 | "y": 180 20 | }, 21 | "facing=south,waterlogged=true": { 22 | "model": "powertool:block/temple", 23 | "y": 180 24 | }, 25 | "facing=west,waterlogged=false": { 26 | "model": "powertool:block/temple", 27 | "y": 270 28 | }, 29 | "facing=west,waterlogged=true": { 30 | "model": "powertool:block/temple", 31 | "y": 270 32 | } 33 | } 34 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/blockstates/white_distant_horizon_cheating_block.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "": { 4 | "model": "powertool:block/white_distant_horizon_cheating_block" 5 | } 6 | } 7 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/blockstates/yellow_distant_horizon_cheating_block.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "": { 4 | "model": "powertool:block/yellow_distant_horizon_cheating_block" 5 | } 6 | } 7 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/models/block/black_distant_horizon_cheating_block.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/block", 3 | "textures": { 4 | "particle": "minecraft:block/black_concrete" 5 | } 6 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/models/block/blue_distant_horizon_cheating_block.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/block", 3 | "textures": { 4 | "particle": "minecraft:block/blue_concrete" 5 | } 6 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/models/block/brown_distant_horizon_cheating_block.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/block", 3 | "textures": { 4 | "particle": "minecraft:block/brown_concrete" 5 | } 6 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/models/block/cosmetic_beacon.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/beacon", 3 | "render_type": "cutout" 4 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/models/block/cyan_distant_horizon_cheating_block.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/block", 3 | "textures": { 4 | "particle": "minecraft:block/cyan_concrete" 5 | } 6 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/models/block/gray_distant_horizon_cheating_block.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/block", 3 | "textures": { 4 | "particle": "minecraft:block/gray_concrete" 5 | } 6 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/models/block/green_distant_horizon_cheating_block.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/block", 3 | "textures": { 4 | "particle": "minecraft:block/green_concrete" 5 | } 6 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/models/block/light_blue_distant_horizon_cheating_block.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/block", 3 | "textures": { 4 | "particle": "minecraft:block/light_blue_concrete" 5 | } 6 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/models/block/light_gray_distant_horizon_cheating_block.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/block", 3 | "textures": { 4 | "particle": "minecraft:block/light_gray_concrete" 5 | } 6 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/models/block/lime_distant_horizon_cheating_block.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/block", 3 | "textures": { 4 | "particle": "minecraft:block/lime_concrete" 5 | } 6 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/models/block/magenta_distant_horizon_cheating_block.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/block", 3 | "textures": { 4 | "particle": "minecraft:block/magenta_concrete" 5 | } 6 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/models/block/orange_distant_horizon_cheating_block.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/block", 3 | "textures": { 4 | "particle": "minecraft:block/orange_concrete" 5 | } 6 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/models/block/pink_distant_horizon_cheating_block.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/block", 3 | "textures": { 4 | "particle": "minecraft:block/pink_concrete" 5 | } 6 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/models/block/purple_distant_horizon_cheating_block.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/block", 3 | "textures": { 4 | "particle": "minecraft:block/purple_concrete" 5 | } 6 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/models/block/red_distant_horizon_cheating_block.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/block", 3 | "textures": { 4 | "particle": "minecraft:block/red_concrete" 5 | } 6 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/models/block/white_distant_horizon_cheating_block.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/block", 3 | "textures": { 4 | "particle": "minecraft:block/white_concrete" 5 | } 6 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/models/block/yellow_distant_horizon_cheating_block.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/block", 3 | "textures": { 4 | "particle": "minecraft:block/yellow_concrete" 5 | } 6 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/models/item/black_distant_horizon_cheating_block.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/black_concrete" 3 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/models/item/blue_distant_horizon_cheating_block.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/blue_concrete" 3 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/models/item/brown_distant_horizon_cheating_block.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/brown_concrete" 3 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/models/item/cosmetic_barrel.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/barrel" 3 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/models/item/cosmetic_beacon.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "powertool:block/cosmetic_beacon" 3 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/models/item/cosmetic_beehive.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/beehive" 3 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/models/item/cosmetic_blast_furnace.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/blast_furnace" 3 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/models/item/cosmetic_brain_coral_block.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/brain_coral_block" 3 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/models/item/cosmetic_bubble_coral_block.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/bubble_coral_block" 3 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/models/item/cosmetic_cartography_table.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/cartography_table" 3 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/models/item/cosmetic_crafting_table.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/crafting_table" 3 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/models/item/cosmetic_enchanting_table.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/enchanting_table" 3 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/models/item/cosmetic_fire_coral_block.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/fire_coral_block" 3 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/models/item/cosmetic_fletching_table.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/fletching_table" 3 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/models/item/cosmetic_furnace.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/furnace" 3 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/models/item/cosmetic_gravel.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/gravel" 3 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/models/item/cosmetic_horn_coral_block.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/horn_coral_block" 3 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/models/item/cosmetic_red_sand.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/red_sand" 3 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/models/item/cosmetic_redstone_block.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/redstone_block" 3 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/models/item/cosmetic_sand.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/sand" 3 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/models/item/cosmetic_smithing_table.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/smithing_table" 3 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/models/item/cosmetic_smoker.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/smoker" 3 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/models/item/cosmetic_stonecutter.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/stonecutter" 3 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/models/item/cosmetic_tube_coral_block.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/tube_coral_block" 3 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/models/item/cyan_distant_horizon_cheating_block.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/cyan_concrete" 3 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/models/item/delayer.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "powertool:block/delayer" 3 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/models/item/gray_distant_horizon_cheating_block.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/gray_concrete" 3 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/models/item/gray_trash_can.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "powertool:block/gray_trash_can" 3 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/models/item/green_distant_horizon_cheating_block.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/green_concrete" 3 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/models/item/green_trash_can.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "powertool:block/green_trash_can" 3 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/models/item/green_trash_can_cap.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "powertool:block/green_trash_can_cap_bottom" 3 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/models/item/light_blue_distant_horizon_cheating_block.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/light_blue_concrete" 3 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/models/item/light_gray_distant_horizon_cheating_block.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/light_gray_concrete" 3 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/models/item/lime_distant_horizon_cheating_block.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/lime_concrete" 3 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/models/item/magenta_distant_horizon_cheating_block.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/magenta_concrete" 3 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/models/item/orange_distant_horizon_cheating_block.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/orange_concrete" 3 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/models/item/pink_distant_horizon_cheating_block.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/pink_concrete" 3 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/models/item/purple_distant_horizon_cheating_block.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/purple_concrete" 3 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/models/item/red_distant_horizon_cheating_block.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/red_concrete" 3 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/models/item/temple.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "powertool:block/temple" 3 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/models/item/white_distant_horizon_cheating_block.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/white_concrete" 3 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/models/item/white_trash_can.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "powertool:block/white_trash_can" 3 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/models/item/white_trash_can_cap.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "powertool:block/white_trash_can_cap_bottom" 3 | } -------------------------------------------------------------------------------- /src/generated/resources/assets/powertool/models/item/yellow_distant_horizon_cheating_block.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/yellow_concrete" 3 | } -------------------------------------------------------------------------------- /src/generated/resources/data/minecraft/tags/block/dragon_immune.json: -------------------------------------------------------------------------------- 1 | { 2 | "values": [ 3 | "powertool:command_block" 4 | ] 5 | } -------------------------------------------------------------------------------- /src/generated/resources/data/minecraft/tags/block/wither_immune.json: -------------------------------------------------------------------------------- 1 | { 2 | "values": [ 3 | "powertool:command_block" 4 | ] 5 | } -------------------------------------------------------------------------------- /src/generated/resources/data/powertool/tags/block/command_block.json: -------------------------------------------------------------------------------- 1 | { 2 | "values": [ 3 | "powertool:command_block", 4 | "minecraft:command_block", 5 | "minecraft:chain_command_block", 6 | "minecraft:repeating_command_block" 7 | ] 8 | } -------------------------------------------------------------------------------- /src/generated/resources/data/powertool/tags/block/repeating_command_block.json: -------------------------------------------------------------------------------- 1 | { 2 | "values": [ 3 | "powertool:command_block", 4 | "minecraft:repeating_command_block" 5 | ] 6 | } -------------------------------------------------------------------------------- /src/generated/resources/data/powertool/tags/item/tonk.json: -------------------------------------------------------------------------------- 1 | { 2 | "values": [ 3 | "powertool:tonk", 4 | "powertool:thick_tonk", 5 | "powertool:extra_thick_tonk" 6 | ] 7 | } -------------------------------------------------------------------------------- /src/main/java/org/teacon/powertool/PowerTool.java: -------------------------------------------------------------------------------- 1 | package org.teacon.powertool; 2 | 3 | import net.minecraft.util.RandomSource; 4 | import net.neoforged.bus.api.IEventBus; 5 | import net.neoforged.bus.api.SubscribeEvent; 6 | import net.neoforged.fml.ModContainer; 7 | import net.neoforged.fml.common.Mod; 8 | import org.teacon.powertool.attachment.PowerToolAttachments; 9 | import org.teacon.powertool.block.PowerToolBlocks; 10 | import org.teacon.powertool.entity.PowerToolEntities; 11 | import org.teacon.powertool.item.PowerToolItems; 12 | import org.teacon.powertool.menu.PowerToolMenus; 13 | 14 | @Mod(PowerTool.MODID) 15 | public class PowerTool { 16 | 17 | public static final String MODID = "powertool"; 18 | public static final ThreadLocal GLOBAL_RANDOM = ThreadLocal.withInitial(RandomSource::createNewThreadLocalInstance); 19 | 20 | public PowerTool(ModContainer modContainer, IEventBus bus) { 21 | PowerToolBlocks.register(bus); 22 | PowerToolItems.register(bus); 23 | PowerToolMenus.register(bus); 24 | PowerToolSoundEvents.register(bus); 25 | PowerToolEntities.register(bus); 26 | PowerToolAttachments.register(bus); 27 | PowerToolConfig.init(modContainer); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/org/teacon/powertool/PowerToolSoundEvents.java: -------------------------------------------------------------------------------- 1 | package org.teacon.powertool; 2 | 3 | import net.minecraft.core.registries.Registries; 4 | import net.minecraft.sounds.SoundEvent; 5 | import net.neoforged.bus.api.IEventBus; 6 | import net.neoforged.neoforge.registries.DeferredHolder; 7 | import net.neoforged.neoforge.registries.DeferredRegister; 8 | import org.teacon.powertool.utils.VanillaUtils; 9 | 10 | public class PowerToolSoundEvents { 11 | 12 | public static final DeferredRegister SOUND_EVENTS = DeferredRegister.create(Registries.SOUND_EVENT, PowerTool.MODID); 13 | 14 | public static final DeferredHolder CLAP = SOUND_EVENTS.register("clap", () -> SoundEvent.createFixedRangeEvent(VanillaUtils.resourceLocationOf(PowerTool.MODID, "item.powertool.clap"), 16F)); 15 | 16 | public static void register(IEventBus bus) { 17 | SOUND_EVENTS.register(bus); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/org/teacon/powertool/block/DistantHorizonCheatingBlock.java: -------------------------------------------------------------------------------- 1 | package org.teacon.powertool.block; 2 | 3 | import net.minecraft.MethodsReturnNonnullByDefault; 4 | import net.minecraft.core.BlockPos; 5 | import net.minecraft.network.chat.Component; 6 | import net.minecraft.world.item.Item; 7 | import net.minecraft.world.item.ItemStack; 8 | import net.minecraft.world.item.TooltipFlag; 9 | import net.minecraft.world.level.BlockGetter; 10 | import net.minecraft.world.level.block.Block; 11 | import net.minecraft.world.level.block.state.BlockState; 12 | 13 | import javax.annotation.ParametersAreNonnullByDefault; 14 | import java.util.List; 15 | 16 | @MethodsReturnNonnullByDefault 17 | @ParametersAreNonnullByDefault 18 | public class DistantHorizonCheatingBlock extends Block implements ICosmeticBlock { 19 | 20 | public DistantHorizonCheatingBlock(Properties properties) { 21 | super(properties); 22 | } 23 | 24 | @Override 25 | protected float getShadeBrightness(BlockState state, BlockGetter level, BlockPos pos) { 26 | return 1f; 27 | } 28 | 29 | @Override 30 | public void appendHoverText(ItemStack stack, Item.TooltipContext context, List tooltipComponents, TooltipFlag tooltipFlag) { 31 | super.appendHoverText(stack, context, tooltipComponents, tooltipFlag); 32 | tooltipComponents.add(Component.translatable("tooltip.powertool.distant_horizon_cheating_block")); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/org/teacon/powertool/block/ICosmeticBlock.java: -------------------------------------------------------------------------------- 1 | package org.teacon.powertool.block; 2 | 3 | public interface ICosmeticBlock { 4 | } 5 | -------------------------------------------------------------------------------- /src/main/java/org/teacon/powertool/block/PeriodicCommandBlock.java: -------------------------------------------------------------------------------- 1 | package org.teacon.powertool.block; 2 | 3 | import net.minecraft.MethodsReturnNonnullByDefault; 4 | import net.minecraft.core.BlockPos; 5 | import net.minecraft.server.level.ServerLevel; 6 | import net.minecraft.world.level.block.CommandBlock; 7 | import net.minecraft.world.level.block.entity.BlockEntity; 8 | import net.minecraft.world.level.block.state.BlockState; 9 | import org.teacon.powertool.block.entity.PeriodicCommandBlockEntity; 10 | import org.teacon.powertool.bridge.PeriodCommandBlockBridge; 11 | 12 | import javax.annotation.ParametersAreNonnullByDefault; 13 | 14 | @ParametersAreNonnullByDefault 15 | @MethodsReturnNonnullByDefault 16 | public class PeriodicCommandBlock extends CommandBlock implements PeriodCommandBlockBridge { 17 | 18 | public PeriodicCommandBlock(Properties properties, boolean auto) { 19 | super(auto, properties); 20 | } 21 | 22 | @Override 23 | public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { 24 | return new PeriodicCommandBlockEntity(pos, state); 25 | } 26 | 27 | @Override 28 | public int powerTool$Period(ServerLevel level, BlockPos pos) { 29 | return level.getBlockEntity(pos) instanceof PeriodicCommandBlockEntity entity ? entity.getPeriod() : 1; 30 | } 31 | 32 | 33 | } 34 | -------------------------------------------------------------------------------- /src/main/java/org/teacon/powertool/block/cosmetical/CosmeticBarrel.java: -------------------------------------------------------------------------------- 1 | package org.teacon.powertool.block.cosmetical; 2 | 3 | import net.minecraft.ChatFormatting; 4 | import net.minecraft.network.chat.Component; 5 | import net.minecraft.world.item.Item; 6 | import net.minecraft.world.item.ItemStack; 7 | import net.minecraft.world.item.TooltipFlag; 8 | 9 | import javax.annotation.ParametersAreNonnullByDefault; 10 | import java.util.List; 11 | 12 | @ParametersAreNonnullByDefault 13 | public class CosmeticBarrel extends CosmeticDirectionalBlock{ 14 | 15 | public CosmeticBarrel(Properties p) { 16 | super(p); 17 | } 18 | 19 | @Override 20 | public void appendHoverText(ItemStack stack, Item.TooltipContext context, List tooltipComponents, TooltipFlag tooltipFlag) { 21 | tooltipComponents.add(Component.translatable("block.powertool.cosmetic_barrel.tooltip").withStyle(ChatFormatting.DARK_GRAY)); 22 | } 23 | 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/org/teacon/powertool/block/cosmetical/CosmeticBeehive.java: -------------------------------------------------------------------------------- 1 | package org.teacon.powertool.block.cosmetical; 2 | 3 | import net.minecraft.ChatFormatting; 4 | import net.minecraft.network.chat.Component; 5 | import net.minecraft.world.item.Item; 6 | import net.minecraft.world.item.ItemStack; 7 | import net.minecraft.world.item.TooltipFlag; 8 | 9 | import javax.annotation.ParametersAreNonnullByDefault; 10 | import java.util.List; 11 | 12 | @ParametersAreNonnullByDefault 13 | public class CosmeticBeehive extends CosmeticHorizontalDirectionalBlock{ 14 | 15 | public CosmeticBeehive(Properties p) { 16 | super(p); 17 | } 18 | 19 | @Override 20 | public void appendHoverText(ItemStack stack, Item.TooltipContext context, List tooltipComponents, TooltipFlag tooltipFlag) { 21 | tooltipComponents.add(Component.translatable("block.powertool.cosmetic_beehive.tooltip").withStyle(ChatFormatting.DARK_GRAY)); 22 | } 23 | 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/org/teacon/powertool/block/cosmetical/CosmeticDirectionalBlock.java: -------------------------------------------------------------------------------- 1 | package org.teacon.powertool.block.cosmetical; 2 | 3 | import net.minecraft.core.Direction; 4 | import net.minecraft.world.item.context.BlockPlaceContext; 5 | import net.minecraft.world.level.block.Block; 6 | import net.minecraft.world.level.block.state.BlockState; 7 | import net.minecraft.world.level.block.state.StateDefinition; 8 | import net.minecraft.world.level.block.state.properties.BlockStateProperties; 9 | import net.minecraft.world.level.block.state.properties.DirectionProperty; 10 | 11 | public abstract class CosmeticDirectionalBlock extends CosmeticSimpleBlock { 12 | 13 | public static final DirectionProperty FACING = BlockStateProperties.FACING; 14 | 15 | public CosmeticDirectionalBlock(Properties p) { 16 | super(p); 17 | this.registerDefaultState(this.stateDefinition.any().setValue(FACING, Direction.UP)); 18 | } 19 | 20 | public BlockState getStateForPlacement(BlockPlaceContext pContext) { 21 | return this.defaultBlockState().setValue(FACING, pContext.getClickedFace()); 22 | } 23 | 24 | protected void createBlockStateDefinition(StateDefinition.Builder pBuilder) { 25 | pBuilder.add(FACING); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/main/java/org/teacon/powertool/block/cosmetical/CosmeticHorizontalDirectionalBlock.java: -------------------------------------------------------------------------------- 1 | package org.teacon.powertool.block.cosmetical; 2 | 3 | import net.minecraft.core.Direction; 4 | import net.minecraft.world.item.context.BlockPlaceContext; 5 | import net.minecraft.world.level.block.Block; 6 | import net.minecraft.world.level.block.state.BlockState; 7 | import net.minecraft.world.level.block.state.StateDefinition; 8 | import net.minecraft.world.level.block.state.properties.BlockStateProperties; 9 | import net.minecraft.world.level.block.state.properties.DirectionProperty; 10 | 11 | 12 | public class CosmeticHorizontalDirectionalBlock extends CosmeticSimpleBlock{ 13 | 14 | public static final DirectionProperty FACING = BlockStateProperties.HORIZONTAL_FACING; 15 | 16 | public CosmeticHorizontalDirectionalBlock(Properties p) { 17 | super(p); 18 | this.registerDefaultState(this.stateDefinition.any().setValue(FACING, Direction.NORTH)); 19 | } 20 | 21 | public BlockState getStateForPlacement(BlockPlaceContext pContext) { 22 | return this.defaultBlockState().setValue(FACING, pContext.getHorizontalDirection().getOpposite()); 23 | } 24 | 25 | protected void createBlockStateDefinition(StateDefinition.Builder pBuilder) { 26 | pBuilder.add(FACING); 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/org/teacon/powertool/block/cosmetical/CosmeticSimpleBlock.java: -------------------------------------------------------------------------------- 1 | package org.teacon.powertool.block.cosmetical; 2 | 3 | import net.minecraft.ChatFormatting; 4 | import net.minecraft.network.chat.Component; 5 | import net.minecraft.world.item.Item; 6 | import net.minecraft.world.item.ItemStack; 7 | import net.minecraft.world.item.TooltipFlag; 8 | import net.minecraft.world.level.block.Block; 9 | import org.teacon.powertool.block.ICosmeticBlock; 10 | 11 | import javax.annotation.ParametersAreNonnullByDefault; 12 | import java.util.List; 13 | 14 | @ParametersAreNonnullByDefault 15 | public class CosmeticSimpleBlock extends Block implements ICosmeticBlock { 16 | 17 | public CosmeticSimpleBlock(Properties p) { 18 | super(p); 19 | } 20 | 21 | @Override 22 | public void appendHoverText(ItemStack stack, Item.TooltipContext context, List tooltipComponents, TooltipFlag tooltipFlag) { 23 | tooltipComponents.add(Component.translatable("block.powertool.cosmetic_block.tooltip").withStyle(ChatFormatting.DARK_GRAY)); 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/org/teacon/powertool/block/entity/IClientUpdateBlockEntity.java: -------------------------------------------------------------------------------- 1 | package org.teacon.powertool.block.entity; 2 | 3 | import net.minecraft.core.HolderLookup; 4 | import net.minecraft.nbt.CompoundTag; 5 | 6 | public interface IClientUpdateBlockEntity { 7 | 8 | void update(CompoundTag tag, HolderLookup.Provider registries); 9 | 10 | void writeToPacket(CompoundTag tag, HolderLookup.Provider registries); 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/org/teacon/powertool/block/entity/SafeBlockEntity.java: -------------------------------------------------------------------------------- 1 | package org.teacon.powertool.block.entity; 2 | 3 | import net.minecraft.core.BlockPos; 4 | import net.minecraft.world.level.block.entity.BlockEntity; 5 | import net.minecraft.world.level.block.state.BlockState; 6 | import org.teacon.powertool.block.PowerToolBlocks; 7 | 8 | public class SafeBlockEntity extends BlockEntity { 9 | public SafeBlockEntity(BlockPos pos, BlockState blockState) { 10 | super(PowerToolBlocks.SAFE_BLOCK_ENTITY.get(), pos, blockState); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/main/java/org/teacon/powertool/block/holo_sign/HoloSignBEFlag.java: -------------------------------------------------------------------------------- 1 | package org.teacon.powertool.block.holo_sign; 2 | 3 | public interface HoloSignBEFlag { 4 | } 5 | -------------------------------------------------------------------------------- /src/main/java/org/teacon/powertool/bridge/PeriodCommandBlockBridge.java: -------------------------------------------------------------------------------- 1 | package org.teacon.powertool.bridge; 2 | 3 | import net.minecraft.core.BlockPos; 4 | import net.minecraft.server.level.ServerLevel; 5 | 6 | public interface PeriodCommandBlockBridge { 7 | 8 | int powerTool$Period(ServerLevel level, BlockPos pos); 9 | } 10 | -------------------------------------------------------------------------------- /src/main/java/org/teacon/powertool/client/CachedModeClient.java: -------------------------------------------------------------------------------- 1 | package org.teacon.powertool.client; 2 | 3 | import net.minecraft.client.Minecraft; 4 | import net.minecraft.client.renderer.blockentity.BlockEntityRenderer; 5 | import net.minecraft.core.BlockPos; 6 | import net.minecraft.world.level.ChunkPos; 7 | import net.minecraft.world.level.block.entity.BlockEntity; 8 | import org.teacon.powertool.client.anvilcraft.rendering.CacheableBERenderingPipeline; 9 | 10 | import java.util.HashMap; 11 | import java.util.List; 12 | import java.util.Map; 13 | 14 | public class CachedModeClient { 15 | public static final CachedModeClient INSTANCE = new CachedModeClient(); 16 | private final Map> cachedModeData = new HashMap<>(); 17 | 18 | public boolean isCachedModeEnabledOn(BlockEntity be) { 19 | BlockEntityRenderer renderer = Minecraft.getInstance() 20 | .getBlockEntityRenderDispatcher() 21 | .getRenderer(be); 22 | if (renderer == null) return false; 23 | return isCachedModeEnabledOn(be.getBlockPos()); 24 | } 25 | 26 | public boolean isCachedModeEnabledOn(BlockPos pos) { 27 | ChunkPos chunkPos = new ChunkPos(pos); 28 | if (!cachedModeData.containsKey(chunkPos)) return false; 29 | return cachedModeData.get(chunkPos).contains(pos); 30 | } 31 | 32 | public void updateCachedModeData(ChunkPos chunkPos, List blockPosList) { 33 | cachedModeData.put(chunkPos, blockPosList); 34 | CacheableBERenderingPipeline.getInstance().updateFromNetwork(chunkPos, blockPosList); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/main/java/org/teacon/powertool/client/eyelib/render/sections/BlockEntitySectionGeometryRenderer.java: -------------------------------------------------------------------------------- 1 | package org.teacon.powertool.client.eyelib.render.sections; 2 | 3 | import com.mojang.blaze3d.vertex.PoseStack; 4 | import net.minecraft.client.renderer.MultiBufferSource; 5 | import net.minecraft.core.BlockPos; 6 | import net.minecraft.world.level.block.entity.BlockEntity; 7 | import net.neoforged.neoforge.client.event.AddSectionGeometryEvent; 8 | 9 | /** 10 | * @author Argon4W 11 | */ 12 | public interface BlockEntitySectionGeometryRenderer { 13 | void renderSectionGeometry(T blockEntity, AddSectionGeometryEvent.SectionRenderingContext context, PoseStack poseStack, BlockPos pos, BlockPos regionOrigin, int packedLight, MultiBufferSource bufferSource); 14 | } 15 | -------------------------------------------------------------------------------- /src/main/java/org/teacon/powertool/client/eyelib/render/sections/SectionGeometryGameEvents.java: -------------------------------------------------------------------------------- 1 | package org.teacon.powertool.client.eyelib.render.sections; 2 | 3 | import net.neoforged.api.distmarker.Dist; 4 | import net.neoforged.bus.api.SubscribeEvent; 5 | import net.neoforged.fml.common.EventBusSubscriber; 6 | import net.neoforged.neoforge.client.event.AddSectionGeometryEvent; 7 | import org.teacon.powertool.PowerTool; 8 | 9 | @EventBusSubscriber(bus = EventBusSubscriber.Bus.GAME, modid = PowerTool.MODID, value = Dist.CLIENT) 10 | public class SectionGeometryGameEvents { 11 | @SubscribeEvent 12 | public static void addSectionGeometry(AddSectionGeometryEvent event) { 13 | event.addRenderer(new SectionGeometryBlockEntityRenderDispatcher(event.getSectionOrigin().immutable())); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/main/java/org/teacon/powertool/client/gui/TrashCanWithContainerScreen.java: -------------------------------------------------------------------------------- 1 | package org.teacon.powertool.client.gui; 2 | 3 | import com.mojang.blaze3d.systems.RenderSystem; 4 | import net.minecraft.client.gui.GuiGraphics; 5 | import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; 6 | import net.minecraft.client.renderer.GameRenderer; 7 | import net.minecraft.network.chat.Component; 8 | import net.minecraft.resources.ResourceLocation; 9 | import net.minecraft.world.entity.player.Inventory; 10 | import org.teacon.powertool.menu.TrashCanWithContainerMenu; 11 | import org.teacon.powertool.utils.VanillaUtils; 12 | 13 | import javax.annotation.ParametersAreNonnullByDefault; 14 | 15 | @ParametersAreNonnullByDefault 16 | public class TrashCanWithContainerScreen extends AbstractContainerScreen { 17 | 18 | private static final ResourceLocation BG = VanillaUtils.modRL("textures/gui/trash_can.png"); 19 | 20 | public TrashCanWithContainerScreen(TrashCanWithContainerMenu menu, Inventory playerInventory, Component title) { 21 | super(menu, playerInventory, title); 22 | } 23 | 24 | @Override 25 | public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTick) { 26 | super.render(guiGraphics, mouseX, mouseY, partialTick); 27 | this.renderTooltip(guiGraphics, mouseX, mouseY); 28 | } 29 | 30 | @Override 31 | protected void renderBg(GuiGraphics guiGraphics, float partialTick, int mouseX, int mouseY) { 32 | RenderSystem.setShader(GameRenderer::getPositionTexShader); 33 | RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); 34 | guiGraphics.blit(BG, this.leftPos, this.topPos, 0, 0, this.imageWidth, this.imageHeight); 35 | 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/main/java/org/teacon/powertool/client/gui/widget/InvisibleButton.java: -------------------------------------------------------------------------------- 1 | package org.teacon.powertool.client.gui.widget; 2 | 3 | import net.minecraft.client.gui.components.Button; 4 | import net.minecraft.client.gui.narration.NarratedElementType; 5 | import net.minecraft.client.gui.narration.NarrationElementOutput; 6 | import net.minecraft.network.chat.Component; 7 | 8 | /** Special button that only renders tooltip and triggers narration. */ 9 | public class InvisibleButton extends Button { 10 | public InvisibleButton(Builder builder) { 11 | super(builder); 12 | } 13 | 14 | @Override 15 | public void updateWidgetNarration(NarrationElementOutput output) { 16 | output.add(NarratedElementType.USAGE, Component.translatable("narration.button.usage.hovered")); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/main/java/org/teacon/powertool/client/overlay/ClientDebugCharts.java: -------------------------------------------------------------------------------- 1 | package org.teacon.powertool.client.overlay; 2 | 3 | import com.mojang.datafixers.util.Pair; 4 | import net.minecraft.SharedConstants; 5 | import net.minecraft.util.debugchart.LocalSampleLogger; 6 | import net.minecraft.util.debugchart.SampleLogger; 7 | 8 | import java.util.HashMap; 9 | import java.util.Map; 10 | 11 | public class ClientDebugCharts { 12 | 13 | public static final Map> DEBUG_CHARTS = new HashMap<>(); 14 | 15 | public static void recordDebugData(String id, long data){ 16 | if(!SharedConstants.IS_RUNNING_WITH_JDWP) return; 17 | var pair = DEBUG_CHARTS.computeIfAbsent(id,(k) -> { 18 | var logger = new LocalSampleLogger(1); 19 | return Pair.of(new AdaptiveDebugChart(id,logger),logger); 20 | }); 21 | pair.getSecond().logSample(data); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/org/teacon/powertool/client/overlay/MartingCarOverlay.java: -------------------------------------------------------------------------------- 1 | package org.teacon.powertool.client.overlay; 2 | 3 | import net.minecraft.client.DeltaTracker; 4 | import net.minecraft.client.Minecraft; 5 | import net.minecraft.client.gui.GuiGraphics; 6 | import net.minecraft.util.Mth; 7 | import org.teacon.powertool.entity.MartingCarEntity; 8 | import org.teacon.powertool.utils.VanillaUtils; 9 | 10 | import javax.annotation.ParametersAreNonnullByDefault; 11 | 12 | @ParametersAreNonnullByDefault 13 | public class MartingCarOverlay { 14 | 15 | public static void renderBoostBar(GuiGraphics guiGraphics, DeltaTracker deltaTracker) { 16 | var player = Minecraft.getInstance().player; 17 | if (player == null || !player.isPassenger()) return; 18 | var vehicle = player.getVehicle(); 19 | if(!(vehicle instanceof MartingCarEntity martingCar)) return; 20 | var font = Minecraft.getInstance().font; 21 | float energy = martingCar.getEntityData().get(MartingCarEntity.ENERGY); 22 | //VanillaUtils.recordDebugData("energy",(long) energy); 23 | float ratio = Mth.clamp(energy/(float)MartingCarEntity.MAX_ENERGY,0f,1f); 24 | guiGraphics.renderOutline(guiGraphics.guiWidth()/2-100,guiGraphics.guiHeight()-50,200,10,-1); 25 | guiGraphics.fill(guiGraphics.guiWidth()/2-99,guiGraphics.guiHeight()-49, guiGraphics.guiWidth()/2-99+(int) (198*ratio),guiGraphics.guiHeight()-49 + 8,ratio == 1 ? VanillaUtils.getColor(0,255,0,255) : -1); 26 | guiGraphics.drawString(font, "boost",guiGraphics.guiWidth()/2-102-font.width("boost"),guiGraphics.guiHeight()-48,-1,true); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/org/teacon/powertool/command/PowerToolCommands.java: -------------------------------------------------------------------------------- 1 | package org.teacon.powertool.command; 2 | 3 | import net.neoforged.bus.api.SubscribeEvent; 4 | import net.neoforged.fml.common.EventBusSubscriber; 5 | import net.neoforged.neoforge.event.RegisterCommandsEvent; 6 | import org.teacon.powertool.PowerTool; 7 | 8 | @EventBusSubscriber(bus = EventBusSubscriber.Bus.GAME, modid = PowerTool.MODID) 9 | public class PowerToolCommands { 10 | 11 | @SubscribeEvent 12 | public static void regCommand(RegisterCommandsEvent event) { 13 | FlyCommand.reg(event.getDispatcher()); 14 | AccelerateCommand.register(event.getDispatcher()); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/org/teacon/powertool/compat/top/TOPCompatibility.java: -------------------------------------------------------------------------------- 1 | package org.teacon.powertool.compat.top; 2 | 3 | import net.neoforged.bus.api.SubscribeEvent; 4 | import net.neoforged.fml.InterModComms; 5 | import net.neoforged.fml.ModList; 6 | import net.neoforged.fml.common.EventBusSubscriber; 7 | import net.neoforged.fml.event.lifecycle.InterModEnqueueEvent; 8 | import org.teacon.powertool.PowerTool; 9 | 10 | @EventBusSubscriber(modid = PowerTool.MODID, bus = EventBusSubscriber.Bus.MOD) 11 | public final class TOPCompatibility { 12 | 13 | @SubscribeEvent 14 | public static void onIMC(InterModEnqueueEvent event) { 15 | if (ModList.get().isLoaded("theoneprobe")) { 16 | InterModComms.sendTo("theoneprobe", "getTheOneProbe", PowerToolTOPProvider::new); 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/org/teacon/powertool/datagen/DataGenerators.java: -------------------------------------------------------------------------------- 1 | package org.teacon.powertool.datagen; 2 | 3 | import net.minecraft.data.DataGenerator; 4 | import net.minecraft.data.PackOutput; 5 | import net.neoforged.bus.api.SubscribeEvent; 6 | import net.neoforged.fml.common.EventBusSubscriber; 7 | import net.neoforged.neoforge.common.data.ExistingFileHelper; 8 | import net.neoforged.neoforge.data.event.GatherDataEvent; 9 | import org.teacon.powertool.PowerTool; 10 | 11 | 12 | @EventBusSubscriber(modid = DataGenerators.MOD_ID, bus = EventBusSubscriber.Bus.MOD) 13 | public class DataGenerators { 14 | 15 | public static final String MOD_ID = PowerTool.MODID; 16 | 17 | @SubscribeEvent 18 | public static void gatherData(GatherDataEvent event) { 19 | DataGenerator generator = event.getGenerator(); 20 | PackOutput output = generator.getPackOutput(); 21 | ExistingFileHelper fh = event.getExistingFileHelper(); 22 | var lookupProvider = event.getLookupProvider(); 23 | generator.addProvider(event.includeClient(), new ModBlockModelProvider(output, fh)); 24 | var blockTagsProvider = generator.addProvider(event.includeClient(), new PowerToolBlockTagsProvider(output,lookupProvider,fh)); 25 | generator.addProvider(event.includeClient(), new PowerToolItemTagsProvider(output,lookupProvider,blockTagsProvider.contentsGetter(),fh)); 26 | generator.addProvider(event.includeClient(), new SpriteProvider(output,lookupProvider,fh)); 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/org/teacon/powertool/datagen/PowerToolItemTagsProvider.java: -------------------------------------------------------------------------------- 1 | package org.teacon.powertool.datagen; 2 | 3 | import net.minecraft.core.HolderLookup; 4 | import net.minecraft.data.PackOutput; 5 | import net.minecraft.data.tags.ItemTagsProvider; 6 | import net.minecraft.tags.ItemTags; 7 | import net.minecraft.tags.TagKey; 8 | import net.minecraft.world.item.Item; 9 | import net.minecraft.world.level.block.Block; 10 | import net.neoforged.neoforge.common.data.ExistingFileHelper; 11 | import org.jetbrains.annotations.Nullable; 12 | import org.teacon.powertool.PowerTool; 13 | import org.teacon.powertool.item.PowerToolItems; 14 | import org.teacon.powertool.utils.VanillaUtils; 15 | 16 | import javax.annotation.ParametersAreNonnullByDefault; 17 | import java.util.concurrent.CompletableFuture; 18 | 19 | @ParametersAreNonnullByDefault 20 | public class PowerToolItemTagsProvider extends ItemTagsProvider { 21 | 22 | public static final TagKey TONK = ItemTags.create(VanillaUtils.modRL("tonk")); 23 | 24 | public PowerToolItemTagsProvider(PackOutput output, CompletableFuture lookupProvider, CompletableFuture> blockTags, @Nullable ExistingFileHelper existingFileHelper) { 25 | super(output, lookupProvider, blockTags, PowerTool.MODID, existingFileHelper); 26 | } 27 | 28 | @Override 29 | protected void addTags(HolderLookup.Provider provider) { 30 | this.tag(TONK).add( 31 | PowerToolItems.TONK.get(), 32 | PowerToolItems.THICK_TONK.get(), 33 | PowerToolItems.EXTRA_THICK_TONK.get() 34 | ); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/main/java/org/teacon/powertool/datagen/SpriteProvider.java: -------------------------------------------------------------------------------- 1 | package org.teacon.powertool.datagen; 2 | 3 | import net.minecraft.core.HolderLookup; 4 | import net.minecraft.data.PackOutput; 5 | import net.neoforged.neoforge.common.data.ExistingFileHelper; 6 | import net.neoforged.neoforge.common.data.SpriteSourceProvider; 7 | import org.teacon.powertool.PowerTool; 8 | 9 | import java.util.concurrent.CompletableFuture; 10 | 11 | public class SpriteProvider extends SpriteSourceProvider { 12 | 13 | public SpriteProvider(PackOutput output, CompletableFuture lookupProvider, ExistingFileHelper existingFileHelper) { 14 | super(output, lookupProvider, PowerTool.MODID, existingFileHelper); 15 | } 16 | 17 | @Override 18 | protected void gather() { 19 | var source = atlas(BLOCKS_ATLAS); 20 | //source.addSource(new DirectoryLister("gui/sprite","gui/sprite/")); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/org/teacon/powertool/entity/AutoVanishMinecart.java: -------------------------------------------------------------------------------- 1 | package org.teacon.powertool.entity; 2 | 3 | import net.minecraft.MethodsReturnNonnullByDefault; 4 | import net.minecraft.world.entity.EntityType; 5 | import net.minecraft.world.entity.vehicle.Minecart; 6 | import net.minecraft.world.item.Item; 7 | import net.minecraft.world.level.Level; 8 | import org.teacon.powertool.item.PowerToolItems; 9 | 10 | @MethodsReturnNonnullByDefault 11 | public class AutoVanishMinecart extends Minecart { 12 | 13 | protected int idleTickCount = 0; 14 | 15 | public AutoVanishMinecart(EntityType entityType, Level level) { 16 | super(entityType, level); 17 | } 18 | 19 | public AutoVanishMinecart(Level level, double x, double y, double z) { 20 | super(PowerToolEntities.AUTO_VANISH_MINECART.get(),level); 21 | this.setPos(x, y, z); 22 | this.xo = x; 23 | this.yo = y; 24 | this.zo = z; 25 | } 26 | 27 | public static AutoVanishMinecart fromMinecart(Minecart minecart) { 28 | var result = new AutoVanishMinecart(minecart.level(),minecart.xo,minecart.yo,minecart.zo); 29 | result.setYRot(minecart.getYRot()); 30 | return result; 31 | } 32 | 33 | @Override 34 | public void tick() { 35 | if(!this.level().isClientSide()){ 36 | if(this.getPassengers().isEmpty()){ 37 | idleTickCount++; 38 | } 39 | else { 40 | idleTickCount = 0; 41 | } 42 | if(idleTickCount > 401){ 43 | this.discard(); 44 | } 45 | } 46 | super.tick(); 47 | } 48 | 49 | @Override 50 | protected Item getDropItem() { 51 | return PowerToolItems.AV_MINE_CART.get(); 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /src/main/java/org/teacon/powertool/item/AutoVanishBoatItem.java: -------------------------------------------------------------------------------- 1 | package org.teacon.powertool.item; 2 | 3 | import net.minecraft.MethodsReturnNonnullByDefault; 4 | import net.minecraft.server.level.ServerLevel; 5 | import net.minecraft.world.entity.EntityType; 6 | import net.minecraft.world.entity.player.Player; 7 | import net.minecraft.world.entity.vehicle.Boat; 8 | import net.minecraft.world.item.BoatItem; 9 | import net.minecraft.world.item.ItemStack; 10 | import net.minecraft.world.level.Level; 11 | import net.minecraft.world.phys.HitResult; 12 | import net.minecraft.world.phys.Vec3; 13 | import org.teacon.powertool.entity.AutoVanishBoat; 14 | 15 | import javax.annotation.ParametersAreNonnullByDefault; 16 | 17 | @ParametersAreNonnullByDefault 18 | @MethodsReturnNonnullByDefault 19 | public class AutoVanishBoatItem extends BoatItem { 20 | 21 | public AutoVanishBoatItem(Boat.Type type, Properties properties) { 22 | super(false, type, properties); 23 | } 24 | 25 | public AutoVanishBoatItem(Boat.Type type) { 26 | this(type, new Properties()); 27 | } 28 | 29 | @Override 30 | protected Boat getBoat(Level level, HitResult hitResult, ItemStack stack, Player player) { 31 | Vec3 vec3 = hitResult.getLocation(); 32 | var boat = new AutoVanishBoat(level, vec3.x, vec3.y, vec3.z); 33 | if (level instanceof ServerLevel serverlevel) { 34 | EntityType.createDefaultStackConfig(serverlevel, stack, player).accept(boat); 35 | } 36 | return boat; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /src/main/java/org/teacon/powertool/item/ClapItem.java: -------------------------------------------------------------------------------- 1 | package org.teacon.powertool.item; 2 | 3 | import net.minecraft.MethodsReturnNonnullByDefault; 4 | import net.minecraft.sounds.SoundSource; 5 | import net.minecraft.world.InteractionHand; 6 | import net.minecraft.world.InteractionResultHolder; 7 | import net.minecraft.world.entity.player.Player; 8 | import net.minecraft.world.item.Item; 9 | import net.minecraft.world.item.ItemStack; 10 | import net.minecraft.world.level.Level; 11 | import org.teacon.powertool.PowerToolSoundEvents; 12 | 13 | import javax.annotation.ParametersAreNonnullByDefault; 14 | 15 | @ParametersAreNonnullByDefault 16 | @MethodsReturnNonnullByDefault 17 | public class ClapItem extends Item { 18 | public ClapItem(Properties prop) { 19 | super(prop); 20 | } 21 | 22 | @Override 23 | public InteractionResultHolder use(Level level, Player p, InteractionHand hand) { 24 | if (!level.isClientSide()) { 25 | var pitch = level.random.nextInt(4, 14) * 0.1F; 26 | level.playSound(null, p.blockPosition(), PowerToolSoundEvents.CLAP.get(), SoundSource.PLAYERS, 40F, pitch); 27 | p.getCooldowns().addCooldown(this, 5); 28 | } 29 | return InteractionResultHolder.sidedSuccess(p.getItemInHand(hand), level.isClientSide()); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/main/java/org/teacon/powertool/item/IRedStoneStuff.java: -------------------------------------------------------------------------------- 1 | package org.teacon.powertool.item; 2 | 3 | public interface IRedStoneStuff { 4 | } 5 | -------------------------------------------------------------------------------- /src/main/java/org/teacon/powertool/item/IScreenProviderItem.java: -------------------------------------------------------------------------------- 1 | package org.teacon.powertool.item; 2 | 3 | import net.minecraft.client.gui.screens.Screen; 4 | import net.minecraft.world.entity.EquipmentSlot; 5 | import net.minecraft.world.item.ItemStack; 6 | import net.neoforged.api.distmarker.Dist; 7 | import net.neoforged.api.distmarker.OnlyIn; 8 | 9 | import java.util.function.Supplier; 10 | 11 | public interface IScreenProviderItem { 12 | 13 | @OnlyIn(Dist.CLIENT) 14 | Supplier getScreenSupplier(ItemStack stack, EquipmentSlot slot); 15 | } 16 | -------------------------------------------------------------------------------- /src/main/java/org/teacon/powertool/item/TextureExtractor.java: -------------------------------------------------------------------------------- 1 | package org.teacon.powertool.item; 2 | 3 | import net.minecraft.MethodsReturnNonnullByDefault; 4 | import net.minecraft.world.InteractionHand; 5 | import net.minecraft.world.InteractionResultHolder; 6 | import net.minecraft.world.entity.player.Player; 7 | import net.minecraft.world.item.Item; 8 | import net.minecraft.world.item.ItemStack; 9 | import net.minecraft.world.level.Level; 10 | import org.teacon.powertool.menu.TextureExtractorMenu; 11 | 12 | import javax.annotation.ParametersAreNonnullByDefault; 13 | 14 | @MethodsReturnNonnullByDefault 15 | @ParametersAreNonnullByDefault 16 | public class TextureExtractor extends Item { 17 | 18 | public TextureExtractor(Properties properties) { 19 | super(properties); 20 | } 21 | 22 | @Override 23 | public InteractionResultHolder use(Level level, Player player, InteractionHand usedHand) { 24 | var itemstack = player.getItemInHand(usedHand); 25 | if(level.isClientSide) return InteractionResultHolder.success(itemstack); 26 | player.openMenu(new TextureExtractorMenu.Provider()); 27 | return InteractionResultHolder.pass(itemstack); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/org/teacon/powertool/item/TransparentBrushItem.java: -------------------------------------------------------------------------------- 1 | package org.teacon.powertool.item; 2 | 3 | import net.minecraft.ChatFormatting; 4 | import net.minecraft.MethodsReturnNonnullByDefault; 5 | import net.minecraft.network.chat.Component; 6 | import net.minecraft.world.InteractionResult; 7 | import net.minecraft.world.item.Item; 8 | import net.minecraft.world.item.ItemStack; 9 | import net.minecraft.world.item.TooltipFlag; 10 | import net.minecraft.world.item.context.UseOnContext; 11 | import org.teacon.powertool.block.ItemDisplayBlock; 12 | 13 | import javax.annotation.ParametersAreNonnullByDefault; 14 | import java.util.List; 15 | 16 | @ParametersAreNonnullByDefault 17 | @MethodsReturnNonnullByDefault 18 | public class TransparentBrushItem extends Item { 19 | 20 | public TransparentBrushItem() { 21 | super(new Properties().stacksTo(1)); 22 | } 23 | 24 | @Override 25 | public InteractionResult useOn(UseOnContext context) { 26 | var level = context.getLevel(); 27 | var pos = context.getClickedPos(); 28 | var bs = level.getBlockState(pos); 29 | if(!level.isClientSide && bs.getBlock() instanceof ItemDisplayBlock){ 30 | bs = bs.setValue(ItemDisplayBlock.INVISIBLE,!bs.getValue(ItemDisplayBlock.INVISIBLE)); 31 | level.setBlock(pos,bs, 18); 32 | } 33 | return super.useOn(context); 34 | } 35 | 36 | @Override 37 | public void appendHoverText(ItemStack stack, TooltipContext context, List tooltipComponents, TooltipFlag tooltipFlag) { 38 | super.appendHoverText(stack, context, tooltipComponents, tooltipFlag); 39 | tooltipComponents.add(Component.translatable("tooltip.powertool.transparent_brush").withStyle(ChatFormatting.GRAY)); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /src/main/java/org/teacon/powertool/menu/PowerSupplyMenu.java: -------------------------------------------------------------------------------- 1 | package org.teacon.powertool.menu; 2 | 3 | import net.minecraft.MethodsReturnNonnullByDefault; 4 | import net.minecraft.network.chat.Component; 5 | import net.minecraft.world.MenuProvider; 6 | import net.minecraft.world.entity.player.Inventory; 7 | import net.minecraft.world.entity.player.Player; 8 | import net.minecraft.world.inventory.AbstractContainerMenu; 9 | import net.minecraft.world.item.ItemStack; 10 | import org.teacon.powertool.block.PowerSupplyBlock; 11 | 12 | import javax.annotation.ParametersAreNonnullByDefault; 13 | 14 | @MethodsReturnNonnullByDefault 15 | @ParametersAreNonnullByDefault 16 | public class PowerSupplyMenu extends AbstractContainerMenu { 17 | 18 | public PowerSupplyBlock.Data dataHolder; 19 | 20 | public PowerSupplyMenu(int containerId, Inventory playerInv, PowerSupplyBlock.Data dataHolder) { 21 | super(PowerToolMenus.POWER_SUPPLY_MENU.get(), containerId); 22 | this.dataHolder = dataHolder; 23 | } 24 | 25 | @Override 26 | public ItemStack quickMoveStack(Player p, int slot) { // TODO How? 27 | return ItemStack.EMPTY; 28 | } 29 | 30 | @Override 31 | public boolean stillValid(Player player) { 32 | return true; 33 | } 34 | 35 | public record Provider(PowerSupplyBlock.Data data) implements MenuProvider { 36 | 37 | @Override 38 | public Component getDisplayName() { 39 | return Component.empty(); 40 | } 41 | 42 | @Override 43 | public AbstractContainerMenu createMenu(int containerId, Inventory inv, Player player) { 44 | return new PowerSupplyMenu(containerId, inv, this.data); 45 | } 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /src/main/java/org/teacon/powertool/mixin/CommandBlockMixin.java: -------------------------------------------------------------------------------- 1 | package org.teacon.powertool.mixin; 2 | 3 | import net.minecraft.core.BlockPos; 4 | import net.minecraft.server.level.ServerLevel; 5 | import net.minecraft.world.level.block.Block; 6 | import net.minecraft.world.level.block.CommandBlock; 7 | import org.spongepowered.asm.mixin.Mixin; 8 | import org.spongepowered.asm.mixin.injection.At; 9 | import org.spongepowered.asm.mixin.injection.Redirect; 10 | import org.teacon.powertool.bridge.PeriodCommandBlockBridge; 11 | 12 | @Mixin(CommandBlock.class) 13 | public class CommandBlockMixin implements PeriodCommandBlockBridge { 14 | 15 | @Redirect(method = "tick", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/level/ServerLevel;scheduleTick(Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/block/Block;I)V")) 16 | private void usePowerToolPeriod(ServerLevel level, BlockPos pos, Block block, int i) { 17 | level.scheduleTick(pos, block, powerTool$Period(level, pos)); 18 | } 19 | 20 | @Override 21 | public int powerTool$Period(ServerLevel level, BlockPos pos) { 22 | return 1; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/org/teacon/powertool/mixin/CommandSourceStackMixin.java: -------------------------------------------------------------------------------- 1 | package org.teacon.powertool.mixin; 2 | 3 | import com.llamalad7.mixinextras.injector.v2.WrapWithCondition; 4 | import net.minecraft.commands.CommandSourceStack; 5 | import net.minecraft.network.chat.Component; 6 | import net.minecraft.server.level.ServerPlayer; 7 | import net.neoforged.neoforge.server.permission.PermissionAPI; 8 | import org.spongepowered.asm.mixin.Mixin; 9 | import org.spongepowered.asm.mixin.injection.At; 10 | import org.teacon.powertool.network.attachment.Permission; 11 | 12 | @Mixin(CommandSourceStack.class) 13 | public class CommandSourceStackMixin { 14 | 15 | @WrapWithCondition(method = "broadcastToAdmins", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/level/ServerPlayer;sendSystemMessage(Lnet/minecraft/network/chat/Component;)V")) 16 | private boolean checkForPermission(ServerPlayer player, Component message) { 17 | return PermissionAPI.getPermission(player, Permission.Provider.SEE_COMMAND_FEEDBACK_FROM_OTHERS); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/org/teacon/powertool/mixin/CommandsMixin.java: -------------------------------------------------------------------------------- 1 | package org.teacon.powertool.mixin; 2 | 3 | import net.minecraft.commands.Commands; 4 | import net.minecraft.server.level.ServerPlayer; 5 | import org.spongepowered.asm.mixin.Mixin; 6 | import org.spongepowered.asm.mixin.injection.At; 7 | import org.spongepowered.asm.mixin.injection.Inject; 8 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; 9 | import org.teacon.powertool.network.attachment.Permission; 10 | 11 | @Mixin(Commands.class) 12 | public class CommandsMixin { 13 | 14 | @Inject(method = "sendCommands", at = @At("RETURN")) 15 | private void sendPermission(ServerPlayer player, CallbackInfo ci) { 16 | Permission.updatePermission(player); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/main/java/org/teacon/powertool/mixin/MixinArmorStand.java: -------------------------------------------------------------------------------- 1 | package org.teacon.powertool.mixin; 2 | 3 | import net.minecraft.world.InteractionHand; 4 | import net.minecraft.world.InteractionResult; 5 | import net.minecraft.world.entity.EntityType; 6 | import net.minecraft.world.entity.LivingEntity; 7 | import net.minecraft.world.entity.decoration.ArmorStand; 8 | import net.minecraft.world.entity.player.Player; 9 | import net.minecraft.world.level.Level; 10 | import net.minecraft.world.phys.Vec3; 11 | import org.spongepowered.asm.mixin.Mixin; 12 | import org.spongepowered.asm.mixin.injection.At; 13 | import org.spongepowered.asm.mixin.injection.Inject; 14 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; 15 | import org.teacon.powertool.item.TransparentBrushItem; 16 | 17 | @Mixin(ArmorStand.class) 18 | public abstract class MixinArmorStand extends LivingEntity { 19 | 20 | protected MixinArmorStand(EntityType entityType, Level level) { 21 | super(entityType, level); 22 | } 23 | 24 | @Inject(method = "interactAt",at = @At("HEAD"),cancellable = true) 25 | public void onItemUse(Player player, Vec3 vec, InteractionHand hand, CallbackInfoReturnable cir){ 26 | var item = player.getItemInHand(hand); 27 | if(!(item.getItem() instanceof TransparentBrushItem)) return; 28 | if(player.isCrouching()){ 29 | this.setInvisible(!this.isInvisible()); 30 | cir.setReturnValue(InteractionResult.SUCCESS); 31 | cir.cancel(); 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/org/teacon/powertool/mixin/MixinEntity.java: -------------------------------------------------------------------------------- 1 | package org.teacon.powertool.mixin; 2 | 3 | import net.minecraft.server.level.ServerLevel; 4 | import net.minecraft.world.entity.Entity; 5 | import net.minecraft.world.entity.RelativeMovement; 6 | import net.minecraft.world.level.Level; 7 | import org.spongepowered.asm.mixin.Mixin; 8 | import org.spongepowered.asm.mixin.Shadow; 9 | import org.spongepowered.asm.mixin.injection.At; 10 | import org.spongepowered.asm.mixin.injection.Inject; 11 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; 12 | import org.teacon.powertool.PowerToolConfig; 13 | 14 | import java.util.Set; 15 | 16 | @Mixin(Entity.class) 17 | public abstract class MixinEntity { 18 | 19 | @Shadow public abstract Level level(); 20 | 21 | @Inject(method = "teleportTo(Lnet/minecraft/server/level/ServerLevel;DDDLjava/util/Set;FF)Z", at = @At("HEAD"),cancellable = true) 22 | public void onTP(ServerLevel level, double x, double y, double z, Set relativeMovements, float yRot, float xRot, CallbackInfoReturnable cir){ 23 | if(level != this.level() && level.dimension() == ServerLevel.END && PowerToolConfig.disableTeleportToEnd.get()){ 24 | cir.setReturnValue(true); 25 | cir.cancel(); 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/org/teacon/powertool/mixin/MixinItemFrame.java: -------------------------------------------------------------------------------- 1 | package org.teacon.powertool.mixin; 2 | 3 | import net.minecraft.world.InteractionHand; 4 | import net.minecraft.world.InteractionResult; 5 | import net.minecraft.world.entity.Entity; 6 | import net.minecraft.world.entity.EntityType; 7 | import net.minecraft.world.entity.decoration.ItemFrame; 8 | import net.minecraft.world.entity.player.Player; 9 | import net.minecraft.world.level.Level; 10 | import org.spongepowered.asm.mixin.Mixin; 11 | import org.spongepowered.asm.mixin.injection.At; 12 | import org.spongepowered.asm.mixin.injection.Inject; 13 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; 14 | import org.teacon.powertool.item.TransparentBrushItem; 15 | 16 | @Mixin(ItemFrame.class) 17 | public abstract class MixinItemFrame extends Entity { 18 | 19 | public MixinItemFrame(EntityType entityType, Level level) { 20 | super(entityType, level); 21 | } 22 | 23 | @Inject(method = "interact",at = @At("HEAD"),cancellable = true) 24 | public void onItemUse(Player player, InteractionHand hand, CallbackInfoReturnable cir){ 25 | var item = player.getItemInHand(hand); 26 | if(!(item.getItem() instanceof TransparentBrushItem)) return; 27 | if(player.isCrouching()){ 28 | this.setInvisible(!this.isInvisible()); 29 | cir.setReturnValue(InteractionResult.SUCCESS); 30 | cir.cancel(); 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/main/java/org/teacon/powertool/mixin/MixinThrownEgg.java: -------------------------------------------------------------------------------- 1 | package org.teacon.powertool.mixin; 2 | 3 | import net.minecraft.util.RandomSource; 4 | import net.minecraft.world.entity.projectile.ThrownEgg; 5 | import org.spongepowered.asm.mixin.Mixin; 6 | import org.spongepowered.asm.mixin.injection.At; 7 | import org.spongepowered.asm.mixin.injection.Redirect; 8 | import org.teacon.powertool.PowerToolConfig; 9 | 10 | @Mixin(ThrownEgg.class) 11 | public class MixinThrownEgg { 12 | 13 | @Redirect(method = "onHit", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/RandomSource;nextInt(I)I")) 14 | public int onHit(RandomSource instance, int i){ 15 | if(PowerToolConfig.noLittleChicken.get()) return 4; 16 | return instance.nextInt(i); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/main/java/org/teacon/powertool/mixin/ServerGamePacketListenerImplMixin.java: -------------------------------------------------------------------------------- 1 | package org.teacon.powertool.mixin; 2 | 3 | import net.minecraft.network.protocol.game.ServerboundSetCommandBlockPacket; 4 | import net.minecraft.server.level.ServerPlayer; 5 | import net.minecraft.server.network.ServerGamePacketListenerImpl; 6 | import net.minecraft.world.level.block.Block; 7 | import net.minecraft.world.level.block.Blocks; 8 | import org.spongepowered.asm.mixin.Mixin; 9 | import org.spongepowered.asm.mixin.Shadow; 10 | import org.spongepowered.asm.mixin.injection.At; 11 | import org.spongepowered.asm.mixin.injection.Redirect; 12 | import org.teacon.powertool.block.PowerToolBlocks; 13 | import org.teacon.powertool.block.entity.PeriodicCommandBlockEntity; 14 | 15 | @Mixin(ServerGamePacketListenerImpl.class) 16 | public class ServerGamePacketListenerImplMixin { 17 | 18 | @Shadow public ServerPlayer player; 19 | 20 | @Redirect(method = "handleSetCommandBlock", at = @At(value = "FIELD", target = "Lnet/minecraft/world/level/block/Blocks;REPEATING_COMMAND_BLOCK:Lnet/minecraft/world/level/block/Block;")) 21 | private Block usePowerToolBlock(ServerboundSetCommandBlockPacket packet) { 22 | var blockEntity = this.player.level().getBlockEntity(packet.getPos()); 23 | if (blockEntity instanceof PeriodicCommandBlockEntity) { 24 | return PowerToolBlocks.COMMAND_BLOCK.get(); 25 | } else { 26 | return Blocks.REPEATING_COMMAND_BLOCK; 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/org/teacon/powertool/mixin/client/ClientRecipeBookMixin.java: -------------------------------------------------------------------------------- 1 | package org.teacon.powertool.mixin.client; 2 | 3 | import com.google.common.collect.Streams; 4 | import net.minecraft.client.ClientRecipeBook; 5 | import net.minecraft.core.RegistryAccess; 6 | import net.minecraft.world.item.crafting.RecipeHolder; 7 | import org.spongepowered.asm.mixin.Mixin; 8 | import org.spongepowered.asm.mixin.Overwrite; 9 | import org.spongepowered.asm.mixin.injection.At; 10 | import org.spongepowered.asm.mixin.injection.ModifyVariable; 11 | import org.teacon.powertool.PowerToolConfig; 12 | 13 | import java.util.ArrayList; 14 | import java.util.stream.Stream; 15 | 16 | //Experimental feature: incapacitate vanilla recipe book to save up server-joining time 17 | @Mixin(ClientRecipeBook.class) 18 | public class ClientRecipeBookMixin { 19 | 20 | @ModifyVariable(method = "setupCollections",at = @At("HEAD"), argsOnly = true) 21 | public Iterable> filterRecipes(Iterable> recipes) { 22 | return Streams.stream(recipes).filter(rep -> PowerToolConfig.recipeBookWhiteList.contains(rep.id().getNamespace())).toList(); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/org/teacon/powertool/mixin/client/GameModeSwitcherScreenMixin.java: -------------------------------------------------------------------------------- 1 | package org.teacon.powertool.mixin.client; 2 | 3 | import net.minecraft.client.gui.screens.debug.GameModeSwitcherScreen; 4 | import net.minecraft.client.player.LocalPlayer; 5 | import org.spongepowered.asm.mixin.Mixin; 6 | import org.spongepowered.asm.mixin.injection.At; 7 | import org.spongepowered.asm.mixin.injection.Redirect; 8 | import org.teacon.powertool.attachment.PowerToolAttachments; 9 | import org.teacon.powertool.network.attachment.Permission; 10 | 11 | import java.util.Optional; 12 | 13 | @Mixin(GameModeSwitcherScreen.class) 14 | public class GameModeSwitcherScreenMixin { 15 | 16 | @Redirect(method = "switchToHoveredGameMode(Lnet/minecraft/client/Minecraft;Lnet/minecraft/client/gui/screens/debug/GameModeSwitcherScreen$GameModeIcon;)V", 17 | at = @At(value = "INVOKE", target = "Lnet/minecraft/client/player/LocalPlayer;hasPermissions(I)Z")) 18 | private static boolean usePermission(LocalPlayer player, int i) { 19 | return Optional.of(player.getData(PowerToolAttachments.PERMISSION)) 20 | .flatMap(Permission::isCanSwitchGameMode) 21 | .orElse(player.hasPermissions(i)); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/org/teacon/powertool/mixin/client/KeyboardHandlerMixin.java: -------------------------------------------------------------------------------- 1 | package org.teacon.powertool.mixin.client; 2 | 3 | import net.minecraft.client.KeyboardHandler; 4 | import net.minecraft.client.player.LocalPlayer; 5 | import org.spongepowered.asm.mixin.Mixin; 6 | import org.spongepowered.asm.mixin.injection.At; 7 | import org.spongepowered.asm.mixin.injection.Redirect; 8 | import org.spongepowered.asm.mixin.injection.Slice; 9 | import org.teacon.powertool.attachment.PowerToolAttachments; 10 | import org.teacon.powertool.network.attachment.Permission; 11 | 12 | import java.util.Optional; 13 | 14 | @Mixin(KeyboardHandler.class) 15 | public class KeyboardHandlerMixin { 16 | 17 | @Redirect(method = "handleDebugKeys", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/player/LocalPlayer;hasPermissions(I)Z"), 18 | slice = @Slice(from = @At(value = "INVOKE", target = "Lnet/minecraft/client/KeyboardHandler;copyRecreateCommand(ZZ)V"))) 19 | private boolean usePermission(LocalPlayer player, int i) { 20 | return Optional.of(player.getData(PowerToolAttachments.PERMISSION)) 21 | .flatMap(Permission::isCanSwitchGameMode) 22 | .orElse(player.hasPermissions(i)); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/org/teacon/powertool/mixin/client/MinecraftMixin.java: -------------------------------------------------------------------------------- 1 | package org.teacon.powertool.mixin.client; 2 | 3 | import net.minecraft.client.Minecraft; 4 | import net.minecraft.client.multiplayer.ClientLevel; 5 | import org.spongepowered.asm.mixin.Mixin; 6 | import org.spongepowered.asm.mixin.injection.At; 7 | import org.spongepowered.asm.mixin.injection.Inject; 8 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; 9 | import org.teacon.powertool.client.anvilcraft.rendering.CacheableBERenderingPipeline; 10 | 11 | @Mixin(Minecraft.class) 12 | public class MinecraftMixin { 13 | @Inject( 14 | method = "updateLevelInEngines", 15 | at = @At("HEAD") 16 | ) 17 | void updateLevel(ClientLevel level, CallbackInfo ci){ 18 | CacheableBERenderingPipeline.updateLevel(level); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/org/teacon/powertool/mixin/client/PlayerMixin.java: -------------------------------------------------------------------------------- 1 | package org.teacon.powertool.mixin.client; 2 | 3 | import net.minecraft.client.player.AbstractClientPlayer; 4 | import net.minecraft.world.entity.player.Abilities; 5 | import net.minecraft.world.entity.player.Player; 6 | import org.spongepowered.asm.mixin.Final; 7 | import org.spongepowered.asm.mixin.Mixin; 8 | import org.spongepowered.asm.mixin.Shadow; 9 | import org.spongepowered.asm.mixin.injection.At; 10 | import org.spongepowered.asm.mixin.injection.Inject; 11 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; 12 | import org.teacon.powertool.attachment.PowerToolAttachments; 13 | import org.teacon.powertool.network.attachment.Permission; 14 | 15 | import java.util.Optional; 16 | 17 | @Mixin(Player.class) 18 | public class PlayerMixin { 19 | 20 | @Shadow @Final private Abilities abilities; 21 | 22 | @Inject(method = "canUseGameMasterBlocks", cancellable = true, at = @At("RETURN")) 23 | private void usePermission(CallbackInfoReturnable cir) { 24 | // noinspection ConstantConditions 25 | if ((Object) this instanceof AbstractClientPlayer player) { 26 | cir.setReturnValue(this.abilities.instabuild && 27 | Optional.of(player.getData(PowerToolAttachments.PERMISSION)) 28 | .flatMap(Permission::isCanUseGameMasterBlock) 29 | .orElse(player.hasPermissions(2))); 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/org/teacon/powertool/mixin/client/SectionRenderDispatcherMixin.java: -------------------------------------------------------------------------------- 1 | package org.teacon.powertool.mixin.client; 2 | 3 | import net.minecraft.client.renderer.chunk.SectionRenderDispatcher; 4 | import org.slf4j.Logger; 5 | import org.slf4j.LoggerFactory; 6 | import org.slf4j.Marker; 7 | import org.slf4j.MarkerFactory; 8 | import org.spongepowered.asm.mixin.Mixin; 9 | import org.spongepowered.asm.mixin.Unique; 10 | import org.spongepowered.asm.mixin.injection.At; 11 | import org.spongepowered.asm.mixin.injection.ModifyArg; 12 | 13 | @Mixin(SectionRenderDispatcher.class) 14 | public class SectionRenderDispatcherMixin { 15 | 16 | @Unique 17 | private static final Logger powerTool$LOGGER = LoggerFactory.getLogger("NamelessBugHunter"); 18 | @Unique 19 | private static final Marker powerTool$MARKER = MarkerFactory.getMarker("SectionRenderDispatcher"); 20 | 21 | /** 22 | * Tracing the exception thrown when batching all sections. 23 | * It is not a @Inject mixin because of a non-public class. 24 | * @param t The exception 25 | * @return The exception verbatim; we are only tracing it, not modifying it 26 | */ 27 | @ModifyArg(method = "lambda$runTask$3", at = @At(value = "INVOKE", target = "Lnet/minecraft/CrashReport;forThrowable(Ljava/lang/Throwable;Ljava/lang/String;)Lnet/minecraft/CrashReport;")) 28 | private Throwable tracingStackTrace(Throwable t) { 29 | powerTool$LOGGER.error(powerTool$MARKER, "SectionRenderDispatcher encounters error!", t); 30 | return t; 31 | } 32 | 33 | 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/org/teacon/powertool/motd/MotDHandler.java: -------------------------------------------------------------------------------- 1 | package org.teacon.powertool.motd; 2 | 3 | import net.minecraft.network.chat.Component; 4 | import net.neoforged.bus.api.SubscribeEvent; 5 | import net.neoforged.fml.common.EventBusSubscriber; 6 | import net.neoforged.neoforge.event.entity.player.PlayerEvent; 7 | import org.teacon.powertool.PowerTool; 8 | 9 | @EventBusSubscriber(modid = PowerTool.MODID) 10 | public class MotDHandler { 11 | 12 | public static Component motd = null; 13 | 14 | @SubscribeEvent 15 | public static void onPlayerJoin(PlayerEvent.PlayerLoggedInEvent event) { 16 | if (motd != null) { 17 | event.getEntity().displayClientMessage(motd, false); 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/org/teacon/powertool/network/client/RecordDebugData.java: -------------------------------------------------------------------------------- 1 | package org.teacon.powertool.network.client; 2 | 3 | import io.netty.buffer.ByteBuf; 4 | import net.minecraft.MethodsReturnNonnullByDefault; 5 | import net.minecraft.network.codec.ByteBufCodecs; 6 | import net.minecraft.network.codec.StreamCodec; 7 | import net.minecraft.network.protocol.common.custom.CustomPacketPayload; 8 | import net.neoforged.neoforge.network.handling.IPayloadContext; 9 | import org.teacon.powertool.client.overlay.ClientDebugCharts; 10 | import org.teacon.powertool.utils.VanillaUtils; 11 | 12 | @MethodsReturnNonnullByDefault 13 | public record RecordDebugData(String id, long data) implements CustomPacketPayload { 14 | 15 | public static final CustomPacketPayload.Type TYPE = new Type<>(VanillaUtils.modRL("record_debug_data")); 16 | 17 | public static final StreamCodec STREAM_CODEC = StreamCodec.composite( 18 | ByteBufCodecs.STRING_UTF8, 19 | RecordDebugData::id, 20 | ByteBufCodecs.VAR_LONG, 21 | RecordDebugData::data, 22 | RecordDebugData::new 23 | ); 24 | 25 | @Override 26 | public Type type() { 27 | return TYPE; 28 | } 29 | 30 | public void handle(IPayloadContext context){ 31 | context.enqueueWork(() -> Handler.run(this)); 32 | } 33 | 34 | public static class Handler{ 35 | public static void run(RecordDebugData pack) { 36 | ClientDebugCharts.recordDebugData(pack.id(),pack.data()); 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/main/java/org/teacon/powertool/network/client/UpdateOpenMenuSourcePacket.java: -------------------------------------------------------------------------------- 1 | package org.teacon.powertool.network.client; 2 | 3 | import net.minecraft.MethodsReturnNonnullByDefault; 4 | import net.minecraft.core.BlockPos; 5 | import net.minecraft.network.RegistryFriendlyByteBuf; 6 | import net.minecraft.network.codec.StreamCodec; 7 | import net.minecraft.network.protocol.common.custom.CustomPacketPayload; 8 | import net.neoforged.neoforge.network.handling.IPayloadContext; 9 | import org.teacon.powertool.client.AccessControlClient; 10 | import org.teacon.powertool.utils.VanillaUtils; 11 | 12 | @MethodsReturnNonnullByDefault 13 | public record UpdateOpenMenuSourcePacket( 14 | BlockPos pos 15 | ) implements CustomPacketPayload { 16 | 17 | public static final CustomPacketPayload.Type TYPE = new Type<>(VanillaUtils.modRL("open_menu_source")); 18 | 19 | public static final StreamCodec STREAM_CODEC = StreamCodec.composite( 20 | BlockPos.STREAM_CODEC, 21 | UpdateOpenMenuSourcePacket::pos, 22 | UpdateOpenMenuSourcePacket::new 23 | ); 24 | 25 | @Override 26 | public Type type() { 27 | return TYPE; 28 | } 29 | 30 | public void handle(IPayloadContext context){ 31 | AccessControlClient.INSTANCE.updateInteractionSource(pos); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/main/java/org/teacon/powertool/network/server/SetCommandBlockPacket.java: -------------------------------------------------------------------------------- 1 | package org.teacon.powertool.network.server; 2 | 3 | import io.netty.buffer.ByteBuf; 4 | import net.minecraft.MethodsReturnNonnullByDefault; 5 | import net.minecraft.core.BlockPos; 6 | import net.minecraft.network.codec.ByteBufCodecs; 7 | import net.minecraft.network.codec.StreamCodec; 8 | import net.minecraft.network.protocol.common.custom.CustomPacketPayload; 9 | import net.neoforged.neoforge.network.handling.IPayloadContext; 10 | import org.teacon.powertool.block.entity.PeriodicCommandBlockEntity; 11 | import org.teacon.powertool.utils.VanillaUtils; 12 | 13 | @MethodsReturnNonnullByDefault 14 | public record SetCommandBlockPacket(BlockPos pos, int period) implements CustomPacketPayload { 15 | 16 | public static final CustomPacketPayload.Type TYPE = new Type<>(VanillaUtils.modRL("set_command_block_packet")); 17 | 18 | public static final StreamCodec STREAM_CODEC = StreamCodec.composite( 19 | BlockPos.STREAM_CODEC,SetCommandBlockPacket::pos, 20 | ByteBufCodecs.INT,SetCommandBlockPacket::period, 21 | SetCommandBlockPacket::new 22 | ); 23 | 24 | public void handle(IPayloadContext context) { 25 | context.enqueueWork(() -> { 26 | var level = context.player().level(); 27 | if (level.isLoaded(pos) && level.getBlockEntity(pos) instanceof PeriodicCommandBlockEntity blockEntity) { 28 | blockEntity.setPeriod(period); 29 | } 30 | }); 31 | 32 | } 33 | 34 | @Override 35 | public Type type() { 36 | return TYPE; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /src/main/java/org/teacon/powertool/utils/DelayServerExecutor.java: -------------------------------------------------------------------------------- 1 | package org.teacon.powertool.utils; 2 | 3 | import net.minecraft.server.MinecraftServer; 4 | import net.neoforged.bus.api.SubscribeEvent; 5 | import net.neoforged.fml.common.EventBusSubscriber; 6 | import net.neoforged.neoforge.event.tick.ServerTickEvent; 7 | import org.teacon.powertool.PowerTool; 8 | 9 | import javax.annotation.Nonnull; 10 | import java.util.ArrayList; 11 | import java.util.List; 12 | import java.util.function.Consumer; 13 | 14 | //真的优雅吗? --xkball 15 | @EventBusSubscriber(modid = PowerTool.MODID) 16 | public class DelayServerExecutor { 17 | 18 | private DelayServerExecutor() {} 19 | @Nonnull 20 | private static List tasks = new ArrayList<>(); 21 | 22 | public static void addTask(int tickDelay, Consumer task) { 23 | tasks.add(new Task(tickDelay, task)); 24 | } 25 | 26 | @SubscribeEvent 27 | public static void afterServerTick(ServerTickEvent.Post event){ 28 | var server = event.getServer(); 29 | var tasksNew = new ArrayList(); 30 | for(var task : tasks) { 31 | if(task.tickDelay <= 0) task.task.accept(server); 32 | else tasksNew.add(new Task(task.tickDelay-1, task.task)); 33 | } 34 | tasks = tasksNew; 35 | } 36 | 37 | private record Task(int tickDelay, Consumer task){} 38 | } 39 | -------------------------------------------------------------------------------- /src/main/java/org/teacon/powertool/utils/MathUtils.java: -------------------------------------------------------------------------------- 1 | package org.teacon.powertool.utils; 2 | 3 | public class MathUtils { 4 | 5 | public static int min(int a, int b, int c) { 6 | return Math.min(a, Math.min(b, c)); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/main/java/org/teacon/powertool/utils/time/ITimeSection.java: -------------------------------------------------------------------------------- 1 | package org.teacon.powertool.utils.time; 2 | 3 | import net.minecraft.core.HolderLookup; 4 | import net.minecraft.nbt.CompoundTag; 5 | 6 | public interface ITimeSection { 7 | 8 | boolean inTimeSection(long timeWithMills); 9 | 10 | int nextCheckDelay(long timeWithMills); 11 | 12 | void save(CompoundTag tag, HolderLookup.Provider registries); 13 | 14 | ITimeSection load(CompoundTag tag, HolderLookup.Provider registries); 15 | 16 | default boolean currentInTimeSection(){ 17 | return inTimeSection(System.currentTimeMillis()); 18 | } 19 | 20 | default int nextCheckDelay(){ 21 | return nextCheckDelay(System.currentTimeMillis()); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/org/teacon/powertool/utils/time/TimestampTimeSection.java: -------------------------------------------------------------------------------- 1 | package org.teacon.powertool.utils.time; 2 | 3 | import net.minecraft.core.HolderLookup; 4 | import net.minecraft.nbt.CompoundTag; 5 | import net.minecraft.nbt.Tag; 6 | 7 | //include start and exclude end 8 | public record TimestampTimeSection(long start, long end) implements ITimeSection { 9 | 10 | @Override 11 | public boolean inTimeSection(long timeWithMills) { 12 | return timeWithMills >= start && timeWithMills < end; 13 | } 14 | 15 | @Override 16 | //并不能不去每tick检测 因为游戏可以暂停 2个tick间的时长是任意的 17 | public int nextCheckDelay(long timeWithMills) { 18 | return 0; 19 | } 20 | 21 | @Override 22 | public void save(CompoundTag tag, HolderLookup.Provider registries) { 23 | tag.putLong("start", start); 24 | tag.putLong("end", end); 25 | } 26 | 27 | @Override 28 | public ITimeSection load(CompoundTag tag, HolderLookup.Provider registries) { 29 | var _start = tag.contains("start", Tag.TAG_LONG) ? tag.getLong("start") : 0L; 30 | var _end = tag.contains("end", Tag.TAG_LONG) ? tag.getLong("end") : 0L; 31 | return new TimestampTimeSection(_start, _end); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/blockstates/command_block.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "conditional=false,facing=down": { 4 | "model": "powertool:block/command_block", 5 | "x": 90 6 | }, 7 | "conditional=false,facing=east": { 8 | "model": "powertool:block/command_block", 9 | "y": 90 10 | }, 11 | "conditional=false,facing=north": { 12 | "model": "powertool:block/command_block" 13 | }, 14 | "conditional=false,facing=south": { 15 | "model": "powertool:block/command_block", 16 | "y": 180 17 | }, 18 | "conditional=false,facing=up": { 19 | "model": "powertool:block/command_block", 20 | "x": 270 21 | }, 22 | "conditional=false,facing=west": { 23 | "model": "powertool:block/command_block", 24 | "y": 270 25 | }, 26 | "conditional=true,facing=down": { 27 | "model": "powertool:block/command_block_conditional", 28 | "x": 90 29 | }, 30 | "conditional=true,facing=east": { 31 | "model": "powertool:block/command_block_conditional", 32 | "y": 90 33 | }, 34 | "conditional=true,facing=north": { 35 | "model": "powertool:block/command_block_conditional" 36 | }, 37 | "conditional=true,facing=south": { 38 | "model": "powertool:block/command_block_conditional", 39 | "y": 180 40 | }, 41 | "conditional=true,facing=up": { 42 | "model": "powertool:block/command_block_conditional", 43 | "x": 270 44 | }, 45 | "conditional=true,facing=west": { 46 | "model": "powertool:block/command_block_conditional", 47 | "y": 270 48 | } 49 | } 50 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/blockstates/cosmetic_acacia_trapdoor.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "facing=up": { 4 | "model": "powertool:block/cosmetic_acacia_trapdoor_bottom", 5 | "y": 90 6 | }, 7 | "facing=down": { 8 | "model": "powertool:block/cosmetic_acacia_trapdoor_top", 9 | "y": 90 10 | }, 11 | "facing=north": { 12 | "model": "powertool:block/cosmetic_acacia_trapdoor_open", 13 | "x": 180, 14 | "y": 180 15 | }, 16 | "facing=south": { 17 | "model": "powertool:block/cosmetic_acacia_trapdoor_open", 18 | "x": 180 19 | }, 20 | "facing=east": { 21 | "model": "powertool:block/cosmetic_acacia_trapdoor_open", 22 | "x": 180, 23 | "y": 270 24 | }, 25 | "facing=west": { 26 | "model": "powertool:block/cosmetic_acacia_trapdoor_open", 27 | "x": 180, 28 | "y": 90 29 | } 30 | } 31 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/blockstates/cosmetic_bamboo_trapdoor.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "facing=up": { 4 | "model": "powertool:block/cosmetic_bamboo_trapdoor_bottom", 5 | "y": 90 6 | }, 7 | "facing=down": { 8 | "model": "powertool:block/cosmetic_bamboo_trapdoor_top", 9 | "y": 90 10 | }, 11 | "facing=north": { 12 | "model": "powertool:block/cosmetic_bamboo_trapdoor_open", 13 | "x": 180, 14 | "y": 180 15 | }, 16 | "facing=south": { 17 | "model": "powertool:block/cosmetic_bamboo_trapdoor_open", 18 | "x": 180 19 | }, 20 | "facing=east": { 21 | "model": "powertool:block/cosmetic_bamboo_trapdoor_open", 22 | "x": 180, 23 | "y": 270 24 | }, 25 | "facing=west": { 26 | "model": "powertool:block/cosmetic_bamboo_trapdoor_open", 27 | "x": 180, 28 | "y": 90 29 | } 30 | } 31 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/blockstates/cosmetic_birch_trapdoor.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "facing=up": { 4 | "model": "powertool:block/cosmetic_birch_trapdoor_bottom", 5 | "y": 90 6 | }, 7 | "facing=down": { 8 | "model": "powertool:block/cosmetic_birch_trapdoor_top", 9 | "y": 90 10 | }, 11 | "facing=north": { 12 | "model": "powertool:block/cosmetic_birch_trapdoor_open", 13 | "x": 180, 14 | "y": 180 15 | }, 16 | "facing=south": { 17 | "model": "powertool:block/cosmetic_birch_trapdoor_open", 18 | "x": 180 19 | }, 20 | "facing=east": { 21 | "model": "powertool:block/cosmetic_birch_trapdoor_open", 22 | "x": 180, 23 | "y": 270 24 | }, 25 | "facing=west": { 26 | "model": "powertool:block/cosmetic_birch_trapdoor_open", 27 | "x": 180, 28 | "y": 90 29 | } 30 | } 31 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/blockstates/cosmetic_campfire.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "facing=east,lit=false": { 4 | "model": "powertool:block/campfire_off", 5 | "y": 270 6 | }, 7 | "facing=east,lit=true": { 8 | "model": "powertool:block/campfire", 9 | "y": 270 10 | }, 11 | "facing=north,lit=false": { 12 | "model": "powertool:block/campfire_off", 13 | "y": 180 14 | }, 15 | "facing=north,lit=true": { 16 | "model": "powertool:block/campfire", 17 | "y": 180 18 | }, 19 | "facing=south,lit=false": { 20 | "model": "powertool:block/campfire_off" 21 | }, 22 | "facing=south,lit=true": { 23 | "model": "powertool:block/campfire" 24 | }, 25 | "facing=west,lit=false": { 26 | "model": "powertool:block/campfire_off", 27 | "y": 90 28 | }, 29 | "facing=west,lit=true": { 30 | "model": "powertool:block/campfire", 31 | "y": 90 32 | } 33 | } 34 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/blockstates/cosmetic_cherry_trapdoor.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "facing=up": { 4 | "model": "powertool:block/cosmetic_cherry_trapdoor_bottom", 5 | "y": 90 6 | }, 7 | "facing=down": { 8 | "model": "powertool:block/cosmetic_cherry_trapdoor_top", 9 | "y": 90 10 | }, 11 | "facing=north": { 12 | "model": "powertool:block/cosmetic_cherry_trapdoor_open", 13 | "x": 180, 14 | "y": 180 15 | }, 16 | "facing=south": { 17 | "model": "powertool:block/cosmetic_cherry_trapdoor_open", 18 | "x": 180 19 | }, 20 | "facing=east": { 21 | "model": "powertool:block/cosmetic_cherry_trapdoor_open", 22 | "x": 180, 23 | "y": 270 24 | }, 25 | "facing=west": { 26 | "model": "powertool:block/cosmetic_cherry_trapdoor_open", 27 | "x": 180, 28 | "y": 90 29 | } 30 | } 31 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/blockstates/cosmetic_crimson_trapdoor.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "facing=up": { 4 | "model": "powertool:block/cosmetic_crimson_trapdoor_bottom", 5 | "y": 90 6 | }, 7 | "facing=down": { 8 | "model": "powertool:block/cosmetic_crimson_trapdoor_top", 9 | "y": 90 10 | }, 11 | "facing=north": { 12 | "model": "powertool:block/cosmetic_crimson_trapdoor_open", 13 | "x": 180, 14 | "y": 180 15 | }, 16 | "facing=south": { 17 | "model": "powertool:block/cosmetic_crimson_trapdoor_open", 18 | "x": 180 19 | }, 20 | "facing=east": { 21 | "model": "powertool:block/cosmetic_crimson_trapdoor_open", 22 | "x": 180, 23 | "y": 270 24 | }, 25 | "facing=west": { 26 | "model": "powertool:block/cosmetic_crimson_trapdoor_open", 27 | "x": 180, 28 | "y": 90 29 | } 30 | } 31 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/blockstates/cosmetic_dark_oak_trapdoor.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "facing=up": { 4 | "model": "powertool:block/cosmetic_dark_oak_trapdoor_bottom", 5 | "y": 90 6 | }, 7 | "facing=down": { 8 | "model": "powertool:block/cosmetic_dark_oak_trapdoor_top", 9 | "y": 90 10 | }, 11 | "facing=north": { 12 | "model": "powertool:block/cosmetic_dark_oak_trapdoor_open", 13 | "x": 180, 14 | "y": 180 15 | }, 16 | "facing=south": { 17 | "model": "powertool:block/cosmetic_dark_oak_trapdoor_open", 18 | "x": 180 19 | }, 20 | "facing=east": { 21 | "model": "powertool:block/cosmetic_dark_oak_trapdoor_open", 22 | "x": 180, 23 | "y": 270 24 | }, 25 | "facing=west": { 26 | "model": "powertool:block/cosmetic_dark_oak_trapdoor_open", 27 | "x": 180, 28 | "y": 90 29 | } 30 | } 31 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/blockstates/cosmetic_hopper.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "facing=down": { 4 | "model": "minecraft:block/hopper" 5 | }, 6 | "facing=east": { 7 | "model": "minecraft:block/hopper_side", 8 | "y": 90 9 | }, 10 | "facing=north": { 11 | "model": "minecraft:block/hopper_side" 12 | }, 13 | "facing=south": { 14 | "model": "minecraft:block/hopper_side", 15 | "y": 180 16 | }, 17 | "facing=west": { 18 | "model": "minecraft:block/hopper_side", 19 | "y": 270 20 | } 21 | } 22 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/blockstates/cosmetic_iron_trapdoor.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "facing=up": { 4 | "model": "powertool:block/cosmetic_iron_trapdoor_bottom", 5 | "y": 90 6 | }, 7 | "facing=down": { 8 | "model": "powertool:block/cosmetic_iron_trapdoor_top", 9 | "y": 90 10 | }, 11 | "facing=north": { 12 | "model": "powertool:block/cosmetic_iron_trapdoor_open", 13 | "x": 180, 14 | "y": 180 15 | }, 16 | "facing=south": { 17 | "model": "powertool:block/cosmetic_iron_trapdoor_open", 18 | "x": 180 19 | }, 20 | "facing=east": { 21 | "model": "powertool:block/cosmetic_iron_trapdoor_open", 22 | "x": 180, 23 | "y": 270 24 | }, 25 | "facing=west": { 26 | "model": "powertool:block/cosmetic_iron_trapdoor_open", 27 | "x": 180, 28 | "y": 90 29 | } 30 | } 31 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/blockstates/cosmetic_jungle_trapdoor.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "facing=up": { 4 | "model": "powertool:block/cosmetic_jungle_trapdoor_bottom", 5 | "y": 90 6 | }, 7 | "facing=down": { 8 | "model": "powertool:block/cosmetic_jungle_trapdoor_top", 9 | "y": 90 10 | }, 11 | "facing=north": { 12 | "model": "powertool:block/cosmetic_jungle_trapdoor_open", 13 | "x": 180, 14 | "y": 180 15 | }, 16 | "facing=south": { 17 | "model": "powertool:block/cosmetic_jungle_trapdoor_open", 18 | "x": 180 19 | }, 20 | "facing=east": { 21 | "model": "powertool:block/cosmetic_jungle_trapdoor_open", 22 | "x": 180, 23 | "y": 270 24 | }, 25 | "facing=west": { 26 | "model": "powertool:block/cosmetic_jungle_trapdoor_open", 27 | "x": 180, 28 | "y": 90 29 | } 30 | } 31 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/blockstates/cosmetic_mangrove_trapdoor.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "facing=up": { 4 | "model": "powertool:block/cosmetic_mangrove_trapdoor_bottom", 5 | "y": 90 6 | }, 7 | "facing=down": { 8 | "model": "powertool:block/cosmetic_mangrove_trapdoor_top", 9 | "y": 90 10 | }, 11 | "facing=north": { 12 | "model": "powertool:block/cosmetic_mangrove_trapdoor_open", 13 | "x": 180, 14 | "y": 180 15 | }, 16 | "facing=south": { 17 | "model": "powertool:block/cosmetic_mangrove_trapdoor_open", 18 | "x": 180 19 | }, 20 | "facing=east": { 21 | "model": "powertool:block/cosmetic_mangrove_trapdoor_open", 22 | "x": 180, 23 | "y": 270 24 | }, 25 | "facing=west": { 26 | "model": "powertool:block/cosmetic_mangrove_trapdoor_open", 27 | "x": 180, 28 | "y": 90 29 | } 30 | } 31 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/blockstates/cosmetic_oak_trapdoor.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "facing=up": { 4 | "model": "powertool:block/cosmetic_oak_trapdoor_bottom", 5 | "y": 90 6 | }, 7 | "facing=down": { 8 | "model": "powertool:block/cosmetic_oak_trapdoor_top", 9 | "y": 90 10 | }, 11 | "facing=north": { 12 | "model": "powertool:block/cosmetic_oak_trapdoor_open", 13 | "x": 180, 14 | "y": 180 15 | }, 16 | "facing=south": { 17 | "model": "powertool:block/cosmetic_oak_trapdoor_open", 18 | "x": 180 19 | }, 20 | "facing=east": { 21 | "model": "powertool:block/cosmetic_oak_trapdoor_open", 22 | "x": 180, 23 | "y": 270 24 | }, 25 | "facing=west": { 26 | "model": "powertool:block/cosmetic_oak_trapdoor_open", 27 | "x": 180, 28 | "y": 90 29 | } 30 | } 31 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/blockstates/cosmetic_soul_campfire.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "facing=east,lit=false": { 4 | "model": "powertool:block/campfire_off", 5 | "y": 270 6 | }, 7 | "facing=east,lit=true": { 8 | "model": "powertool:block/soul_campfire", 9 | "y": 270 10 | }, 11 | "facing=north,lit=false": { 12 | "model": "powertool:block/campfire_off", 13 | "y": 180 14 | }, 15 | "facing=north,lit=true": { 16 | "model": "powertool:block/soul_campfire", 17 | "y": 180 18 | }, 19 | "facing=south,lit=false": { 20 | "model": "powertool:block/campfire_off" 21 | }, 22 | "facing=south,lit=true": { 23 | "model": "powertool:block/soul_campfire" 24 | }, 25 | "facing=west,lit=false": { 26 | "model": "powertool:block/campfire_off", 27 | "y": 90 28 | }, 29 | "facing=west,lit=true": { 30 | "model": "powertool:block/soul_campfire", 31 | "y": 90 32 | } 33 | } 34 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/blockstates/cosmetic_spruce_trapdoor.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "facing=up": { 4 | "model": "powertool:block/cosmetic_spruce_trapdoor_bottom", 5 | "y": 90 6 | }, 7 | "facing=down": { 8 | "model": "powertool:block/cosmetic_spruce_trapdoor_top", 9 | "y": 90 10 | }, 11 | "facing=north": { 12 | "model": "powertool:block/cosmetic_spruce_trapdoor_open", 13 | "x": 180, 14 | "y": 180 15 | }, 16 | "facing=south": { 17 | "model": "powertool:block/cosmetic_spruce_trapdoor_open", 18 | "x": 180 19 | }, 20 | "facing=east": { 21 | "model": "powertool:block/cosmetic_spruce_trapdoor_open", 22 | "x": 180, 23 | "y": 270 24 | }, 25 | "facing=west": { 26 | "model": "powertool:block/cosmetic_spruce_trapdoor_open", 27 | "x": 180, 28 | "y": 90 29 | } 30 | } 31 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/blockstates/cosmetic_warped_trapdoor.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "facing=up": { 4 | "model": "powertool:block/cosmetic_warped_trapdoor_bottom", 5 | "y": 90 6 | }, 7 | "facing=down": { 8 | "model": "powertool:block/cosmetic_warped_trapdoor_top", 9 | "y": 90 10 | }, 11 | "facing=north": { 12 | "model": "powertool:block/cosmetic_warped_trapdoor_open", 13 | "x": 180, 14 | "y": 180 15 | }, 16 | "facing=south": { 17 | "model": "powertool:block/cosmetic_warped_trapdoor_open", 18 | "x": 180 19 | }, 20 | "facing=east": { 21 | "model": "powertool:block/cosmetic_warped_trapdoor_open", 22 | "x": 180, 23 | "y": 270 24 | }, 25 | "facing=west": { 26 | "model": "powertool:block/cosmetic_warped_trapdoor_open", 27 | "x": 180, 28 | "y": 90 29 | } 30 | } 31 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/blockstates/delayer.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "facing=down,powered=false": { 4 | "model": "powertool:block/delayer", 5 | "x": 90 6 | }, 7 | "facing=down,powered=true": { 8 | "model": "powertool:block/delayer_on", 9 | "x": 90 10 | }, 11 | "facing=east,powered=false": { 12 | "model": "powertool:block/delayer", 13 | "y": 90 14 | }, 15 | "facing=east,powered=true": { 16 | "model": "powertool:block/delayer_on", 17 | "y": 90 18 | }, 19 | "facing=north,powered=false": { 20 | "model": "powertool:block/delayer" 21 | }, 22 | "facing=north,powered=true": { 23 | "model": "powertool:block/delayer_on" 24 | }, 25 | "facing=south,powered=false": { 26 | "model": "powertool:block/delayer", 27 | "y": 180 28 | }, 29 | "facing=south,powered=true": { 30 | "model": "powertool:block/delayer_on", 31 | "y": 180 32 | }, 33 | "facing=up,powered=false": { 34 | "model": "powertool:block/delayer", 35 | "x": 270 36 | }, 37 | "facing=up,powered=true": { 38 | "model": "powertool:block/delayer_on", 39 | "x": 270 40 | }, 41 | "facing=west,powered=false": { 42 | "model": "powertool:block/delayer", 43 | "y": 270 44 | }, 45 | "facing=west,powered=true": { 46 | "model": "powertool:block/delayer_on", 47 | "y": 270 48 | } 49 | } 50 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/blockstates/glow_item_display.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "invisible=true": { 4 | "model": "powertool:block/empty" 5 | }, 6 | "facing=down,invisible=false": { 7 | "model": "powertool:block/glow_item_display", 8 | "x": 90 9 | }, 10 | "facing=up,invisible=false": { 11 | "model": "powertool:block/glow_item_display", 12 | "x": 270 13 | }, 14 | "facing=east,invisible=false": { 15 | "model": "powertool:block/glow_item_display", 16 | "y": 90 17 | }, 18 | "facing=north,invisible=false": { 19 | "model": "powertool:block/glow_item_display" 20 | }, 21 | "facing=south,invisible=false": { 22 | "model": "powertool:block/glow_item_display", 23 | "y": 180 24 | }, 25 | "facing=west,invisible=false": { 26 | "model": "powertool:block/glow_item_display", 27 | "y": 270 28 | } 29 | } 30 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/blockstates/gorgeous_register.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "facing=north": { "model": "powertool:block/gorgeous_token_acceptor" }, 4 | "facing=south": { "model": "powertool:block/gorgeous_token_acceptor", "y": 180 }, 5 | "facing=west": { "model": "powertool:block/gorgeous_token_acceptor", "y": 270 }, 6 | "facing=east": { "model": "powertool:block/gorgeous_token_acceptor", "y": 90 } 7 | } 8 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/blockstates/gorgeous_safe.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "facing=north": { "model": "powertool:block/gorgeous_safe" }, 4 | "facing=south": { "model": "powertool:block/gorgeous_safe", "y": 180 }, 5 | "facing=west": { "model": "powertool:block/gorgeous_safe", "y": 270 }, 6 | "facing=east": { "model": "powertool:block/gorgeous_safe", "y": 90 } 7 | } 8 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/blockstates/holographic_sign.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "": { "model": "minecraft:block/air" } 4 | } 5 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/blockstates/item_display.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "invisible=true": { 4 | "model": "powertool:block/empty" 5 | }, 6 | "facing=down,invisible=false": { 7 | "model": "powertool:block/item_display", 8 | "x": 90 9 | }, 10 | "facing=up,invisible=false": { 11 | "model": "powertool:block/item_display", 12 | "x": 270 13 | }, 14 | "facing=east,invisible=false": { 15 | "model": "powertool:block/item_display", 16 | "y": 90 17 | }, 18 | "facing=north,invisible=false": { 19 | "model": "powertool:block/item_display" 20 | }, 21 | "facing=south,invisible=false": { 22 | "model": "powertool:block/item_display", 23 | "y": 180 24 | }, 25 | "facing=west,invisible=false": { 26 | "model": "powertool:block/item_display", 27 | "y": 270 28 | } 29 | } 30 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/blockstates/item_supplier.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "": { "model": "powertool:block/item_supplier" } 4 | } 5 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/blockstates/mechanical_register.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "facing=north": { "model": "powertool:block/mechanical_token_acceptor" }, 4 | "facing=south": { "model": "powertool:block/mechanical_token_acceptor", "y": 180 }, 5 | "facing=west": { "model": "powertool:block/mechanical_token_acceptor", "y": 270 }, 6 | "facing=east": { "model": "powertool:block/mechanical_token_acceptor", "y": 90 } 7 | } 8 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/blockstates/mechanical_safe.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "facing=north": { "model": "powertool:block/mechanical_safe" }, 4 | "facing=south": { "model": "powertool:block/mechanical_safe", "y": 180 }, 5 | "facing=west": { "model": "powertool:block/mechanical_safe", "y": 270 }, 6 | "facing=east": { "model": "powertool:block/mechanical_safe", "y": 90 } 7 | } 8 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/blockstates/observer_gametime_cyl.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "facing=down,powered=false": { 4 | "model": "powertool:block/observer_gametime_cyl", 5 | "x": 90 6 | }, 7 | "facing=down,powered=true": { 8 | "model": "powertool:block/observer_gametime_cyl_on", 9 | "x": 90 10 | }, 11 | "facing=east,powered=false": { 12 | "model": "powertool:block/observer_gametime_cyl", 13 | "y": 90 14 | }, 15 | "facing=east,powered=true": { 16 | "model": "powertool:block/observer_gametime_cyl_on", 17 | "y": 90 18 | }, 19 | "facing=north,powered=false": { 20 | "model": "powertool:block/observer_gametime_cyl" 21 | }, 22 | "facing=north,powered=true": { 23 | "model": "powertool:block/observer_gametime_cyl_on" 24 | }, 25 | "facing=south,powered=false": { 26 | "model": "powertool:block/observer_gametime_cyl", 27 | "y": 180 28 | }, 29 | "facing=south,powered=true": { 30 | "model": "powertool:block/observer_gametime_cyl_on", 31 | "y": 180 32 | }, 33 | "facing=up,powered=false": { 34 | "model": "powertool:block/observer_gametime_cyl", 35 | "x": 270 36 | }, 37 | "facing=up,powered=true": { 38 | "model": "powertool:block/observer_gametime_cyl_on", 39 | "x": 270 40 | }, 41 | "facing=west,powered=false": { 42 | "model": "powertool:block/observer_gametime_cyl", 43 | "y": 270 44 | }, 45 | "facing=west,powered=true": { 46 | "model": "powertool:block/observer_gametime_cyl_on", 47 | "y": 270 48 | } 49 | } 50 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/blockstates/observer_realtime.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "facing=down,powered=false": { 4 | "model": "powertool:block/observer_realtime", 5 | "x": 90 6 | }, 7 | "facing=down,powered=true": { 8 | "model": "powertool:block/observer_realtime_on", 9 | "x": 90 10 | }, 11 | "facing=east,powered=false": { 12 | "model": "powertool:block/observer_realtime", 13 | "y": 90 14 | }, 15 | "facing=east,powered=true": { 16 | "model": "powertool:block/observer_realtime_on", 17 | "y": 90 18 | }, 19 | "facing=north,powered=false": { 20 | "model": "powertool:block/observer_realtime" 21 | }, 22 | "facing=north,powered=true": { 23 | "model": "powertool:block/observer_realtime_on" 24 | }, 25 | "facing=south,powered=false": { 26 | "model": "powertool:block/observer_realtime", 27 | "y": 180 28 | }, 29 | "facing=south,powered=true": { 30 | "model": "powertool:block/observer_realtime_on", 31 | "y": 180 32 | }, 33 | "facing=up,powered=false": { 34 | "model": "powertool:block/observer_realtime", 35 | "x": 270 36 | }, 37 | "facing=up,powered=true": { 38 | "model": "powertool:block/observer_realtime_on", 39 | "x": 270 40 | }, 41 | "facing=west,powered=false": { 42 | "model": "powertool:block/observer_realtime", 43 | "y": 270 44 | }, 45 | "facing=west,powered=true": { 46 | "model": "powertool:block/observer_realtime_on", 47 | "y": 270 48 | } 49 | } 50 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/blockstates/observer_realtime_cyl.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "facing=down,powered=false": { 4 | "model": "powertool:block/observer_realtime_cyl", 5 | "x": 90 6 | }, 7 | "facing=down,powered=true": { 8 | "model": "powertool:block/observer_realtime_cyl_on", 9 | "x": 90 10 | }, 11 | "facing=east,powered=false": { 12 | "model": "powertool:block/observer_realtime_cyl", 13 | "y": 90 14 | }, 15 | "facing=east,powered=true": { 16 | "model": "powertool:block/observer_realtime_cyl_on", 17 | "y": 90 18 | }, 19 | "facing=north,powered=false": { 20 | "model": "powertool:block/observer_realtime_cyl" 21 | }, 22 | "facing=north,powered=true": { 23 | "model": "powertool:block/observer_realtime_cyl_on" 24 | }, 25 | "facing=south,powered=false": { 26 | "model": "powertool:block/observer_realtime_cyl", 27 | "y": 180 28 | }, 29 | "facing=south,powered=true": { 30 | "model": "powertool:block/observer_realtime_cyl_on", 31 | "y": 180 32 | }, 33 | "facing=up,powered=false": { 34 | "model": "powertool:block/observer_realtime_cyl", 35 | "x": 270 36 | }, 37 | "facing=up,powered=true": { 38 | "model": "powertool:block/observer_realtime_cyl_on", 39 | "x": 270 40 | }, 41 | "facing=west,powered=false": { 42 | "model": "powertool:block/observer_realtime_cyl", 43 | "y": 270 44 | }, 45 | "facing=west,powered=true": { 46 | "model": "powertool:block/observer_realtime_cyl_on", 47 | "y": 270 48 | } 49 | } 50 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/blockstates/power_supply.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "": { "model": "powertool:block/power_supply" } 4 | } 5 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/blockstates/register.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "facing=north": { "model": "powertool:block/plain_token_acceptor" }, 4 | "facing=south": { "model": "powertool:block/plain_token_acceptor", "y": 180 }, 5 | "facing=west": { "model": "powertool:block/plain_token_acceptor", "y": 270 }, 6 | "facing=east": { "model": "powertool:block/plain_token_acceptor", "y": 90 } 7 | } 8 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/blockstates/safe.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "facing=north": { "model": "powertool:block/plain_safe" }, 4 | "facing=south": { "model": "powertool:block/plain_safe", "y": 180 }, 5 | "facing=west": { "model": "powertool:block/plain_safe", "y": 270 }, 6 | "facing=east": { "model": "powertool:block/plain_safe", "y": 90 } 7 | } 8 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/blockstates/slim_item_supplier.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "facing=down": { 4 | "model": "powertool:block/slim_item_supplier", 5 | "x": 90 6 | }, 7 | "facing=up": { 8 | "model": "powertool:block/slim_item_supplier", 9 | "x": 270 10 | }, 11 | "facing=east": { 12 | "model": "powertool:block/slim_item_supplier", 13 | "y": 90 14 | }, 15 | "facing=north": { 16 | "model": "powertool:block/slim_item_supplier" 17 | }, 18 | "facing=south": { 19 | "model": "powertool:block/slim_item_supplier", 20 | "y": 180 21 | }, 22 | "facing=west": { 23 | "model": "powertool:block/slim_item_supplier", 24 | "y": 270 25 | } 26 | } 27 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/blockstates/tech_register.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "facing=north": { "model": "powertool:block/tech_token_acceptor" }, 4 | "facing=south": { "model": "powertool:block/tech_token_acceptor", "y": 180 }, 5 | "facing=west": { "model": "powertool:block/tech_token_acceptor", "y": 270 }, 6 | "facing=east": { "model": "powertool:block/tech_token_acceptor", "y": 90 } 7 | } 8 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/blockstates/tech_safe.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "facing=north": { "model": "powertool:block/tech_safe" }, 4 | "facing=south": { "model": "powertool:block/tech_safe", "y": 180 }, 5 | "facing=west": { "model": "powertool:block/tech_safe", "y": 270 }, 6 | "facing=east": { "model": "powertool:block/tech_safe", "y": 90 } 7 | } 8 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/blockstates/trash_can.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "": { "model": "powertool:block/black_trash_can" } 4 | } 5 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/block/campfire.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/campfire", 3 | "render_type": "cutout" 4 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/block/campfire_off.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/campfire_off", 3 | "render_type": "cutout" 4 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/block/command_block.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/template_command_block", 3 | "textures": { 4 | "front": "powertool:block/command_block_front", 5 | "back": "powertool:block/command_block_back", 6 | "side": "powertool:block/command_block_side" 7 | } 8 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/block/command_block_conditional.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/template_command_block", 3 | "textures": { 4 | "front": "powertool:block/command_block_front", 5 | "back": "powertool:block/command_block_back", 6 | "side": "powertool:block/command_block_conditional" 7 | } 8 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/block/cosmetic_acacia_trapdoor_bottom.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/acacia_trapdoor_bottom", 3 | "render_type": "cutout" 4 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/block/cosmetic_acacia_trapdoor_open.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/acacia_trapdoor_open", 3 | "render_type": "cutout" 4 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/block/cosmetic_acacia_trapdoor_top.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/acacia_trapdoor_top", 3 | "render_type": "cutout" 4 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/block/cosmetic_bamboo_trapdoor_bottom.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/bamboo_trapdoor_bottom", 3 | "render_type": "cutout" 4 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/block/cosmetic_bamboo_trapdoor_open.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/bamboo_trapdoor_open", 3 | "render_type": "cutout" 4 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/block/cosmetic_bamboo_trapdoor_top.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/bamboo_trapdoor_top", 3 | "render_type": "cutout" 4 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/block/cosmetic_birch_trapdoor_bottom.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/birch_trapdoor_bottom", 3 | "render_type": "cutout" 4 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/block/cosmetic_birch_trapdoor_open.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/birch_trapdoor_open", 3 | "render_type": "cutout" 4 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/block/cosmetic_birch_trapdoor_top.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/birch_trapdoor_top", 3 | "render_type": "cutout" 4 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/block/cosmetic_cherry_trapdoor_bottom.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/cherry_trapdoor_bottom", 3 | "render_type": "cutout" 4 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/block/cosmetic_cherry_trapdoor_open.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/cherry_trapdoor_open", 3 | "render_type": "cutout" 4 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/block/cosmetic_cherry_trapdoor_top.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/cherry_trapdoor_top", 3 | "render_type": "cutout" 4 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/block/cosmetic_crimson_trapdoor_bottom.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/crimson_trapdoor_bottom", 3 | "render_type": "cutout" 4 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/block/cosmetic_crimson_trapdoor_open.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/crimson_trapdoor_open", 3 | "render_type": "cutout" 4 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/block/cosmetic_crimson_trapdoor_top.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/crimson_trapdoor_top", 3 | "render_type": "cutout" 4 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/block/cosmetic_dark_oak_trapdoor_bottom.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/dark_oak_trapdoor_bottom", 3 | "render_type": "cutout" 4 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/block/cosmetic_dark_oak_trapdoor_open.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/dark_oak_trapdoor_open", 3 | "render_type": "cutout" 4 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/block/cosmetic_dark_oak_trapdoor_top.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/dark_oak_trapdoor_top", 3 | "render_type": "cutout" 4 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/block/cosmetic_iron_trapdoor_bottom.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/iron_trapdoor_bottom", 3 | "render_type": "cutout" 4 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/block/cosmetic_iron_trapdoor_open.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/iron_trapdoor_open", 3 | "render_type": "cutout" 4 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/block/cosmetic_iron_trapdoor_top.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/iron_trapdoor_top", 3 | "render_type": "cutout" 4 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/block/cosmetic_jungle_trapdoor_bottom.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/jungle_trapdoor_bottom", 3 | "render_type": "cutout" 4 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/block/cosmetic_jungle_trapdoor_open.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/jungle_trapdoor_open", 3 | "render_type": "cutout" 4 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/block/cosmetic_jungle_trapdoor_top.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/jungle_trapdoor_top", 3 | "render_type": "cutout" 4 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/block/cosmetic_mangrove_trapdoor_bottom.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/mangrove_trapdoor_bottom", 3 | "render_type": "cutout" 4 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/block/cosmetic_mangrove_trapdoor_open.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/mangrove_trapdoor_open", 3 | "render_type": "cutout" 4 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/block/cosmetic_mangrove_trapdoor_top.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/mangrove_trapdoor_top", 3 | "render_type": "cutout" 4 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/block/cosmetic_oak_trapdoor_bottom.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/oak_trapdoor_bottom", 3 | "render_type": "cutout" 4 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/block/cosmetic_oak_trapdoor_open.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/oak_trapdoor_open", 3 | "render_type": "cutout" 4 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/block/cosmetic_oak_trapdoor_top.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/oak_trapdoor_top", 3 | "render_type": "cutout" 4 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/block/cosmetic_spruce_trapdoor_bottom.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/spruce_trapdoor_bottom", 3 | "render_type": "cutout" 4 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/block/cosmetic_spruce_trapdoor_open.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/spruce_trapdoor_open", 3 | "render_type": "cutout" 4 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/block/cosmetic_spruce_trapdoor_top.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/spruce_trapdoor_top", 3 | "render_type": "cutout" 4 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/block/cosmetic_warped_trapdoor_bottom.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/warped_trapdoor_bottom", 3 | "render_type": "cutout" 4 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/block/cosmetic_warped_trapdoor_open.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/warped_trapdoor_open", 3 | "render_type": "cutout" 4 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/block/cosmetic_warped_trapdoor_top.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/warped_trapdoor_top", 3 | "render_type": "cutout" 4 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/block/delayer.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/template_command_block", 3 | "textures": { 4 | "back": "powertool:block/delayer_back", 5 | "front": "powertool:block/delayer_front", 6 | "side": "powertool:block/delayer_side" 7 | } 8 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/block/delayer_on.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/template_command_block", 3 | "textures": { 4 | "back": "powertool:block/delayer_back_on", 5 | "front": "powertool:block/delayer_front", 6 | "side": "powertool:block/delayer_side" 7 | } 8 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/block/empty.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "block/block", 3 | "elements": [] 4 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/block/green_trash_can_cap_bottom.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/acacia_trapdoor_bottom", 3 | "render_type": "cutout", 4 | "textures": { 5 | "texture": "powertool:block/green_trash_can_cap"} 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/block/green_trash_can_cap_open.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/acacia_trapdoor_open", 3 | "render_type": "cutout", 4 | "textures": { 5 | "texture": "powertool:block/green_trash_can_cap"} 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/block/green_trash_can_cap_top.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/acacia_trapdoor_top", 3 | "render_type": "cutout", 4 | "textures": { 5 | "texture": "powertool:block/green_trash_can_cap"} 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/block/item_display.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/item_frame", 3 | "render_type": "cut_out" 4 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/block/observer_gametime_cyl.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "block/block", 3 | "textures": { 4 | "bottom": "powertool:block/observer_gametime_cyl_back", 5 | "side": "powertool:block/observer_gametime_cyl_side", 6 | "top": "powertool:block/observer_gametime_cyl_top", 7 | "front": "powertool:block/observer_gametime_cyl_front", 8 | "particle": "powertool:block/observer_gametime_cyl_front" 9 | }, 10 | "elements": [ 11 | { "from": [ 0, 0, 0 ], 12 | "to": [ 16, 16, 16 ], 13 | "faces": { 14 | "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#top", "cullface": "down" }, 15 | "up": { "uv": [ 0, 16, 16, 0 ], "texture": "#top", "cullface": "up" }, 16 | "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#front", "cullface": "north" }, 17 | "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#bottom", "cullface": "south" }, 18 | "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#side", "cullface": "west" }, 19 | "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#side", "cullface": "east" } 20 | } 21 | } 22 | ] 23 | } 24 | -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/block/observer_gametime_cyl_on.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "powertool:block/observer_gametime_cyl", 3 | "textures": { 4 | "bottom": "powertool:block/observer_gametime_cyl_back_on" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/block/observer_realtime.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "block/block", 3 | "textures": { 4 | "bottom": "powertool:block/observer_realtime_back", 5 | "side": "powertool:block/observer_realtime_side", 6 | "top": "powertool:block/observer_realtime_top", 7 | "front": "powertool:block/observer_realtime_front", 8 | "particle": "powertool:block/observer_realtime_front" 9 | }, 10 | "elements": [ 11 | { "from": [ 0, 0, 0 ], 12 | "to": [ 16, 16, 16 ], 13 | "faces": { 14 | "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#top", "cullface": "down" }, 15 | "up": { "uv": [ 0, 16, 16, 0 ], "texture": "#top", "cullface": "up" }, 16 | "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#front", "cullface": "north" }, 17 | "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#bottom", "cullface": "south" }, 18 | "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#side", "cullface": "west" }, 19 | "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#side", "cullface": "east" } 20 | } 21 | } 22 | ] 23 | } 24 | -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/block/observer_realtime_cyl.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "block/block", 3 | "textures": { 4 | "bottom": "powertool:block/observer_realtime_back", 5 | "side": "powertool:block/observer_realtime_side", 6 | "top": "powertool:block/observer_realtime_cyl_top", 7 | "front": "powertool:block/observer_realtime_front", 8 | "particle": "powertool:block/observer_realtime_front" 9 | }, 10 | "elements": [ 11 | { "from": [ 0, 0, 0 ], 12 | "to": [ 16, 16, 16 ], 13 | "faces": { 14 | "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#top", "cullface": "down" }, 15 | "up": { "uv": [ 0, 16, 16, 0 ], "texture": "#top", "cullface": "up" }, 16 | "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#front", "cullface": "north" }, 17 | "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#bottom", "cullface": "south" }, 18 | "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#side", "cullface": "west" }, 19 | "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#side", "cullface": "east" } 20 | } 21 | } 22 | ] 23 | } 24 | -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/block/observer_realtime_cyl_on.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "powertool:block/observer_realtime_cyl", 3 | "textures": { 4 | "bottom": "powertool:block/observer_realtime_back_on" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/block/observer_realtime_on.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "powertool:block/observer_realtime", 3 | "textures": { 4 | "bottom": "powertool:block/observer_realtime_back_on" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/block/power_supply.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/cube_bottom_top", 3 | "textures": { 4 | "bottom": "powertool:block/power_supply_bottom", 5 | "side": "powertool:block/power_supply_side", 6 | "top": "powertool:block/power_supply_top" 7 | } 8 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/block/slim_item_supplier.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made by XeKr with Blockbench", 3 | "parent": "block/block", 4 | "render_type": "cutout", 5 | "textures": { 6 | "side": "powertool:block/item_supplier_side_slim", 7 | "front": "powertool:block/item_supplier", 8 | "top": "powertool:block/item_supplier_top_slim", 9 | "overlay": "powertool:block/item_supplier_tag" 10 | }, 11 | "elements": [ 12 | { 13 | "from": [0, 0, 12], 14 | "to": [16, 16, 16], 15 | "faces": { 16 | "north": {"uv": [0, 0, 16, 16], "texture": "#front"}, 17 | "east": {"uv": [0, 0, 4, 16], "texture": "#side", "cullface": "east"}, 18 | "south": {"uv": [0, 0, 16, 16], "texture": "#front", "cullface": "south"}, 19 | "west": {"uv": [0, 0, 4, 16], "texture": "#side", "cullface": "west"}, 20 | "up": {"uv": [0, 0, 16, 4], "texture": "#top", "cullface": "up"}, 21 | "down": {"uv": [0, 0, 16, 4], "texture": "#top", "cullface": "down"} 22 | } 23 | }, 24 | { 25 | "from": [1, 1, 11.9], 26 | "to": [9, 3, 11.9], 27 | "faces": { 28 | "north": {"uv": [0, 0, 16, 4], "texture": "#overlay"} 29 | } 30 | }, 31 | { 32 | "from": [7, 1, 16.1], 33 | "to": [15, 3, 16.1], 34 | "faces": { 35 | "south": {"uv": [0, 0, 16, 4], "texture": "#overlay", "cullface": "south"} 36 | } 37 | } 38 | ] 39 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/block/soul_campfire.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/soul_campfire", 3 | "render_type": "cutout" 4 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/block/white_trash_can_cap_bottom.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/acacia_trapdoor_bottom", 3 | "render_type": "cutout", 4 | "textures": { 5 | "texture": "powertool:block/white_trash_can_cap"} 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/block/white_trash_can_cap_open.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/acacia_trapdoor_open", 3 | "render_type": "cutout", 4 | "textures": { 5 | "texture": "powertool:block/white_trash_can_cap"} 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/block/white_trash_can_cap_top.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/acacia_trapdoor_top", 3 | "render_type": "cutout", 4 | "textures": { 5 | "texture": "powertool:block/white_trash_can_cap"} 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/item/auto_vanish_acacia_boat.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "minecraft:item/acacia_boat" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/item/auto_vanish_bamboo_raft.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "minecraft:item/bamboo_raft" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/item/auto_vanish_birch_boat.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "minecraft:item/birch_boat" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/item/auto_vanish_cherry_boat.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "minecraft:item/cherry_boat" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/item/auto_vanish_dark_oak_boat.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "minecraft:item/dark_oak_boat" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/item/auto_vanish_jungle_boat.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "minecraft:item/jungle_boat" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/item/auto_vanish_mangrove_boat.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "minecraft:item/mangrove_boat" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/item/auto_vanish_minecart.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "minecraft:item/minecart" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/item/auto_vanish_oak_boat.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "minecraft:item/oak_boat" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/item/auto_vanish_spruce_boat.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "minecraft:item/spruce_boat" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/item/bezier_curve_block.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "powertool:item/bezier_curve_tool" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/item/cached_mode_tool.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "powertool:item/cached_mode_tool" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/item/command_block.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "powertool:block/command_block" 3 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/item/command_rune.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/handheld", 3 | "textures": { 4 | "layer0": "powertool:item/command_rune" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/item/command_wand.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/handheld", 3 | "textures": { 4 | "layer0": "powertool:item/useless_stick" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/item/cosmetic_acacia_trapdoor.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "powertool:block/cosmetic_acacia_trapdoor_bottom" 3 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/item/cosmetic_bamboo_trapdoor.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "powertool:block/cosmetic_bamboo_trapdoor_bottom" 3 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/item/cosmetic_birch_trapdoor.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "powertool:block/cosmetic_birch_trapdoor_bottom" 3 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/item/cosmetic_campfire.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/campfire" 3 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/item/cosmetic_cherry_trapdoor.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "powertool:block/cosmetic_cherry_trapdoor_bottom" 3 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/item/cosmetic_crimson_trapdoor.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "powertool:block/cosmetic_crimson_trapdoor_bottom" 3 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/item/cosmetic_dark_oak_trapdoor.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "powertool:block/cosmetic_dark_oak_trapdoor_bottom" 3 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/item/cosmetic_hopper.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "minecraft:item/hopper" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/item/cosmetic_iron_trapdoor.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "powertool:block/cosmetic_iron_trapdoor_bottom" 3 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/item/cosmetic_jungle_trapdoor.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "powertool:block/cosmetic_jungle_trapdoor_bottom" 3 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/item/cosmetic_mangrove_trapdoor.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "powertool:block/cosmetic_mangrove_trapdoor_bottom" 3 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/item/cosmetic_oak_trapdoor.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "powertool:block/cosmetic_oak_trapdoor_bottom" 3 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/item/cosmetic_soul_campfire.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/soul_campfire" 3 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/item/cosmetic_spruce_trapdoor.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "powertool:block/cosmetic_spruce_trapdoor_bottom" 3 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/item/cosmetic_warped_trapdoor.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "powertool:block/cosmetic_warped_trapdoor_bottom" 3 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/item/display_mode_tool.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "powertool:item/display_mode_tool" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/item/examine_holo_glass.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/handheld", 3 | "textures": { 4 | "layer0": "powertool:item/examine_holo_glass" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/item/extra_thick_tonk.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/handheld", 3 | "textures": { 4 | "layer0": "powertool:item/tonk_extrathick" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/item/glow_item_display.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/glow_item_frame" 3 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/item/gorgeous_register.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "powertool:block/gorgeous_token_acceptor" 3 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/item/gorgeous_safe.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "powertool:block/gorgeous_safe" 3 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/item/holographic_sign.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/handheld", 3 | "textures": { 4 | "layer0": "powertool:item/holographic_sign" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/item/item_display.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/item_frame" 3 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/item/item_supplier.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "powertool:block/item_supplier" 3 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/item/link_holographic_sign.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/handheld", 3 | "textures": { 4 | "layer0": "powertool:item/holographic_hyperlink" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/item/marting_car_blue.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "powertool:item/marting_car", 3 | "textures": { 4 | "1": "powertool:item/marting_blue" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/item/marting_car_green.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "powertool:item/marting_car", 3 | "textures": { 4 | "1": "powertool:item/marting_green" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/item/marting_car_red.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "powertool:item/marting_car", 3 | "textures": { 4 | "1": "powertool:item/marting_red" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/item/mechanical_register.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "powertool:block/mechanical_token_acceptor" 3 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/item/mechanical_safe.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "powertool:block/mechanical_safe" 3 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/item/observer_gametime_cyl.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "powertool:block/observer_gametime_cyl" 3 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/item/observer_realtime.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "powertool:block/observer_realtime" 3 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/item/observer_realtime_cyl.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "powertool:block/observer_realtime_cyl" 3 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/item/power_supply.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "powertool:block/power_supply" 3 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/item/raw_json_holographic_sign.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/handheld", 3 | "textures": { 4 | "layer0": "powertool:item/holographic_json" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/item/register.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "powertool:block/plain_token_acceptor" 3 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/item/safe.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "powertool:block/plain_safe" 3 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/item/slim_item_supplier.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "powertool:block/slim_item_supplier" 3 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/item/static_mode_tool.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "powertool:item/static_mode_tool" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/item/tech_register.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "powertool:block/tech_token_acceptor" 3 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/item/tech_safe.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "powertool:block/tech_safe" 3 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/item/texture_extractor.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/handheld", 3 | "textures": { 4 | "layer0": "powertool:item/texture_extractor" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/item/thick_tonk.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/handheld", 3 | "textures": { 4 | "layer0": "powertool:item/tonk_thick" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/item/tonk.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/handheld", 3 | "textures": { 4 | "layer0": "powertool:item/tonk" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/item/transparent_brush.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/handheld_rod", 3 | "textures": { 4 | "layer0": "powertool:item/transparent_brush" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/item/trash_can.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "powertool:block/black_trash_can" 3 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/models/item/useless_stick.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/handheld", 3 | "textures": { 4 | "layer0": "powertool:item/useless_stick" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/sounds.json: -------------------------------------------------------------------------------- 1 | { 2 | "item.powertool.clap": { 3 | "replace": false, 4 | "subtitle": "sound.powertool.clap.title", 5 | "sounds": [ 6 | { 7 | "name": "powertool:item/clap", 8 | "volume": 1.0, 9 | "pitch": 1.0, 10 | "attenuation_distance": 16 11 | } 12 | ] 13 | } 14 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/sounds/item/clap.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/sounds/item/clap.ogg -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/block/black_trash_can.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/block/black_trash_can.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/block/command_block_activator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/block/command_block_activator.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/block/command_block_back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/block/command_block_back.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/block/command_block_back.png.mcmeta: -------------------------------------------------------------------------------- 1 | { 2 | "animation": { 3 | "interpolate": true, 4 | "frametime": 10 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/block/command_block_conditional.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/block/command_block_conditional.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/block/command_block_conditional.png.mcmeta: -------------------------------------------------------------------------------- 1 | { 2 | "animation": { 3 | "interpolate": true, 4 | "frametime": 10 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/block/command_block_front.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/block/command_block_front.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/block/command_block_front.png.mcmeta: -------------------------------------------------------------------------------- 1 | { 2 | "animation": { 3 | "interpolate": true, 4 | "frametime": 10 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/block/command_block_side.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/block/command_block_side.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/block/command_block_side.png.mcmeta: -------------------------------------------------------------------------------- 1 | { 2 | "animation": { 3 | "interpolate": true, 4 | "frametime": 10 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/block/delayer_back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/block/delayer_back.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/block/delayer_back_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/block/delayer_back_on.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/block/delayer_front.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/block/delayer_front.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/block/delayer_side.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/block/delayer_side.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/block/gorgeous_safe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/block/gorgeous_safe.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/block/gorgeous_token_acceptor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/block/gorgeous_token_acceptor.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/block/gray_trash_can.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/block/gray_trash_can.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/block/green_trash_can.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/block/green_trash_can.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/block/green_trash_can_cap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/block/green_trash_can_cap.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/block/item_supplier.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/block/item_supplier.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/block/item_supplier_side_slim.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/block/item_supplier_side_slim.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/block/item_supplier_tag.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/block/item_supplier_tag.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/block/item_supplier_tag.png.mcmeta: -------------------------------------------------------------------------------- 1 | { 2 | "animation": { 3 | "frametime": 10 4 | } 5 | } -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/block/item_supplier_top.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/block/item_supplier_top.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/block/item_supplier_top_slim.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/block/item_supplier_top_slim.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/block/mechanical_safe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/block/mechanical_safe.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/block/mechanical_token_acceptor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/block/mechanical_token_acceptor.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/block/observer_gametime_cyl_back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/block/observer_gametime_cyl_back.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/block/observer_gametime_cyl_back_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/block/observer_gametime_cyl_back_on.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/block/observer_gametime_cyl_front.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/block/observer_gametime_cyl_front.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/block/observer_gametime_cyl_side.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/block/observer_gametime_cyl_side.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/block/observer_gametime_cyl_top.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/block/observer_gametime_cyl_top.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/block/observer_realtime_back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/block/observer_realtime_back.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/block/observer_realtime_back_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/block/observer_realtime_back_on.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/block/observer_realtime_cyl_top.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/block/observer_realtime_cyl_top.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/block/observer_realtime_front.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/block/observer_realtime_front.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/block/observer_realtime_side.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/block/observer_realtime_side.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/block/observer_realtime_top.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/block/observer_realtime_top.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/block/plain_safe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/block/plain_safe.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/block/plain_token_acceptor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/block/plain_token_acceptor.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/block/power_supply_bottom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/block/power_supply_bottom.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/block/power_supply_side.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/block/power_supply_side.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/block/power_supply_top.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/block/power_supply_top.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/block/tech_safe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/block/tech_safe.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/block/tech_token_acceptor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/block/tech_token_acceptor.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/block/temple.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/block/temple.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/block/timing_command_block_back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/block/timing_command_block_back.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/block/timing_command_block_back.png.mcmeta: -------------------------------------------------------------------------------- 1 | { 2 | "animation": { 3 | "interpolate": true, 4 | "frametime": 10 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/block/timing_command_block_conditional.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/block/timing_command_block_conditional.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/block/timing_command_block_conditional.png.mcmeta: -------------------------------------------------------------------------------- 1 | { 2 | "animation": { 3 | "interpolate": true, 4 | "frametime": 10 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/block/timing_command_block_front.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/block/timing_command_block_front.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/block/timing_command_block_front.png.mcmeta: -------------------------------------------------------------------------------- 1 | { 2 | "animation": { 3 | "interpolate": true, 4 | "frametime": 10 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/block/timing_command_block_side.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/block/timing_command_block_side.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/block/timing_command_block_side.png.mcmeta: -------------------------------------------------------------------------------- 1 | { 2 | "animation": { 3 | "interpolate": true, 4 | "frametime": 10 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/block/transparent_command_block_back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/block/transparent_command_block_back.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/block/transparent_command_block_back.png.mcmeta: -------------------------------------------------------------------------------- 1 | { 2 | "animation": { 3 | "interpolate": true, 4 | "frametime": 10 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/block/transparent_command_block_conditional.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/block/transparent_command_block_conditional.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/block/transparent_command_block_conditional.png.mcmeta: -------------------------------------------------------------------------------- 1 | { 2 | "animation": { 3 | "interpolate": true, 4 | "frametime": 10 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/block/transparent_command_block_front.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/block/transparent_command_block_front.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/block/transparent_command_block_front.png.mcmeta: -------------------------------------------------------------------------------- 1 | { 2 | "animation": { 3 | "interpolate": true, 4 | "frametime": 10 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/block/transparent_command_block_side.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/block/transparent_command_block_side.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/block/transparent_command_block_side.png.mcmeta: -------------------------------------------------------------------------------- 1 | { 2 | "animation": { 3 | "interpolate": true, 4 | "frametime": 10 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/block/white_trash_can.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/block/white_trash_can.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/block/white_trash_can_cap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/block/white_trash_can_cap.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/entity/marting_blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/entity/marting_blue.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/entity/marting_green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/entity/marting_green.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/entity/marting_red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/entity/marting_red.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/gui/power_supply.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/gui/power_supply.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/gui/register.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/gui/register.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/gui/sprites/delayer_button_descending_edge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/gui/sprites/delayer_button_descending_edge.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/gui/sprites/delayer_button_ignore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/gui/sprites/delayer_button_ignore.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/gui/sprites/delayer_button_reset.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/gui/sprites/delayer_button_reset.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/gui/sprites/delayer_button_rising_edge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/gui/sprites/delayer_button_rising_edge.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/gui/sprites/local_time.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/gui/sprites/local_time.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/gui/sprites/sky_color.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/gui/sprites/sky_color.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/gui/sprites/slider.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/gui/sprites/slider.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/gui/sprites/utc_time.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/gui/sprites/utc_time.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/gui/texture_extractor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/gui/texture_extractor.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/gui/trash_can.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/gui/trash_can.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/item/bezier_curve_tool.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/item/bezier_curve_tool.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/item/cached_mode_tool.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/item/cached_mode_tool.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/item/clap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/item/clap.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/item/clap_but_angry.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/item/clap_but_angry.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/item/clap_but_sad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/item/clap_but_sad.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/item/command_rune.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/item/command_rune.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/item/display_mode_tool.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/item/display_mode_tool.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/item/examine_holo_glass.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/item/examine_holo_glass.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/item/holographic_hyperlink.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/item/holographic_hyperlink.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/item/holographic_json.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/item/holographic_json.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/item/holographic_sign.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/item/holographic_sign.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/item/marting_blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/item/marting_blue.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/item/marting_green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/item/marting_green.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/item/marting_red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/item/marting_red.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/item/static_mode_tool.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/item/static_mode_tool.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/item/texture_extractor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/item/texture_extractor.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/item/tonk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/item/tonk.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/item/tonk_extrathick.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/item/tonk_extrathick.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/item/tonk_thick.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/item/tonk_thick.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/item/transparent_brush.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/item/transparent_brush.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/item/trash_can.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/item/trash_can.png -------------------------------------------------------------------------------- /src/main/resources/assets/powertool/textures/item/useless_stick.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teaconmc/PowerTool/29d1dbae8e85d40891275feb433868de06820753/src/main/resources/assets/powertool/textures/item/useless_stick.png -------------------------------------------------------------------------------- /src/main/resources/data/minecraft/tags/blocks/campfires.json: -------------------------------------------------------------------------------- 1 | { 2 | "replace": false, 3 | "values": [ 4 | "powertool:cosmetic_campfire", 5 | "powertool:cosmetic_soul_campfire" 6 | ] 7 | } -------------------------------------------------------------------------------- /src/main/resources/data/powertool/tags/entity_types/item.json: -------------------------------------------------------------------------------- 1 | { 2 | "replace": false, 3 | "values": [ 4 | "minecraft:item" 5 | ] 6 | } -------------------------------------------------------------------------------- /src/main/resources/pack.mcmeta: -------------------------------------------------------------------------------- 1 | { 2 | "pack": { 3 | "description": "powertool resources", 4 | "pack_format": 8, 5 | "forge:resource_pack_format": 8, 6 | "forge:data_pack_format": 9 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/main/resources/powertool.mixins.json: -------------------------------------------------------------------------------- 1 | { 2 | "required": true, 3 | "minVersion": "0.8", 4 | "package": "org.teacon.powertool.mixin", 5 | "compatibilityLevel": "JAVA_8", 6 | "mixins": [ 7 | "CommandBlockMixin", 8 | "CommandsMixin", 9 | "CommandSourceStackMixin", 10 | "MixinArmorStand", 11 | "MixinEntity", 12 | "MixinItemFrame", 13 | "MixinThrownEgg", 14 | "ServerGamePacketListenerImplMixin", 15 | "ServerPlayerMixin" 16 | ], 17 | "client": [ 18 | "client.ClientRecipeBookMixin", 19 | "client.DebugScreenOverlayMixin", 20 | "client.GameModeSwitcherScreenMixin", 21 | "client.KeyboardHandlerMixin", 22 | "client.LevelRendererMixin", 23 | "client.MinecraftMixin", 24 | "client.PlayerMixin", 25 | "client.SectionRenderDispatcherMixin", 26 | "client.compat.EmbeddiumWorldRenderMixin", 27 | "client.compat.SodiumWorldRenderMixin", 28 | "fixes.PlayerTextureManagerMixin" 29 | ], 30 | "injectors": { 31 | "defaultRequire": 1 32 | } 33 | } 34 | --------------------------------------------------------------------------------