Skip to content

Commit

Permalink
Added equip and unequip commands
Browse files Browse the repository at this point in the history
  • Loading branch information
rbasamoyai committed Nov 25, 2021
1 parent e1f7499 commit 9f96788
Show file tree
Hide file tree
Showing 32 changed files with 433 additions and 195 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
import net.minecraftforge.client.event.TextureStitchEvent;
import net.minecraftforge.event.entity.EntityAttributeCreationEvent;
import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.DistExecutor;
import net.minecraftforge.fml.ModLoadingContext;
import net.minecraftforge.fml.client.registry.ClientRegistry;
Expand Down Expand Up @@ -81,8 +80,7 @@ public IndustrialWarfare() {

ModLoadingContext.get().registerConfig(Type.SERVER, IWConfig.SPEC, "industrialwarfare-server.toml");
}

@SubscribeEvent

public void commonSetup(FMLCommonSetupEvent event) {
IWNetwork initNetwork = new IWNetwork();
initNetwork.init();
Expand All @@ -92,7 +90,6 @@ public void commonSetup(FMLCommonSetupEvent event) {
capHandler.addCapabilityListeners();
}

@SubscribeEvent
public void clientSetup(FMLClientSetupEvent event) {
ScreenManager.register(ContainerInit.DIPLOMACY.get(), DiplomacyScreen::new);
ScreenManager.register(ContainerInit.EDIT_LABEL.get(), EditLabelScreen::new);
Expand All @@ -109,7 +106,6 @@ public void clientSetup(FMLClientSetupEvent event) {
KeyBindingsInit.register();
}

@SubscribeEvent
public void addTexturesToStitcher(TextureStitchEvent.Pre event) {
event.addSprite(new ResourceLocation(MOD_ID, "item/task_icon"));
event.addSprite(new ResourceLocation(MOD_ID, "item/schedule_icon"));
Expand All @@ -119,7 +115,6 @@ public void addTexturesToStitcher(TextureStitchEvent.Pre event) {
event.addSprite(new ResourceLocation(MOD_ID, "entity/task_scroll"));
}

@SubscribeEvent
public void addEntityAttributes(EntityAttributeCreationEvent event) {
event.put(EntityTypeInit.NPC.get(), NPCEntity.setAttributes().build());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import net.minecraft.client.Minecraft;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.client.event.InputEvent;
import net.minecraftforge.event.TickEvent.ClientTickEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.Mod.EventBusSubscriber.Bus;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import rbasamoyai.industrialwarfare.IndustrialWarfare;
import rbasamoyai.industrialwarfare.common.capabilities.entities.npc.NPCDataCapability;
import rbasamoyai.industrialwarfare.common.capabilities.entities.npc.NPCDataProvider;
import rbasamoyai.industrialwarfare.common.capabilities.itemstacks.firearmitem.FirearmItemDataCapability;
import rbasamoyai.industrialwarfare.common.capabilities.itemstacks.label.LabelItemDataCapability;
import rbasamoyai.industrialwarfare.common.capabilities.itemstacks.partitem.PartItemDataCapability;
import rbasamoyai.industrialwarfare.common.capabilities.itemstacks.qualityitem.QualityItemDataCapability;
Expand All @@ -31,6 +32,7 @@ public void registerCapabilities() {

QualityItemDataCapability.register();
PartItemDataCapability.register();
FirearmItemDataCapability.register();
RecipeItemDataCapability.register();
TaskScrollDataCapability.register();
LabelItemDataCapability.register();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,23 +17,21 @@ public class PartItemDataCapability {
public static Capability<IPartItemDataHandler> PART_ITEM_DATA_CAPABILITY = null;

public static void register() {
CapabilityManager.INSTANCE.register(IPartItemDataHandler.class, new Storage(), PartItemDataHandler::new);
CapabilityManager.INSTANCE.register(IPartItemDataHandler.class, new Storage<>(), PartItemDataHandler::new);
}

public static class Storage extends QualityItemDataCapability.Storage<IPartItemDataHandler> {
public static class Storage<T extends IPartItemDataHandler> extends QualityItemDataCapability.Storage<T> {

@Override
public INBT writeNBT(Capability<IPartItemDataHandler> capability, IPartItemDataHandler instance,
Direction side) {
public INBT writeNBT(Capability<T> capability, T instance, Direction side) {
CompoundNBT tag = (CompoundNBT) super.writeNBT(capability, instance, side);
tag.putInt(TAG_PART_COUNT, instance.getPartCount());
tag.putFloat(TAG_WEIGHT, instance.getWeight());
return tag;
}

@Override
public void readNBT(Capability<IPartItemDataHandler> capability, IPartItemDataHandler instance, Direction side,
INBT nbt) {
public void readNBT(Capability<T> capability, T instance, Direction side, INBT nbt) {
super.readNBT(capability, instance, side, nbt);
CompoundNBT tag = (CompoundNBT) nbt;
instance.setPartCount(tag.getInt(TAG_PART_COUNT));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ public class QualityItemDataCapability {
public static Capability<IQualityItemDataHandler> QUALITY_ITEM_DATA_CAPABILITY = null;

public static void register() {
CapabilityManager.INSTANCE.register(IQualityItemDataHandler.class, new Storage<IQualityItemDataHandler>(), QualityItemDataHandler::new);
CapabilityManager.INSTANCE.register(IQualityItemDataHandler.class, new Storage<>(), QualityItemDataHandler::new);
}

public static class Storage<T extends IQualityItemDataHandler> implements IStorage<T> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,20 +16,20 @@ public class RecipeItemDataCapability {
public static Capability<IRecipeItemDataHandler> RECIPE_ITEM_DATA_CAPABILITY = null;

public static void register() {
CapabilityManager.INSTANCE.register(IRecipeItemDataHandler.class, new Storage(), RecipeItemDataHandler::new);
CapabilityManager.INSTANCE.register(IRecipeItemDataHandler.class, new Storage<>(), RecipeItemDataHandler::new);
}

public static class Storage extends QualityItemDataCapability.Storage<IRecipeItemDataHandler> {
public static class Storage<T extends IRecipeItemDataHandler> extends QualityItemDataCapability.Storage<T> {

@Override
public INBT writeNBT(Capability<IRecipeItemDataHandler> capability, IRecipeItemDataHandler instance, Direction side) {
public INBT writeNBT(Capability<T> capability, T instance, Direction side) {
CompoundNBT tag = (CompoundNBT) super.writeNBT(capability, instance, side);
tag.putString(TAG_RECIPE_ITEM, instance.getItemId().toString());
return tag;
}

@Override
public void readNBT(Capability<IRecipeItemDataHandler> capability, IRecipeItemDataHandler instance, Direction side, INBT nbt) {
public void readNBT(Capability<T> capability, T instance, Direction side, INBT nbt) {
super.readNBT(capability, instance, side, nbt);
CompoundNBT tag = (CompoundNBT) nbt;
instance.setItemId(tag.getString(TAG_RECIPE_ITEM));
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -383,6 +383,7 @@ public void performRangedAttack(LivingEntity target, float damage) {

if (weaponItem instanceof BowItem) {
this.shootUsingBow(target);
weapon.hurtAndBreak(1, this, npc -> this.broadcastBreakEvent(this.getUsedItemHand()));
this.stopUsingItem();
} else if (weaponItem instanceof CrossbowItem) {
this.shootUsingCrossbow(target);
Expand All @@ -399,7 +400,8 @@ public void performRangedAttack(LivingEntity target, float damage) {
* Code based on {@link net.minecraft.entity.monster.AbstractSkeletonEntity#performRangedAttack AbstractSkeletonEntity#performRangedAttack}
*/
private void shootUsingBow(LivingEntity target) {
ItemStack projectile = this.getProjectile(this.getItemInHand(ProjectileHelper.getWeaponHoldingHand(this, item -> item instanceof BowItem)));
ItemStack bow = this.getItemInHand(ProjectileHelper.getWeaponHoldingHand(this, item -> item instanceof BowItem));
ItemStack projectile = this.getProjectile(bow);
AbstractArrowEntity arrow = ProjectileHelper.getMobArrow(this, projectile, BowItem.getPowerForTime(this.getTicksUsingItem()));
Item mainhandItem = this.getMainHandItem().getItem();
if (mainhandItem instanceof BowItem) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@
import rbasamoyai.industrialwarfare.common.items.taskscroll.TaskScrollOrder;
import rbasamoyai.industrialwarfare.core.init.MemoryModuleTypeInit;
import rbasamoyai.industrialwarfare.core.init.NPCComplaintInit;
import rbasamoyai.industrialwarfare.utils.ArgUtils;
import rbasamoyai.industrialwarfare.utils.CommandUtils;

public class DepositAtCommand extends TaskScrollCommand {
Expand Down Expand Up @@ -80,7 +79,7 @@ public void tick(ServerWorld world, NPCEntity npc, long gameTime, TaskScrollOrde

ItemStackHandler npcInv = npc.getInventoryItemHandler();
for (int i = 0; i < npcInv.getSlots(); i++) {
if (!ArgUtils.filterMatches(filter, npcInv.getStackInSlot(i))) continue;
if (!CommandUtils.filterMatches(filter, npcInv.getStackInSlot(i))) continue;

ItemStack depositItem = npcInv.extractItem(i, flag ? npcInv.getSlotLimit(i) : count, false);
for (int j = 0; j < blockInv.getSlots(); j++) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
package rbasamoyai.industrialwarfare.common.entityai.taskscrollcmds;

import com.google.common.collect.ImmutableMap;

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.inventory.EquipmentSlotType;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.Direction;
import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.server.ServerWorld;
import net.minecraftforge.common.util.LazyOptional;
import net.minecraftforge.items.CapabilityItemHandler;
import net.minecraftforge.items.IItemHandler;
import rbasamoyai.industrialwarfare.common.capabilities.entities.npc.INPCDataHandler;
import rbasamoyai.industrialwarfare.common.containers.npcs.EquipmentItemHandler;
import rbasamoyai.industrialwarfare.common.entities.NPCEntity;
import rbasamoyai.industrialwarfare.common.entityai.taskscrollcmds.commandtree.CommandTrees;
import rbasamoyai.industrialwarfare.common.items.taskscroll.TaskScrollOrder;
import rbasamoyai.industrialwarfare.core.init.MemoryModuleTypeInit;
import rbasamoyai.industrialwarfare.core.init.NPCComplaintInit;
import rbasamoyai.industrialwarfare.utils.CommandUtils;

public class EquipCommand extends TaskScrollCommand {

private static final int POS_ARG_INDEX = 0;
private static final int EQUIP_ITEM_ARG_INDEX = 1;
private static final int EQUIP_SLOT_ARG_INDEX = 2;
private static final int ACCESS_SIDE_ARG_INDEX = 3;

public EquipCommand() {
super(CommandTrees.EQUIP, () -> ImmutableMap.of(
MemoryModuleType.LOOK_TARGET, MemoryModuleStatus.REGISTERED,
MemoryModuleType.WALK_TARGET, MemoryModuleStatus.REGISTERED
));
}

@Override
public boolean checkExtraStartConditions(ServerWorld world, NPCEntity npc, TaskScrollOrder order) {
EquipmentSlotType type = CommandUtils.equipmentSlotTypeFromFilterFlag(order.getWrappedArg(EQUIP_SLOT_ARG_INDEX).getArgNum());
boolean canWearEquipment = npc.getDataHandler().map(INPCDataHandler::canWearEquipment).orElse(false);

if (type.getType() == EquipmentSlotType.Group.ARMOR && !canWearEquipment) {
CommandUtils.complain(npc, NPCComplaintInit.CANT_WEAR_ARMOR.get());
return false;
}

return CommandUtils.validatePos(world, npc, order.getWrappedArg(POS_ARG_INDEX).getPos(), TaskScrollCommand.MAX_DISTANCE_FROM_POI, NPCComplaintInit.INVALID_ORDER.get());
}

@Override
public void start(ServerWorld world, NPCEntity npc, long gameTime, TaskScrollOrder order) {
CommandUtils.trySetInterfaceWalkTarget(world, npc, order.getWrappedArg(POS_ARG_INDEX).getPos().get(), TaskScrollCommand.SPEED_MODIFIER, TaskScrollCommand.CLOSE_ENOUGH_DIST);
}

@Override
public void tick(ServerWorld world, NPCEntity npc, long gameTime, TaskScrollOrder order) {
Brain<?> brain = npc.getBrain();
BlockPos pos = order.getWrappedArg(POS_ARG_INDEX).getPos().orElse(BlockPos.ZERO);
AxisAlignedBB box = new AxisAlignedBB(pos.offset(-1, -2, -1), pos.offset(2, 1, 2));

if (!box.contains(npc.position())) {
if (npc.getNavigation().isDone()) {
CommandUtils.trySetInterfaceWalkTarget(world, npc, pos, TaskScrollCommand.SPEED_MODIFIER, TaskScrollCommand.CLOSE_ENOUGH_DIST);
}
return;
}

TileEntity te = world.getBlockEntity(pos);
if (te == null) {
brain.setMemory(MemoryModuleTypeInit.COMPLAINT.get(), NPCComplaintInit.NOTHING_HERE.get());
return;
}

Direction side = Direction.from3DDataValue(order.getWrappedArg(ACCESS_SIDE_ARG_INDEX).getArgNum());
LazyOptional<IItemHandler> lzop = te.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, side);
if (!lzop.isPresent()) {
brain.setMemory(MemoryModuleTypeInit.COMPLAINT.get(), NPCComplaintInit.CANT_OPEN.get());
return;
}
IItemHandler blockInv = lzop.resolve().get();

EquipmentSlotType type = CommandUtils.equipmentSlotTypeFromFilterFlag(order.getWrappedArg(EQUIP_SLOT_ARG_INDEX).getArgNum());

ItemStack filter = order.getWrappedArg(EQUIP_ITEM_ARG_INDEX).getItem().orElse(ItemStack.EMPTY);
for (int i = 0; i < blockInv.getSlots(); i++) {
if (!CommandUtils.filterMatches(filter, blockInv.getStackInSlot(i))) continue;

ItemStack takeItem = blockInv.extractItem(i, blockInv.getSlotLimit(i), false);
int slot = EquipmentItemHandler.getTypeSlot(type);
EquipmentItemHandler npcEquipment = npc.getEquipmentItemHandler();
ItemStack insertItem = npcEquipment.extractItem(slot, npcEquipment.getSlotLimit(slot), false);

npcEquipment.insertItem(slot, takeItem, false);
blockInv.insertItem(i, insertItem, false);
break;
}
brain.setMemory(MemoryModuleTypeInit.STOP_EXECUTION.get(), true);
}

@Override
public void stop(ServerWorld world, NPCEntity npc, long gameTime, TaskScrollOrder order) {
if (!CommandUtils.hasComplaint(npc)) {
CommandUtils.incrementCurrentInstructionIndexMemory(npc);
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
import rbasamoyai.industrialwarfare.common.items.taskscroll.TaskScrollOrder;
import rbasamoyai.industrialwarfare.core.init.MemoryModuleTypeInit;
import rbasamoyai.industrialwarfare.core.init.NPCComplaintInit;
import rbasamoyai.industrialwarfare.utils.ArgUtils;
import rbasamoyai.industrialwarfare.utils.CommandUtils;

public class JumpToCommand extends TaskScrollCommand {

Expand Down Expand Up @@ -60,11 +60,11 @@ public void start(ServerWorld world, NPCEntity npc, long gameTime, TaskScrollOrd

ItemStack mainhand = npc.getItemInHand(Hand.MAIN_HAND);
ItemStack offhand = npc.getItemInHand(Hand.OFF_HAND);
if (ArgUtils.filterMatches(filter, mainhand)) {
if (CommandUtils.filterMatches(filter, mainhand)) {
itemCount += mainhand.getCount();
hasItems = true;
}
if (ArgUtils.filterMatches(filter, offhand)) {
if (CommandUtils.filterMatches(filter, offhand)) {
itemCount += offhand.getCount();
hasItems = true;
}
Expand All @@ -73,7 +73,7 @@ public void start(ServerWorld world, NPCEntity npc, long gameTime, TaskScrollOrd
IItemHandler npcInv = npc.getInventoryItemHandler();
for (int i = 0; i < npcInv.getSlots(); i++) {
ItemStack stack = npcInv.getStackInSlot(i);
if (!ArgUtils.filterMatches(filter, stack)) continue;
if (!CommandUtils.filterMatches(filter, stack)) continue;
hasItems = true;
itemCount += stack.getCount();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@
import rbasamoyai.industrialwarfare.common.items.taskscroll.TaskScrollOrder;
import rbasamoyai.industrialwarfare.core.init.MemoryModuleTypeInit;
import rbasamoyai.industrialwarfare.core.init.NPCComplaintInit;
import rbasamoyai.industrialwarfare.utils.ArgUtils;
import rbasamoyai.industrialwarfare.utils.CommandUtils;

public class TakeFromCommand extends TaskScrollCommand {
Expand Down Expand Up @@ -80,7 +79,7 @@ public void tick(ServerWorld world, NPCEntity npc, long gameTime, TaskScrollOrde

ItemStackHandler npcInv = npc.getInventoryItemHandler();
for (int i = 0; i < blockInv.getSlots(); i++) {
if (!ArgUtils.filterMatches(filter, blockInv.getStackInSlot(i))) continue;
if (!CommandUtils.filterMatches(filter, blockInv.getStackInSlot(i))) continue;

ItemStack takeItem = blockInv.extractItem(i, flag ? blockInv.getSlotLimit(i) : count, false);
for (int j = 0; j < npcInv.getSlots(); j++) {
Expand Down
Loading

0 comments on commit 9f96788

Please sign in to comment.