Jump to content
Search In
  • More options...
Find results that contain...
Find results in...

cookiedragon234

Members
  • Content Count

    38
  • Joined

  • Last visited

  • Days Won

    1

Posts posted by cookiedragon234

  1. Im not sure whether that would produce s spectrum allowing a significant amount of colour choices. Also in order to save the users chosen colour, I need to take the colour where they click. With a buffered image I can just do getRgb at the position they clicked, but with your method Im not sure how I would do that.

  2. Hi

     

    I am trying to create a colour picker gui element, which displays the HSV colour space, with the x and y axis representing Saturation and Value, and a separate slider for hue and alpha.

     

    Something like this is the goal:

    Image result for hsv colour picker

     

    This is my code so far:

    	final Minecraft mc = Minecraft.getMinecraft();
    	final BufferedImage bufferedImage = new BufferedImage(100,100, TYPE_INT_ARGB);
    	final DynamicTexture dynamicTexture = new DynamicTexture(bufferedImage);
    	ResourceLocation dynamicResource;
    	
    	private int hue = 1;
    	private float alpha = 1;
    
    
    	@Override
    	public void render(Vec2f mousePos)
    	{
    		for (int x = 0; x < bufferedImage.getWidth(); x++)
    		{
    			for (int y = 0; y < bufferedImage.getHeight(); y++)
    			{
    				float xPercent = x / 100;
    				float yPercent = y / 100;
    				Color c = ColourUtils.hsvToRgb(hue, xPercent, yPercent, alpha);
    				bufferedImage.setRGB(x, y, c.getRGB());
    			}
    		}
    		
    		GlStateManager.color(1,1,1,1);
    		GlStateManager.enableTexture2D();
    		bufferedImage.getRGB(0, 0, bufferedImage.getWidth(), bufferedImage.getHeight(), dynamicTexture.getTextureData(), 0, bufferedImage.getWidth());
    		dynamicTexture.updateDynamicTexture();
    		//mc.getTextureManager().loadTexture(dynamicResource, dynamicTexture);
    		dynamicResource = mc.getTextureManager().getDynamicTextureLocation("background", this.dynamicTexture);
    		RenderUtils.drawTextureAt((int) position.x, (int) position.y, 100, 100, dynamicResource);
    		mc.getTextureManager().deleteTexture(dynamicResource);
        }

    Which does not work, it simply displays a white square.

     

    Does anyone know how to render a dynamic texture or a buffered image to the screen?

  3. Uh I dont completely get what that code is doing, but it didn't work anyway. I am experimenting with achieving this using GlScaled but running into some small problems. If anyone else has managed to do this with glscaled I would appreciate an example. I will post my code if I finish it and get it working.

  4. That is the correct way to do it ;)

     

    This is my code

     

    @Mixin(value = AbstractClientPlayer.class)
    public abstract class MixinAbstractClientPlayer extends MixinEntityPlayer
    {
    	@Shadow
    	@Nullable
    	protected abstract NetworkPlayerInfo getPlayerInfo();
        @Inject(method = "hasSkin", at = @At("RETURN"), cancellable = true)
    	public void hasSkin(CallbackInfoReturnable<Boolean> cir)
    	{
    		PlayerSkin.HasSkin event = new PlayerSkin.HasSkin(getPlayerInfo(), cir.getReturnValue());
    		MinecraftForge.EVENT_BUS.post(event);
    		cir.setReturnValue(event.result);
    	}
    	
    	@Inject(method = "getLocationSkin()Lnet/minecraft/util/ResourceLocation;", at = @At("RETURN"), cancellable = true)
    	public void getSkin(CallbackInfoReturnable<ResourceLocation> cir)
    	{
    		PlayerSkin.GetSkin event = new PlayerSkin.GetSkin(getPlayerInfo(), cir.getReturnValue());
    		MinecraftForge.EVENT_BUS.post(event);
    		cir.setReturnValue(event.skinLocation);
    	}
    }

     

    • Thanks 1
  5. I wrote the following code to resize a string until it fits within the specified width:

    	public int drawStringClamped(String text, float x, float y, float width, int color)
    	{
    		int original = fontRenderer.FONT_HEIGHT;
    		
    		while (getStringWidth(text) > width && fontRenderer.FONT_HEIGHT > 0)
    		{
    			fontRenderer.FONT_HEIGHT--;
    		}
    		
    		int out = drawString(text, x, y, color);
    		
    		fontRenderer.FONT_HEIGHT = original;
    		
    		return out;
    	}

    This however does not work as the `getStringWidth` function does not take into account the string height! Is there an alternative way to do this? Or potentially to get the string width while taking into account its height. Thanks.

     

  6. Does anyone know of a function to convert coordinates in 3d space into 2d space? An example usage for this would be drawing text on the users screen over a 3d position, obviously the location of the text logically is in 3d space, however for it to be rendered it must be rendered in 2d. An example of this already happening in the vanilla game is name tags, however I tried to use the EntityRenderer.drawNameplate function and this did nothing, the text simply did not show up. I tried running the function on world render as well as on ui render.

     

    If anyone knows of a function that can allow me to draw items on the screen in 2d over a 3d target, I would really appreciate it. Thanks.

  7. 7 hours ago, DavidM said:

    IIRC LivingDeathEvent do trigger on the client side (unless you are using 1.14, in which case the client trigger of some events are not added yet).

    It seems to fire for mobs but not players after more testing. I managed to solve this by using the AttackEntityEvent along with some other hacky mechanics.

  8. 8 hours ago, Animefan8888 said:

    Huh I wonder who gave you advice you just ignored.

    Yes, and the mixin I just described is mixing into the netty networkmanager. I know its netty because when printing from the network manager it tells me that it is in the "netty" thread. I did dig into the code, and I found the class from which packets are sent and recieved, so I made a mixin to intercept the function calls.

  9. 11 hours ago, DaemonUmbra said:

    Because the best case for checking server tickrate would be to make your mod check the tickrate on the server side and send that info to your mod on the client side.

     I don't understand this fascination with manipulating vanilla packets when having a server component of your mod is far safer and more reliable.

    The mod is designed to be client side only

  10. 5 minutes ago, DaemonUmbra said:

    Best thing would be to not mess with it at all, may I ask why you need to interact with Vanilla packets?

    Scroll up. Also I don’t understand why me literally offering helpful advice to other people coming across this is met with “that’s a shit method” and “don’t mess with it at all”. Like geez, if you know a better way then feel free to contribute, but simply getting complaining isn’t contributing anything.

    • Like 1
  11. I'm wondering if there is anyway to trigger an action when the client kills another player? The LivingDeathEvent seems to be only server side. Is there an equivalent client side event which is triggered on a player death and allows me to check whether the damage source is from the client? Or is there maybe a packet that is sent upon a players death? Thanks.

  12. For anyone else looking for this in the future, create mixins for net.minecraft.network.NetworkManager like so:

    @Inject(method = "sendPacket(Lnet/minecraft/network/Packet;)V", at = @At("HEAD"), cancellable = true)
    private void onSendPacket(Packet<?> packet, CallbackInfo callbackInfo)
    {
    	//System.out.println("Packet Sent: " + packet.toString());
    	PacketSent event = new PacketSent(packet);
    	MinecraftForge.EVENT_BUS.post(event);
    	if (event.isCanceled() && callbackInfo.isCancellable())
    	{
    		callbackInfo.cancel();
    	}
    	packet = event.packet;
    }
    	
    @Inject(method = "channelRead0", at = @At("HEAD"), cancellable = true)
    private void onChannelRead(ChannelHandlerContext context, Packet<?> packet, CallbackInfo callbackInfo)
    {
    	//System.out.println("Packet Recieved: " + packet.toString());
    	PacketRecieved event = new PacketRecieved(packet);
    	MinecraftForge.EVENT_BUS.post(event);
    	if (event.isCanceled() && callbackInfo.isCancellable())
    	{
    		callbackInfo.cancel();
    	}
    	packet = event.packet;
    }

    PacketSent and PacketRecieved are custom events that you can make yourself by making a class that extends Event.

    • Like 2
  13. Found a fix for anyone else with this issue.

     

    In build.gradle change:

    dependencies {
    	compile("org.spongepowered:mixin:0.7.4-SNAPSHOT")
    }

    to

    dependencies {
    	compile("org.spongepowered:mixin:0.7.4-SNAPSHOT") {
            exclude module: 'launchwrapper'
            exclude module: 'guava'
            exclude module: 'gson'
            exclude module: 'commons-io'
        }
    }

     

  14. 5 minutes ago, Animefan8888 said:

    They are using 1.12.2

     

    How did you setup your workspace.

    Yep, I tried setting up a mods.toml and that didn't make any difference because I think thats for 1.14.

     

    I don't understand what you mean by how did I setup my workspace. I imported build.gradle in IntelliJ IDEA, and ran the commands that the documentation provided to set it up.

     

    This is my build.gradle:

    
    buildscript {
        repositories {
            jcenter()
            maven {
                url = "http://files.minecraftforge.net/maven"
            }
            maven {
                name = 'SpongePowered'
                url = 'http://repo.spongepowered.org/maven'
            }
        }
        dependencies {
            classpath 'net.minecraftforge.gradle:ForgeGradle:2.3-SNAPSHOT'
            classpath 'org.spongepowered:mixingradle:0.4-SNAPSHOT'
        }
    }
    apply plugin: 'net.minecraftforge.gradle.forge'
    apply plugin: 'org.spongepowered.mixin'
    
    sourceSets {
        main {
            ext.refMap = "mixins.mod.refmap.json"
        }
    }
    
    jar {
        manifest.attributes(
                'TweakClass': 'org.spongepowered.asm.launch.MixinTweaker',
                'MixinConfigs': 'mixins.mod.json',
                'FMLCorePluginContainsFMLMod': 'true',
                'tweakClass': 'org.spongepowered.asm.launch.MixinTweaker',
                'TweakOrder': 0,
                'FMLCorePlugin': 'com.mod.mixin.LoadingPlugin',
                'ForceLoadAsMod': 'true'
        )
    }
    //Only edit below this line, the above code adds and enables the necessary things for Forge to be setup.
    
    
    version = "0.1"
    group = "com.mod.mod" // http://maven.apache.org/guides/mini/guide-naming-conventions.html
    archivesBaseName = "mod"
    
    sourceCompatibility = targetCompatibility = '1.8' // Need this here so eclipse task generates correctly.
    compileJava {
        sourceCompatibility = targetCompatibility = '1.8'
    }
    
    mixin {
        add sourceSets.main, "mixins.mod.refmap.json"
    }
    
    
    minecraft {
        version = "1.12.2-14.23.1.2584"
        runDir = "run"
    
        // the mappings can be changed at any time, and must be in the following format.
        // snapshot_YYYYMMDD   snapshot are built nightly.
        // stable_#            stables are built at the discretion of the MCP team.
        // Use non-default mappings at your own risk. they may not always work.
        // simply re-run your setup task after changing the mappings to update your workspace.
        mappings = 'snapshot_20180106'
        makeObfSourceJar = false // an Srg named sources jar is made by default. uncomment this to disable.
    
        def args = ["-Dfml.coreMods.load=com.mod.mixin.LoadingPlugin"]
    
        clientJvmArgs.addAll(args)
        serverJvmArgs.addAll(args)
    }
    
    repositories {
        maven {
            name = 'spongepowered-repo'
            url = 'http://repo.spongepowered.org/maven/'
        }
        mavenCentral()
    
        flatDir {
            dirs 'libs'
        }
    }
    
    dependencies {
        // you may put jars on which you depend on in ./libs
        // or you may define them like so..
        //compile "some.group:artifact:version:classifier"
        //compile "some.group:artifact:version"
    
        // real examples
        //compile 'com.mod-buildcraft:buildcraft:6.0.8:dev'  // adds buildcraft to the dev env
        //compile 'com.googlecode.efficient-java-matrix-library:ejml:0.24' // adds ejml to the dev env
    
        // the 'provided' configuration is for optional dependencies that exist at compile-time but might not at runtime.
        //provided 'com.mod-buildcraft:buildcraft:6.0.8:dev'
    
        // the deobf configurations:  'deobfCompile' and 'deobfProvided' are the same as the normal compile and provided,
        // except that these dependencies get remapped to your current MCP mappings
        //deobfCompile 'com.mod-buildcraft:buildcraft:6.0.8:dev'
        //deobfProvided 'com.mod-buildcraft:buildcraft:6.0.8:dev'
    
        // for more info...
        // http://www.gradle.org/docs/current/userguide/artifact_dependencies_tutorial.html
        // http://www.gradle.org/docs/current/userguide/dependency_management.html
    
        compile("org.spongepowered:mixin:0.7.4-SNAPSHOT") {
            exclude module: 'launchwrapper'
            exclude module: 'guava'
            exclude module: 'gson'
            exclude module: 'commons-io'
        }
    
        implementation files('libs/java-discord-rpc-2.0.1-all.jar')
    }
    
    processResources {
        // this will ensure that this task is redone when the versions change.
        inputs.property "version", project.version
        inputs.property "mcversion", project.minecraft.version
    
        // replace stuff in mcmod.info, nothing else
        from(sourceSets.main.resources.srcDirs) {
            include 'mcmod.info'
    
            // replace version and mcversion
            expand 'version': project.version, 'mcversion': project.minecraft.version
        }
    
        // copy everything else except the mcmod.info
        from(sourceSets.main.resources.srcDirs) {
            exclude 'mcmod.info'
        }
    }

     

    Its very confusing as it seemed to be running from the client fine last week.

  15. When running the task runClient the actual mod is not loaded even though Minecraft starts up without any errors.

     

    I believe that these lines from the log could be part of it:

    [12:32:17] [main/INFO] [FML]: -- System Details --
    Details:
    	Minecraft Version: 1.12.2
    	Operating System: Windows 10 (amd64) version 10.0
    	Java Version: 1.8.0_211, Oracle Corporation
    	Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation
    	Memory: 409724112 bytes (390 MB) / 739770368 bytes (705 MB) up to 3808428032 bytes (3632 MB)
    	JVM Flags: 0 total; 
    	IntCache: cache: 0, tcache: 0, allocated: 0, tallocated: 0
    	FML: 
    	Loaded coremods (and transformers): 
    LoadingPlugin (mod-0.1.jar)
      
    	GL info: ' Vendor: 'NVIDIA Corporation' Version: '4.6.0 NVIDIA 419.17' Renderer: 'GeForce GTX 1080/PCIe/SSE2'
    [12:32:17] [main/INFO] [FML]: MinecraftForge v14.23.1.2584 Initialized
    [12:32:17] [main/INFO] [FML]: Starts to replace vanilla recipe ingredients with ore ingredients.
    [12:32:18] [main/INFO] [FML]: Replaced 1036 ore ingredients
    [12:32:18] [main/INFO] [FML]: Found 0 mods from the command line. Injecting into mod discoverer
    [12:32:18] [main/INFO] [FML]: Searching D:\[path to project]\run\mods for mods
    [12:32:19] [main/INFO] [FML]: Forge Mod Loader has identified 4 mods to load
    [12:32:19] [main/INFO] [FML]: Attempting connection with missing mods [minecraft, mcp, FML, forge] at CLIENT
    [12:32:19] [main/INFO] [FML]: Attempting connection with missing mods [minecraft, mcp, FML, forge] at SERVER

     

    It seems to detect the mixins but not the actual mod itself.

     

    Would really appreciate any help! I can build the client just fine, it's just some issue with my gradle configuration Im guessing.

  16. 1 hour ago, diesieben07 said:

    There is no need for coremodding to get packet events to work.

    It's not just packet events. And this topic wasn't really asking for advice on whether to use mixins. Me and my team already have a design that relies on mixins. Id really appreciate it if you could give me any advice on why it doesnt seem to be able to find the guava library? Is there a way I can download it manually perhaps?

  17. 8 minutes ago, DaemonUmbra said:

    So you want to be able to mess with packets that aren't yours?

    Mess is an interesting choice of word, I would say to allow the user to modify/monitor certain packets, for example adding a server tickrate counter to the HUD based on the frequency of server update packets received, or prevent the server from sending rotation packets in order to prevent the annoying rotation rubberbanding that can sometimes happen during lag.

×
×
  • Create New...

Important Information

By using this site, you agree to our Privacy Policy.