Skip to content

Commit

Permalink
完成部分划分区域的设计
Browse files Browse the repository at this point in the history
  • Loading branch information
TartaricAcid committed Dec 26, 2023
1 parent aa48be6 commit 066d2da
Show file tree
Hide file tree
Showing 45 changed files with 622 additions and 195 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ default SoundEvent getAmbientSound(EntityMaid maid) {
*/
@Override
default List<Pair<Integer, BehaviorControl<? super EntityMaid>>> createBrainTasks(EntityMaid maid) {
MaidFarmMoveTask maidFarmMoveTask = new MaidFarmMoveTask(this, 0.6f, 24);
MaidFarmMoveTask maidFarmMoveTask = new MaidFarmMoveTask(this, 0.6f);
MaidFarmPlantTask maidFarmPlantTask = new MaidFarmPlantTask(this);
return Lists.newArrayList(Pair.of(5, maidFarmMoveTask), Pair.of(6, maidFarmPlantTask));
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
package com.github.tartaricacid.touhoulittlemaid.client.event;


import com.github.tartaricacid.touhoulittlemaid.TouhouLittleMaid;
import com.github.tartaricacid.touhoulittlemaid.config.subconfig.MaidConfig;
import com.github.tartaricacid.touhoulittlemaid.init.InitItems;
import com.github.tartaricacid.touhoulittlemaid.item.ItemKappaCompass;
import com.github.tartaricacid.touhoulittlemaid.util.RenderHelper;
import com.mojang.blaze3d.vertex.VertexConsumer;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.core.BlockPos;
import net.minecraft.world.entity.schedule.Activity;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.phys.Vec3;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.client.event.RenderLevelStageEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;

@OnlyIn(Dist.CLIENT)
@Mod.EventBusSubscriber(modid = TouhouLittleMaid.MOD_ID, value = Dist.CLIENT)
public class CompassRenderEvent {
@SubscribeEvent
public static void onRender(RenderLevelStageEvent event) {
if (event.getStage() == RenderLevelStageEvent.Stage.AFTER_BLOCK_ENTITIES) {
Minecraft mc = Minecraft.getInstance();
if (mc.player == null) {
return;
}
ItemStack stack = mc.player.getMainHandItem();
if (stack.getItem() != InitItems.KAPPA_COMPASS.get()) {
return;
}
if (!ItemKappaCompass.hasKappaCompassData(stack)) {
return;
}
BlockPos workPos = ItemKappaCompass.getPoint(Activity.WORK, stack);
if (workPos != null) {
Vec3 camera = event.getCamera().getPosition().reverse();
Vec3 centerPos = camera.add(workPos.getX(), workPos.getY(), workPos.getZ());
int radius = MaidConfig.MAID_WORK_RANGE.get();

VertexConsumer buffer = mc.renderBuffers().bufferSource().getBuffer(RenderType.LINES);
RenderHelper.renderCylinder(event.getPoseStack(), buffer, centerPos.add(0, 2, 0), radius, 32, 1.0F, 0, 0);
RenderHelper.renderCylinder(event.getPoseStack(), buffer, centerPos.add(0, 1, 0), radius, 32, 1.0F, 0, 0);
RenderHelper.renderCylinder(event.getPoseStack(), buffer, centerPos, radius, 32, 1.0F, 0, 0);

RenderHelper.renderFloatingText(event.getPoseStack(), "工作区域", new Vec3(workPos.getX(), workPos.getY(), workPos.getZ()), 0xff1111, 0.2f, -10);
RenderHelper.renderFloatingText(event.getPoseStack(), "▼", new Vec3(workPos.getX(), workPos.getY(), workPos.getZ()), 0xff1111, 0.2f, 0);
}

BlockPos idlePos = ItemKappaCompass.getPoint(Activity.IDLE, stack);
if (idlePos != null) {
Vec3 position = event.getCamera().getPosition().reverse();
Vec3 pos = position.add(idlePos.getX(), idlePos.getY(), idlePos.getZ());
int radius = MaidConfig.MAID_IDLE_RANGE.get();
VertexConsumer buffer = mc.renderBuffers().bufferSource().getBuffer(RenderType.LINES);
RenderHelper.renderCylinder(event.getPoseStack(), buffer, pos.add(0, 2, 0), radius, 32, 0, 1.0F, 0);
RenderHelper.renderCylinder(event.getPoseStack(), buffer, pos.add(0, 1, 0), radius, 32, 0, 1.0F, 0);
RenderHelper.renderCylinder(event.getPoseStack(), buffer, pos, radius, 32, 0, 1.0F, 0);

RenderHelper.renderFloatingText(event.getPoseStack(), "休息区域", new Vec3(idlePos.getX(), idlePos.getY(), idlePos.getZ()), 0x11ff11, 0.15f, -10);
RenderHelper.renderFloatingText(event.getPoseStack(), "▼", new Vec3(idlePos.getX(), idlePos.getY(), idlePos.getZ()), 0x11ff11, 0.15f, 0);
}

BlockPos resetPos = ItemKappaCompass.getPoint(Activity.REST, stack);
if (resetPos != null) {
Vec3 position = event.getCamera().getPosition().reverse();
Vec3 pos = position.add(resetPos.getX(), resetPos.getY(), resetPos.getZ());
double radius = MaidConfig.MAID_SLEEP_RANGE.get() - 0.2;
VertexConsumer buffer = mc.renderBuffers().bufferSource().getBuffer(RenderType.LINES);
RenderHelper.renderCylinder(event.getPoseStack(), buffer, pos.add(0, 2, 0), radius, 32, 0, 0, 1.0F);
RenderHelper.renderCylinder(event.getPoseStack(), buffer, pos.add(0, 1, 0), radius, 32, 0, 0, 1.0F);
RenderHelper.renderCylinder(event.getPoseStack(), buffer, pos, radius, 32, 0, 0, 1.0F);

RenderHelper.renderFloatingText(event.getPoseStack(), "睡觉区域", new Vec3(resetPos.getX(), resetPos.getY(), resetPos.getZ()), 0x1111ff, 0.1f, -10);
RenderHelper.renderFloatingText(event.getPoseStack(), "▼", new Vec3(resetPos.getX(), resetPos.getY(), resetPos.getZ()), 0x1111ff, 0.1f, 0);
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ public List<Component> getTooltips() {
int time = (int) (maid.level().getDayTime() % 24000L);
int hour = (time / 1000 + 6) % 24;
int minute = (time % 1000) * 60 / 1000;
Activity activity;
Activity activity = maid.getScheduleDetail();

List<Component> out = Lists.newArrayList();
out.add(Component.literal(String.format("§n%s§7 %s:%s", getScheduleTransText(), DECIMAL_FORMAT.format(hour), DECIMAL_FORMAT.format(minute))));
Expand All @@ -61,7 +61,6 @@ public List<Component> getTooltips() {
out.add(Component.literal(String.format("§a█ 00:00-24:00 %s", getActivityTransText(Activity.WORK))));
break;
case NIGHT:
activity = InitEntities.MAID_NIGHT_SHIFT_SCHEDULES.get().getActivityAt(time);
if (activity == Activity.WORK) {
out.add(Component.literal(String.format("§a█ 18:00-06:00 %s", getActivityTransText(Activity.WORK))));
} else {
Expand All @@ -82,7 +81,6 @@ public List<Component> getTooltips() {
break;
case DAY:
default:
activity = InitEntities.MAID_DAY_SHIFT_SCHEDULES.get().getActivityAt(time);
if (activity == Activity.WORK) {
out.add(Component.literal(String.format("§a█ 06:00-18:00 %s", getActivityTransText(Activity.WORK))));
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,9 +60,21 @@ private static void maidConfig(ConfigBuilder root, ConfigEntryBuilder entryBuild
.setDefaultValue(Items.STRUCTURE_VOID).setTooltip(Component.translatable("config.touhou_little_maid.maid.maid_ntr_item.desc"))
.setSaveConsumer(s -> MaidConfig.MAID_NTR_ITEM.set(ForgeRegistries.ITEMS.getKey(s).toString())).build());

maid.addEntry(entryBuilder.startIntSlider(Component.translatable("config.touhou_little_maid.maid.maid_home_range.name"), MaidConfig.MAID_HOME_RANGE.get(), 3, 64)
.setDefaultValue(8).setTooltip(Component.translatable("config.touhou_little_maid.maid.maid_home_range.desc"))
.setSaveConsumer(i -> MaidConfig.MAID_HOME_RANGE.set(i)).build());
maid.addEntry(entryBuilder.startIntSlider(Component.translatable("config.touhou_little_maid.maid.maid_work_range.name"), MaidConfig.MAID_WORK_RANGE.get(), 3, 64)
.setDefaultValue(12).setTooltip(Component.translatable("config.touhou_little_maid.maid.maid_work_range.desc"))
.setSaveConsumer(i -> MaidConfig.MAID_WORK_RANGE.set(i)).build());

maid.addEntry(entryBuilder.startIntSlider(Component.translatable("config.touhou_little_maid.maid.maid_idle_range.name"), MaidConfig.MAID_IDLE_RANGE.get(), 3, 32)
.setDefaultValue(6).setTooltip(Component.translatable("config.touhou_little_maid.maid.maid_idle_range.desc"))
.setSaveConsumer(i -> MaidConfig.MAID_IDLE_RANGE.set(i)).build());

maid.addEntry(entryBuilder.startIntSlider(Component.translatable("config.touhou_little_maid.maid.maid_sleep_range.name"), MaidConfig.MAID_SLEEP_RANGE.get(), 3, 32)
.setDefaultValue(6).setTooltip(Component.translatable("config.touhou_little_maid.maid.maid_sleep_range.desc"))
.setSaveConsumer(i -> MaidConfig.MAID_SLEEP_RANGE.set(i)).build());

maid.addEntry(entryBuilder.startIntSlider(Component.translatable("config.touhou_little_maid.maid.maid_non_home_range.name"), MaidConfig.MAID_NON_HOME_RANGE.get(), 3, 32)
.setDefaultValue(8).setTooltip(Component.translatable("config.touhou_little_maid.maid.maid_non_home_range.desc"))
.setSaveConsumer(i -> MaidConfig.MAID_NON_HOME_RANGE.set(i)).build());

maid.addEntry(entryBuilder.startBooleanToggle(Component.translatable("config.touhou_little_maid.maid.maid_change_model.name"), MaidConfig.MAID_CHANGE_MODEL.get())
.setDefaultValue(true).setTooltip(Component.translatable("config.touhou_little_maid.maid.maid_change_model.desc"))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,7 @@

import com.github.tartaricacid.touhoulittlemaid.TouhouLittleMaid;
import com.github.tartaricacid.touhoulittlemaid.api.task.IMaidTask;
import com.github.tartaricacid.touhoulittlemaid.entity.ai.brain.MaidSchedule;
import com.github.tartaricacid.touhoulittlemaid.entity.passive.EntityMaid;
import com.github.tartaricacid.touhoulittlemaid.init.InitEntities;
import net.minecraft.ChatFormatting;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.MutableComponent;
Expand Down Expand Up @@ -40,19 +38,7 @@ public ResourceLocation getUid() {
}

private MutableComponent getActivityTransText(EntityMaid maid) {
MaidSchedule schedule = maid.getSchedule();
int time = (int) (maid.level().getDayTime() % 24000L);
switch (schedule) {
case ALL -> {
return getActivityTransText(Activity.WORK);
}
case NIGHT -> {
return getActivityTransText(InitEntities.MAID_NIGHT_SHIFT_SCHEDULES.get().getActivityAt(time));
}
default -> {
return getActivityTransText(InitEntities.MAID_DAY_SHIFT_SCHEDULES.get().getActivityAt(time));
}
}
return getActivityTransText(maid.getScheduleDetail());
}

private MutableComponent getActivityTransText(Activity activity) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,7 @@

import com.github.tartaricacid.touhoulittlemaid.TouhouLittleMaid;
import com.github.tartaricacid.touhoulittlemaid.api.task.IMaidTask;
import com.github.tartaricacid.touhoulittlemaid.entity.ai.brain.MaidSchedule;
import com.github.tartaricacid.touhoulittlemaid.entity.passive.EntityMaid;
import com.github.tartaricacid.touhoulittlemaid.init.InitEntities;
import mcjty.theoneprobe.api.*;
import net.minecraft.ChatFormatting;
import net.minecraft.network.chat.Component;
Expand Down Expand Up @@ -48,19 +46,7 @@ public String getID() {
}

private MutableComponent getActivityTransText(EntityMaid maid) {
MaidSchedule schedule = maid.getSchedule();
int time = (int) (maid.level().getDayTime() % 24000L);
switch (schedule) {
case ALL -> {
return getActivityTransText(Activity.WORK);
}
case NIGHT -> {
return getActivityTransText(InitEntities.MAID_NIGHT_SHIFT_SCHEDULES.get().getActivityAt(time));
}
default -> {
return getActivityTransText(InitEntities.MAID_DAY_SHIFT_SCHEDULES.get().getActivityAt(time));
}
}
return getActivityTransText(maid.getScheduleDetail());
}

private MutableComponent getActivityTransText(Activity activity) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,10 @@ public final class MaidConfig {
public static ForgeConfigSpec.ConfigValue<String> MAID_TAMED_ITEM;
public static ForgeConfigSpec.ConfigValue<String> MAID_TEMPTATION_ITEM;
public static ForgeConfigSpec.ConfigValue<String> MAID_NTR_ITEM;
public static ForgeConfigSpec.IntValue MAID_HOME_RANGE;
public static ForgeConfigSpec.IntValue MAID_WORK_RANGE;
public static ForgeConfigSpec.IntValue MAID_IDLE_RANGE;
public static ForgeConfigSpec.IntValue MAID_SLEEP_RANGE;
public static ForgeConfigSpec.IntValue MAID_NON_HOME_RANGE;
public static ForgeConfigSpec.BooleanValue MAID_CHANGE_MODEL;
public static ForgeConfigSpec.IntValue OWNER_MAX_MAID_NUM;
public static ForgeConfigSpec.ConfigValue<List<String>> MAID_RANGED_ATTACK_IGNORE;
Expand All @@ -27,8 +30,17 @@ public static void init(ForgeConfigSpec.Builder builder) {
builder.comment("The item that can NTR maid", "Use the registered name of the item directly or write tag name with # as prefix");
MAID_NTR_ITEM = builder.define("MaidNtrItem", "minecraft:structure_void");

builder.comment("The max range of maid home mode");
MAID_HOME_RANGE = builder.defineInRange("MaidHomeRange", 12, 3, 64);
builder.comment("The max range of maid work mode");
MAID_WORK_RANGE = builder.defineInRange("MaidWorkRange", 12, 3, 64);

builder.comment("The max range of maid idle mode");
MAID_IDLE_RANGE = builder.defineInRange("MaidIdleRange", 6, 3, 32);

builder.comment("The max range of maid sleep mode");
MAID_SLEEP_RANGE = builder.defineInRange("MaidSleepRange", 6, 3, 32);

builder.comment("The max range of maid's Non-Home mode");
MAID_NON_HOME_RANGE = builder.defineInRange("MaidNonHomeRange", 8, 3, 32);

builder.comment("Maid can switch models freely");
MAID_CHANGE_MODEL = builder.define("MaidChangeModel", true);
Expand Down
Loading

0 comments on commit 066d2da

Please sign in to comment.