伐木任务支持不种植树苗
This commit is contained in:
@@ -28,6 +28,7 @@ import net.minecraftforge.registries.DeferredRegister;
|
||||
import net.minecraftforge.registries.ForgeRegistries;
|
||||
import net.minecraftforge.registries.RegistryObject;
|
||||
import org.slf4j.Logger;
|
||||
import studio.fantasyit.maid_useful_task.registry.GuiRegistry;
|
||||
import studio.fantasyit.maid_useful_task.registry.MemoryModuleRegistry;
|
||||
import studio.fantasyit.maid_useful_task.vehicle.MaidVehicleManager;
|
||||
|
||||
@@ -42,6 +43,7 @@ public class MaidUsefulTask {
|
||||
public MaidUsefulTask() {
|
||||
IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus();
|
||||
MemoryModuleRegistry.register(modEventBus);
|
||||
GuiRegistry.init(modEventBus);
|
||||
MaidVehicleManager.register();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,8 +4,11 @@ import com.github.tartaricacid.touhoulittlemaid.api.ILittleMaid;
|
||||
import com.github.tartaricacid.touhoulittlemaid.api.LittleMaidExtension;
|
||||
import com.github.tartaricacid.touhoulittlemaid.api.entity.ai.IExtraMaidBrain;
|
||||
import com.github.tartaricacid.touhoulittlemaid.entity.ai.brain.ExtraMaidBrainManager;
|
||||
import com.github.tartaricacid.touhoulittlemaid.entity.data.TaskDataRegister;
|
||||
import com.github.tartaricacid.touhoulittlemaid.entity.task.TaskManager;
|
||||
import net.minecraft.world.entity.ai.memory.MemoryModuleType;
|
||||
import studio.fantasyit.maid_useful_task.data.MaidConfigKeys;
|
||||
import studio.fantasyit.maid_useful_task.data.MaidLoggingConfig;
|
||||
import studio.fantasyit.maid_useful_task.registry.MemoryModuleRegistry;
|
||||
import studio.fantasyit.maid_useful_task.task.MaidLocateTask;
|
||||
import studio.fantasyit.maid_useful_task.task.MaidTreeTask;
|
||||
@@ -39,4 +42,11 @@ public class UsefulTaskExtension implements ILittleMaid {
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerTaskData(TaskDataRegister register) {
|
||||
MaidConfigKeys.addKey(MaidLoggingConfig.LOCATION,
|
||||
MaidLoggingConfig.KEY = register.register(new MaidLoggingConfig()),
|
||||
MaidLoggingConfig.Data::getDefault);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
package studio.fantasyit.maid_useful_task.data;
|
||||
|
||||
public interface IConfigSetter {
|
||||
void setConfigValue(String name, String value);
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
package studio.fantasyit.maid_useful_task.data;
|
||||
|
||||
import com.github.tartaricacid.touhoulittlemaid.api.entity.data.TaskDataKey;
|
||||
import com.github.tartaricacid.touhoulittlemaid.entity.passive.EntityMaid;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import oshi.util.tuples.Pair;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
public class MaidConfigKeys {
|
||||
record keyAndDefSupp<T>(TaskDataKey<T> key, Supplier<T> defaultValue) {
|
||||
}
|
||||
|
||||
public static Map<ResourceLocation, keyAndDefSupp<?>> keys = new HashMap<>();
|
||||
|
||||
public static <T> void addKey(ResourceLocation key, TaskDataKey<T> dataKey, Supplier<T> defaultValue) {
|
||||
keys.put(key, new keyAndDefSupp<>(dataKey, defaultValue));
|
||||
}
|
||||
|
||||
public static <T> T getValue(EntityMaid maid, ResourceLocation key) {
|
||||
keyAndDefSupp<T> pair = (keyAndDefSupp<T>) keys.get(key);
|
||||
return maid.getOrCreateData(pair.key, pair.defaultValue.get());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,60 @@
|
||||
package studio.fantasyit.maid_useful_task.data;
|
||||
|
||||
import com.github.tartaricacid.touhoulittlemaid.api.entity.data.TaskDataKey;
|
||||
import net.minecraft.nbt.CompoundTag;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import studio.fantasyit.maid_useful_task.MaidUsefulTask;
|
||||
|
||||
public class MaidLoggingConfig implements TaskDataKey<MaidLoggingConfig.Data> {
|
||||
|
||||
|
||||
public static final class Data implements IConfigSetter {
|
||||
private boolean plant;
|
||||
|
||||
public Data(boolean plant) {
|
||||
this.plant = plant;
|
||||
}
|
||||
|
||||
public static Data getDefault() {
|
||||
return new Data(true);
|
||||
}
|
||||
|
||||
public boolean plant() {
|
||||
return plant;
|
||||
}
|
||||
|
||||
public void plant(boolean plant) {
|
||||
this.plant = plant;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setConfigValue(String name, String value) {
|
||||
switch (name) {
|
||||
case "plant":
|
||||
plant = Boolean.parseBoolean(value);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static TaskDataKey<Data> KEY = null;
|
||||
public static final ResourceLocation LOCATION = new ResourceLocation(MaidUsefulTask.MODID, "logging");
|
||||
|
||||
@Override
|
||||
public ResourceLocation getKey() {
|
||||
return LOCATION;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CompoundTag writeSaveData(Data data) {
|
||||
CompoundTag tag = new CompoundTag();
|
||||
tag.putBoolean("plant", data.plant);
|
||||
return tag;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Data readSaveData(CompoundTag compound) {
|
||||
boolean plant = compound.getBoolean("plant");
|
||||
return new Data(plant);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
package studio.fantasyit.maid_useful_task.menu;
|
||||
|
||||
import com.github.tartaricacid.touhoulittlemaid.client.gui.entity.maid.task.MaidTaskConfigGui;
|
||||
import com.github.tartaricacid.touhoulittlemaid.client.gui.widget.button.MaidConfigButton;
|
||||
import com.github.tartaricacid.touhoulittlemaid.inventory.container.task.TaskConfigContainer;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.world.entity.player.Inventory;
|
||||
import studio.fantasyit.maid_useful_task.data.MaidLoggingConfig;
|
||||
import studio.fantasyit.maid_useful_task.network.MaidConfigurePacket;
|
||||
import studio.fantasyit.maid_useful_task.network.Network;
|
||||
import studio.fantasyit.maid_useful_task.registry.GuiRegistry;
|
||||
import studio.fantasyit.maid_useful_task.util.TranslateUtil;
|
||||
|
||||
public class MaidLoggingConfigGui extends MaidTaskConfigGui<MaidLoggingConfigGui.Container> {
|
||||
private MaidLoggingConfig.Data currentData;
|
||||
|
||||
public MaidLoggingConfigGui(Container screenContainer, Inventory inv, Component titleIn) {
|
||||
super(screenContainer, inv, titleIn);
|
||||
}
|
||||
|
||||
public static class Container extends TaskConfigContainer {
|
||||
public Container(int id, Inventory inventory, int entityId) {
|
||||
super(GuiRegistry.MAID_LOGGING_CONFIG_GUI.get(), id, inventory, entityId);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void initAdditionData() {
|
||||
this.currentData = this.maid.getOrCreateData(MaidLoggingConfig.KEY, MaidLoggingConfig.Data.getDefault());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void initAdditionWidgets() {
|
||||
super.initAdditionWidgets();
|
||||
|
||||
int startLeft = leftPos + 87;
|
||||
int startTop = topPos + 36;
|
||||
this.addRenderableWidget(new MaidConfigButton(startLeft, startTop + 0,
|
||||
Component.translatable("gui.maid_useful_task.logging.plant"),
|
||||
TranslateUtil.getBooleanTranslate(this.currentData.plant()),
|
||||
button -> {
|
||||
this.currentData.plant(false);
|
||||
button.setValue(TranslateUtil.getBooleanTranslate(false));
|
||||
MaidConfigurePacket.send(this.maid, MaidLoggingConfig.LOCATION, "plant", "false");
|
||||
},
|
||||
button -> {
|
||||
this.currentData.plant(true);
|
||||
button.setValue(TranslateUtil.getBooleanTranslate(true));
|
||||
MaidConfigurePacket.send(this.maid, MaidLoggingConfig.LOCATION, "plant", "true");
|
||||
}
|
||||
));
|
||||
}
|
||||
}
|
||||
@@ -1,30 +1,56 @@
|
||||
package studio.fantasyit.maid_useful_task.network;
|
||||
|
||||
import com.github.tartaricacid.touhoulittlemaid.entity.passive.EntityMaid;
|
||||
import net.minecraft.network.FriendlyByteBuf;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.server.level.ServerPlayer;
|
||||
import net.minecraftforge.network.NetworkEvent;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import studio.fantasyit.maid_useful_task.data.IConfigSetter;
|
||||
import studio.fantasyit.maid_useful_task.data.MaidConfigKeys;
|
||||
|
||||
import java.util.function.Supplier;
|
||||
|
||||
public class MaidConfigurePacket {
|
||||
public String name;
|
||||
public String value;
|
||||
final public int maidId;
|
||||
final public String name;
|
||||
final public String value;
|
||||
final public ResourceLocation key;
|
||||
|
||||
public MaidConfigurePacket(String name, String value) {
|
||||
public MaidConfigurePacket(int maidId, ResourceLocation key, String name, String value) {
|
||||
this.maidId = maidId;
|
||||
this.key = key;
|
||||
this.name = name;
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public MaidConfigurePacket(FriendlyByteBuf buffer) {
|
||||
this.maidId = buffer.readInt();
|
||||
this.key = ResourceLocation.tryParse(buffer.readUtf());
|
||||
this.name = buffer.readUtf();
|
||||
this.value = buffer.readUtf();
|
||||
}
|
||||
|
||||
public void toBytes(FriendlyByteBuf buffer) {
|
||||
buffer.writeInt(maidId);
|
||||
buffer.writeUtf(key.toString());
|
||||
buffer.writeUtf(name);
|
||||
buffer.writeUtf(value);
|
||||
}
|
||||
|
||||
public static void handle(MaidConfigurePacket msg, Supplier<NetworkEvent.Context> context) {
|
||||
public static void handle(MaidConfigurePacket msg, Supplier<NetworkEvent.Context> contextSupplier) {
|
||||
NetworkEvent.Context context = contextSupplier.get();
|
||||
@Nullable ServerPlayer sender = context.getSender();
|
||||
if (sender != null) {
|
||||
if (sender.level().getEntity(msg.maidId) instanceof EntityMaid entityMaid) {
|
||||
if (MaidConfigKeys.getValue(entityMaid, msg.key) instanceof IConfigSetter ics) {
|
||||
ics.setConfigValue(msg.name, msg.value);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void send(EntityMaid maid, ResourceLocation key, String name, String value) {
|
||||
Network.INSTANCE.sendToServer(new MaidConfigurePacket(maid.getId(), key, name, value));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
package studio.fantasyit.maid_useful_task.registry;
|
||||
|
||||
import net.minecraft.client.gui.screens.MenuScreens;
|
||||
import net.minecraftforge.api.distmarker.Dist;
|
||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||
import net.minecraftforge.fml.common.Mod;
|
||||
import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
|
||||
import studio.fantasyit.maid_useful_task.MaidUsefulTask;
|
||||
import studio.fantasyit.maid_useful_task.menu.MaidLoggingConfigGui;
|
||||
|
||||
@Mod.EventBusSubscriber(modid = MaidUsefulTask.MODID, bus = Mod.EventBusSubscriber.Bus.MOD, value = Dist.CLIENT)
|
||||
public class ClientGuiRegistry {
|
||||
@SubscribeEvent
|
||||
public static void init(FMLClientSetupEvent event) {
|
||||
event.enqueueWork(() -> {
|
||||
MenuScreens.register(GuiRegistry.MAID_LOGGING_CONFIG_GUI.get(), MaidLoggingConfigGui::new);
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
package studio.fantasyit.maid_useful_task.registry;
|
||||
|
||||
import net.minecraft.world.inventory.MenuType;
|
||||
import net.minecraftforge.common.extensions.IForgeMenuType;
|
||||
import net.minecraftforge.eventbus.api.IEventBus;
|
||||
import net.minecraftforge.registries.DeferredRegister;
|
||||
import net.minecraftforge.registries.ForgeRegistries;
|
||||
import net.minecraftforge.registries.RegistryObject;
|
||||
import studio.fantasyit.maid_useful_task.MaidUsefulTask;
|
||||
import studio.fantasyit.maid_useful_task.menu.MaidLoggingConfigGui;
|
||||
|
||||
public class GuiRegistry {
|
||||
public static final DeferredRegister<MenuType<?>> MENU_TYPES = DeferredRegister.create(ForgeRegistries.MENU_TYPES, MaidUsefulTask.MODID);
|
||||
public static final RegistryObject<MenuType<MaidLoggingConfigGui.Container>> MAID_LOGGING_CONFIG_GUI = MENU_TYPES.register("maid_logging_config_gui",
|
||||
() -> IForgeMenuType.create((windowId, inv, data) -> new MaidLoggingConfigGui.Container(windowId, inv, data.readInt())));
|
||||
|
||||
public static void init(IEventBus modEventBus) {
|
||||
MENU_TYPES.register(modEventBus);
|
||||
}
|
||||
}
|
||||
@@ -4,13 +4,18 @@ import com.github.tartaricacid.touhoulittlemaid.api.task.IMaidTask;
|
||||
import com.github.tartaricacid.touhoulittlemaid.entity.passive.EntityMaid;
|
||||
import com.mojang.datafixers.util.Pair;
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.server.level.ServerLevel;
|
||||
import net.minecraft.sounds.SoundEvent;
|
||||
import net.minecraft.tags.BlockTags;
|
||||
import net.minecraft.tags.ItemTags;
|
||||
import net.minecraft.world.InteractionHand;
|
||||
import net.minecraft.world.MenuProvider;
|
||||
import net.minecraft.world.entity.ai.behavior.BehaviorControl;
|
||||
import net.minecraft.world.entity.player.Inventory;
|
||||
import net.minecraft.world.entity.player.Player;
|
||||
import net.minecraft.world.inventory.AbstractContainerMenu;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.item.Items;
|
||||
import net.minecraft.world.level.block.LeavesBlock;
|
||||
@@ -20,7 +25,10 @@ import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import studio.fantasyit.maid_useful_task.MaidUsefulTask;
|
||||
import studio.fantasyit.maid_useful_task.behavior.common.*;
|
||||
import studio.fantasyit.maid_useful_task.data.MaidLoggingConfig;
|
||||
import studio.fantasyit.maid_useful_task.memory.BlockValidationMemory;
|
||||
import studio.fantasyit.maid_useful_task.menu.MaidLoggingConfigGui;
|
||||
import studio.fantasyit.maid_useful_task.registry.GuiRegistry;
|
||||
import studio.fantasyit.maid_useful_task.util.MaidUtils;
|
||||
import studio.fantasyit.maid_useful_task.util.MemoryUtil;
|
||||
import studio.fantasyit.maid_useful_task.util.WrappedMaidFakePlayer;
|
||||
@@ -52,6 +60,21 @@ public class MaidTreeTask implements IMaidTask, IMaidBlockPlaceTask, IMaidBlockD
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public MenuProvider getTaskConfigGuiProvider(EntityMaid maid) {
|
||||
return new MenuProvider() {
|
||||
@Override
|
||||
public Component getDisplayName() {
|
||||
return Component.literal("");
|
||||
}
|
||||
|
||||
@Override
|
||||
public AbstractContainerMenu createMenu(int index, Inventory playerInventory, Player player) {
|
||||
return new MaidLoggingConfigGui.Container(index, playerInventory, maid.getId());
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldDestroyBlock(EntityMaid maid, BlockPos pos) {
|
||||
if (MemoryUtil.getBlockUpContext(maid).hasTarget()) {
|
||||
@@ -79,6 +102,7 @@ public class MaidTreeTask implements IMaidTask, IMaidBlockPlaceTask, IMaidBlockD
|
||||
|
||||
@Override
|
||||
public boolean shouldPlaceItemStack(EntityMaid maid, ItemStack itemStack) {
|
||||
if (!maid.getOrCreateData(MaidLoggingConfig.KEY, MaidLoggingConfig.Data.getDefault()).plant()) return false;
|
||||
return itemStack.is(ItemTags.SAPLINGS);
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
package studio.fantasyit.maid_useful_task.util;
|
||||
|
||||
import net.minecraft.network.chat.Component;
|
||||
|
||||
public class TranslateUtil {
|
||||
public static Component getBooleanTranslate(boolean b) {
|
||||
return (b ? Component.translatable("gui.maid_useful_task.yes") : Component.translatable("gui.maid_useful_task.no"));
|
||||
}
|
||||
}
|
||||
@@ -7,5 +7,8 @@
|
||||
"maid_useful_task.allow_handle_vehicle.none": "Not allowing maid control vehicle",
|
||||
"maid_useful_task.allow_handle_vehicle.rot_only": "Allow maid control rotation only",
|
||||
"maid_useful_task.allow_handle_vehicle.full": "Allow maid control vehicle",
|
||||
"key.maid_useful_tasks.categories.main": "Maid Useful Tasks"
|
||||
"key.maid_useful_tasks.categories.main": "Maid Useful Tasks",
|
||||
"gui.maid_useful_task.logging.plant": "Plant Saplings",
|
||||
"gui.maid_useful_task.no": "No",
|
||||
"gui.maid_useful_task.yes": "Yes"
|
||||
}
|
||||
Reference in New Issue
Block a user