Skip to content

Commit

Permalink
完成一部分迁移内容
Browse files Browse the repository at this point in the history
  • Loading branch information
TartaricAcid committed Dec 16, 2023
1 parent 3fa1cb5 commit 35d38a7
Show file tree
Hide file tree
Showing 52 changed files with 1,401 additions and 300 deletions.
Original file line number Diff line number Diff line change
@@ -1,15 +1,16 @@
package com.github.tartaricacid.touhoulittlemaid.api.backpack;

import com.github.tartaricacid.touhoulittlemaid.entity.passive.EntityMaid;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.world.inventory.ContainerData;

public interface IBackpackData {
ContainerData getDataAccess();

void load(CompoundTag tag, EntityMaid maid);
void load(CompoundNBT tag, EntityMaid maid);

void save(CompoundTag tag, EntityMaid maid);
void save(CompoundNBT tag, EntityMaid maid);

void serverTick(EntityMaid maid);
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.github.tartaricacid.touhoulittlemaid.entity.ai.brain;

import com.github.tartaricacid.touhoulittlemaid.entity.ai.brain.task.*;
import com.github.tartaricacid.touhoulittlemaid.entity.item.EntitySit;
import com.github.tartaricacid.touhoulittlemaid.entity.passive.EntityMaid;
import com.github.tartaricacid.touhoulittlemaid.init.InitEntities;
import com.google.common.collect.ImmutableList;
Expand Down Expand Up @@ -97,13 +98,15 @@ private static void registerIdleGoals(Brain<EntityMaid> brain) {
Pair<Task<? super EntityMaid>, Integer> walkRandomly = Pair.of(new WalkRandomlyTask(0.3f, 5, 3), 1);
Pair<Task<? super EntityMaid>, Integer> noLook = Pair.of(new DummyTask(40, 80), 2);
FirstShuffledTask<EntityMaid> firstShuffledTask = new FirstShuffledTask<>(ImmutableList.of(lookToPlayer, lookToMaid, lookToWolf, lookToCat, lookToParrot, walkRandomly, noLook));
SupplementedTask<EntityMaid> supplementedTask = new SupplementedTask<>(e -> !e.isBegging(), firstShuffledTask);
SupplementedTask<EntityMaid> supplementedTask = new SupplementedTask<>(MaidBrain::lookAroundCondition, firstShuffledTask);

Pair<Integer, Task<? super EntityMaid>> beg = Pair.of(5, new MaidBegTask());
Pair<Integer, Task<? super EntityMaid>> supplemented = Pair.of(6, supplementedTask);
Pair<Integer, Task<? super EntityMaid>> findJoy = Pair.of(6, new MaidFindJoyTask(0.6f, 12));
Pair<Integer, Task<? super EntityMaid>> sitJoy = Pair.of(7, new MaidSitJoyTask());
Pair<Integer, Task<? super EntityMaid>> supplemented = Pair.of(10, supplementedTask);
Pair<Integer, Task<? super EntityMaid>> updateActivity = Pair.of(99, new UpdateActivityTask());

brain.addActivity(Activity.IDLE, ImmutableList.of(beg, supplemented, updateActivity));
brain.addActivity(Activity.IDLE, ImmutableList.of(beg, findJoy, sitJoy, supplemented, updateActivity));
}

private static void registerWorkGoals(Brain<EntityMaid> brain, EntityMaid maid) {
Expand Down Expand Up @@ -142,10 +145,14 @@ private static void registerAwaitGoals(Brain<EntityMaid> brain) {
Pair<Task<? super EntityMaid>, Integer> lookToParrot = Pair.of(new LookAtEntityTask(EntityType.PARROT, 5), 1);
Pair<Task<? super EntityMaid>, Integer> noLook = Pair.of(new DummyTask(30, 60), 2);

Pair<Integer, Task<? super EntityMaid>> shuffled = Pair.of(5, new FirstShuffledTask<>(
ImmutableList.of(lookToPlayer, lookToMaid, lookToWolf, lookToCat, lookToParrot, noLook)));
FirstShuffledTask<EntityMaid> firstShuffledTask = new FirstShuffledTask<>(ImmutableList.of(lookToPlayer, lookToMaid, lookToWolf, lookToCat, lookToParrot, noLook));
Pair<Integer, Task<? super EntityMaid>> shuffled = Pair.of(5, new SupplementedTask<>(MaidBrain::lookAroundCondition, firstShuffledTask));
Pair<Integer, Task<? super EntityMaid>> updateActivity = Pair.of(99, new UpdateActivityTask());

brain.addActivity(Activity.RIDE, ImmutableList.of(shuffled, updateActivity));
}

public static boolean lookAroundCondition(EntityMaid maid) {
return !maid.isBegging() && !(maid.getVehicle() instanceof EntitySit);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package com.github.tartaricacid.touhoulittlemaid.entity.ai.brain.task;

import com.github.tartaricacid.touhoulittlemaid.block.BlockJoy;
import com.github.tartaricacid.touhoulittlemaid.entity.passive.EntityMaid;
import com.github.tartaricacid.touhoulittlemaid.tileentity.TileEntityGomoku;
import net.minecraft.block.BlockState;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.server.ServerWorld;

public class MaidFindGomokuTask extends MaidMoveToBlockTask {
public MaidFindGomokuTask(float movementSpeed, int searchLength) {
super(movementSpeed, searchLength);
}

@Override
protected boolean shouldMoveTo(ServerWorld worldIn, EntityMaid entityIn, BlockPos pos) {
BlockState blockstate = worldIn.getBlockState(pos);
return blockstate.getBlock() instanceof BlockJoy && !this.isOccupied(worldIn, pos);
}

@Override
protected void start(ServerWorld worldIn, EntityMaid maid, long gameTimeIn) {
if (maid.getVehicle() == null && !maid.isInSittingPose()) {
this.searchForDestination(worldIn, maid);
}
}

private boolean isOccupied(ServerWorld worldIn, BlockPos pos) {
TileEntity te = worldIn.getBlockEntity(pos);
if (te instanceof TileEntityGomoku) {
TileEntityGomoku gomoku = (TileEntityGomoku) te;
return worldIn.getEntity(gomoku.getSitId()) != null;
}
return true;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package com.github.tartaricacid.touhoulittlemaid.entity.ai.brain.task;

import com.github.tartaricacid.touhoulittlemaid.block.BlockJoy;
import com.github.tartaricacid.touhoulittlemaid.entity.passive.EntityMaid;
import com.github.tartaricacid.touhoulittlemaid.tileentity.TileEntityJoy;
import net.minecraft.block.BlockState;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.server.ServerWorld;

public class MaidFindJoyTask extends MaidMoveToBlockTask {
public MaidFindJoyTask(float movementSpeed, int searchLength) {
super(movementSpeed, searchLength);
}

@Override
protected boolean shouldMoveTo(ServerWorld worldIn, EntityMaid entityIn, BlockPos pos) {
BlockState blockstate = worldIn.getBlockState(pos);
return blockstate.getBlock() instanceof BlockJoy && !this.isOccupied(worldIn, pos);
}

@Override
protected void start(ServerWorld worldIn, EntityMaid maid, long gameTimeIn) {
if (maid.getVehicle() == null && !maid.isInSittingPose()) {
this.searchForDestination(worldIn, maid);
}
}

private boolean isOccupied(ServerWorld worldIn, BlockPos pos) {
TileEntity te = worldIn.getBlockEntity(pos);
if (te instanceof TileEntityJoy) {
TileEntityJoy joy = (TileEntityJoy) te;
return worldIn.getEntity(joy.getSitId()) != null;
}
return true;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
package com.github.tartaricacid.touhoulittlemaid.entity.ai.brain.task;

import com.github.tartaricacid.touhoulittlemaid.block.BlockJoy;
import com.github.tartaricacid.touhoulittlemaid.entity.passive.EntityMaid;
import com.github.tartaricacid.touhoulittlemaid.init.InitEntities;
import com.github.tartaricacid.touhoulittlemaid.tileentity.TileEntityJoy;
import com.google.common.collect.ImmutableMap;
import net.minecraft.block.BlockState;
import net.minecraft.entity.ai.brain.Brain;
import net.minecraft.entity.ai.brain.memory.MemoryModuleStatus;
import net.minecraft.entity.ai.brain.memory.MemoryModuleType;
import net.minecraft.entity.ai.brain.memory.WalkTarget;
import net.minecraft.entity.ai.brain.task.Task;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.server.ServerWorld;

import java.util.Optional;

public class MaidSitJoyTask extends Task<EntityMaid> {
private static final int CLOSED_DISTANCE = 2;

public MaidSitJoyTask() {
super(ImmutableMap.of(InitEntities.TARGET_POS.get(), MemoryModuleStatus.VALUE_PRESENT));
}

@Override
protected boolean checkExtraStartConditions(ServerWorld worldIn, EntityMaid owner) {
Brain<EntityMaid> brain = owner.getBrain();
if (owner.getVehicle() != null && owner.isInSittingPose()) {
brain.eraseMemory(MemoryModuleType.PATH);
brain.eraseMemory(MemoryModuleType.WALK_TARGET);
brain.eraseMemory(MemoryModuleType.LOOK_TARGET);
return false;
}
return brain.getMemory(InitEntities.TARGET_POS.get()).map(targetPos -> {
BlockPos blockPos = targetPos.currentBlockPosition();
if (!blockPos.closerThan(owner.blockPosition(), CLOSED_DISTANCE)) {
Optional<WalkTarget> walkTarget = brain.getMemory(MemoryModuleType.WALK_TARGET);
if (!walkTarget.isPresent() || !walkTarget.get().getTarget().currentBlockPosition().equals(blockPos)) {
brain.eraseMemory(InitEntities.TARGET_POS.get());
}
return false;
}
BlockState blockstate = worldIn.getBlockState(blockPos);
return blockstate.getBlock() instanceof BlockJoy && !this.isOccupied(worldIn, blockPos);
}).orElse(false);
}

@Override
protected void start(ServerWorld worldIn, EntityMaid maid, long gameTimeIn) {
maid.getBrain().getMemory(InitEntities.TARGET_POS.get()).ifPresent((targetPos) -> {
BlockPos pos = targetPos.currentBlockPosition();
BlockState blockState = worldIn.getBlockState(pos);
if (blockState.getBlock() instanceof BlockJoy) {
BlockJoy blockJoy = (BlockJoy) blockState.getBlock();
blockJoy.startMaidSit(maid, blockState, worldIn, pos);
maid.getBrain().eraseMemory(InitEntities.TARGET_POS.get());
maid.getBrain().eraseMemory(MemoryModuleType.WALK_TARGET);
maid.getBrain().eraseMemory(MemoryModuleType.LOOK_TARGET);
}
});
}

private boolean isOccupied(ServerWorld worldIn, BlockPos pos) {
TileEntity te = worldIn.getBlockEntity(pos);
if (te instanceof TileEntityJoy) {
TileEntityJoy joy = (TileEntityJoy) te;
return worldIn.getEntity(joy.getSitId()) != null;
}
return true;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
import net.minecraft.client.model.geom.EntityModelSet;
import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.util.ResourceLocation;
import net.minecraft.world.MenuProvider;
import net.minecraft.world.entity.player.Inventory;
import net.minecraft.world.entity.player.Player;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import net.minecraft.client.model.geom.EntityModelSet;
import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.util.ResourceLocation;
import net.minecraft.world.MenuProvider;
import net.minecraft.world.entity.player.Inventory;
import net.minecraft.world.entity.player.Player;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
import net.minecraft.client.model.geom.EntityModelSet;
import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.util.ResourceLocation;
import net.minecraft.world.MenuProvider;
import net.minecraft.world.entity.player.Inventory;
import net.minecraft.world.entity.player.Player;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,18 +55,13 @@ public static AttributeModifierMap.MutableAttribute createFairyAttributes() {
@Override
protected void registerGoals() {
goalSelector.addGoal(0, new SwimGoal(this));
// TODO:待完成
// goalSelector.addGoal(0, new AvoidEntityGoal<>(this, EntityScarecrow.class, 10.0F, 1.0D, 1.2D));
goalSelector.addGoal(1, new FairyAttackGoal(this, 6.0, 1.0));
goalSelector.addGoal(2, new MoveTowardsRestrictionGoal(this, 1.0));
goalSelector.addGoal(3, new WaterAvoidingRandomWalkingGoal(this, 1.0));
goalSelector.addGoal(4, new LookAtGoal(this, PlayerEntity.class, 8.0F));
goalSelector.addGoal(5, new LookAtGoal(this, EntityMaid.class, 8.0F));
goalSelector.addGoal(6, new LookRandomlyGoal(this));

targetSelector.addGoal(1, new NearestAttackableTargetGoal<>(this, PlayerEntity.class, true));
targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, EntityMaid.class, 10, true,
false, e -> !e.isSleeping()));
targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, IronGolemEntity.class, true));
}

Expand Down
Loading

0 comments on commit 35d38a7

Please sign in to comment.