This commit is contained in:
parent
3974c12dd8
commit
5eb72dbab7
@ -39,10 +39,10 @@ Each player has a "personal" stage of an area, the highest online player's diffi
|
|||||||
- Normal Gameplay
|
- Normal Gameplay
|
||||||
|
|
||||||
### Stage 2
|
### Stage 2
|
||||||
- Mobs Are Guaranteed To Have At Least One Piece OF Armor
|
- Hostile Mobs Attack Passive Mobs
|
||||||
|
|
||||||
### Stage 3
|
### Stage 3
|
||||||
- Hostile Mobs Attack Passive Mobs
|
- Mobs Are Guaranteed To Have At Least One Piece Of Armor
|
||||||
|
|
||||||
### Stage 4
|
### Stage 4
|
||||||
- Villages Kick You Out (Using Iron Golems)
|
- Villages Kick You Out (Using Iron Golems)
|
||||||
|
@ -2,6 +2,7 @@ package com.thebrokenrail.twine.entity;
|
|||||||
|
|
||||||
import com.thebrokenrail.twine.Twine;
|
import com.thebrokenrail.twine.Twine;
|
||||||
import com.thebrokenrail.twine.component.StageDataComponent;
|
import com.thebrokenrail.twine.component.StageDataComponent;
|
||||||
|
import com.thebrokenrail.twine.util.StageUtil;
|
||||||
import net.minecraft.block.BlockState;
|
import net.minecraft.block.BlockState;
|
||||||
import net.minecraft.entity.ai.goal.MoveToTargetPosGoal;
|
import net.minecraft.entity.ai.goal.MoveToTargetPosGoal;
|
||||||
import net.minecraft.entity.mob.CreeperEntity;
|
import net.minecraft.entity.mob.CreeperEntity;
|
||||||
@ -59,6 +60,6 @@ public class ExplodeArtificialBlockGoal extends MoveToTargetPosGoal {
|
|||||||
BlockPos pos = mob.getBlockPos();
|
BlockPos pos = mob.getBlockPos();
|
||||||
int stage = component.findEffectiveStageOfChunk((ServerWorld) mob.getEntityWorld(), pos);
|
int stage = component.findEffectiveStageOfChunk((ServerWorld) mob.getEntityWorld(), pos);
|
||||||
|
|
||||||
return stage >= 3 && super.canStart();
|
return stage >= StageUtil.CREEPERS_TARGET_ARTIFICIAL_BLOCKS && super.canStart();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package com.thebrokenrail.twine.entity;
|
package com.thebrokenrail.twine.entity;
|
||||||
|
|
||||||
import com.thebrokenrail.twine.component.StageDataComponent;
|
import com.thebrokenrail.twine.component.StageDataComponent;
|
||||||
|
import com.thebrokenrail.twine.util.StageUtil;
|
||||||
import net.minecraft.entity.LivingEntity;
|
import net.minecraft.entity.LivingEntity;
|
||||||
import net.minecraft.entity.ai.goal.FollowTargetGoal;
|
import net.minecraft.entity.ai.goal.FollowTargetGoal;
|
||||||
import net.minecraft.entity.mob.Angerable;
|
import net.minecraft.entity.mob.Angerable;
|
||||||
@ -18,7 +19,7 @@ public class FollowPassiveEntityGoal extends FollowTargetGoal<LivingEntity> {
|
|||||||
BlockPos pos = mob.getBlockPos();
|
BlockPos pos = mob.getBlockPos();
|
||||||
int stage = component.findEffectiveStageOfChunk((ServerWorld) mob.getEntityWorld(), pos);
|
int stage = component.findEffectiveStageOfChunk((ServerWorld) mob.getEntityWorld(), pos);
|
||||||
|
|
||||||
return entity instanceof PassiveEntity || (entity instanceof PlayerEntity && stage >= 4);
|
return entity instanceof PassiveEntity || (entity instanceof PlayerEntity && stage >= StageUtil.NEUTRAL_MOBS_ARE_HOSTILE);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -27,6 +28,6 @@ public class FollowPassiveEntityGoal extends FollowTargetGoal<LivingEntity> {
|
|||||||
BlockPos pos = mob.getBlockPos();
|
BlockPos pos = mob.getBlockPos();
|
||||||
int stage = component.findEffectiveStageOfChunk((ServerWorld) mob.getEntityWorld(), pos);
|
int stage = component.findEffectiveStageOfChunk((ServerWorld) mob.getEntityWorld(), pos);
|
||||||
|
|
||||||
return mob instanceof HostileEntity && (!(mob instanceof Angerable) || stage >= 4) && stage >= 2 && super.canStart();
|
return mob instanceof HostileEntity && (!(mob instanceof Angerable) || stage >= StageUtil.NEUTRAL_MOBS_ARE_HOSTILE) && stage >= StageUtil.HOSTILE_MOBS_TARGET_PASSIVE_MOBS && super.canStart();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,7 @@ import com.thebrokenrail.twine.entity.ExplodeArtificialBlockGoal;
|
|||||||
import com.thebrokenrail.twine.entity.FleeEndRodGoal;
|
import com.thebrokenrail.twine.entity.FleeEndRodGoal;
|
||||||
import com.thebrokenrail.twine.entity.FollowPassiveEntityGoal;
|
import com.thebrokenrail.twine.entity.FollowPassiveEntityGoal;
|
||||||
import com.thebrokenrail.twine.entity.StandOnGlowingObsidian;
|
import com.thebrokenrail.twine.entity.StandOnGlowingObsidian;
|
||||||
|
import com.thebrokenrail.twine.util.StageUtil;
|
||||||
import net.minecraft.entity.EntityType;
|
import net.minecraft.entity.EntityType;
|
||||||
import net.minecraft.entity.ai.goal.FollowTargetGoal;
|
import net.minecraft.entity.ai.goal.FollowTargetGoal;
|
||||||
import net.minecraft.entity.ai.goal.GoalSelector;
|
import net.minecraft.entity.ai.goal.GoalSelector;
|
||||||
@ -54,7 +55,7 @@ public class MixinMobEntity {
|
|||||||
BlockPos blockPos = ((IronGolemEntity) (Object) this).getBlockPos();
|
BlockPos blockPos = ((IronGolemEntity) (Object) this).getBlockPos();
|
||||||
int stage = component.findEffectiveStageOfChunk((ServerWorld) (((IronGolemEntity) (Object) this).getEntityWorld()), blockPos);
|
int stage = component.findEffectiveStageOfChunk((ServerWorld) (((IronGolemEntity) (Object) this).getEntityWorld()), blockPos);
|
||||||
|
|
||||||
return stage >= 3 && !((IronGolemEntity) (Object) this).isPlayerCreated();
|
return stage >= StageUtil.IRON_GOLEMS_TARGET_PLAYERS && !((IronGolemEntity) (Object) this).isPlayerCreated();
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -66,7 +67,7 @@ public class MixinMobEntity {
|
|||||||
StageDataComponent component = StageDataComponent.getFromWorld((ServerWorld) ((MobEntity) (Object) this).getEntityWorld());
|
StageDataComponent component = StageDataComponent.getFromWorld((ServerWorld) ((MobEntity) (Object) this).getEntityWorld());
|
||||||
BlockPos blockPos = ((MobEntity) (Object) this).getBlockPos();
|
BlockPos blockPos = ((MobEntity) (Object) this).getBlockPos();
|
||||||
int stage = component.findEffectiveStageOfChunk((ServerWorld) ((MobEntity) (Object) this).getEntityWorld(), blockPos);
|
int stage = component.findEffectiveStageOfChunk((ServerWorld) ((MobEntity) (Object) this).getEntityWorld(), blockPos);
|
||||||
if (stage >= 5) {
|
if (stage >= StageUtil.MOBS_NO_LONGER_BURN_IN_SUNLIGHT) {
|
||||||
info.setReturnValue(false);
|
info.setReturnValue(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -77,7 +78,7 @@ public class MixinMobEntity {
|
|||||||
StageDataComponent component = StageDataComponent.getFromWorld((ServerWorld) ((MobEntity) (Object) this).getEntityWorld());
|
StageDataComponent component = StageDataComponent.getFromWorld((ServerWorld) ((MobEntity) (Object) this).getEntityWorld());
|
||||||
BlockPos blockPos = ((MobEntity) (Object) this).getBlockPos();
|
BlockPos blockPos = ((MobEntity) (Object) this).getBlockPos();
|
||||||
int stage = component.findEffectiveStageOfChunk((ServerWorld) ((MobEntity) (Object) this).getEntityWorld(), blockPos);
|
int stage = component.findEffectiveStageOfChunk((ServerWorld) ((MobEntity) (Object) this).getEntityWorld(), blockPos);
|
||||||
if (stage >= 1) {
|
if (stage >= StageUtil.MOBS_GUARANTEED_ARMOR) {
|
||||||
return -1f;
|
return -1f;
|
||||||
} else {
|
} else {
|
||||||
return random.nextFloat();
|
return random.nextFloat();
|
||||||
|
10
src/main/java/com/thebrokenrail/twine/util/StageUtil.java
Normal file
10
src/main/java/com/thebrokenrail/twine/util/StageUtil.java
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
package com.thebrokenrail.twine.util;
|
||||||
|
|
||||||
|
public class StageUtil {
|
||||||
|
public static final int NEUTRAL_MOBS_ARE_HOSTILE = 4;
|
||||||
|
public static final int CREEPERS_TARGET_ARTIFICIAL_BLOCKS = 3;
|
||||||
|
public static final int MOBS_GUARANTEED_ARMOR = 2;
|
||||||
|
public static final int HOSTILE_MOBS_TARGET_PASSIVE_MOBS = 1;
|
||||||
|
public static final int IRON_GOLEMS_TARGET_PLAYERS = 3;
|
||||||
|
public static final int MOBS_NO_LONGER_BURN_IN_SUNLIGHT = 5;
|
||||||
|
}
|
Reference in New Issue
Block a user