Jump to content

t_h0e

Members
  • Posts

    12
  • Joined

  • Last visited

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

t_h0e's Achievements

Tree Puncher

Tree Puncher (2/8)

1

Reputation

  1. @Cadiboo You should definitely message a forum moderator to get your link pinned as a thread! I think many people would be appreciative.
  2. Very useful, thank you It turns out when I called this function: public static void registerDimensions() { DimensionManager.registerDimension(new ResourceLocation(Main.MOD_ID, "sr_dimension"), SUN_REALM_DIMENSION, null, true); } It was called by my main function which runs events fired on the MOD bus, not the FORGE bus. I ended up creating a new function per this link in your collection https://gist.github.com/Commoble/ac7d7b57c9cbbfcae310c4ab110c3cc0: @EventBusSubscriber(modid="yourmodid", bus=Bus.FORGE) public class CommonForgeEventHandler { public static final ResourceLocation DIMENSION_TYPE_RL = new ResourceLocation("yourmodid", "yourdimension"); @SubscribeEvent public static void onRegisterDimensionsEvent(RegisterDimensionsEvent event) { ... //registerDimensions called here } }
  3. I am trying to register a dimension I created, but it doesn't show up in game when I build my mod (via /forge dimensions). I pieced together my code using several other references from similar threads and it seems like I have done everything correctly, so I am not exactly sure why it's not working. Here is where I register my dimension in my Main class. @SubscribeEvent public static void registerDimensions(final RegisterDimensionsEvent event) { ModDimensions.registerDimensions(); } @SubscribeEvent public static void registerModDimensions(final RegistryEvent.Register<ModDimension> event) { event.getRegistry().registerAll ( ModDimensions.SUN_REALM_DIMENSION ); LOGGER.info("Mod dimensions registered."); } Here is where my dimension is initialized. public class ModDimensions { //Mod Dimensions public static final ModDimensionType SUN_REALM_DIMENSION = new ModDimensionType(new ResourceLocation(Main.MOD_ID, "sr_dimension")); //Dimension Types //public static DimensionType SUN_REALM; public static void registerDimensions() { DimensionManager.registerDimension(new ResourceLocation(Main.MOD_ID, "sr_dimension"), SUN_REALM_DIMENSION, null, true); } } Here is my ModDimension class. public class ModDimensionType extends ModDimension { public ModDimensionType(final ResourceLocation registryName) { this.setRegistryName(registryName); } public static DimensionType getDimensionType() { return DimensionType.byName(new ResourceLocation(Main.MOD_ID, "sr_dimension")); } @Override public BiFunction<World, DimensionType, ? extends Dimension> getFactory() { return SunRealmDimension::new; } } My Dimension class is basically just scrapped reusing existing biomes and chunk generation: public class SunRealmDimension extends Dimension { public static final BlockPos SPAWN = new BlockPos(100, 50, 0);; public SunRealmDimension(final World worldIn, final DimensionType dimension) { super(worldIn, dimension, 1.0F); } @Override public ChunkGenerator<?> createChunkGenerator() { EndGenerationSettings sunrealmgensettings = (EndGenerationSettings) ChunkGeneratorType.FLOATING_ISLANDS.createSettings(); sunrealmgensettings.setDefaultBlock(Blocks.COBBLESTONE.getDefaultState()); sunrealmgensettings.setDefaultFluid(Blocks.WATER.getDefaultState()); sunrealmgensettings.setSpawnPos(this.getSpawnCoordinate()); return ChunkGeneratorType.FLOATING_ISLANDS.create(this.world, BiomeProviderType.FIXED.create(BiomeProviderType.FIXED.func_226840_a_(this.world.getWorldInfo()).setBiome(Biomes.BADLANDS)), sunrealmgensettings); } @Override public float calculateCelestialAngle(final long p_76563_1_, final float p_76563_3_) { return 0.0f; } @Override @Nullable @OnlyIn(Dist.CLIENT) public float[] calcSunriseSunsetColors(final float p_76560_1_, final float p_76560_2_) { return null; } @Override @OnlyIn(Dist.CLIENT) public Vec3d getFogColor(final float p_76562_1_, final float p_76562_2_) { float f = MathHelper.cos(p_76562_1_ * 6.2831855f) * 2.0f + 0.5f; f = MathHelper.clamp(f, 0.0f, 1.0f); float f2 = 0.7529412f; float f3 = 0.84705883f; float f4 = 1.0f; f2 *= f * 0.94f + 0.06f; f3 *= f * 0.94f + 0.06f; f4 *= f * 0.91f + 0.09f; return new Vec3d((double) f2, (double) f3, (double) f4); } @OnlyIn(Dist.CLIENT) public Vec3d getSkyColor(final BlockPos pos, final float flo) { final float f = this.world.getCelestialAngle(flo); float f2 = MathHelper.cos(f * 6.2831855f) * 2.0f + 0.5f; f2 = MathHelper.clamp(f2, 0.0f, 1.0f); final int i = ForgeHooksClient.getSkyBlendColour(this.world, pos); float f3 = (i >> 16 & 0xFF) / 255.0f; float f4 = (i >> 8 & 0xFF) / 255.0f; float f5 = (i & 0xFF) / 255.0f; f3 *= f2; f4 *= f2; f5 *= f2; return new Vec3d((double) f3, (double) f4, (double) f5); } @Override public boolean hasSkyLight() { return true; } @Override @OnlyIn(Dist.CLIENT) public boolean isSkyColored() { return true; } @Override public boolean canRespawnHere() { return false; } @Override public boolean isSurfaceWorld() { return false; } @Override @OnlyIn(Dist.CLIENT) public float getCloudHeight() { return 8.0f; } @Override @Nullable public BlockPos findSpawn(final ChunkPos p_206920_1_, final boolean p_206920_2_) { final Random random = new Random(this.world.getSeed()); final BlockPos blockpos = new BlockPos(p_206920_1_.getXStart() + random.nextInt(15), 0, p_206920_1_.getZEnd() + random.nextInt(15)); return this.world.getGroundAboveSeaLevel(blockpos).getMaterial().blocksMovement() ? blockpos : null; } @Override public BlockPos getSpawnCoordinate() { return SunRealmDimension.SPAWN; } @Override @Nullable public BlockPos findSpawn(final int p_206921_1_, final int p_206921_2_, final boolean p_206921_3_) { return this.findSpawn(new ChunkPos(p_206921_1_ >> 4, p_206921_2_ >> 4), p_206921_3_); } @Override @OnlyIn(Dist.CLIENT) public boolean doesXZShowFog(final int p_76568_1_, final int p_76568_2_) { return false; } @Override public void onWorldSave() { final CompoundNBT compoundnbt = new CompoundNBT(); this.world.getWorldInfo().setDimensionData(this.world.getDimension().getType(), compoundnbt); } } Any help would be greatly appreciated.
  4. Is there a way to delete and then recreate the MOD_ID-server.toml and MOD_ID-client.toml config files while building? I noticed that they are not refreshed and the old default entry values persist. I could see how this could be useful, but is there a way to delete these files automatically instead of going into run/config and deleting them manually?
  5. So I need to perform the calculation on the server, I think I got it. Thanks
  6. Oh, so Minecraft#objectMouseOver is a server side method, so I just need to write a similar method for the client?
  7. Well, I believe I need to learn more about how to send network packets between the logical sides, because that is something I am not familiar with at all. It's unfortunate that a solely single player mod needs to be that complicated due to minecraft's design.
  8. GameRenderer.GetMouseOver() returns void. Is there something else I should be using, or do I have to create my own raytracing method?
  9. When I use this code, I receive no message at all. I read another post that said RayTraceResult does not return entities because it is the same as World::RayTraceBlocks, however I'm not sure if that's why I'm receiving nothing at all. @Override public boolean itemInteractionForEntity(ItemStack stackIn, PlayerEntity playerIn, LivingEntity livingIn, Hand handIn) { RayTraceResult rtr = this.rayTrace(playerIn.world, playerIn, RayTraceContext.FluidMode.NONE); if (rtr.getType() == RayTraceResult.Type.ENTITY) { EntityRayTraceResult ertr = (EntityRayTraceResult) m.objectMouseOver; playerIn.sendMessage(ertr.getEntity().getName()); return true; } }
  10. Thanks for the help! I got it working by changing the method to itemInteractionForEntity after a bit of tweaking. I believe onItemRightClick is called too many times for how I am applying it. @Override public boolean itemInteractionForEntity(ItemStack stackIn, PlayerEntity playerIn, LivingEntity livingIn, Hand handIn) { if (m.objectMouseOver.getType() == RayTraceResult.Type.ENTITY) { EntityRayTraceResult ertr = (EntityRayTraceResult) m.objectMouseOver; playerIn.sendMessage(ertr.getEntity().getName()); return true; } else return false; }
  11. Hmm, Ok. What field tell me which object (if any) was hit from a RayTraceResult? Also I believe I am serializing my string into an ITextComponent wrong. Is my best option to just implement ITextComponent in my own method?
  12. I added my crash log to the original post. You were spot on about the NullPointerException but I'm not sure what is causing it.
  13. I'm currently working on a method for a custom item that will print information in the chat about what is being looked at by the player. I am using the onItemRightClick method, but my game crashes when this code is ran: @Override public ActionResult<ItemStack> onItemRightClick(World worldIn, PlayerEntity playerIn, Hand handIn) { RayTraceResult rtr = this.rayTrace(worldIn, playerIn, RayTraceContext.FluidMode.NONE); playerIn.sendMessage(ITextComponent.Serializer.fromJson(rtr.hitInfo.toString())); return onItemRightClick(worldIn, playerIn, handIn); } There are multiple parts of this snippet that I am very uncertain about, so it wouldn't surprise me if I am doing more than one thing wrong ?. Any advice would be much appreciated. EDIT: Updated my code as well as added crash log crash-2019-08-04_12.45.37-client.txt
×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.