Skip to content

Commit

Permalink
add harvest plugin (#248)
Browse files Browse the repository at this point in the history
* harvestability

* pass 2

* pass 3

* pass 4

* pass 5

(cherry picked from commit 1e6ff72)

(cherry picked from commit f69de06)

(cherry picked from commit 92d5df7)
  • Loading branch information
deirn committed Feb 14, 2024
1 parent 458ce27 commit 962ba37
Show file tree
Hide file tree
Showing 35 changed files with 931 additions and 13 deletions.
7 changes: 4 additions & 3 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -106,16 +106,17 @@ sourceSets {
val mixin by creating
val pluginCore by creating
val pluginExtra by creating
val pluginHarvest by creating
val pluginVanilla by creating
val pluginTest by creating

listOf(api, buildConst, mixin, pluginCore, pluginExtra, pluginVanilla, pluginTest).applyEach {
listOf(api, buildConst, mixin, pluginCore, pluginExtra, pluginHarvest, pluginVanilla, pluginTest).applyEach {
compileClasspath += main.compileClasspath
}
listOf(api, main, mixin, pluginCore, pluginExtra, pluginVanilla, pluginTest).applyEach {
listOf(api, main, mixin, pluginCore, pluginExtra, pluginHarvest, pluginVanilla, pluginTest).applyEach {
compileClasspath += buildConst.output
}
listOf(main, pluginCore, pluginExtra, pluginVanilla, pluginTest).applyEach {
listOf(main, pluginCore, pluginExtra, pluginHarvest, pluginVanilla, pluginTest).applyEach {
compileClasspath += api.output + mixin.output
}
mixin.apply {
Expand Down
2 changes: 1 addition & 1 deletion buildSrc/src/main/kotlin/PlatformConfig.kt
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ fun Project.setupPlatform() {
}

listOf(plugin, main).applyEach {
compileClasspath += api.output
compileClasspath += api.output + rootSourceSets["mixin"].output
}

main.apply {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package mcp.mobius.waila.fabric;

import mcp.mobius.waila.service.ApiService;
import net.fabricmc.fabric.api.mininglevel.v1.MiningLevelManager;
import net.minecraft.tags.TagKey;
import net.minecraft.world.item.Tier;
import net.minecraft.world.level.block.Block;
import org.jetbrains.annotations.Nullable;

public class FabricApiService extends ApiService {

@Override
public @Nullable TagKey<Block> getTierTag(Tier tier) {
return tier.getLevel() == 0 ? null : MiningLevelManager.getBlockTag(tier.getLevel());
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import mcp.mobius.waila.util.ModInfo;
import net.fabricmc.api.ModInitializer;
import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback;
import net.fabricmc.fabric.api.event.lifecycle.v1.CommonLifecycleEvents;
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents;
import net.fabricmc.loader.api.FabricLoader;
import net.fabricmc.loader.api.ModContainer;
Expand All @@ -26,6 +27,7 @@ public void onInitialize() {

ServerLifecycleEvents.SERVER_STARTING.register(server -> PluginConfig.reload());
ServerLifecycleEvents.SERVER_STOPPED.register(server -> onServerStopped());
CommonLifecycleEvents.TAGS_LOADED.register((registries, client) -> onTagReload());

ModInfo.register(new ModInfo(false, "c", "Common", "0"));

Expand Down
Original file line number Diff line number Diff line change
@@ -1 +1 @@
mcp.mobius.waila.service.ApiService
mcp.mobius.waila.fabric.FabricApiService
6 changes: 6 additions & 0 deletions platform/fabric/src/main/resources/waila_plugins.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,12 @@
"required" : ["minecraft"]
},

"waila:harvest" : {
"initializer": "mcp.mobius.waila.plugin.harvest.WailaPluginHarvest",
"side" : "*",
"required" : []
},

"waila:extra" : {
"initializer": "mcp.mobius.waila.plugin.extra.WailaPluginExtra",
"side" : "*",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,16 @@
package mcp.mobius.waila.forge;

import java.util.List;

import mcp.mobius.waila.api.IModInfo;
import mcp.mobius.waila.service.ApiService;
import mcp.mobius.waila.util.ModInfo;
import net.minecraft.tags.TagKey;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Tier;
import net.minecraft.world.level.block.Block;
import net.minecraftforge.common.TierSortingRegistry;
import org.jetbrains.annotations.Nullable;

public class ForgeApiService extends ApiService {

Expand All @@ -17,4 +24,14 @@ public String getDefaultEnergyUnit() {
return "FE";
}

@Override
public @Nullable TagKey<Block> getTierTag(Tier tier) {
return tier.getTag();
}

@Override
public List<Tier> getTiers() {
return TierSortingRegistry.getSortedTiers();
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import mcp.mobius.waila.debug.DumpGenerator;
import mcp.mobius.waila.network.Packets;
import net.minecraftforge.event.RegisterCommandsEvent;
import net.minecraftforge.event.TagsUpdatedEvent;
import net.minecraftforge.event.server.ServerStartingEvent;
import net.minecraftforge.event.server.ServerStoppedEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
Expand Down Expand Up @@ -52,6 +53,11 @@ static void serverStopped(ServerStoppedEvent event) {
onServerStopped();
}

@SubscribeEvent
static void tagReload(TagsUpdatedEvent event) {
onTagReload();
}

@SubscribeEvent
static void registerCommands(RegisterCommandsEvent event) {
ServerCommand.register(event.getDispatcher());
Expand Down
6 changes: 6 additions & 0 deletions platform/forge/src/main/resources/waila_plugins.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,12 @@
"required" : ["minecraft"]
},

"waila:harvest" : {
"initializer": "mcp.mobius.waila.plugin.harvest.WailaPluginHarvest",
"side" : "*",
"required" : []
},

"waila:extra" : {
"initializer": "mcp.mobius.waila.plugin.extra.WailaPluginExtra",
"side" : "*",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,21 @@
package mcp.mobius.waila.plugin.forge;

import mcp.mobius.waila.api.IRegistrar;
import mcp.mobius.waila.api.IToolType;
import mcp.mobius.waila.api.IWailaPlugin;
import mcp.mobius.waila.api.data.FluidData;
import mcp.mobius.waila.plugin.forge.fluid.ForgeFluidDescriptor;
import mcp.mobius.waila.plugin.forge.provider.EnergyCapabilityProvider;
import mcp.mobius.waila.plugin.forge.provider.FluidCapabilityProvider;
import mcp.mobius.waila.plugin.forge.provider.ItemCapabilityProvider;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.tags.BlockTags;
import net.minecraft.world.item.Items;
import net.minecraft.world.level.block.DoublePlantBlock;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.material.Fluid;
import net.minecraftforge.common.IForgeShearable;
import net.minecraftforge.common.ToolActions;

public class WailaPluginForge implements IWailaPlugin {

Expand All @@ -18,6 +25,42 @@ public void register(IRegistrar registrar) {
registrar.addBlockData(EnergyCapabilityProvider.INSTANCE, BlockEntity.class, 2000);
registrar.addBlockData(ItemCapabilityProvider.INSTANCE, BlockEntity.class, 2000);
registrar.addBlockData(FluidCapabilityProvider.INSTANCE, BlockEntity.class, 2000);

registrar.addToolType(new ResourceLocation("pickaxe"), IToolType.builder()
.lowestTierItem(Items.WOODEN_PICKAXE)
.blockTag(BlockTags.MINEABLE_WITH_PICKAXE)
.itemPredicate(it -> it.canPerformAction(ToolActions.PICKAXE_DIG))
.build());

registrar.addToolType(new ResourceLocation("shovel"), IToolType.builder()
.lowestTierItem(Items.WOODEN_SHOVEL)
.blockTag(BlockTags.MINEABLE_WITH_SHOVEL)
.itemPredicate(it -> it.canPerformAction(ToolActions.SHOVEL_DIG))
.build());

registrar.addToolType(new ResourceLocation("axe"), IToolType.builder()
.lowestTierItem(Items.WOODEN_AXE)
.blockTag(BlockTags.MINEABLE_WITH_AXE)
.itemPredicate(it -> it.canPerformAction(ToolActions.AXE_DIG))
.build());

registrar.addToolType(new ResourceLocation("hoe"), IToolType.builder()
.lowestTierItem(Items.WOODEN_HOE)
.blockTag(BlockTags.MINEABLE_WITH_HOE)
.itemPredicate(it -> it.canPerformAction(ToolActions.HOE_DIG))
.build());

registrar.addToolType(new ResourceLocation("sword"), IToolType.builder()
.lowestTierItem(Items.WOODEN_SWORD)
.blockTag(new ResourceLocation("forge:mineable/sword"))
.itemPredicate(it -> it.canPerformAction(ToolActions.SWORD_DIG))
.build());

registrar.addToolType(new ResourceLocation("shears"), IToolType.builder()
.lowestTierItem(Items.SHEARS)
.blockPredicate(it -> it.getBlock() instanceof IForgeShearable || it.getBlock() instanceof DoublePlantBlock)
.itemPredicate(it -> it.canPerformAction(ToolActions.SHEARS_DIG))
.build());
}

}
1 change: 1 addition & 0 deletions platform/quilt/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ dependencies {
modCompileRuntime("org.quiltmc:qsl:${rootProp["qsl"]}")
modCompileRuntime("org.quiltmc.quilted-fabric-api:fabric-key-binding-api-v1:${rootProp["qfapi"]}")
modCompileRuntime("org.quiltmc.quilted-fabric-api:fabric-rendering-v1:${rootProp["qfapi"]}")
modCompileRuntime("org.quiltmc.quilted-fabric-api:fabric-mining-level-api-v1:${rootProp["qfapi"]}")

modCompileRuntime("com.terraformersmc:modmenu:${rootProp["modMenu"]}")

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package mcp.mobius.waila.quilt;

import mcp.mobius.waila.service.ApiService;
import net.fabricmc.fabric.api.mininglevel.v1.MiningLevelManager;
import net.minecraft.tags.TagKey;
import net.minecraft.world.item.Tier;
import net.minecraft.world.level.block.Block;
import org.jetbrains.annotations.Nullable;

public class QuiltApiService extends ApiService {

@Override
public @Nullable TagKey<Block> getTierTag(Tier tier) {
return tier.getLevel() == 0 ? null : MiningLevelManager.getBlockTag(tier.getLevel());
}

}
Original file line number Diff line number Diff line change
@@ -1 +1 @@
mcp.mobius.waila.service.ApiService
mcp.mobius.waila.quilt.QuiltApiService
6 changes: 6 additions & 0 deletions platform/quilt/src/main/resources/waila_plugins.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,12 @@
"required" : ["minecraft"]
},

"waila:harvest" : {
"initializer": "mcp.mobius.waila.plugin.harvest.WailaPluginHarvest",
"side" : "*",
"required" : []
},

"waila:extra" : {
"initializer": "mcp.mobius.waila.plugin.extra.WailaPluginExtra",
"side" : "*",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,21 @@
package mcp.mobius.waila.plugin.textile;

import mcp.mobius.waila.api.IRegistrar;
import mcp.mobius.waila.api.IToolType;
import mcp.mobius.waila.api.IWailaPlugin;
import mcp.mobius.waila.api.data.FluidData;
import mcp.mobius.waila.mixed.IShearable;
import mcp.mobius.waila.plugin.textile.fluid.TextileFluidDescriptor;
import mcp.mobius.waila.plugin.textile.provider.FluidStorageProvider;
import mcp.mobius.waila.plugin.textile.provider.ItemStorageProvider;
import net.fabricmc.fabric.api.mininglevel.v1.FabricMineableTags;
import net.fabricmc.fabric.api.tag.convention.v1.ConventionalItemTags;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.tags.BlockTags;
import net.minecraft.tags.ItemTags;
import net.minecraft.world.item.Items;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.DoublePlantBlock;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.material.Fluid;

Expand All @@ -18,6 +27,42 @@ public void register(IRegistrar registrar) {
FluidData.describeCauldron(Block.class, TextileFluidDescriptor.INSTANCE);
registrar.addBlockData(ItemStorageProvider.INSTANCE, BlockEntity.class, 2000);
registrar.addBlockData(FluidStorageProvider.INSTANCE, BlockEntity.class, 2000);

registrar.addToolType(new ResourceLocation("pickaxe"), IToolType.builder()
.lowestTierItem(Items.WOODEN_PICKAXE)
.blockTag(BlockTags.MINEABLE_WITH_PICKAXE)
.itemTag(ItemTags.PICKAXES)
.build());

registrar.addToolType(new ResourceLocation("shovel"), IToolType.builder()
.lowestTierItem(Items.WOODEN_SHOVEL)
.blockTag(BlockTags.MINEABLE_WITH_SHOVEL)
.itemTag(ItemTags.SHOVELS)
.build());

registrar.addToolType(new ResourceLocation("axe"), IToolType.builder()
.lowestTierItem(Items.WOODEN_AXE)
.blockTag(BlockTags.MINEABLE_WITH_AXE)
.itemTag(ItemTags.AXES)
.build());

registrar.addToolType(new ResourceLocation("hoe"), IToolType.builder()
.lowestTierItem(Items.WOODEN_HOE)
.blockTag(BlockTags.MINEABLE_WITH_HOE)
.itemTag(ItemTags.HOES)
.build());

registrar.addToolType(new ResourceLocation("sword"), IToolType.builder()
.lowestTierItem(Items.WOODEN_SWORD)
.blockTag(FabricMineableTags.SWORD_MINEABLE)
.itemTag(ItemTags.SWORDS)
.build());

registrar.addToolType(new ResourceLocation("shears"), IToolType.builder()
.lowestTierItem(Items.SHEARS)
.blockPredicate(it -> it.is(FabricMineableTags.SHEARS_MINEABLE) || it.getBlock() instanceof IShearable || it.getBlock() instanceof DoublePlantBlock)
.itemTag(ConventionalItemTags.SHEARS)
.build());
}

}
13 changes: 13 additions & 0 deletions src/api/java/mcp/mobius/waila/api/IRegistrar.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import java.nio.file.Path;

import mcp.mobius.waila.api.__internal__.ApiSide;
import mcp.mobius.waila.api.__internal__.IHarvestService;
import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.entity.Entity;
Expand Down Expand Up @@ -597,6 +598,18 @@ default void addRayCastVector(IRayCastVectorProvider provider) {
addRayCastVector(provider, DEFAULT_PRIORITY);
}

/**
* Registers a tool type, to be used for the harvestability tooltip.
*
* @param id the tool type id, also used as the translation key as {@code tooltip.waila.harvest.tool.[namespace].[path]}
* @param toolType the tool type
*/
@ApiSide.ClientOnly
@ApiStatus.Experimental
default void addToolType(ResourceLocation id, IToolType toolType) {
IHarvestService.INSTANCE.addToolType(id, toolType);
}

// -----------------------------------------------------------------------------------------------------------------------------------------------
// TODO: Remove

Expand Down
Loading

0 comments on commit 962ba37

Please sign in to comment.