Skip to content
Simplified Java Byte- and source-code transformation and mapping
Branch: develop
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.circleci
bytecode
common
mapping-csv
mapping-mcp
sourcecode
testing-harness
.gitattributes
.gitignore
LICENSE
README.md
pom.xml

README.md

License Maven Central GitHub Release CircleCI

Plunger

A modern source code and bytecode transformation library with built-in support for name and access mappings.

Table of Contents

Features

  • Bytecode and Sourcecode level transformation
  • Comprehensive API
  • Built-in support for Mapping
  • Various standard transformers

Usage

Artifact Coordinates: org.basinmc:plunger:3.0
JavaDoc: Bytecode | Sourcecode | Common | CSV Mapping | MCP Mapping

<dependency>
  <groupId>org.basinmc</groupId>
  <artifactId>plunger</artifactId>
  <version>3.0</version>
</dependency>

<!-- For unstable releases: -->
<repository>
  <id>ossrh</id>
  <url>https://oss.sonatype.org/content/repositories/snapshots</url>
  
  <snapshots>
    <enabled>true</enabled>
  </snapshots>
</repository>

<dependency>
  <groupId>org.basinmc</groupId>
  <artifactId>plunger</artifactId>
  <version>2.0-SNAPSHOT</version>
</dependency>

The library differentiates between two different main modes: Bytecode and Sourcecode where each provides its unique set of transformers. For instance:

Path source = ...;
Path target = ...;
AccessMapping mapping = ...;

Plunger plunger = BytecodePlunger.builder()
  .withTransformer(new AccessMappingBytecodeTransformer(mapping))
  .build(source, target);

// or

Plunger plunger = SourcecodePlunger.builder()
  .withTransformer(new AccessMappingSourcecodeTransformer(mapping))
  .build(source, target);

// both provide:
plunger.apply();

Note that the source and target paths may be located in any type of NIO filesystem (including the jar file system). For your convenience, Plunger includes the factory methods Plunger#openZipArchive(Path) and Plunger#createZipArchive(Path).

Building

  1. Clone this repository via git clone https://github.com/BasinMC/Plunger.git or download a zip
  2. Build the library by running mvn clean install
  3. The resulting jars can be found in their respective target directories as well as your local maven repository

Contact

Issues

You encountered problems with the library or have a suggestion? Create an issue!

  1. Make sure your issue has not been fixed in a newer version (check the list of closed issues
  2. Create a new issue from the issues page
  3. Enter your issue's title (something that summarizes your issue) and create a detailed description containing:
    • What is the expected result?
    • What problem occurs?
    • How to reproduce the problem?
    • Crash Log (Please use a Pastebin service)
  4. Click "Submit" and wait for further instructions

Contributing

Before you add any major changes to the library you may want to discuss them with us (see Contact) as we may choose to reject your changes for various reasons. All contributions are applied via Pull-Requests. Patches will not be accepted. Also be aware that all of your contributions are made available under the terms of the Apache License 2.0. Please read the Contribution Guidelines for more information.

License

This project is released under the terms of the Apache License, Version 2.0.

The following note shall be replicated by all contributors within their respective newly created files (variables are to be replaced; E-Mail address or URL are optional):

Copyright <year> <first name> <surname <[email address/url]>
and other copyright owners as documented in the project's IP log.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.