consistency

This commit is contained in:
gnembon committed 2019-05-19 09:47:55 -03:00
1 parent a4d97b1875
commit 78739b3a2c
3 files changed
+53 -55

No files matched your search

+21 -14
View File
@@ -9,17 +9,17 @@ import com.mojang.brigadier.CommandDispatcher;
import com.mojang.brigadier.arguments.BoolArgumentType; import com.mojang.brigadier.arguments.BoolArgumentType;
import com.mojang.brigadier.builder.LiteralArgumentBuilder; import com.mojang.brigadier.builder.LiteralArgumentBuilder;
import com.mojang.brigadier.exceptions.CommandSyntaxException; import com.mojang.brigadier.exceptions.CommandSyntaxException;
import com.mojang.brigadier.exceptions.SimpleCommandExceptionType;
import net.minecraft.command.arguments.BlockPosArgumentType; import net.minecraft.command.arguments.BlockPosArgumentType;
import net.minecraft.command.arguments.DimensionArgumentType; import net.minecraft.command.arguments.DimensionArgumentType;
import net.minecraft.entity.EntityCategory; import net.minecraft.entity.EntityCategory;
import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.util.DyeColor;
import net.minecraft.server.command.ServerCommandSource; import net.minecraft.server.command.ServerCommandSource;
import net.minecraft.util.DyeColor;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.world.dimension.DimensionType; import net.minecraft.world.dimension.DimensionType;
import java.util.Arrays; import java.util.Arrays;
import java.util.Objects;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import static com.mojang.brigadier.arguments.IntegerArgumentType.getInteger; import static com.mojang.brigadier.arguments.IntegerArgumentType.getInteger;
@@ -102,6 +102,16 @@ public class SpawnCommand
dispatcher.register(literalargumentbuilder); dispatcher.register(literalargumentbuilder);
} }
private static EntityCategory getCategory(String string) throws CommandSyntaxException
{
if (!Arrays.stream(EntityCategory.values()).map(EntityCategory::getName).collect(Collectors.toSet()).contains(string))
{
throw new SimpleCommandExceptionType(Messenger.c("r Wrong mob type: "+string+" should be "+ Arrays.stream(EntityCategory.values()).map(EntityCategory::getName).collect(Collectors.joining(", ")))).create();
}
return EntityCategory.valueOf(string.toUpperCase());
}
private static int listSpawns(ServerCommandSource source, BlockPos pos) private static int listSpawns(ServerCommandSource source, BlockPos pos)
{ {
Messenger.send(source, SpawnReporter.report(pos, source.getWorld())); Messenger.send(source, SpawnReporter.report(pos, source.getWorld()));
@@ -153,14 +163,10 @@ public class SpawnCommand
return 1; return 1;
} }
private static int recentSpawnsForType(ServerCommandSource source, String mob_type) private static int recentSpawnsForType(ServerCommandSource source, String mob_type) throws CommandSyntaxException
{ {
if (!Arrays.stream(EntityCategory.values()).map(EntityCategory::getName).collect(Collectors.toSet()).contains(mob_type)) EntityCategory cat = getCategory(mob_type);
{ Messenger.send(source, SpawnReporter.recent_spawns(source.getWorld(), cat));
Messenger.m(source, "r Wrong mob type: "+mob_type+" should be "+ Arrays.stream(EntityCategory.values()).map(EntityCategory::getName).collect(Collectors.joining(", ")));
return 0;
}
Messenger.send(source, SpawnReporter.recent_spawns(source.getWorld(), EntityCategory.valueOf(mob_type.toUpperCase())));
return 1; return 1;
} }
@@ -233,10 +239,10 @@ public class SpawnCommand
return 1; return 1;
} }
private static int setSpawnRates(ServerCommandSource source, String mobtype, int rounds) private static int setSpawnRates(ServerCommandSource source, String mobtype, int rounds) throws CommandSyntaxException
{ {
String code = SpawnReporter.get_creature_code_from_string(mobtype); EntityCategory cat = getCategory(mobtype);
//SpawnReporter.spawn_tries.put(code, rounds); SpawnReporter.spawn_tries.put(cat, rounds);
Messenger.m(source, "gi "+mobtype+" mobs will now spawn "+rounds+" times per tick"); Messenger.m(source, "gi "+mobtype+" mobs will now spawn "+rounds+" times per tick");
return 1; return 1;
} }
@@ -255,9 +261,10 @@ public class SpawnCommand
return 1; return 1;
} }
private static int listEntitiesOfType(ServerCommandSource source, String mobtype) private static int listEntitiesOfType(ServerCommandSource source, String mobtype) throws CommandSyntaxException
{ {
Messenger.send(source, SpawnReporter.printEntitiesByType(EntityCategory.valueOf(mobtype.toUpperCase()), source.getWorld())); EntityCategory cat = getCategory(mobtype);
Messenger.send(source, SpawnReporter.printEntitiesByType(cat, source.getWorld()));
return 1; return 1;
} }
} }
@@ -1,6 +1,5 @@
package carpet.mixins; package carpet.mixins;
import carpet.CarpetSettings;
import carpet.utils.SpawnReporter; import carpet.utils.SpawnReporter;
import it.unimi.dsi.fastutil.objects.Object2IntMap; import it.unimi.dsi.fastutil.objects.Object2IntMap;
import net.minecraft.entity.EntityCategory; import net.minecraft.entity.EntityCategory;
@@ -18,7 +17,6 @@ import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.ModifyConstant;
import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.Redirect;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.spongepowered.asm.mixin.injection.callback.LocalCapture; import org.spongepowered.asm.mixin.injection.callback.LocalCapture;
@@ -97,7 +95,7 @@ public abstract class ServerChunkManagerMixin
private int getNewMobcaps(EntityCategory entityCategory) private int getNewMobcaps(EntityCategory entityCategory)
{ {
DimensionType dim = this.world.dimension.getType(); DimensionType dim = this.world.dimension.getType();
int newCap = entityCategory.getSpawnCap()*(int)(Math.pow(2.0,(SpawnReporter.mobcap_exponent/4))); int newCap = (int) ((double)entityCategory.getSpawnCap()*(Math.pow(2.0,(SpawnReporter.mobcap_exponent/4))));
if (SpawnReporter.track_spawns > 0L) if (SpawnReporter.track_spawns > 0L)
{ {
int int_2 = SpawnReporter.chunkCounts.get(dim); // eligible chunks for spawning int int_2 = SpawnReporter.chunkCounts.get(dim); // eligible chunks for spawning
+31 -38
View File
@@ -1,47 +1,37 @@
package carpet.utils; package carpet.utils;
import java.util.HashSet;
import java.util.List;
import java.util.ArrayList;
import java.util.HashMap;
import carpet.CarpetSettings;
import carpet.mixins.WeightedPickerEntryMixin; import carpet.mixins.WeightedPickerEntryMixin;
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
import it.unimi.dsi.fastutil.objects.Object2IntMap; import it.unimi.dsi.fastutil.objects.Object2IntMap;
import it.unimi.dsi.fastutil.objects.Object2LongMap; import it.unimi.dsi.fastutil.objects.Object2LongMap;
import it.unimi.dsi.fastutil.objects.Object2LongOpenHashMap; import it.unimi.dsi.fastutil.objects.Object2LongOpenHashMap;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityCategory;
import net.minecraft.entity.EntityType; import net.minecraft.entity.EntityType;
import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.SpawnRestriction;
import net.minecraft.entity.SpawnType; import net.minecraft.entity.SpawnType;
import net.minecraft.entity.mob.MobEntity; import net.minecraft.entity.mob.MobEntity;
import net.minecraft.server.world.ServerChunkManager; import net.minecraft.entity.passive.OcelotEntity;
import net.minecraft.server.world.ServerWorld;
import net.minecraft.structure.OceanMonumentGenerator;
import net.minecraft.util.registry.Registry;
import net.minecraft.network.chat.BaseComponent; import net.minecraft.network.chat.BaseComponent;
import net.minecraft.world.World; import net.minecraft.server.world.ServerWorld;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.DyeColor; import net.minecraft.util.DyeColor;
import net.minecraft.util.math.BlockPos;
import net.minecraft.entity.EntityCategory;
import net.minecraft.world.biome.Biome;
import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.MathHelper;
import net.minecraft.util.registry.Registry;
import net.minecraft.world.Heightmap;
import net.minecraft.world.SpawnHelper;
import net.minecraft.world.World;
import net.minecraft.world.biome.Biome;
import net.minecraft.world.chunk.Chunk; import net.minecraft.world.chunk.Chunk;
import net.minecraft.world.dimension.DimensionType; import net.minecraft.world.dimension.DimensionType;
import net.minecraft.world.SpawnHelper;
import net.minecraft.entity.SpawnRestriction;
import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.Entity;
import net.minecraft.entity.passive.OcelotEntity;
import net.minecraft.world.Heightmap;
import net.minecraft.world.gen.chunk.ChunkGenerator; import net.minecraft.world.gen.chunk.ChunkGenerator;
import org.apache.commons.lang3.tuple.Pair; import org.apache.commons.lang3.tuple.Pair;
import java.lang.Math; import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
public class SpawnReporter public class SpawnReporter
{ {
@@ -111,7 +101,7 @@ public class SpawnReporter
for (EntityCategory enumcreaturetype : EntityCategory.values()) for (EntityCategory enumcreaturetype : EntityCategory.values())
{ {
int cur = dimCounts.getOrDefault(enumcreaturetype, -1); int cur = dimCounts.getOrDefault(enumcreaturetype, -1);
int max = chunkcount * enumcreaturetype.getSpawnCap() / (int)Math.pow(17.0D, 2.0D); // from ServerChunkManager.CHUNKS_ELIGIBLE_FOR_SPAWNING int max = chunkcount * (int)((double)enumcreaturetype.getSpawnCap() * (Math.pow(2.0,(SpawnReporter.mobcap_exponent/4)))) / (int)Math.pow(17.0D, 2.0D); // from ServerChunkManager.CHUNKS_ELIGIBLE_FOR_SPAWNING
String color = Messenger.heatmap_color(cur, max); String color = Messenger.heatmap_color(cur, max);
String mobColor = Messenger.creatureTypeColor(enumcreaturetype); String mobColor = Messenger.creatureTypeColor(enumcreaturetype);
if (multiline) if (multiline)
@@ -160,8 +150,10 @@ public class SpawnReporter
for (Pair<EntityType, BlockPos> pair : spawned_mobs.get(Pair.of(world.getDimension().getType(),creature_type)).keySet()) for (Pair<EntityType, BlockPos> pair : spawned_mobs.get(Pair.of(world.getDimension().getType(),creature_type)).keySet())
{ {
lst.add( Messenger.c( lst.add( Messenger.c(
String.format("w - %s ", Registry.ENTITY_TYPE.getId(pair.getLeft()).toString().replaceFirst("minecraft.","")), "w - ",
Messenger.tp("wb",pair.getRight()))); Messenger.tp("wb",pair.getRight()),
String.format("w : %s", EntityType.getId(pair.getLeft()).toString().replaceFirst("minecraft.",""))
));
} }
if (lst.size()==1) if (lst.size()==1)
@@ -261,20 +253,21 @@ public class SpawnReporter
return get_type_string(get_creature_type_from_code(str)); return get_type_string(get_creature_type_from_code(str));
} }
public static List<BaseComponent> printEntitiesByType(EntityCategory type, World worldIn) //Class<?> entityType) public static List<BaseComponent> printEntitiesByType(EntityCategory cat, World worldIn) //Class<?> entityType)
{ {
CarpetSettings.LOG.error("\n\n\nprinting spawnlist\n\n\n");
List<BaseComponent> lst = new ArrayList<>(); List<BaseComponent> lst = new ArrayList<>();
Class<?> cls = type.getDeclaringClass();// getBaseClass();// getCreatureClass(); lst.add( Messenger.s(String.format("Loaded entities for %s class:", get_type_string(cat))));
lst.add( Messenger.s(String.format("Loaded entities for %s class:", get_type_string(type)))); for (Entity entity : ((ServerWorld)worldIn).getEntities(null, (e) -> e.getType().getCategory()==cat))
lst.add(Messenger.s(" <sorry, this list will be populated, once M figures out what counts>"));
for (Entity entity : ((ServerWorld)worldIn).getEntities(null, (e) -> e.getType().getCategory()==type))
{ {
if (!(entity instanceof MobEntity) || !((MobEntity)entity).isPersistent()) if (!(entity instanceof MobEntity) || !((MobEntity)entity).isPersistent())
{ {
lst.add(Messenger.c("w - ", EntityType type = entity.getType();
Messenger.tp("w", entity.x, entity.y, entity.z),"w : "+EntityType.getId(entity.getType()).toString().replaceFirst("minecraft.",""))); BlockPos pos = entity.getBlockPos();
lst.add( Messenger.c(
"w - ",
Messenger.tp("wb",pos),
String.format("w : %s", EntityType.getId(type).toString().replaceFirst("minecraft.",""))
));
} }
} }
if (lst.size()==1) if (lst.size()==1)