CollisionResult class
Пакет: com.hypixel.hytale.server.core.modules.collision
Файл: com/hypixel/hytale/server/core/modules/collision/CollisionResult.java
implements: BoxBlockIterator.BoxIterationConsumer
Поля (57)
| Модификаторы | Тип | Имя |
|---|---|---|
final |
Comparator<BlockCollisionData> |
BLOCK_COLLISION_DATA_COMPARATOR |
|
|
break |
|
|
return |
|
BlockCollisionData |
var1 |
|
|
var1 |
|
|
var1 |
|
int |
var10 |
|
FluidSection |
var10 |
|
Vector3d |
var10 |
|
BlockType |
var11 |
|
BlockCollisionData |
var12 |
|
Fluid |
var12 |
|
int |
var13 |
|
String |
var13 |
|
|
var13 |
|
BlockSection |
var14 |
|
FluidSection |
var15 |
|
BlockType |
var16 |
|
Object |
var16 |
|
Fluid |
var17 |
|
int |
var17 |
|
String |
var18 |
|
|
var18 |
|
String |
var19 |
|
|
var19 |
|
boolean |
var19 |
|
|
var19 |
|
boolean |
var2 |
|
Predicate |
var2 |
|
int |
var2 |
|
int |
var20 |
|
int |
var21 |
|
int |
var22 |
|
int |
var23 |
|
BlockPosition |
var24 |
|
Ref |
var25 |
|
BlockPosition |
var26 |
|
ObjectArrayList |
var3 |
|
boolean |
var3 |
|
|
var3 |
|
ObjectArrayList |
var4 |
|
BlockCollisionData |
var4 |
|
ChunkStore |
var6 |
|
Int3OpenHashSet |
var7 |
|
RootInteraction |
var7 |
|
int |
var7 |
|
int |
var8 |
|
|
var8 |
|
Ref |
var8 |
|
InteractionContext |
var8 |
|
boolean |
var8 |
|
|
var8 |
|
CollisionDataArray |
var9 |
|
BlockSection |
var9 |
|
InteractionChain |
var9 |
|
Object |
var9 |
|
Vector3d |
var9 |
Методы (95)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
public |
void |
acquireCollisionModulevoid acquireCollisionModule() |
public |
void |
addCollisionvoid addCollision(@Nonnull IBlockCollisionEvaluator var1, int var2) |
public |
void |
addPassThroughvoid addPassThrough(@Nonnull IBlockCollisionEvaluator var1, int var2) |
public |
void |
addSlidevoid addSlide(@Nonnull IBlockCollisionEvaluator var1, int var2) |
public |
void |
addTriggervoid addTrigger(@Nonnull IBlockCollisionEvaluator var1, int var2) |
public |
CharacterCollisionData |
allocCharacterCollisionCharacterCollisionData allocCharacterCollision() |
public |
int |
defaultTriggerBlocksProcessingint defaultTriggerBlocksProcessing(@Nonnull InteractionManager var1, @Nonnull Entity var2, @Nonnull Ref<EntityStore> var3, boolean var4, @Nonnull ComponentAccessor<EntityStore> var5) |
public |
void |
disableCharacterCollisionsvoid disableCharacterCollisions() |
public |
void |
disableDamageBlocksvoid disableDamageBlocks() |
public |
void |
disableSlidesvoid disableSlides() |
public |
void |
disableTriggerBlocksvoid disableTriggerBlocks() |
private |
void |
doCollisionInteractionvoid doCollisionInteraction(@Nonnull InteractionManager var1,
@Nonnull InteractionType var2,
@Nonnull Ref<EntityStore> var3,
@Nonnull String var4,
@Nonnull BlockPosition var5,
@Nonnull ComponentAccessor<EntityStore> var6) |
public |
void |
enableCharacterCollsionsvoid enableCharacterCollsions() |
public |
void |
enableDamageBlocksvoid enableDamageBlocks() |
public |
void |
enableSlidesvoid enableSlides() |
public |
void |
enableTriggerBlocksvoid enableTriggerBlocks() |
|
|
for for(int var21 = 0; var21 < var7; var21++) |
|
|
for for(int var22 = 0; var22 < var17; var22++) |
abstract |
|
for for(int var2 = 1; var2 < this.blockSlides.getCount() |
abstract |
|
for for(int var11 = var9.size() |
public |
BlockCollisionData |
getBlockCollisionBlockCollisionData getBlockCollision(int var1) |
public |
int |
getBlockCollisionCountint getBlockCollisionCount() |
public |
CharacterCollisionData |
getCharacterCollisionCharacterCollisionData getCharacterCollision(int var1) |
public |
int |
getCharacterCollisionCountint getCharacterCollisionCount() |
public |
int |
getCollisionByMaterialint getCollisionByMaterial() |
public |
List<Ref<EntityStore>> |
getCollisionEntitiesList<Ref<EntityStore>> getCollisionEntities() |
public |
int |
getDebugEntityIdint getDebugEntityId() |
public |
HytaleLogger |
getLoggerHytaleLogger getLogger() |
public |
BlockCollisionData |
getPassThroughBlockCollisionData getPassThrough(int var1) |
public |
int |
getPassThroughCountint getPassThroughCount() |
|
|
if if(var1.collisionStart <= this.slideEnd && var1.collisionEnd > this.slideEnd) |
|
|
if if(this.slideEnd > 1.0) |
|
|
if if(var4.collisionStart <= var1) |
|
|
if if(var12.blockType != null) |
|
|
if if(var13 > var8) |
|
|
if if(var4 && var2 instanceof LivingEntity) |
|
|
if if(var14 != null) |
|
|
if if(var18 == null) |
|
|
if if(var19 == null) |
|
|
if if(var18 != null || var19 != null) |
|
|
if if(var20 != 0) |
|
|
if if(var19 != null) |
|
|
if if(var9 != null) |
|
|
if if(var13 == null) |
|
|
if if(var13 != null) |
|
|
if if(this.logger != null) |
|
|
if if(var7 <= 1) |
|
|
if if(var17 <= 1) |
|
|
if if(var19) |
|
|
if if(var19) |
|
|
if if(this.logger != null) |
|
|
if if(this.collisionConfig.blockCanCollide) |
|
|
if if(this.movingBoxBoxCollision.onGround) |
|
|
if if(!var1) |
|
|
if if(this.collisionConfig.blockCanTrigger) |
|
|
if if(this.logger != null) |
|
|
if if(this.logger != null) |
|
|
if if(var1) |
|
|
if if(var3) |
|
|
if if(this.logger != null) |
|
|
if if(this.logger != null) |
public |
boolean |
isCheckingDamageBlocksboolean isCheckingDamageBlocks() |
public |
boolean |
isCheckingForCharacterCollisionsboolean isCheckingForCharacterCollisions() |
public |
boolean |
isCheckingTriggerBlocksboolean isCheckingTriggerBlocks() |
public |
boolean |
isComputeOverlapsboolean isComputeOverlaps() |
public |
boolean |
isDamageBlockingboolean isDamageBlocking() |
public |
boolean |
isRecordingPassThroughboolean isRecordingPassThrough() |
public |
void |
iterateBlocksvoid iterateBlocks(@Nonnull Box var1, @Nonnull Vector3d var2, @Nonnull Vector3d var3, double var4, boolean var6, double var7) |
public |
BlockCollisionData |
newCollisionBlockCollisionData newCollision() |
public |
BlockCollisionData |
newPassThroughBlockCollisionData newPassThrough() |
public |
BlockCollisionData |
newSlideBlockCollisionData newSlide() |
public |
BlockCollisionData |
newTriggerBlockCollisionData newTrigger() |
public |
void |
processvoid process() |
private |
void |
processCollisionResultvoid processCollisionResult(boolean var1, int var2) |
public |
void |
pruneTriggerBlocksvoid pruneTriggerBlocks(double var1) |
public |
void |
resetvoid reset() |
public |
void |
setCollisionByMaterialvoid setCollisionByMaterial(int var1) |
public |
void |
setCollisionByMaterialvoid setCollisionByMaterial(int var1, int var2) |
public |
void |
setCollisionEntitiesvoid setCollisionEntities(List<Ref<EntityStore>> var1) |
public |
void |
setComputeOverlapsvoid setComputeOverlaps(boolean var1) |
public |
boolean |
setDamageBlockingboolean setDamageBlocking(boolean var1) |
public |
void |
setDebugEntityIdvoid setDebugEntityId(int var1) |
public |
void |
setDefaultBlockCollisionPredicatevoid setDefaultBlockCollisionPredicate() |
public |
void |
setDefaultCollisionBehaviourvoid setDefaultCollisionBehaviour() |
public |
void |
setDefaultNonWalkablePredicatevoid setDefaultNonWalkablePredicate() |
public |
void |
setDefaultPlayerSettingsvoid setDefaultPlayerSettings() |
public |
void |
setDefaultWalkableBehaviourvoid setDefaultWalkableBehaviour() |
public |
void |
setLoggervoid setLogger(HytaleLogger var1) |
public |
void |
setLoggervoid setLogger(HytaleLogger var1, int var2) |
public |
void |
setNonWalkablePredicatevoid setNonWalkablePredicate(Predicate<CollisionConfig> var1) |
public |
void |
setRecordPassThroughvoid setRecordPassThrough(boolean var1) |
public |
void |
setWalkableByMaterialvoid setWalkableByMaterial(int var1) |
public |
boolean |
shouldLogboolean shouldLog() |
abstract |
|
this this(true, false) |
protected |
void |
updateDamageWalkableFlagvoid updateDamageWalkableFlag() |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.modules.collision;
class="kw">import com.hypixel.hytale.component.ComponentAccessor;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import com.hypixel.hytale.math.data.Int3OpenHashSet;
class="kw">import com.hypixel.hytale.math.iterator.BoxBlockIterator;
class="kw">import com.hypixel.hytale.math.shape.Box;
class="kw">import com.hypixel.hytale.math.vector.Vector3dUtil;
class="kw">import com.hypixel.hytale.protocol.BlockPosition;
class="kw">import com.hypixel.hytale.protocol.InteractionType;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.BlockType;
class="kw">import com.hypixel.hytale.server.core.asset.type.fluid.Fluid;
class="kw">import com.hypixel.hytale.server.core.entity.Entity;
class="kw">import com.hypixel.hytale.server.core.entity.InteractionChain;
class="kw">import com.hypixel.hytale.server.core.entity.InteractionContext;
class="kw">import com.hypixel.hytale.server.core.entity.InteractionManager;
class="kw">import com.hypixel.hytale.server.core.entity.LivingEntity;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.config.Interaction;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.config.RootInteraction;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.section.BlockSection;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.section.FluidSection;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.ChunkStore;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import com.hypixel.hytale.server.core.util.FillerBlockUtil;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectArrayList;
class="kw">import java.util.Comparator;
class="kw">import java.util.List;
class="kw">import java.util.function.Predicate;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3d;
class="kw">public class CollisionResult class="kw">implements BoxBlockIterator.BoxIterationConsumer {
class="kw">public class="kw">static class="kw">final Comparator<BlockCollisionData> BLOCK_COLLISION_DATA_COMPARATOR = Comparator.<BlockCollisionData>comparingDouble(
var0 -> var0.collisionStart
)
.thenComparingDouble(var0 -> var0.collisionEnd);
@Nonnull
class="kw">private class="kw">final CollisionConfig collisionConfig;
@Nonnull
class="kw">private class="kw">final CollisionDataArray<BlockCollisionData> blockCollisions;
@Nonnull
class="kw">private class="kw">final CollisionDataArray<BlockCollisionData> blockSlides;
@Nonnull
class="kw">private class="kw">final CollisionDataArray<BlockCollisionData> blockTriggers;
@Nonnull
class="kw">private class="kw">final CollisionDataArray<BlockCollisionData> passThroughBlocks;
@Nonnull
class="kw">private class="kw">final CollisionDataArray<CharacterCollisionData> characterCollisions;
@Nonnull
class="kw">private class="kw">final MovingBoxBoxCollisionEvaluator movingBoxBoxCollision;
@Nonnull
class="kw">private class="kw">final BoxBlockIntersectionEvaluator boxBlockIntersection;
class="kw">public List<Ref<EntityStore>> collisionEntities;
class="kw">private boolean continueAfterCollision = true;
class="kw">private boolean haveNoCollision = true;
class="kw">private HytaleLogger logger;
class="kw">private int debugEntityId = -1;
class="kw">public double slideStart;
class="kw">public double slideEnd;
class="kw">public boolean isSliding;
class="kw">public int validate;
class="kw">private boolean checkForCharacterCollisions;
class="kw">private boolean recordPassThrough;
class="kw">private int walkableMaterialMask;
class="kw">public Predicate<CollisionConfig> isNonWalkable;
class="kw">private Int3OpenHashSet lastTriggers = new Int3OpenHashSet();
class="kw">private Int3OpenHashSet newTriggers = new Int3OpenHashSet();
class="kw">public CollisionResult() {
this(true, false);
}
class="kw">public CollisionResult(boolean var1, boolean var2) {
ObjectArrayList var3 = new ObjectArrayList();
ObjectArrayList var4 = new ObjectArrayList();
this.blockCollisions = new CollisionDataArray<>(BlockCollisionData::new, BlockCollisionData::clear, var3);
this.blockSlides = new CollisionDataArray<>(BlockCollisionData::new, BlockCollisionData::clear, var3);
this.blockTriggers = new CollisionDataArray<>(BlockCollisionData::new, BlockCollisionData::clear, var3);
this.passThroughBlocks = new CollisionDataArray<>(BlockCollisionData::new, BlockCollisionData::clear, var3);
this.characterCollisions = new CollisionDataArray<>(CharacterCollisionData::new, null, var4);
this.collisionConfig = new CollisionConfig();
this.collisionConfig.setDefaultCollisionBehaviour();
this.movingBoxBoxCollision = new MovingBoxBoxCollisionEvaluator();
this.movingBoxBoxCollision.setCheckForOnGround(var1);
this.boxBlockIntersection = new BoxBlockIntersectionEvaluator();
this.checkForCharacterCollisions = var2;
this.setDefaultWalkableBehaviour();
}
@Nonnull
class="kw">public CollisionConfig getConfig() {
class="kw">return this.collisionConfig;
}
class="kw">public List<Ref<EntityStore>> getCollisionEntities() {
class="kw">return this.collisionEntities;
}
class="kw">public void setCollisionEntities(List<Ref<EntityStore>> var1) {
this.collisionEntities = var1;
}
@Nonnull
class="kw">public BoxBlockIntersectionEvaluator getBoxBlockIntersection() {
class="kw">return this.boxBlockIntersection;
}
@Nonnull
class="kw">public MovingBoxBoxCollisionEvaluator getMovingBoxBoxCollision() {
class="kw">return this.movingBoxBoxCollision;
}
class="kw">public CharacterCollisionData allocCharacterCollision() {
class="kw">return this.characterCollisions.alloc();
}
class="kw">public void addCollision(@Nonnull IBlockCollisionEvaluator var1, int var2) {
if (!(var1.getCollisionStart() > 1.0)) {
var1.setCollisionData(this.newCollision(), this.collisionConfig, var2);
}
}
class="kw">public BlockCollisionData newCollision() {
class="kw">return this.blockCollisions.alloc();
}
class="kw">public void addSlide(@Nonnull IBlockCollisionEvaluator var1, int var2) {
if (!(var1.getCollisionStart() > 1.0)) {
var1.setCollisionData(this.newSlide(), this.collisionConfig, var2);
}
}
class="kw">public BlockCollisionData newSlide() {
class="kw">return this.blockSlides.alloc();
}
class="kw">public void addTrigger(@Nonnull IBlockCollisionEvaluator var1, int var2) {
if (!(var1.getCollisionStart() > 1.0)) {
var1.setCollisionData(this.newTrigger(), this.collisionConfig, var2);
}
}
class="kw">public BlockCollisionData newTrigger() {
class="kw">return this.blockTriggers.alloc();
}
class="kw">public void addPassThrough(@Nonnull IBlockCollisionEvaluator var1, int var2) {
if (!(var1.getCollisionStart() > 1.0)) {
var1.setCollisionData(this.newPassThrough(), this.collisionConfig, var2);
}
}
class="kw">public BlockCollisionData newPassThrough() {
class="kw">return this.passThroughBlocks.alloc();
}
class="kw">public void reset() {
this.blockCollisions.reset();
this.blockSlides.reset();
this.blockTriggers.reset();
this.passThroughBlocks.reset();
this.characterCollisions.reset();
}
class="kw">public void process() {
this.blockCollisions.sort(BasicCollisionData.COLLISION_START_COMPARATOR);
this.blockTriggers.sort(BasicCollisionData.COLLISION_START_COMPARATOR);
this.passThroughBlocks.sort(BasicCollisionData.COLLISION_START_COMPARATOR);
this.characterCollisions.sort(BasicCollisionData.COLLISION_START_COMPARATOR);
if (this.blockSlides.getCount() > 0) {
this.blockSlides.sort(BLOCK_COLLISION_DATA_COMPARATOR);
BlockCollisionData var1 = this.blockSlides.get(0);
this.slideStart = var1.collisionStart;
this.slideEnd = var1.collisionEnd;
for (int var2 = 1; var2 < this.blockSlides.getCount(); var2++) {
var1 = this.blockSlides.get(var2);
if (var1.collisionStart <= this.slideEnd && var1.collisionEnd > this.slideEnd) {
this.slideEnd = var1.collisionEnd;
}
}
this.isSliding = this.slideStart <= 0.0;
if (this.slideEnd > 1.0) {
this.slideEnd = 1.0;
}
} else {
this.isSliding = false;
}
}
class="kw">public int getBlockCollisionCount() {
class="kw">return this.blockCollisions.getCount();
}
class="kw">public BlockCollisionData getBlockCollision(int var1) {
class="kw">return this.blockCollisions.get(var1);
}
@Nullable
class="kw">public BlockCollisionData getFirstBlockCollision() {
class="kw">return this.blockCollisions.getFirst();
}
@Nullable
class="kw">public BlockCollisionData forgetFirstBlockCollision() {
class="kw">return this.blockCollisions.forgetFirst();
}
class="kw">public int getCharacterCollisionCount() {
class="kw">return this.characterCollisions.getCount();
}
class="kw">public CharacterCollisionData getCharacterCollision(int var1) {
class="kw">return this.characterCollisions.get(var1);
}
@Nullable
class="kw">public CharacterCollisionData getFirstCharacterCollision() {
class="kw">return this.characterCollisions.getFirst();
}
@Nullable
class="kw">public CharacterCollisionData forgetFirstCharacterCollision() {
class="kw">return this.characterCollisions.forgetFirst();
}
class="kw">public int getPassThroughCount() {
class="kw">return this.passThroughBlocks.getCount();
}
class="kw">public BlockCollisionData getPassThrough(int var1) {
class="kw">return this.passThroughBlocks.get(var1);
}
class="kw">public void pruneTriggerBlocks(double var1) {
for (int var3 = this.blockTriggers.size() - 1; var3 >= 0; var3--) {
BlockCollisionData var4 = this.blockTriggers.get(var3);
if (var4.collisionStart <= var1) {
break;
}
this.blockTriggers.remove(var3);
}
}
@Nonnull
class="kw">public CollisionDataArray<BlockCollisionData> getTriggerBlocks() {
class="kw">return this.blockTriggers;
}
class="kw">public int defaultTriggerBlocksProcessing(
@Nonnull InteractionManager var1, @Nonnull Entity var2, @Nonnull Ref<EntityStore> var3, boolean var4, @Nonnull ComponentAccessor<EntityStore> var5
) {
ChunkStore var6 = var5.getExternalData().getWorld().getChunkStore();
Int3OpenHashSet var7 = this.lastTriggers;
this.lastTriggers = this.newTriggers;
this.newTriggers = var7;
this.newTriggers.clear();
int var8 = 0;
CollisionDataArray var9 = this.getTriggerBlocks();
int var10 = 0;
for (int var11 = var9.size(); var10 < var11; var10++) {
BlockCollisionData var12 = var9.get(var10);
if (var12.blockType != null) {
int var13 = Math.max(var12.blockType.getDamageToEntities(), var12.fluid.getDamageToEntities());
if (var13 > var8) {
var8 = var13;
}
}
if (var4 && var2 class="kw">instanceof LivingEntity) {
Ref var25 = var6.getChunkSectionReferenceAtBlock(var12.x, var12.y, var12.z);
if (var25 != null && var25.isValid()) {
BlockSection var14 = var6.getStore().getComponent(var25, BlockSection.getComponentType());
if (var14 != null) {
FluidSection var15 = var6.getStore().getComponent(var25, FluidSection.getComponentType());
BlockType var16 = BlockType.getAssetMap().getAsset(var14.get(var12.x, var12.y, var12.z));
Fluid var17 = Fluid.getAssetMap().getAsset(var15 != null ? var15.getFluidId(var12.x, var12.y, var12.z) : 0);
String var18 = var16.getInteractions().get(InteractionType.CollisionEnter);
if (var18 == null) {
var18 = var17.getInteractions().get(InteractionType.CollisionEnter);
}
String var19 = var16.getInteractions().get(InteractionType.Collision);
if (var19 == null) {
var19 = var17.getInteractions().get(InteractionType.Collision);
}
if (var18 != null || var19 != null) {
int var20 = var14.getFiller(var12.x, var12.y, var12.z);
int var21 = var12.x;
int var22 = var12.y;
int var23 = var12.z;
if (var20 != 0) {
var21 -= FillerBlockUtil.unpackX(var20);
var22 -= FillerBlockUtil.unpackY(var20);
var23 -= FillerBlockUtil.unpackZ(var20);
}
if (this.newTriggers.add(var21, var22, var23)) {
if (!this.lastTriggers.remove(var21, var22, var23) && var18 != null) {
BlockPosition var24 = new BlockPosition(var21, var22, var23);
this.doCollisionInteraction(var1, InteractionType.CollisionEnter, var3, var18, var24, var5);
}
if (var19 != null) {
BlockPosition var26 = new BlockPosition(var21, var22, var23);
this.doCollisionInteraction(var1, InteractionType.Collision, var3, var19, var26, var5);
}
}
}
}
}
}
}
if (var4 && var2 class="kw">instanceof LivingEntity && !this.lastTriggers.isEmpty()) {
this.lastTriggers.forEach((var5x, var6x, var7x) -> {
Ref var8 = var6.getChunkSectionReferenceAtBlock(var5x, var6x, var7x);
if (var8 != null && var8.isValid()) {
BlockSection var9 = var6.getStore().getComponent(var8, BlockSection.getComponentType());
if (var9 != null) {
FluidSection var10 = var6.getStore().getComponent(var8, FluidSection.getComponentType());
BlockType var11 = BlockType.getAssetMap().getAsset(var9.get(var5x, var6x, var7x));
Fluid var12 = Fluid.getAssetMap().getAsset(var10 != null ? var10.getFluidId(var5x, var6x, var7x) : 0);
String var13 = var11.getInteractions().get(InteractionType.CollisionLeave);
if (var13 == null) {
var13 = var12.getInteractions().get(InteractionType.CollisionLeave);
}
if (var13 != null) {
this.doCollisionInteraction(var1, InteractionType.CollisionLeave, var3, var13, new BlockPosition(var5x, var6x, var7x), var5);
}
}
}
});
}
class="kw">return var8;
}
class="kw">private void doCollisionInteraction(
@Nonnull InteractionManager var1,
@Nonnull InteractionType var2,
@Nonnull Ref<EntityStore> var3,
@Nonnull String var4,
@Nonnull BlockPosition var5,
@Nonnull ComponentAccessor<EntityStore> var6
) {
RootInteraction var7 = RootInteraction.getRootInteractionOrUnknown(var4);
InteractionContext var8 = InteractionContext.forInteraction(var1, var3, var2, var6);
var8.getMetaStore().putMetaObject(Interaction.TARGET_BLOCK_RAW, var5);
var8.getMetaStore().putMetaObject(Interaction.TARGET_BLOCK, var5);
InteractionChain var9 = var1.initChain(var2, var8, var7, -1, var5, false);
var1.queueExecuteChain(var9);
}
@Override
class="kw">public boolean next() {
class="kw">return this.continueAfterCollision || this.haveNoCollision;
}
@Override
class="kw">public boolean accept(long var1, long var3, long var5) {
if (this.collisionConfig.canCollide((int)var1, (int)var3, (int)var5)) {
var1 += this.collisionConfig.getBoundingBoxOffsetX();
var3 += this.collisionConfig.getBoundingBoxOffsetY();
var5 += this.collisionConfig.getBoundingBoxOffsetZ();
int var7 = this.collisionConfig.getDetailCount();
boolean var8 = this.movingBoxBoxCollision.isBoundingBoxColliding(this.collisionConfig.getBoundingBox(), var1, var3, var5);
if (this.logger != null) {
Object var9 = this.collisionConfig.blockType != null ? this.collisionConfig.blockType.getId() : "null";
this.logger
.at(Level.INFO)
.log(
"?? Block Test at %s/%s/%s numDet=%d haveColl=%s overlap=%s blockType=%s",
var1,
var3,
var5,
var7,
var8,
this.movingBoxBoxCollision.isOverlapping(),
var9
);
}
if (var7 <= 1) {
this.processCollisionResult(var8, 0);
} else if (var8 || this.movingBoxBoxCollision.isOverlapping() || this.movingBoxBoxCollision.isTouching()) {
for (int var21 = 0; var21 < var7; var21++) {
var8 = this.movingBoxBoxCollision.isBoundingBoxColliding(this.collisionConfig.getBoundingBox(var21), var1, var3, var5);
this.processCollisionResult(var8, var21);
}
}
} else if (this.recordPassThrough && this.collisionConfig.blockFilteredOut) {
var1 += this.collisionConfig.getBoundingBoxOffsetX();
var3 += this.collisionConfig.getBoundingBoxOffsetY();
var5 += this.collisionConfig.getBoundingBoxOffsetZ();
int var17 = this.collisionConfig.getDetailCount();
boolean var19 = this.movingBoxBoxCollision.isBoundingBoxColliding(this.collisionConfig.getBoundingBox(), var1, var3, var5);
if (var17 <= 1) {
if (var19) {
this.addPassThrough(this.movingBoxBoxCollision, 0);
}
} else if (var19 || this.movingBoxBoxCollision.isOverlapping() || this.movingBoxBoxCollision.isTouching()) {
for (int var22 = 0; var22 < var17; var22++) {
var19 = this.movingBoxBoxCollision.isBoundingBoxColliding(this.collisionConfig.getBoundingBox(var22), var1, var3, var5);
if (var19) {
this.addPassThrough(this.movingBoxBoxCollision, var22);
}
}
}
} else if (this.logger != null) {
Object var16 = this.collisionConfig.blockType != null ? this.collisionConfig.blockType.getId() : "null";
this.logger.at(Level.INFO).log("-- Ignoring block at %s/%s/%s blockType=%s", var1, var3, var5, var16);
}
class="kw">return true;
}
class="kw">private void processCollisionResult(boolean var1, int var2) {
if (this.logger != null) {
this.logger
.at(Level.INFO)
.log(
"?? Further testing block haveCol=%s hitBoxIndex=%s onGround=%s touching=%s canCollide=%s canTrigger=%s",
var1,
var2,
this.movingBoxBoxCollision.isOnGround(),
this.movingBoxBoxCollision.isTouching(),
this.collisionConfig.blockCanCollide,
this.collisionConfig.blockCanTrigger
);
}
if (this.collisionConfig.blockCanCollide) {
boolean var3 = true;
if (this.movingBoxBoxCollision.onGround) {
var1 = this.collisionConfig.blockType == null || this.isNonWalkable.test(this.collisionConfig);
if (!var1) {
this.addSlide(this.movingBoxBoxCollision, var2);
if (this.collisionConfig.blockCanTrigger) {
this.addTrigger(this.movingBoxBoxCollision, var2);
}
if (this.logger != null) {
this.logger
.at(Level.INFO)
.log(
"++ Sliding block start=%s end=%s normal=%s",
this.movingBoxBoxCollision.getCollisionStart(),
this.movingBoxBoxCollision.getCollisionEnd(),
Vector3dUtil.formatShortString(this.movingBoxBoxCollision.getCollisionNormal())
);
}
class="kw">return;
}
var3 = false;
if (this.logger != null) {
this.logger
.at(Level.INFO)
.log(
"?? Sliding block is unwalkable start=%s end=%s normal=%s",
this.movingBoxBoxCollision.getCollisionStart(),
this.movingBoxBoxCollision.getCollisionEnd(),
Vector3dUtil.formatShortString(this.movingBoxBoxCollision.getCollisionNormal())
);
}
}
if (var1) {
this.addCollision(this.movingBoxBoxCollision, var2);
if (var3) {
this.haveNoCollision = false;
}
if (this.logger != null) {
this.logger
.at(Level.INFO)
.log(
"++ Collision with block start=%s end=%s normal=%s",
this.movingBoxBoxCollision.collisionStart,
this.movingBoxBoxCollision.collisionEnd,
Vector3dUtil.formatShortString(this.movingBoxBoxCollision.collisionNormal)
);
}
}
}
if (this.collisionConfig.blockCanTrigger && (var1 || this.movingBoxBoxCollision.isTouching())) {
if (this.logger != null) {
this.logger
.at(Level.INFO)
.log(
"++ Trigger block start=%s end=%s normal=%s",
this.movingBoxBoxCollision.getCollisionStart(),
this.movingBoxBoxCollision.getCollisionEnd(),
Vector3dUtil.formatShortString(this.movingBoxBoxCollision.getCollisionNormal())
);
}
this.addTrigger(this.movingBoxBoxCollision, var2);
}
}
class="kw">public void iterateBlocks(@Nonnull Box var1, @Nonnull Vector3d var2, @Nonnull Vector3d var3, double var4, boolean var6, double var7) {
this.continueAfterCollision = !var6;
Vector3d var9 = var1.getMin();
Vector3d var10 = var1.getMax();
BoxBlockIterator.iterate(
var9.x - var7,
var9.y - var7,
var9.z - var7,
var10.x + var7,
var10.y + var7,
var10.z + var7,
var2.x,
var2.y,
var2.z,
var3.x,
var3.y,
var3.z,
var4,
this
);
}
class="kw">public void acquireCollisionModule() {
this.haveNoCollision = true;
}
class="kw">public void disableSlides() {
this.movingBoxBoxCollision.setCheckForOnGround(false);
}
class="kw">public void enableSlides() {
this.movingBoxBoxCollision.setCheckForOnGround(true);
}
class="kw">public void disableCharacterCollisions() {
this.checkForCharacterCollisions = false;
}
class="kw">public void enableCharacterCollsions() {
this.checkForCharacterCollisions = true;
}
class="kw">public boolean isCheckingForCharacterCollisions() {
class="kw">return this.checkForCharacterCollisions;
}
class="kw">public boolean isRecordingPassThrough() {
class="kw">return this.recordPassThrough;
}
class="kw">public void setRecordPassThrough(boolean var1) {
this.recordPassThrough = var1;
}
class="kw">public void enableTriggerBlocks() {
this.collisionConfig.setCheckTriggerBlocks(true);
}
class="kw">public void disableTriggerBlocks() {
this.collisionConfig.setCheckTriggerBlocks(false);
}
class="kw">public boolean isCheckingTriggerBlocks() {
class="kw">return this.collisionConfig.isCheckTriggerBlocks();
}
class="kw">public void enableDamageBlocks() {
this.collisionConfig.setCheckDamageBlocks(true);
}
class="kw">public void disableDamageBlocks() {
this.collisionConfig.setCheckDamageBlocks(false);
}
class="kw">public boolean isCheckingDamageBlocks() {
class="kw">return this.collisionConfig.isCheckDamageBlocks();
}
class="kw">public boolean setDamageBlocking(boolean var1) {
boolean var2 = this.collisionConfig.setCollideWithDamageBlocks(var1);
this.updateDamageWalkableFlag();
class="kw">return var2;
}
class="kw">public boolean isDamageBlocking() {
class="kw">return this.collisionConfig.isCollidingWithDamageBlocks();
}
@Nullable
class="kw">public Predicate<CollisionConfig> getBlockCollisionFilter() {
class="kw">return this.collisionConfig.extraBlockCollisionFilter;
}
@Nullable
class="kw">public Predicate<CollisionConfig> setBlockCollisionFilter(@Nullable Predicate<CollisionConfig> var1) {
Predicate var2 = this.collisionConfig.extraBlockCollisionFilter;
this.collisionConfig.extraBlockCollisionFilter = var1;
class="kw">return var2;
}
class="kw">public void setCollisionByMaterial(int var1) {
this.collisionConfig.setCollisionByMaterial(var1);
}
class="kw">public void setCollisionByMaterial(int var1, int var2) {
this.collisionConfig.setCollisionByMaterial(var1);
this.setWalkableByMaterial(var2);
}
class="kw">public int getCollisionByMaterial() {
class="kw">return this.collisionConfig.getCollisionByMaterial();
}
class="kw">public void setDefaultCollisionBehaviour() {
this.collisionConfig.setDefaultCollisionBehaviour();
}
class="kw">public void setDefaultBlockCollisionPredicate() {
this.collisionConfig.setDefaultBlockCollisionPredicate();
}
class="kw">public void setDefaultNonWalkablePredicate() {
this.isNonWalkable = var1 -> {
int var2 = var1.blockMaterialMask & this.walkableMaterialMask;
class="kw">return var2 == 0 || (var2 & 16) != 0;
};
}
class="kw">public void setNonWalkablePredicate(Predicate<CollisionConfig> var1) {
this.isNonWalkable = var1;
}
class="kw">public void setWalkableByMaterial(int var1) {
this.walkableMaterialMask = 15 & var1;
this.updateDamageWalkableFlag();
}
class="kw">protected void updateDamageWalkableFlag() {
if (this.collisionConfig.isCollidingWithDamageBlocks()) {
this.walkableMaterialMask |= 16;
} else {
this.walkableMaterialMask &= -17;
}
}
class="kw">public void setDefaultWalkableBehaviour() {
this.setDefaultNonWalkablePredicate();
this.setWalkableByMaterial(5);
}
class="kw">public void setDefaultPlayerSettings() {
this.enableSlides();
this.disableCharacterCollisions();
this.setDefaultNonWalkablePredicate();
this.setDefaultBlockCollisionPredicate();
this.setCollisionByMaterial(4);
this.setWalkableByMaterial(15);
}
class="kw">public boolean isComputeOverlaps() {
class="kw">return this.movingBoxBoxCollision.isComputeOverlaps();
}
class="kw">public void setComputeOverlaps(boolean var1) {
this.movingBoxBoxCollision.setComputeOverlaps(var1);
}
class="kw">public HytaleLogger getLogger() {
class="kw">return this.logger;
}
class="kw">public boolean shouldLog() {
class="kw">return this.logger != null;
}
class="kw">public void setLogger(HytaleLogger var1) {
this.logger = var1;
}
class="kw">public void setLogger(HytaleLogger var1, int var2) {
this.logger = var1;
this.debugEntityId = var2;
}
class="kw">public void setDebugEntityId(int var1) {
this.debugEntityId = var1;
}
class="kw">public int getDebugEntityId() {
class="kw">return this.debugEntityId;
}
}