EncounterManagerSystems class
Пакет: com.hypixel.hytale.builtin.encountermanager
Файл: com/hypixel/hytale/builtin/encountermanager/EncounterManagerSystems.java
Поля (44)
| Модификаторы | Тип | Имя |
|---|---|---|
final |
ThreadLocal<List<Ref<EntityStore>>> |
ENTITY_LIST |
|
|
break |
|
private final Set<Dependency<EntityStore>> |
dependencies |
|
private final Set<Dependency<EntityStore>> |
dependencies |
|
private final Set<Dependency<EntityStore>> |
dependencies |
|
private final Set<Dependency<EntityStore>> |
dependencies |
|
private final Set<Dependency<EntityStore>> |
dependencies |
|
private final ComponentType<EntityStore, EncounterManager> |
encounterComponentType |
|
private final ComponentType<EntityStore, EncounterManager> |
encounterComponentType |
|
private final ComponentType<EntityStore, EncounterManager> |
encounterComponentType |
|
private final ComponentType<EntityStore, EncounterManager> |
encounterComponentType |
|
private final ComponentType<EntityStore, EncounterManager> |
encounterComponentType |
|
private final Query<EntityStore> |
query |
|
private final Query<EntityStore> |
query |
|
|
return |
|
private final ComponentType<EntityStore, Teleport> |
teleportComponentType |
|
SpawnLineage |
var10 |
|
Ref |
var11 |
|
BuilderInfo |
var13 |
|
BuilderSupport |
var14 |
|
EncounterManager |
var4 |
|
PositionCache |
var4 |
|
EncounterManager |
var4 |
|
Archetype |
var4 |
|
List |
var4 |
|
ExecutionSupport |
var5 |
|
NPCPlugin |
var5 |
|
ComponentType |
var5 |
|
EncounterManager |
var5 |
|
ComponentType |
var5 |
|
EncounterManager |
var5 |
|
DebugSupport |
var6 |
|
BuilderManager |
var6 |
|
SpawnLineage |
var6 |
|
World |
var6 |
|
Instruction |
var7 |
|
int |
var7 |
|
|
var7 |
|
String |
var7 |
|
World |
var7 |
|
EncounterManager |
var7 |
|
String |
var8 |
|
ComponentType |
var8 |
|
int[] |
var9 |
Методы (37)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
|
public |
ActivateSystempublic ActivateSystem(@Nonnull ComponentType<EntityStore, EncounterManager> var1) |
|
public |
BuilderSystempublic BuilderSystem(@Nonnull ComponentType<EntityStore, EncounterManager> var1) |
|
public |
EnsureEntityComponentspublic EnsureEntityComponents(@Nonnull ComponentType<EntityStore, EncounterManager> var1) |
|
public |
LifecycleSystempublic LifecycleSystem(@Nonnull ComponentType<EntityStore, EncounterManager> var1) |
|
public |
TeleportSystempublic TeleportSystem(@Nonnull ComponentType<EntityStore, EncounterManager> var1) |
|
public |
TickSystempublic TickSystem(@Nonnull ComponentType<EntityStore, EncounterManager> var1) |
|
public ComponentType<EntityStore, Teleport> |
componentTypepublic ComponentType<EntityStore, Teleport> componentType() |
|
|
for for(Ref var6 : var4) |
abstract |
|
for for(int var9 = 0; var9 < var7x.size() |
abstract |
|
for for(int var3 = 0; var3 < var1x.size() |
|
public Set<Dependency<EntityStore>> |
getDependenciespublic Set<Dependency<EntityStore>> getDependencies() |
|
public Set<Dependency<EntityStore>> |
getDependenciespublic Set<Dependency<EntityStore>> getDependencies() |
|
public Set<Dependency<EntityStore>> |
getDependenciespublic Set<Dependency<EntityStore>> getDependencies() |
|
public Set<Dependency<EntityStore>> |
getDependenciespublic Set<Dependency<EntityStore>> getDependencies() |
|
public Set<Dependency<EntityStore>> |
getDependenciespublic Set<Dependency<EntityStore>> getDependencies() |
|
public Query<EntityStore> |
getQuerypublic Query<EntityStore> getQuery() |
|
public Query<EntityStore> |
getQuerypublic Query<EntityStore> getQuery() |
|
public Query<EntityStore> |
getQuerypublic Query<EntityStore> getQuery() |
|
public Query<EntityStore> |
getQuerypublic Query<EntityStore> getQuery() |
|
public Query<EntityStore> |
getQuerypublic Query<EntityStore> getQuery() |
|
|
if if(var7 == Integer.MIN_VALUE) |
|
|
if if(var7 != null) |
|
public void |
onComponentAddedpublic void onComponentAdded(@Nonnull Ref<EntityStore> var1, @Nonnull Teleport var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4) |
|
public void |
onComponentRemovedpublic void onComponentRemoved(@Nonnull Ref<EntityStore> var1, @Nonnull Teleport var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4) |
|
public void |
onComponentSetpublic void onComponentSet(@Nonnull Ref<EntityStore> var1, Teleport var2, @Nonnull Teleport var3, @Nonnull Store<EntityStore> var4, @Nonnull CommandBuffer<EntityStore> var5) |
|
public void |
onEntityAddpublic void onEntityAdd(@Nonnull Holder<EntityStore> var1, @Nonnull AddReason var2, @Nonnull Store<EntityStore> var3) |
|
public void |
onEntityAddpublic void onEntityAdd(@Nonnull Holder<EntityStore> var1, @Nonnull AddReason var2, @Nonnull Store<EntityStore> var3) |
|
public void |
onEntityAddpublic void onEntityAdd(@Nonnull Holder<EntityStore> var1, @Nonnull AddReason var2, @Nonnull Store<EntityStore> var3) |
|
public void |
onEntityAddedpublic void onEntityAdded(@Nonnull Ref<EntityStore> var1, @Nonnull AddReason var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4) |
|
public void |
onEntityRemovepublic void onEntityRemove(@Nonnull Ref<EntityStore> var1, @Nonnull RemoveReason var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4) |
|
public void |
onEntityRemovedpublic void onEntityRemoved(@Nonnull Holder<EntityStore> var1, @Nonnull RemoveReason var2, @Nonnull Store<EntityStore> var3) |
|
public void |
onEntityRemovedpublic void onEntityRemoved(@Nonnull Holder<EntityStore> var1, @Nonnull RemoveReason var2, @Nonnull Store<EntityStore> var3) |
|
public void |
onEntityRemovedpublic void onEntityRemoved(@Nonnull Holder<EntityStore> var1, @Nonnull RemoveReason var2, @Nonnull Store<EntityStore> var3) |
|
private static void |
removeLineageprivate static void removeLineage(@Nonnull Ref<EntityStore> var0,
@Nonnull EncounterManager var1,
@Nonnull RemoveReason var2,
@Nonnull Store<EntityStore> var3,
@Nonnull CommandBuffer<EntityStore> var4) |
abstract |
|
removeLineage removeLineage(var1, var5, var2, var3, var4) |
|
|
switch switch(var2) |
|
public void |
tickpublic void tick(float var1, int var2, @Nonnull Store<EntityStore> var3) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.encountermanager;
class="kw">import com.hypixel.hytale.component.AddReason;
class="kw">import com.hypixel.hytale.component.Archetype;
class="kw">import com.hypixel.hytale.component.CommandBuffer;
class="kw">import com.hypixel.hytale.component.ComponentType;
class="kw">import com.hypixel.hytale.component.Holder;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.RemoveReason;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.component.dependency.Dependency;
class="kw">import com.hypixel.hytale.component.dependency.Order;
class="kw">import com.hypixel.hytale.component.dependency.SystemDependency;
class="kw">import com.hypixel.hytale.component.query.Query;
class="kw">import com.hypixel.hytale.component.system.HolderSystem;
class="kw">import com.hypixel.hytale.component.system.RefChangeSystem;
class="kw">import com.hypixel.hytale.component.system.RefSystem;
class="kw">import com.hypixel.hytale.component.system.tick.TickingSystem;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import com.hypixel.hytale.server.core.entity.entities.Player;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.Intangible;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.system.ModelSystems;
class="kw">import com.hypixel.hytale.server.core.modules.entity.teleport.Teleport;
class="kw">import com.hypixel.hytale.server.core.modules.entity.teleport.TeleportSystems;
class="kw">import com.hypixel.hytale.server.core.modules.entity.tracker.NetworkId;
class="kw">import com.hypixel.hytale.server.core.prefab.PrefabCopyableComponent;
class="kw">import com.hypixel.hytale.server.core.universe.world.World;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import com.hypixel.hytale.server.npc.NPCPlugin;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.BuilderInfo;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.BuilderManager;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.BuilderSupport;
class="kw">import com.hypixel.hytale.server.npc.instructions.ExecutionSupport;
class="kw">import com.hypixel.hytale.server.npc.instructions.Instruction;
class="kw">import com.hypixel.hytale.server.npc.role.support.DebugSupport;
class="kw">import com.hypixel.hytale.server.npc.role.support.PositionCache;
class="kw">import com.hypixel.hytale.server.npc.role.support.StateSupport;
class="kw">import com.hypixel.hytale.server.npc.systems.BlackboardSystems;
class="kw">import com.hypixel.hytale.server.npc.systems.PositionCacheSystems;
class="kw">import com.hypixel.hytale.server.npc.systems.RoleSystems;
class="kw">import com.hypixel.hytale.server.npc.util.expression.ExecutionContext;
class="kw">import com.hypixel.hytale.server.spawning.SpawnLineage;
class="kw">import it.unimi.dsi.fastutil.objects.ReferenceArrayList;
class="kw">import java.util.List;
class="kw">import java.util.Set;
class="kw">import java.util.UUID;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;
class="kw">public class EncounterManagerSystems {
class="kw">private class="kw">static class="kw">final ThreadLocal<List<Ref<EntityStore>>> ENTITY_LIST = ThreadLocal.withInitial(ReferenceArrayList::new);
class="kw">private EncounterManagerSystems() {
}
class="kw">public class="kw">static class ActivateSystem class="kw">extends HolderSystem<EntityStore> {
@Nonnull
class="kw">private class="kw">final ComponentType<EntityStore, EncounterManager> encounterComponentType;
@Nonnull
class="kw">private class="kw">final Set<Dependency<EntityStore>> dependencies = Set.of(new SystemDependency<>(Order.AFTER, EncounterManagerSystems.BuilderSystem.class));
class="kw">public ActivateSystem(@Nonnull ComponentType<EntityStore, EncounterManager> var1) {
this.encounterComponentType = var1;
}
@Nonnull
@Override
class="kw">public Set<Dependency<EntityStore>> getDependencies() {
class="kw">return this.dependencies;
}
@Nonnull
@Override
class="kw">public Query<EntityStore> getQuery() {
class="kw">return Query.and(this.encounterComponentType, StateSupport.getComponentType(), DebugSupport.getComponentType(), PositionCache.getComponentType());
}
@Override
class="kw">public void onEntityAdd(@Nonnull Holder<EntityStore> var1, @Nonnull AddReason var2, @Nonnull Store<EntityStore> var3) {
EncounterManager var4 = var1.getComponent(this.encounterComponentType);
assert var4 != null;
if (var4.isBuilt()) {
ExecutionSupport var5 = ExecutionSupport.acquire();
var5.populateFromHolder(var1);
try {
var5.getStateSupport().activate();
DebugSupport var6 = var5.getDebugSupport();
var6.setDebugFlags(var6.getDebugFlags());
var5.getPositionCache().reset(true);
Instruction var7 = var4.getRootInstruction();
assert var7 != null;
PositionCacheSystems.registerInstructionsWithCache(var5, var7, null, null, null);
} class="kw">finally {
var5.clearForReuse();
}
}
}
@Override
class="kw">public void onEntityRemoved(@Nonnull Holder<EntityStore> var1, @Nonnull RemoveReason var2, @Nonnull Store<EntityStore> var3) {
PositionCache var4 = var1.getComponent(PositionCache.getComponentType());
assert var4 != null;
var4.reset(false);
}
}
class="kw">public class="kw">static class BuilderSystem class="kw">extends HolderSystem<EntityStore> {
@Nonnull
class="kw">private class="kw">final ComponentType<EntityStore, EncounterManager> encounterComponentType;
@Nonnull
class="kw">private class="kw">final Set<Dependency<EntityStore>> dependencies = Set.of(
new SystemDependency<>(Order.BEFORE, ModelSystems.ModelSpawned.class),
new SystemDependency<>(Order.BEFORE, BlackboardSystems.SubscriptionLifecycleSystem.class)
);
@Nonnull
class="kw">private class="kw">final Query<EntityStore> query;
class="kw">public BuilderSystem(@Nonnull ComponentType<EntityStore, EncounterManager> var1) {
this.encounterComponentType = var1;
this.query = Archetype.of(var1, TransformComponent.getComponentType());
}
@Nonnull
@Override
class="kw">public Set<Dependency<EntityStore>> getDependencies() {
class="kw">return this.dependencies;
}
@Nonnull
@Override
class="kw">public Query<EntityStore> getQuery() {
class="kw">return this.query;
}
@Override
class="kw">public void onEntityAdd(@Nonnull Holder<EntityStore> var1, @Nonnull AddReason var2, @Nonnull Store<EntityStore> var3) {
EncounterManager var4 = var1.getComponent(this.encounterComponentType);
assert var4 != null;
if (!var4.isBuilt()) {
NPCPlugin var5 = NPCPlugin.get();
BuilderManager var6 = var5.getBuilderManager();
int var7 = var4.getEncounterIndex();
if (var7 == Integer.MIN_VALUE) {
String var8 = var4.getEncounterId();
var7 = var8 != null ? var5.getIndex(var8) : Integer.MIN_VALUE;
}
BuilderInfo var13 = var7 >= 0 ? var6.tryGetBuilderInfo(var7) : null;
if (var13 != null && var13.getBuilder().category() == EncounterManager.class && var13.getBuilder() class="kw">instanceof EncounterBuilder var9) {
var4.setEncounterIndex(var7);
BuilderSupport var14 = new BuilderSupport(var6, var1, new ExecutionContext(), var13.getBuilder(), null);
try {
var9.createAndAttach(var1, var14);
} catch (RuntimeException var12) {
((HytaleLogger.Api)var5.getLogger().at(Level.SEVERE).withCause(var12)).log("Failed to build encounter manager '%s'", var4.getEncounterId());
class="kw">return;
}
if (!var1.getArchetype().contains(SpawnLineage.getComponentType())) {
var1.addComponent(SpawnLineage.getComponentType(), new SpawnLineage(UUID.randomUUID().toString()));
}
var4.spawned(var1);
} else {
var5.getLogger().at(Level.SEVERE).log("Encounter manager references unknown or invalid asset '%s'", var4.getEncounterId());
}
}
}
@Override
class="kw">public void onEntityRemoved(@Nonnull Holder<EntityStore> var1, @Nonnull RemoveReason var2, @Nonnull Store<EntityStore> var3) {
}
}
class="kw">public class="kw">static class EnsureEntityComponents class="kw">extends HolderSystem<EntityStore> {
@Nonnull
class="kw">private class="kw">final Query<EntityStore> query;
class="kw">public EnsureEntityComponents(@Nonnull ComponentType<EntityStore, EncounterManager> var1) {
this.query = var1;
}
@Nonnull
@Override
class="kw">public Query<EntityStore> getQuery() {
class="kw">return this.query;
}
@Override
class="kw">public void onEntityAdd(@Nonnull Holder<EntityStore> var1, @Nonnull AddReason var2, @Nonnull Store<EntityStore> var3) {
Archetype var4 = var1.getArchetype();
assert var4 != null;
ComponentType var5 = NetworkId.getComponentType();
if (!var4.contains(var5)) {
var1.addComponent(var5, new NetworkId(var3.getExternalData().takeNextNetworkId()));
}
var1.ensureComponent(Intangible.getComponentType());
var1.ensureComponent(PrefabCopyableComponent.getComponentType());
}
@Override
class="kw">public void onEntityRemoved(@Nonnull Holder<EntityStore> var1, @Nonnull RemoveReason var2, @Nonnull Store<EntityStore> var3) {
}
}
class="kw">public class="kw">static class LifecycleSystem class="kw">extends RefSystem<EntityStore> {
@Nonnull
class="kw">private class="kw">final ComponentType<EntityStore, EncounterManager> encounterComponentType;
@Nonnull
class="kw">private class="kw">final Set<Dependency<EntityStore>> dependencies = Set.of(new SystemDependency<>(Order.AFTER, EncounterManagerSystems.BuilderSystem.class));
class="kw">public LifecycleSystem(@Nonnull ComponentType<EntityStore, EncounterManager> var1) {
this.encounterComponentType = var1;
}
@Nonnull
@Override
class="kw">public Set<Dependency<EntityStore>> getDependencies() {
class="kw">return this.dependencies;
}
@Nonnull
@Override
class="kw">public Query<EntityStore> getQuery() {
class="kw">return this.encounterComponentType;
}
@Override
class="kw">public void onEntityAdded(
@Nonnull Ref<EntityStore> var1, @Nonnull AddReason var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4
) {
}
@Override
class="kw">public void onEntityRemove(
@Nonnull Ref<EntityStore> var1, @Nonnull RemoveReason var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4
) {
EncounterManager var5 = var3.getComponent(var1, this.encounterComponentType);
assert var5 != null;
if (var5.isBuilt()) {
class="kw">switch (var2) {
case REMOVE:
case BUILDER_TOOLS_UNDO:
var5.removed(var1, var4);
if (var5.isCleanupOnRemove()) {
removeLineage(var1, var5, var2, var3, var4);
}
break;
case UNLOAD:
var5.unloaded(var1, var4);
}
}
}
class="kw">private class="kw">static void removeLineage(
@Nonnull Ref<EntityStore> var0,
@Nonnull EncounterManager var1,
@Nonnull RemoveReason var2,
@Nonnull Store<EntityStore> var3,
@Nonnull CommandBuffer<EntityStore> var4
) {
ComponentType var5 = SpawnLineage.getComponentType();
SpawnLineage var6 = var3.getComponent(var0, var5);
String var7 = var6 != null ? var6.getLineageId() : null;
if (var7 != null) {
ComponentType var8 = Player.getComponentType();
int[] var9 = new int[]{0};
var3.forEachChunk(var5, (var7x, var8x) -> {
if (!var7x.getArchetype().contains(var8)) {
for (int var9 = 0; var9 < var7x.size(); var9++) {
SpawnLineage var10 = var7x.getComponent(var9, var5);
if (var10 != null && var7.equals(var10.getLineageId())) {
Ref var11 = var7x.getReferenceTo(var9);
if (!var11.equals(var0)) {
var4.tryRemoveEntity(var11, var2);
var9[0]++;
}
}
}
}
});
NPCPlugin.get()
.getLogger()
.at(Level.FINE)
.log("Encounter manager '%s' cleanup queued %d entities of lineage %s for removal", var1.getEncounterId(), var9[0], var7);
}
}
}
class="kw">public class="kw">static class TeleportSystem class="kw">extends RefChangeSystem<EntityStore, Teleport> {
@Nonnull
class="kw">private class="kw">final ComponentType<EntityStore, EncounterManager> encounterComponentType;
@Nonnull
class="kw">private class="kw">final ComponentType<EntityStore, Teleport> teleportComponentType = Teleport.getComponentType();
@Nonnull
class="kw">private class="kw">final Set<Dependency<EntityStore>> dependencies = Set.of(new SystemDependency<>(Order.AFTER, TeleportSystems.MoveSystem.class));
class="kw">public TeleportSystem(@Nonnull ComponentType<EntityStore, EncounterManager> var1) {
this.encounterComponentType = var1;
}
@Nonnull
@Override
class="kw">public Set<Dependency<EntityStore>> getDependencies() {
class="kw">return this.dependencies;
}
@Nonnull
@Override
class="kw">public Query<EntityStore> getQuery() {
class="kw">return this.encounterComponentType;
}
@Nonnull
@Override
class="kw">public ComponentType<EntityStore, Teleport> componentType() {
class="kw">return this.teleportComponentType;
}
class="kw">public void onComponentAdded(
@Nonnull Ref<EntityStore> var1, @Nonnull Teleport var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4
) {
EncounterManager var5 = var4.getComponent(var1, this.encounterComponentType);
assert var5 != null;
if (var5.isBuilt()) {
World var6 = var3.getExternalData().getWorld();
World var7 = var2.getWorld();
var5.teleported(var1, var4, var6, var7 == null ? var6 : var7);
}
}
class="kw">public void onComponentSet(
@Nonnull Ref<EntityStore> var1, Teleport var2, @Nonnull Teleport var3, @Nonnull Store<EntityStore> var4, @Nonnull CommandBuffer<EntityStore> var5
) {
}
class="kw">public void onComponentRemoved(
@Nonnull Ref<EntityStore> var1, @Nonnull Teleport var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4
) {
}
}
class="kw">public class="kw">static class TickSystem class="kw">extends TickingSystem<EntityStore> {
@Nonnull
class="kw">private class="kw">final ComponentType<EntityStore, EncounterManager> encounterComponentType;
@Nonnull
class="kw">private class="kw">final Set<Dependency<EntityStore>> dependencies = Set.of(
new SystemDependency<>(Order.AFTER, PositionCacheSystems.UpdateSystem.class),
new SystemDependency<>(Order.AFTER, RoleSystems.MarkedTargetRebindSystem.class),
new SystemDependency<>(Order.BEFORE, RoleSystems.WorldSupportTickSystem.class),
new SystemDependency<>(Order.BEFORE, RoleSystems.EntitySupportTickSystem.class),
new SystemDependency<>(Order.BEFORE, RoleSystems.PositionCacheClearSystem.class),
new SystemDependency<>(Order.BEFORE, RoleSystems.StateSupportUpdateSystem.class),
new SystemDependency<>(Order.BEFORE, RoleSystems.MarkedEntitySupportPostSystem.class)
);
class="kw">public TickSystem(@Nonnull ComponentType<EntityStore, EncounterManager> var1) {
this.encounterComponentType = var1;
}
@Nonnull
@Override
class="kw">public Set<Dependency<EntityStore>> getDependencies() {
class="kw">return this.dependencies;
}
@Override
class="kw">public void tick(float var1, int var2, @Nonnull Store<EntityStore> var3) {
List var4 = EncounterManagerSystems.ENTITY_LIST.get();
var3.forEachChunk(this.encounterComponentType, (var1x, var2x) -> {
for (int var3 = 0; var3 < var1x.size(); var3++) {
var4.add(var1x.getReferenceTo(var3));
}
});
for (Ref var6 : var4) {
if (var6.isValid()) {
EncounterManager var7 = var3.getComponent(var6, this.encounterComponentType);
assert var7 != null;
if (var7.isBuilt()) {
try {
var7.tick(var6, var1, var3);
} catch (IllegalArgumentException | IllegalStateException var9) {
((HytaleLogger.Api)NPCPlugin.get().getLogger().at(Level.SEVERE).withCause(var9))
.log("Failed to tick encounter manager '%s'", var7.getEncounterId());
var3.removeEntity(var6, RemoveReason.REMOVE);
}
}
}
}
var4.clear();
}
}
}