26.3-snap-9
This commit is contained in:
1 parent
21993f2585
commit
15235864f2
25 files changed
+134
-97
No files matched your search
@@ -540,7 +540,7 @@ On top of that, scarpet provides the following list of noises sampled directly f
|
|||||||
|
|
||||||
`'barrier_noise'`, `'fluid_level_floodedness_noise'`, `'fluid_level_spread_noise'`, `'lava_noise'`,
|
`'barrier_noise'`, `'fluid_level_floodedness_noise'`, `'fluid_level_spread_noise'`, `'lava_noise'`,
|
||||||
`'temperature'`, `'vegetation'`, `'continents'`, `'erosion'`, `'depth'`, `'ridges'`,
|
`'temperature'`, `'vegetation'`, `'continents'`, `'erosion'`, `'depth'`, `'ridges'`,
|
||||||
`'preliminary_surface_level'`, `'final_density'`, `'vein_toggle'`, `'vein_ridged'` and `'vein_gap'`
|
`'preliminary_surface_level'`, `'final_density'`
|
||||||
|
|
||||||
<pre>
|
<pre>
|
||||||
// requesting single value
|
// requesting single value
|
||||||
|
|||||||
+1
-1
@@ -7,7 +7,7 @@ org.gradle.configuration-cache=false
|
|||||||
|
|
||||||
# Fabric Properties
|
# Fabric Properties
|
||||||
# check https://fabricmc.net/develop/
|
# check https://fabricmc.net/develop/
|
||||||
minecraft_version=26.3-snapshot-3
|
minecraft_version=26.3-snapshot-9
|
||||||
loader_version=0.19.3
|
loader_version=0.19.3
|
||||||
loom_version=1.17-SNAPSHOT
|
loom_version=1.17-SNAPSHOT
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
package carpet.fakes;
|
package carpet.fakes;
|
||||||
|
|
||||||
import net.minecraft.world.level.levelgen.DensityFunction;
|
import net.minecraft.world.level.levelgen.densityfunction.DensityFunction;
|
||||||
|
|
||||||
public interface RandomStateVisitorAccessor {
|
public interface RandomStateVisitorAccessor {
|
||||||
DensityFunction.Visitor getVisitor();
|
DensityFunction.Visitor getVisitor();
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ import net.minecraft.network.protocol.game.ServerboundPlayerActionPacket;
|
|||||||
import net.minecraft.server.level.ServerLevel;
|
import net.minecraft.server.level.ServerLevel;
|
||||||
import net.minecraft.server.level.ServerPlayer;
|
import net.minecraft.server.level.ServerPlayer;
|
||||||
import net.minecraft.util.Mth;
|
import net.minecraft.util.Mth;
|
||||||
|
import net.minecraft.util.Prediction;
|
||||||
import net.minecraft.world.InteractionHand;
|
import net.minecraft.world.InteractionHand;
|
||||||
import net.minecraft.world.InteractionResult;
|
import net.minecraft.world.InteractionResult;
|
||||||
import net.minecraft.world.entity.Entity;
|
import net.minecraft.world.entity.Entity;
|
||||||
@@ -26,6 +27,7 @@ import net.minecraft.world.entity.player.Inventory;
|
|||||||
import net.minecraft.world.entity.vehicle.boat.Boat;
|
import net.minecraft.world.entity.vehicle.boat.Boat;
|
||||||
import net.minecraft.world.entity.vehicle.minecart.Minecart;
|
import net.minecraft.world.entity.vehicle.minecart.Minecart;
|
||||||
import net.minecraft.world.item.ItemStack;
|
import net.minecraft.world.item.ItemStack;
|
||||||
|
import net.minecraft.world.item.component.SwingAnimation;
|
||||||
import net.minecraft.world.level.block.state.BlockState;
|
import net.minecraft.world.level.block.state.BlockState;
|
||||||
import net.minecraft.world.phys.BlockHitResult;
|
import net.minecraft.world.phys.BlockHitResult;
|
||||||
import net.minecraft.world.phys.EntityHitResult;
|
import net.minecraft.world.phys.EntityHitResult;
|
||||||
@@ -261,7 +263,7 @@ public class EntityPlayerActionPack
|
|||||||
if (!inv.getItem(slot).isEmpty())
|
if (!inv.getItem(slot).isEmpty())
|
||||||
player.drop(inv.removeItem(slot,
|
player.drop(inv.removeItem(slot,
|
||||||
dropAll ? inv.getItem(slot).getCount() : 1
|
dropAll ? inv.getItem(slot).getCount() : 1
|
||||||
), false, true); // scatter, keep owner
|
), false, Prediction.SERVER_ONLY); // scatter, keep owner
|
||||||
}
|
}
|
||||||
|
|
||||||
public void drop(int selectedSlot, boolean dropAll)
|
public void drop(int selectedSlot, boolean dropAll)
|
||||||
@@ -320,7 +322,7 @@ public class EntityPlayerActionPack
|
|||||||
InteractionResult result = player.gameMode.useItemOn(player, world, player.getItemInHand(hand), hand, blockHit);
|
InteractionResult result = player.gameMode.useItemOn(player, world, player.getItemInHand(hand), hand, blockHit);
|
||||||
if (result instanceof InteractionResult.Success success)
|
if (result instanceof InteractionResult.Success success)
|
||||||
{
|
{
|
||||||
if (success.swingSource() == InteractionResult.SwingSource.SERVER) player.swing(hand);
|
if (success.swingSource() == InteractionResult.SwingSource.SERVER_ONLY) player.swing(hand, SwingAnimation.DEFAULT, true);
|
||||||
ap.itemUseCooldown = 3;
|
ap.itemUseCooldown = 3;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -385,7 +387,7 @@ public class EntityPlayerActionPack
|
|||||||
if (!action.isContinuous)
|
if (!action.isContinuous)
|
||||||
{
|
{
|
||||||
player.attack(entityHit.getEntity());
|
player.attack(entityHit.getEntity());
|
||||||
player.swing(InteractionHand.MAIN_HAND);
|
player.swing(InteractionHand.MAIN_HAND, SwingAnimation.DEFAULT, true);
|
||||||
}
|
}
|
||||||
player.resetAttackStrengthTicker();
|
player.resetAttackStrengthTicker();
|
||||||
player.resetLastActionTime();
|
player.resetLastActionTime();
|
||||||
@@ -453,7 +455,7 @@ public class EntityPlayerActionPack
|
|||||||
|
|
||||||
}
|
}
|
||||||
player.resetLastActionTime();
|
player.resetLastActionTime();
|
||||||
player.swing(InteractionHand.MAIN_HAND);
|
player.swing(InteractionHand.MAIN_HAND, SwingAnimation.DEFAULT, true);
|
||||||
return blockBroken;
|
return blockBroken;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ import net.minecraft.world.level.LevelReader;
|
|||||||
import net.minecraft.world.level.block.BaseCoralPlantTypeBlock;
|
import net.minecraft.world.level.block.BaseCoralPlantTypeBlock;
|
||||||
import net.minecraft.world.level.block.Block;
|
import net.minecraft.world.level.block.Block;
|
||||||
import net.minecraft.world.level.block.Blocks;
|
import net.minecraft.world.level.block.Blocks;
|
||||||
|
import net.minecraft.world.level.block.BonemealSource;
|
||||||
import net.minecraft.world.level.block.BonemealableBlock;
|
import net.minecraft.world.level.block.BonemealableBlock;
|
||||||
import net.minecraft.world.level.block.state.BlockState;
|
import net.minecraft.world.level.block.state.BlockState;
|
||||||
import net.minecraft.world.level.levelgen.feature.CoralClawFeature;
|
import net.minecraft.world.level.levelgen.feature.CoralClawFeature;
|
||||||
@@ -39,7 +40,7 @@ public interface FertilizableCoral extends BonemealableBlock {
|
|||||||
boolean isEnabled();
|
boolean isEnabled();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public default boolean isValidBonemealTarget(LevelReader world, BlockPos pos, BlockState state)
|
public default boolean isValidBonemealTarget(LevelReader world, BlockPos pos, BlockState state, BonemealSource bonemealSource)
|
||||||
{
|
{
|
||||||
return isEnabled()
|
return isEnabled()
|
||||||
&& state.getValue(BaseCoralPlantTypeBlock.WATERLOGGED)
|
&& state.getValue(BaseCoralPlantTypeBlock.WATERLOGGED)
|
||||||
@@ -47,13 +48,13 @@ public interface FertilizableCoral extends BonemealableBlock {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public default boolean isBonemealSuccess(Level world, RandomSource random, BlockPos pos, BlockState state)
|
public default boolean isBonemealSuccess(Level world, RandomSource random, BlockPos pos, BlockState state, BonemealSource bonemealSource)
|
||||||
{
|
{
|
||||||
return random.nextFloat() < 0.15D;
|
return random.nextFloat() < 0.15D;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public default void performBonemeal(ServerLevel worldIn, RandomSource random, BlockPos pos, BlockState blockUnder)
|
public default void performBonemeal(ServerLevel worldIn, RandomSource random, BlockPos pos, BlockState blockUnder, BonemealSource bonemealSource)
|
||||||
{
|
{
|
||||||
MapColor color = blockUnder.getMapColor(worldIn, pos);
|
MapColor color = blockUnder.getMapColor(worldIn, pos);
|
||||||
BlockState properBlock = blockUnder;
|
BlockState properBlock = blockUnder;
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import net.minecraft.core.Direction;
|
|||||||
import net.minecraft.world.level.Level;
|
import net.minecraft.world.level.Level;
|
||||||
import net.minecraft.world.level.block.Block;
|
import net.minecraft.world.level.block.Block;
|
||||||
import net.minecraft.world.level.block.Blocks;
|
import net.minecraft.world.level.block.Blocks;
|
||||||
import net.minecraft.world.level.block.RedStoneWireBlock;
|
import net.minecraft.world.level.block.RedstoneWireBlock;
|
||||||
import net.minecraft.world.level.block.state.BlockState;
|
import net.minecraft.world.level.block.state.BlockState;
|
||||||
import carpet.fakes.RedstoneWireBlockInterface;
|
import carpet.fakes.RedstoneWireBlockInterface;
|
||||||
|
|
||||||
@@ -79,7 +79,7 @@ public class RedstoneWireTurbo
|
|||||||
|
|
||||||
|
|
||||||
/* Reference to RedstoneWireBlock object, which uses this accelerator */
|
/* Reference to RedstoneWireBlock object, which uses this accelerator */
|
||||||
private final RedStoneWireBlock wire;
|
private final RedstoneWireBlock wire;
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -115,7 +115,7 @@ public class RedstoneWireTurbo
|
|||||||
private List<UpdateNode> updateQueue2 = new ArrayList<>();
|
private List<UpdateNode> updateQueue2 = new ArrayList<>();
|
||||||
|
|
||||||
|
|
||||||
public RedstoneWireTurbo(RedStoneWireBlock wire) {
|
public RedstoneWireTurbo(RedstoneWireBlock wire) {
|
||||||
this.wire = wire;
|
this.wire = wire;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -848,7 +848,7 @@ public class RedstoneWireTurbo
|
|||||||
private BlockState calculateCurrentChanges(final Level worldIn, final UpdateNode upd)
|
private BlockState calculateCurrentChanges(final Level worldIn, final UpdateNode upd)
|
||||||
{
|
{
|
||||||
BlockState state = upd.currentState;
|
BlockState state = upd.currentState;
|
||||||
final int i = state.getValue(RedStoneWireBlock.POWER);
|
final int i = state.getValue(RedstoneWireBlock.POWER);
|
||||||
int j = 0;
|
int j = 0;
|
||||||
j = getMaxCurrentStrength(upd, j);
|
j = getMaxCurrentStrength(upd, j);
|
||||||
int l = 0;
|
int l = 0;
|
||||||
@@ -918,7 +918,7 @@ public class RedstoneWireTurbo
|
|||||||
// and set it in the world.
|
// and set it in the world.
|
||||||
// Possible optimization: Don't commit state changes to the world until they
|
// Possible optimization: Don't commit state changes to the world until they
|
||||||
// need to be known by some nearby non-redstone-wire block.
|
// need to be known by some nearby non-redstone-wire block.
|
||||||
state = state.setValue(RedStoneWireBlock.POWER, j);
|
state = state.setValue(RedstoneWireBlock.POWER, j);
|
||||||
// [gnembon] added state check cause other things in the tick may have popped it up already
|
// [gnembon] added state check cause other things in the tick may have popped it up already
|
||||||
// https://github.com/gnembon/fabric-carpet/issues/117
|
// https://github.com/gnembon/fabric-carpet/issues/117
|
||||||
if (worldIn.getBlockState(upd.self).getBlock() == Blocks.REDSTONE_WIRE)
|
if (worldIn.getBlockState(upd.self).getBlock() == Blocks.REDSTONE_WIRE)
|
||||||
@@ -962,7 +962,7 @@ public class RedstoneWireTurbo
|
|||||||
*/
|
*/
|
||||||
private static int getMaxCurrentStrength(final UpdateNode upd, final int strength) {
|
private static int getMaxCurrentStrength(final UpdateNode upd, final int strength) {
|
||||||
if (upd.type != UpdateNode.Type.REDSTONE) return strength;
|
if (upd.type != UpdateNode.Type.REDSTONE) return strength;
|
||||||
final int i = upd.currentState.getValue(RedStoneWireBlock.POWER);
|
final int i = upd.currentState.getValue(RedstoneWireBlock.POWER);
|
||||||
return i > strength ? i : strength;
|
return i > strength ? i : strength;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -21,7 +21,7 @@ public abstract class BlockBehaviourBlockStateBase_mixin
|
|||||||
{
|
{
|
||||||
if (CarpetSettings.movableAmethyst && getBlock() instanceof BuddingAmethystBlock)
|
if (CarpetSettings.movableAmethyst && getBlock() instanceof BuddingAmethystBlock)
|
||||||
{
|
{
|
||||||
cir.setReturnValue(PushReaction.NORMAL);
|
cir.setReturnValue(PushReaction.PUSH_PULL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3,13 +3,13 @@ package carpet.mixins;
|
|||||||
import carpet.CarpetSettings;
|
import carpet.CarpetSettings;
|
||||||
import net.minecraft.core.BlockPos;
|
import net.minecraft.core.BlockPos;
|
||||||
import net.minecraft.core.registries.Registries;
|
import net.minecraft.core.registries.Registries;
|
||||||
|
import net.minecraft.server.level.ServerLevel;
|
||||||
|
import net.minecraft.server.level.ServerPlayer;
|
||||||
import net.minecraft.tags.ItemTags;
|
import net.minecraft.tags.ItemTags;
|
||||||
import net.minecraft.world.entity.player.Player;
|
|
||||||
import net.minecraft.world.item.ItemStack;
|
import net.minecraft.world.item.ItemStack;
|
||||||
import net.minecraft.world.item.Items;
|
import net.minecraft.world.item.Items;
|
||||||
import net.minecraft.world.item.enchantment.EnchantmentHelper;
|
import net.minecraft.world.item.enchantment.EnchantmentHelper;
|
||||||
import net.minecraft.world.item.enchantment.Enchantments;
|
import net.minecraft.world.item.enchantment.Enchantments;
|
||||||
import net.minecraft.world.level.Level;
|
|
||||||
import net.minecraft.world.level.block.Block;
|
import net.minecraft.world.level.block.Block;
|
||||||
import net.minecraft.world.level.block.BuddingAmethystBlock;
|
import net.minecraft.world.level.block.BuddingAmethystBlock;
|
||||||
import net.minecraft.world.level.block.entity.BlockEntity;
|
import net.minecraft.world.level.block.entity.BlockEntity;
|
||||||
@@ -24,7 +24,7 @@ public class BuddingAmethystBlock_movableAmethystMixin extends Block {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void playerDestroy(Level world, Player player, BlockPos pos, BlockState state, @Nullable BlockEntity blockEntity, ItemStack stack) {
|
public void playerDestroy(ServerLevel world, ServerPlayer player, BlockPos pos, BlockState state, @Nullable BlockEntity blockEntity, ItemStack stack) {
|
||||||
super.playerDestroy(world, player, pos, state, blockEntity, stack);
|
super.playerDestroy(world, player, pos, state, blockEntity, stack);
|
||||||
// doing it here rather than though loottables since loottables are loaded on reload
|
// doing it here rather than though loottables since loottables are loaded on reload
|
||||||
// drawback - not controlled via loottables, but hey
|
// drawback - not controlled via loottables, but hey
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import carpet.utils.SpawnOverrides;
|
|||||||
import it.unimi.dsi.fastutil.longs.LongSet;
|
import it.unimi.dsi.fastutil.longs.LongSet;
|
||||||
import net.minecraft.core.Holder;
|
import net.minecraft.core.Holder;
|
||||||
import net.minecraft.util.random.WeightedList;
|
import net.minecraft.util.random.WeightedList;
|
||||||
|
import net.minecraft.world.level.Level;
|
||||||
import net.minecraft.world.level.StructureManager;
|
import net.minecraft.world.level.StructureManager;
|
||||||
import net.minecraft.world.level.levelgen.structure.Structure;
|
import net.minecraft.world.level.levelgen.structure.Structure;
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
@@ -30,7 +31,7 @@ public abstract class ChunkGenerator_customMobSpawnsMixin
|
|||||||
value = "INVOKE",
|
value = "INVOKE",
|
||||||
target = "Ljava/util/Map$Entry;getKey()Ljava/lang/Object;"
|
target = "Ljava/util/Map$Entry;getKey()Ljava/lang/Object;"
|
||||||
), cancellable = true)
|
), cancellable = true)
|
||||||
private void checkCMSpawns(Holder<Biome> holder, StructureManager structureFeatureManager, MobCategory mobCategory, BlockPos blockPos,
|
private void checkCMSpawns(Level holder, StructureManager structureFeatureManager, MobCategory mobCategory, BlockPos blockPos,
|
||||||
CallbackInfoReturnable<WeightedList<MobSpawnSettings.SpawnerData>> cir,
|
CallbackInfoReturnable<WeightedList<MobSpawnSettings.SpawnerData>> cir,
|
||||||
Map<Structure, LongSet> map, Iterator<?> var6, Map.Entry<Structure, LongSet> entry)
|
Map<Structure, LongSet> map, Iterator<?> var6, Map.Entry<Structure, LongSet> entry)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -86,7 +86,7 @@ public abstract class Explosion_optimizedTntMixin
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Redirect(method = "hurtEntities",
|
@Redirect(method = "hurtEntities",
|
||||||
at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/Entity;push(Lnet/minecraft/world/phys/Vec3;)V"))
|
at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/Entity;pushFromExplosion(Lnet/minecraft/world/phys/Vec3;)V"))
|
||||||
private void setVelocityAndUpdateLogging(Entity entity, Vec3 velocity)
|
private void setVelocityAndUpdateLogging(Entity entity, Vec3 velocity)
|
||||||
{
|
{
|
||||||
if (eLogger != null) {
|
if (eLogger != null) {
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ import net.minecraft.client.renderer.state.level.LevelRenderState;
|
|||||||
import net.minecraft.client.renderer.texture.TextureManager;
|
import net.minecraft.client.renderer.texture.TextureManager;
|
||||||
import net.minecraft.client.resources.model.ModelManager;
|
import net.minecraft.client.resources.model.ModelManager;
|
||||||
import net.minecraft.client.resources.model.sprite.AtlasManager;
|
import net.minecraft.client.resources.model.sprite.AtlasManager;
|
||||||
|
import org.joml.Matrix4f;
|
||||||
import org.joml.Matrix4fc;
|
import org.joml.Matrix4fc;
|
||||||
import org.joml.Vector4f;
|
import org.joml.Vector4f;
|
||||||
import org.spongepowered.asm.mixin.Final;
|
import org.spongepowered.asm.mixin.Final;
|
||||||
@@ -56,7 +57,8 @@ public class LevelRenderer_scarpetRenderMixin
|
|||||||
|
|
||||||
@Inject(method = "render", at = @At(
|
@Inject(method = "render", at = @At(
|
||||||
value = "INVOKE",
|
value = "INVOKE",
|
||||||
target = "Lnet/minecraft/client/renderer/LevelRenderer;addMainPass(Lcom/mojang/blaze3d/framegraph/FrameGraphBuilder;Lnet/minecraft/client/renderer/feature/FeatureRenderDispatcher$PreparedFrame;Lcom/mojang/renderpearl/api/buffers/GpuBufferSlice;Lnet/minecraft/client/renderer/chunk/ChunkSectionsToRender;F)V",
|
//target = "Lnet/minecraft/client/renderer/LevelRenderer;addMainPass(Lcom/mojang/blaze3d/framegraph/FrameGraphBuilder;Lnet/minecraft/client/renderer/feature/FeatureRenderDispatcher$PreparedFrame;Lcom/mojang/renderpearl/api/buffers/GpuBufferSlice;Lnet/minecraft/client/renderer/chunk/ChunkSectionsToRender;Z)V"
|
||||||
|
target = "Lnet/minecraft/client/renderer/LevelRenderer;addMainPass(Lcom/mojang/blaze3d/framegraph/FrameGraphBuilder;Lnet/minecraft/client/renderer/feature/FeatureRenderDispatcher$PreparedFrame;Lcom/mojang/renderpearl/api/buffers/GpuBufferSlice;Lnet/minecraft/client/renderer/chunk/ChunkSectionsToRender;Z)V",
|
||||||
//target = "Lnet/minecraft/client/renderer/LevelRenderer;addMainPass(Lcom/mojang/blaze3d/framegraph/FrameGraphBuilder;Lnet/minecraft/client/renderer/feature/FeatureRenderDispatcher$PreparedFrame;Lcom/mojang/blaze3d/buffers/GpuBufferSlice;Lnet/minecraft/client/renderer/chunk/ChunkSectionsToRender;F)V",
|
//target = "Lnet/minecraft/client/renderer/LevelRenderer;addMainPass(Lcom/mojang/blaze3d/framegraph/FrameGraphBuilder;Lnet/minecraft/client/renderer/feature/FeatureRenderDispatcher$PreparedFrame;Lcom/mojang/blaze3d/buffers/GpuBufferSlice;Lnet/minecraft/client/renderer/chunk/ChunkSectionsToRender;F)V",
|
||||||
//target = "Lnet/minecraft/client/renderer/LevelRenderer;addMainPass(Lcom/mojang/blaze3d/framegraph/FrameGraphBuilder;Lnet/minecraft/client/renderer/feature/FeatureRenderDispatcher$PreparedFrame;Lcom/mojang/blaze3d/buffers/GpuBufferSlice;Lnet/minecraft/client/renderer/chunk/ChunkSectionsToRender;)V",
|
//target = "Lnet/minecraft/client/renderer/LevelRenderer;addMainPass(Lcom/mojang/blaze3d/framegraph/FrameGraphBuilder;Lnet/minecraft/client/renderer/feature/FeatureRenderDispatcher$PreparedFrame;Lcom/mojang/blaze3d/buffers/GpuBufferSlice;Lnet/minecraft/client/renderer/chunk/ChunkSectionsToRender;)V",
|
||||||
//target = "Lnet/minecraft/client/renderer/LevelRenderer;addAlwaysOnTopPass(Lcom/mojang/blaze3d/framegraph/FrameGraphBuilder;Lcom/mojang/blaze3d/buffers/GpuBufferSlice;)V",
|
//target = "Lnet/minecraft/client/renderer/LevelRenderer;addAlwaysOnTopPass(Lcom/mojang/blaze3d/framegraph/FrameGraphBuilder;Lcom/mojang/blaze3d/buffers/GpuBufferSlice;)V",
|
||||||
@@ -65,7 +67,8 @@ target = "Lnet/minecraft/client/renderer/LevelRenderer;addMainPass(Lcom/mojang/b
|
|||||||
//target = "Lnet/minecraft/client/renderer/LevelRenderer;addLateDebugPass(Lcom/mojang/blaze3d/framegraph/FrameGraphBuilder;Lnet/minecraft/client/renderer/state/level/CameraRenderState;Lcom/mojang/blaze3d/buffers/GpuBufferSlice;Lorg/joml/Matrix4fc;)V",
|
//target = "Lnet/minecraft/client/renderer/LevelRenderer;addLateDebugPass(Lcom/mojang/blaze3d/framegraph/FrameGraphBuilder;Lnet/minecraft/client/renderer/state/level/CameraRenderState;Lcom/mojang/blaze3d/buffers/GpuBufferSlice;Lorg/joml/Matrix4fc;)V",
|
||||||
shift = At.Shift.AFTER
|
shift = At.Shift.AFTER
|
||||||
))
|
))
|
||||||
private void renderScarpetThingsLate(GraphicsResourceAllocator resourceAllocator, DeltaTracker deltaTracker, boolean renderOutline, CameraRenderState cameraState, Matrix4fc modelViewMatrix, GpuBufferSlice terrainFog, Vector4f fogColor, boolean shouldRenderSky, CallbackInfo ci, @Local FrameGraphBuilder frameGraphBuilder)
|
private void renderStanperThingsLate (GraphicsResourceAllocator resourceAllocator, boolean renderOutline, CameraRenderState cameraState, GpuBufferSlice terrainFog, Vector4f fogColor, boolean shouldRenderSky, boolean consistentDepthRequired, CallbackInfo ci, @Local(name = "frame") FrameGraphBuilder frameGraphBuilder)
|
||||||
|
//private void renderScarpetThingsLate(GraphicsResourceAllocator resourceAllocator, DeltaTracker deltaTracker, boolean renderOutline, CameraRenderState cameraState, Matrix4fc modelViewMatrix, GpuBufferSlice terrainFog, Vector4f fogColor, boolean shouldRenderSky, boolean consistentDepthRequired, CallbackInfo ci, @Local FrameGraphBuilder frameGraphBuilder)
|
||||||
//private void renderScarpetThinsLate(GraphicsResourceAllocator resourceAllocator, DeltaTracker deltaTracker, boolean renderOutline, CameraRenderState cameraState, Matrix4fc modelViewMatrix, GpuBufferSlice terrainFog, Vector4f fogColor, boolean shouldRenderSky, CallbackInfo ci, @Local FrameGraphBuilder frameGraphBuilder)
|
//private void renderScarpetThinsLate(GraphicsResourceAllocator resourceAllocator, DeltaTracker deltaTracker, boolean renderOutline, CameraRenderState cameraState, Matrix4fc modelViewMatrix, GpuBufferSlice terrainFog, Vector4f fogColor, boolean shouldRenderSky, CallbackInfo ci, @Local FrameGraphBuilder frameGraphBuilder)
|
||||||
{
|
{
|
||||||
// in normal circumstances we want to render shapes at the very end so it appears correctly behind stuff.
|
// in normal circumstances we want to render shapes at the very end so it appears correctly behind stuff.
|
||||||
@@ -73,10 +76,11 @@ target = "Lnet/minecraft/client/renderer/LevelRenderer;addMainPass(Lcom/mojang/b
|
|||||||
//if (!FabricAPIHooks.WORLD_RENDER_EVENTS && CarpetClient.shapes != null )
|
//if (!FabricAPIHooks.WORLD_RENDER_EVENTS && CarpetClient.shapes != null )
|
||||||
if (CarpetClient.shapes != null)
|
if (CarpetClient.shapes != null)
|
||||||
{
|
{
|
||||||
final float deltaPartialTick = deltaTracker.getGameTimeDeltaPartialTick(false);
|
//final float deltaPartialTick = deltaTracker.getGameTimeDeltaPartialTick(false);
|
||||||
FramePass pass = frameGraphBuilder.addPass("scarpet_shapes");
|
FramePass pass = frameGraphBuilder.addPass("scarpet_shapes");
|
||||||
targets.main = pass.readsAndWrites(targets.main);
|
targets.main = pass.readsAndWrites(targets.main);
|
||||||
pass.executes(() -> CarpetClient.shapes.render(submitNodeStorage, levelRenderState, modelViewMatrix, deltaPartialTick));
|
var modelViewMatrix = new Matrix4f(levelRenderState.cameraRenderState.viewRotationMatrix);
|
||||||
|
pass.executes(() -> CarpetClient.shapes.render(submitNodeStorage, levelRenderState, modelViewMatrix, levelRenderState.worldPartialTicks));
|
||||||
//featureRenderDispatcher.renderAllFeatures(submitNodeStorage);
|
//featureRenderDispatcher.renderAllFeatures(submitNodeStorage);
|
||||||
//renderBuffers.bufferSource().uploadAndDraw();
|
//renderBuffers.bufferSource().uploadAndDraw();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -79,7 +79,7 @@ public abstract class PistonBaseBlock_movableBEMixin extends DirectionalBlock
|
|||||||
))
|
))
|
||||||
private static PushReaction moveGrindstones(BlockState blockState)
|
private static PushReaction moveGrindstones(BlockState blockState)
|
||||||
{
|
{
|
||||||
if (CarpetSettings.movableBlockEntities && blockState.getBlock() == Blocks.GRINDSTONE) return PushReaction.NORMAL;
|
if (CarpetSettings.movableBlockEntities && blockState.getBlock() == Blocks.GRINDSTONE) return PushReaction.PUSH_PULL;
|
||||||
return blockState.getPistonPushReaction();
|
return blockState.getPistonPushReaction();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
package carpet.mixins;
|
package carpet.mixins;
|
||||||
|
|
||||||
import carpet.fakes.RandomStateVisitorAccessor;
|
import carpet.fakes.RandomStateVisitorAccessor;
|
||||||
import net.minecraft.world.level.levelgen.DensityFunction;
|
import net.minecraft.world.level.levelgen.densityfunction.DensityFunction;
|
||||||
import net.minecraft.world.level.levelgen.RandomState;
|
import net.minecraft.world.level.levelgen.RandomState;
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
import org.spongepowered.asm.mixin.Unique;
|
import org.spongepowered.asm.mixin.Unique;
|
||||||
@@ -17,7 +17,7 @@ public class RandomState_ScarpetMixin implements RandomStateVisitorAccessor {
|
|||||||
method = "<init>",
|
method = "<init>",
|
||||||
at = @At(
|
at = @At(
|
||||||
value = "INVOKE",
|
value = "INVOKE",
|
||||||
target = "Lnet/minecraft/world/level/levelgen/NoiseRouter;mapAll(Lnet/minecraft/world/level/levelgen/DensityFunction$Visitor;)Lnet/minecraft/world/level/levelgen/NoiseRouter;"
|
target = "Lnet/minecraft/world/level/levelgen/NoiseRouter;mapAll(Lnet/minecraft/world/level/levelgen/densityfunction/DensityFunction$Visitor;)Lnet/minecraft/world/level/levelgen/NoiseRouter;"
|
||||||
),
|
),
|
||||||
index = 0
|
index = 0
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -21,15 +21,15 @@ import net.minecraft.core.BlockPos;
|
|||||||
import net.minecraft.core.Direction;
|
import net.minecraft.core.Direction;
|
||||||
import net.minecraft.world.level.Level;
|
import net.minecraft.world.level.Level;
|
||||||
import net.minecraft.world.level.block.Block;
|
import net.minecraft.world.level.block.Block;
|
||||||
import net.minecraft.world.level.block.RedStoneWireBlock;
|
import net.minecraft.world.level.block.RedstoneWireBlock;
|
||||||
import net.minecraft.world.level.block.state.BlockBehaviour;
|
import net.minecraft.world.level.block.state.BlockBehaviour;
|
||||||
import net.minecraft.world.level.block.state.BlockState;
|
import net.minecraft.world.level.block.state.BlockState;
|
||||||
|
|
||||||
import org.jspecify.annotations.Nullable;
|
import org.jspecify.annotations.Nullable;
|
||||||
|
|
||||||
import static net.minecraft.world.level.block.RedStoneWireBlock.POWER;
|
import static net.minecraft.world.level.block.RedstoneWireBlock.POWER;
|
||||||
|
|
||||||
@Mixin(RedStoneWireBlock.class)
|
@Mixin(RedstoneWireBlock.class)
|
||||||
public abstract class RedstoneWireBlock_fastMixin implements RedstoneWireBlockInterface {
|
public abstract class RedstoneWireBlock_fastMixin implements RedstoneWireBlockInterface {
|
||||||
|
|
||||||
@Shadow
|
@Shadow
|
||||||
@@ -43,7 +43,7 @@ public abstract class RedstoneWireBlock_fastMixin implements RedstoneWireBlockIn
|
|||||||
@Accessor("shouldSignal")
|
@Accessor("shouldSignal")
|
||||||
public abstract boolean getWiresGivePower();
|
public abstract boolean getWiresGivePower();
|
||||||
|
|
||||||
private RedstoneWireEvaluator legacy = new DefaultRedstoneWireEvaluator((RedStoneWireBlock)(Object) this);
|
private RedstoneWireEvaluator legacy = new DefaultRedstoneWireEvaluator((RedstoneWireBlock)(Object) this);
|
||||||
|
|
||||||
// =
|
// =
|
||||||
|
|
||||||
@@ -52,7 +52,7 @@ public abstract class RedstoneWireBlock_fastMixin implements RedstoneWireBlockIn
|
|||||||
@Inject(method = "<init>", at = @At("RETURN"))
|
@Inject(method = "<init>", at = @At("RETURN"))
|
||||||
private void onRedstoneWireBlockCTOR(BlockBehaviour.Properties settings, CallbackInfo ci) {
|
private void onRedstoneWireBlockCTOR(BlockBehaviour.Properties settings, CallbackInfo ci) {
|
||||||
//noinspection ConstantConditions
|
//noinspection ConstantConditions
|
||||||
wireTurbo = new RedstoneWireTurbo((RedStoneWireBlock) (Object) this);
|
wireTurbo = new RedstoneWireTurbo((RedstoneWireBlock) (Object) this);
|
||||||
}
|
}
|
||||||
|
|
||||||
// =
|
// =
|
||||||
@@ -114,24 +114,24 @@ public abstract class RedstoneWireBlock_fastMixin implements RedstoneWireBlockIn
|
|||||||
// =
|
// =
|
||||||
|
|
||||||
|
|
||||||
@Redirect(method = "onPlace", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/block/RedStoneWireBlock;updatePowerStrength(Lnet/minecraft/world/level/Level;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/world/level/redstone/Orientation;Z)V"))
|
@Redirect(method = "onPlace", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/block/RedstoneWireBlock;updatePowerStrength(Lnet/minecraft/world/level/Level;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/world/level/redstone/Orientation;Z)V"))
|
||||||
private void redirectOnBlockAddedUpdate(RedStoneWireBlock self, Level world_1, BlockPos blockPos_1, BlockState blockState_1, Orientation o, boolean sup) {
|
private void redirectOnBlockAddedUpdate(RedstoneWireBlock self, Level world_1, BlockPos blockPos_1, BlockState blockState_1, Orientation o, boolean sup) {
|
||||||
fastUpdate(world_1, blockPos_1, blockState_1, o, sup);
|
fastUpdate(world_1, blockPos_1, blockState_1, o, sup);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Redirect(method = "affectNeighborsAfterRemoval", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/block/RedStoneWireBlock;updatePowerStrength(Lnet/minecraft/world/level/Level;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/world/level/redstone/Orientation;Z)V"))
|
@Redirect(method = "affectNeighborsAfterRemoval", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/block/RedstoneWireBlock;updatePowerStrength(Lnet/minecraft/world/level/Level;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/world/level/redstone/Orientation;Z)V"))
|
||||||
private void redirectOnStateReplacedUpdate(RedStoneWireBlock self, Level world_1, BlockPos blockPos_1, BlockState blockState_1, Orientation o, boolean sup) {
|
private void redirectOnStateReplacedUpdate(RedstoneWireBlock self, Level world_1, BlockPos blockPos_1, BlockState blockState_1, Orientation o, boolean sup) {
|
||||||
fastUpdate(world_1, blockPos_1, blockState_1, o, sup);
|
fastUpdate(world_1, blockPos_1, blockState_1, o, sup);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Redirect(method = "neighborChanged", at = @At(value = "INVOKE", target =
|
@Redirect(method = "neighborChanged", at = @At(value = "INVOKE", target =
|
||||||
"Lnet/minecraft/world/level/block/RedStoneWireBlock;updatePowerStrength(Lnet/minecraft/world/level/Level;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/world/level/redstone/Orientation;Z)V"
|
"Lnet/minecraft/world/level/block/RedstoneWireBlock;updatePowerStrength(Lnet/minecraft/world/level/Level;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/world/level/redstone/Orientation;Z)V"
|
||||||
//"Lnet/minecraft/world/level/block/RedStoneWireBlock;updatePowerStrength(Lnet/minecraft/world/level/Level;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/world/level/redstone/Orientation;)V"
|
//"Lnet/minecraft/world/level/block/RedstoneWireBlock;updatePowerStrength(Lnet/minecraft/world/level/Level;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/world/level/redstone/Orientation;)V"
|
||||||
))
|
))
|
||||||
//private void red(final RedStoneWireBlock instance, final Level level,
|
//private void red(final RedStoneWireBlock instance, final Level level,
|
||||||
// final BlockPos blockPos, final BlockState blockState, final Orientation orientation)
|
// final BlockPos blockPos, final BlockState blockState, final Orientation orientation)
|
||||||
private void redirectNeighborUpdateUpdate(
|
private void redirectNeighborUpdateUpdate(
|
||||||
RedStoneWireBlock self,
|
RedstoneWireBlock self,
|
||||||
Level world_1,
|
Level world_1,
|
||||||
BlockPos blockPos_1,
|
BlockPos blockPos_1,
|
||||||
BlockState blockState_1,
|
BlockState blockState_1,
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ import net.minecraft.network.protocol.game.ServerboundPlayerActionPacket;
|
|||||||
import net.minecraft.network.protocol.game.ServerboundPlayerCommandPacket;
|
import net.minecraft.network.protocol.game.ServerboundPlayerCommandPacket;
|
||||||
import net.minecraft.network.protocol.game.ServerboundPlayerInputPacket;
|
import net.minecraft.network.protocol.game.ServerboundPlayerInputPacket;
|
||||||
import net.minecraft.network.protocol.game.ServerboundSetCarriedItemPacket;
|
import net.minecraft.network.protocol.game.ServerboundSetCarriedItemPacket;
|
||||||
import net.minecraft.network.protocol.game.ServerboundSwingPacket;
|
import net.minecraft.network.protocol.game.ServerboundPunchPacket;
|
||||||
import net.minecraft.network.protocol.game.ServerboundUseItemOnPacket;
|
import net.minecraft.network.protocol.game.ServerboundUseItemOnPacket;
|
||||||
import net.minecraft.network.protocol.game.ServerboundUseItemPacket;
|
import net.minecraft.network.protocol.game.ServerboundUseItemPacket;
|
||||||
import net.minecraft.server.level.ServerPlayer;
|
import net.minecraft.server.level.ServerPlayer;
|
||||||
@@ -171,8 +171,8 @@ public class ServerGamePacketListenerImpl_scarpetEventsMixin
|
|||||||
{
|
{
|
||||||
if (PLAYER_RIGHT_CLICKS_BLOCK.isNeeded())
|
if (PLAYER_RIGHT_CLICKS_BLOCK.isNeeded())
|
||||||
{
|
{
|
||||||
InteractionHand hand = playerInteractBlockC2SPacket_1.getHand();
|
InteractionHand hand = playerInteractBlockC2SPacket_1.hand();
|
||||||
BlockHitResult hitRes = playerInteractBlockC2SPacket_1.getHitResult();
|
BlockHitResult hitRes = playerInteractBlockC2SPacket_1.hitResult();
|
||||||
if(PLAYER_RIGHT_CLICKS_BLOCK.onBlockHit(player, hand, hitRes)) {
|
if(PLAYER_RIGHT_CLICKS_BLOCK.onBlockHit(player, hand, hitRes)) {
|
||||||
ci.cancel();
|
ci.cancel();
|
||||||
}
|
}
|
||||||
@@ -187,7 +187,7 @@ public class ServerGamePacketListenerImpl_scarpetEventsMixin
|
|||||||
{
|
{
|
||||||
if (PLAYER_USES_ITEM.isNeeded())
|
if (PLAYER_USES_ITEM.isNeeded())
|
||||||
{
|
{
|
||||||
InteractionHand hand = playerInteractItemC2SPacket_1.getHand();
|
InteractionHand hand = playerInteractItemC2SPacket_1.hand();
|
||||||
if(PLAYER_USES_ITEM.onItemAction(player, hand, player.getItemInHand(hand).copy())) {
|
if(PLAYER_USES_ITEM.onItemAction(player, hand, player.getItemInHand(hand).copy())) {
|
||||||
ci.cancel();
|
ci.cancel();
|
||||||
}
|
}
|
||||||
@@ -267,16 +267,16 @@ public class ServerGamePacketListenerImpl_scarpetEventsMixin
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Inject(method = "handleAnimate", at = @At(
|
@Inject(method = "handlePunch", at = @At(
|
||||||
value = "INVOKE", target =
|
value = "INVOKE", target =
|
||||||
"Lnet/minecraft/server/level/ServerPlayer;resetLastActionTime()V",
|
"Lnet/minecraft/server/level/ServerPlayer;resetLastActionTime()V",
|
||||||
shift = At.Shift.BEFORE)
|
shift = At.Shift.BEFORE)
|
||||||
)
|
)
|
||||||
private void onSwing(ServerboundSwingPacket packet, CallbackInfo ci)
|
private void onSwing(ServerboundPunchPacket packet, CallbackInfo ci)
|
||||||
{
|
{
|
||||||
if (PLAYER_SWINGS_HAND.isNeeded() && !player.swinging)
|
if (PLAYER_SWINGS_HAND.isNeeded() && !player.isSwinging())
|
||||||
{
|
{
|
||||||
PLAYER_SWINGS_HAND.onHandAction(player, packet.getHand());
|
PLAYER_SWINGS_HAND.onHandAction(player, InteractionHand.MAIN_HAND);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ public class ShulkerBoxBlockEntity_creativeNoClipMixin
|
|||||||
private PushReaction getPistonBehaviourOfNoClipPlayers(Entity entity)
|
private PushReaction getPistonBehaviourOfNoClipPlayers(Entity entity)
|
||||||
{
|
{
|
||||||
if (CarpetSettings.creativeNoClip && entity instanceof Player && (((Player) entity).isCreative()) && ((Player) entity).getAbilities().flying)
|
if (CarpetSettings.creativeNoClip && entity instanceof Player && (((Player) entity).isCreative()) && ((Player) entity).getAbilities().flying)
|
||||||
return PushReaction.IGNORE;
|
return PushReaction.IGNORE_ENTITY;
|
||||||
return entity.getPistonPushReaction();
|
return entity.getPistonPushReaction();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -424,7 +424,7 @@ public class Auxiliary
|
|||||||
armorstand.setHeadPose(new Rotations((int) pointLocator.pitch, 0, 0));
|
armorstand.setHeadPose(new Rotations((int) pointLocator.pitch, 0, 0));
|
||||||
armorstand.setNoGravity(true);
|
armorstand.setNoGravity(true);
|
||||||
armorstand.setInvisible(true);
|
armorstand.setInvisible(true);
|
||||||
armorstand.setInvulnerable(true);
|
armorstand.setPermanentlyInvulnerable(true);
|
||||||
armorstand.getEntityData().set(ArmorStand.DATA_CLIENT_FLAGS, (byte) (interactable ? 8 : 16 | 8));
|
armorstand.getEntityData().set(ArmorStand.DATA_CLIENT_FLAGS, (byte) (interactable ? 8 : 16 | 8));
|
||||||
level.addFreshEntity(armorstand);
|
level.addFreshEntity(armorstand);
|
||||||
return new EntityValue(armorstand);
|
return new EntityValue(armorstand);
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ import net.minecraft.network.chat.Component;
|
|||||||
import net.minecraft.resources.Identifier;
|
import net.minecraft.resources.Identifier;
|
||||||
import net.minecraft.server.level.ServerPlayer;
|
import net.minecraft.server.level.ServerPlayer;
|
||||||
import net.minecraft.tags.TagKey;
|
import net.minecraft.tags.TagKey;
|
||||||
|
import net.minecraft.util.Prediction;
|
||||||
import net.minecraft.util.context.ContextMap;
|
import net.minecraft.util.context.ContextMap;
|
||||||
import net.minecraft.world.entity.LivingEntity;
|
import net.minecraft.world.entity.LivingEntity;
|
||||||
import net.minecraft.world.entity.item.ItemEntity;
|
import net.minecraft.world.entity.item.ItemEntity;
|
||||||
@@ -441,7 +442,7 @@ public class Inventories
|
|||||||
ItemEntity item;
|
ItemEntity item;
|
||||||
if (owner instanceof Player player)
|
if (owner instanceof Player player)
|
||||||
{
|
{
|
||||||
item = player.drop(droppedStack, false, true);
|
item = player.drop(droppedStack, false, Prediction.SERVER_ONLY);
|
||||||
if (item == null)
|
if (item == null)
|
||||||
{
|
{
|
||||||
return Value.ZERO;
|
return Value.ZERO;
|
||||||
|
|||||||
@@ -61,8 +61,9 @@ import net.minecraft.world.level.ServerExplosion;
|
|||||||
import net.minecraft.world.level.chunk.ChunkGenerator;
|
import net.minecraft.world.level.chunk.ChunkGenerator;
|
||||||
import net.minecraft.world.level.chunk.PalettedContainer;
|
import net.minecraft.world.level.chunk.PalettedContainer;
|
||||||
import net.minecraft.world.level.chunk.status.ChunkStatus;
|
import net.minecraft.world.level.chunk.status.ChunkStatus;
|
||||||
import net.minecraft.world.level.levelgen.DensityFunction;
|
import net.minecraft.world.level.levelgen.Aquifer;
|
||||||
import net.minecraft.world.level.levelgen.DensityFunctions;
|
import net.minecraft.world.level.levelgen.densityfunction.DensityFunction;
|
||||||
|
import net.minecraft.world.level.levelgen.densityfunction.DensityFunctions;
|
||||||
import net.minecraft.world.level.levelgen.NoiseBasedChunkGenerator;
|
import net.minecraft.world.level.levelgen.NoiseBasedChunkGenerator;
|
||||||
import net.minecraft.world.level.levelgen.NoiseRouter;
|
import net.minecraft.world.level.levelgen.NoiseRouter;
|
||||||
import net.minecraft.world.level.levelgen.RandomState;
|
import net.minecraft.world.level.levelgen.RandomState;
|
||||||
@@ -1730,33 +1731,41 @@ public class WorldAccess
|
|||||||
{
|
{
|
||||||
return ListValue.wrap(cc.registry(Registries.DENSITY_FUNCTION).keySet().stream().map(ValueConversions::of));
|
return ListValue.wrap(cc.registry(Registries.DENSITY_FUNCTION).keySet().stream().map(ValueConversions::of));
|
||||||
}
|
}
|
||||||
NoiseRouter router = level.getChunkSource().randomState().router();
|
RandomState router = level.getChunkSource().randomState();
|
||||||
return densityFunctionQueries.length == 1
|
return densityFunctionQueries.length == 1
|
||||||
? NumericValue.of(sampleNoise(router, level, densityFunctionQueries[0], pos))
|
? NumericValue.of(sampleNoise(router, level, densityFunctionQueries[0], pos))
|
||||||
: ListValue.wrap(Arrays.stream(densityFunctionQueries).map(s -> NumericValue.of(sampleNoise(router, level, s, pos))));
|
: ListValue.wrap(Arrays.stream(densityFunctionQueries).map(s -> NumericValue.of(sampleNoise(router, level, s, pos))));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public static double sampleNoise(NoiseRouter router, ServerLevel level, String what, BlockPos pos)
|
public static double sampleNoise(RandomState router, ServerLevel level, String what, BlockPos pos)
|
||||||
{
|
{
|
||||||
DensityFunction densityFunction = switch (what)
|
DensityFunction densityFunction = switch (what)
|
||||||
{
|
{
|
||||||
case "barrier_noise" -> router.barrierNoise();
|
case "temperature" -> router.router().temperature();
|
||||||
case "fluid_level_floodedness_noise" -> router.fluidLevelFloodednessNoise();
|
case "vegetation" -> router.router().vegetation();
|
||||||
case "fluid_level_spread_noise" -> router.fluidLevelSpreadNoise();
|
case "continents" -> router.router().continents();
|
||||||
case "lava_noise" -> router.lavaNoise();
|
case "erosion" -> router.router().erosion();
|
||||||
case "temperature" -> router.temperature();
|
case "depth" -> router.router().depth();
|
||||||
case "vegetation" -> router.vegetation();
|
case "ridges" -> router.router().ridges();
|
||||||
case "continents" -> router.continents();
|
case "preliminary_surface_level" -> router.router().preliminarySurfaceLevel();
|
||||||
case "erosion" -> router.erosion();
|
case "final_density" -> router.router().finalDensity();
|
||||||
case "depth" -> router.depth();
|
//case "vein_toggle" -> router. router(). veinToggle();
|
||||||
case "ridges" -> router.ridges();
|
//case "vein_ridged" -> router.router().veinRidged();
|
||||||
case "preliminary_surface_level" -> router.preliminarySurfaceLevel();
|
//case "vein_gap" -> router.router().veinGap();
|
||||||
case "final_density" -> router.finalDensity();
|
default -> {
|
||||||
case "vein_toggle" -> router.veinToggle();
|
Aquifer.Config aquifer = router.aquifers().orElse(null);
|
||||||
case "vein_ridged" -> router.veinRidged();
|
if (aquifer != null) {
|
||||||
case "vein_gap" -> router.veinGap();
|
yield switch (what) {
|
||||||
default -> stupidWorldgenNoiseCacheGetter.apply(Pair.of(level, what));
|
case "barrier_noise" -> aquifer.barrierNoise();
|
||||||
|
case "fluid_level_floodedness_noise" -> aquifer.fluidLevelFloodednessNoise();
|
||||||
|
case "fluid_level_spread_noise" -> aquifer.fluidLevelSpreadNoise();
|
||||||
|
case "lava_noise" -> aquifer.lavaNoise();
|
||||||
|
default -> stupidWorldgenNoiseCacheGetter.apply(Pair.of(level, what));
|
||||||
|
};
|
||||||
|
}
|
||||||
|
yield stupidWorldgenNoiseCacheGetter.apply(Pair.of(level, what));
|
||||||
|
}
|
||||||
};
|
};
|
||||||
return densityFunction.compute(new DensityFunction.SinglePointContext(pos.getX(), pos.getY(), pos.getZ()));
|
return densityFunction.compute(new DensityFunction.SinglePointContext(pos.getX(), pos.getY(), pos.getZ()));
|
||||||
}
|
}
|
||||||
@@ -1773,10 +1782,6 @@ public class WorldAccess
|
|||||||
NoiseRouter router = noiseBasedChunkGenerator.generatorSettings().value().noiseRouter();
|
NoiseRouter router = noiseBasedChunkGenerator.generatorSettings().value().noiseRouter();
|
||||||
DensityFunction densityFunction = switch (densityFunctionQuery)
|
DensityFunction densityFunction = switch (densityFunctionQuery)
|
||||||
{
|
{
|
||||||
case "barrier_noise" -> router.barrierNoise();
|
|
||||||
case "fluid_level_floodedness_noise" -> router.fluidLevelFloodednessNoise();
|
|
||||||
case "fluid_level_spread_noise" -> router.fluidLevelSpreadNoise();
|
|
||||||
case "lava_noise" -> router.lavaNoise();
|
|
||||||
case "temperature" -> router.temperature();
|
case "temperature" -> router.temperature();
|
||||||
case "vegetation" -> router.vegetation();
|
case "vegetation" -> router.vegetation();
|
||||||
case "continents" -> router.continents();
|
case "continents" -> router.continents();
|
||||||
@@ -1785,10 +1790,29 @@ public class WorldAccess
|
|||||||
case "ridges" -> router.ridges();
|
case "ridges" -> router.ridges();
|
||||||
case "preliminary_surface_level" -> router.preliminarySurfaceLevel();
|
case "preliminary_surface_level" -> router.preliminarySurfaceLevel();
|
||||||
case "final_density" -> router.finalDensity();
|
case "final_density" -> router.finalDensity();
|
||||||
case "vein_toggle" -> router.veinToggle();
|
//case "vein_toggle" -> router.veinToggle();
|
||||||
case "vein_ridged" -> router.veinRidged();
|
//case "vein_ridged" -> router.veinRidged();
|
||||||
case "vein_gap" -> router.veinGap();
|
//case "vein_gap" -> router.veinGap();
|
||||||
default -> {
|
default -> {
|
||||||
|
Aquifer.Config aquifers = noiseBasedChunkGenerator.generatorSettings().value().aquifers().orElse(null);
|
||||||
|
if (aquifers != null) {
|
||||||
|
yield switch (densityFunctionQuery) {
|
||||||
|
case "barrier_noise" -> aquifers.barrierNoise();
|
||||||
|
case "fluid_level_floodedness_noise" -> aquifers.fluidLevelFloodednessNoise();
|
||||||
|
case "fluid_level_spread_noise" -> aquifers.fluidLevelSpreadNoise();
|
||||||
|
case "lava_noise" -> aquifers.lavaNoise();
|
||||||
|
default -> {
|
||||||
|
DensityFunction result = densityFunctionRegistry.getValue(InputValidator.identifierOf(densityFunctionQuery));
|
||||||
|
if (result == null)
|
||||||
|
{
|
||||||
|
throw new InternalExpressionException("Density function '" + densityFunctionQuery + "' is not defined in the registies.");
|
||||||
|
}
|
||||||
|
yield result;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
DensityFunction result = densityFunctionRegistry.getValue(InputValidator.identifierOf(densityFunctionQuery));
|
DensityFunction result = densityFunctionRegistry.getValue(InputValidator.identifierOf(densityFunctionQuery));
|
||||||
if (result == null)
|
if (result == null)
|
||||||
{
|
{
|
||||||
|
|||||||
+1
-1
@@ -53,7 +53,7 @@ import net.minecraft.world.level.biome.Biome;
|
|||||||
import net.minecraft.world.level.block.Block;
|
import net.minecraft.world.level.block.Block;
|
||||||
import net.minecraft.world.level.block.state.BlockState;
|
import net.minecraft.world.level.block.state.BlockState;
|
||||||
import net.minecraft.world.level.block.state.pattern.BlockInWorld;
|
import net.minecraft.world.level.block.state.pattern.BlockInWorld;
|
||||||
import net.minecraft.world.level.levelgen.DensityFunction;
|
import net.minecraft.world.level.levelgen.densityfunction.DensityFunction;
|
||||||
import net.minecraft.world.level.levelgen.RandomState;
|
import net.minecraft.world.level.levelgen.RandomState;
|
||||||
import net.minecraft.world.level.storage.LevelStorageSource;
|
import net.minecraft.world.level.storage.LevelStorageSource;
|
||||||
import net.minecraft.world.level.storage.ServerLevelData;
|
import net.minecraft.world.level.storage.ServerLevelData;
|
||||||
|
|||||||
@@ -269,7 +269,7 @@ public class FeatureGenerator
|
|||||||
{
|
{
|
||||||
//Holder<Biome> genBiome = generator.getBiomeSource().getNoiseBiome(QuartPos.fromBlock(pos.getX()), QuartPos.fromBlock(pos.getY()), QuartPos.fromBlock(pos.getZ()), seed.sampler());
|
//Holder<Biome> genBiome = generator.getBiomeSource().getNoiseBiome(QuartPos.fromBlock(pos.getX()), QuartPos.fromBlock(pos.getY()), QuartPos.fromBlock(pos.getZ()), seed.sampler());
|
||||||
if (structure.findValidGenerationPoint(new Structure.GenerationContext(
|
if (structure.findValidGenerationPoint(new Structure.GenerationContext(
|
||||||
world.registryAccess(), generator, generator.getBiomeSource(),
|
world.registryAccess(), generator, world.uncachedBiomeResolver(),
|
||||||
seed, world.getStructureManager(), world.getSeed(), chunkPos, world, structureBiomes::contains
|
seed, world.getStructureManager(), world.getSeed(), chunkPos, world, structureBiomes::contains
|
||||||
)).isPresent())
|
)).isPresent())
|
||||||
{
|
{
|
||||||
@@ -279,7 +279,7 @@ public class FeatureGenerator
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
StructureStart filledStructure = structure.generate(Holder.direct(structure), world.dimension(),
|
StructureStart filledStructure = structure.generate(Holder.direct(structure), world.dimension(),
|
||||||
world.registryAccess(), generator, generator.getBiomeSource(), seed, world.getStructureManager(),
|
world.registryAccess(), generator, world.uncachedBiomeResolver(), seed, world.getStructureManager(),
|
||||||
world.getSeed(), chunkPos, 0, world, structureBiomes::contains);
|
world.getSeed(), chunkPos, 0, world, structureBiomes::contains);
|
||||||
if (filledStructure != null && filledStructure.isValid())
|
if (filledStructure != null && filledStructure.isValid())
|
||||||
{
|
{
|
||||||
@@ -508,7 +508,7 @@ public class FeatureGenerator
|
|||||||
checks.set(true);
|
checks.set(true);
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
StructureStart start = structure.generate(Holder.direct(structure), world.dimension(), world.registryAccess(), generator, generator.getBiomeSource(), world.getChunkSource().randomState(), world.getStructureManager(), world.getSeed(), ChunkPos.containing(pos), 0, world, b -> true);
|
StructureStart start = structure.generate(Holder.direct(structure), world.dimension(), world.registryAccess(), generator, world.uncachedBiomeResolver(), world.getChunkSource().randomState(), world.getStructureManager(), world.getSeed(), ChunkPos.containing(pos), 0, world, b -> true);
|
||||||
if (start == StructureStart.INVALID_START)
|
if (start == StructureStart.INVALID_START)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -70,6 +70,7 @@ import net.minecraft.world.entity.projectile.Projectile;
|
|||||||
import net.minecraft.world.entity.projectile.hurtingprojectile.WitherSkull;
|
import net.minecraft.world.entity.projectile.hurtingprojectile.WitherSkull;
|
||||||
import net.minecraft.world.entity.vehicle.minecart.AbstractMinecart;
|
import net.minecraft.world.entity.vehicle.minecart.AbstractMinecart;
|
||||||
import net.minecraft.world.item.ItemStack;
|
import net.minecraft.world.item.ItemStack;
|
||||||
|
import net.minecraft.world.item.component.SwingAnimation;
|
||||||
import net.minecraft.world.level.GameType;
|
import net.minecraft.world.level.GameType;
|
||||||
import net.minecraft.world.level.Level;
|
import net.minecraft.world.level.Level;
|
||||||
import net.minecraft.world.level.entity.EntityTypeTest;
|
import net.minecraft.world.level.entity.EntityTypeTest;
|
||||||
@@ -554,7 +555,7 @@ public class EntityValue extends Value
|
|||||||
put("sneaking", (e, a) -> e.isShiftKeyDown() ? Value.TRUE : Value.FALSE);
|
put("sneaking", (e, a) -> e.isShiftKeyDown() ? Value.TRUE : Value.FALSE);
|
||||||
put("sprinting", (e, a) -> e.isSprinting() ? Value.TRUE : Value.FALSE);
|
put("sprinting", (e, a) -> e.isSprinting() ? Value.TRUE : Value.FALSE);
|
||||||
put("swimming", (e, a) -> e.isSwimming() ? Value.TRUE : Value.FALSE);
|
put("swimming", (e, a) -> e.isSwimming() ? Value.TRUE : Value.FALSE);
|
||||||
put("swinging", (e, a) -> e instanceof LivingEntity le ? BooleanValue.of(le.swinging) : Value.NULL);
|
put("swinging", (e, a) -> e instanceof LivingEntity le ? BooleanValue.of(le.isSwinging()) : Value.NULL);
|
||||||
put("air", (e, a) -> new NumericValue(e.getAirSupply()));
|
put("air", (e, a) -> new NumericValue(e.getAirSupply()));
|
||||||
put("language", (e, a) -> !(e instanceof ServerPlayer p) ? NULL : StringValue.of(p.clientInformation().language()));
|
put("language", (e, a) -> !(e instanceof ServerPlayer p) ? NULL : StringValue.of(p.clientInformation().language()));
|
||||||
put("persistence", (e, a) -> e instanceof Mob mob ? BooleanValue.of(mob.isPersistenceRequired()) : Value.NULL);
|
put("persistence", (e, a) -> e instanceof Mob mob ? BooleanValue.of(mob.isPersistenceRequired()) : Value.NULL);
|
||||||
@@ -1586,7 +1587,7 @@ public class EntityValue extends Value
|
|||||||
hand = InteractionHand.OFF_HAND;
|
hand = InteractionHand.OFF_HAND;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
le.swing(hand, true);
|
le.swing(hand, SwingAnimation.DEFAULT, true);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -1603,7 +1604,7 @@ public class EntityValue extends Value
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
e.setInvulnerable(invulnerable);
|
e.setPermanentlyInvulnerable(invulnerable);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -161,10 +161,10 @@ public class PerimeterDiagnostics
|
|||||||
|
|
||||||
private boolean check_entity_spawn(BlockPos pos)
|
private boolean check_entity_spawn(BlockPos pos)
|
||||||
{
|
{
|
||||||
if (sle == null || !worldServer.getChunkSource().getGenerator().getMobsAt(worldServer.getBiome(pos), worldServer.structureManager(), ctype, pos).unwrap().contains(sle))
|
if (sle == null || !worldServer.getChunkSource().getGenerator().getMobsAt(worldServer, worldServer.structureManager(), ctype, pos).unwrap().contains(sle))
|
||||||
{
|
{
|
||||||
sle = null;
|
sle = null;
|
||||||
for (Weighted<MobSpawnSettings.SpawnerData> wsle: worldServer.getChunkSource().getGenerator().getMobsAt(worldServer.getBiome(pos), worldServer.structureManager(), ctype, pos).unwrap())
|
for (Weighted<MobSpawnSettings.SpawnerData> wsle: worldServer.getChunkSource().getGenerator().getMobsAt(worldServer, worldServer.structureManager(), ctype, pos).unwrap())
|
||||||
{
|
{
|
||||||
MobSpawnSettings.SpawnerData sle = wsle.value();
|
MobSpawnSettings.SpawnerData sle = wsle.value();
|
||||||
if (el.getType() == sle.type())
|
if (el.getType() == sle.type())
|
||||||
@@ -173,7 +173,7 @@ public class PerimeterDiagnostics
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (sle == null || !worldServer.getChunkSource().getGenerator().getMobsAt(worldServer.getBiome(pos), worldServer.structureManager(), ctype, pos).unwrap().contains(sle))
|
if (sle == null || !worldServer.getChunkSource().getGenerator().getMobsAt(worldServer, worldServer.structureManager(), ctype, pos).unwrap().contains(sle))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,6 +9,9 @@ import net.minecraft.resources.ResourceKey;
|
|||||||
import net.minecraft.resources.Identifier;
|
import net.minecraft.resources.Identifier;
|
||||||
import net.minecraft.server.level.ServerLevel;
|
import net.minecraft.server.level.ServerLevel;
|
||||||
import net.minecraft.util.random.WeightedList;
|
import net.minecraft.util.random.WeightedList;
|
||||||
|
import net.minecraft.util.valueproviders.ConstantInt;
|
||||||
|
import net.minecraft.util.valueproviders.IntProvider;
|
||||||
|
import net.minecraft.util.valueproviders.UniformInt;
|
||||||
import net.minecraft.world.entity.EntityTypes;
|
import net.minecraft.world.entity.EntityTypes;
|
||||||
import net.minecraft.world.entity.MobCategory;
|
import net.minecraft.world.entity.MobCategory;
|
||||||
import net.minecraft.world.level.StructureManager;
|
import net.minecraft.world.level.StructureManager;
|
||||||
@@ -32,16 +35,16 @@ public class SpawnOverrides {
|
|||||||
|
|
||||||
static {
|
static {
|
||||||
addOverride(() -> CarpetSettings.huskSpawningInTemples, MobCategory.MONSTER, BuiltinStructures.DESERT_PYRAMID, StructureSpawnOverride.BoundingBoxType.STRUCTURE,
|
addOverride(() -> CarpetSettings.huskSpawningInTemples, MobCategory.MONSTER, BuiltinStructures.DESERT_PYRAMID, StructureSpawnOverride.BoundingBoxType.STRUCTURE,
|
||||||
WeightedList.of(new MobSpawnSettings.SpawnerData(EntityTypes.HUSK, 1, 1))
|
WeightedList.of(new MobSpawnSettings.SpawnerData(EntityTypes.HUSK, ConstantInt.of(1)))
|
||||||
);
|
);
|
||||||
addOverride(() -> CarpetSettings.shulkerSpawningInEndCities, MobCategory.MONSTER, BuiltinStructures.END_CITY, StructureSpawnOverride.BoundingBoxType.PIECE,
|
addOverride(() -> CarpetSettings.shulkerSpawningInEndCities, MobCategory.MONSTER, BuiltinStructures.END_CITY, StructureSpawnOverride.BoundingBoxType.PIECE,
|
||||||
WeightedList.of(new MobSpawnSettings.SpawnerData(EntityTypes.SHULKER, 4, 4))
|
WeightedList.of(new MobSpawnSettings.SpawnerData(EntityTypes.SHULKER, ConstantInt.of(4)))
|
||||||
);
|
);
|
||||||
addOverride(() -> CarpetSettings.piglinsSpawningInBastions, MobCategory.MONSTER, BuiltinStructures.BASTION_REMNANT, StructureSpawnOverride.BoundingBoxType.PIECE,
|
addOverride(() -> CarpetSettings.piglinsSpawningInBastions, MobCategory.MONSTER, BuiltinStructures.BASTION_REMNANT, StructureSpawnOverride.BoundingBoxType.PIECE,
|
||||||
WeightedList.<MobSpawnSettings.SpawnerData>builder()
|
WeightedList.<MobSpawnSettings.SpawnerData>builder()
|
||||||
.add(new MobSpawnSettings.SpawnerData(EntityTypes.PIGLIN_BRUTE,1, 2), 5)
|
.add(new MobSpawnSettings.SpawnerData(EntityTypes.PIGLIN_BRUTE, UniformInt.of(1, 2)), 5)
|
||||||
.add(new MobSpawnSettings.SpawnerData(EntityTypes.PIGLIN, 2, 4), 10)
|
.add(new MobSpawnSettings.SpawnerData(EntityTypes.PIGLIN, UniformInt.of(2, 4)), 10)
|
||||||
.add(new MobSpawnSettings.SpawnerData(EntityTypes.HOGLIN, 1, 2), 2)
|
.add(new MobSpawnSettings.SpawnerData(EntityTypes.HOGLIN, UniformInt.of(1, 2)), 2)
|
||||||
.build()
|
.build()
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -397,7 +397,7 @@ public class SpawnReporter
|
|||||||
|
|
||||||
// yeeted from NaturalSpawner - temporary access fix
|
// yeeted from NaturalSpawner - temporary access fix
|
||||||
private static WeightedList<MobSpawnSettings.SpawnerData> getSpawnEntries(ServerLevel serverLevel, StructureManager structureManager, ChunkGenerator chunkGenerator, MobCategory mobCategory, BlockPos blockPos, @Nullable Holder<Biome> holder) {
|
private static WeightedList<MobSpawnSettings.SpawnerData> getSpawnEntries(ServerLevel serverLevel, StructureManager structureManager, ChunkGenerator chunkGenerator, MobCategory mobCategory, BlockPos blockPos, @Nullable Holder<Biome> holder) {
|
||||||
return NaturalSpawner.isInNetherFortressBounds(blockPos, serverLevel, mobCategory, structureManager) ? NetherFortressStructure.FORTRESS_ENEMIES : chunkGenerator.getMobsAt(holder != null ? holder : serverLevel.getBiome(blockPos), structureManager, mobCategory, blockPos);
|
return NaturalSpawner.isInNetherFortressBounds(blockPos, serverLevel, mobCategory, structureManager) ? NetherFortressStructure.FORTRESS_ENEMIES : chunkGenerator.getMobsAt(serverLevel, structureManager, mobCategory, blockPos);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<Component> report(BlockPos pos, ServerLevel worldIn)
|
public static List<Component> report(BlockPos pos, ServerLevel worldIn)
|
||||||
@@ -492,7 +492,7 @@ public class SpawnReporter
|
|||||||
{
|
{
|
||||||
String color = (fits && willSpawn > 0) ? "e" : "gi";
|
String color = (fits && willSpawn > 0) ? "e" : "gi";
|
||||||
rep.add(Messenger.c(
|
rep.add(Messenger.c(
|
||||||
String.format("%s %s: %s (%d:%d-%d/%d), can: ", color, categoryCode, mobTypeName, weight, spawnEntry.minCount(), spawnEntry.maxCount(), mob.getMaxSpawnClusterSize()),
|
String.format("%s %s: %s (%d:%d-%d/%d), can: ", color, categoryCode, mobTypeName, weight, spawnEntry.count().minInclusive(), spawnEntry.count().maxInclusive(), mob.getMaxSpawnClusterSize()),
|
||||||
"l YES",
|
"l YES",
|
||||||
color + " , fit: ",
|
color + " , fit: ",
|
||||||
(fits ? "l YES" : "r NO"),
|
(fits ? "l YES" : "r NO"),
|
||||||
@@ -502,7 +502,7 @@ public class SpawnReporter
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
rep.add(Messenger.c(String.format("gi %s: %s (%d:%d-%d/%d), can: ", categoryCode, mobTypeName, weight, spawnEntry.minCount(), spawnEntry.maxCount(), mob.getMaxSpawnClusterSize()), "n NO"));
|
rep.add(Messenger.c(String.format("gi %s: %s (%d:%d-%d/%d), can: ", categoryCode, mobTypeName, weight, spawnEntry.count().minInclusive(), spawnEntry.count().maxInclusive(), mob.getMaxSpawnClusterSize()), "n NO"));
|
||||||
}
|
}
|
||||||
killEntity(mob);
|
killEntity(mob);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in new issue
Block a user