mirror of
https://github.com/Grasscutters/Grasscutter.git
synced 2025-12-15 08:25:21 +01:00
Arresting small creature support (#1150)
* Arresting small creature support * add InsectCaptureManager * use EnvAnimalGatherExcelConfigData.json * Update InsectCaptureManager.java
This commit is contained in:
@@ -11,6 +11,8 @@ import emu.grasscutter.game.ability.AbilityManager;
|
||||
import emu.grasscutter.game.avatar.Avatar;
|
||||
import emu.grasscutter.game.avatar.AvatarProfileData;
|
||||
import emu.grasscutter.game.avatar.AvatarStorage;
|
||||
import emu.grasscutter.game.entity.EntityMonster;
|
||||
import emu.grasscutter.game.entity.EntityVehicle;
|
||||
import emu.grasscutter.game.managers.DeforestationManager.DeforestationManager;
|
||||
import emu.grasscutter.game.entity.EntityGadget;
|
||||
import emu.grasscutter.game.entity.EntityItem;
|
||||
@@ -23,6 +25,7 @@ import emu.grasscutter.game.inventory.GameItem;
|
||||
import emu.grasscutter.game.inventory.Inventory;
|
||||
import emu.grasscutter.game.mail.Mail;
|
||||
import emu.grasscutter.game.mail.MailHandler;
|
||||
import emu.grasscutter.game.managers.InsectCaptureManager;
|
||||
import emu.grasscutter.game.managers.StaminaManager.StaminaManager;
|
||||
import emu.grasscutter.game.managers.SotSManager;
|
||||
import emu.grasscutter.game.managers.EnergyManager.EnergyManager;
|
||||
@@ -47,6 +50,7 @@ import emu.grasscutter.net.proto.OnlinePlayerInfoOuterClass.OnlinePlayerInfo;
|
||||
import emu.grasscutter.net.proto.PlayerLocationInfoOuterClass.PlayerLocationInfo;
|
||||
import emu.grasscutter.net.proto.ProfilePictureOuterClass.ProfilePicture;
|
||||
import emu.grasscutter.net.proto.SocialDetailOuterClass.SocialDetail;
|
||||
|
||||
import emu.grasscutter.server.event.player.PlayerJoinEvent;
|
||||
import emu.grasscutter.server.event.player.PlayerQuitEvent;
|
||||
import emu.grasscutter.server.game.GameServer;
|
||||
@@ -105,6 +109,7 @@ public class Player {
|
||||
@Transient private QuestManager questManager;
|
||||
|
||||
@Transient private SotSManager sotsManager;
|
||||
@Transient private InsectCaptureManager insectCaptureManager;
|
||||
|
||||
private TeamManager teamManager;
|
||||
|
||||
@@ -161,6 +166,7 @@ public class Player {
|
||||
this.towerManager = new TowerManager(this);
|
||||
this.abilityManager = new AbilityManager(this);
|
||||
this.deforestationManager = new DeforestationManager(this);
|
||||
this.insectCaptureManager = new InsectCaptureManager(this);
|
||||
|
||||
this.setQuestManager(new QuestManager(this));
|
||||
this.pos = new Position();
|
||||
@@ -907,47 +913,46 @@ public class Player {
|
||||
|
||||
public void interactWith(int gadgetEntityId) {
|
||||
GameEntity entity = getScene().getEntityById(gadgetEntityId);
|
||||
|
||||
if (entity == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Handle
|
||||
if (entity instanceof EntityItem) {
|
||||
if (entity instanceof EntityItem drop) {
|
||||
// Pick item
|
||||
EntityItem drop = (EntityItem) entity;
|
||||
if (!drop.isShare()) // check drop owner to avoid someone picked up item in others' world
|
||||
{
|
||||
int dropOwner = (int)(drop.getGuid() >> 32);
|
||||
if (dropOwner != getUid())
|
||||
if (dropOwner != getUid()) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
entity.getScene().removeEntity(entity);
|
||||
GameItem item = new GameItem(drop.getItemData(), drop.getCount());
|
||||
// Add to inventory
|
||||
boolean success = getInventory().addItem(item, ActionReason.SubfieldDrop);
|
||||
if (success) {
|
||||
if (!drop.isShare()) // not shared drop
|
||||
if (!drop.isShare()) { // not shared drop
|
||||
this.sendPacket(new PacketGadgetInteractRsp(drop, InteractType.INTERACT_TYPE_PICK_ITEM));
|
||||
else
|
||||
}else{
|
||||
this.getScene().broadcastPacket(new PacketGadgetInteractRsp(drop, InteractType.INTERACT_TYPE_PICK_ITEM));
|
||||
}
|
||||
}
|
||||
} else if (entity instanceof EntityGadget) {
|
||||
EntityGadget gadget = (EntityGadget) entity;
|
||||
|
||||
} else if (entity instanceof EntityGadget gadget) {
|
||||
if (gadget.getGadgetData().getType() == EntityType.RewardStatue) {
|
||||
if (scene.getChallenge() != null) {
|
||||
scene.getChallenge().getStatueDrops(this);
|
||||
}
|
||||
|
||||
this.sendPacket(new PacketGadgetInteractRsp(gadget, InteractType.INTERACT_TYPE_OPEN_STATUE));
|
||||
}
|
||||
} else if (entity instanceof EntityMonster monster) {
|
||||
insectCaptureManager.arrestSmallCreature(monster);
|
||||
} else if (entity instanceof EntityVehicle vehicle) {// try to arrest it, example: glowworm
|
||||
insectCaptureManager.arrestSmallCreature(vehicle);
|
||||
} else {
|
||||
// Delete directly
|
||||
entity.getScene().removeEntity(entity);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
public void onPause() {
|
||||
|
||||
Reference in New Issue
Block a user